Files
DocumentServer-v-9.2.0/sdkjs/common/Native/native_graphics.js
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

649 lines
20 KiB
JavaScript

/*
* (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 CNativeGraphics(nativeEmbed)
{
AscCommon.CGraphicsBase.call(this, AscCommon.RendererType.NativeDrawer);
/** @suppress {checkVars} */
this.Native = nativeEmbed ? nativeEmbed : CreateEmbedObject("CGraphicsEmbed");
this.isNativeGraphics = true;
this.width = 0;
this.height = 0;
this.m_dWidthMM = 0;
this.m_dHeightMM = 0;
this.m_lWidthPix = 0;
this.m_lHeightPix = 0;
this.m_dDpiX = 96.0;
this.m_dDpiY = 96.0;
this.TextureFillTransformScaleX = 1;
this.TextureFillTransformScaleY = 1;
this.dash_no_smart = null;
this.TextClipRect = null;
this.ArrayPoints = null;
this.MaxEpsLine = null;
this.m_oTextPr = null;
this.m_oGrFonts = {
Ascii : {Name : "", Index : -1},
EastAsia : {Name : "", Index : -1},
HAnsi : {Name : "", Index : -1},
CS : {Name : "", Index : -1}
};
}
CNativeGraphics.prototype = Object.create(AscCommon.CGraphicsBase.prototype);
CNativeGraphics.prototype.constructor = CNativeGraphics;
CNativeGraphics.prototype.create = function(nativecontrol, width_px, height_px, width_mm, height_mm)
{
this.TextureFillTransformScaleX = width_mm / (width_px >> 0);
this.TextureFillTransformScaleY = height_mm / (height_px >> 0);
let native_object = nativecontrol;
if (window["IS_NATIVE_EDITOR"])
native_object = window["native"]["GetResourcesForGraphics"]();
this.Native["create"](native_object, width_px, height_px, width_mm, height_mm);
};
CNativeGraphics.prototype.put_GlobalAlpha = function(enable, alpha)
{
this.Native["put_GlobalAlpha"](enable, alpha);
};
CNativeGraphics.prototype.Start_GlobalAlpha = function()
{
// this.Native["Start_GlobalAlpha"]();
};
CNativeGraphics.prototype.End_GlobalAlpha = function()
{
this.Native["End_GlobalAlpha"]();
};
// pen methods
CNativeGraphics.prototype.p_color = function(r, g, b, a)
{
this.Native["p_color"](r, g, b, a);
};
CNativeGraphics.prototype.p_width = function(w)
{
this.Native["p_width"](w);
};
CNativeGraphics.prototype.p_dash = function(params)
{
this.Native["p_dash"](params ? params : []);
};
// brush methods
CNativeGraphics.prototype.b_color1 = function(r, g, b, a)
{
this.Native["b_color1"](r, g, b, a);
};
CNativeGraphics.prototype.b_color2 = function(r, g, b, a)
{
this.Native["b_color2"](r, g, b, a);
};
CNativeGraphics.prototype.transform = function(sx, shy, shx, sy, tx, ty)
{
this.Native["transform"](sx, shy, shx, sy, tx, ty);
};
CNativeGraphics.prototype.CalculateFullTransform = function(isInvertNeed)
{
this.Native["CalculateFullTransform"](isInvertNeed);
};
// path commands
CNativeGraphics.prototype._s = function()
{
this.Native["_s"]();
};
CNativeGraphics.prototype._e = function()
{
this.Native["_e"]();
};
CNativeGraphics.prototype._z = function()
{
this.Native["_z"]();
};
CNativeGraphics.prototype._m = function(x, y)
{
x = isNaN(x) ? 0 : x;
y = isNaN(y) ? 0 : y;
this.Native["_m"](x, y);
if (false === this.GetIntegerGrid() && this.ArrayPoints != null)
this.ArrayPoints[this.ArrayPoints.length] = {x: x, y: y};
};
CNativeGraphics.prototype._l = function(x, y)
{
x = isNaN(x) ? 0 : x;
y = isNaN(y) ? 0 : y;
this.Native["_l"](x, y);
if (false === this.GetIntegerGrid() && this.ArrayPoints != null)
this.ArrayPoints[this.ArrayPoints.length] = {x: x, y: y};
};
CNativeGraphics.prototype._c = function(x1, y1, x2, y2, x3, y3)
{
x1 = isNaN(x1) ? 0 : x1;
y1 = isNaN(y1) ? 0 : y1;
x2 = isNaN(x2) ? 0 : x2;
y2 = isNaN(y2) ? 0 : y2;
x3 = isNaN(x3) ? 0 : x3;
y3 = isNaN(y3) ? 0 : y3;
this.Native["_c"](x1, y1, x2, y2, x3, y3);
if (false === this.GetIntegerGrid() && this.ArrayPoints != null)
{
this.ArrayPoints[this.ArrayPoints.length] = {x: x1, y: y1};
this.ArrayPoints[this.ArrayPoints.length] = {x: x2, y: y2};
this.ArrayPoints[this.ArrayPoints.length] = {x: x3, y: y3};
}
};
CNativeGraphics.prototype._c2 = function(x1, y1, x2, y2)
{
x1 = isNaN(x1) ? 0 : x1;
y1 = isNaN(y1) ? 0 : y1;
x2 = isNaN(x2) ? 0 : x2;
y2 = isNaN(y2) ? 0 : y2;
this.Native["_c2"](x1, y1, x2, y2);
if (false === this.GetIntegerGrid() && this.ArrayPoints != null)
{
this.ArrayPoints[this.ArrayPoints.length] = {x: x1, y: y1};
this.ArrayPoints[this.ArrayPoints.length] = {x: x2, y: y2};
}
};
CNativeGraphics.prototype.ds = function()
{
this.Native["ds"]();
};
CNativeGraphics.prototype.df = function()
{
this.Native["df"]();
};
// canvas state
CNativeGraphics.prototype.save = function()
{
this.Native["save"]();
};
CNativeGraphics.prototype.restore = function()
{
this.Native["restore"]();
};
CNativeGraphics.prototype.clip = function()
{
this.Native["clip"]();
};
CNativeGraphics.prototype.reset = function()
{
this.Native["reset"]();
};
CNativeGraphics.prototype.transform3 = function(m, isNeedInvert)
{
this.Native["transform"](m.sx, m.shy, m.shx, m.sy, m.tx, m.ty);
};
// images
CNativeGraphics.prototype.drawImage2 = function(img, x, y, w, h, alpha, srcRect)
{
this.Native["drawImage2"](img, x, y, w, h, alpha, srcRect);
};
CNativeGraphics.prototype.drawImage = function(img, x, y, w, h, alpha, srcRect, nativeImage)
{
this.Native["drawImage"](img, x, y, w, h, alpha, srcRect, nativeImage);
};
// text
CNativeGraphics.prototype.GetFont = function()
{
return this.Native["GetFont"]();
};
CNativeGraphics.prototype.font = function(font_id, font_size)
{
this.Native["font"](font_id, font_size);
};
CNativeGraphics.prototype.SetFont = function(font)
{
if (null == font)
return;
var flag = 0;
if (font.Bold) flag |= 0x01;
if (font.Italic) flag |= 0x02;
if (font.Bold) flag |= 0x04;
if (font.Italic) flag |= 0x08;
this.Native["SetFont"](font.FontFamily.Name, font.FontFamily.Index, font.FontSize, flag);
};
CNativeGraphics.prototype.SetTextPr = function(textPr, theme)
{
this.m_oTextPr = textPr;
if (theme)
{
this.m_oGrFonts.Ascii.Name = theme.themeElements.fontScheme.checkFont(this.m_oTextPr.RFonts.Ascii ? this.m_oTextPr.RFonts.Ascii.Name : null);
this.m_oGrFonts.EastAsia.Name = theme.themeElements.fontScheme.checkFont(this.m_oTextPr.RFonts.EastAsia ? this.m_oTextPr.RFonts.EastAsia.Name : null);
this.m_oGrFonts.HAnsi.Name = theme.themeElements.fontScheme.checkFont(this.m_oTextPr.RFonts.HAnsi ? this.m_oTextPr.RFonts.HAnsi.Name : null);
this.m_oGrFonts.CS.Name = theme.themeElements.fontScheme.checkFont(this.m_oTextPr.RFonts.CS ? this.m_oTextPr.RFonts.CS.Name : null);
this.m_oGrFonts.Ascii.Index = -1;
this.m_oGrFonts.EastAsia.Index = -1;
this.m_oGrFonts.HAnsi.Index = -1;
this.m_oGrFonts.CS.Index = -1;
}
else
{
this.m_oGrFonts = this.m_oTextPr.RFonts;
}
};
CNativeGraphics.prototype.SetFontInternal = function(name, size, style)
{
this.Native["SetFont"](name, -1, size, style);
};
CNativeGraphics.prototype.SetFontSlot = function(slot, fontSizeKoef)
{
var _lastFont = {FontFamily : {Name : "Arial", Index : -1}, FontSize : 16, Italic : true, Bold : true};
switch(slot)
{
case 0: // fontslot_ASCII
{
_lastFont.FontFamily.Name = this.m_oGrFonts.Ascii.Name;
_lastFont.FontSize = this.m_oTextPr.FontSize;
_lastFont.Bold = this.m_oTextPr.Bold;
_lastFont.Italic = this.m_oTextPr.Italic;
break;
}
case 1: // fontslot_EastAsia
{
_lastFont.FontFamily.Name = this.m_oGrFonts.EastAsia.Name;
_lastFont.FontSize = this.m_oTextPr.FontSize;
_lastFont.Bold = this.m_oTextPr.Bold;
_lastFont.Italic = this.m_oTextPr.Italic;
break;
}
case 2: // fontslot_CS
{
_lastFont.FontFamily.Name = this.m_oGrFonts.CS.Name;
_lastFont.FontSize = this.m_oTextPr.FontSizeCS;
_lastFont.Bold = this.m_oTextPr.BoldCS;
_lastFont.Italic = this.m_oTextPr.ItalicCS;
break;
}
case 3: // fontslot_HAnsi
default:
{
_lastFont.FontFamily.Name = this.m_oGrFonts.HAnsi.Name;
_lastFont.FontSize = this.m_oTextPr.FontSize;
_lastFont.Bold = this.m_oTextPr.Bold;
_lastFont.Italic = this.m_oTextPr.Italic;
break;
}
}
if (undefined !== fontSizeKoef)
{
_lastFont.FontSize *= fontSizeKoef;
}
this.SetFont(_lastFont);
};
CNativeGraphics.prototype.GetTextPr = function()
{
return this.m_oTextPr;
};
CNativeGraphics.prototype.FillText = function(x, y, text)
{
var _code = text.charCodeAt(0);
this.Native["FillText"](x, y, _code);
};
CNativeGraphics.prototype.t = function(text, x, y, isBounds)
{
this.Native["t"](x, y, text);
};
CNativeGraphics.prototype.FillText2 = function(x, y, text, cropX, cropW)
{
var _code = text.charCodeAt(0);
this.Native["FillText2"](x, y, _code, cropX, cropW);
};
CNativeGraphics.prototype.t2 = function(text, x, y, cropX, cropW)
{
this.Native["t2"](x, y, text, cropX, cropW);
};
CNativeGraphics.prototype.FillTextCode = function(x, y, lUnicode)
{
this.Native["FillTextCode"](x, y, lUnicode);
};
CNativeGraphics.prototype.tg = function(code, x, y)
{
this.Native["tg"](code, x, y);
};
CNativeGraphics.prototype.SetIntegerGrid = function(param)
{
this.Native["SetIntegerGrid"](param);
};
CNativeGraphics.prototype.GetIntegerGrid = function()
{
return this.Native["GetIntegerGrid"]();
};
CNativeGraphics.prototype.DrawStringASCII = function(name, size, bold, italic, text, x, y, bIsHeader)
{
this.SetFont({FontFamily : {Name : name, Index : -1}, FontSize : size, Italic : italic, Bold : bold});
this.Native["DrawStringASCII"](text, x, y);
};
CNativeGraphics.prototype.DrawStringASCII2 = function(name, size, bold, italic, text, x, y, bIsHeader)
{
this.SetFont({FontFamily : {Name : name, Index : -1}, FontSize : size, Italic : italic, Bold : bold});
this.Native["DrawStringASCII2"](text, x, y);
};
CNativeGraphics.prototype.DrawHeaderEdit = function(yPos, lock_type, sectionNum, bIsRepeat, type)
{
this.Native["DrawHeaderEdit"](yPos, lock_type, sectionNum, bIsRepeat, type);
};
CNativeGraphics.prototype.DrawFooterEdit = function(yPos, lock_type, sectionNum, bIsRepeat, type)
{
this.Native["DrawFooterEdit"](yPos, lock_type, sectionNum, bIsRepeat, type);
};
CNativeGraphics.prototype.DrawLockParagraph = function(lock_type, x, y1, y2)
{
this.Native["DrawLockParagraph"](x, y1, y2);
};
CNativeGraphics.prototype.DrawLockObjectRect = function(lock_type, x, y, w, h)
{
if (this.IsThumbnail)
return;
this.Native["DrawLockObjectRect"](x, y, w, h);
};
CNativeGraphics.prototype.DrawEmptyTableLine = function(x1, y1, x2, y2)
{
this.Native["DrawEmptyTableLine"](x1, y1, x2, y2);
};
CNativeGraphics.prototype.DrawSpellingLine = function(y0, x0, x1, w)
{
this.Native["DrawSpellingLine"](y0, x0, x1, w);
};
// smart methods for horizontal / vertical lines
CNativeGraphics.prototype.drawHorLine = function(align, y, x, r, penW)
{
this.Native["drawHorLine"](align, y, x, r, penW);
if (false === this.GetIntegerGrid() && this.ArrayPoints != null)
{
this.ArrayPoints[this.ArrayPoints.length] = {x: x, y: y};
this.ArrayPoints[this.ArrayPoints.length] = {x: r, y: y};
}
};
CNativeGraphics.prototype.drawHorLine2 = function(align, y, x, r, penW)
{
this.Native["drawHorLine2"](align, y, x, r, penW);
if (false === this.GetIntegerGrid() && this.ArrayPoints != null)
{
var _y1 = y - penW / 2;
var _y2 = _y1 + 2 * penW;
this.ArrayPoints[this.ArrayPoints.length] = {x: x, y: _y1};
this.ArrayPoints[this.ArrayPoints.length] = {x: r, y: _y1};
this.ArrayPoints[this.ArrayPoints.length] = {x: x, y: _y2};
this.ArrayPoints[this.ArrayPoints.length] = {x: r, y: _y2};
}
};
CNativeGraphics.prototype.drawVerLine = function(align, x, y, b, penW)
{
this.Native["drawVerLine"](align, x, y, b, penW);
if (false === this.GetIntegerGrid() && this.ArrayPoints != null)
{
this.ArrayPoints[this.ArrayPoints.length] = {x: x, y: y};
this.ArrayPoints[this.ArrayPoints.length] = {x: x, y: b};
}
};
// мега крутые функции для таблиц
CNativeGraphics.prototype.drawHorLineExt = function(align, y, x, r, penW, leftMW, rightMW)
{
this.Native["drawHorLineExt"](align, y, x, r, penW, leftMW, rightMW);
if (false === this.GetIntegerGrid() && this.ArrayPoints != null)
{
this.ArrayPoints[this.ArrayPoints.length] = {x: x, y: y};
this.ArrayPoints[this.ArrayPoints.length] = {x: r, y: y};
}
};
CNativeGraphics.prototype.rect = function(x, y, w, h)
{
this.Native["rect"](x, y, w, h);
};
CNativeGraphics.prototype.TableRect = function(x, y, w, h)
{
this.Native["TableRect"](x, y, w, h);
};
// функции клиппирования
CNativeGraphics.prototype.AddClipRect = function(x, y, w, h)
{
this.Native["AddClipRect"](x, y, w, h);
};
CNativeGraphics.prototype.RemoveClipRect = function()
{
this.Native["RemoveClipRect"]();
};
CNativeGraphics.prototype.SetClip = function(r)
{
this.Native["SetClip"](r.x, r.y, r.w, r.h);
};
CNativeGraphics.prototype.RemoveClip = function()
{
this.Native["RemoveClip"]();
};
CNativeGraphics.prototype.drawCollaborativeChanges = function(x, y, w, h, Color)
{
};
CNativeGraphics.prototype.drawMailMergeField = function(x, y, w, h)
{
this.Native["drawMailMergeField"](x, y, w, h);
};
CNativeGraphics.prototype.drawSearchResult = function(x, y, w, h)
{
this.Native["drawSearchResult"](x, y, w, h);
};
CNativeGraphics.prototype.drawFlowAnchor = function(x, y)
{
this.Native["drawFlowAnchor"](x, y);
};
CNativeGraphics.prototype.SavePen = function()
{
this.Native["SavePen"]();
};
CNativeGraphics.prototype.RestorePen = function()
{
this.Native["RestorePen"]();
};
CNativeGraphics.prototype.SaveBrush = function()
{
this.Native["SaveBrush"]();
};
CNativeGraphics.prototype.RestoreBrush = function()
{
this.Native["RestoreBrush"]();
};
CNativeGraphics.prototype.SavePenBrush = function()
{
this.Native["SavePenBrush"]();
};
CNativeGraphics.prototype.RestorePenBrush = function()
{
this.Native["RestorePenBrush"]();
};
CNativeGraphics.prototype.SaveGrState = function()
{
this.Native["SaveGrState"]();
};
CNativeGraphics.prototype.RestoreGrState = function()
{
this.Native["RestoreGrState"]();
};
CNativeGraphics.prototype.StartClipPath = function()
{
this.Native["StartClipPath"]();
};
CNativeGraphics.prototype.EndClipPath = function()
{
this.Native["EndClipPath"]();
};
CNativeGraphics.prototype.StartCheckTableDraw = function()
{
return this.Native["StartCheckTableDraw"]();
};
CNativeGraphics.prototype.EndCheckTableDraw = function(bIsRestore)
{
if(bIsRestore)
this.RestoreGrState();
};
CNativeGraphics.prototype.SetTextClipRect = function(_l, _t, _r, _b)
{
this.Native["SetTextClipRect"](_l, _t, _r, _b);
};
CNativeGraphics.prototype.AddSmartRect = function(x, y, w, h, pen_w)
{
this.Native["AddSmartRect"](x, y, w, h, pen_w);
};
CNativeGraphics.prototype.CheckUseFonts2 = function(_transform)
{
};
CNativeGraphics.prototype.UncheckUseFonts2 = function()
{
};
CNativeGraphics.prototype.DrawFootnoteRect = function(x, y, w, h)
{
this.Native["DrawFootnoteRect"](x, y, w, h);
};
// new methods
CNativeGraphics.prototype.toDataURL = function(type)
{
return this.Native["toDataURL"](type);
};
CNativeGraphics.prototype.GetPenColor = function()
{
return this.Native["GetPenColor"]();
};
CNativeGraphics.prototype.GetBrushColor = function()
{
return this.Native["GetBrushColor"]();
};
CNativeGraphics.prototype.put_brushTexture = function(src, type)
{
this.Native["put_brushTexture"](src, type);
};
CNativeGraphics.prototype.put_brushTextureMode = function(mode)
{
this.Native["put_brushTextureMode"](mode);
};
CNativeGraphics.prototype.put_BrushTextureAlpha = function(a)
{
this.Native["put_BrushTextureAlpha"](a);
};
CNativeGraphics.prototype.put_BrushGradient = function(gradFill, points, transparent)
{
var colors = new Array(gradFill.colors.length * 5);
for (var i = 0; i < gradFill.colors.length; i++) {
colors[i * 5] = gradFill.colors[i].pos;
colors[i * 5 + 1] = gradFill.colors[i].color.RGBA.R;
colors[i * 5 + 2] = gradFill.colors[i].color.RGBA.G;
colors[i * 5 + 3] = gradFill.colors[i].color.RGBA.B;
colors[i * 5 + 4] = gradFill.colors[i].color.RGBA.A;
}
this.Native["put_BrushGradient"](colors, transparent, points.x0, points.y0, points.x1, points.y1, points.r0, points.r1);
};
CNativeGraphics.prototype.TransformPointX = function(x, y)
{
return this.Native["TransformPointX"](x, y);
};
CNativeGraphics.prototype.TransformPointY = function(x, y)
{
return this.Native["TransformPointY"](x, y);
};
CNativeGraphics.prototype.put_LineJoin = function(join)
{
this.Native["put_LineJoin"](join);
};
CNativeGraphics.prototype.get_LineJoin = function()
{
return this.Native["get_LineJoin"]();
};
CNativeGraphics.prototype.put_TextureBoundsEnabled = function(enabled)
{
};
CNativeGraphics.prototype.put_TextureBounds = function(x, y, w, h)
{
this.Native["put_TextureBounds"](x, y, w, h);
};
CNativeGraphics.prototype.GetLineWidth = function()
{
return this.Native["GetlineWidth"]();
};
CNativeGraphics.prototype.DrawPath = function(path)
{
this.Native["DrawPath"](path);
};
CNativeGraphics.prototype.drawpath = function(path)
{
this.Native["DrawPath"](path);
};
CNativeGraphics.prototype.CoordTransformOffset = function(tx, ty)
{
this.Native["CoordTransformOffset"](tx, ty);
};
CNativeGraphics.prototype.GetTransform = function()
{
var _trans = this.Native["GetTransform"]();
var _transform = new AscCommon.CMatrix;
_transform.sx = _trans.sx;
_transform.shx = _trans.shx;
_transform.shy = _trans.shy;
_transform.sy = _trans.sy;
_transform.tx = _trans.tx;
_transform.ty = _trans.ty;
return _transform;
};
CNativeGraphics.prototype.GetBrush = function()
{
return { Color1 : this.Native["GetBrushColor"]()};
};
CNativeGraphics.prototype.GetPen = function()
{
return { Color : this.Native["GetPenColor"]()};
};
CNativeGraphics.prototype.Destroy = function()
{
this.Native["Destroy"]();
};
CNativeGraphics.prototype.CreateLayer = function(opacity)
{
this.Native["CreateLayer"](opacity);
};
CNativeGraphics.prototype.BlendLayer = function()
{
this.Native["BlendLayer"]();
};
AscCommon.CNativeGraphics = CNativeGraphics;