313 lines
14 KiB
JavaScript
313 lines
14 KiB
JavaScript
|
/*
|
|||
|
* (c) Copyright Ascensio System SIA 2010-2015
|
|||
|
*
|
|||
|
* This program is a free software product. You can redistribute it and/or
|
|||
|
* modify it under the terms of the GNU Affero General Public License (AGPL)
|
|||
|
* version 3 as published by the Free Software Foundation. In accordance with
|
|||
|
* Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect
|
|||
|
* that Ascensio System SIA expressly excludes the warranty of non-infringement
|
|||
|
* of any third-party rights.
|
|||
|
*
|
|||
|
* This program is distributed WITHOUT ANY WARRANTY; without even the implied
|
|||
|
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For
|
|||
|
* details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
|
|||
|
*
|
|||
|
* You can contact Ascensio System SIA at Lubanas st. 125a-25, Riga, Latvia,
|
|||
|
* EU, LV-1021.
|
|||
|
*
|
|||
|
* The interactive user interfaces in modified source and object code versions
|
|||
|
* of the Program must display Appropriate Legal Notices, as required under
|
|||
|
* Section 5 of the GNU AGPL version 3.
|
|||
|
*
|
|||
|
* Pursuant to Section 7(b) of the License you must retain the original Product
|
|||
|
* logo when distributing the program. Pursuant to Section 7(e) we decline to
|
|||
|
* grant you any rights under trademark law for use of our trademarks.
|
|||
|
*
|
|||
|
* All the Product's GUI elements, including illustrations and icon sets, as
|
|||
|
* well as technical writing content are licensed under the terms of the
|
|||
|
* Creative Commons Attribution-ShareAlike 4.0 International. See the License
|
|||
|
* terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
|
|||
|
*
|
|||
|
*/
|
|||
|
"use strict";
|
|||
|
function MoveShapeImageTrack(originalObject) {
|
|||
|
this.originalObject = originalObject;
|
|||
|
this.transform = new CMatrix();
|
|||
|
this.x = null;
|
|||
|
this.y = null;
|
|||
|
this.pageIndex = null;
|
|||
|
this.originalShape = originalObject;
|
|||
|
if (!originalObject.isChart()) {
|
|||
|
this.brush = originalObject.brush;
|
|||
|
this.pen = originalObject.pen;
|
|||
|
} else {
|
|||
|
var pen_brush = CreatePenBrushForChartTrack();
|
|||
|
this.brush = pen_brush.brush;
|
|||
|
this.pen = pen_brush.pen;
|
|||
|
}
|
|||
|
this.overlayObject = new OverlayObject(!(this.originalObject.getObjectType() === historyitem_type_ChartSpace) && this.originalObject.spPr && this.originalObject.spPr.geometry, this.originalObject.extX, this.originalObject.extY, this.brush, this.pen, this.transform);
|
|||
|
this.groupInvertMatrix = null;
|
|||
|
if (this.originalObject.group) {
|
|||
|
this.groupInvertMatrix = this.originalObject.group.invertTransform.CreateDublicate();
|
|||
|
this.groupInvertMatrix.tx = 0;
|
|||
|
this.groupInvertMatrix.ty = 0;
|
|||
|
}
|
|||
|
this.getOriginalBoundsRect = function () {
|
|||
|
return this.originalObject.getRectBounds();
|
|||
|
};
|
|||
|
this.track = function (dx, dy, pageIndex) {
|
|||
|
var original = this.originalObject;
|
|||
|
var dx2, dy2;
|
|||
|
if (this.groupInvertMatrix) {
|
|||
|
dx2 = this.groupInvertMatrix.TransformPointX(dx, dy);
|
|||
|
dy2 = this.groupInvertMatrix.TransformPointY(dx, dy);
|
|||
|
} else {
|
|||
|
dx2 = dx;
|
|||
|
dy2 = dy;
|
|||
|
}
|
|||
|
this.x = original.x + dx2;
|
|||
|
this.y = original.y + dy2;
|
|||
|
this.transform.Reset();
|
|||
|
var hc = original.extX * 0.5;
|
|||
|
var vc = original.extY * 0.5;
|
|||
|
global_MatrixTransformer.TranslateAppend(this.transform, -hc, -vc);
|
|||
|
if (original.flipH) {
|
|||
|
global_MatrixTransformer.ScaleAppend(this.transform, -1, 1);
|
|||
|
}
|
|||
|
if (original.flipV) {
|
|||
|
global_MatrixTransformer.ScaleAppend(this.transform, 1, -1);
|
|||
|
}
|
|||
|
global_MatrixTransformer.RotateRadAppend(this.transform, -original.rot);
|
|||
|
global_MatrixTransformer.TranslateAppend(this.transform, this.x + hc, this.y + vc);
|
|||
|
if (this.originalObject.group) {
|
|||
|
global_MatrixTransformer.MultiplyAppend(this.transform, this.originalObject.group.transform);
|
|||
|
}
|
|||
|
if (isRealNumber(pageIndex)) {
|
|||
|
this.pageIndex = pageIndex;
|
|||
|
}
|
|||
|
};
|
|||
|
this.draw = function (overlay) {
|
|||
|
if (isRealNumber(this.pageIndex) && overlay.SetCurrentPage) {
|
|||
|
overlay.SetCurrentPage(this.pageIndex);
|
|||
|
}
|
|||
|
this.overlayObject.draw(overlay);
|
|||
|
};
|
|||
|
this.trackEnd = function (bWord) {
|
|||
|
if (bWord) {
|
|||
|
if (this.originalObject.selectStartPage !== this.pageIndex) {
|
|||
|
this.originalObject.selectStartPage = this.pageIndex;
|
|||
|
}
|
|||
|
}
|
|||
|
var scale_coefficients, ch_off_x, ch_off_y;
|
|||
|
CheckSpPrXfrm(this.originalObject);
|
|||
|
if (this.originalObject.group) {
|
|||
|
scale_coefficients = this.originalObject.group.getResultScaleCoefficients();
|
|||
|
ch_off_x = this.originalObject.group.spPr.xfrm.chOffX;
|
|||
|
ch_off_y = this.originalObject.group.spPr.xfrm.chOffY;
|
|||
|
} else {
|
|||
|
if (bWord) {
|
|||
|
if (this.originalObject.spPr.xfrm.offX === 0 && this.originalObject.spPr.xfrm.offY === 0) {
|
|||
|
return;
|
|||
|
}
|
|||
|
}
|
|||
|
scale_coefficients = {
|
|||
|
cx: 1,
|
|||
|
cy: 1
|
|||
|
};
|
|||
|
ch_off_x = 0;
|
|||
|
ch_off_y = 0;
|
|||
|
if (bWord) {
|
|||
|
this.x = 0;
|
|||
|
this.y = 0;
|
|||
|
}
|
|||
|
}
|
|||
|
this.originalObject.spPr.xfrm.setOffX(this.x / scale_coefficients.cx + ch_off_x);
|
|||
|
this.originalObject.spPr.xfrm.setOffY(this.y / scale_coefficients.cy + ch_off_y);
|
|||
|
this.originalObject.checkDrawingBaseCoords();
|
|||
|
};
|
|||
|
}
|
|||
|
MoveShapeImageTrack.prototype.getBounds = function () {
|
|||
|
var boundsChecker = new CSlideBoundsChecker();
|
|||
|
this.draw(boundsChecker);
|
|||
|
var tr = this.transform;
|
|||
|
var arr_p_x = [];
|
|||
|
var arr_p_y = [];
|
|||
|
arr_p_x.push(tr.TransformPointX(0, 0));
|
|||
|
arr_p_y.push(tr.TransformPointY(0, 0));
|
|||
|
arr_p_x.push(tr.TransformPointX(this.originalObject.extX, 0));
|
|||
|
arr_p_y.push(tr.TransformPointY(this.originalObject.extX, 0));
|
|||
|
arr_p_x.push(tr.TransformPointX(this.originalObject.extX, this.originalObject.extY));
|
|||
|
arr_p_y.push(tr.TransformPointY(this.originalObject.extX, this.originalObject.extY));
|
|||
|
arr_p_x.push(tr.TransformPointX(0, this.originalObject.extY));
|
|||
|
arr_p_y.push(tr.TransformPointY(0, this.originalObject.extY));
|
|||
|
arr_p_x.push(boundsChecker.Bounds.min_x);
|
|||
|
arr_p_x.push(boundsChecker.Bounds.max_x);
|
|||
|
arr_p_y.push(boundsChecker.Bounds.min_y);
|
|||
|
arr_p_y.push(boundsChecker.Bounds.max_y);
|
|||
|
boundsChecker.Bounds.min_x = Math.min.apply(Math, arr_p_x);
|
|||
|
boundsChecker.Bounds.max_x = Math.max.apply(Math, arr_p_x);
|
|||
|
boundsChecker.Bounds.min_y = Math.min.apply(Math, arr_p_y);
|
|||
|
boundsChecker.Bounds.max_y = Math.max.apply(Math, arr_p_y);
|
|||
|
boundsChecker.Bounds.posX = this.x;
|
|||
|
boundsChecker.Bounds.posY = this.y;
|
|||
|
boundsChecker.Bounds.extX = this.originalObject.extX;
|
|||
|
boundsChecker.Bounds.extY = this.originalObject.extY;
|
|||
|
return boundsChecker.Bounds;
|
|||
|
};
|
|||
|
function MoveShapeImageTrackInGroup(originalObject) {
|
|||
|
this.originalObject = originalObject;
|
|||
|
this.x = null;
|
|||
|
this.y = null;
|
|||
|
this.transform = new CMatrix();
|
|||
|
if (!originalObject.isChart()) {
|
|||
|
this.brush = originalObject.brush;
|
|||
|
this.pen = originalObject.pen;
|
|||
|
} else {
|
|||
|
var pen_brush = CreatePenBrushForChartTrack();
|
|||
|
this.brush = pen_brush.brush;
|
|||
|
this.pen = pen_brush.pen;
|
|||
|
}
|
|||
|
this.overlayObject = new OverlayObject(!(this.originalObject.getObjectType() === historyitem_type_ChartSpace) && this.originalObject.spPr && this.originalObject.spPr.geometry, this.originalObject.extX, this.originalObject.extY, this.brush, this.pen, this.transform);
|
|||
|
this.inv = global_MatrixTransformer.Invert(originalObject.group.transform);
|
|||
|
this.inv.tx = 0;
|
|||
|
this.inv.ty = 0;
|
|||
|
this.draw = function (overlay) {
|
|||
|
if (isRealNumber(this.pageIndex) && overlay.SetCurrentPage) {
|
|||
|
overlay.SetCurrentPage(this.pageIndex);
|
|||
|
}
|
|||
|
this.overlayObject.draw(overlay);
|
|||
|
};
|
|||
|
this.track = function (dx, dy) {
|
|||
|
var dx_t = this.inv.TransformPointX(dx, dy);
|
|||
|
var dy_t = this.inv.TransformPointY(dx, dy);
|
|||
|
this.x = this.originalObject.x + dx_t;
|
|||
|
this.y = this.originalObject.y + dy_t;
|
|||
|
this.calculateTransform();
|
|||
|
};
|
|||
|
this.getOriginalBoundsRect = function () {
|
|||
|
return this.originalObject.getRectBounds();
|
|||
|
};
|
|||
|
this.calculateTransform = function () {
|
|||
|
var t = this.transform;
|
|||
|
t.Reset();
|
|||
|
global_MatrixTransformer.TranslateAppend(t, -this.originalObject.extX * 0.5, -this.originalObject.extY * 0.5);
|
|||
|
if (this.originalObject.flipH) {
|
|||
|
global_MatrixTransformer.ScaleAppend(t, -1, 1);
|
|||
|
}
|
|||
|
if (this.originalObject.flipV) {
|
|||
|
global_MatrixTransformer.ScaleAppend(t, 1, -1);
|
|||
|
}
|
|||
|
global_MatrixTransformer.RotateRadAppend(t, -this.originalObject.rot);
|
|||
|
global_MatrixTransformer.TranslateAppend(t, this.x + this.originalObject.extX * 0.5, this.y + this.originalObject.extY * 0.5);
|
|||
|
global_MatrixTransformer.MultiplyAppend(t, this.originalObject.group.getTransformMatrix());
|
|||
|
};
|
|||
|
this.trackEnd = function () {
|
|||
|
var scale_scale_coefficients = this.originalObject.group.getResultScaleCoefficients();
|
|||
|
var xfrm = this.originalObject.group.spPr.xfrm;
|
|||
|
CheckSpPrXfrm(this.originalObject);
|
|||
|
var shape_xfrm = this.originalObject.spPr.xfrm;
|
|||
|
shape_xfrm.setOffX(this.x / scale_scale_coefficients.cx + xfrm.chOffX);
|
|||
|
shape_xfrm.setOffY(this.y / scale_scale_coefficients.cy + xfrm.chOffY);
|
|||
|
};
|
|||
|
}
|
|||
|
function MoveGroupTrack(originalObject) {
|
|||
|
this.x = null;
|
|||
|
this.y = null;
|
|||
|
this.originalObject = originalObject;
|
|||
|
this.transform = new CMatrix();
|
|||
|
this.pageIndex = null;
|
|||
|
this.overlayObjects = [];
|
|||
|
this.arrTransforms2 = [];
|
|||
|
var arr_graphic_objects = originalObject.getArrGraphicObjects();
|
|||
|
var group_invert_transform = originalObject.invertTransform;
|
|||
|
for (var i = 0; i < arr_graphic_objects.length; ++i) {
|
|||
|
var gr_obj_transform_copy = arr_graphic_objects[i].transform.CreateDublicate();
|
|||
|
global_MatrixTransformer.MultiplyAppend(gr_obj_transform_copy, group_invert_transform);
|
|||
|
this.arrTransforms2[i] = gr_obj_transform_copy;
|
|||
|
this.overlayObjects[i] = new OverlayObject(!(arr_graphic_objects[i].getObjectType() === historyitem_type_ChartSpace) && arr_graphic_objects[i].spPr.geometry, arr_graphic_objects[i].extX, arr_graphic_objects[i].extY, arr_graphic_objects[i].brush, arr_graphic_objects[i].pen, new CMatrix());
|
|||
|
}
|
|||
|
this.getOriginalBoundsRect = function () {
|
|||
|
return this.originalObject.getRectBounds();
|
|||
|
};
|
|||
|
this.track = function (dx, dy, pageIndex) {
|
|||
|
this.pageIndex = pageIndex;
|
|||
|
var original = this.originalObject;
|
|||
|
this.x = original.x + dx;
|
|||
|
this.y = original.y + dy;
|
|||
|
this.transform.Reset();
|
|||
|
var hc = original.extX * 0.5;
|
|||
|
var vc = original.extY * 0.5;
|
|||
|
global_MatrixTransformer.TranslateAppend(this.transform, -hc, -vc);
|
|||
|
if (original.flipH) {
|
|||
|
global_MatrixTransformer.ScaleAppend(this.transform, -1, 1);
|
|||
|
}
|
|||
|
if (original.flipV) {
|
|||
|
global_MatrixTransformer.ScaleAppend(this.transform, 1, -1);
|
|||
|
}
|
|||
|
global_MatrixTransformer.RotateRadAppend(this.transform, -original.rot);
|
|||
|
global_MatrixTransformer.TranslateAppend(this.transform, this.x + hc, this.y + vc);
|
|||
|
for (var i = 0; i < this.overlayObjects.length; ++i) {
|
|||
|
var new_transform = this.arrTransforms2[i].CreateDublicate();
|
|||
|
global_MatrixTransformer.MultiplyAppend(new_transform, this.transform);
|
|||
|
this.overlayObjects[i].updateTransformMatrix(new_transform);
|
|||
|
}
|
|||
|
};
|
|||
|
this.draw = function (overlay) {
|
|||
|
if (isRealNumber(this.pageIndex) && overlay.SetCurrentPage) {
|
|||
|
overlay.SetCurrentPage(this.pageIndex);
|
|||
|
}
|
|||
|
for (var i = 0; i < this.overlayObjects.length; ++i) {
|
|||
|
this.overlayObjects[i].draw(overlay);
|
|||
|
}
|
|||
|
};
|
|||
|
this.getBounds = function () {
|
|||
|
var bounds_checker = new CSlideBoundsChecker();
|
|||
|
for (var i = 0; i < this.overlayObjects.length; ++i) {
|
|||
|
this.overlayObjects[i].draw(bounds_checker);
|
|||
|
}
|
|||
|
bounds_checker.Bounds.posX = this.x;
|
|||
|
bounds_checker.Bounds.posY = this.y;
|
|||
|
bounds_checker.Bounds.extX = this.originalObject.extX;
|
|||
|
bounds_checker.Bounds.extY = this.originalObject.extY;
|
|||
|
return bounds_checker.Bounds;
|
|||
|
};
|
|||
|
this.trackEnd = function (bWord) {
|
|||
|
if (bWord) {
|
|||
|
this.x = 0;
|
|||
|
this.y = 0;
|
|||
|
}
|
|||
|
CheckSpPrXfrm(this.originalObject);
|
|||
|
var xfrm = this.originalObject.spPr.xfrm;
|
|||
|
xfrm.setOffX(this.x);
|
|||
|
xfrm.setOffY(this.y);
|
|||
|
if (bWord) {
|
|||
|
if (this.originalObject.selectStartPage !== this.pageIndex) {
|
|||
|
this.originalObject.selectStartPage = this.pageIndex;
|
|||
|
}
|
|||
|
}
|
|||
|
this.originalObject.checkDrawingBaseCoords();
|
|||
|
};
|
|||
|
}
|
|||
|
function MoveComment(comment) {
|
|||
|
this.comment = comment;
|
|||
|
this.x = comment.x;
|
|||
|
this.y = comment.y;
|
|||
|
this.getOriginalBoundsRect = function () {};
|
|||
|
this.track = function (dx, dy) {
|
|||
|
var original = this.comment;
|
|||
|
this.x = original.x + dx;
|
|||
|
this.y = original.y + dy;
|
|||
|
};
|
|||
|
this.draw = function (overlay) {
|
|||
|
var Flags = 0;
|
|||
|
Flags |= 1;
|
|||
|
if (this.comment.Data.m_aReplies.length > 0) {
|
|||
|
Flags |= 2;
|
|||
|
}
|
|||
|
var dd = editor.WordControl.m_oDrawingDocument;
|
|||
|
overlay.DrawPresentationComment(Flags, this.x, this.y, dd.GetCommentWidth(Flags), dd.GetCommentHeight(Flags));
|
|||
|
};
|
|||
|
this.trackEnd = function () {
|
|||
|
this.comment.setPosition(this.x, this.y);
|
|||
|
};
|
|||
|
}
|