/* * (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 * */ "use strict"; (function(window, undefined){ // Import var CColor = AscCommon.CColor; var g_oTextMeasurer = AscCommon.g_oTextMeasurer; var History = AscCommon.History; var global_MatrixTransformer = AscCommon.global_MatrixTransformer; var g_dKoef_pix_to_mm = AscCommon.g_dKoef_pix_to_mm; var g_dKoef_mm_to_pix = AscCommon.g_dKoef_mm_to_pix; function CDrawingCollaborativeTarget(DrawingDocument) { AscCommon.CDrawingCollaborativeTargetBase.call(this); this.SheetId = null; this.DrawingDocument = DrawingDocument; } CDrawingCollaborativeTarget.prototype = Object.create(AscCommon.CDrawingCollaborativeTargetBase.prototype); CDrawingCollaborativeTarget.prototype.GetZoom = function() { return Asc.editor.wb.getZoom(); }; CDrawingCollaborativeTarget.prototype.ConvertCoords = function(x, y) { var oTrack = this.DrawingDocument.AutoShapesTrack; if(!oTrack) { return {X: 0, Y: 0}; } var oGraphics = oTrack.Graphics; if(!oGraphics) { return {X: 0, Y: 0}; } var oTransform = oGraphics.m_oCoordTransform; var _offX = 0; var _offY = 0; var dKoef = this.DrawingDocument.drawingObjects.convertMetric(1, 3, 0); if (oTransform) { _offX = oTransform.tx; _offY = oTransform.ty; } var _X = AscCommon.AscBrowser.convertToRetinaValue(_offX + dKoef * x, false); var _Y = AscCommon.AscBrowser.convertToRetinaValue(_offY + dKoef * y, false); return { X : _X, Y : _Y}; }; CDrawingCollaborativeTarget.prototype.GetMobileTouchManager = function() { return Asc.editor.wb.MobileTouchManager; }; CDrawingCollaborativeTarget.prototype.GetParentElement = function() { return Asc.editor.HtmlElement; }; CDrawingCollaborativeTarget.prototype.CheckPosition = function(_x, _y, _size, sheetId, _transform) { this.Transform = _transform; this.Size = _size; this.X = _x; this.Y = _y; this.SheetId = sheetId; this.Update(); }; CDrawingCollaborativeTarget.prototype.CheckStyleDisplay = function() { }; CDrawingCollaborativeTarget.prototype.CheckNeedDraw = function() { var bShow = false; var oWorksheetView = Asc.editor.wb.getWorksheet(); if(oWorksheetView) { var oModel = oWorksheetView.model; if(oModel) { if(oModel.Id === this.SheetId) { bShow = true; } } } if(!bShow) { this.HtmlElement.style.display = "none"; } else { this.HtmlElement.style.display = "block"; } return bShow; }; function CDrawingDocument() { this.IsLockObjectsEnable = false; AscCommon.g_oHtmlCursor.register(AscCommon.Cursors.MarkerFormat, "14 8", "pointer"); AscCommon.g_oHtmlCursor.register(AscCommon.Cursors.SelectTableRow, "10 5", "default"); AscCommon.g_oHtmlCursor.register(AscCommon.Cursors.SelectTableColumn, "5 10", "default"); AscCommon.g_oHtmlCursor.register(AscCommon.Cursors.SelectTableContent, "10 10", "default"); AscCommon.g_oHtmlCursor.register(AscCommon.Cursors.TableEraser, "8 19", "pointer"); this.m_oWordControl = null; this.m_oLogicDocument = null; this.m_oDocumentRenderer = null; this.m_arrPages = []; this.m_lPagesCount = 0; this.m_lDrawingFirst = -1; this.m_lDrawingEnd = -1; this.m_lCurrentPage = -1; this.m_lCountCalculatePages = 0; this.m_lTimerTargetId = -1; this.m_dTargetX = -1; this.m_dTargetY = -1; this.m_lTargetPage = -1; this.m_dTargetSize = 1; this.TargetHtmlElement = null; this.TargetHtmlElementLeft = 0; this.TargetHtmlElementTop = 0; this.CollaborativeTargets = []; this.CollaborativeTargetsUpdateTasks = []; this.m_bIsBreakRecalculate = false; this.m_bIsSelection = false; this.m_bIsSearching = false; this.MathTrack = new AscCommon.CMathTrack(); this.CurrentSearchNavi = null; this.SearchTransform = null; this.m_lTimerUpdateTargetID = -1; this.m_tempX = 0; this.m_tempY = 0; this.m_tempPageIndex = 0; var oThis = this; this.m_sLockedCursorType = ""; this.m_lCurrentRendererPage = -1; this.m_oDocRenderer = null; this.m_bOldShowMarks = false; this.UpdateTargetFromPaint = false; this.UpdateTargetCheck = false; this.NeedTarget = true; this.TextMatrix = null; this.TargetShowFlag = false; this.TargetShowNeedFlag = false; this.CanvasHit = document.createElement('canvas'); this.CanvasHit.width = 10; this.CanvasHit.height = 10; this.CanvasHitContext = this.CanvasHit.getContext('2d'); this.TargetCursorColor = {R: 0, G: 0, B: 0}; this.GuiControlColorsMap = null; this.IsSendStandartColors = false; this.GuiCanvasFillTextureParentId = ""; this.GuiCanvasFillTexture = null; this.GuiCanvasFillTextureCtx = null; this.LastDrawingUrl = ""; this.GuiCanvasFillTextureParentIdTextArt = ""; this.GuiCanvasFillTextureTextArt = null; this.GuiCanvasFillTextureCtxTextArt = null; this.LastDrawingUrlTextArt = ""; this.SelectionMatrix = null; this.GuiCanvasTextProps = null; this.GuiLastTextProps = null; this.TableStylesLastLook = null; this.LastParagraphMargins = null; this.AutoShapesTrack = null; this.AutoShapesTrackLockPageNum = -1; this.Overlay = null; this.IsTextMatrixUse = false; this.placeholders = new AscCommon.DrawingPlaceholders(this); this.getDrawingObjects = function() { var oWs = Asc.editor.wb.getWorksheet(); if(oWs) { return oWs.objectRender; } return null; }; this.Start_CollaborationEditing = function() { }; this.SetCursorType = function(sType, Data) { }; this.LockCursorType = function(sType) { this.m_sLockedCursorType = sType; if ( Asc.editor && Asc.editor.wb) { Asc.editor.wb._onUpdateCursor(this.m_sLockedCursorType); } }; this.LockCursorTypeCur = function() { }; this.UnlockCursorType = function() { this.m_sLockedCursorType = ""; const oWBView = Asc.editor && Asc.editor.wb; if (oWBView) { const ws = oWBView.getWorksheet(); if (ws) { const ct = ws.getCursorTypeFromXY(ws.objectRender.lastX, ws.objectRender.lastY); if (ct) { oWBView._onUpdateCursor(ct.cursor); } } } }; this.OnStartRecalculate = function(pageCount) { }; this.OnRepaintPage = function(index) { }; this.OnRecalculatePage = function(index, pageObject) { }; this.OnEndRecalculate = function(isFull, isBreak) { }; this.ChangePageAttack = function(pageIndex) { }; this.StartRenderingPage = function(pageIndex) { }; this.IsFreezePage = function(pageIndex) { return true; }; this.RenderDocument = function(Renderer) { }; this.ToRenderer = function() { return ""; }; this.ToRenderer2 = function() { var ret = ""; return ret; }; this.ToRendererPart = function() { }; this.StopRenderingPage = function(pageIndex) { }; this.ClearCachePages = function() { }; this.CheckRasterImageOnScreen = function(src) { }; this.FirePaint = function() { }; this.ConvertCoordsFromCursor = function(x, y, bIsRul) { return { X : 0, Y : 0, Page: -1, DrawPage: -1 }; }; this.ConvertCoordsFromCursorPage = function(x, y, page, bIsRul) { return { X : 0, Y : 0, Page: -1, DrawPage: -1 }; }; this.ConvertCoordsToAnotherPage = function(x, y, pageCoord, pageNeed) { return { X : 0, Y : 0, Error: true }; }; this.ConvertCoordsFromCursor2 = function(x, y, zoomVal, isRuler) { return { X : 0, Y : 0, Page: -1, DrawPage: -1 }; }; this.ConvetToPageCoords = function(x,y,pageIndex) { return { X : 0, Y : 0, Page : pageIndex, Error: true }; }; this.IsCursorInTableCur = function(x, y, page) { return false; }; this.ConvertCoordsToCursorWR = function(x, y, pageIndex, transform) { let oRender = this.getDrawingObjects(); if(!oRender) { return { X : 0, Y : 0, Error: true }; } return oRender.convertCoordsToCursorWR(x, y); }; this.ConvertCoordsToCursor = function(x, y, pageIndex, bIsRul) { return { X : 0, Y : 0, Error: true }; }; this.ConvertCoordsToCursor2 = function(x, y, pageIndex, bIsRul) { return { X : 0, Y : 0, Error: true }; }; this.ConvertCoordsToCursor3 = function(x, y, pageIndex) { return { X : 0, Y : 0, Error: true }; }; this.TargetStart = function() { if ( this.m_lTimerTargetId != -1 ) clearInterval( this.m_lTimerTargetId ); this.m_lTimerTargetId = setInterval( oThis.DrawTarget, 500 ); }; this.TargetEnd = function() { this.TargetShowFlag = false; this.TargetShowNeedFlag = false; if (this.m_lTimerTargetId != -1) { clearInterval( this.m_lTimerTargetId ); this.m_lTimerTargetId = -1; } this.TargetHtmlElement.style.display = "none"; }; this.UpdateTargetNoAttack = function() { }; this.GetTargetStyle = function() { return "rgb(" + this.TargetCursorColor.R + "," + this.TargetCursorColor.G + "," + this.TargetCursorColor.B + ")"; }; this.SetTargetColor = function(r, g, b) { this.TargetCursorColor.R = r; this.TargetCursorColor.G = g; this.TargetCursorColor.B = b; }; this.CheckTargetDraw = function (x, y) { var drawingObjects = this.getDrawingObjects(); if (!drawingObjects) return; var dKoef = drawingObjects.convertMetric(1, 3, 0); dKoef /= AscCommon.AscBrowser.retinaPixelRatio; var oldW = this.TargetHtmlElement.width_old; var oldH = this.TargetHtmlElement.height_old; var newW = 2; var newH = (this.m_dTargetSize * dKoef) >> 0; var _offX = 0; var _offY = 0; if (this.AutoShapesTrack && this.AutoShapesTrack.Graphics && this.AutoShapesTrack.Graphics.m_oCoordTransform) { _offX = this.AutoShapesTrack.Graphics.m_oCoordTransform.tx / AscCommon.AscBrowser.retinaPixelRatio; _offY = this.AutoShapesTrack.Graphics.m_oCoordTransform.ty / AscCommon.AscBrowser.retinaPixelRatio; } this.TargetHtmlElement.style.transformOrigin = "top left"; if (oldW !== newW || oldH !== newH) { var pixNewW = ((newW * AscCommon.AscBrowser.retinaPixelRatio) >> 0) / AscCommon.AscBrowser.retinaPixelRatio; this.TargetHtmlElement.style.width = pixNewW + "px"; this.TargetHtmlElement.style.height = newH + "px"; this.TargetHtmlElement.width_old = newW; this.TargetHtmlElement.height_old = newH; this.TargetHtmlElement.oldColor = null; } var oldColor = this.TargetHtmlElement.oldColor; if (!oldColor || oldColor.R !== this.TargetCursorColor.R || oldColor.G !== this.TargetCursorColor.G || oldColor.B !== this.TargetCursorColor.B) { this.TargetHtmlElement.style.backgroundColor = this.GetTargetStyle(); this.TargetHtmlElement.oldColor = { R : this.TargetCursorColor.R, G : this.TargetCursorColor.G, B : this.TargetCursorColor.B }; } if (null == this.TextMatrix || global_MatrixTransformer.IsIdentity2(this.TextMatrix)) { if (null != this.TextMatrix) { x += this.TextMatrix.tx; y += this.TextMatrix.ty; } var pos1 = { X : _offX + x * dKoef, Y : _offY + y * dKoef }; pos1.X -= (newW / 2); this.TargetHtmlElementLeft = pos1.X >> 0; this.TargetHtmlElementTop = pos1.Y >> 0; this.TargetHtmlElement.style["transform"] = ""; this.TargetHtmlElement.style["msTransform"] = ""; this.TargetHtmlElement.style["mozTransform"] = ""; this.TargetHtmlElement.style["webkitTransform"] = ""; if (!AscCommon.AscBrowser.isSafariMacOs || !AscCommon.AscBrowser.isWebkit) { this.TargetHtmlElement.style.left = this.TargetHtmlElementLeft + "px"; this.TargetHtmlElement.style.top = this.TargetHtmlElementTop + "px"; } else { this.TargetHtmlElement.style.left = "0px"; this.TargetHtmlElement.style.top = "0px"; this.TargetHtmlElement.style["webkitTransform"] = "matrix(1, 0, 0, 1, " + oThis.TargetHtmlElementLeft + "," + oThis.TargetHtmlElementTop + ")"; } } else { var x1 = _offX + this.TextMatrix.TransformPointX(x, y) * dKoef; var y1 = _offY + this.TextMatrix.TransformPointY(x, y) * dKoef; var pos1 = { X : x1, Y : y1 }; pos1.X -= (newW / 2); this.TargetHtmlElementLeft = pos1.X >> 0; this.TargetHtmlElementTop = pos1.Y >> 0; var transform = "matrix(" + this.TextMatrix.sx + ", " + this.TextMatrix.shy + ", " + this.TextMatrix.shx + ", " + this.TextMatrix.sy + ", " + pos1.X + ", " + pos1.Y + ")"; this.TargetHtmlElement.style.left = "0px"; this.TargetHtmlElement.style.top = "0px"; this.TargetHtmlElement.style["transform"] = transform; this.TargetHtmlElement.style["msTransform"] = transform; this.TargetHtmlElement.style["mozTransform"] = transform; this.TargetHtmlElement.style["webkitTransform"] = transform; } if (AscCommon.g_inputContext) AscCommon.g_inputContext.move(this.TargetHtmlElementLeft, this.TargetHtmlElementTop); }; this.UpdateTargetTransform = function(matrix) { this.TextMatrix = matrix; }; this.UpdateTarget = function(x, y, pageIndex) { /* if (this.UpdateTargetFromPaint === false) { this.UpdateTargetCheck = true; if (this.NeedScrollToTargetFlag && this.m_dTargetX == x && this.m_dTargetY == y && this.m_lTargetPage == pageIndex) this.NeedScrollToTarget = false; else this.NeedScrollToTarget = true; return; } */ if (-1 != this.m_lTimerUpdateTargetID) { clearTimeout(this.m_lTimerUpdateTargetID); this.m_lTimerUpdateTargetID = -1; } this.m_dTargetX = x; this.m_dTargetY = y; this.m_lTargetPage = pageIndex; this.CheckTargetDraw(x, y); }; this.UpdateTargetTimer = function() { }; this.SetTargetSize = function(size) { this.m_dTargetSize = size; //this.TargetHtmlElement.style.height = Number(this.m_dTargetSize * this.m_oWordControl.m_nZoomValue * AscCommon.g_dKoef_mm_to_pix / 100) + "px"; //this.TargetHtmlElement.style.width = "2px"; }; this.DrawTarget = function() { if ( "block" != oThis.TargetHtmlElement.style.display && oThis.NeedTarget ) oThis.TargetHtmlElement.style.display = "block"; else oThis.TargetHtmlElement.style.display = "none"; }; this.TargetShow = function() { this.TargetShowNeedFlag = true; }; this.CheckTargetShow = function() { if (this.TargetShowFlag && this.TargetShowNeedFlag) { this.TargetHtmlElement.style.display = "block"; this.TargetShowNeedFlag = false; return; } if (!this.TargetShowNeedFlag) return; this.TargetShowNeedFlag = false; if ( -1 == this.m_lTimerTargetId ) this.TargetStart(); if (oThis.NeedTarget) this.TargetHtmlElement.style.display = "block"; this.TargetShowFlag = true; }; this.StartTrackImage = function(obj, x, y, w, h, type, pagenum) { }; this.StartTrackTable = function(obj, transform) { }; this.EndTrackTable = function(pointer, bIsAttack) { }; this.CheckTrackTable = function() { }; this.DrawTableTrack = function(overlay) { }; this.DrawMathTrack = function (overlay) { if (!this.MathTrack.IsActive() || !this.TextMatrix) return; var drawingObjects = this.getDrawingObjects(); if (!drawingObjects) return; overlay.Show(); var nIndex, nCount; var oPath; var dKoefX, dKoefY; var PathLng = this.MathTrack.GetPolygonsCount(); dKoefX = drawingObjects.convertMetric(1, 3, 0); dKoefY = dKoefX; var _offX = 0; var _offY = 0; if (this.AutoShapesTrack && this.AutoShapesTrack.Graphics && this.AutoShapesTrack.Graphics.m_oCoordTransform) { _offX = this.AutoShapesTrack.Graphics.m_oCoordTransform.tx; _offY = this.AutoShapesTrack.Graphics.m_oCoordTransform.ty; } // Draw methods apply retina scaling. if (true) { var rPR = AscCommon.AscBrowser.retinaPixelRatio; dKoefX /= rPR; dKoefY /= rPR; _offX /= rPR; _offY /= rPR; } for (nIndex = 0; nIndex < PathLng; nIndex++) { oPath = this.MathTrack.GetPolygon(nIndex); this.MathTrack.Draw(overlay, oPath, 0, 0, "#939393", dKoefX, dKoefY, _offX, _offY, this.TextMatrix); this.MathTrack.Draw(overlay, oPath, 1, 1, "#FFFFFF", dKoefX, dKoefY, _offX, _offY, this.TextMatrix); } for (nIndex = 0, nCount = this.MathTrack.GetSelectPathsCount(); nIndex < nCount; nIndex++) { oPath = this.MathTrack.GetSelectPath(nIndex); this.MathTrack.DrawSelectPolygon(overlay, oPath, dKoefX, dKoefY, _offX, _offY, this.TextMatrix); } }; this.SetCurrentPage = function(PageIndex) { }; this.SelectEnabled = function(bIsEnabled) { var drawingObjects = this.getDrawingObjects(); if(!drawingObjects) { return; } this.m_bIsSelection = bIsEnabled; if (false === this.m_bIsSelection) { this.SelectClear(); drawingObjects.getOverlay().m_oContext.globalAlpha = 1.0; } }; this.SelectClear = function() { }; this.SearchClear = function() { }; this.AddPageSearch = function(findText, rects, type) { }; this.StartSearchTransform = function(transform) { }; this.EndSearchTransform = function() { }; this.StartSearch = function() { }; this.EndSearch = function(bIsChange) { }; this.private_StartDrawSelection = function(overlay) { this.Overlay = overlay; this.IsTextMatrixUse = ((null != this.TextMatrix) && !global_MatrixTransformer.IsIdentity(this.TextMatrix)); this.Overlay.m_oContext.fillStyle = "rgba(51,102,204,255)"; this.Overlay.m_oContext.beginPath(); if (this.IsTextMatrixUse) this.Overlay.m_oContext.strokeStyle = "#9ADBFE"; }; this.private_EndDrawSelection = function() { var ctx = this.Overlay.m_oContext; ctx.globalAlpha = 0.2; ctx.fill(); if (this.IsTextMatrixUse) { ctx.globalAlpha = 1.0; ctx.lineWidth = Math.round(AscCommon.AscBrowser.retinaPixelRatio); ctx.stroke(); } ctx.beginPath(); ctx.globalAlpha = 1.0; this.IsTextMatrixUse = false; this.Overlay = null; }; this.AddPageSelection = function(pageIndex, x, y, w, h) { var drawingObjects = this.getDrawingObjects(); if(!drawingObjects) { return; } if (null == this.SelectionMatrix) this.SelectionMatrix = this.TextMatrix; var dKoefX = drawingObjects.convertMetric(1, 3, 0); var dKoefY = dKoefX; var indent = 0.5 * Math.round(AscCommon.AscBrowser.retinaPixelRatio); var _offX = 0; var _offY = 0; if (this.AutoShapesTrack && this.AutoShapesTrack.Graphics && this.AutoShapesTrack.Graphics.m_oCoordTransform) { _offX = this.AutoShapesTrack.Graphics.m_oCoordTransform.tx; _offY = this.AutoShapesTrack.Graphics.m_oCoordTransform.ty; } if (null == this.TextMatrix || global_MatrixTransformer.IsIdentity(this.TextMatrix)) { var _x = ((_offX + dKoefX * x + indent) >> 0) - indent; var _y = ((_offY + dKoefY * y + indent) >> 0) - indent; var _w = (dKoefX * w + 1) >> 0; var _h = (dKoefY * h + 1) >> 0; this.Overlay.CheckRect(_x, _y, _w, _h); this.Overlay.m_oContext.rect(_x,_y,_w,_h); } else { var _x1 = this.TextMatrix.TransformPointX(x, y); var _y1 = this.TextMatrix.TransformPointY(x, y); var _x2 = this.TextMatrix.TransformPointX(x + w, y); var _y2 = this.TextMatrix.TransformPointY(x + w, y); var _x3 = this.TextMatrix.TransformPointX(x + w, y + h); var _y3 = this.TextMatrix.TransformPointY(x + w, y + h); var _x4 = this.TextMatrix.TransformPointX(x, y + h); var _y4 = this.TextMatrix.TransformPointY(x, y + h); var x1 = _offX + dKoefX * _x1; var y1 = _offY + dKoefY * _y1; var x2 = _offX + dKoefX * _x2; var y2 = _offY + dKoefY * _y2; var x3 = _offX + dKoefX * _x3; var y3 = _offY + dKoefY * _y3; var x4 = _offX + dKoefX * _x4; var y4 = _offY + dKoefY * _y4; if (global_MatrixTransformer.IsIdentity2(this.TextMatrix)) { x1 = (x1 >> 0) + indent; y1 = (y1 >> 0) + indent; x2 = (x2 >> 0) + indent; y2 = (y2 >> 0) + indent; x3 = (x3 >> 0) + indent; y3 = (y3 >> 0) + indent; x4 = (x4 >> 0) + indent; y4 = (y4 >> 0) + indent; } this.Overlay.CheckPoint(x1, y1); this.Overlay.CheckPoint(x2, y2); this.Overlay.CheckPoint(x3, y3); this.Overlay.CheckPoint(x4, y4); var ctx = this.Overlay.m_oContext; ctx.moveTo(x1, y1); ctx.lineTo(x2, y2); ctx.lineTo(x3, y3); ctx.lineTo(x4, y4); ctx.closePath(); } }; this.SelectShow = function() { var drawingObjects = this.getDrawingObjects(); if(!drawingObjects) { return; } drawingObjects.OnUpdateOverlay(); }; this.Set_RulerState_Table = function(markup, transform) { }; this.Set_RulerState_Paragraph = function(margins) { }; this.Set_RulerState_HdrFtr = function(bHeader, Y0, Y1) { }; this.Update_MathTrack = function (IsActive, IsContentActive, oMath) { var PixelError = this.GetMMPerDot(1) * 3; this.MathTrack.Update(IsActive, IsContentActive, oMath, PixelError); }; this.Update_ParaTab = function(Default_Tab, ParaTabs) { }; this.UpdateTableRuler = function(isCols, index, position) { }; this.GetDotsPerMM = function(value) { return value * Asc.editor.wb.getZoom() * AscCommon.g_dKoef_mm_to_pix; }; this.GetMMPerDot = function(value) { return value / this.GetDotsPerMM( 1 ); }; this.GetVisibleMMHeight = function() { return 0; }; // вот оооочень важная функция. она выкидывает из кэша неиспользуемые шрифты this.CheckFontCache = function() { }; // при загрузке документа - нужно понять какие шрифты используются this.CheckFontNeeds = function() { }; // фукнции для старта работы this.OpenDocument = function() { }; // вот здесь весь трекинг this.DrawTrack = function(type, matrix, left, top, width, height, isLine, canRotate, isNoMove, isDrawHandles) { this.AutoShapesTrack.DrawTrack(type, matrix, left, top, width, height, isLine, canRotate, isNoMove, isDrawHandles); }; this.DrawTrackSelectShapes = function(x, y, w, h) { this.AutoShapesTrack.DrawTrackSelectShapes(x, y, w, h); }; this.DrawAdjustment = function(matrix, x, y, bTextWarp) { this.AutoShapesTrack.DrawAdjustment(matrix, x, y, bTextWarp); }; this.LockTrackPageNum = function(nPageNum) { this.AutoShapesTrackLockPageNum = nPageNum; }; this.UnlockTrackPageNum = function() { this.AutoShapesTrackLockPageNum = -1; }; this.CheckGuiControlColors = function() { }; this.SendControlColors = function() { }; this.DrawImageTextureFillShape = function(url) { if (this.GuiCanvasFillTexture == null) { this.InitGuiCanvasShape(this.GuiCanvasFillTextureParentId); } if (this.GuiCanvasFillTexture == null || this.GuiCanvasFillTextureCtx == null || url == this.LastDrawingUrl) return; this.LastDrawingUrl = url; var _width = this.GuiCanvasFillTexture.width; var _height = this.GuiCanvasFillTexture.height; this.GuiCanvasFillTextureCtx.clearRect(0, 0, _width, _height); if (null == this.LastDrawingUrl) return; var api = window["Asc"]["editor"]; var _img = api.ImageLoader.map_image_index[AscCommon.getFullImageSrc2(this.LastDrawingUrl)]; if (_img != undefined && _img.Image != null && _img.Status != AscFonts.ImageLoadStatus.Loading) { var _x = 0; var _y = 0; var _w = Math.max(_img.Image.width, 1); var _h = Math.max(_img.Image.height, 1); var dAspect1 = _width / _height; var dAspect2 = _w / _h; _w = _width; _h = _height; if (dAspect1 >= dAspect2) { _w = dAspect2 * _height; _x = (_width - _w) / 2; } else { _h = _w / dAspect2; _y = (_height - _h) / 2; } this.GuiCanvasFillTextureCtx.drawImage(_img.Image, _x, _y, _w, _h); } else { this.GuiCanvasFillTextureCtx.lineWidth = 1; this.GuiCanvasFillTextureCtx.beginPath(); this.GuiCanvasFillTextureCtx.moveTo(0, 0); this.GuiCanvasFillTextureCtx.lineTo(_width, _height); this.GuiCanvasFillTextureCtx.moveTo(_width, 0); this.GuiCanvasFillTextureCtx.lineTo(0, _height); this.GuiCanvasFillTextureCtx.strokeStyle = "#FF0000"; this.GuiCanvasFillTextureCtx.stroke(); this.GuiCanvasFillTextureCtx.beginPath(); this.GuiCanvasFillTextureCtx.moveTo(0, 0); this.GuiCanvasFillTextureCtx.lineTo(_width, 0); this.GuiCanvasFillTextureCtx.lineTo(_width, _height); this.GuiCanvasFillTextureCtx.lineTo(0, _height); this.GuiCanvasFillTextureCtx.closePath(); this.GuiCanvasFillTextureCtx.strokeStyle = "#000000"; this.GuiCanvasFillTextureCtx.stroke(); this.GuiCanvasFillTextureCtx.beginPath(); } }; this.DrawImageTextureFillTextArt = function(url) { if (this.GuiCanvasFillTextureTextArt == null) { this.InitGuiCanvasTextArt(this.GuiCanvasFillTextureParentIdTextArt); } if (this.GuiCanvasFillTextureTextArt == null || this.GuiCanvasFillTextureCtxTextArt == null || url == this.LastDrawingUrlTextArt) return; this.LastDrawingUrlTextArt = url; var _width = this.GuiCanvasFillTextureTextArt.width; var _height = this.GuiCanvasFillTextureTextArt.height; this.GuiCanvasFillTextureCtxTextArt.clearRect(0, 0, _width, _height); if (null == this.LastDrawingUrlTextArt) return; var api = window["Asc"]["editor"]; var _img = api.ImageLoader.map_image_index[AscCommon.getFullImageSrc2(this.LastDrawingUrlTextArt)]; if (_img != undefined && _img.Image != null && _img.Status != AscFonts.ImageLoadStatus.Loading) { var _x = 0; var _y = 0; var _w = Math.max(_img.Image.width, 1); var _h = Math.max(_img.Image.height, 1); var dAspect1 = _width / _height; var dAspect2 = _w / _h; _w = _width; _h = _height; if (dAspect1 >= dAspect2) { _w = dAspect2 * _height; _x = (_width - _w) / 2; } else { _h = _w / dAspect2; _y = (_height - _h) / 2; } this.GuiCanvasFillTextureCtxTextArt.drawImage(_img.Image, _x, _y, _w, _h); } else { this.GuiCanvasFillTextureCtxTextArt.lineWidth = 1; this.GuiCanvasFillTextureCtxTextArt.beginPath(); this.GuiCanvasFillTextureCtxTextArt.moveTo(0, 0); this.GuiCanvasFillTextureCtxTextArt.lineTo(_width, _height); this.GuiCanvasFillTextureCtxTextArt.moveTo(_width, 0); this.GuiCanvasFillTextureCtxTextArt.lineTo(0, _height); this.GuiCanvasFillTextureCtxTextArt.strokeStyle = "#FF0000"; this.GuiCanvasFillTextureCtxTextArt.stroke(); this.GuiCanvasFillTextureCtxTextArt.beginPath(); this.GuiCanvasFillTextureCtxTextArt.moveTo(0, 0); this.GuiCanvasFillTextureCtxTextArt.lineTo(_width, 0); this.GuiCanvasFillTextureCtxTextArt.lineTo(_width, _height); this.GuiCanvasFillTextureCtxTextArt.lineTo(0, _height); this.GuiCanvasFillTextureCtxTextArt.closePath(); this.GuiCanvasFillTextureCtxTextArt.strokeStyle = "#000000"; this.GuiCanvasFillTextureCtxTextArt.stroke(); this.GuiCanvasFillTextureCtxTextArt.beginPath(); } }; this.InitGuiCanvasShape = function(div_id) { if (this.GuiCanvasFillTextureParentId == div_id && null != this.GuiCanvasFillTexture) return; if (null != this.GuiCanvasFillTexture) { var _div_elem = document.getElementById(this.GuiCanvasFillTextureParentId); if (_div_elem) _div_elem.removeChild(this.GuiCanvasFillTexture); this.GuiCanvasFillTexture = null; this.GuiCanvasFillTextureCtx = null; } this.GuiCanvasFillTextureParentId = div_id; var _div_elem = document.getElementById(this.GuiCanvasFillTextureParentId); if (!_div_elem) return; var bIsAppend = true; if (_div_elem.childNodes && _div_elem.childNodes.length == 1) { this.GuiCanvasFillTexture = _div_elem.childNodes[0]; bIsAppend = false; } else { this.GuiCanvasFillTexture = document.createElement('canvas'); } this.GuiCanvasFillTexture.width = parseInt(_div_elem.style.width); this.GuiCanvasFillTexture.height = parseInt(_div_elem.style.height); this.LastDrawingUrl = ""; this.GuiCanvasFillTextureCtx = this.GuiCanvasFillTexture.getContext('2d'); if (bIsAppend) { _div_elem.appendChild(this.GuiCanvasFillTexture); } }; this.InitGuiCanvasTextProps = function(div_id) { var _div_elem = document.getElementById(div_id); if (null != this.GuiCanvasTextProps) { var elem = _div_elem.getElementsByTagName('canvas'); if (elem.length == 0) { _div_elem.appendChild(this.GuiCanvasTextProps); } else { var _width = parseInt(_div_elem.offsetWidth); var _height = parseInt(_div_elem.offsetHeight); if (0 == _width) _width = 300; if (0 == _height) _height = 80; this.GuiCanvasTextProps.style.width = _width + "px"; this.GuiCanvasTextProps.style.height = _height + "px"; } var old_width = this.GuiCanvasTextProps.width; var old_height = this.GuiCanvasTextProps.height; AscCommon.calculateCanvasSize(this.GuiCanvasTextProps); if (old_width !== this.GuiCanvasTextProps.width || old_height !== this.GuiCanvasTextProps.height) this.GuiLastTextProps = null; } else { this.GuiCanvasTextProps = document.createElement('canvas'); this.GuiCanvasTextProps.style.position = "absolute"; this.GuiCanvasTextProps.style.left = "0px"; this.GuiCanvasTextProps.style.top = "0px"; var _width = parseInt(_div_elem.offsetWidth); var _height = parseInt(_div_elem.offsetHeight); if (0 == _width) _width = 300; if (0 == _height) _height = 80; this.GuiCanvasTextProps.style.width = _width + "px"; this.GuiCanvasTextProps.style.height = _height + "px"; AscCommon.calculateCanvasSize(this.GuiCanvasTextProps); _div_elem.appendChild(this.GuiCanvasTextProps); } }; this.InitGuiCanvasTextArt = function(div_id) { if (null != this.GuiCanvasFillTextureTextArt) { var _div_elem = document.getElementById(this.GuiCanvasFillTextureParentIdTextArt); if (!_div_elem) _div_elem.removeChild(this.GuiCanvasFillTextureTextArt); this.GuiCanvasFillTextureTextArt = null; this.GuiCanvasFillTextureCtxTextArt = null; } this.GuiCanvasFillTextureParentIdTextArt = div_id; var _div_elem = document.getElementById(this.GuiCanvasFillTextureParentIdTextArt); if (!_div_elem) return; var bIsAppend = true; if (_div_elem.childNodes && _div_elem.childNodes.length == 1) { this.GuiCanvasFillTextureTextArt = _div_elem.childNodes[0]; bIsAppend = false; } else { this.GuiCanvasFillTextureTextArt = document.createElement('canvas'); } this.GuiCanvasFillTextureTextArt.width = parseInt(_div_elem.style.width); this.GuiCanvasFillTextureTextArt.height = parseInt(_div_elem.style.height); this.LastDrawingUrlTextArt = ""; this.GuiCanvasFillTextureCtxTextArt = this.GuiCanvasFillTextureTextArt.getContext('2d'); if (bIsAppend) { _div_elem.appendChild(this.GuiCanvasFillTextureTextArt); } }; this.DrawGuiCanvasTextProps = function(props) { var bIsChange = false; if (null == this.GuiLastTextProps) { bIsChange = true; this.GuiLastTextProps = new Asc.asc_CParagraphProperty(); this.GuiLastTextProps.Subscript = props.Subscript; this.GuiLastTextProps.Superscript = props.Superscript; this.GuiLastTextProps.SmallCaps = props.SmallCaps; this.GuiLastTextProps.AllCaps = props.AllCaps; this.GuiLastTextProps.Strikeout = props.Strikeout; this.GuiLastTextProps.DStrikeout = props.DStrikeout; this.GuiLastTextProps.TextSpacing = props.TextSpacing; this.GuiLastTextProps.Position = props.Position; } else { if (this.GuiLastTextProps.Subscript != props.Subscript) { this.GuiLastTextProps.Subscript = props.Subscript; bIsChange = true; } if (this.GuiLastTextProps.Superscript != props.Superscript) { this.GuiLastTextProps.Superscript = props.Superscript; bIsChange = true; } if (this.GuiLastTextProps.SmallCaps != props.SmallCaps) { this.GuiLastTextProps.SmallCaps = props.SmallCaps; bIsChange = true; } if (this.GuiLastTextProps.AllCaps != props.AllCaps) { this.GuiLastTextProps.AllCaps = props.AllCaps; bIsChange = true; } if (this.GuiLastTextProps.Strikeout != props.Strikeout) { this.GuiLastTextProps.Strikeout = props.Strikeout; bIsChange = true; } if (this.GuiLastTextProps.DStrikeout != props.DStrikeout) { this.GuiLastTextProps.DStrikeout = props.DStrikeout; bIsChange = true; } if (this.GuiLastTextProps.TextSpacing != props.TextSpacing) { this.GuiLastTextProps.TextSpacing = props.TextSpacing; bIsChange = true; } if (this.GuiLastTextProps.Position != props.Position) { this.GuiLastTextProps.Position = props.Position; bIsChange = true; } } if (undefined !== this.GuiLastTextProps.Position && isNaN(this.GuiLastTextProps.Position)) this.GuiLastTextProps.Position = undefined; if (undefined !== this.GuiLastTextProps.TextSpacing && isNaN(this.GuiLastTextProps.TextSpacing)) this.GuiLastTextProps.TextSpacing = undefined; if (!bIsChange) return; AscFormat.ExecuteNoHistory(function() { var shape = new AscFormat.CShape(); shape.setTxBody(AscFormat.CreateTextBodyFromString("", this, shape)); var par = shape.txBody.content.Content[0]; par.Reset(0, 0, 1000, 1000, 0); par.MoveCursorToStartPos(); var _paraPr = new CParaPr(); par.Pr = _paraPr; var _textPr = new CTextPr(); _textPr.FontFamily = { Name : "Arial", Index : -1 }; _textPr.FontSize = (AscCommon.AscBrowser.convertToRetinaValue(11 << 1, true) >> 0) * 0.5; _textPr.RFonts.SetAll("Arial"); _textPr.Strikeout = this.GuiLastTextProps.Strikeout; if (true === this.GuiLastTextProps.Subscript) _textPr.VertAlign = AscCommon.vertalign_SubScript; else if (true === this.GuiLastTextProps.Superscript) _textPr.VertAlign = AscCommon.vertalign_SuperScript; else _textPr.VertAlign = AscCommon.vertalign_Baseline; _textPr.DStrikeout = this.GuiLastTextProps.DStrikeout; _textPr.Caps = this.GuiLastTextProps.AllCaps; _textPr.SmallCaps = this.GuiLastTextProps.SmallCaps; _textPr.Spacing = this.GuiLastTextProps.TextSpacing; _textPr.Position = this.GuiLastTextProps.Position; var parRun = new ParaRun(par); parRun.Set_Pr(_textPr); parRun.AddText("Hello World"); par.Add_ToContent(0, parRun); par.Recalculate_Page(0); par.Recalculate_Page(0); var baseLineOffset = par.Lines[0].Y; var _bounds = par.Get_PageBounds(0); var ctx = this.GuiCanvasTextProps.getContext('2d'); var _wPx = this.GuiCanvasTextProps.width; var _hPx = this.GuiCanvasTextProps.height; var _wMm = _wPx * g_dKoef_pix_to_mm; var _hMm = _hPx * g_dKoef_pix_to_mm; ctx.fillStyle = "#FFFFFF"; ctx.fillRect(0, 0, _wPx, _hPx); var _pxBoundsW = par.Lines[0].Ranges[0].W * AscCommon.g_dKoef_mm_to_pix;//(_bounds.Right - _bounds.Left) * AscCommon.g_dKoef_mm_to_pix; var _pxBoundsH = (_bounds.Bottom - _bounds.Top) * AscCommon.g_dKoef_mm_to_pix; if (this.GuiLastTextProps.Position !== undefined && this.GuiLastTextProps.Position != null && this.GuiLastTextProps.Position != 0) { // TODO: нужна высота без учета Position // _pxBoundsH -= (this.GuiLastTextProps.Position * AscCommon.g_dKoef_mm_to_pix); } if (_pxBoundsH < _hPx && _pxBoundsW < _wPx) { // рисуем линию var _lineY = (((_hPx + _pxBoundsH) / 2) >> 0) + 0.5; var _lineW = (((_wPx - _pxBoundsW) / 4) >> 0); ctx.strokeStyle = "#000000"; ctx.lineWidth = 1; ctx.beginPath(); ctx.moveTo(0, _lineY); ctx.lineTo(_lineW, _lineY); ctx.moveTo(_wPx - _lineW, _lineY); ctx.lineTo(_wPx, _lineY); ctx.stroke(); ctx.beginPath(); } var _yOffset = (((_hPx + _pxBoundsH) / 2) - baseLineOffset * AscCommon.g_dKoef_mm_to_pix) >> 0; var _xOffset = ((_wPx - _pxBoundsW) / 2) >> 0; var graphics = new AscCommon.CGraphics(); graphics.init(ctx, _wPx, _hPx, _wMm, _hMm); graphics.m_oFontManager = AscCommon.g_fontManager; graphics.m_oCoordTransform.tx = _xOffset; graphics.m_oCoordTransform.ty = _yOffset; graphics.transform(1,0,0,1,0,0); par.Draw(0, graphics); }, this, []); }; this.CheckTableStyles = function(tableLook) { }; this.GetTableStylesPreviews = function() { return []; }; this.GetTableLook = function(isDefault) { let oTableLook; if (isDefault) { oTableLook = new AscCommon.CTableLook(); oTableLook.SetDefault(); } else { oTableLook = this.TableStylesLastLook; } return oTableLook; }; this.IsMobileVersion = function() { return false; }; this.OnSelectEnd = function() { }; // collaborative targets this.Collaborative_UpdateTarget = function(_id, _shortId, _x, _y, _size, sheetId, _transform, is_from_paint) { //if (is_from_paint !== true) //{ // this.CollaborativeTargetsUpdateTasks.push([_id, _shortId, _x, _y, _size, sheetId, _transform]); // return; //} for (var i = 0; i < this.CollaborativeTargets.length; i++) { if (_id == this.CollaborativeTargets[i].Id) { this.CollaborativeTargets[i].CheckPosition(_x, _y, _size, sheetId, _transform); return; } } var _target = new CDrawingCollaborativeTarget(this); _target.Id = _id; _target.ShortId = _shortId; _target.SheetId = sheetId; _target.CheckPosition(_x, _y, _size, sheetId, _transform); this.CollaborativeTargets[this.CollaborativeTargets.length] = _target; }; this.Collaborative_RemoveTarget = function(_id) { var i = 0; for (i = 0; i < this.CollaborativeTargets.length; i++) { if (_id == this.CollaborativeTargets[i].Id) { this.CollaborativeTargets[i].Remove(this); this.CollaborativeTargets.splice(i, 1); i--; } } for (i = 0; i < this.CollaborativeTargetsUpdateTasks.length; i++) { var _tmp = this.CollaborativeTargetsUpdateTasks[i]; if (_tmp[0] == _id) { this.CollaborativeTargetsUpdateTasks.splice(i, 1); i--; } } }; this.Collaborative_TargetsUpdate = function(bIsChangePosition) { if (bIsChangePosition) { for (var i = 0; i < this.CollaborativeTargets.length; i++) { this.CollaborativeTargets[i].Update(); } } }; this.Collaborative_GetTargetPosition = function(UserId) { for (var i = 0; i < this.CollaborativeTargets.length; i++) { if (UserId == this.CollaborativeTargets[i].Id) return {X : this.CollaborativeTargets[i].HtmlElementX, Y : this.CollaborativeTargets[i].HtmlElementY}; } return null; }; this.CloseFile = function () { this.ClearCachePages(); this.FirePaint(); this.m_arrPages.splice(0, this.m_arrPages.length); this.m_lPagesCount = 0; this.m_lDrawingFirst = -1; this.m_lDrawingEnd = -1; this.m_lCurrentPage = -1; }; } // заглушка function CHtmlPage() { this.drawingPage = { top: 0, left: 0, right: 0, bottom: 0 }; this.width_mm = 0; this.height_mm = 0; } CHtmlPage.prototype.init = function(x, y, w_pix, h_pix, w_mm, h_mm) { this.drawingPage.top = y; this.drawingPage.left = x; this.drawingPage.right = w_pix; this.drawingPage.bottom = h_pix; this.width_mm = w_mm; this.height_mm = h_mm; }; CHtmlPage.prototype.GetDrawingPageInfo = function() { return { drawingPage: this.drawingPage, width_mm: this.width_mm, height_mm: this.height_mm }; }; //--------------------------------------------------------export---------------------------------------------------- window['AscCommon'] = window['AscCommon'] || {}; window['AscCommon'].CDrawingDocument = CDrawingDocument; window['AscCommon'].CHtmlPage = CHtmlPage; })(window);