Files
Yajbir Singh f1b860b25c
Some checks failed
check / markdownlint (push) Has been cancelled
check / spellchecker (push) Has been cancelled
updated
2025-12-11 19:03:17 +05:30

3638 lines
150 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
* (c) Copyright Ascensio System SIA 2010-2024
*
* 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 20A-6 Ernesta Birznieka-Upish
* street, Riga, Latvia, EU, LV-1050.
*
* 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
*
*/
(function(window, undefined){
// Import
var changestype_Drawing_Props = AscCommon.changestype_Drawing_Props;
var changestype_2_ElementsArray_and_Type = AscCommon.changestype_2_ElementsArray_and_Type;
var History = AscCommon.History;
var HANDLE_EVENT_MODE_HANDLE = AscFormat.HANDLE_EVENT_MODE_HANDLE;
var HANDLE_EVENT_MODE_CURSOR = AscFormat.HANDLE_EVENT_MODE_CURSOR;
var MOVE_DELTA = 1/100000;
var SNAP_DISTANCE = 1.27;
function checkEmptyPlaceholderContent(content) {
if (!content) {
return content;
}
let isPdf = Asc.editor.isPdfEditor();
let shape = isPdf
? (content.Parent && content.Parent.parent)
: content.Parent;
if (!shape) {
return null;
}
if (content.Is_Empty && content.Is_Empty()) {
if ((shape.isPlaceholder && shape.isPlaceholder()) ||
(content.isDocumentContentInSmartArtShape && content.isDocumentContentInSmartArtShape())) {
return content;
}
}
if (isPdf) {
if (shape.txWarpStruct ||
(shape.recalcInfo && shape.recalcInfo.warpGeometry)) {
return content;
}
if (shape.getBodyPr) {
let bodyPr = shape.getBodyPr();
if (bodyPr.vertOverflow !== AscFormat.nVOTOverflow) {
return content;
}
}
if (content.GetCurrentParagraph) {
let para = content.GetCurrentParagraph();
if (para && para.IsEmptyWithBullet && para.IsEmptyWithBullet()) {
return content;
}
}
return null;
}
if (shape.txWarpStruct &&
shape.recalcInfo &&
shape.recalcInfo.warpGeometry &&
shape.recalcInfo.warpGeometry.preset !== "textNoShape") {
return content;
}
return null;
}
function StartAddNewShape(drawingObjects, preset)
{
this.drawingObjects = drawingObjects;
this.preset = preset;
this.bStart = false;
this.bMoved = false;//отошли ли мы от начальной точки
this.pageIndex = null;
this.startX = null;
this.startY = null;
}
StartAddNewShape.prototype =
{
onMouseDown: function(e, x, y, pageIndex)
{
if(this.drawingObjects.handleEventMode === HANDLE_EVENT_MODE_CURSOR)
return {objectId: null, bMarker: true};
if(this.bStart){
this.onMouseUp(e, x, y, pageIndex);
this.drawingObjects.OnMouseDown(e, x, y, pageIndex);
}
this.pageIndex = pageIndex;
this.startX = x;
this.startY = y;
this.drawingObjects.arrPreTrackObjects.length = 0;
this.drawingObjects.arrPreTrackObjects.push(new AscFormat.NewShapeTrack(this.preset, x, y, this.drawingObjects.document.theme, null, null, null, pageIndex, this.drawingObjects));
this.bStart = true;
this.drawingObjects.swapTrackObjects();
return true;
},
onMouseMove: function(e, x, y, pageIndex)
{
if(this.bStart && e.IsLocked)
{
if(!this.bMoved && (Math.abs(this.startX - x) > MOVE_DELTA || Math.abs(this.startY - y) > MOVE_DELTA || this.pageIndex !== pageIndex))
this.bMoved = true;
var tx, ty;
if(this.pageIndex !== pageIndex)
{
var t = this.drawingObjects.drawingDocument.ConvertCoordsToAnotherPage(x, y, pageIndex, this.pageIndex);
tx = t.X;
ty = t.Y;
}
else
{
tx = x;
ty = y;
}
this.drawingObjects.arrTrackObjects[0].track(e, tx, ty);
this.drawingObjects.updateOverlay();
}
},
onMouseUp: function(e, x, y, pageIndex)
{
var bRet = false;
if(this.bStart && this.drawingObjects.arrTrackObjects.length > 0)
{
if(!this.bMoved && this instanceof StartAddNewShape)
{
var ext_x, ext_y;
var oExt = AscFormat.fGetDefaultShapeExtents(this.preset);
ext_x = oExt.x;
ext_y = oExt.y;
this.onMouseMove({IsLocked: true}, this.startX + ext_x, this.startY + ext_y, this.pageIndex);
}
var oTrack = this.drawingObjects.arrTrackObjects[0];
if(oTrack instanceof AscFormat.PolyLine)
{
if(!oTrack.canCreateShape())
{
this.drawingObjects.resetTrackState();
this.drawingObjects.updateOverlay();
editor.sync_StartAddShapeCallback( false );
editor.sync_EndAddShape();
return;
}
}
var oLogicDocument = this.drawingObjects.document;
this.drawingObjects.resetTrackState();
if (false == Asc.editor.isPdfEditor()) {
oLogicDocument.StartAction(AscDFH.historydescription_Document_AddNewShape);
var bounds = oTrack.getBounds();
var shape = oTrack.getShape(true, this.drawingObjects.drawingDocument);
var drawing = new ParaDrawing(shape.spPr.xfrm.extX, shape.spPr.xfrm.extY, shape, this.drawingObjects.drawingDocument, oLogicDocument, null);
var nearest_pos = this.drawingObjects.document.Get_NearestPos(this.pageIndex, bounds.min_x, bounds.min_y, true, drawing);
if(nearest_pos && false === oLogicDocument.Document_Is_SelectionLocked(AscCommon.changestype_None, {Type : AscCommon.changestype_2_Element_and_Type , Element : nearest_pos.Paragraph, CheckType : AscCommon.changestype_Paragraph_Content} ))
{
drawing.Set_DrawingType(drawing_Anchor);
drawing.Set_GraphicObject(shape);
shape.setParent(drawing);
drawing.Set_WrappingType(WRAPPING_TYPE_NONE);
drawing.Set_Distance( 3.2, 0, 3.2, 0 );
nearest_pos.Paragraph.Check_NearestPos(nearest_pos);
nearest_pos.Page = this.pageIndex;
drawing.Set_XYForAdd(shape.x, shape.y, nearest_pos, this.pageIndex);
drawing.AddToDocument(nearest_pos);
drawing.CheckWH();
let oAPI = this.drawingObjects.getEditorApi();
if(!oAPI.isDrawInkMode())
{
this.drawingObjects.resetSelection();
shape.select(this.drawingObjects, this.pageIndex);
}
this.drawingObjects.document.Recalculate();
// for now don't create macro for polyline
let macroData = (this instanceof PolyLineAddState2)
? undefined
: {
type: shape.getPresetGeom(),
pos: {x: drawing.X, t: drawing.Y},
extX: shape.spPr.xfrm.extX,
extY: shape.spPr.xfrm.extY,
fill: shape.brush,
border: shape.pen
};
oLogicDocument.FinalizeAction(undefined, macroData);
if(this.preset && (this.preset.indexOf("textRect") === 0))
{
this.drawingObjects.selection.textSelection = shape;
shape.selectionSetStart(e, x, y, pageIndex);
shape.selectionSetEnd(e, x, y, pageIndex);
}
bRet = true;
}
else
{
this.drawingObjects.document.Document_Undo();
oLogicDocument.FinalizeAction(false);
}
}
else
{
// рисование кистью
if (Asc.editor.isInkDrawerOn()) {
oLogicDocument.DoAction(function() {
// добавлем path если рисование не закончено (нужна доработка для ластика)
// if (oLogicDocument.currInkInDrawingProcess && oLogicDocument.currInkInDrawingProcess.GetPage() == this.pageIndex) {
// let aInkPath = [];
// for (let i = 0; i < oTrack.arrPoint.length; i++) {
// aInkPath.push(oTrack.arrPoint[i].x * g_dKoef_mm_to_pt);
// aInkPath.push(oTrack.arrPoint[i].y * g_dKoef_mm_to_pt);
// }
// oLogicDocument.currInkInDrawingProcess.AddInkPath(aInkPath);
// }
let bounds = oTrack.getBounds();
let nLineW = oTrack.pen.w / 36000 * g_dKoef_mm_to_pt;
let aRect = [(bounds.min_x * g_dKoef_mm_to_pt - nLineW), (bounds.min_y * g_dKoef_mm_to_pt - nLineW), (bounds.max_x * g_dKoef_mm_to_pt + nLineW), (bounds.max_y * g_dKoef_mm_to_pt + nLineW)];
let oInkAnnot = oLogicDocument.AddAnnotByProps({
rect: aRect,
page: this.pageIndex,
contents: null,
type: AscPDF.ANNOTATIONS_TYPES.Ink,
creationDate: (new Date().getTime()).toString(),
modDate: (new Date().getTime()).toString()
});
let oRGBPen = oTrack.pen.Fill.getRGBAColor();
let aInkPath = [];
for (let i = 0; i < oTrack.arrPoint.length; i++) {
aInkPath.push(oTrack.arrPoint[i].x * g_dKoef_mm_to_pt);
aInkPath.push(oTrack.arrPoint[i].y * g_dKoef_mm_to_pt);
}
oInkAnnot.SetWidth(nLineW);
oInkAnnot.AddInkPath(aInkPath);
oInkAnnot.SetStrokeColor([oRGBPen.R / 255, oRGBPen.G / 255, oRGBPen.B / 255]);
oInkAnnot.SetOpacity(oTrack.pen.Fill.transparent / 255);
// запомнили добавленную Ink фигуру, к ней будем добавлять новые path пока рисование не закончится
oLogicDocument.currInkInDrawingProcess = oInkAnnot;
}, AscDFH.historydescription_Pdf_AddAnnot, this);
}
else {
oLogicDocument.DoAction(function() {
// adding shapes/annotations
if (Asc.editor.isStartAddAnnot) {
let oShape = AscFormat.ExecuteNoHistory(function () {
return oTrack.getShape(false, this.drawingObjects.drawingDocument, oLogicDocument);
}, this, []);
oShape.recalculate();
let oAnnot = oShape.ConvertToAnnot();
if (oAnnot) {
oLogicDocument.AddAnnot(oAnnot, this.pageIndex);
oLogicDocument.SetMouseDownObject(oAnnot);
oAnnot.select(oLogicDocument.GetController(), this.pageIndex);
}
}
else {
let oShape = oTrack.getShape(false, this.drawingObjects.drawingDocument, oLogicDocument);
oLogicDocument.AddDrawing(oShape, this.pageIndex);
oLogicDocument.SetMouseDownObject(oShape);
oShape.select(oLogicDocument.GetController(), this.pageIndex);
}
bRet = true;
}, AscDFH.historydescription_Document_AddNewShape, this);
}
}
}
this.drawingObjects.updateOverlay();
editor.sync_StartAddShapeCallback( false );
editor.sync_EndAddShape();
return bRet;
}
};
function NullState(drawingObjects)
{
this.drawingObjects = drawingObjects;
this.startTargetTextObject = null;
}
NullState.prototype =
{
onMouseDown: function(e, x, y, pageIndex, bTextFlag)
{
var ret;
var selection = this.drawingObjects.selection;
var b_no_handle_selected = false;
this.startTargetTextObject = AscFormat.getTargetTextObject(this.drawingObjects);
var start_target_doc_content, end_target_doc_content;
let nStartPage;
if(this.drawingObjects.handleEventMode === HANDLE_EVENT_MODE_HANDLE)
{
this.drawingObjects.setStartTrackPos(x, y, pageIndex);
start_target_doc_content = checkEmptyPlaceholderContent(this.drawingObjects.getTargetDocContent());
nStartPage = start_target_doc_content && start_target_doc_content.GetAbsolutePage();
}
const oThis = this;
const fRecalculatePages = function() {
if (Asc.editor.isPdfEditor()) {
oThis.drawingObjects.checkRedrawOnChangeCursorPosition(start_target_doc_content, null);
return;
}
oThis.drawingObjects.checkChartTextSelection(true);
oThis.drawingObjects.drawingDocument.OnRecalculatePage( pageIndex, oThis.drawingObjects.document.Pages[pageIndex] );
if (AscFormat.isRealNumber(nStartPage) && pageIndex !== nStartPage) {
oThis.drawingObjects.drawingDocument.OnRecalculatePage(nStartPage, oThis.drawingObjects.document.Pages[nStartPage]);
}
oThis.drawingObjects.drawingDocument.OnEndRecalculate( false, true );
}
if(selection.wrapPolygonSelection)
{
b_no_handle_selected = true;
var object_page_x, object_page_y;
var coords = AscFormat.CheckCoordsNeedPage(x, y, pageIndex, selection.wrapPolygonSelection.selectStartPage, this.drawingObjects.drawingDocument);
object_page_x = coords.x;
object_page_y = coords.y;
var hit_to_wrap_polygon = selection.wrapPolygonSelection.parent.hitToWrapPolygonPoint(object_page_x, object_page_y);
var wrap_polygon = selection.wrapPolygonSelection.parent.wrappingPolygon;
if(hit_to_wrap_polygon.hit)
{
if(this.drawingObjects.handleEventMode === HANDLE_EVENT_MODE_HANDLE)
{
if(hit_to_wrap_polygon.hitType === WRAP_HIT_TYPE_POINT)
{
if(!e.CtrlKey)
{
this.drawingObjects.changeCurrentState(new PreChangeWrapContour(this.drawingObjects, selection.wrapPolygonSelection, hit_to_wrap_polygon.pointNum));
}
else
{
if(wrap_polygon.relativeArrPoints.length > 3)
{
if(false === this.drawingObjects.document.Document_Is_SelectionLocked(changestype_Drawing_Props, {Type : AscCommon.changestype_2_Element_and_Type , Element : selection.wrapPolygonSelection.parent.Get_ParentParagraph(), CheckType : AscCommon.changestype_Paragraph_Content}))
{
this.drawingObjects.document.StartAction(AscDFH.historydescription_Document_EditWrapPolygon);
var new_rel_array = [].concat(wrap_polygon.relativeArrPoints);
new_rel_array.splice(hit_to_wrap_polygon.pointNum, 1);
wrap_polygon.setEdited(true);
wrap_polygon.setArrRelPoints(new_rel_array);
this.drawingObjects.document.Recalculate();
this.drawingObjects.updateOverlay();
this.drawingObjects.document.FinalizeAction();
}
}
}
return true;
}
else
{
this.drawingObjects.changeCurrentState(new PreChangeWrapContourAddPoint(this.drawingObjects, selection.wrapPolygonSelection, hit_to_wrap_polygon.pointNum1, object_page_x, object_page_y));
return true;
}
}
else
{
return {objectId: selection.wrapPolygonSelection.Get_Id(), cursorType: "default"};
}
}
}
else if(selection.groupSelection)
{
ret = AscFormat.handleSelectedObjects(this.drawingObjects, e, x, y, selection.groupSelection, pageIndex, true);
if(ret)
{
if(this.drawingObjects.handleEventMode === HANDLE_EVENT_MODE_HANDLE)
{
end_target_doc_content = checkEmptyPlaceholderContent(this.drawingObjects.getTargetDocContent());
if((start_target_doc_content || end_target_doc_content) && (start_target_doc_content !== end_target_doc_content))
{
fRecalculatePages();
}
}
return ret;
}
if(selection.groupSelection.selectStartPage === pageIndex){
ret = AscFormat.handleFloatObjects(this.drawingObjects, selection.groupSelection.arrGraphicObjects, e, x, y, selection.groupSelection, pageIndex, true);
if(ret)
{
if(this.drawingObjects.handleEventMode === HANDLE_EVENT_MODE_HANDLE)
{
end_target_doc_content = checkEmptyPlaceholderContent(this.drawingObjects.getTargetDocContent());
if ((start_target_doc_content || end_target_doc_content) && (start_target_doc_content !== end_target_doc_content))
{
fRecalculatePages();
}
}
return ret;
}
}
}
else if(selection.chartSelection)
{}
if(!b_no_handle_selected)
{
ret = AscFormat.handleSelectedObjects(this.drawingObjects, e, x, y, null, pageIndex, true);
if(ret)
{
if(this.drawingObjects.handleEventMode === HANDLE_EVENT_MODE_HANDLE)
{
end_target_doc_content = checkEmptyPlaceholderContent(this.drawingObjects.getTargetDocContent());
if ((start_target_doc_content || end_target_doc_content) && (start_target_doc_content !== end_target_doc_content))
{
fRecalculatePages();
}
}
return ret;
}
}
if (editor.isDocumentRenderer() == false) {
var drawing_page = this.drawingObjects.getGraphicPage && this.drawingObjects.getGraphicPage(pageIndex);
if(drawing_page)
{
ret = AscFormat.handleFloatObjects(this.drawingObjects, drawing_page.beforeTextObjects, e, x, y, null, pageIndex, true);
if(ret)
{
if(this.drawingObjects.handleEventMode === HANDLE_EVENT_MODE_HANDLE)
{
end_target_doc_content = checkEmptyPlaceholderContent(this.drawingObjects.getTargetDocContent());
if ((start_target_doc_content || end_target_doc_content) && (start_target_doc_content !== end_target_doc_content))
{
fRecalculatePages();
}
}
return ret;
}
var no_shape_child_array = [];
for(var i = 0; i < drawing_page.inlineObjects.length; ++i)
{
if(!(drawing_page.inlineObjects[i].parent && drawing_page.inlineObjects[i].parent.isShapeChild()))
no_shape_child_array.push(drawing_page.inlineObjects[i]);
}
ret = AscFormat.handleInlineObjects(this.drawingObjects, no_shape_child_array, e, x, y, pageIndex, true);
if(ret)
{
if(this.drawingObjects.handleEventMode === HANDLE_EVENT_MODE_HANDLE)
{
end_target_doc_content = checkEmptyPlaceholderContent(this.drawingObjects.getTargetDocContent());
if ((start_target_doc_content || end_target_doc_content) && (start_target_doc_content !== end_target_doc_content))
{
fRecalculatePages();
}
}
return ret;
}
if(!bTextFlag)
{
ret = AscFormat.handleFloatObjects(this.drawingObjects, drawing_page.behindDocObjects, e, x, y, null, pageIndex, true);
if(ret)
{
if(this.drawingObjects.handleEventMode === HANDLE_EVENT_MODE_HANDLE)
{
end_target_doc_content = checkEmptyPlaceholderContent(this.drawingObjects.getTargetDocContent());
if ((start_target_doc_content || end_target_doc_content) && (start_target_doc_content !== end_target_doc_content)) {
fRecalculatePages();
}
}
return ret;
}
}
}
}
else {
let oViewer = Asc.editor.getDocumentRenderer();
let oDoc = Asc.editor.getPDFDoc();
let page = oViewer.pagesInfo.pages[pageIndex];
let lenA = page.drawings.length, lenB = page.annots.length;
let aDrawings = new Array(lenA + lenB);
for (let i = 0; i < lenA; i++) aDrawings[i] = page.drawings[i];
for (let j = 0; j < lenB; j++) aDrawings[lenA + j] = page.annots[j];
// Collect unique selected objects for the page
let uniqueSelected = [];
let selSet = [];
for (let k = 0; k < this.drawingObjects.selectedObjects.length; k++) {
let d = this.drawingObjects.selectedObjects[k];
if (d.GetPage() === pageIndex && selSet.indexOf(d) === -1) {
selSet.push(d);
uniqueSelected.push(d);
}
}
// In-place stable filtering: move non-selected forward
let w = 0;
for (let r = 0; r < aDrawings.length; r++) {
let dd = aDrawings[r];
if (selSet.indexOf(dd) === -1) aDrawings[w++] = dd;
}
aDrawings.length = w; // truncate array
// Append selected objects at the end
for (let m = 0; m < uniqueSelected.length; m++) {
aDrawings[w + m] = uniqueSelected[m];
}
if (oDoc.IsEditFieldsMode()) {
oDoc.GetPageInfo(pageIndex).fields.forEach(function(field) {
aDrawings.push(field.GetEditShape());
});
}
ret = AscFormat.handleFloatObjects(this.drawingObjects, aDrawings, e, x, y, null, pageIndex, true);
if(ret)
{
if(this.drawingObjects.handleEventMode === HANDLE_EVENT_MODE_HANDLE)
{
end_target_doc_content = this.drawingObjects.getTargetDocContent();
if ((start_target_doc_content || end_target_doc_content) && (start_target_doc_content !== end_target_doc_content)) {
this.drawingObjects.checkRedrawOnChangeCursorPosition(start_target_doc_content, null);
}
}
return ret;
}
}
if(start_target_doc_content)
{
fRecalculatePages();
}
return null;
},
onMouseMove: function(e, x, y, pageIndex)
{
var text_object = AscFormat.getTargetTextObject(this.drawingObjects);
if(text_object && e.IsLocked)
{
text_object.selectionSetEnd(e, x, y, pageIndex);
}
},
onMouseUp: function(e, x, y, pageIndex)
{}
};
function PreChangeAdjState(drawingObjects, majorObject)
{
this.drawingObjects = drawingObjects;
this.majorObject = majorObject;
}
PreChangeAdjState.prototype =
{
onMouseDown: function(e, x, y, pageIndex)
{
if(this.drawingObjects.handleEventMode === HANDLE_EVENT_MODE_HANDLE){
this.onMouseUp(e, x, y, pageIndex);
this.drawingObjects.OnMouseDown(e, x, y, pageIndex);
}
if(this.drawingObjects.handleEventMode === HANDLE_EVENT_MODE_CURSOR)
return {cursorType: "default", objectId: this.majorObject.Get_Id()};
},
onMouseMove: function(e, x, y, pageIndex)
{
this.drawingObjects.swapTrackObjects();
this.drawingObjects.changeCurrentState(new ChangeAdjState(this.drawingObjects, this.majorObject));
this.drawingObjects.OnMouseMove(e, x, y, pageIndex);
},
onMouseUp: function(e, x, y, pageIndex)
{
this.drawingObjects.clearPreTrackObjects();
this.drawingObjects.changeCurrentState(new NullState(this.drawingObjects));
}
};
function PreMoveInlineObject(drawingObjects, majorObject, isSelected, bInside, nStartPage, dStartX, dStartY)
{
this.drawingObjects = drawingObjects;
this.majorObject = majorObject;
this.majorObjectIsSelected = isSelected;
this.bInside = bInside;
this.nStartPage = nStartPage;
this.dStartX = dStartX;
this.dStartY = dStartY;
}
PreMoveInlineObject.prototype =
{
onMouseDown: function(e, x, y, pageIndex)
{
if(this.drawingObjects.handleEventMode === HANDLE_EVENT_MODE_CURSOR)
return {cursorType: "default", objectId: this.majorObject.Get_Id()};
if(this.drawingObjects.handleEventMode === HANDLE_EVENT_MODE_HANDLE){
this.onMouseUp(e, x, y, pageIndex);
this.drawingObjects.OnMouseDown(e, x, y, pageIndex);
}
},
onMouseMove: function(e, x, y, pageIndex)
{
if(!e.IsLocked || (this.majorObject && this.majorObject.isForm() && this.majorObject.getInnerForm() && this.majorObject.getInnerForm().IsFormLocked()))
{
this.onMouseUp(e, x, y, pageIndex);
return;
}
if(this.nStartPage !== pageIndex || Math.abs(x - this.dStartX) > MOVE_DELTA || Math.abs(y - this.dStartY) > MOVE_DELTA)
{
this.drawingObjects.changeCurrentState(new MoveInlineObject(this.drawingObjects, this.majorObject));
this.drawingObjects.OnMouseMove(e, x, y, pageIndex);
}
},
onMouseUp: function(e, x,y,pageIndex)
{
return AscFormat.handleMouseUpPreMoveState(this.drawingObjects, e, x, y,pageIndex, true);
}
};
function MoveInlineObject(drawingObjects, majorObject)
{
this.drawingObjects = drawingObjects;
this.majorObject = majorObject;
this.InlinePos = null;
}
MoveInlineObject.prototype =
{
onMouseDown: function(e, x, y, pageIndex)
{
if(this.drawingObjects.handleEventMode === HANDLE_EVENT_MODE_CURSOR)
return {cursorType: "default", objectId: this.majorObject.Get_Id()};
if(this.drawingObjects.handleEventMode === HANDLE_EVENT_MODE_HANDLE){
this.onMouseUp(e, x, y, pageIndex);
this.drawingObjects.OnMouseDown(e, x, y, pageIndex);
}
},
onMouseMove: function(e, x, y, pageIndex)
{
if (!e.IsLocked)
{
this.onMouseUp(e, x, y, pageIndex);
return;
}
this.InlinePos = this.drawingObjects.document.Get_NearestPos(pageIndex, x, y, false, this.majorObject.parent);
this.InlinePos.Page = pageIndex;
this.drawingObjects.updateOverlay();
},
onMouseUp: function(e, x,y,pageIndex)
{
this.drawingObjects.resetTrackState();
var check_paragraphs = [];
if (this.majorObject.parent.CanInsertToPos(this.InlinePos))
{
var oDstRun = null;
var arrClasses = this.InlinePos.Paragraph.GetClassesByPos(this.InlinePos.ContentPos);
for (var nIndex = arrClasses.length - 1; nIndex >= 0; --nIndex)
{
if (arrClasses[nIndex] instanceof ParaRun)
{
oDstRun = arrClasses[nIndex];
break;
}
}
var oDstPictureCC = null;
if (oDstRun)
{
var arrContentControls = oDstRun.GetParentContentControls();
for (var nIndex = arrContentControls.length - 1; nIndex >= 0; --nIndex)
{
if (arrContentControls[nIndex].IsPicture())
{
oDstPictureCC = arrContentControls[nIndex];
break;
}
}
}
if (oDstPictureCC)
{
var arrParaDrawings = oDstPictureCC.GetAllDrawingObjects();
if (this.majorObject.parent.IsPicture() && arrParaDrawings.length > 0 && !this.drawingObjects.document.IsSelectionLocked(AscCommon.changestype_None, {
Type : AscCommon.changestype_Drawing_Props,
Elements : [this.majorObject.parent.checkShapeChildAndGetTopParagraph(this.InlinePos.Paragraph)],
CheckType : AscCommon.changestype_Paragraph_Content
}, false, this.drawingObjects.document.IsFillingFormMode()))
{
this.drawingObjects.document.StartAction(AscDFH.historydescription_Document_CopyAndMoveInlineObject);
var oDrawing = this.majorObject.copy(undefined);
if (oDrawing.copyComments)
oDrawing.copyComments(this.drawingObjects.document);
oDrawing.setParent(arrParaDrawings[0]);
arrParaDrawings[0].Set_GraphicObject(oDrawing);
if (oDstPictureCC.IsPictureForm())
oDstPictureCC.UpdatePictureFormLayout();
if (arrParaDrawings[0].IsPicture() && oDstPictureCC.GetLogicDocument())
oDstPictureCC.GetLogicDocument().OnChangeForm(oDstPictureCC);
this.drawingObjects.resetSelection();
this.drawingObjects.selectObject(oDrawing, pageIndex);
this.drawingObjects.document.Recalculate();
this.drawingObjects.document.FinalizeAction();
}
}
else if(!e.CtrlKey)
{
var arrCheckTypes = [];
var parent_paragraph = this.majorObject.parent.checkShapeChildAndGetTopParagraph();
check_paragraphs.push(parent_paragraph);
arrCheckTypes.push(AscCommon.changestype_Drawing_Props);
var new_check_paragraph = this.majorObject.parent.checkShapeChildAndGetTopParagraph(this.InlinePos.Paragraph);
if (parent_paragraph !== new_check_paragraph)
{
check_paragraphs.push(new_check_paragraph);
arrCheckTypes.push(AscCommon.changestype_Paragraph_Content);
}
if (!this.drawingObjects.document.IsSelectionLocked(AscCommon.changestype_Drawing_Props, {
Type : AscCommon.changestype_2_Element_and_Type_Array,
Elements : check_paragraphs,
CheckTypes : arrCheckTypes
}, true))
{
this.drawingObjects.document.StartAction(AscDFH.historydescription_Document_MoveInlineObject);
this.majorObject.parent.OnEnd_MoveInline(this.InlinePos);
this.drawingObjects.document.Recalculate();
this.drawingObjects.document.FinalizeAction();
}
}
else
{
check_paragraphs.push(this.majorObject.parent.checkShapeChildAndGetTopParagraph(this.InlinePos.Paragraph));
if(false === this.drawingObjects.document.Document_Is_SelectionLocked(changestype_Drawing_Props, {Type : changestype_2_ElementsArray_and_Type , Elements : check_paragraphs, CheckType : AscCommon.changestype_Paragraph_Content}, true))
{
this.drawingObjects.document.StartAction(AscDFH.historydescription_Document_CopyAndMoveInlineObject);
var new_para_drawing = new ParaDrawing(this.majorObject.parent.Extent.W, this.majorObject.parent.Extent.H, null, this.drawingObjects.drawingDocument, null, null);
var drawing = this.majorObject.copy(undefined);
new_para_drawing.SetForm(this.majorObject.parent.IsForm());
var oRunPr = this.majorObject.parent && this.majorObject.parent.GetRun() ? this.majorObject.parent.GetRun().GetDirectTextPr() : null;
if(drawing.copyComments)
{
drawing.copyComments(this.drawingObjects.document);
}
drawing.setParent(new_para_drawing);
new_para_drawing.Set_GraphicObject(drawing);
new_para_drawing.AddToDocument(this.InlinePos, oRunPr);
this.drawingObjects.resetSelection();
this.drawingObjects.selectObject(drawing, pageIndex);
this.drawingObjects.document.Recalculate();
this.drawingObjects.document.FinalizeAction();
}
}
}
this.drawingObjects.changeCurrentState(new NullState(this.drawingObjects));
}
};
function PreRotateState(drawingObjects, majorObject)
{
this.drawingObjects = drawingObjects;
this.majorObject = majorObject;
}
PreRotateState.prototype =
{
onMouseDown: function(e, x, y, pageIndex)
{
if(this.drawingObjects.handleEventMode === HANDLE_EVENT_MODE_HANDLE){
this.onMouseUp(e, x, y, pageIndex);
this.drawingObjects.OnMouseDown(e, x, y, pageIndex);
}
if(this.drawingObjects.handleEventMode === HANDLE_EVENT_MODE_CURSOR)
return {cursorType: "default", objectId: this.majorObject.Get_Id(), bMarker: true};
},
onMouseMove: function(e, x, y, pageIndex)
{
if(!e.IsLocked)
{
this.onMouseUp(e, x, y, pageIndex);
return;
}
this.drawingObjects.swapTrackObjects();
this.drawingObjects.changeCurrentState(new RotateState(this.drawingObjects, this.majorObject));
this.drawingObjects.OnMouseMove(e, x, y, pageIndex);
},
onMouseUp: function(e, x, y, pageIndex)
{
this.drawingObjects.clearPreTrackObjects();
this.drawingObjects.changeCurrentState(new NullState(this.drawingObjects));
}
};
function RotateState(drawingObjects, majorObject)
{
this.drawingObjects = drawingObjects;
this.majorObject = majorObject;
}
RotateState.prototype =
{
onMouseDown: function(e, x, y, pageIndex)
{
if(this.drawingObjects.handleEventMode === HANDLE_EVENT_MODE_HANDLE){
this.onMouseUp(e, x, y, pageIndex);
this.drawingObjects.OnMouseDown(e, x, y, pageIndex);
}
if(this.drawingObjects.handleEventMode === HANDLE_EVENT_MODE_CURSOR)
return {cursorType: "crosshair", objectId: this.majorObject.Get_Id(), bMarker: true};
},
onMouseMove: function(e, x, y, pageIndex)
{
if(!e.IsLocked)
{
this.onMouseUp(e, x, y, pageIndex);
return;
}
var coords = AscFormat.CheckCoordsNeedPage(x, y, pageIndex, this.majorObject.selectStartPage, this.drawingObjects.drawingDocument);
this.drawingObjects.handleRotateTrack(e, coords.x, coords.y);
},
onMouseUp: function(e, x, y, pageIndex)
{
var aTracks = [].concat(this.drawingObjects.arrTrackObjects);
this.drawingObjects.resetTrackState();
if(aTracks[0] && aTracks[0].chartSpace)
{
if(false === this.drawingObjects.document.Document_Is_SelectionLocked(changestype_Drawing_Props, {Type : changestype_2_ElementsArray_and_Type , Elements : [], CheckType : AscCommon.changestype_Paragraph_Content}, true))
{
this.drawingObjects.document.StartAction(AscDFH.historydescription_Document_RotateFlowDrawingNoCtrl);
aTracks[0].trackEnd();
this.drawingObjects.document.Recalculate();
this.drawingObjects.document.FinalizeAction();
}
}
else
{
var bounds;
if (Asc.editor.isPdfEditor()) {
let oViewer = Asc.editor.getDocumentRenderer();
let oDoc = oViewer.getPDFDoc();
function endTrackFreeTextAnnot(oTrack, oMajorObj) {
let xMin;
let yMin;
let xMax;
let yMax;
let oFreeText = oMajorObj;
let oFreeTextRect = oFreeText.GetRect();
let aTextBoxRect = oFreeText.GetTextBoxRect();
let aCallout = oFreeText.GetCallout();
let aNewCallout = aCallout.slice();
let aCurRD = oFreeText.GetRectangleDiff();
let aNewRD = [];
let aNewRect = [];
function findBoundingRectangle(points) {
if (!points || points.length == 0) {
return null;
}
let minX = points[0];
let minY = points[1];
let maxX = points[0];
let maxY = points[1];
for (let i = 2; i < points.length; i += 2) {
minX = Math.min(minX, points[i]);
maxX = Math.max(maxX, points[i]);
minY = Math.min(minY, points[i + 1]);
maxY = Math.max(maxY, points[i + 1]);
}
return [minX, minY, maxX, maxY];
}
if (oTrack.originalObject.getPresetGeom() == "line") {
// если изменяли callout
if (this.handleNum == 0) { // x1, y1 точка callout
let oXY = oTrack.correctXYForPdfFreeText(x, y);
aNewCallout[0 * 2] = oXY.x * g_dKoef_mm_to_pt;
aNewCallout[0 * 2 + 1] = oXY.y * g_dKoef_mm_to_pt;
}
else if (this.handleNum === 4) { // x2, y2 точка callout
let oXY = oTrack.correctXYForPdfFreeText(x, y);
aNewCallout[1 * 2] = oXY.x * g_dKoef_mm_to_pt;
aNewCallout[1 * 2 + 1] = oXY.y * g_dKoef_mm_to_pt;
}
let aNewTextBoxRect = aTextBoxRect.slice();
// расширяем рект на ширину линии (или на радиус cloud бордера)
let nLineWidth = oFreeText.GetWidth();
if (oFreeText.GetBorderEffectStyle() === AscPDF.BORDER_EFFECT_STYLES.Cloud) {
aNewTextBoxRect[0] -= 12 * oFreeText.GetBorderEffectIntensity();
aNewTextBoxRect[1] -= 12 * oFreeText.GetBorderEffectIntensity();
aNewTextBoxRect[2] += 12 * oFreeText.GetBorderEffectIntensity();
aNewTextBoxRect[3] += 12 * oFreeText.GetBorderEffectIntensity();
}
else {
aNewTextBoxRect[0] -= nLineWidth;
aNewTextBoxRect[1] -= nLineWidth;
aNewTextBoxRect[2] += nLineWidth;
aNewTextBoxRect[3] += nLineWidth;
}
// находим рект стрелки, учитывая окончание линии
let aArrowRect = oFreeText.GetArrowRect([aNewCallout[2], aNewCallout[3], aNewCallout[0], aNewCallout[1]])
aNewRect = AscPDF.unionRectangles([aArrowRect, aNewTextBoxRect, findBoundingRectangle(aNewCallout)]);
// пересчитываем RD.
aNewRD = [
aCurRD[0] + (oFreeTextRect[0] - aNewRect[0]),
aCurRD[1] + (oFreeTextRect[1] - aNewRect[1]),
aCurRD[2] + (aNewRect[2] - oFreeTextRect[2]),
aCurRD[3] + (aNewRect[3] - oFreeTextRect[3])
];
}
else {
// находим координаты textbox
xMin = oTrack.transform.TransformPointX(0, 0) * g_dKoef_mm_to_pt;
yMin = oTrack.transform.TransformPointY(0, 0) * g_dKoef_mm_to_pt;
if (oTrack.resizedExtX) {
xMax = (oTrack.transform.TransformPointX(0, 0) + oTrack.resizedExtX) * g_dKoef_mm_to_pt;
}
else {
xMax = (oTrack.transform.TransformPointX(0, 0) + oTrack.originalShape.extX) * g_dKoef_mm_to_pt;
}
if (oTrack.resizedExtY) {
yMax = (oTrack.transform.TransformPointY(0, 0) + oTrack.resizedExtY) * g_dKoef_mm_to_pt;
}
else {
yMax = (oTrack.transform.TransformPointY(0, 0) + oTrack.originalShape.extY) * g_dKoef_mm_to_pt;
}
// находим точку выхода callout для нового ректа textbox
let nCalloutExitPos = oFreeText.GetCalloutExitPos([xMin, yMin, xMax, yMax]);
// значит стрелка внутри textbox, нужно скорректировать координаты textbox
if (nCalloutExitPos == undefined) {
let x = aNewCallout[0 * 2];
let y = aNewCallout[0 * 2 + 1];
// Проверяем, находится ли точка внутри прямоугольника
if (x > xMin && x < xMax && y > yMin && y < yMax) {
// Находим центр прямоугольника
const centerX = (xMin + xMax) / 2;
const centerY = (yMin + yMax) / 2;
const nWidth = (xMax - xMin) / 2;
const nHeight = (yMax - yMin) / 2;
// Определяем направление сдвига прямоугольника
const deltaX = x - centerX;
const deltaY = y - centerY;
// Сдвигаем прямоугольник в направлении, противоположном положению точки
if (Math.abs(deltaX) > Math.abs(deltaY)) {
// Сдвигаем по горизонтали
if (deltaX < 0) {
// Точка справа от центра, сдвигаем прямоугольник влево
xMin += Math.max(nWidth + 1, 2 * oFreeText.defaultPerpLength);
xMax += Math.max(nWidth + 1, 2 * oFreeText.defaultPerpLength);
} else {
// Точка слева от центра, сдвигаем прямоугольник вправо
xMin -= Math.max(nWidth + 1, 2 * oFreeText.defaultPerpLength);
xMax -= Math.max(nWidth + 1, 2 * oFreeText.defaultPerpLength);
}
} else {
// Сдвигаем по вертикали
if (deltaY < 0) {
// Точка выше центра, сдвигаем прямоугольник вниз
yMin += Math.max(nHeight + 1, 2 * oFreeText.defaultPerpLength);
yMax += Math.max(nHeight + 1, 2 * oFreeText.defaultPerpLength);
} else {
// Точка ниже центра, сдвигаем прямоугольник вверх
yMin -= Math.max(nHeight + 1, 2 * oFreeText.defaultPerpLength);
yMax -= Math.max(nHeight + 1, 2 * oFreeText.defaultPerpLength);
}
}
}
nCalloutExitPos = oFreeText.GetCalloutExitPos([xMin, yMin, xMax, yMax]);
}
// пересчитываем callout
switch (nCalloutExitPos) {
case AscPDF.CALLOUT_EXIT_POS.left: {
// точка выхода (x3, y3)
aNewCallout[2 * 2] = xMin;
aNewCallout[2 * 2 + 1] = (yMin + (yMax - yMin) / 2);
// точка начала стрелки
aNewCallout[2 * 1] = xMin - oFreeText.defaultPerpLength;
aNewCallout[2 * 1 + 1] = (yMin + (yMax - yMin) / 2);
break;
}
case AscPDF.CALLOUT_EXIT_POS.top: {
aNewCallout[2 * 2] = (xMin + (xMax - xMin) / 2);
aNewCallout[2 * 2 + 1] = yMin;
aNewCallout[2 * 1] = (xMin + (xMax - xMin) / 2);
aNewCallout[2 * 1 + 1] = yMin - oFreeText.defaultPerpLength;
break;
}
case AscPDF.CALLOUT_EXIT_POS.right: {
aNewCallout[2 * 2] = xMax;
aNewCallout[2 * 2 + 1] = (yMin + (yMax - yMin) / 2);
aNewCallout[2 * 1] = xMax + oFreeText.defaultPerpLength;
aNewCallout[2 * 1 + 1] = (yMin + (yMax - yMin) / 2);
break;
}
case AscPDF.CALLOUT_EXIT_POS.bottom: {
aNewCallout[2 * 2] = (xMin + (xMax - xMin) / 2);
aNewCallout[2 * 2 + 1] = yMax;
aNewCallout[2 * 1] = (xMin + (xMax - xMin) / 2);
aNewCallout[2 * 1 + 1] = yMax + oFreeText.defaultPerpLength;
break;
}
}
let aNewTextBoxRect = [xMin, yMin, xMax, yMax];
// расширяем рект на ширину линии (или на радиус cloud бордера)
let nLineWidth = oFreeText.GetWidth();
if (oFreeText.GetBorderEffectStyle() === AscPDF.BORDER_EFFECT_STYLES.Cloud) {
aNewTextBoxRect[0] -= 12 * oFreeText.GetBorderEffectIntensity();
aNewTextBoxRect[1] -= 12 * oFreeText.GetBorderEffectIntensity();
aNewTextBoxRect[2] += 12 * oFreeText.GetBorderEffectIntensity();
aNewTextBoxRect[3] += 12 * oFreeText.GetBorderEffectIntensity();
}
else {
aNewTextBoxRect[0] -= nLineWidth;
aNewTextBoxRect[1] -= nLineWidth;
aNewTextBoxRect[2] += nLineWidth;
aNewTextBoxRect[3] += nLineWidth;
}
// находим рект стрелки, учитывая окончание линии
let aArrowRect = aNewCallout.length ? oFreeText.GetArrowRect([aNewCallout[2], aNewCallout[3], aNewCallout[0], aNewCallout[1]]) : null;
// находим результирующий rect аннотации
aNewRect = AscPDF.unionRectangles([aArrowRect, aNewTextBoxRect, findBoundingRectangle(aNewCallout)]);
// пересчитываем RD.
aNewRD = [
(xMin - aNewRect[0]),
(yMin - aNewRect[1]),
(aNewRect[2] - xMax),
(aNewRect[3] - yMax)
];
}
if (aNewCallout.length != 0) {
oFreeText.SetCallout(aNewCallout);
}
oFreeText.SetRectangleDiff(aNewRD);
oFreeText.SetRect(aNewRect);
oFreeText.onAfterMove();
oViewer.DrawingObjects.drawingObjects.length = 0;
}
oDoc.DoAction(function() {
for (i = 0; i < aTracks.length; ++i)
{
var oTrack = aTracks[i];
bounds = oTrack.getBounds();
oTrack.trackEnd(false);
let oMajorObj = oTrack.originalObject.getMainGroup() || oTrack.originalObject;
// для аннотаций свой расчет ректа и точек, потому что меняем саму геометрию при редактировании
if (oMajorObj.IsAnnot()) {
let oAnnot = oMajorObj;
if (oTrack instanceof AscFormat.ResizeTrackShapeImage) {
let aRect = [bounds.posX * g_dKoef_mm_to_pt, bounds.posY * g_dKoef_mm_to_pt, (bounds.posX + bounds.extX) * g_dKoef_mm_to_pt, (bounds.posY + bounds.extY) * g_dKoef_mm_to_pt];
if (oAnnot.IsLine()) {
if (!oAnnot.HasAdjustments()) {
let aPaths = oTrack.geometry.pathLst[0].ArrPathCommand;
let aLinePoints = [];
let oPt1 = {
x: (bounds.posX + aPaths[0].X) * g_dKoef_mm_to_pt,
y: (bounds.posY + aPaths[0].Y) * g_dKoef_mm_to_pt
};
let oPt2 = {
x: (bounds.posX + aPaths[1].X) * g_dKoef_mm_to_pt,
y: (bounds.posY + aPaths[1].Y) * g_dKoef_mm_to_pt
};
if (oTrack.resizedflipH) {
aLinePoints[0] = oPt2.x;
aLinePoints[2] = oPt1.x;
}
else {
aLinePoints[0] = oPt1.x;
aLinePoints[2] = oPt2.x;
}
if (oTrack.resizedflipV) {
aLinePoints[1] = oPt2.y;
aLinePoints[3] = oPt1.y;
}
else {
aLinePoints[1] = oPt1.y;
aLinePoints[3] = oPt2.y;
}
oAnnot.SetLinePoints(aLinePoints);
oAnnot.recalcBounds();
oAnnot.recalcGeometry();
oAnnot.SetNeedRecalcSizes(true);
oAnnot.Recalculate(true);
let nLineW = oAnnot.GetWidth() * g_dKoef_pt_to_mm;
let oGrBounds = oAnnot.bounds;
aRect[0] = (oGrBounds.l - nLineW) * g_dKoef_mm_to_pt;
aRect[1] = (oGrBounds.t - nLineW) * g_dKoef_mm_to_pt;
aRect[2] = (oGrBounds.r + nLineW) * g_dKoef_mm_to_pt;
aRect[3] = (oGrBounds.b + nLineW) * g_dKoef_mm_to_pt;
}
else {
function calcNewLinePoints(offX, offY, w, h, rad, isTop) {
const cx = offX + w * 0.5,
cy = offY + h * 0.5,
cos = Math.cos(rad),
sin = Math.sin(rad);
const dySign = isTop ? -1 : 1;
const dx1 = -w * 0.5, dy1 = dySign * h * 0.5;
const dx2 = w * 0.5, dy2 = dySign * h * 0.5;
const x1 = cx + dx1 * cos - dy1 * sin;
const y1 = cy + dx1 * sin + dy1 * cos;
const x2 = cx + dx2 * cos - dy2 * sin;
const y2 = cy + dx2 * sin + dy2 * cos;
return [
x1 * g_dKoef_mm_to_pt, y1 * g_dKoef_mm_to_pt,
x2 * g_dKoef_mm_to_pt, y2 * g_dKoef_mm_to_pt
];
}
let isMinus = oAnnot.GetLeaderLength() < 0;
let aNewLinePoints = calcNewLinePoints(bounds.posX, bounds.posY, bounds.extX, bounds.extY, oAnnot.GetRot(), isMinus);
let nScaleY = bounds.extY / oAnnot.extY;
oAnnot.SetLeaderExtend(oAnnot.GetLeaderExtend() * nScaleY);
oAnnot.SetLeaderLength(oAnnot.GetLeaderLength() * nScaleY * (isMinus ? -1 : 1));
oAnnot.SetLinePoints(aNewLinePoints);
oAnnot.recalcBounds();
oAnnot.recalcGeometry();
oAnnot.SetNeedRecalcSizes(true);
oAnnot.Recalculate(true);
let nLineW = oAnnot.GetWidth() * g_dKoef_pt_to_mm;
let oGrBounds = oAnnot.bounds;
aRect[0] = (oGrBounds.l - nLineW) * g_dKoef_mm_to_pt;
aRect[1] = (oGrBounds.t - nLineW) * g_dKoef_mm_to_pt;
aRect[2] = (oGrBounds.r + nLineW) * g_dKoef_mm_to_pt;
aRect[3] = (oGrBounds.b + nLineW) * g_dKoef_mm_to_pt;
}
oAnnot.SetRect(AscPDF.unionRectangles([aRect, oAnnot.private_CalcBoundingRect()]));
}
else if (oAnnot.IsCircle() || oAnnot.IsSquare()) {
// aRect in this case is an annot OrigRect - Rectangle Diff
AscCommon.History.StartNoHistoryMode();
let aCurRect = oAnnot.GetRect().slice();
let aCurRD = oAnnot.GetRectangleDiff().slice();
let nLineW = oAnnot.GetWidth() * g_dKoef_pt_to_mm;
oAnnot.SetRect(aRect);
oAnnot.SetRectangleDiff([0, 0, 0, 0]);
oAnnot.recalcBounds();
oAnnot.recalcGeometry();
oAnnot.Recalculate(true);
AscCommon.History.EndNoHistoryMode();
let oGrBounds = oAnnot.bounds;
let oShapeBounds = oAnnot.getRectBounds();
aRect[0] = Math.round(oGrBounds.l - nLineW) * g_dKoef_mm_to_pt;
aRect[1] = Math.round(oGrBounds.t - nLineW) * g_dKoef_mm_to_pt;
aRect[2] = Math.round(oGrBounds.r + nLineW) * g_dKoef_mm_to_pt;
aRect[3] = Math.round(oGrBounds.b + nLineW) * g_dKoef_mm_to_pt;
oAnnot._rect = aCurRect;
oAnnot._rectDiff = aCurRD;
oAnnot.SetRect(aRect);
oAnnot.SetRectangleDiff([
Math.round(oShapeBounds.l - oGrBounds.l + nLineW) * g_dKoef_mm_to_pt,
Math.round(oShapeBounds.t - oGrBounds.t + nLineW) * g_dKoef_mm_to_pt,
Math.round(oGrBounds.r - oShapeBounds.r + nLineW) * g_dKoef_mm_to_pt,
Math.round(oGrBounds.b - oShapeBounds.b + nLineW) * g_dKoef_mm_to_pt
]);
}
else if (oAnnot.IsInk()) {
oAnnot.UpdateGestures(aRect);
oAnnot.SetRect(aRect);
}
else if (oAnnot.IsStamp()) {
AscCommon.History.StartNoHistoryMode();
let aCurRect = oAnnot.GetRect().slice();
let oCurXfrm = oAnnot.getXfrm();
let nCurExtX = oAnnot.getXfrmExtX();
let nCurExtY = oAnnot.getXfrmExtY();
let nCurOffX = oAnnot.getXfrmOffX();
let nCurOffY = oAnnot.getXfrmOffY();
oAnnot.recalcBounds();
oAnnot.recalcGeometry();
oAnnot.SetRect(aRect);
AscPDF.CAnnotationBase.prototype.RecalcSizes.call(oAnnot);
oAnnot.recalculate();
AscCommon.History.EndNoHistoryMode();
let oGrBounds = oAnnot.bounds;
aRect[0] = oGrBounds.l * g_dKoef_mm_to_pt;
aRect[1] = oGrBounds.t * g_dKoef_mm_to_pt;
aRect[2] = oGrBounds.r * g_dKoef_mm_to_pt;
aRect[3] = oGrBounds.b * g_dKoef_mm_to_pt;
oAnnot._rect = aCurRect;
oCurXfrm.extX = nCurExtX;
oCurXfrm.extY = nCurExtY;
oCurXfrm.offX = nCurOffX;
oCurXfrm.offY = nCurOffY;
oAnnot.SetRect(aRect);
}
else if (oAnnot.IsFreeText()) {
endTrackFreeTextAnnot.call(this, oTrack, oMajorObj);
}
else {
oAnnot.SetRect(aRect);
}
}
else if (oTrack instanceof AscFormat.MoveShapeImageTrack) {
if (oAnnot.IsFreeText()) {
endTrackFreeTextAnnot.call(this, oTrack, oMajorObj);
}
}
else if (oTrack instanceof AscFormat.EditShapeGeometryTrack) {
let aRect = [bounds.posX * g_dKoef_mm_to_pt, bounds.posY * g_dKoef_mm_to_pt, (bounds.posX + bounds.extX) * g_dKoef_mm_to_pt, (bounds.posY + bounds.extY) * g_dKoef_mm_to_pt];
if (oAnnot.IsPolygon()) {
// меняем только редактируемую точку в массиве vertices
var pageObject = oViewer.getPageByCoords(AscCommon.global_mouseEvent.X, AscCommon.global_mouseEvent.Y);
let aVertices = oAnnot.GetVertices().slice();
// если редактируется последняя точка, то надо отредактировать ещё начальную (только у Polygon, в случае если первая совпадает с последней)
let nStartPos = (oTrack.gmEditPtIdx + 1) * 2;
let nFirstX = aVertices[0];
let nFirstY = aVertices[1];
let nLastX = aVertices[aVertices.length - 2];
let nLastY = aVertices[aVertices.length - 1];
if (nStartPos == aVertices.length - 2 && nFirstX == nLastX && nFirstY == nLastY) {
aVertices.splice(0, 2, pageObject.x, pageObject.y);
}
aVertices.splice(nStartPos, 2, pageObject.x, pageObject.y);
oAnnot.SetVertices(aVertices);
// расширяем рект на ширину линии (или на радиус cloud бордера)
let nLineWidth = oAnnot.GetWidth();
if (oAnnot.GetBorderEffectStyle() === AscPDF.BORDER_EFFECT_STYLES.Cloud) {
aRect[0] -= 12 * oAnnot.GetBorderEffectIntensity();
aRect[1] -= 12 * oAnnot.GetBorderEffectIntensity();
aRect[2] += 12 * oAnnot.GetBorderEffectIntensity();
aRect[3] += 12 * oAnnot.GetBorderEffectIntensity();
}
else {
aRect[0] -= nLineWidth;
aRect[1] -= nLineWidth;
aRect[2] += nLineWidth;
aRect[3] += nLineWidth;
}
oAnnot.SetRect(aRect);
}
else if (oAnnot.IsPolyLine()) {
// меняем только редактируемую точку в массиве vertices
var pageObject = oViewer.getPageByCoords(AscCommon.global_mouseEvent.X, AscCommon.global_mouseEvent.Y);
let aVertices = oAnnot.GetVertices().slice();
let nStartPos = oTrack.gmEditPtIdx * 2;
aVertices.splice(nStartPos, 2, pageObject.x, pageObject.y);
oAnnot.SetVertices(aVertices);
// расширяем рект на ширину линии
let nLineWidth = oAnnot.GetWidth();
aRect[0] -= nLineWidth;
aRect[1] -= nLineWidth;
aRect[2] += nLineWidth;
aRect[3] += nLineWidth;
// у polyline могут быть окончания линии, их тоже учитываем
let aResultRect = aRect;
if (oAnnot.IsPolyLine()) {
let aMinShapeRect = oAnnot.private_CalcBoundingRect();
aResultRect = AscPDF.unionRectangles([aRect, aMinShapeRect]);
}
oAnnot.SetRect(aResultRect);
}
}
else if (oTrack instanceof AscFormat.RotateTrackShapeImage) {
let aRect = [bounds.posX * g_dKoef_mm_to_pt, bounds.posY * g_dKoef_mm_to_pt, (bounds.posX + bounds.extX) * g_dKoef_mm_to_pt, (bounds.posY + bounds.extY) * g_dKoef_mm_to_pt];
if (oAnnot.IsStamp()) {
oAnnot.SetRotate(-oTrack.angle * (180 / Math.PI));
AscCommon.History.StartNoHistoryMode();
let aCurRect = oAnnot.GetRect().slice();
let oCurXfrm = oAnnot.getXfrm();
let nCurExtX = oAnnot.getXfrmExtX();
let nCurExtY = oAnnot.getXfrmExtY();
let nCurOffX = oAnnot.getXfrmOffX();
let nCurOffY = oAnnot.getXfrmOffY();
oAnnot.recalcBounds();
oAnnot.recalcGeometry();
oAnnot.Recalculate(true);
AscCommon.History.EndNoHistoryMode();
let oGrBounds = oAnnot.bounds;
aRect[0] = oGrBounds.l * g_dKoef_mm_to_pt;
aRect[1] = oGrBounds.t * g_dKoef_mm_to_pt;
aRect[2] = oGrBounds.r * g_dKoef_mm_to_pt;
aRect[3] = oGrBounds.b * g_dKoef_mm_to_pt;
oAnnot._rect = aCurRect;
oCurXfrm.extX = nCurExtX;
oCurXfrm.extY = nCurExtY;
oCurXfrm.offX = nCurOffX;
oCurXfrm.offY = nCurOffY;
oAnnot.SetRect(aRect);
}
if (oAnnot.IsLine()) {
function rotateLinePoints(points, h, rad, isTop) {
let x1 = points[0], y1 = points[1];
let x2 = points[2], y2 = points[3];
let dx = x2 - x1, dy = y2 - y1;
let len = Math.hypot(dx, dy);
let mx = (x1 + x2) * 0.5;
let my = (y1 + y2) * 0.5;
let nx = -dy / len, ny = dx / len;
// ← единственное изменение: учёт стороны
let dir = isTop ? 1 : -1;
let cx = mx + nx * h * 0.5 * dir;
let cy = my + ny * h * 0.5 * dir;
let cos = Math.cos(rad), sin = Math.sin(rad);
function rotate(x, y) {
return [
(x - cx) * cos - (y - cy) * sin + cx,
(x - cx) * sin + (y - cy) * cos + cy
];
}
let r1 = rotate(x1, y1), r2 = rotate(x2, y2);
return [r1[0], r1[1], r2[0], r2[1]];
}
let aLinePoints = oAnnot.GetLinePoints();
let aNewLinePoints = rotateLinePoints(aLinePoints, oAnnot.extY * g_dKoef_mm_to_pt, oTrack.angle - oAnnot.GetRot(), oAnnot.GetLeaderLength() < 0);
oAnnot.SetLinePoints(aNewLinePoints);
oAnnot.recalcBounds();
oAnnot.recalcGeometry();
oAnnot.SetNeedRecalcSizes(true);
oAnnot.Recalculate(true);
let nLineW = oAnnot.GetWidth() * g_dKoef_pt_to_mm;
let oGrBounds = oAnnot.bounds;
aRect[0] = (oGrBounds.l - nLineW) * g_dKoef_mm_to_pt;
aRect[1] = (oGrBounds.t - nLineW) * g_dKoef_mm_to_pt;
aRect[2] = (oGrBounds.r + nLineW) * g_dKoef_mm_to_pt;
aRect[3] = (oGrBounds.b + nLineW) * g_dKoef_mm_to_pt;
oAnnot.SetRect(AscPDF.unionRectangles([aRect, oAnnot.private_CalcBoundingRect()]));
}
}
else if (oTrack instanceof AscFormat.XYAdjustmentTrack) {
if (oAnnot.IsLine()) {
let sAdjName = oTrack.refY;
let nValue = oTrack.geometry.gdLst[sAdjName];
function shiftLinePoints(points, diff, rad) {
let shiftX = -Math.sin(rad) * diff;
let shiftY = Math.cos(rad) * diff;
return [
points[0] + shiftX,
points[1] + shiftY,
points[2] + shiftX,
points[3] + shiftY,
];
}
let nCurLeaderLength = oAnnot.GetLeaderLength();
let nCurLeaderExt = oAnnot.GetLeaderExtend();
let nNewValue = (nValue / 100000) * oAnnot.extY * g_dKoef_mm_to_pt;
if (sAdjName == "adj1") {
let nNewLeaderLength = nNewValue;
if (nCurLeaderLength < 0) {
oAnnot.SetLeaderLength(-1 * nNewValue);
}
else {
oAnnot.SetLeaderLength(nNewValue);
let aNewLinePoints = shiftLinePoints(oAnnot.GetLinePoints(), Math.abs(nNewLeaderLength) - Math.abs(nCurLeaderLength), oAnnot.GetRot());
oAnnot.SetLinePoints(aNewLinePoints);
}
}
else if (sAdjName == "adj2") {
let nNewLeaderExt = nNewValue;
oAnnot.SetLeaderExtend(nNewValue);
if (nCurLeaderLength > 0) {
let aNewLinePoints = shiftLinePoints(oAnnot.GetLinePoints(), Math.abs(nNewLeaderExt) - Math.abs(nCurLeaderExt), oAnnot.GetRot())
oAnnot.SetLinePoints(aNewLinePoints);
}
}
oAnnot.recalcBounds();
oAnnot.recalcGeometry();
oAnnot.SetNeedRecalcSizes(true);
oAnnot.Recalculate(true);
let nLineW = oAnnot.GetWidth() * g_dKoef_pt_to_mm;
let oGrBounds = oAnnot.bounds;
let aRect = [
(oGrBounds.l - nLineW) * g_dKoef_mm_to_pt,
(oGrBounds.t - nLineW) * g_dKoef_mm_to_pt,
(oGrBounds.r + nLineW) * g_dKoef_mm_to_pt,
(oGrBounds.b + nLineW) * g_dKoef_mm_to_pt
];
oAnnot.SetRect(AscPDF.unionRectangles([aRect, oAnnot.private_CalcBoundingRect()]));
}
}
}
if (oMajorObj.IsDrawing()) {
let isMoveShapeImageTrack = oTrack instanceof AscFormat.MoveShapeImageTrack;
let isEditFieldShape = oMajorObj.IsEditFieldShape();
let aRect = [
bounds.posX * g_dKoef_mm_to_pt,
bounds.posY * g_dKoef_mm_to_pt,
(bounds.posX + bounds.extX) * g_dKoef_mm_to_pt,
(bounds.posY + bounds.extY) * g_dKoef_mm_to_pt
];
if (isMoveShapeImageTrack && oTrack.pageIndex !== oMajorObj.GetPage()) {
if (!isEditFieldShape) {
oMajorObj.SetPage(oTrack.pageIndex);
}
}
if (isEditFieldShape) {
function rotateRect(rect, angle) {
let x1 = rect[0];
let y1 = rect[1];
let x2 = rect[2];
let y2 = rect[3];
const cx = (x1 + x2) / 2;
const cy = (y1 + y2) / 2;
let w = Math.abs(x2 - x1);
let h = Math.abs(y2 - y1);
if (angle === 90 || angle === 270) {
let tmp = w;
w = h;
h = tmp;
} else if (angle !== 180) {
return rect;
}
return [
cx - w / 2, cy - h / 2,
cx + w / 2, cy + h / 2
];
}
let oField = oMajorObj.GetEditField();
let oDoc = oField.GetDocument();
let nPage = oField.GetPage();
let nPageRotate = oDoc.Viewer.getPageRotate(nPage);
oField.SetRect(rotateRect(aRect, nPageRotate));
if (isMoveShapeImageTrack && oTrack.pageIndex !== oField.GetPage()) {
oField.SetPage(oTrack.pageIndex);
}
}
}
oMajorObj.SetNeedRecalc(true);
}
}, AscDFH.historydescription_CommonDrawings_EndTrack, this, pageIndex);
this.drawingObjects.changeCurrentState(new NullState(this.drawingObjects));
this.drawingObjects.clearTrackObjects();
return;
}
if(this.majorObject.parent.Is_Inline && this.majorObject.parent.Is_Inline())
{
if(this.drawingObjects.document.Document_Is_SelectionLocked(changestype_Drawing_Props) === false)
{
this.drawingObjects.document.StartAction(AscDFH.historydescription_Document_RotateInlineDrawing);
aTracks[0].trackEnd(true);
if(!aTracks[0].view3D)
{
this.majorObject.parent.CheckWH();
}
this.drawingObjects.document.Recalculate();
this.drawingObjects.document.FinalizeAction();
}
}
else
{
if(this.bSamePos !== true)
{
var aCheckParagraphs = [], aNearestPos = [], aParentParagraphs = [], aBounds = [], aDrawings = [], bMoveState = (this instanceof MoveState), nearest_pos;
var i, j, page_index, para_drawing;
for(i = 0; i < aTracks.length; ++i)
{
let oTrack = aTracks[i];
let oDrawing = oTrack.originalObject;
let oParaDrawing = oDrawing.GetParaDrawing()
aDrawings[i] = oParaDrawing;
bounds = oTrack.getBounds();
aBounds.push(bounds);
page_index = AscFormat.isRealNumber(oTrack.pageIndex) ? oTrack.pageIndex : oParaDrawing.pageIndex;
nearest_pos = this.drawingObjects.document.Get_NearestPos(page_index, bounds.min_x, bounds.min_y, true, oParaDrawing);
nearest_pos.Paragraph.MoveCursorToAnchorPos(nearest_pos);
aNearestPos.push(nearest_pos);
aParentParagraphs.push(aDrawings[i].Get_ParentParagraph());
}
if(bMoveState && e.CtrlKey && !this.drawingObjects.selection.cropSelection)
{
for(i = 0; i < aNearestPos.length; ++i)
{
if(aDrawings[i])
{
if(aDrawings[i].Locked !== true)
AscFormat.checkObjectInArray(aCheckParagraphs, aNearestPos[i].Paragraph);
else
AscFormat.checkObjectInArray(aCheckParagraphs, aParentParagraphs[i]);
}
}
if(false === this.drawingObjects.document.Document_Is_SelectionLocked(changestype_Drawing_Props, {Type : changestype_2_ElementsArray_and_Type , Elements : aCheckParagraphs, CheckType : AscCommon.changestype_Paragraph_Content}))
{
this.drawingObjects.document.StartAction(AscDFH.historydescription_Document_RotateFlowDrawingCtrl);
this.drawingObjects.resetSelection();
var aDrawingsToAdd = [];
for(i = 0; i < aTracks.length; ++i)
{
bounds = aBounds[i];
para_drawing = aDrawings[i].Copy();
if(para_drawing.GraphicObj)
{
para_drawing.GraphicObj.copyComments(this.drawingObjects.document);
}
para_drawing.Set_RelativeHeight(this.drawingObjects.getZIndex());
aDrawingsToAdd.push(para_drawing);
if(aDrawings[i].Locked !== true)
{
aNearestPos[i].Paragraph.Check_NearestPos(aNearestPos[i]);
para_drawing.Set_XYForAdd(bounds.posX, bounds.posY, aNearestPos[i], pageIndex);
}
else
{
para_drawing.Set_XY(bounds.posX, bounds.posY, aDrawings[i].Get_ParentParagraph(), pageIndex, true);
}
}
for(i = 0; i < aDrawingsToAdd.length; ++i)
{
para_drawing = aDrawingsToAdd[i];
if(aDrawings[i].Locked !== true)
{
aNearestPos[i].Paragraph.Check_NearestPos(aNearestPos[i]);
para_drawing.AddToDocument(aNearestPos[i]);
}
else
{
para_drawing.AddToParagraph(aDrawings[i].Get_ParentParagraph());
}
}
//ToDo: Do not Select drawing on ParaDrawing.prototype.AddToDocument
for(i = 0; i < aDrawingsToAdd.length; ++i)
{
para_drawing = aDrawingsToAdd[i];
this.drawingObjects.selectObject(para_drawing.GraphicObj, pageIndex);
}
this.drawingObjects.document.Recalculate();
this.drawingObjects.document.FinalizeAction();
}
}
else
{
var bNoNeedCheck = false;
if(bMoveState)
{
bNoNeedCheck = true;
for(i = 0; i < aNearestPos.length; ++i)
{
if(aNearestPos[i].Paragraph !== aParentParagraphs[i] && aDrawings[i].Locked !== true)
{
AscFormat.checkObjectInArray(aCheckParagraphs, aNearestPos[i].Paragraph);
AscFormat.checkObjectInArray(aCheckParagraphs, aParentParagraphs[i]);
}
else{
bNoNeedCheck = false;
}
}
}
if(false === this.drawingObjects.document.Document_Is_SelectionLocked(changestype_Drawing_Props, {Type : changestype_2_ElementsArray_and_Type , Elements : aCheckParagraphs, CheckType : AscCommon.changestype_Paragraph_Content}, bNoNeedCheck))
{
this.drawingObjects.document.StartAction(AscDFH.historydescription_Document_RotateFlowDrawingNoCtrl);
if(bMoveState && !this.drawingObjects.selection.cropSelection)
{
this.drawingObjects.resetSelection();
}
let aDrawingsToSelect = [];
for(i = 0; i < aDrawings.length; ++i)
{
bounds = aBounds[i];
var oTrack = aTracks[i];
oTrack.trackEnd(true);
var original = aDrawings[i];
if(!bMoveState && !oTrack.view3D && !(oTrack.originalObject && oTrack.originalObject.isCrop))
{
original.CheckWH();
}
if(bMoveState && aNearestPos[i].Paragraph !== aParentParagraphs[i] && aDrawings[i].Locked !== true && !(oTrack.originalObject && oTrack.originalObject.isCrop))
{
// На удалении включаем пересчет из-за бага (28015), чтобы во время добавления автофигуры на эту же страницу
// расположение всех элементов было рассчитано с уже удаленной автофигурой.
// Автофигуры мы переносим так, как будто это происходит не в режиме рецензирования, но
// при этом мы должны сохранить их начальные настройки рецензирования.
var bTrackRevisions = false;
if (this.drawingObjects.document.IsTrackRevisions())
{
bTrackRevisions = this.drawingObjects.document.GetLocalTrackRevisions();
this.drawingObjects.document.SetLocalTrackRevisions(false);
}
this.drawingObjects.document.MoveDrawing = true;
var oOriginalRun = original.Parent.Get_DrawingObjectRun(original.Id);
// Всегда создаем копию при переносе, чтобы не было проблем при совместном редактировании
var originalCopy = original.Copy();
originalCopy.CopyComments();
original.Remove_FromDocument(false);
aNearestPos[i].Paragraph.Check_NearestPos(aNearestPos[i]);
originalCopy.Set_XYForAdd(bounds.posX, bounds.posY, aNearestPos[i], pageIndex);
originalCopy.AddToDocument(aNearestPos[i], null, oOriginalRun);
this.drawingObjects.document.MoveDrawing = false;
if (false !== bTrackRevisions)
this.drawingObjects.document.SetLocalTrackRevisions(bTrackRevisions);
if(original.GraphicObj === this.drawingObjects.selection.cropSelection)
{
this.drawingObjects.resetSelection();
this.drawingObjects.selection.cropSelection = originalCopy.GraphicObj;
}
aDrawingsToSelect.push({drawing: originalCopy.GraphicObj, pageIndex: pageIndex});
}
else
{
if(true !== oTrack.bTextWarp && !(oTrack.originalObject && oTrack.originalObject.isCrop))
{
original.Set_XY(bounds.posX, bounds.posY, aParentParagraphs[i], original.GraphicObj.selectStartPage, bMoveState)
}
if(bMoveState)
{
aDrawingsToSelect.push({drawing: original.GraphicObj, pageIndex: pageIndex});
}
}
this.drawingObjects.document.Recalculate();
}
for(let drawingIdx = 0; drawingIdx < aDrawingsToSelect.length; ++drawingIdx)
{
let oSelectInfo = aDrawingsToSelect[drawingIdx];
this.drawingObjects.selectObject(oSelectInfo.drawing, oSelectInfo.pageIndex);
}
this.drawingObjects.document.FinalizeAction();
}
}
}
}
}
this.drawingObjects.updateOverlay();
}
};
function ChangeAdjState(drawingObjects, majorObject)
{
this.drawingObjects = drawingObjects;
this.majorObject = majorObject;
}
ChangeAdjState.prototype =
{
onMouseDown: function(e, x, y, pageIndex)
{
if(this.drawingObjects.handleEventMode === HANDLE_EVENT_MODE_HANDLE){
this.onMouseUp(e, x, y, pageIndex);
this.drawingObjects.OnMouseDown(e, x, y, pageIndex);
}
if(this.drawingObjects.handleEventMode === HANDLE_EVENT_MODE_CURSOR)
return {cursorType: "crosshair", objectId: this.majorObject.Get_Id()};
},
onMouseMove: function(e, x, y, pageIndex)
{
if(!e.IsLocked)
{
this.onMouseUp(e, x, y, pageIndex);
return;
}
var t = AscFormat.CheckCoordsNeedPage(x, y, pageIndex, this.majorObject.selectStartPage, this.drawingObjects.drawingDocument);
this.drawingObjects.arrTrackObjects[0].track(t.x, t.y);
this.drawingObjects.updateOverlay();
},
onMouseUp: RotateState.prototype.onMouseUp
};
function PreResizeState(drawingObjects, majorObject, cardDirection)
{
this.drawingObjects = drawingObjects;
this.majorObject = majorObject;
this.cardDirection = cardDirection;
this.handleNum = this.majorObject.getNumByCardDirection(cardDirection);
}
PreResizeState.prototype =
{
onMouseDown: function(e, x, y, pageIndex)
{
if(this.drawingObjects.handleEventMode === HANDLE_EVENT_MODE_HANDLE){
this.onMouseUp(e, x, y, pageIndex);
this.drawingObjects.OnMouseDown(e, x, y, pageIndex);
}
if(this.drawingObjects.handleEventMode === HANDLE_EVENT_MODE_CURSOR)
return {cursorType: "default", objectId: this.majorObject.Get_Id(), bMarker: true};
},
onMouseMove: function(e, x, y, pageIndex)
{
if(!e.IsLocked)
{
this.onMouseUp(e, x, y, pageIndex);
return;
}
this.drawingObjects.swapTrackObjects();
this.drawingObjects.changeCurrentState(new ResizeState(this.drawingObjects, this.majorObject, this.handleNum, this.cardDirection));
this.drawingObjects.OnMouseMove(e, x, y, pageIndex);
},
onMouseUp: function(e, x, y, pageIndex)
{
this.drawingObjects.clearPreTrackObjects();
this.drawingObjects.changeCurrentState(new NullState(this.drawingObjects));
}
};
function ResizeState(drawingObjects, majorObject, handleNum, cardDirection)
{
this.drawingObjects = drawingObjects;
this.majorObject = majorObject;
this.handleNum = handleNum;
this.cardDirection = cardDirection;
}
ResizeState.prototype =
{
onMouseDown: function(e, x, y, pageIndex)
{
if(this.drawingObjects.handleEventMode === HANDLE_EVENT_MODE_HANDLE){
this.onMouseUp(e, x, y, pageIndex);
this.drawingObjects.OnMouseDown(e, x, y, pageIndex);
}
if(this.drawingObjects.handleEventMode === HANDLE_EVENT_MODE_CURSOR)
return {cursorType: AscFormat.CURSOR_TYPES_BY_CARD_DIRECTION[this.cardDirection] ? AscFormat.CURSOR_TYPES_BY_CARD_DIRECTION[this.cardDirection] : "default", objectId: this.majorObject.Get_Id()};
},
onMouseMove: function(e, x, y, pageIndex)
{
if(!e.IsLocked)
{
this.onMouseUp(e, x, y, pageIndex);
return;
}
var coords = AscFormat.CheckCoordsNeedPage(x, y, pageIndex, this.majorObject.selectStartPage, this.drawingObjects.drawingDocument);
var startPage = this.drawingObjects.graphicPages[this.majorObject.selectStartPage];
var start_arr = startPage ? startPage.beforeTextObjects.concat(startPage.inlineObjects, startPage.behindDocObjects) : [];
var resize_coef = this.majorObject.getResizeCoefficients(this.handleNum, coords.x, coords.y, start_arr);
this.drawingObjects.trackResizeObjects(resize_coef.kd1, resize_coef.kd2, e, coords.x, coords.y);
if(AscFormat.isRealNumber(resize_coef.snapX))
{
this.drawingObjects.drawingDocument.DrawVerAnchor(pageIndex, resize_coef.snapX);
}
if(AscFormat.isRealNumber(resize_coef.snapY))
{
this.drawingObjects.drawingDocument.DrawHorAnchor(pageIndex, resize_coef.snapY);
}
this.drawingObjects.updateOverlay();
},
onMouseUp: RotateState.prototype.onMouseUp
};
function PreMoveState(drawingObjects, startX, startY, shift, ctrl, majorObject, majorObjectIsSelected, bInside, bGroupSelection)
{
this.drawingObjects = drawingObjects;
this.majorObject = majorObject;
this.startX = startX;
this.startY = startY;
this.shift = shift;
this.ctrl = ctrl;
this.majorObjectIsSelected = majorObjectIsSelected;
this.bInside = bInside;
this.bGroupSelection = bGroupSelection;
this.startPageIndex = null;
if(majorObject.parent)
{
this.startPageIndex = majorObject.parent.pageIndex;
}
else
{
if(majorObject.group)
{
var oCurGroup = majorObject.group;
while (oCurGroup.group)
{
oCurGroup = oCurGroup.group;
}
if(oCurGroup)
{
if(oCurGroup.parent)
{
this.startPageIndex = oCurGroup.parent.pageIndex;
}
}
}
}
}
PreMoveState.prototype =
{
onMouseDown: function(e, x, y, pageIndex)
{
if(this.drawingObjects.handleEventMode === HANDLE_EVENT_MODE_HANDLE){
this.onMouseUp(e, x, y, pageIndex);
this.drawingObjects.OnMouseDown(e, x, y, pageIndex);
}
if(this.drawingObjects.handleEventMode === HANDLE_EVENT_MODE_CURSOR)
return {cursorType: "default", objectId: this.majorObject.Get_Id()};
},
onMouseMove: function(e, x, y, pageIndex)
{
if(!e.IsLocked || (this.majorObject && this.majorObject.isForm && this.majorObject.isForm() && this.majorObject.getInnerForm() && this.majorObject.getInnerForm().IsFormLocked()))
{
this.onMouseUp(e, x, y, pageIndex);
return;
}
if(Math.abs(this.startX - x) > MOVE_DELTA || Math.abs(this.startY - y) > MOVE_DELTA || pageIndex !== this.startPageIndex)
{
this.drawingObjects.swapTrackObjects();
this.drawingObjects.changeCurrentState(new MoveState(this.drawingObjects, this.majorObject, this.startX, this.startY));
this.drawingObjects.OnMouseMove(e, x, y, pageIndex);
}
},
onMouseUp: function(e, x, y, pageIndex)
{
return AscFormat.handleMouseUpPreMoveState(this.drawingObjects, e, x, y, pageIndex, true)
}
};
function MoveState(drawingObjects, majorObject, startX, startY)
{
this.drawingObjects = drawingObjects;
this.majorObject = majorObject;
this.startX = startX;
this.startY = startY;
this.bSamePos = true;
}
MoveState.prototype =
{
onMouseDown: function(e, x, y, pageIndex)
{
if(this.drawingObjects.handleEventMode === HANDLE_EVENT_MODE_HANDLE){
this.onMouseUp(e, x, y, pageIndex);
this.drawingObjects.OnMouseDown(e, x, y, pageIndex);
}
if(this.drawingObjects.handleEventMode === HANDLE_EVENT_MODE_CURSOR)
return {cursorType: "default", objectId: this.majorObject.Get_Id()};
},
onMouseMove: function(e, x, y, pageIndex)
{
if(!e.IsLocked)
{
this.onMouseUp(e, x, y, pageIndex);
return;
}
var _arr_track_objects = this.drawingObjects.arrTrackObjects;
var _objects_count = _arr_track_objects.length;
var _object_index;
var result_x, result_y;
if(!e.ShiftKey)
{
result_x = x;
result_y = y;
}
else
{
var abs_dist_x = Math.abs(this.startX - x);
var abs_dist_y = Math.abs(this.startY - y);
if(abs_dist_x > abs_dist_y)
{
result_x = x;
result_y = this.startY;
}
else
{
result_x = this.startX;
result_y = y;
}
}
var t = AscFormat.CheckCoordsNeedPage(x, y, pageIndex, this.majorObject.selectStartPage, this.drawingObjects.drawingDocument);
var startPage = this.drawingObjects.graphicPages[this.majorObject.selectStartPage];
var startPos = {x: this.startX, y: this.startY};
var start_arr = startPage.beforeTextObjects.concat(startPage.inlineObjects, startPage.behindDocObjects);
var min_dx = null, min_dy = null;
var dx, dy;
var snap_x = null, snap_y = null;
var snapHorArray = [], snapVerArray = [];
var page = this.drawingObjects.document.Pages ? this.drawingObjects.document.Pages[pageIndex] : null;
if (page) {
snapHorArray.push(page.Margins.Left);
snapHorArray.push(page.Margins.Right);
snapHorArray.push(page.Width/2);
snapVerArray.push(page.Margins.Top);
snapVerArray.push(page.Margins.Bottom);
snapVerArray.push(page.Height/2);
}
if(result_x === this.startX)
{
min_dx = 0;
}
else
{
for(var track_index = 0; track_index < _arr_track_objects.length; ++track_index)
{
var cur_track_original_shape = _arr_track_objects[track_index].originalObject;
var trackSnapArrayX = cur_track_original_shape ? cur_track_original_shape.snapArrayX : null;
if(!trackSnapArrayX)
{
continue;
}
var curDX = result_x - startPos.x;
for(snap_index = 0; snap_index < trackSnapArrayX.length; ++snap_index)
{
var snap_obj = AscFormat.GetMinSnapDistanceXObjectByArrays(trackSnapArrayX[snap_index] + curDX, snapHorArray);
if(AscCommon.isRealObject(snap_obj))
{
dx = snap_obj.dist;
if(dx !== null)
{
if(min_dx === null)
{
min_dx = dx;
snap_x = snap_obj.pos;
}
else
{
if(Math.abs(min_dx) > Math.abs(dx))
{
min_dx = dx;
snap_x = snap_obj.pos;
}
}
}
}
}
if(start_arr.length > 0)
{
for(var snap_index = 0; snap_index < trackSnapArrayX.length; ++snap_index)
{
var snap_obj = AscFormat.GetMinSnapDistanceXObject(trackSnapArrayX[snap_index] + curDX, start_arr);
if(AscCommon.isRealObject(snap_obj))
{
dx = snap_obj.dist;
if(dx !== null)
{
if(min_dx === null)
{
snap_x = snap_obj.pos;
min_dx = dx;
}
else
{
if(Math.abs(min_dx) > Math.abs(dx))
{
min_dx = dx;
snap_x = snap_obj.pos;
}
}
}
}
}
}
}
}
if(result_y === this.startY)
{
min_dy = 0;
}
else
{
for(track_index = 0; track_index < _arr_track_objects.length; ++track_index)
{
cur_track_original_shape = _arr_track_objects[track_index].originalObject;
var trackSnapArrayY = cur_track_original_shape ? cur_track_original_shape.snapArrayY : null;
if(!trackSnapArrayY)
{
continue;
}
var curDY = result_y - startPos.y;
for(snap_index = 0; snap_index < trackSnapArrayY.length; ++snap_index)
{
var snap_obj = AscFormat.GetMinSnapDistanceYObjectByArrays(trackSnapArrayY[snap_index] + curDY, snapVerArray);
if(AscCommon.isRealObject(snap_obj))
{
dy = snap_obj.dist;
if(dy !== null)
{
if(min_dy === null)
{
min_dy = dy;
snap_y = snap_obj.pos;
}
else
{
if(Math.abs(min_dy) > Math.abs(dy))
{
min_dy = dy;
snap_y = snap_obj.pos;
}
}
}
}
}
if(start_arr.length > 0)
{
for(snap_index = 0; snap_index < trackSnapArrayY.length; ++snap_index)
{
var snap_obj = AscFormat.GetMinSnapDistanceYObject(trackSnapArrayY[snap_index] + curDY, start_arr);
if(AscCommon.isRealObject(snap_obj))
{
dy = snap_obj.dist;
if(dy !== null)
{
if(min_dy === null)
{
min_dy = dy;
snap_y = snap_obj.pos;
}
else
{
if(Math.abs(min_dy) > Math.abs(dy))
{
min_dy = dy;
snap_y = snap_obj.pos;
}
}
}
}
}
}
}
}
if(min_dx === null || Math.abs(min_dx) > SNAP_DISTANCE)
min_dx = 0;
else
{
if(AscFormat.isRealNumber(snap_x))
{
this.drawingObjects.drawingDocument.DrawVerAnchor(pageIndex, snap_x);
}
}
if(min_dy === null || Math.abs(min_dy) > SNAP_DISTANCE)
min_dy = 0;
else
{
if(AscFormat.isRealNumber(snap_y))
{
this.drawingObjects.drawingDocument.DrawHorAnchor(pageIndex, snap_y);
}
}
for(_object_index = 0; _object_index < _objects_count; ++_object_index)
_arr_track_objects[_object_index].track(result_x - this.startX + min_dx, result_y - this.startY + min_dy, pageIndex);
this.bSamePos = (AscFormat.fApproxEqual(result_x - this.startX + min_dx, 0) && AscFormat.fApproxEqual(result_y - this.startY + min_dy, 0) && this.majorObject.selectStartPage === pageIndex);
this.drawingObjects.updateOverlay();
},
onMouseUp: RotateState.prototype.onMouseUp
};
function PreMoveInGroupState(drawingObjects, group, startX, startY, ShiftKey, CtrlKey, majorObject, majorObjectIsSelected)
{
this.drawingObjects = drawingObjects;
this.group = group;
this.startX = startX;
this.startY = startY;
this.ShiftKey = ShiftKey;
this.CtrlKey = CtrlKey;
this.majorObject = majorObject;
this.majorObjectIsSelected = majorObjectIsSelected;
this.startPageIndex = null;
if(this.group && this.group.parent)
{
this.startPageIndex = this.group.parent.pageIndex;
}
}
PreMoveInGroupState.prototype =
{
onMouseDown: function(e, x,y,pageIndex)
{
if(this.drawingObjects.handleEventMode === HANDLE_EVENT_MODE_HANDLE){
this.onMouseUp(e, x, y, pageIndex);
this.drawingObjects.OnMouseDown(e, x, y, pageIndex);
}
if(this.drawingObjects.handleEventMode === HANDLE_EVENT_MODE_CURSOR)
return {cursorType: "default", objectId: this.majorObject.Get_Id()};
},
onMouseMove: function(e, x, y, pageIndex)
{
if(!e.IsLocked)
{
this.onMouseUp(e, x, y, pageIndex);
return;
}
if(Math.abs(this.startX - x) > MOVE_DELTA || Math.abs(this.startY - y) > MOVE_DELTA || pageIndex !== this.startPageIndex)
{
this.drawingObjects.swapTrackObjects();
this.drawingObjects.changeCurrentState(new MoveInGroupState(this.drawingObjects, this.majorObject, this.group, this.startX, this.startY));
this.drawingObjects.OnMouseMove(e, x, y, pageIndex);
}
},
onMouseUp: function(e, x, y, pageIndex)
{
if(e.CtrlKey && this.majorObjectIsSelected)
{
this.group.deselectObject(this.majorObject);
if(this.group.selectedObjects.length === 0){
this.drawingObjects.resetInternalSelection();
}
this.drawingObjects.document && this.drawingObjects.document.Document_UpdateInterfaceState();
this.drawingObjects.updateOverlay();
}
this.drawingObjects.clearPreTrackObjects();
this.drawingObjects.changeCurrentState(new NullState(this.drawingObjects));
}
};
function MoveInGroupState(drawingObjects, majorObject, group, startX, startY)
{
this.drawingObjects = drawingObjects;
this.majorObject = majorObject;
this.group = group;
this.startX = startX;
this.startY = startY;
this.bSamePos = true;
this.startPageIndex = null;
if(this.group && this.group.parent)
{
this.startPageIndex = this.group.parent.pageIndex;
}
const arrTracks = this.drawingObjects.arrTrackObjects;
this.hasObjectInSmartArt = false;
for (let i = 0; i < arrTracks.length; i += 1)
{
const oGraphicObject = arrTracks[i].originalObject;
if (oGraphicObject.isObjectInSmartArt())
{
this.hasObjectInSmartArt = true;
break;
}
}
}
MoveInGroupState.prototype =
{
onMouseDown: function(e, x, y, pageIndex)
{
if(this.drawingObjects.handleEventMode === HANDLE_EVENT_MODE_HANDLE)
{
this.onMouseUp(e, x, y, pageIndex);
this.drawingObjects.OnMouseDown(e, x, y, pageIndex);
}
if(this.drawingObjects.handleEventMode === HANDLE_EVENT_MODE_CURSOR)
return {cursorType: "default", objectId: this.majorObject.Get_Id()};
},
onMouseMove: MoveState.prototype.onMouseMove,
onMouseUp: function(e, x, y, pageIndex)
{
if (Asc.editor.isPdfEditor())
{
MoveState.prototype.onMouseUp.call(this, e, x, y, pageIndex);
return;
}
const parentParagraph = this.group.parent.Get_ParentParagraph();
const checkParagraphs = [];
if(this.group.parent.Is_Inline())
{
checkParagraphs.push(parentParagraph);
}
const tracks = [].concat(this.drawingObjects.arrTrackObjects);
this.drawingObjects.resetTrackState();
const checkData = {
Type: changestype_2_ElementsArray_and_Type,
Elements: checkParagraphs,
CheckType: AscCommon.changestype_Paragraph_Content
};
if(!this.drawingObjects.document.Document_Is_SelectionLocked(changestype_Drawing_Props, checkData))
{
this.drawingObjects.document.StartAction(AscDFH.historydescription_Document_MoveInGroup);
let i;
if(this instanceof MoveInGroupState && e.CtrlKey && !this.hasObjectInSmartArt)
{
this.group.resetSelection();
for(i = 0; i < tracks.length; ++i)
{
const copy = tracks[i].originalObject.copy(undefined);
if(copy.copyComments)
{
copy.copyComments(this.drawingObjects.document);
}
copy.setGroup(tracks[i].originalObject.group);
copy.group.addToSpTree(copy.group.length, copy);
tracks[i].originalObject = copy;
tracks[i].trackEnd(true);
this.group.selectObject(copy, 0);
}
}
else
{
for(i = 0; i < tracks.length; ++i)
{
tracks[i].trackEnd(true);
}
}
const posObject = this.group.updateCoordinatesAfterInternalResize();
this.group.recalculate();
const posX = posObject.posX;
const posY = posObject.posY;
this.group.spPr.xfrm.setOffX(0);
this.group.spPr.xfrm.setOffY(0);
if(this.group.parent.Is_Inline())
{
this.group.parent.CheckWH();
}
else
{
this.group.parent.CheckWH();
let pageNum;
if(this.group && this.group.parent)
{
pageNum = this.group.parent.pageIndex;
}
else if(AscFormat.isRealNumber(this.startPageIndex))
{
pageNum = this.startPageIndex;
}
else
{
pageNum = 0;
}
this.group.parent.Set_XY(this.group.posX + posX, this.group.posY + posY, parentParagraph, pageNum, false);
}
this.drawingObjects.document.Recalculate();
this.drawingObjects.document.FinalizeAction();
}
this.drawingObjects.updateOverlay();
}
};
function PreRotateInGroupState(drawingObjects, group, majorObject)
{
this.drawingObjects = drawingObjects;
this.group = group;
this.majorObject = majorObject;
}
PreRotateInGroupState.prototype =
{
onMouseDown: function(e, x, y, pageIndex)
{
if(this.drawingObjects.handleEventMode === HANDLE_EVENT_MODE_HANDLE){
this.onMouseUp(e, x, y, pageIndex);
this.drawingObjects.OnMouseDown(e, x, y, pageIndex);
}
if(this.drawingObjects.handleEventMode === HANDLE_EVENT_MODE_CURSOR)
return {cursorType: "default", objectId: this.majorObject.Get_Id()};
},
onMouseMove: function(e, x, y, pageIndex)
{
if(!e.IsLocked)
{
this.onMouseUp(e, x, y, pageIndex);
return;
}
this.drawingObjects.swapTrackObjects();
this.drawingObjects.changeCurrentState(new RotateInGroupState(this.drawingObjects, this.group, this.majorObject))
},
onMouseUp: PreMoveInGroupState.prototype.onMouseUp
};
function RotateInGroupState(drawingObjects, group, majorObject)
{
this.drawingObjects = drawingObjects;
this.group = group;
this.majorObject = majorObject;
}
RotateInGroupState.prototype =
{
onMouseDown: function(e, x, y, pageIndex)
{
if(this.drawingObjects.handleEventMode === HANDLE_EVENT_MODE_HANDLE){
this.onMouseUp(e, x, y, pageIndex);
this.drawingObjects.OnMouseDown(e, x, y, pageIndex);
}
if(this.drawingObjects.handleEventMode === HANDLE_EVENT_MODE_CURSOR)
return {cursorType: "crosshair", objectId: this.majorObject.Get_Id()};
},
onMouseMove: RotateState.prototype.onMouseMove,
onMouseUp: MoveInGroupState.prototype.onMouseUp
};
function PreResizeInGroupState(drawingObjects, group, majorObject, cardDirection)
{
this.drawingObjects = drawingObjects;
this.group = group;
this.majorObject = majorObject;
this.cardDirection = cardDirection;
}
PreResizeInGroupState.prototype =
{
onMouseDown: function(e, x, y, pageIndex)
{
if(this.drawingObjects.handleEventMode === HANDLE_EVENT_MODE_HANDLE){
this.onMouseUp(e, x, y, pageIndex);
this.drawingObjects.OnMouseDown(e, x, y, pageIndex);
}
if(this.drawingObjects.handleEventMode === HANDLE_EVENT_MODE_CURSOR)
return {cursorType: "default", objectId: this.majorObject.Get_Id()};
},
onMouseMove: function(e, x, y, pageIndex)
{
this.drawingObjects.swapTrackObjects();
this.drawingObjects.changeCurrentState(new ResizeInGroupState(this.drawingObjects, this.group, this.majorObject, this.majorObject.getNumByCardDirection(this.cardDirection), this.cardDirection));
this.drawingObjects.OnMouseMove(e, x, y, pageIndex);
},
onMouseUp: PreMoveInGroupState.prototype.onMouseUp
};
function ResizeInGroupState(drawingObjects, group, majorObject, handleNum, cardDirection)
{
this.drawingObjects = drawingObjects;
this.group = group;
this.majorObject = majorObject;
this.handleNum = handleNum;
this.cardDirection = cardDirection;
}
ResizeInGroupState.prototype =
{
onMouseDown: function(e, x, y, pageIndex)
{
if(this.drawingObjects.handleEventMode === HANDLE_EVENT_MODE_HANDLE){
this.onMouseUp(e, x, y, pageIndex);
this.drawingObjects.OnMouseDown(e, x, y, pageIndex);
}
if(this.drawingObjects.handleEventMode === HANDLE_EVENT_MODE_CURSOR)
return {cursorType: AscFormat.CURSOR_TYPES_BY_CARD_DIRECTION[this.cardDirection] ? AscFormat.CURSOR_TYPES_BY_CARD_DIRECTION[this.cardDirection] : "default", objectId: this.majorObject.Get_Id()};
},
onMouseMove: ResizeState.prototype.onMouseMove,
onMouseUp: MoveInGroupState.prototype.onMouseUp
};
function PreChangeAdjInGroupState(drawingObjects, group)
{
this.drawingObjects = drawingObjects;
this.group = group;
}
PreChangeAdjInGroupState.prototype =
{
onMouseDown: function(e, x, y,pageIndex)
{
if(this.drawingObjects.handleEventMode === HANDLE_EVENT_MODE_HANDLE){
this.onMouseUp(e, x, y, pageIndex);
this.drawingObjects.OnMouseDown(e, x, y, pageIndex);
}
else
{
return {objectId: this.majorObject && this.majorObject.Get_Id(), bMarker: true, cursorType: "crosshair"};
}
},
onMouseMove: function(e, x, y, pageIndex)
{
this.drawingObjects.swapTrackObjects();
this.drawingObjects.changeCurrentState(new ChangeAdjInGroupState(this.drawingObjects, this.group));
this.drawingObjects.OnMouseMove(e, x, y, pageIndex);
},
onMouseUp: PreMoveInGroupState.prototype.onMouseUp
};
function ChangeAdjInGroupState(drawingObjects, group)
{
this.drawingObjects = drawingObjects;
this.group = group;
this.majorObject = drawingObjects.arrTrackObjects[0].originalShape;
}
ChangeAdjInGroupState.prototype =
{
onMouseDown: function(e, x, y,pageIndex)
{
if(this.drawingObjects.handleEventMode === HANDLE_EVENT_MODE_HANDLE){
this.onMouseUp(e, x, y, pageIndex);
this.drawingObjects.OnMouseDown(e, x, y, pageIndex);
}
if(this.drawingObjects.handleEventMode === HANDLE_EVENT_MODE_CURSOR)
return {cursorType: "crosshair", objectId: this.majorObject.Get_Id()};
},
onMouseMove: ChangeAdjState.prototype.onMouseMove,
onMouseUp: MoveInGroupState.prototype.onMouseUp
};
function TextAddState(drawingObjects, majorObject, startX, startY, button)
{
this.drawingObjects =drawingObjects;
this.majorObject = majorObject;
}
TextAddState.prototype =
{
onMouseDown: function(e, x, y, pageIndex)
{
if(this.drawingObjects.handleEventMode === HANDLE_EVENT_MODE_HANDLE){
this.onMouseUp(e, x, y, pageIndex);
this.drawingObjects.OnMouseDown(e, x, y, pageIndex);
}
if(this.drawingObjects.handleEventMode === HANDLE_EVENT_MODE_CURSOR){
var oCheckObject = this.majorObject;
if(oCheckObject instanceof AscFormat.CTitle){
oCheckObject = oCheckObject.chart;
}
if(oCheckObject && oCheckObject.group){
while(!oCheckObject.group){
oCheckObject = oCheckObject.group;
}
}
if(oCheckObject && oCheckObject.parent){
return {cursorType: "default", objectId: oCheckObject.Get_Id(), content: this.majorObject.getDocContent && this.majorObject.getDocContent()};
}
else if (Asc.editor.isPdfEditor()) {
if (oCheckObject.IsShape()) {
return {cursorType: "text", objectId: oCheckObject.Get_Id(), content: this.majorObject.getDocContent && this.majorObject.getDocContent()};
}
}
}
},
onMouseMove: function(e, x, y, pageIndex)
{
var startPos = this.drawingObjects.startTrackPos;
var tr_x, tr_y;
if(pageIndex === startPos.pageIndex)
{
tr_x = x;
tr_y = y;
}
else
{
var tr_point = this.drawingObjects.getDrawingDocument().ConvertCoordsToAnotherPage(x, y, pageIndex, startPos.pageIndex);
tr_x = tr_point.X;
tr_y = tr_point.Y;
}
if(!e.IsLocked)
{
this.onMouseUp(e, tr_x, tr_y, startPos.pageIndex);
return;
}
this.majorObject.selectionSetEnd(e, tr_x, tr_y, startPos.pageIndex);
},
onMouseUp: function(e, x, y, pageIndex)
{
var startPos = this.drawingObjects.startTrackPos;
var tr_x, tr_y;
if(pageIndex === startPos.pageIndex)
{
tr_x = x;
tr_y = y;
}
else
{
var tr_point = this.drawingObjects.getDrawingDocument().ConvertCoordsToAnotherPage(x, y, pageIndex, startPos.pageIndex);
tr_x = tr_point.X;
tr_y = tr_point.Y;
}
this.majorObject.selectionSetEnd(e, tr_x, tr_y, startPos.pageIndex);
this.drawingObjects.changeCurrentState(new NullState(this.drawingObjects));
}
};
function StartChangeWrapContourState(drawingObjects, majorObject)
{
this.drawingObjects = drawingObjects;
this.majorObject = majorObject;
}
StartChangeWrapContourState.prototype =
{
onMouseDown: function(e, x, y, pageIndex)
{
},
onMouseMove: function(e, x, y, pageIndex)
{},
onMouseUp: function(e, x, y, pageIndex)
{}
};
function PreChangeWrapContour(drawingObjects, majorObject, pointNum)
{
this.drawingObjects = drawingObjects;
this.majorObject = majorObject;
this.pointNum = pointNum;
}
PreChangeWrapContour.prototype.onMouseDown = function(e, x, y, pageIndex)
{
if(this.drawingObjects.handleEventMode === HANDLE_EVENT_MODE_HANDLE){
this.onMouseUp(e, x, y, pageIndex);
this.drawingObjects.OnMouseDown(e, x, y, pageIndex);
}
};
PreChangeWrapContour.prototype.onMouseMove = function(e, x, y, pageIndex)
{
this.drawingObjects.clearPreTrackObjects();
this.drawingObjects.addPreTrackObject(new TrackPointWrapPointWrapPolygon(this.majorObject, this.pointNum));
this.drawingObjects.swapTrackObjects();
this.drawingObjects.changeCurrentState(new ChangeWrapContour(this.drawingObjects, this.majorObject));
};
PreChangeWrapContour.prototype.onMouseUp = function(e, x, y, pageIndex)
{
this.drawingObjects.changeCurrentState(new NullState(this.drawingObjects));
};
function ChangeWrapContour(drawingObjects, majorObject)
{
this.drawingObjects = drawingObjects;
this.majorObject = majorObject;
}
ChangeWrapContour.prototype.onMouseDown = function(e, x, y, pageIndex)
{
if(this.drawingObjects.handleEventMode === HANDLE_EVENT_MODE_HANDLE){
this.onMouseUp(e, x, y, pageIndex);
this.drawingObjects.OnMouseDown(e, x, y, pageIndex);
}
};
ChangeWrapContour.prototype.onMouseMove = function(e, x, y, pageIndex)
{
var coords = AscFormat.CheckCoordsNeedPage(x, y, pageIndex, this.majorObject.selectStartPage);
var tr_x, tr_y;
tr_x = coords.x;
tr_y = coords.y;
this.drawingObjects.arrTrackObjects[0].track(tr_x, tr_y);
this.drawingObjects.updateOverlay();
};
ChangeWrapContour.prototype.onMouseUp = function(e, x, y, pageIndex)
{
const aTracks = [].concat(this.drawingObjects.arrTrackObjects);
this.drawingObjects.resetTrackState();
if(false === this.drawingObjects.document.Document_Is_SelectionLocked(changestype_Drawing_Props))
{
this.drawingObjects.document.StartAction(AscDFH.historydescription_Document_ChangeWrapContour);
var calc_points = [], calc_points2 = [], i;
for(i = 0; i < this.majorObject.parent.wrappingPolygon.calculatedPoints.length; ++i)
{
calc_points[i] = {x: this.majorObject.parent.wrappingPolygon.calculatedPoints[i].x, y: this.majorObject.parent.wrappingPolygon.calculatedPoints[i].y};
}
calc_points[aTracks[0].point].x = aTracks[0].pointCoord.x;
calc_points[aTracks[0].point].y = aTracks[0].pointCoord.y;
var invert_transform = this.majorObject.invertTransform;
for(i = 0; i < calc_points.length; ++i)
{
calc_points2[i] =
{
x: (invert_transform.TransformPointX(calc_points[i].x, calc_points[i].y)/this.majorObject.extX)*21600 >> 0,
y: (invert_transform.TransformPointY(calc_points[i].x, calc_points[i].y)/this.majorObject.extY)*21600 >> 0
}
}
this.majorObject.parent.wrappingPolygon.setEdited(true);
this.majorObject.parent.wrappingPolygon.setArrRelPoints(calc_points2);
this.drawingObjects.document.Recalculate();
this.drawingObjects.document.FinalizeAction();
}
this.drawingObjects.updateOverlay();
};
function PreChangeWrapContourAddPoint(drawingObjects, majorObject, pointNum1, startX, startY)
{
this.drawingObjects = drawingObjects;
this.majorObject = majorObject;
this.pointNum1 = pointNum1;
this.startX = startX;
this.startY = startY;
}
PreChangeWrapContourAddPoint.prototype =
{
onMouseDown: function(e, x, y, pageIndex)
{
if(this.drawingObjects.handleEventMode === HANDLE_EVENT_MODE_HANDLE){
this.onMouseUp(e, x, y, pageIndex);
this.drawingObjects.OnMouseDown(e, x, y, pageIndex);
}
},
onMouseMove: function(e, x, y, pageIndex)
{
if(!e.IsLocked)
{
this.onMouseUp(e, x, y, pageIndex);
return;
}
this.drawingObjects.clearPreTrackObjects();
this.drawingObjects.addPreTrackObject(new TrackNewPointWrapPolygon(this.majorObject, this.pointNum1));
this.drawingObjects.swapTrackObjects();
this.drawingObjects.changeCurrentState(new ChangeWrapContourAddPoint(this.drawingObjects, this.majorObject));
this.drawingObjects.OnMouseMove(e, x, y, pageIndex);
},
onMouseUp: function(e, x, y, pageIndex)
{
this.drawingObjects.clearPreTrackObjects();
this.drawingObjects.changeCurrentState(new NullState(this.drawingObjects));
}
};
function ChangeWrapContourAddPoint(drawingObjects, majorObject)
{
this.drawingObjects = drawingObjects;
this.majorObject = majorObject;
}
ChangeWrapContourAddPoint.prototype.onMouseDown = function(e, x, y, pageIndex)
{
if(this.drawingObjects.handleEventMode === HANDLE_EVENT_MODE_HANDLE){
this.onMouseUp(e, x, y, pageIndex);
this.drawingObjects.OnMouseDown(e, x, y, pageIndex);
}
};
ChangeWrapContourAddPoint.prototype.onMouseMove = function(e, x, y, pageIndex)
{
var coords = AscFormat.CheckCoordsNeedPage(x, y, pageIndex, this.majorObject.selectStartPage);
var tr_x, tr_y;
tr_x = coords.x;
tr_y = coords.y;
this.drawingObjects.arrTrackObjects[0].track(tr_x, tr_y);
this.drawingObjects.updateOverlay();
};
ChangeWrapContourAddPoint.prototype.onMouseUp = function(e, x, y, pageIndex)
{
const aTracks = [].concat(this.drawingObjects.arrTrackObjects);
this.drawingObjects.resetTrackState();
if(false === this.drawingObjects.document.Document_Is_SelectionLocked(changestype_Drawing_Props))
{
this.drawingObjects.document.StartAction(AscDFH.historydescription_Document_ChangeWrapContourAddPoint);
var calc_points = [], calc_points2 = [], i;
for(i = 0; i < aTracks[0].arrPoints.length; ++i)
{
calc_points[i] = {x: aTracks[0].arrPoints[i].x, y: aTracks[0].arrPoints[i].y};
}
//calc_points.splice(aTracks[0].point1, 0, )
var invert_transform = this.majorObject.invertTransform;
for(i = 0; i < calc_points.length; ++i)
{
calc_points2[i] =
{
x: (invert_transform.TransformPointX(calc_points[i].x, calc_points[i].y)/this.majorObject.extX)*21600 >> 0,
y: (invert_transform.TransformPointY(calc_points[i].x, calc_points[i].y)/this.majorObject.extY)*21600 >> 0
}
}
this.majorObject.parent.wrappingPolygon.setEdited(true);
this.majorObject.parent.wrappingPolygon.setArrRelPoints(calc_points2);
this.drawingObjects.document.Recalculate();
this.drawingObjects.document.FinalizeAction();
}
this.drawingObjects.updateOverlay();
};
function SplineBezierState(drawingObjects)
{
this.drawingObjects = drawingObjects;
this.polylineFlag = true;
}
SplineBezierState.prototype =
{
onMouseDown: function(e, x, y, pageIndex)
{
if(this.drawingObjects.handleEventMode === HANDLE_EVENT_MODE_CURSOR)
return {objectId: null, bMarker: true};
this.drawingObjects.startTrackPos = {x: x, y: y, pageIndex: pageIndex};
this.drawingObjects.clearTrackObjects();
this.drawingObjects.clearPreTrackObjects();
this.drawingObjects.addPreTrackObject(new AscFormat.Spline(this.drawingObjects, this.drawingObjects.document.theme, null, null, null, pageIndex));
this.drawingObjects.arrPreTrackObjects[0].path.push(new AscFormat.SplineCommandMoveTo(x, y));
this.drawingObjects.changeCurrentState(new SplineBezierState33(this.drawingObjects, x, y,pageIndex));
this.drawingObjects.resetSelection();
this.drawingObjects.updateOverlay();
},
onMouseMove: function(e, X, Y, pageIndex)
{
},
onMouseUp: function(e, X, Y, pageIndex)
{
this.drawingObjects.changeCurrentState(new NullState(this.drawingObjects));
}
};
function SplineBezierState33(drawingObjects, startX, startY, pageIndex)
{
this.drawingObjects = drawingObjects;
this.polylineFlag = true;
this.pageIndex = pageIndex;
}
SplineBezierState33.prototype =
{
onMouseDown: function(e, x, y, pageIndex)
{
if(this.drawingObjects.handleEventMode === HANDLE_EVENT_MODE_CURSOR)
return {objectId: null, bMarker: true};
},
onMouseMove: function(e, x, y, pageIndex)
{
var startPos = this.drawingObjects.startTrackPos;
if(startPos.x === x && startPos.y === y && startPos.pageIndex === pageIndex)
return;
var tr_x, tr_y;
if(pageIndex === startPos.pageIndex)
{
tr_x = x;
tr_y = y;
}
else
{
var tr_point = this.drawingObjects.drawingDocument.ConvertCoordsToAnotherPage(x, y, pageIndex, startPos.pageIndex);
tr_x = tr_point.X;
tr_y = tr_point.Y;
}
this.drawingObjects.swapTrackObjects();
this.drawingObjects.arrTrackObjects[0].path.push(new AscFormat.SplineCommandLineTo(tr_x, tr_y));
this.drawingObjects.changeCurrentState(new SplineBezierState2(this.drawingObjects, this.pageIndex));
this.drawingObjects.updateOverlay();
},
onMouseUp: function(e, x, y, pageIndex)
{
}
};
function SplineBezierState2(drawingObjects,pageIndex)
{
this.drawingObjects = drawingObjects;
this.polylineFlag = true;
this.pageIndex = pageIndex;
}
SplineBezierState2.prototype =
{
onMouseDown: function(e, x, y, pageIndex)
{
if(this.drawingObjects.handleEventMode === HANDLE_EVENT_MODE_CURSOR)
return {objectId: null, bMarker: true};
if(e.ClickCount >= 2)
{
this.bStart = true;
this.pageIndex = this.drawingObjects.startTrackPos.pageIndex;
StartAddNewShape.prototype.onMouseUp.call(this, e, x, y, pageIndex);
}
},
onMouseMove: function(e, x, y, pageIndex)
{
var startPos = this.drawingObjects.startTrackPos;
var tr_x, tr_y;
if(pageIndex === startPos.pageIndex)
{
tr_x = x;
tr_y = y;
}
else
{
var tr_point = this.drawingObjects.drawingDocument.ConvertCoordsToAnotherPage(x, y, pageIndex, startPos.pageIndex);
tr_x = tr_point.X;
tr_y = tr_point.Y;
}
this.drawingObjects.arrTrackObjects[0].path[1].changeLastPoint(tr_x, tr_y);
this.drawingObjects.updateOverlay();
},
onMouseUp: function(e, x, y, pageIndex)
{
if( e.ClickCount < 2)
{
var tr_x, tr_y;
if(pageIndex === this.drawingObjects.startTrackPos.pageIndex)
{
tr_x = x;
tr_y = y;
}
else
{
var tr_point = this.drawingObjects.drawingDocument.ConvertCoordsToAnotherPage(x, y, pageIndex, this.drawingObjects.startTrackPos.pageIndex);
tr_x = tr_point.x;
tr_y = tr_point.y;
}
this.drawingObjects.changeCurrentState(new SplineBezierState3(this.drawingObjects,tr_x, tr_y, this.pageIndex));
}
}
};
function SplineBezierState3(drawingObjects, startX, startY,pageIndex)
{
this.drawingObjects = drawingObjects;
this.startX = startX;
this.startY = startY;
this.polylineFlag = true;
this.pageIndex =pageIndex;
}
SplineBezierState3.prototype =
{
onMouseDown: function(e, x, y, pageIndex)
{
if(this.drawingObjects.handleEventMode === HANDLE_EVENT_MODE_CURSOR)
return {objectId: null, bMarker: true};
if(e.ClickCount >= 2)
{
this.bStart = true;
this.pageIndex = this.drawingObjects.startTrackPos.pageIndex;
StartAddNewShape.prototype.onMouseUp.call(this, e, x, y, pageIndex);
}
},
onMouseMove: function(e, x, y, pageIndex)
{
if(x === this.startX && y === this.startY && pageIndex === this.drawingObjects.startTrackPos.pageIndex)
{
return;
}
var tr_x, tr_y;
if(pageIndex === this.drawingObjects.startTrackPos.pageIndex)
{
tr_x = x;
tr_y = y;
}
else
{
var tr_point = this.drawingObjects.drawingDocument.ConvertCoordsToAnotherPage(x, y, pageIndex, this.drawingObjects.startTrackPos.pageIndex);
tr_x = tr_point.X;
tr_y = tr_point.Y;
}
var x0, y0, x1, y1, x2, y2, x3, y3, x4, y4, x5, y5, x6, y6;
var spline = this.drawingObjects.arrTrackObjects[0];
x0 = spline.path[0].x;
y0 = spline.path[0].y;
x3 = spline.path[1].x;
y3 = spline.path[1].y;
x6 = tr_x;
y6 = tr_y;
var vx = (x6 - x0)/6;
var vy = (y6 - y0)/6;
x2 = x3 - vx;
y2 = y3 - vy;
x4 = x3 + vx;
y4 = y3 + vy;
x1 = (x0 + x2)*0.5;
y1 = (y0 + y2)*0.5;
x5 = (x4 + x6)*0.5;
y5 = (y4 + y6)*0.5;
spline.path.length = 1;
spline.path.push(new AscFormat.SplineCommandBezier(x1, y1, x2, y2, x3, y3));
spline.path.push(new AscFormat.SplineCommandBezier(x4, y4, x5, y5, x6, y6));
this.drawingObjects.updateOverlay();
this.drawingObjects.changeCurrentState(new SplineBezierState4(this.drawingObjects, this.pageIndex));
},
onMouseUp: function(e, x, y, pageIndex)
{
if(e.ClickCount >= 2)
{
this.bStart = true;
this.pageIndex = this.drawingObjects.startTrackPos.pageIndex;
StartAddNewShape.prototype.onMouseUp.call(this, e, x, y, pageIndex);
}
}
};
function SplineBezierState4(drawingObjects, pageIndex)
{
this.drawingObjects = drawingObjects;
this.polylineFlag = true;
this.pageIndex = pageIndex;
}
SplineBezierState4.prototype =
{
onMouseDown: function(e, x, y, pageIndex)
{
if(this.drawingObjects.handleEventMode === HANDLE_EVENT_MODE_CURSOR)
return {objectId: null, bMarker: true};
if(e.ClickCount >= 2)
{
this.bStart = true;
this.pageIndex = this.drawingObjects.startTrackPos.pageIndex;
StartAddNewShape.prototype.onMouseUp.call(this, e, x, y, pageIndex);
}
},
onMouseMove: function(e, x, y, pageIndex)
{
var spline = this.drawingObjects.arrTrackObjects[0];
var lastCommand = spline.path[spline.path.length-1];
var preLastCommand = spline.path[spline.path.length-2];
var x0, y0, x1, y1, x2, y2, x3, y3, x4, y4, x5, y5, x6, y6;
if(spline.path[spline.path.length-3].id == 0)
{
x0 = spline.path[spline.path.length-3].x;
y0 = spline.path[spline.path.length-3].y;
}
else
{
x0 = spline.path[spline.path.length-3].x3;
y0 = spline.path[spline.path.length-3].y3;
}
x3 = preLastCommand.x3;
y3 = preLastCommand.y3;
var tr_x, tr_y;
if(pageIndex === this.drawingObjects.startTrackPos.pageIndex)
{
tr_x = x;
tr_y = y;
}
else
{
var tr_point = this.drawingObjects.drawingDocument.ConvertCoordsToAnotherPage(x, y, pageIndex, this.drawingObjects.startTrackPos.pageIndex);
tr_x = tr_point.X;
tr_y = tr_point.Y;
}
x6 = tr_x;
y6 = tr_y;
var vx = (x6 - x0)/6;
var vy = (y6 - y0)/6;
x2 = x3 - vx;
y2 = y3 - vy;
x4 = x3 + vx;
y4 = y3 + vy;
x5 = (x4 + x6)*0.5;
y5 = (y4 + y6)*0.5;
if(spline.path[spline.path.length-3].id == 0)
{
preLastCommand.x1 = (x0 + x2)*0.5;
preLastCommand.y1 = (y0 + y2)*0.5;
}
preLastCommand.x2 = x2;
preLastCommand.y2 = y2;
preLastCommand.x3 = x3;
preLastCommand.y3 = y3;
lastCommand.x1 = x4;
lastCommand.y1 = y4;
lastCommand.x2 = x5;
lastCommand.y2 = y5;
lastCommand.x3 = x6;
lastCommand.y3 = y6;
this.drawingObjects.updateOverlay();
},
onMouseUp: function(e, x, y, pageIndex)
{
if(e.ClickCount < 2 )
{
var tr_x, tr_y;
if(pageIndex === this.drawingObjects.startTrackPos.pageIndex)
{
tr_x = x;
tr_y = y;
}
else
{
var tr_point = this.drawingObjects.drawingDocument.ConvertCoordsToAnotherPage(x, y, pageIndex, this.drawingObjects.startTrackPos.pageIndex);
tr_x = tr_point.X;
tr_y = tr_point.Y;
}
this.drawingObjects.changeCurrentState(new SplineBezierState5(this.drawingObjects, tr_x, tr_y, this.pageIndex));
}
}
};
function SplineBezierState5(drawingObjects, startX, startY,pageIndex)
{
this.drawingObjects = drawingObjects;
this.startX = startX;
this.startY = startY;
this.polylineFlag = true;
this.pageIndex = pageIndex;
}
SplineBezierState5.prototype =
{
onMouseDown: function(e, x, y, pageIndex)
{
if(this.drawingObjects.handleEventMode === HANDLE_EVENT_MODE_CURSOR)
return {objectId: null, bMarker: true};
if(e.ClickCount >= 2)
{
this.bStart = true;
this.pageIndex = this.drawingObjects.startTrackPos.pageIndex;
StartAddNewShape.prototype.onMouseUp.call(this, e, x, y, pageIndex);
}
},
onMouseMove: function(e, x, y, pageIndex)
{
if(x === this.startX && y === this.startY && pageIndex === this.drawingObjects.startTrackPos.pageIndex)
{
return;
}
var spline = this.drawingObjects.arrTrackObjects[0];
var lastCommand = spline.path[spline.path.length-1];
var x0, y0, x1, y1, x2, y2, x3, y3, x4, y4, x5, y5, x6, y6;
if(spline.path[spline.path.length-2].id == 0)
{
x0 = spline.path[spline.path.length-2].x;
y0 = spline.path[spline.path.length-2].y;
}
else
{
x0 = spline.path[spline.path.length-2].x3;
y0 = spline.path[spline.path.length-2].y3;
}
x3 = lastCommand.x3;
y3 = lastCommand.y3;
var tr_x, tr_y;
if(pageIndex === this.drawingObjects.startTrackPos.pageIndex)
{
tr_x = x;
tr_y = y;
}
else
{
var tr_point = this.drawingObjects.drawingDocument.ConvertCoordsToAnotherPage(x, y, pageIndex, this.drawingObjects.startTrackPos.pageIndex);
tr_x = tr_point.X;
tr_y = tr_point.Y;
}
x6 = tr_x;
y6 = tr_y;
var vx = (x6 - x0)/6;
var vy = (y6 - y0)/6;
x2 = x3 - vx;
y2 = y3 - vy;
x1 = (x2+x1)*0.5;
y1 = (y2+y1)*0.5;
x4 = x3 + vx;
y4 = y3 + vy;
x5 = (x4 + x6)*0.5;
y5 = (y4 + y6)*0.5;
if(spline.path[spline.path.length-2].id == 0)
{
lastCommand.x1 = x1;
lastCommand.y1 = y1;
}
lastCommand.x2 = x2;
lastCommand.y2 = y2;
spline.path.push(new AscFormat.SplineCommandBezier(x4, y4, x5, y5, x6, y6));
this.drawingObjects.updateOverlay();
this.drawingObjects.changeCurrentState(new SplineBezierState4(this.drawingObjects, this.pageIndex));
},
onMouseUp: function(e, x, y, pageIndex)
{
if(e.ClickCount >= 2)
{
this.bStart = true;
this.pageIndex = this.drawingObjects.startTrackPos.pageIndex;
StartAddNewShape.prototype.onMouseUp.call(this, e, x, y, pageIndex);
}
}
};
function PolyLineAddState(drawingObjects)
{
this.drawingObjects = drawingObjects;
this.polylineFlag = true;
}
PolyLineAddState.prototype =
{
onMouseDown: function(e, x, y, pageIndex)
{
if(this.drawingObjects.handleEventMode === HANDLE_EVENT_MODE_CURSOR)
return {objectId: null, bMarker: true};
this.drawingObjects.startTrackPos = {x: x, y: y, pageIndex:pageIndex};
this.drawingObjects.clearTrackObjects();
this.drawingObjects.addTrackObject(new AscFormat.PolyLine(this.drawingObjects, this.drawingObjects.document.theme, null, null, null, pageIndex));
this.drawingObjects.arrTrackObjects[0].tryAddPoint(x, y);
this.drawingObjects.resetSelection();
this.drawingObjects.updateOverlay();
var _min_distance = this.drawingObjects.drawingDocument.GetMMPerDot(1);
this.drawingObjects.changeCurrentState(new PolyLineAddState2(this.drawingObjects, _min_distance, pageIndex));
},
onMouseMove: function()
{},
onMouseUp: function()
{
this.drawingObjects.changeCurrentState(new NullState(this.drawingObjects));
}
};
function PolyLineAddState2(drawingObjects, minDistance, pageIndex)
{
this.drawingObjects = drawingObjects;
this.minDistance = minDistance;
this.polylineFlag = true;
this.pageIndex = pageIndex;
}
PolyLineAddState2.prototype =
{
onMouseDown: function(e, x, y, pageIndex)
{
if(this.drawingObjects.handleEventMode === HANDLE_EVENT_MODE_CURSOR)
return {objectId: null, bMarker: true};
},
onMouseMove: function(e, x, y, pageIndex)
{
if(!e.IsLocked)
{
//todo: implement inheritance from AscCommon.CDrawingControllerStateBase
return AscCommon.CDrawingControllerStateBase.prototype.emulateMouseUp.call(this, e, x, y, pageIndex);
}
var tr_x, tr_y;
if(pageIndex === this.drawingObjects.startTrackPos.pageIndex)
{
tr_x = x;
tr_y = y;
}
else
{
var tr_point = this.drawingObjects.drawingDocument.ConvertCoordsToAnotherPage(x, y, pageIndex, this.drawingObjects.startTrackPos.pageIndex);
tr_x = tr_point.X;
tr_y = tr_point.Y;
}
this.drawingObjects.arrTrackObjects[0].tryAddPoint(tr_x, tr_y);
this.drawingObjects.updateOverlay();
},
onMouseUp: function(e, x, y, pageIndex)
{
if(this.drawingObjects.arrTrackObjects[0].canCreateShape())
{
this.bStart = true;
this.pageIndex = this.drawingObjects.startTrackPos.pageIndex;
StartAddNewShape.prototype.onMouseUp.call(this, e, x, y, pageIndex);
}
else
{
this.drawingObjects.resetTrackState();
this.drawingObjects.updateOverlay();
}
}
};
function AddPolyLine2State(drawingObjects)
{
this.drawingObjects = drawingObjects;
this.polylineFlag = true;
}
AddPolyLine2State.prototype =
{
onMouseDown: function(e, x, y, pageIndex)
{
if(this.drawingObjects.handleEventMode === HANDLE_EVENT_MODE_CURSOR)
return {objectId: null, bMarker: true};
this.drawingObjects.startTrackPos = {x: x, y: y, pageIndex : pageIndex};
this.drawingObjects.resetSelection();
this.drawingObjects.updateOverlay();
this.drawingObjects.clearTrackObjects();
this.drawingObjects.clearPreTrackObjects();
this.drawingObjects.addPreTrackObject(new AscFormat.PolyLine(this.drawingObjects, this.drawingObjects.document.theme, null, null, null, pageIndex));
this.drawingObjects.arrPreTrackObjects[0].tryAddPoint(x, y);
this.drawingObjects.changeCurrentState(new AddPolyLine2State2(this.drawingObjects, x, y));
},
onMouseMove: function(e, x, y, pageIndex)
{},
onMouseUp: function(e, x, y, pageIndex)
{
}
};
function AddPolyLine2State2(drawingObjects, x, y)
{
this.drawingObjects = drawingObjects;
this.X = x;
this.Y = y;
this.polylineFlag = true;
}
AddPolyLine2State2.prototype =
{
onMouseDown: function(e, x, y, pageIndex)
{
if(this.drawingObjects.handleEventMode === HANDLE_EVENT_MODE_CURSOR)
return {objectId: null, bMarker: true};
if(e.ClickCount > 1)
{
this.drawingObjects.clearTrackObjects();
this.drawingObjects.clearPreTrackObjects();
this.drawingObjects.changeCurrentState(new NullState(this.drawingObjects));
}
},
onMouseMove: function(e, x, y, pageIndex)
{
if(this.X !== x || this.Y !== y || this.drawingObjects.startTrackPos.pageIndex !== pageIndex)
{
var tr_x, tr_y;
if(pageIndex === this.drawingObjects.startTrackPos.pageIndex)
{
tr_x = x;
tr_y = y;
}
else
{
var tr_point = this.drawingObjects.drawingDocument.ConvertCoordsToAnotherPage(x, y, pageIndex, this.drawingObjects.startTrackPos.pageIndex);
tr_x = tr_point.X;
tr_y = tr_point.Y;
}
this.drawingObjects.swapTrackObjects();
this.drawingObjects.arrTrackObjects[0].tryAddPoint(tr_x, tr_y);
this.drawingObjects.changeCurrentState(new AddPolyLine2State3(this.drawingObjects, pageIndex));
}
},
onMouseUp: function(e, x, y, pageIndex)
{
}
};
function AddPolyLine2State3(drawingObjects, pageIndex)
{
this.drawingObjects = drawingObjects;
this.lastX = -1000;
this.lastY = -1000;
this.polylineFlag = true;
this.pageIndex = pageIndex;
}
AddPolyLine2State3.prototype =
{
onMouseDown: function(e, x, y, pageIndex)
{
if(this.drawingObjects.handleEventMode === HANDLE_EVENT_MODE_CURSOR)
return {objectId: null, bMarker: true};
this.lastX = x;
this.lastY = y;
var tr_x, tr_y;
if(pageIndex === this.drawingObjects.startTrackPos.pageIndex)
{
tr_x = x;
tr_y = y;
}
else
{
var tr_point = this.drawingObjects.drawingDocument.ConvertCoordsToAnotherPage(x, y, pageIndex, this.drawingObjects.startTrackPos.pageIndex);
tr_x = tr_point.X;
tr_y = tr_point.Y;
}
if(e.ClickCount > 1)
{
this.bStart = true;
this.pageIndex = this.drawingObjects.startTrackPos.pageIndex;
StartAddNewShape.prototype.onMouseUp.call(this, e, x, y, pageIndex);
}
else
{
var oTrack = this.drawingObjects.arrTrackObjects[0];
oTrack.replaceLastPoint(tr_x, tr_y, false);
oTrack.addPoint(tr_x, tr_y, true);
}
},
onMouseMove: function(e, x, y, pageIndex)
{
if(AscFormat.fApproxEqual(x, this.lastX) && AscFormat.fApproxEqual(y, this.lastY)) {
return;
}
var tr_x, tr_y;
if(pageIndex === this.drawingObjects.startTrackPos.pageIndex)
{
tr_x = x;
tr_y = y;
}
else
{
var tr_point = this.drawingObjects.drawingDocument.ConvertCoordsToAnotherPage(x, y, pageIndex, this.drawingObjects.startTrackPos.pageIndex);
tr_x = tr_point.X;
tr_y = tr_point.Y;
}
var oTrack = this.drawingObjects.arrTrackObjects[0];
if((!e.IsLocked || (Asc.editor.isPdfEditor() && Asc.editor.isStartAddAnnot)) && oTrack.getPointsCount() > 1)
{
oTrack.replaceLastPoint(tr_x, tr_y, true);
}
else
{
oTrack.tryAddPoint(tr_x, tr_y);
}
this.drawingObjects.drawingDocument.m_oWordControl.OnUpdateOverlay();
this.lastX = x;
this.lastY = y;
},
onMouseUp: function(e, x, y, pageIndex)
{
this.lastX = x;
this.lastY = y;
if(e.ClickCount > 1)
{
this.bStart = true;
this.pageIndex = this.drawingObjects.startTrackPos.pageIndex;
StartAddNewShape.prototype.onMouseUp.call(this, e, x, y, pageIndex);
}
}
};
//--------------------------------------------------------export----------------------------------------------------
window['AscFormat'] = window['AscFormat'] || {};
window['AscFormat'].MOVE_DELTA = MOVE_DELTA;
window['AscFormat'].SNAP_DISTANCE = SNAP_DISTANCE;
window['AscFormat'].StartAddNewShape = StartAddNewShape;
window['AscFormat'].NullState = NullState;
window['AscFormat'].PreChangeAdjState = PreChangeAdjState;
window['AscFormat'].PreMoveInlineObject = PreMoveInlineObject;
window['AscFormat'].PreRotateState = PreRotateState;
window['AscFormat'].RotateState = RotateState;
window['AscFormat'].PreResizeState = PreResizeState;
window['AscFormat'].PreMoveState = PreMoveState;
window['AscFormat'].MoveState = MoveState;
window['AscFormat'].PreMoveInGroupState = PreMoveInGroupState;
window['AscFormat'].MoveInGroupState = MoveInGroupState;
window['AscFormat'].PreRotateInGroupState = PreRotateInGroupState;
window['AscFormat'].PreResizeInGroupState = PreResizeInGroupState;
window['AscFormat'].PreChangeAdjInGroupState = PreChangeAdjInGroupState;
window['AscFormat'].TextAddState = TextAddState;
window['AscFormat'].SplineBezierState = SplineBezierState;
window['AscFormat'].PolyLineAddState = PolyLineAddState;
window['AscFormat'].AddPolyLine2State = AddPolyLine2State;
window['AscFormat'].checkEmptyPlaceholderContent = checkEmptyPlaceholderContent;
})(window);