Commit 801c4faa authored by Alexander.Trofimov's avatar Alexander.Trofimov Committed by Alexander.Trofimov

Поправил баг с рассчетом высоты для пустой ячейки. Для этого вынес в отдельную...

Поправил баг с рассчетом высоты для пустой ячейки. Для этого вынес в отдельную функцию изменение высоты строки.
Баг http://bugzserver/show_bug.cgi?id=25484

git-svn-id: svn://192.168.3.15/activex/AVS/Sources/TeamlabOffice/trunk/OfficeWeb@57379 954022d7-b5bf-4e40-9824-e11837661b57
parent 22329528
...@@ -454,7 +454,7 @@ ...@@ -454,7 +454,7 @@
* Measures string * Measures string
* @param {String|Array} str A simple string or array of formatted strings {text:"", format:{}} * @param {String|Array} str A simple string or array of formatted strings {text:"", format:{}}
* @param {Object} flags Optional. Text flags {wrapText, shrinkToFit, isMerged, textAlign} * @param {Object} flags Optional. Text flags {wrapText, shrinkToFit, isMerged, textAlign}
* @param {Number} maxWidth Optional. Text width restriction * @param {Number} [maxWidth] Optional. Text width restriction
* @return {Asc.TextMetrics} Returns text metrics or null. @see Asc.TextMetrics * @return {Asc.TextMetrics} Returns text metrics or null. @see Asc.TextMetrics
*/ */
StringRender.prototype.measureString = function(str, flags, maxWidth) { StringRender.prototype.measureString = function(str, flags, maxWidth) {
......
...@@ -4262,6 +4262,8 @@ ...@@ -4262,6 +4262,8 @@
this.handlers.trigger("reinitializeScrollY"); this.handlers.trigger("reinitializeScrollY");
} }
var str, tm, isMerged = false, strCopy;
// Range для замерженной ячейки // Range для замерженной ячейки
var fl = this._getCellFlags(c); var fl = this._getCellFlags(c);
var mc = fl.merged; var mc = fl.merged;
...@@ -4273,9 +4275,22 @@ ...@@ -4273,9 +4275,22 @@
fMergedColumns = true; fMergedColumns = true;
if (mc.r1 !== mc.r2) if (mc.r1 !== mc.r2)
fMergedRows = true; fMergedRows = true;
isMerged = true;
} }
if (this._isCellEmptyTextString(c)) {return mc ? mc.c2 : col;} if (this._isCellEmptyTextString(c)) {
// Пустая ячейка с измененной гарнитурой или размером, учитвается в высоте
str = c.getValue2();
if (0 < str.length) {
// Без текста не будет толка
strCopy = [str[0].clone()];
strCopy[0].text = 'A';
tm = this._roundTextMetrics(this.stringRender.measureString(strCopy, fl));
this._updateRowHeight(tm, col, row, isMerged, fMergedRows);
}
return mc ? mc.c2 : col;
}
var dDigitsCount = 0; var dDigitsCount = 0;
var colWidth = 0; var colWidth = 0;
...@@ -4332,12 +4347,11 @@ ...@@ -4332,12 +4347,11 @@
} }
// ToDo dDigitsCount нужно рассчитывать исходя не из дефалтового шрифта и размера, а исходя из текущего шрифта и размера ячейки // ToDo dDigitsCount нужно рассчитывать исходя не из дефалтового шрифта и размера, а исходя из текущего шрифта и размера ячейки
var isMerged = fl.isMerged(); str = c.getValue2(dDigitsCount, makeFnIsGoodNumFormat(fl, colWidth));
var str = c.getValue2(dDigitsCount, makeFnIsGoodNumFormat(fl, colWidth));
var ha = c.getAlignHorizontalByValue().toLowerCase(); var ha = c.getAlignHorizontalByValue().toLowerCase();
var va = c.getAlignVertical().toLowerCase(); var va = c.getAlignVertical().toLowerCase();
var maxW = fl.wrapText || fl.shrinkToFit || isMerged || asc.isFixedWidthCell(str) ? this._calcMaxWidth(col, row, mc) : undefined; var maxW = fl.wrapText || fl.shrinkToFit || isMerged || asc.isFixedWidthCell(str) ? this._calcMaxWidth(col, row, mc) : undefined;
var tm = this._roundTextMetrics( this.stringRender.measureString(str, fl, maxW) ); tm = this._roundTextMetrics( this.stringRender.measureString(str, fl, maxW) );
var angle = c.getAngle(); var angle = c.getAngle();
var cto = (isMerged || fl.wrapText) ? var cto = (isMerged || fl.wrapText) ?
{ {
...@@ -4356,8 +4370,7 @@ ...@@ -4356,8 +4370,7 @@
} }
} }
var oFontColor = c.getFontcolor(); var oFontColor = c.getFontcolor();
var rowInfo = this.rows[row]; var rowHeight = this.rows[row].height;
var rowHeight = rowInfo.height;
var textBound = {}; var textBound = {};
if (angle) { if (angle) {
...@@ -4413,15 +4426,23 @@ ...@@ -4413,15 +4426,23 @@
this._addErasedBordersToCache(col - cto.leftSide, col + cto.rightSide, row); this._addErasedBordersToCache(col - cto.leftSide, col + cto.rightSide, row);
} }
// update row's descender this._updateRowHeight(tm, col, row, isMerged, fMergedRows, va, ha, maxW, colWidth, angle, textBound);
if (va !== kvaTop && va !== kvaCenter && !isMerged) {
return mc ? mc.c2 : col;
};
WorksheetView.prototype._updateRowHeight = function (tm, col, row, isMerged, fMergedRows, va, ha, angle,
maxW, colWidth, textBound) {
var rowInfo = this.rows[row], rowHeight;
// update row's descender
if (va !== kvaTop && va !== kvaCenter && !isMerged) {
rowInfo.descender = Math.max(rowInfo.descender, tm.height - tm.baseline); rowInfo.descender = Math.max(rowInfo.descender, tm.height - tm.baseline);
} }
rowHeight = rowInfo.height; rowHeight = rowInfo.height;
// update row's height // update row's height
if (!rowInfo.isCustomHeight) { if (!rowInfo.isCustomHeight) {
// Замерженная ячейка (с 2-мя или более строками) не влияет на высоту строк! // Замерженная ячейка (с 2-мя или более строками) не влияет на высоту строк!
if (!fMergedRows) { if (!fMergedRows) {
var newHeight = tm.height; var newHeight = tm.height;
...@@ -4431,7 +4452,8 @@ ...@@ -4431,7 +4452,8 @@
} }
} }
rowInfo.heightReal = rowInfo.height = Math.min(this.maxRowHeight, Math.max(rowInfo.height, newHeight)); rowInfo.heightReal = rowInfo.height = Math.min(this.maxRowHeight,
Math.max(rowInfo.height, newHeight));
if (rowHeight !== rowInfo.height) { if (rowHeight !== rowInfo.height) {
if (!rowInfo.isDefaultHeight) { if (!rowInfo.isDefaultHeight) {
this.model.setRowHeight(rowInfo.height + this.height_1px, row, row); this.model.setRowHeight(rowInfo.height + this.height_1px, row, row);
...@@ -4439,16 +4461,15 @@ ...@@ -4439,16 +4461,15 @@
if (angle) { if (angle) {
this._fetchCellCache(col, row).text.textBound = this._fetchCellCache(col, row).text.textBound =
this.stringRender.getTransformBound(angle, 0, 0, colWidth, rowInfo.height, tm.width, ha, va, maxW); this.stringRender.getTransformBound(angle, 0, 0, colWidth, rowInfo.height, tm.width,
ha, va, maxW);
} }
this.isChanged = true; this.isChanged = true;
} }
} }
} }
};
return mc ? mc.c2 : col;
};
WorksheetView.prototype._calcMaxWidth = function (col, row, mc) { WorksheetView.prototype._calcMaxWidth = function (col, row, mc) {
if (null === mc) {return this.cols[col].innerWidth;} if (null === mc) {return this.cols[col].innerWidth;}
......
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