Commit 7d51fb98 authored by Dmitry.Vikulov's avatar Dmitry.Vikulov Committed by Alexander.Trofimov

Кэш графических объектов при скролах

git-svn-id: svn://192.168.3.15/activex/AVS/Sources/TeamlabOffice/trunk/OfficeWeb@53163 954022d7-b5bf-4e40-9824-e11837661b57
parent 6bd48f41
...@@ -285,7 +285,8 @@ asc_CChart.prototype = { ...@@ -285,7 +285,8 @@ asc_CChart.prototype = {
return Math.min( 255, ((255 - val) * percent + val) >> 0 ); return Math.min( 255, ((255 - val) * percent + val) >> 0 );
else else
return Math.max( 0, (val * (1 + percent)) >> 0 ); return Math.max( 0, (val * (1 + percent)) >> 0 );
}, },
_generateColor: function (oColor, percent) { _generateColor: function (oColor, percent) {
return new CColor(this._generateColorPart(oColor.r, percent), return new CColor(this._generateColorPart(oColor.r, percent),
this._generateColorPart(oColor.g, percent), this._generateColorPart(oColor.b, percent)); this._generateColorPart(oColor.g, percent), this._generateColorPart(oColor.b, percent));
...@@ -1520,11 +1521,11 @@ prot["asc_setUnderline"] = prot.asc_setUnderline; ...@@ -1520,11 +1521,11 @@ prot["asc_setUnderline"] = prot.asc_setUnderline;
//----------------------------------------------------------------------------------- //-----------------------------------------------------------------------------------
function asc_CChartSeria() { function asc_CChartSeria() {
this.Val = { Formula: null, NumCache: [] }; this.Val = { Formula: "", NumCache: [] };
this.xVal = { Formula: null, NumCache: [] }; this.xVal = { Formula: "", NumCache: [] };
this.Cat = { Formula: null, NumCache: [] }; this.Cat = { Formula: "", NumCache: [] };
this.TxCache = { Formula: null, Tx: null }; this.TxCache = { Formula: "", Tx: "" };
this.Marker = { Size: null, Symbol: null }; this.Marker = { Size: 0, Symbol: "" };
this.OutlineColor = null; this.OutlineColor = null;
this.FormatCode = ""; this.FormatCode = "";
this.isHidden = false; this.isHidden = false;
...@@ -2446,6 +2447,38 @@ prot["asc_getIndex"] = prot.asc_getIndex; ...@@ -2446,6 +2447,38 @@ prot["asc_getIndex"] = prot.asc_getIndex;
//----------------------------------------------------------------------------------- //-----------------------------------------------------------------------------------
// Manager // Manager
//----------------------------------------------------------------------------------- //-----------------------------------------------------------------------------------
function ScrollGraphicObject(ws, type, delta) {
this.ws = ws;
this.type = type;
this.delta = delta; // + Down || - Up
this.getUpdatedRange = function() {
var vr = this.ws.visibleRange.clone();
if ( this.delta === 0 )
return vr;
if ( this.type === c_oAscScrollType.Vertical ) {
// Down
if ( this.delta > 0 )
vr.r1 = vr.r2 - this.delta;
// Up
else
vr.r2 = vr.r1 - this.delta;
}
else if ( this.type === c_oAscScrollType.Horizontal ) {
// Right
if ( this.delta > 0 )
vr.c1 = vr.c2 - this.delta;
// Left
else
vr.c2 = vr.c1 - this.delta;
}
return vr;
}
}
function Exception(error) { function Exception(error) {
var err = error; var err = error;
...@@ -2478,7 +2511,7 @@ function DrawingObjects() { ...@@ -2478,7 +2511,7 @@ function DrawingObjects() {
var asc_Range = asc.Range; var asc_Range = asc.Range;
var chartRender = null; var chartRender = null;
if( typeof ChartRender !== "undefined" ) if ( typeof ChartRender !== "undefined" )
chartRender = new ChartRender(); chartRender = new ChartRender();
var worksheet = null; var worksheet = null;
...@@ -2513,12 +2546,12 @@ function DrawingObjects() { ...@@ -2513,12 +2546,12 @@ function DrawingObjects() {
function drawTaskFunction() { function drawTaskFunction() {
// При скролах нужно выполнить все задачи
var taskLen = aDrawTasks.length; var taskLen = aDrawTasks.length;
if ( taskLen ) { if ( taskLen ) {
var lastTask = aDrawTasks[taskLen - 1];
//console.log("Task count = " + taskLen); _this.showDrawingObjectsEx(lastTask.params.clearCanvas, lastTask.params.scrollType, lastTask.params.printOptions);
_this.showDrawingObjectsEx(aDrawTasks[taskLen - 1].params[0], aDrawTasks[taskLen - 1].params[1]);
aDrawTasks.splice(0, (taskLen - 1 > 0) ? taskLen - 1 : 1); aDrawTasks.splice(0, (taskLen - 1 > 0) ? taskLen - 1 : 1);
} }
} }
...@@ -2542,7 +2575,7 @@ function DrawingObjects() { ...@@ -2542,7 +2575,7 @@ function DrawingObjects() {
_t.size = { width: 0, height: 0 }; _t.size = { width: 0, height: 0 };
_t.graphicObject = null; // CImage, CShape, GroupShape or CChartAsGroup _t.graphicObject = null; // CImage, CShape, GroupShape or CChartAsGroup
_t.flags = { _t.flags = {
anchorUpdated: false, anchorUpdated: false,
lockState: c_oAscLockTypes.kLockTypeNone lockState: c_oAscLockTypes.kLockTypeNone
...@@ -2624,18 +2657,28 @@ function DrawingObjects() { ...@@ -2624,18 +2657,28 @@ function DrawingObjects() {
} }
// Проверяет выход за границы // Проверяет выход за границы
_t.inVisibleArea = function() { _t.inVisibleArea = function(scrollType) {
var result = true; var result = true;
var fvc, fvr, lvc, lvr;
var fvc = _t.worksheet.getFirstVisibleCol();
var fvr = _t.worksheet.getFirstVisibleRow();
var lvc = _t.worksheet.getLastVisibleCol();
var lvr = _t.worksheet.getLastVisibleRow();
var checker = _this.getBoundsChecker(_t); var checker = _this.getBoundsChecker(_t);
var coords = _this.getBoundsCheckerCoords(checker); var coords = _this.getBoundsCheckerCoords(checker);
if ( coords ) { if ( coords ) {
if ( (fvr > coords.to.row + 1) || (lvr < coords.from.rom - 1) || (fvc > coords.to.col + 1) || (lvc < coords.from.col - 1) ) if ( scrollType ) {
var updatedRange = scrollType.getUpdatedRange();
fvc = updatedRange.c1;
fvr = updatedRange.r1;
lvc = updatedRange.c2;
lvr = updatedRange.r2;
}
else {
fvc = _t.worksheet.getFirstVisibleCol();
fvr = _t.worksheet.getFirstVisibleRow();
lvc = _t.worksheet.getLastVisibleCol();
lvr = _t.worksheet.getLastVisibleRow();
}
if ( (fvr >= coords.to.row + 1) || (lvr <= coords.from.row - 1) || (fvc >= coords.to.col + 1) || (lvc <= coords.from.col - 1) )
result = false; result = false;
} }
...@@ -3363,18 +3406,25 @@ function DrawingObjects() { ...@@ -3363,18 +3406,25 @@ function DrawingObjects() {
// Drawing objects // Drawing objects
//----------------------------------------------------------------------------------- //-----------------------------------------------------------------------------------
_this.showDrawingObjects = function(clearCanvas, printOptions) { _this.showDrawingObjects = function(clearCanvas, scrollType, printOptions) {
var currDate = new Date(); var currDate = new Date();
var currTime = currDate.getTime(); var currTime = currDate.getTime();
if ( aDrawTasks.length ) { if ( aDrawTasks.length ) {
if ( currTime - aDrawTasks[aDrawTasks.length - 1].time < 40 )
var lastTask = aDrawTasks[aDrawTasks.length - 1];
if ( lastTask.params.scrollType && scrollType && (lastTask.params.scrollType.type === scrollType.type) ) {
lastTask.params.scrollType.delta += scrollType.delta;
return;
}
if ( (currTime - lastTask.time < 40) )
return; return;
} }
aDrawTasks.push( { time: currTime, params: [clearCanvas, printOptions] } ); aDrawTasks.push({ time: currTime, params: { clearCanvas: clearCanvas, scrollType: scrollType, printOptions: printOptions} });
} }
_this.showDrawingObjectsEx = function(clearCanvas, printOptions) { _this.showDrawingObjectsEx = function(clearCanvas, scrollType, printOptions) {
/*********** Print Options *************** /*********** Print Options ***************
printOptions : { printOptions : {
...@@ -3396,7 +3446,7 @@ function DrawingObjects() { ...@@ -3396,7 +3446,7 @@ function DrawingObjects() {
worksheet._drawGraphic(); worksheet._drawGraphic();
// Clip // Clip
_this.clipGraphicsCanvas(shapeCtx); _this.clipGraphicsCanvas(shapeCtx, scrollType);
for (var i = 0; i < aObjects.length; i++) { for (var i = 0; i < aObjects.length; i++) {
...@@ -3406,9 +3456,11 @@ function DrawingObjects() { ...@@ -3406,9 +3456,11 @@ function DrawingObjects() {
drawingObject.graphicObject.syncAscChart(); drawingObject.graphicObject.syncAscChart();
if ( !printOptions ) { if ( !printOptions ) {
if ( !drawingObject.inVisibleArea() ) if ( !drawingObject.inVisibleArea(scrollType) )
continue; continue;
} }
//console.log("draw object: " + (i + 1));
if ( !drawingObject.flags.anchorUpdated ) if ( !drawingObject.flags.anchorUpdated )
drawingObject.updateAnchorPosition(); drawingObject.updateAnchorPosition();
...@@ -3604,12 +3656,33 @@ function DrawingObjects() { ...@@ -3604,12 +3656,33 @@ function DrawingObjects() {
return metrics; return metrics;
} }
_this.clipGraphicsCanvas = function(canvas) { _this.clipGraphicsCanvas = function(canvas, scrollType) {
if ( canvas instanceof CGraphics ) { if ( canvas instanceof CGraphics ) {
var x = worksheet.getCellLeft(0, 0);
var y = worksheet.getCellTop(0, 0); var x, y, w, h;
var w = shapeCtx.m_lWidthPix - x;
var h = shapeCtx.m_lHeightPix - y; if ( scrollType ) {
var updatedRange = scrollType.getUpdatedRange();
var offsetX = worksheet.cols[worksheet.visibleRange.c1].left - worksheet.cellsLeft;
var offsetY = worksheet.rows[worksheet.visibleRange.r1].top - worksheet.cellsTop;
x = worksheet.getCellLeft(updatedRange.c1, 0) - ptToPx(offsetX);
y = worksheet.getCellTop(updatedRange.r1, 0) - ptToPx(offsetY);
w = worksheet.getCellLeft(updatedRange.c2, 0) - worksheet.getCellLeft(updatedRange.c1, 0);
h = worksheet.getCellTop(updatedRange.r2, 0) - worksheet.getCellTop(updatedRange.r1, 0);
/*canvas.m_oContext.beginPath();
canvas.m_oContext.strokeStyle = "#FF0000";
canvas.m_oContext.rect(x, y, w, h);
canvas.m_oContext.stroke();*/
}
else {
x = worksheet.getCellLeft(0, 0);
y = worksheet.getCellTop(0, 0);
w = shapeCtx.m_lWidthPix - x;
h = shapeCtx.m_lHeightPix - y;
}
canvas.m_oContext.save(); canvas.m_oContext.save();
canvas.m_oContext.beginPath(); canvas.m_oContext.beginPath();
...@@ -3622,8 +3695,7 @@ function DrawingObjects() { ...@@ -3622,8 +3695,7 @@ function DrawingObjects() {
} }
_this.restoreGraphicsCanvas = function(canvas) { _this.restoreGraphicsCanvas = function(canvas) {
if ( canvas instanceof CGraphics ) if ( canvas instanceof CGraphics ) {
{
// этот рестор нужен для восстановления сложных вложенных клипов // этот рестор нужен для восстановления сложных вложенных клипов
canvas.m_oContext.restore(); canvas.m_oContext.restore();
......
...@@ -216,6 +216,11 @@ var c_oAscSelectionType = { ...@@ -216,6 +216,11 @@ var c_oAscSelectionType = {
RangeChartText : 9 RangeChartText : 9
}; };
var c_oAscScrollType = {
Vertical : "vertical",
Horizontal : "horizontal"
};
var c_oAscLegendMarkerType = { var c_oAscLegendMarkerType = {
Line : 0, Line : 0,
Square : 1 Square : 1
......
...@@ -1768,7 +1768,7 @@ ...@@ -1768,7 +1768,7 @@
ctx: drawingCtx, ctx: drawingCtx,
printPagesData: printPagesData printPagesData: printPagesData
}; };
this.objectRender.showDrawingObjectsEx(false, drawingPrintOptions); this.objectRender.showDrawingObjectsEx(false, null, drawingPrintOptions);
this.visibleRange = tmpVisibleRange; this.visibleRange = tmpVisibleRange;
if (isAppBridge) {window['appBridge']['dummyCommandUpdate'] ();} if (isAppBridge) {window['appBridge']['dummyCommandUpdate'] ();}
...@@ -5094,7 +5094,7 @@ ...@@ -5094,7 +5094,7 @@
this.cellCommentator.updateCommentPosition(); this.cellCommentator.updateCommentPosition();
//ToDo this.drawDepCells(); //ToDo this.drawDepCells();
this._drawGraphic(); this._drawGraphic();
this.objectRender.showDrawingObjects(true); this.objectRender.showDrawingObjects(false, new ScrollGraphicObject(this, c_oAscScrollType.Vertical, delta));
return this; return this;
}, },
...@@ -5178,7 +5178,7 @@ ...@@ -5178,7 +5178,7 @@
this.cellCommentator.updateCommentPosition(); this.cellCommentator.updateCommentPosition();
//ToDo this.drawDepCells(); //ToDo this.drawDepCells();
this._drawGraphic(); this._drawGraphic();
this.objectRender.showDrawingObjects(true); this.objectRender.showDrawingObjects(false, new ScrollGraphicObject(this, c_oAscScrollType.Horizontal, delta));
return this; return this;
}, },
......
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