Commit b033cf85 authored by Alexander.Trofimov's avatar Alexander.Trofimov Committed by Alexander.Trofimov

Теперь на charCount у нас не влияет zoom (на 100% мы совапдаем с Excel, но на...

Теперь на charCount у нас не влияет zoom (на 100% мы совапдаем с Excel, но на zoom возможны отклонения на одном столбце на 1px (т.к. они делают перевод в px и округляют, а только потом рисуют))
максимальная ширина теперь также не зависит от zoom
При zoom теперь не прыгает ширина столбца (на получение ширины)
ToDo нужно на zoom не делать пересчет данных сетки

git-svn-id: svn://192.168.3.15/activex/AVS/Sources/TeamlabOffice/trunk/OfficeWeb@47711 954022d7-b5bf-4e40-9824-e11837661b57
parent 95e2b4b1
...@@ -393,9 +393,7 @@ ...@@ -393,9 +393,7 @@
//---member declaration--- //---member declaration---
// Максимальная ширина числа из 0,1,2...,9, померенная в нормальном шрифте(дефалтовый для книги) в px(целое) // Максимальная ширина числа из 0,1,2...,9, померенная в нормальном шрифте(дефалтовый для книги) в px(целое)
// Ecma-376 Office Open XML Part 1, пункт 18.3.1.13 // Ecma-376 Office Open XML Part 1, пункт 18.3.1.13
this.maxDigitWidthBase = maxDigitWidth; this.maxDigitWidth = maxDigitWidth;
this.emSize = this.maxDigitWidthBase * asc_getcvt(0/*px*/, 1/*pt*/, this._getPPIX());
this.maxDigitWidth = 0;
this.nBaseColWidth = 8; // Число символов для дефалтовой ширины (по умолчинию 8) this.nBaseColWidth = 8; // Число символов для дефалтовой ширины (по умолчинию 8)
this.defaultColWidthChars = 0; this.defaultColWidthChars = 0;
...@@ -1134,12 +1132,20 @@ ...@@ -1134,12 +1132,20 @@
}, },
_initWorksheetDefaultWidth: function () { _initWorksheetDefaultWidth: function () {
this.nBaseColWidth = this.model.nBaseColWidth || this.nBaseColWidth; this.nBaseColWidth = this.model.nBaseColWidth || this.nBaseColWidth;
// Теперь рассчитываем число px для (ToDo переделать на функции, а не писать одинаковые формулы) // Теперь рассчитываем число px
var defaultColWidthChars = asc_floor((this.nBaseColWidth * this.maxDigitWidthBase + 5.0) / this.maxDigitWidthBase * 256) / 256; var defaultColWidthChars = this._charCountToModelColWidth(this.nBaseColWidth);
var defaultColWidthPx = asc_floor(((256 * defaultColWidthChars + asc_floor(128 / this.maxDigitWidthBase)) / 256) * this.maxDigitWidthBase); this.defaultColWidthPx = this._modelColWidthToColWidth(defaultColWidthChars) * asc_getcvt(1/*pt*/, 0/*px*/, 96);
// Делаем кратным 8 (http://support.microsoft.com/kb/214123) // Делаем кратным 8 (http://support.microsoft.com/kb/214123)
defaultColWidthPx = asc_ceil(defaultColWidthPx / 8) * 8; this.defaultColWidthPx = asc_ceil(this.defaultColWidthPx / 8) * 8;
this.defaultColWidthChars = asc_floor((defaultColWidthPx - 5) / asc_round(this.maxDigitWidthBase) * 100 + 0.5) / 100; this.defaultColWidthChars = this._colWidthToCharCount(this.defaultColWidthPx * asc_getcvt(0/*px*/, 1/*pt*/, 96));
gc_dDefaultColWidthCharsAttribute = this._charCountToModelColWidth(this.defaultColWidthChars, true);
this.defaultColWidth = this._modelColWidthToColWidth(gc_dDefaultColWidthCharsAttribute);
// ToDo разобраться со значениями
this.maxRowHeight = asc_calcnpt( 409, this._getPPIY() );
this.defaultRowDescender = this._calcRowDescender(this.settings.cells.fontSize);
this.defaultRowHeight = asc_calcnpt( this.settings.cells.fontSize * this.vspRatio, this._getPPIY() ) + this.height_1px;
}, },
_initCellsArea: function (fullRecalc) { _initCellsArea: function (fullRecalc) {
this.width_1px = asc_calcnpt(0, this._getPPIX(), 1/*px*/); this.width_1px = asc_calcnpt(0, this._getPPIX(), 1/*px*/);
...@@ -1150,23 +1156,6 @@ ...@@ -1150,23 +1156,6 @@
this.height_2px = asc_calcnpt(0, this._getPPIY(), 2/*px*/); this.height_2px = asc_calcnpt(0, this._getPPIY(), 2/*px*/);
this.height_3px = asc_calcnpt(0, this._getPPIY(), 3/*px*/); this.height_3px = asc_calcnpt(0, this._getPPIY(), 3/*px*/);
// ToDo неправильно, что maxDigitWidth постоянно пересчитывается в зависимости от PPIX (переделать)
//this.maxDigitWidth = this.emSize * asc_getcvt( 1/*pt*/, 0/*px*/, this._getPPIX() );
this.maxDigitWidth = this.maxDigitWidthBase * this.drawingCtx.scaleFactor;
gc_dDefaultColWidthCharsAttribute = this._charCountToModelColWidth(this.defaultColWidthChars, true);
this.defaultColWidth = this._modelColWidthToColWidth(gc_dDefaultColWidthCharsAttribute);
this.displayColWidth = this._modelColWidthToColWidth(gc_dDefaultColWidthCharsAttribute, true);
this.maxRowHeight = asc_calcnpt( 409, this._getPPIY() );
// ToDo разобраться со значениями
// if (this.printMode) {
// this.defaultRowHeight = asc_round( this.settings.cells.fontSize * this.vspRatio );
// } else {
this.defaultRowHeight = asc_calcnpt( this.settings.cells.fontSize * this.vspRatio, this._getPPIY() ) + this.height_1px;
// }
this.defaultRowDescender = this._calcRowDescender(this.settings.cells.fontSize);
// calculate rows heights and visible rows // calculate rows heights and visible rows
this.headersTop = 0; this.headersTop = 0;
this._calcHeaderRowHeight(); this._calcHeaderRowHeight();
...@@ -1208,7 +1197,7 @@ ...@@ -1208,7 +1197,7 @@
_modelColWidthToColWidth: function (mcw, displayWidth) { _modelColWidthToColWidth: function (mcw, displayWidth) {
var maxw = displayWidth ? asc_round(this.maxDigitWidth) : this.maxDigitWidth; var maxw = displayWidth ? asc_round(this.maxDigitWidth) : this.maxDigitWidth;
var px = asc_floor( (( 256 * mcw + asc_floor(128 / maxw) ) / 256) * maxw ); var px = asc_floor( (( 256 * mcw + asc_floor(128 / maxw) ) / 256) * maxw );
return px * asc_getcvt( 0/*px*/, 1/*pt*/, this._getPPIX() ); return px * asc_getcvt( 0/*px*/, 1/*pt*/, 96 );
}, },
/** /**
...@@ -1217,8 +1206,7 @@ ...@@ -1217,8 +1206,7 @@
* @returns {Number} Количество символов * @returns {Number} Количество символов
*/ */
_colWidthToCharCount: function (w) { _colWidthToCharCount: function (w) {
// ToDo у нас CharCount меняется от zoom (он не должен меняться!) var px = w * asc_getcvt( 1/*pt*/, 0/*px*/, 96 );
var px = w * asc_getcvt( 1/*pt*/, 0/*px*/, this._getPPIX() );
return px <= 5 ? 0 : asc_floor( (px - 5) / asc_round(this.maxDigitWidth) * 100 + 0.5 ) / 100; return px <= 5 ? 0 : asc_floor( (px - 5) / asc_round(this.maxDigitWidth) * 100 + 0.5 ) / 100;
}, },
...@@ -1234,8 +1222,7 @@ ...@@ -1234,8 +1222,7 @@
var width; var width;
res.width = useDefault ? t.defaultColWidth : (width = t._modelColWidthToColWidth(w), (width < t.width_1px ? 0 : width)); res.width = useDefault ? t.defaultColWidth : (width = t._modelColWidthToColWidth(w), (width < t.width_1px ? 0 : width));
res.innerWidth = Math.max(res.width - this.width_padding * 2 - this.width_1px, 0); res.innerWidth = Math.max(res.width - this.width_padding * 2 - this.width_1px, 0);
var displayWidth = useDefault ? t.displayColWidth : (width = t._modelColWidthToColWidth(w, true), (width < t.width_1px ? 0 : width)); res.charCount = t._colWidthToCharCount(res.width);
res.charCount = t._colWidthToCharCount(displayWidth);
return res; return res;
}, },
...@@ -1250,14 +1237,22 @@ ...@@ -1250,14 +1237,22 @@
/** Вычисляет ширину колонки заголовков (в pt) */ /** Вычисляет ширину колонки заголовков (в pt) */
_calcHeaderColumnWidth: function () { _calcHeaderColumnWidth: function () {
var w = this.emSize * Math.max( calcDecades(this.visibleRange.r2 + 1), 3) * 1.25; // Ширина колонки заголовков считается - max число знаков в строке - перевести в символы - перевести в пикселы
this.headersWidth = asc_calcnpt(w, this._getPPIX()); var numDigit = Math.max( calcDecades(this.visibleRange.r2 + 1), 3);
var nCharCount = this._charCountToModelColWidth(numDigit);
this.headersWidth = this._modelColWidthToColWidth(nCharCount);
//var w = this.emSize * Math.max( calcDecades(this.visibleRange.r2 + 1), 3) * 1.25;
//this.headersWidth = asc_calcnpt(w, this._getPPIX());
this.cellsLeft = this.headersLeft + this.headersWidth; this.cellsLeft = this.headersLeft + this.headersWidth;
}, },
/** Вычисляет высоту строки заголовков (в pt) */ /** Вычисляет высоту строки заголовков (в pt) */
_calcHeaderRowHeight: function () { _calcHeaderRowHeight: function () {
this.headersHeight = asc_calcnpt( this.settings.header.fontSize * this.vspRatio, this._getPPIY() ); this.headersHeight = this.model.getDefaultHeight() || this.defaultRowHeight;
//this.headersHeight = asc_calcnpt( this.settings.header.fontSize * this.vspRatio, this._getPPIY() );
this.cellsTop = this.headersTop + this.headersHeight; this.cellsTop = this.headersTop + this.headersHeight;
}, },
...@@ -1338,7 +1333,7 @@ ...@@ -1338,7 +1333,7 @@
h = h < 0 ? defaultH : h; h = h < 0 ? defaultH : h;
this.rows[i] = { this.rows[i] = {
top: y, top: y,
height: asc_calcnpt(h, this._getPPIY()), height: h,
descender: this.defaultRowDescender, descender: this.defaultRowDescender,
isCustomHeight: isCustomHeight, isCustomHeight: isCustomHeight,
isDefaultHeight: !(row && row.h > 0 && isCustomHeight) // Высота строки, вычисленная на основе текста isDefaultHeight: !(row && row.h > 0 && isCustomHeight) // Высота строки, вычисленная на основе текста
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment