Commit 15f716d5 authored by Alexander.Trofimov's avatar Alexander.Trofimov Committed by Alexander.Trofimov

Заглушка для safari (http://bugzserver/show_bug.cgi?id=25546). Режим 'copy'...

Заглушка для safari (http://bugzserver/show_bug.cgi?id=25546). Режим 'copy' сначала затирает, а потом рисует (а т.к. мы рисуем сами на себе, то уже картинка будет пустой)

git-svn-id: svn://192.168.3.15/activex/AVS/Sources/TeamlabOffice/trunk/OfficeWeb@57443 954022d7-b5bf-4e40-9824-e11837661b57
parent ed213142
......@@ -507,6 +507,30 @@
return this.units;
};
DrawingContext.prototype.moveImageDataSafari = function (sx, sy, w, h, x, y) {
var sr = this._calcRect(sx, sy, w, h);
var r = this._calcRect(x, y);
var imgData = this.ctx.getImageData(sr.x, sr.y, sr.w, sr.h);
var minX, maxX, minY, maxY;
if (sx < x) {
minX = sr.x;
maxX = r.x;
} else {
minX = r.x;
maxX = sr.x;
}
if (sy < y) {
minY = sr.y;
maxY = r.y;
} else {
minY = r.y;
maxY = sr.y;
}
this.ctx.clearRect(minX, minY, maxX + sr.w, maxY + sr.h);
this.ctx.putImageData(imgData, r.x, r.y);
return this;
};
DrawingContext.prototype.moveImageData = function (sx, sy, w, h, x, y) {
var sr = this._calcRect(sx, sy, w, h);
var r = this._calcRect(x, y);
......
......@@ -453,7 +453,7 @@
/**
* Measures string
* @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
* @return {Asc.TextMetrics} Returns text metrics or null. @see Asc.TextMetrics
*/
......
......@@ -1287,12 +1287,10 @@
/**
* Вычисляет ширину столбца в пунктах
* @param {Number} mcw Количество символов
* @param {Boolean} displayWidth При расчете использовать целое число пикселов
* @returns {Number} Ширина столбца в пунктах (pt)
*/
WorksheetView.prototype._modelColWidthToColWidth = function (mcw, displayWidth) {
var maxw = displayWidth ? asc_round(this.maxDigitWidth) : this.maxDigitWidth;
var px = asc_floor( (( 256 * mcw + asc_floor(128 / maxw) ) / 256) * maxw );
WorksheetView.prototype._modelColWidthToColWidth = function (mcw) {
var px = asc_floor(((256 * mcw + asc_floor(128 / this.maxDigitWidth)) / 256) * this.maxDigitWidth);
return px * asc_getcvt( 0/*px*/, 1/*pt*/, 96 );
};
......@@ -5257,13 +5255,25 @@
var moveHeight = oldH - lastRowHeight;
if (moveHeight > 0) {
ctx.drawImage(ctx.getCanvas(), x, y, oldW, moveHeight, x + dx, y - dy, oldW, moveHeight);
this.drawingGraphicCtx.moveImageData(x, y, oldW, moveHeight, x + dx, y - dy);
// Заглушка для safari (http://bugzserver/show_bug.cgi?id=25546). Режим 'copy' сначала затирает, а
// потом рисует (а т.к. мы рисуем сами на себе, то уже картинка будет пустой)
if (AscBrowser.isSafari)
this.drawingGraphicCtx.moveImageDataSafari(x, y, oldW, moveHeight, x + dx, y - dy);
else
this.drawingGraphicCtx.moveImageData(x, y, oldW, moveHeight, x + dx, y - dy);
} else {
// Scroll на весь экран отрабатываем для Safari
if (AscBrowser.isSafari)
this.drawingGraphicCtx.clear();
}
var clearTop = y + (scrollDown ? moveHeight - dy : 0);
moveHeight = Math.abs(dy) + lastRowHeight;
ctx.setFillStyle(this.settings.cells.defaultState.background)
.fillRect(this.headersLeft, clearTop, ctxW, moveHeight);
this.drawingGraphicCtx.clearRect(this.headersLeft, clearTop, ctxW, moveHeight);
if (!AscBrowser.isSafari)
this.drawingGraphicCtx.clearRect(this.headersLeft, clearTop, ctxW, moveHeight);
if(this.objectRender && this.objectRender.drawingArea)
this.objectRender.drawingArea.reinitRanges();
......@@ -5381,14 +5391,26 @@
var moveWidth = oldW - lastColWidth;
if (moveWidth > 0) {
ctx.drawImage(ctx.getCanvas(), x, y, moveWidth, ctxH, x - dx, y, moveWidth, ctxH);
this.drawingGraphicCtx.moveImageData(x, y, moveWidth, ctxH, x - dx, y);
// Заглушка для safari (http://bugzserver/show_bug.cgi?id=25546). Режим 'copy' сначала затирает, а
// потом рисует (а т.к. мы рисуем сами на себе, то уже картинка будет пустой)
if (AscBrowser.isSafari)
this.drawingGraphicCtx.moveImageDataSafari(x, y, moveWidth, ctxH, x - dx, y);
else
this.drawingGraphicCtx.moveImageData(x, y, moveWidth, ctxH, x - dx, y);
} else {
// Scroll на весь экран отрабатываем для Safari
if (AscBrowser.isSafari)
this.drawingGraphicCtx.clear();
}
var clearLeft = x + (scrollRight > 0 ? moveWidth - dx : 0);
moveWidth = Math.abs(dx) + lastColWidth;
ctx.setFillStyle(this.settings.cells.defaultState.background)
.fillRect(clearLeft, y, moveWidth, ctxH);
this.drawingGraphicCtx.clearRect(clearLeft, y, moveWidth, ctxH);
if (!AscBrowser.isSafari)
this.drawingGraphicCtx.clearRect(clearLeft, y, moveWidth, ctxH);
if(this.objectRender && this.objectRender.drawingArea)
this.objectRender.drawingArea.reinitRanges();
......
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