mirror of
https://github.com/ONLYOFFICE/sdkjs.git
synced 2026-04-07 14:09:12 +08:00
9355 lines
250 KiB
JavaScript
9355 lines
250 KiB
JavaScript
/*
|
||
* (c) Copyright Ascensio System SIA 2010-2019
|
||
*
|
||
* 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-12 Ernesta Birznieka-Upisha
|
||
* 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";
|
||
|
||
// Import
|
||
var FontStyle = AscFonts.FontStyle;
|
||
var g_fontApplication = AscFonts.g_fontApplication;
|
||
|
||
var CColor = AscCommon.CColor;
|
||
var CAscMathCategory = AscCommon.CAscMathCategory;
|
||
var g_oTableId = AscCommon.g_oTableId;
|
||
var g_oTextMeasurer = AscCommon.g_oTextMeasurer;
|
||
var global_mouseEvent = AscCommon.global_mouseEvent;
|
||
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;
|
||
|
||
var _canvas_tables = null;
|
||
var _table_styles = null;
|
||
|
||
var c_oContentControlTrack = {
|
||
Hover : 0,
|
||
In : 1
|
||
};
|
||
|
||
function CContentControlButtonIcons()
|
||
{
|
||
function CCCBI()
|
||
{
|
||
this.type = 0;
|
||
this.images = [];
|
||
|
||
this.load = function(type, url)
|
||
{
|
||
this.type = type;
|
||
this.images[0] = new Image();
|
||
this.images[0].onload = function() { this.asc_complete = true; };
|
||
this.images[0].src = "../../../../sdkjs/common/Images/content_control_" + url + ".png";
|
||
|
||
this.images[1] = new Image();
|
||
this.images[1].onload = function() { this.asc_complete = true; };
|
||
this.images[1].src = "../../../../sdkjs/common/Images/content_control_" + url + "_active.png";
|
||
|
||
this.images[2] = new Image();
|
||
this.images[2].onload = function() { this.asc_complete = true; };
|
||
this.images[2].src = "../../../../sdkjs/common/Images/content_control_" + url + "_2x.png";
|
||
|
||
this.images[3] = new Image();
|
||
this.images[3].onload = function() { this.asc_complete = true; };
|
||
this.images[3].src = "../../../../sdkjs/common/Images/content_control_" + url + "_active_2x.png";
|
||
};
|
||
|
||
this.get = function(isActive)
|
||
{
|
||
var index = AscCommon.AscBrowser.isRetina ? 2 : 0;
|
||
if (isActive)
|
||
index++;
|
||
if (this.images[index].asc_complete)
|
||
return this.images[index];
|
||
return null;
|
||
};
|
||
}
|
||
|
||
this.images = {};
|
||
this.measures = {};
|
||
|
||
this.register = function(type, url)
|
||
{
|
||
var image = new CCCBI();
|
||
image.load(type, url);
|
||
this.images[type] = image;
|
||
};
|
||
|
||
this.getFont = function(dKoef)
|
||
{
|
||
if (!dKoef)
|
||
return "11px Helvetica, Arial, sans-serif";
|
||
var size = (1 + 2 * 11 / dKoef) >> 0;
|
||
if (size & 1)
|
||
return (size >> 1) + ".5px Helvetica, Arial, sans-serif";
|
||
return (size >> 1) + "px Helvetica, Arial, sans-serif";
|
||
};
|
||
|
||
this.measure = function(text, ctx, not_cache)
|
||
{
|
||
if (!this.measures[text])
|
||
this.measures[text] = [0, 0];
|
||
|
||
if (not_cache)
|
||
return ctx.measureText(text).width;
|
||
|
||
var arr = this.measures[text];
|
||
var index = AscCommon.AscBrowser.isRetina ? 1 : 0;
|
||
if (0 != arr[index])
|
||
return arr[index];
|
||
|
||
arr[index] = ctx.measureText(text).width;
|
||
return arr[index];
|
||
};
|
||
|
||
this.getImage = function(type, isActive)
|
||
{
|
||
if (!this.images[type])
|
||
return null;
|
||
|
||
return this.images[type].get(isActive);
|
||
};
|
||
}
|
||
|
||
var g_oContentControlButtonIcons = new CContentControlButtonIcons();
|
||
g_oContentControlButtonIcons.register(1, "toc");
|
||
|
||
function CContentControlTrack(_id, _type, _data, _transform, _name, _name_advanced, _button_types, _color)
|
||
{
|
||
this.id = (undefined == _id) ? -1 : _id;
|
||
this.type = (undefined == _type) ? -1 : _type;
|
||
this.color = _color;
|
||
|
||
this.rects = undefined;
|
||
this.paths = undefined;
|
||
|
||
if (undefined === _data[0].Points)
|
||
this.rects = _data;
|
||
else
|
||
this.paths = _data;
|
||
|
||
this.transform = (undefined == _transform) ? null : _transform;
|
||
|
||
this.X = undefined;
|
||
this.Y = undefined;
|
||
|
||
this.Name = _name ? _name : "";
|
||
this.NameButtonAdvanced = _name_advanced ? true : false;
|
||
this.Buttons = _button_types ? _button_types : [];
|
||
|
||
this.HoverButtonIndex = -2; // -1 => Text, otherwise index in this.Buttons
|
||
this.ActiveButtonIndex = -2; // -1 => Text, otherwise index in this.Buttons
|
||
this.NameWidth = 0;
|
||
}
|
||
CContentControlTrack.prototype.getPage = function()
|
||
{
|
||
if (this.rects)
|
||
return this.rects[0].Page;
|
||
if (this.paths)
|
||
return this.paths[0].Page;
|
||
return 0;
|
||
};
|
||
CContentControlTrack.prototype.getXY = function()
|
||
{
|
||
if (undefined === this.X && undefined === this.Y)
|
||
{
|
||
if (this.rects)
|
||
{
|
||
this.X = this.rects[0].X;
|
||
this.Y = this.rects[0].Y;
|
||
}
|
||
else if (this.paths)
|
||
{
|
||
var _points = this.paths[0].Points;
|
||
this.Y = _points[0].Y;
|
||
|
||
for (var i = 1; i < _points.length; i++)
|
||
{
|
||
if (this.Y > _points[i].Y)
|
||
this.Y = _points[i].Y;
|
||
}
|
||
|
||
this.X = 1000000000;
|
||
for (var i = 0; i < _points.length; i++)
|
||
{
|
||
if (Math.abs(this.Y - _points[i].Y) < 0.0001)
|
||
{
|
||
if (this.X > _points[i].X)
|
||
this.X = _points[i].X;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
return { X : this.X, Y : this.Y };
|
||
};
|
||
CContentControlTrack.prototype.Copy = function()
|
||
{
|
||
return new CContentControlTrack(this.id, this.type, this.rects ? this.rects : this.paths, this.transform, this.color);
|
||
};
|
||
CContentControlTrack.prototype.getColor = function()
|
||
{
|
||
return this.color;
|
||
};
|
||
|
||
function CColumnsMarkupColumn()
|
||
{
|
||
this.W = 0;
|
||
this.Space = 0;
|
||
}
|
||
|
||
function CColumnsMarkup()
|
||
{
|
||
this.CurCol = 0;
|
||
this.X = 0; // левое поле
|
||
this.R = 0; // правое поле
|
||
|
||
this.EqualWidth = true;
|
||
this.Num = 1;
|
||
this.Space = 30;
|
||
this.Cols = [];
|
||
|
||
this.SectPr = null;
|
||
}
|
||
CColumnsMarkup.prototype.Update_FromSectPr = function (SectPr)
|
||
{
|
||
if (!SectPr)
|
||
return;
|
||
|
||
this.SectPr = SectPr;
|
||
|
||
var Columns = SectPr.Columns;
|
||
|
||
this.X = SectPr.Get_PageMargin_Left();
|
||
this.R = SectPr.Get_PageWidth() - SectPr.Get_PageMargin_Right();
|
||
this.EqualWidth = Columns.EqualWidth;
|
||
this.Num = Columns.Num;
|
||
this.Space = Columns.Space;
|
||
|
||
this.Cols = [];
|
||
for (var Index = 0, Count = Columns.Cols.length; Index < Count; ++Index)
|
||
{
|
||
this.Cols[Index] = new CColumnsMarkupColumn();
|
||
this.Cols[Index].W = Columns.Cols[Index].W;
|
||
this.Cols[Index].Space = Columns.Cols[Index].Space;
|
||
}
|
||
};
|
||
CColumnsMarkup.prototype.Set_CurCol = function (CurCol)
|
||
{
|
||
this.CurCol = CurCol;
|
||
};
|
||
CColumnsMarkup.prototype.CreateDuplicate = function ()
|
||
{
|
||
var _ret = new CColumnsMarkup();
|
||
_ret.SectPr = this.SectPr;
|
||
_ret.CurCol = this.CurCol;
|
||
_ret.X = this.X;
|
||
_ret.R = this.R;
|
||
|
||
_ret.EqualWidth = this.EqualWidth;
|
||
_ret.Num = this.Num;
|
||
_ret.Space = this.Space;
|
||
|
||
_ret.Cols = [];
|
||
|
||
for (var i = 0; i < this.Cols.length; i++)
|
||
{
|
||
var _col = new CColumnsMarkupColumn();
|
||
_col.W = this.Cols[i].W;
|
||
_col.Space = this.Cols[i].Space;
|
||
_ret.Cols.push(_col);
|
||
}
|
||
return _ret;
|
||
};
|
||
|
||
function CTableOutlineDr()
|
||
{
|
||
this.image = new Image();
|
||
this.image.src = "../../../../sdkjs/common/Images/table_move.png";
|
||
this.image.onload = function() { this.asc_complete = true; };
|
||
|
||
this.image2 = new Image();
|
||
this.image2.src = "../../../../sdkjs/common/Images/table_move_2x.png";
|
||
this.image2.onload = function() { this.asc_complete = true; };
|
||
|
||
this.TableOutline = null;
|
||
this.Counter = 0;
|
||
this.bIsNoTable = true;
|
||
this.bIsTracked = false;
|
||
|
||
this.CurPos = null;
|
||
this.TrackTablePos = 0; // 0 - left_top, 1 - right_top, 2 - right_bottom, 3 - left_bottom
|
||
this.TrackOffsetX = 0;
|
||
this.TrackOffsetY = 0;
|
||
|
||
this.InlinePos = null;
|
||
|
||
this.IsChangeSmall = true;
|
||
this.ChangeSmallPoint = null;
|
||
|
||
this.TableMatrix = null;
|
||
this.CurrentPageIndex = null;
|
||
|
||
this.IsResizeTableTrack = false;
|
||
this.AddResizeCurrentW = 0;
|
||
this.AddResizeCurrentH = 0;
|
||
this.AddResizeMinW = 0;
|
||
this.AddResizeMinH = 0;
|
||
|
||
this.getLastPageBounds = function()
|
||
{
|
||
var _bounds = { Page: 0, X : 0, Y : 0, W : 0, H : 0 };
|
||
if (!this.TableOutline || !this.TableOutline.Table)
|
||
return _bounds;
|
||
|
||
var _pagesCount = this.TableOutline.Table.GetPagesCount();
|
||
if (0 >= _pagesCount)
|
||
return _bounds;
|
||
|
||
var _boundsTmp = this.TableOutline.Table.Get_PageBounds(_pagesCount - 1);
|
||
_bounds.Page = this.TableOutline.Table.Get_AbsolutePage(_pagesCount - 1);
|
||
_bounds.X = _boundsTmp.Left;
|
||
_bounds.Y = _boundsTmp.Top;
|
||
_bounds.W = (_boundsTmp.Right - _boundsTmp.Left);
|
||
_bounds.H = (_boundsTmp.Bottom - _boundsTmp.Top);
|
||
|
||
return _bounds;
|
||
}
|
||
|
||
this.getFullHeight = function()
|
||
{
|
||
var _height = 0;
|
||
if (!this.TableOutline || !this.TableOutline.Table)
|
||
return _height;
|
||
|
||
var _pagesCount = this.TableOutline.Table.GetPagesCount();
|
||
var _boundsTmp;
|
||
for (var i = 0; i < _pagesCount; i++)
|
||
{
|
||
_boundsTmp = this.TableOutline.Table.Get_PageBounds(i);
|
||
_height += (_boundsTmp.Bottom - _boundsTmp.Top);
|
||
}
|
||
|
||
return _height;
|
||
}
|
||
|
||
this.getFullTopPosition = function(_lastBounds)
|
||
{
|
||
if (_lastBounds.Page == this.TableOutline.PageNum)
|
||
{
|
||
return this.TableOutline.Y;
|
||
}
|
||
|
||
var _height = this.getFullHeight();
|
||
var _top = _lastBounds.Y + _lastBounds.H - _height;
|
||
if (_top < 0)
|
||
_top = 0;
|
||
|
||
return _top;
|
||
}
|
||
|
||
this.checkMouseDown = function (pos, word_control)
|
||
{
|
||
if (null == this.TableOutline)
|
||
return false;
|
||
|
||
var _table_track = this.TableOutline;
|
||
var _d = 13 * g_dKoef_pix_to_mm * 100 / word_control.m_nZoomValue;
|
||
|
||
this.IsChangeSmall = true;
|
||
this.ChangeSmallPoint = pos;
|
||
|
||
this.CurPos = {X: this.ChangeSmallPoint.X, Y: this.ChangeSmallPoint.Y, Page: this.ChangeSmallPoint.Page};
|
||
this.TrackOffsetX = 0;
|
||
this.TrackOffsetY = 0;
|
||
|
||
if (!this.TableMatrix || global_MatrixTransformer.IsIdentity(this.TableMatrix))
|
||
{
|
||
if (word_control.MobileTouchManager)
|
||
{
|
||
var _move_point = word_control.MobileTouchManager.TableMovePoint;
|
||
|
||
if (_move_point == null || pos.Page != _table_track.PageNum)
|
||
return false;
|
||
|
||
var _pos1 = word_control.m_oDrawingDocument.ConvertCoordsToCursorWR(pos.X, pos.Y, pos.Page);
|
||
var _pos2 = word_control.m_oDrawingDocument.ConvertCoordsToCursorWR(_move_point.X, _move_point.Y, pos.Page);
|
||
|
||
var _eps = word_control.MobileTouchManager.TrackTargetEps;
|
||
|
||
var _offset1 = word_control.MobileTouchManager.TableRulersRectOffset;
|
||
var _offset2 = _offset1 + word_control.MobileTouchManager.TableRulersRectSize;
|
||
if ((_pos1.X >= (_pos2.X - _offset2 - _eps)) && (_pos1.X <= (_pos2.X - _offset1 + _eps)) &&
|
||
(_pos1.Y >= (_pos2.Y - _offset2 - _eps)) && (_pos1.Y <= (_pos2.Y - _offset1 + _eps)))
|
||
{
|
||
this.TrackTablePos = 0;
|
||
return true;
|
||
}
|
||
|
||
return false;
|
||
}
|
||
|
||
switch (this.TrackTablePos)
|
||
{
|
||
case 1:
|
||
{
|
||
var _x = _table_track.X + _table_track.W;
|
||
var _b = _table_track.Y;
|
||
var _y = _b - _d;
|
||
var _r = _x + _d;
|
||
|
||
if ((pos.X > _x) && (pos.X < _r) && (pos.Y > _y) && (pos.Y < _b))
|
||
{
|
||
this.TrackOffsetX = pos.X - _x;
|
||
this.TrackOffsetY = pos.Y - _b;
|
||
|
||
this.CurPos.X -= this.TrackOffsetX;
|
||
this.CurPos.Y -= this.TrackOffsetY;
|
||
return true;
|
||
}
|
||
break;
|
||
}
|
||
case 2:
|
||
{
|
||
var _x = _table_track.X + _table_track.W;
|
||
var _y = _table_track.Y + _table_track.H;
|
||
var _r = _x + _d;
|
||
var _b = _y + _d;
|
||
|
||
if ((pos.X > _x) && (pos.X < _r) && (pos.Y > _y) && (pos.Y < _b))
|
||
{
|
||
this.TrackOffsetX = pos.X - _x;
|
||
this.TrackOffsetY = pos.Y - _y;
|
||
return true;
|
||
}
|
||
break;
|
||
}
|
||
case 3:
|
||
{
|
||
var _r = _table_track.X;
|
||
var _x = _r - _d;
|
||
var _y = _table_track.Y + _table_track.H;
|
||
var _b = _y + _d;
|
||
|
||
if ((pos.X > _x) && (pos.X < _r) && (pos.Y > _y) && (pos.Y < _b))
|
||
{
|
||
this.TrackOffsetX = pos.X - _r;
|
||
this.TrackOffsetY = pos.Y - _y;
|
||
|
||
this.CurPos.X -= this.TrackOffsetX;
|
||
this.CurPos.Y -= this.TrackOffsetY;
|
||
return true;
|
||
}
|
||
break;
|
||
}
|
||
case 0:
|
||
default:
|
||
{
|
||
var _r = _table_track.X;
|
||
var _b = _table_track.Y;
|
||
var _x = _r - _d;
|
||
var _y = _b - _d;
|
||
|
||
if ((pos.X > _x) && (pos.X < _r) && (pos.Y > _y) && (pos.Y < _b))
|
||
{
|
||
this.TrackOffsetX = pos.X - _r;
|
||
this.TrackOffsetY = pos.Y - _b;
|
||
|
||
this.CurPos.X -= this.TrackOffsetX;
|
||
this.CurPos.Y -= this.TrackOffsetY;
|
||
return true;
|
||
}
|
||
break;
|
||
}
|
||
}
|
||
|
||
if (true)
|
||
{
|
||
var _lastBounds = this.getLastPageBounds();
|
||
var _x = _lastBounds.X + _lastBounds.W;
|
||
var _y = _lastBounds.Y + _lastBounds.H;
|
||
_d = 6 * g_dKoef_pix_to_mm * 100 / word_control.m_nZoomValue;
|
||
|
||
var _r = _x + _d;
|
||
var _b = _y + _d;
|
||
|
||
if ((_lastBounds.Page == pos.Page) && (pos.X > _x) && (pos.X < _r) && (pos.Y > _y) && (pos.Y < _b))
|
||
{
|
||
this.TrackOffsetX = pos.X - _x;
|
||
this.TrackOffsetY = pos.Y - _y;
|
||
|
||
this.CurPos.X = global_mouseEvent.X;
|
||
this.CurPos.Y = global_mouseEvent.Y;
|
||
|
||
this.AddResizeCurrentW = 0;
|
||
this.AddResizeCurrentH = 0;
|
||
this.IsResizeTableTrack = true;
|
||
|
||
var _table = this.TableOutline.Table;
|
||
|
||
if (_lastBounds.Page == this.PageNum)
|
||
{
|
||
this.AddResizeMinH = _table.GetMinHeight() - this.TableOutline.H;
|
||
this.AddResizeMinW = _table.GetMinWidth() - this.TableOutline.W;
|
||
}
|
||
else
|
||
{
|
||
var _fullTop = this.getFullTopPosition(_lastBounds);
|
||
if (0 == _fullTop)
|
||
this.AddResizeMinH = _fullTop - (_lastBounds.Y + _lastBounds.H);
|
||
else
|
||
this.AddResizeMinH = _fullTop + _table.GetMinHeight() - (_lastBounds.Y + _lastBounds.H);
|
||
this.AddResizeMinW = _table.GetMinWidth() - _lastBounds.W;
|
||
}
|
||
|
||
word_control.m_oDrawingDocument.LockCursorType("se-resize");
|
||
return true;
|
||
}
|
||
}
|
||
|
||
return false;
|
||
}
|
||
else
|
||
{
|
||
if (word_control.MobileTouchManager)
|
||
{
|
||
var _invert = global_MatrixTransformer.Invert(this.TableMatrix);
|
||
var _posx = _invert.TransformPointX(pos.X, pos.Y);
|
||
var _posy = _invert.TransformPointY(pos.X, pos.Y);
|
||
|
||
var _move_point = word_control.MobileTouchManager.TableMovePoint;
|
||
|
||
if (_move_point == null || pos.Page != _table_track.PageNum)
|
||
return false;
|
||
|
||
var _koef = g_dKoef_pix_to_mm * 100 / word_control.m_nZoomValue;
|
||
var _eps = word_control.MobileTouchManager.TrackTargetEps * _koef;
|
||
|
||
var _offset1 = word_control.MobileTouchManager.TableRulersRectOffset * _koef;
|
||
var _offset2 = _offset1 + word_control.MobileTouchManager.TableRulersRectSize * _koef;
|
||
if ((_posx >= (_move_point.X - _offset2 - _eps)) && (_posx <= (_move_point.X - _offset1 + _eps)) &&
|
||
(_posy >= (_move_point.Y - _offset2 - _eps)) && (_posy <= (_move_point.Y - _offset1 + _eps)))
|
||
{
|
||
this.TrackTablePos = 0;
|
||
return true;
|
||
}
|
||
|
||
return false;
|
||
}
|
||
|
||
var _invert = global_MatrixTransformer.Invert(this.TableMatrix);
|
||
var _posx = _invert.TransformPointX(pos.X, pos.Y);
|
||
var _posy = _invert.TransformPointY(pos.X, pos.Y);
|
||
switch (this.TrackTablePos)
|
||
{
|
||
case 1:
|
||
{
|
||
var _x = _table_track.X + _table_track.W;
|
||
var _b = _table_track.Y;
|
||
var _y = _b - _d;
|
||
var _r = _x + _d;
|
||
|
||
if ((_posx > _x) && (_posx < _r) && (_posy > _y) && (_posy < _b))
|
||
{
|
||
this.TrackOffsetX = _posx - _x;
|
||
this.TrackOffsetY = _posy - _b;
|
||
|
||
this.CurPos.X -= this.TrackOffsetX;
|
||
this.CurPos.Y -= this.TrackOffsetY;
|
||
return true;
|
||
}
|
||
break;
|
||
}
|
||
case 2:
|
||
{
|
||
var _x = _table_track.X + _table_track.W;
|
||
var _y = _table_track.Y + _table_track.H;
|
||
var _r = _x + _d;
|
||
var _b = _y + _d;
|
||
|
||
if ((_posx > _x) && (_posx < _r) && (_posy > _y) && (_posy < _b))
|
||
{
|
||
this.TrackOffsetX = _posx - _x;
|
||
this.TrackOffsetY = _posy - _y;
|
||
|
||
this.CurPos.X -= this.TrackOffsetX;
|
||
this.CurPos.Y -= this.TrackOffsetY;
|
||
return true;
|
||
}
|
||
break;
|
||
}
|
||
case 3:
|
||
{
|
||
var _r = _table_track.X;
|
||
var _x = _r - _d;
|
||
var _y = _table_track.Y + _table_track.H;
|
||
var _b = _y + _d;
|
||
|
||
if ((_posx > _x) && (_posx < _r) && (_posy > _y) && (_posy < _b))
|
||
{
|
||
this.TrackOffsetX = _posx - _r;
|
||
this.TrackOffsetY = _posy - _y;
|
||
|
||
this.CurPos.X -= this.TrackOffsetX;
|
||
this.CurPos.Y -= this.TrackOffsetY;
|
||
return true;
|
||
}
|
||
break;
|
||
}
|
||
case 0:
|
||
default:
|
||
{
|
||
var _r = _table_track.X;
|
||
var _b = _table_track.Y;
|
||
var _x = _r - _d;
|
||
var _y = _b - _d;
|
||
|
||
if ((_posx > _x) && (_posx < _r) && (_posy > _y) && (_posy < _b))
|
||
{
|
||
this.TrackOffsetX = _posx - _r;
|
||
this.TrackOffsetY = _posy - _b;
|
||
|
||
this.CurPos.X -= this.TrackOffsetX;
|
||
this.CurPos.Y -= this.TrackOffsetY;
|
||
return true;
|
||
}
|
||
break;
|
||
}
|
||
}
|
||
|
||
if (true)
|
||
{
|
||
var _lastBounds = this.getLastPageBounds();
|
||
var _x = _lastBounds.X + _lastBounds.W;
|
||
var _y = _lastBounds.Y + _lastBounds.H;
|
||
_d = 6 * g_dKoef_pix_to_mm * 100 / word_control.m_nZoomValue;
|
||
|
||
var _r = _x + _d;
|
||
var _b = _y + _d;
|
||
|
||
if ((_posx > _x) && (_posx < _r) && (_posy > _y) && (_posy < _b))
|
||
{
|
||
this.TrackOffsetX = _posx - _x;
|
||
this.TrackOffsetY = _posy - _b;
|
||
|
||
this.CurPos.X = global_mouseEvent.X;
|
||
this.CurPos.Y = global_mouseEvent.Y;
|
||
|
||
this.AddResizeCurrentW = 0;
|
||
this.AddResizeCurrentH = 0;
|
||
this.IsResizeTableTrack = true;
|
||
|
||
word_control.m_oDrawingDocument.LockCursorType("se-resize");
|
||
return true;
|
||
}
|
||
}
|
||
|
||
return false;
|
||
}
|
||
|
||
return false;
|
||
}
|
||
|
||
this.checkMouseMoveTrack = function (pos, word_control)
|
||
{
|
||
if (null == this.TableOutline)
|
||
return false;
|
||
|
||
var _table_track = this.TableOutline;
|
||
var _d = 13 * g_dKoef_pix_to_mm * 100 / word_control.m_nZoomValue;
|
||
|
||
var _x, _y, _r, _b;
|
||
if (!this.TableMatrix || global_MatrixTransformer.IsIdentity(this.TableMatrix))
|
||
{
|
||
switch (this.TrackTablePos)
|
||
{
|
||
case 1:
|
||
{
|
||
_x = _table_track.X + _table_track.W;
|
||
_b = _table_track.Y;
|
||
_y = _b - _d;
|
||
_r = _x + _d;
|
||
|
||
if ((pos.X > _x) && (pos.X < _r) && (pos.Y > _y) && (pos.Y < _b))
|
||
return true;
|
||
break;
|
||
}
|
||
case 2:
|
||
{
|
||
_x = _table_track.X + _table_track.W;
|
||
_y = _table_track.Y + _table_track.H;
|
||
_r = _x + _d;
|
||
_b = _y + _d;
|
||
|
||
if ((pos.X > _x) && (pos.X < _r) && (pos.Y > _y) && (pos.Y < _b))
|
||
return true;
|
||
break;
|
||
}
|
||
case 3:
|
||
{
|
||
_r = _table_track.X;
|
||
_x = _r - _d;
|
||
_y = _table_track.Y + _table_track.H;
|
||
_b = _y + _d;
|
||
|
||
if ((pos.X > _x) && (pos.X < _r) && (pos.Y > _y) && (pos.Y < _b))
|
||
return true;
|
||
break;
|
||
}
|
||
case 0:
|
||
default:
|
||
{
|
||
_r = _table_track.X;
|
||
_b = _table_track.Y;
|
||
_x = _r - _d;
|
||
_y = _b - _d;
|
||
|
||
if ((pos.X > _x) && (pos.X < _r) && (pos.Y > _y) && (pos.Y < _b))
|
||
return true;
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
else
|
||
{
|
||
var _invert = global_MatrixTransformer.Invert(this.TableMatrix);
|
||
var _posx = _invert.TransformPointX(pos.X, pos.Y);
|
||
var _posy = _invert.TransformPointY(pos.X, pos.Y);
|
||
switch (this.TrackTablePos)
|
||
{
|
||
case 1:
|
||
{
|
||
_x = _table_track.X + _table_track.W;
|
||
_b = _table_track.Y;
|
||
_y = _b - _d;
|
||
_r = _x + _d;
|
||
|
||
if ((_posx > _x) && (_posx < _r) && (_posy > _y) && (_posy < _b))
|
||
return true;
|
||
break;
|
||
}
|
||
case 2:
|
||
{
|
||
_x = _table_track.X + _table_track.W;
|
||
_y = _table_track.Y + _table_track.H;
|
||
_r = _x + _d;
|
||
_b = _y + _d;
|
||
|
||
if ((_posx > _x) && (_posx < _r) && (_posy > _y) && (_posy < _b))
|
||
return true;
|
||
break;
|
||
}
|
||
case 3:
|
||
{
|
||
_r = _table_track.X;
|
||
_x = _r - _d;
|
||
_y = _table_track.Y + _table_track.H;
|
||
_b = _y + _d;
|
||
|
||
if ((_posx > _x) && (_posx < _r) && (_posy > _y) && (_posy < _b))
|
||
return true;
|
||
break;
|
||
}
|
||
case 0:
|
||
default:
|
||
{
|
||
_r = _table_track.X;
|
||
_b = _table_track.Y;
|
||
_x = _r - _d;
|
||
_y = _b - _d;
|
||
|
||
if ((_posx > _x) && (_posx < _r) && (_posy > _y) && (_posy < _b))
|
||
return true;
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
|
||
return false;
|
||
}
|
||
|
||
this.checkMouseUp = function (X, Y, word_control)
|
||
{
|
||
this.bIsTracked = false;
|
||
|
||
if (null == this.TableOutline || (true === this.IsChangeSmall) || word_control.m_oApi.isViewMode)
|
||
return false;
|
||
|
||
var _koef = g_dKoef_pix_to_mm * 100 / word_control.m_nZoomValue;
|
||
var _d = 13 * _koef;
|
||
|
||
var _outline = this.TableOutline;
|
||
var _table = _outline.Table;
|
||
|
||
_table.MoveCursorToStartPos();
|
||
_table.Document_SetThisElementCurrent(true);
|
||
|
||
if (this.IsResizeTableTrack)
|
||
{
|
||
var _addW = (X - this.CurPos.X) * _koef - this.TrackOffsetX;
|
||
var _addH = (Y - this.CurPos.Y) * _koef - this.TrackOffsetY;
|
||
|
||
_table.ResizeTableInDocument(this.TableOutline.W + _addW, this.TableOutline.H + _addH);
|
||
|
||
this.AddResizeCurrentW = 0;
|
||
this.AddResizeCurrentH = 0;
|
||
this.IsResizeTableTrack = false;
|
||
word_control.m_oDrawingDocument.UnlockCursorType();
|
||
word_control.m_oDrawingDocument.SetCursorType("default");
|
||
return;
|
||
}
|
||
|
||
if (!_table.Is_Inline())
|
||
{
|
||
var pos;
|
||
switch (this.TrackTablePos)
|
||
{
|
||
case 1:
|
||
{
|
||
var _w_pix = this.TableOutline.W * g_dKoef_mm_to_pix * word_control.m_nZoomValue / 100;
|
||
pos = word_control.m_oDrawingDocument.ConvertCoordsFromCursor2(X - _w_pix, Y);
|
||
break;
|
||
}
|
||
case 2:
|
||
{
|
||
var _w_pix = this.TableOutline.W * g_dKoef_mm_to_pix * word_control.m_nZoomValue / 100;
|
||
var _h_pix = this.TableOutline.H * g_dKoef_mm_to_pix * word_control.m_nZoomValue / 100;
|
||
pos = word_control.m_oDrawingDocument.ConvertCoordsFromCursor2(X - _w_pix, Y - _h_pix);
|
||
break;
|
||
}
|
||
case 3:
|
||
{
|
||
var _h_pix = this.TableOutline.H * g_dKoef_mm_to_pix * word_control.m_nZoomValue / 100;
|
||
pos = word_control.m_oDrawingDocument.ConvertCoordsFromCursor2(X, Y - _h_pix);
|
||
break;
|
||
}
|
||
case 0:
|
||
default:
|
||
{
|
||
pos = word_control.m_oDrawingDocument.ConvertCoordsFromCursor2(X, Y);
|
||
break;
|
||
}
|
||
}
|
||
|
||
var NearestPos = word_control.m_oLogicDocument.Get_NearestPos(pos.Page, pos.X - this.TrackOffsetX, pos.Y - this.TrackOffsetY);
|
||
_table.Move(pos.X - this.TrackOffsetX, pos.Y - this.TrackOffsetY, pos.Page, NearestPos);
|
||
_outline.X = pos.X - this.TrackOffsetX;
|
||
_outline.Y = pos.Y - this.TrackOffsetY;
|
||
_outline.PageNum = pos.Page;
|
||
}
|
||
else
|
||
{
|
||
if (null != this.InlinePos)
|
||
{
|
||
// inline move
|
||
_table.Move(this.InlinePos.X, this.InlinePos.Y, this.InlinePos.Page, this.InlinePos);
|
||
}
|
||
}
|
||
}
|
||
|
||
this.checkMouseMove = function (X, Y, word_control)
|
||
{
|
||
if (null == this.TableOutline)
|
||
return false;
|
||
|
||
if (true === this.IsChangeSmall)
|
||
{
|
||
var _pos = word_control.m_oDrawingDocument.ConvertCoordsFromCursor2(X, Y);
|
||
var _dist = 15 * g_dKoef_pix_to_mm * 100 / word_control.m_nZoomValue;
|
||
if ((Math.abs(_pos.X - this.ChangeSmallPoint.X) < _dist) && (Math.abs(_pos.Y - this.ChangeSmallPoint.Y) < _dist) && (_pos.Page == this.ChangeSmallPoint.Page))
|
||
{
|
||
if (this.IsResizeTableTrack)
|
||
return;
|
||
|
||
this.CurPos = {
|
||
X: this.ChangeSmallPoint.X,
|
||
Y: this.ChangeSmallPoint.Y,
|
||
Page: this.ChangeSmallPoint.Page
|
||
};
|
||
|
||
switch (this.TrackTablePos)
|
||
{
|
||
case 1:
|
||
{
|
||
this.CurPos.X -= this.TableOutline.W;
|
||
break;
|
||
}
|
||
case 2:
|
||
{
|
||
this.CurPos.X -= this.TableOutline.W;
|
||
this.CurPos.Y -= this.TableOutline.H;
|
||
break;
|
||
}
|
||
case 3:
|
||
{
|
||
this.CurPos.Y -= this.TableOutline.H;
|
||
break;
|
||
}
|
||
case 0:
|
||
default:
|
||
{
|
||
break;
|
||
}
|
||
}
|
||
|
||
this.CurPos.X -= this.TrackOffsetX;
|
||
this.CurPos.Y -= this.TrackOffsetY;
|
||
return;
|
||
}
|
||
this.IsChangeSmall = false;
|
||
|
||
this.TableOutline.Table.RemoveSelection();
|
||
this.TableOutline.Table.MoveCursorToStartPos();
|
||
word_control.m_oLogicDocument.Document_UpdateSelectionState();
|
||
}
|
||
|
||
if (this.IsResizeTableTrack)
|
||
{
|
||
var _koef = g_dKoef_pix_to_mm * 100 / word_control.m_nZoomValue;
|
||
this.AddResizeCurrentW = Math.max(this.AddResizeMinW, (X - this.CurPos.X) * _koef - this.TrackOffsetX);
|
||
this.AddResizeCurrentH = Math.max(this.AddResizeMinH, (Y - this.CurPos.Y) * _koef - this.TrackOffsetY);
|
||
|
||
return true;
|
||
}
|
||
|
||
var _d = 13 * g_dKoef_pix_to_mm * 100 / word_control.m_nZoomValue;
|
||
switch (this.TrackTablePos)
|
||
{
|
||
case 1:
|
||
{
|
||
var _w_pix = this.TableOutline.W * g_dKoef_mm_to_pix * word_control.m_nZoomValue / 100;
|
||
this.CurPos = word_control.m_oDrawingDocument.ConvertCoordsFromCursor2(X - _w_pix, Y);
|
||
break;
|
||
}
|
||
case 2:
|
||
{
|
||
var _w_pix = this.TableOutline.W * g_dKoef_mm_to_pix * word_control.m_nZoomValue / 100;
|
||
var _h_pix = this.TableOutline.H * g_dKoef_mm_to_pix * word_control.m_nZoomValue / 100;
|
||
this.CurPos = word_control.m_oDrawingDocument.ConvertCoordsFromCursor2(X - _w_pix, Y - _h_pix);
|
||
break;
|
||
}
|
||
case 3:
|
||
{
|
||
var _h_pix = this.TableOutline.H * g_dKoef_mm_to_pix * word_control.m_nZoomValue / 100;
|
||
this.CurPos = word_control.m_oDrawingDocument.ConvertCoordsFromCursor2(X, Y - _h_pix);
|
||
break;
|
||
}
|
||
case 0:
|
||
default:
|
||
{
|
||
this.CurPos = word_control.m_oDrawingDocument.ConvertCoordsFromCursor2(X, Y);
|
||
break;
|
||
}
|
||
}
|
||
|
||
this.CurPos.X -= this.TrackOffsetX;
|
||
this.CurPos.Y -= this.TrackOffsetY;
|
||
}
|
||
|
||
this.checkMouseMove2 = function (X, Y, word_control)
|
||
{
|
||
if (null == this.TableOutline)
|
||
return;
|
||
|
||
if (word_control.MobileTouchManager)
|
||
return;
|
||
|
||
var _table_track = this.TableOutline;
|
||
|
||
var pos = null;
|
||
if (word_control.m_oDrawingDocument.AutoShapesTrackLockPageNum == -1)
|
||
pos = word_control.m_oDrawingDocument.ConvertCoordsFromCursor2(global_mouseEvent.X, global_mouseEvent.Y);
|
||
else
|
||
pos = word_control.m_oDrawingDocument.ConvetToPageCoords(global_mouseEvent.X, global_mouseEvent.Y, word_control.m_oDrawingDocument.AutoShapesTrackLockPageNum);
|
||
|
||
var _lastBounds = word_control.m_oDrawingDocument.TableOutlineDr.getLastPageBounds();
|
||
if (_lastBounds.Page != pos.Page)
|
||
return false;
|
||
|
||
if (!this.TableMatrix || global_MatrixTransformer.IsIdentity(this.TableMatrix))
|
||
{
|
||
var _x = _lastBounds.X + _lastBounds.W;
|
||
var _y = _lastBounds.Y + _lastBounds.H;
|
||
var _d = 6 * g_dKoef_pix_to_mm * 100 / word_control.m_nZoomValue;
|
||
|
||
var _r = _x + _d;
|
||
var _b = _y + _d;
|
||
|
||
if ((pos.X > _x) && (pos.X < _r) && (pos.Y > _y) && (pos.Y < _b))
|
||
{
|
||
word_control.m_oDrawingDocument.SetCursorType("se-resize");
|
||
return true;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
var _invert = global_MatrixTransformer.Invert(this.TableMatrix);
|
||
var _posx = _invert.TransformPointX(pos.X, pos.Y);
|
||
var _posy = _invert.TransformPointY(pos.X, pos.Y);
|
||
|
||
var _x = _lastBounds.X + _lastBounds.W;
|
||
var _y = _lastBounds.Y + _lastBounds.H;
|
||
_d = 6 * g_dKoef_pix_to_mm * 100 / word_control.m_nZoomValue;
|
||
|
||
var _r = _x + _d;
|
||
var _b = _y + _d;
|
||
|
||
if ((_posx > _x) && (_posx < _r) && (_posy > _y) && (_posy < _b))
|
||
{
|
||
word_control.m_oDrawingDocument.SetCursorType("se-resize");
|
||
return true;
|
||
}
|
||
}
|
||
return false;
|
||
}
|
||
|
||
this.CheckStartTrack = function (word_control, transform)
|
||
{
|
||
this.TableMatrix = null;
|
||
if (transform)
|
||
this.TableMatrix = transform.CreateDublicate();
|
||
|
||
if (!this.TableMatrix || global_MatrixTransformer.IsIdentity(this.TableMatrix))
|
||
{
|
||
var pos = word_control.m_oDrawingDocument.ConvertCoordsToCursor(this.TableOutline.X, this.TableOutline.Y, this.TableOutline.PageNum, true);
|
||
|
||
var _x0 = word_control.m_oEditor.AbsolutePosition.L;
|
||
var _y0 = word_control.m_oEditor.AbsolutePosition.T;
|
||
|
||
if (pos.X < _x0 && pos.Y < _y0)
|
||
{
|
||
this.TrackTablePos = 2;
|
||
}
|
||
else if (pos.X < _x0)
|
||
{
|
||
this.TrackTablePos = 1;
|
||
}
|
||
else if (pos.Y < _y0)
|
||
{
|
||
this.TrackTablePos = 3;
|
||
}
|
||
else
|
||
{
|
||
this.TrackTablePos = 0;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
var _x = this.TableOutline.X;
|
||
var _y = this.TableOutline.Y;
|
||
var _r = _x + this.TableOutline.W;
|
||
var _b = _y + this.TableOutline.H;
|
||
|
||
var x0 = transform.TransformPointX(_x, _y);
|
||
var y0 = transform.TransformPointY(_x, _y);
|
||
|
||
var x1 = transform.TransformPointX(_r, _y);
|
||
var y1 = transform.TransformPointY(_r, _y);
|
||
|
||
var x2 = transform.TransformPointX(_r, _b);
|
||
var y2 = transform.TransformPointY(_r, _b);
|
||
|
||
var x3 = transform.TransformPointX(_x, _b);
|
||
var y3 = transform.TransformPointY(_x, _b);
|
||
|
||
var _x0 = word_control.m_oEditor.AbsolutePosition.L * g_dKoef_mm_to_pix;
|
||
var _y0 = word_control.m_oEditor.AbsolutePosition.T * g_dKoef_mm_to_pix;
|
||
var _x1 = word_control.m_oEditor.AbsolutePosition.R * g_dKoef_mm_to_pix;
|
||
var _y1 = word_control.m_oEditor.AbsolutePosition.B * g_dKoef_mm_to_pix;
|
||
|
||
var pos0 = word_control.m_oDrawingDocument.ConvertCoordsToCursor(x0, y0, this.TableOutline.PageNum, true);
|
||
if (pos0.X > _x0 && pos0.X < _x1 && pos0.Y > _y0 && pos0.Y < _y1)
|
||
{
|
||
this.TrackTablePos = 0;
|
||
return;
|
||
}
|
||
|
||
pos0 = word_control.m_oDrawingDocument.ConvertCoordsToCursor(x1, y1, this.TableOutline.PageNum, true);
|
||
if (pos0.X > _x0 && pos0.X < _x1 && pos0.Y > _y0 && pos0.Y < _y1)
|
||
{
|
||
this.TrackTablePos = 1;
|
||
return;
|
||
}
|
||
|
||
pos0 = word_control.m_oDrawingDocument.ConvertCoordsToCursor(x3, y3, this.TableOutline.PageNum, true);
|
||
if (pos0.X > _x0 && pos0.X < _x1 && pos0.Y > _y0 && pos0.Y < _y1)
|
||
{
|
||
this.TrackTablePos = 3;
|
||
return;
|
||
}
|
||
|
||
pos0 = word_control.m_oDrawingDocument.ConvertCoordsToCursor(x2, y2, this.TableOutline.PageNum, true);
|
||
if (pos0.X > _x0 && pos0.X < _x1 && pos0.Y > _y0 && pos0.Y < _y1)
|
||
{
|
||
this.TrackTablePos = 2;
|
||
return;
|
||
}
|
||
|
||
this.TrackTablePos = 0;
|
||
}
|
||
}
|
||
}
|
||
|
||
function CCacheImage()
|
||
{
|
||
this.image = null;
|
||
this.image_locked = 0;
|
||
this.image_unusedCount = 0;
|
||
}
|
||
|
||
function CCacheManager()
|
||
{
|
||
this.arrayImages = [];
|
||
this.arrayCount = 0;
|
||
this.countValidImage = 1;
|
||
|
||
this.CheckImagesForNeed = function ()
|
||
{
|
||
for (var i = 0; i < this.arrayCount; ++i)
|
||
{
|
||
if ((this.arrayImages[i].image_locked == 0) && (this.arrayImages[i].image_unusedCount >= this.countValidImage))
|
||
{
|
||
delete this.arrayImages[i].image;
|
||
this.arrayImages.splice(i, 1);
|
||
--i;
|
||
--this.arrayCount;
|
||
}
|
||
}
|
||
}
|
||
|
||
this.UnLock = function (_cache_image)
|
||
{
|
||
if (null == _cache_image)
|
||
return;
|
||
|
||
_cache_image.image_locked = 0;
|
||
_cache_image.image_unusedCount = 0;
|
||
// затем нужно сбросить ссылку в ноль (_cache_image = null) <- это обязательно !!!!!!!
|
||
}
|
||
|
||
this.Lock = function (_w, _h)
|
||
{
|
||
for (var i = 0; i < this.arrayCount; ++i)
|
||
{
|
||
if (this.arrayImages[i].image_locked)
|
||
continue;
|
||
var _wI = this.arrayImages[i].image.width;
|
||
var _hI = this.arrayImages[i].image.height;
|
||
if ((_wI == _w) && (_hI == _h))
|
||
{
|
||
this.arrayImages[i].image_locked = 1;
|
||
this.arrayImages[i].image_unusedCount = 0;
|
||
|
||
this.arrayImages[i].image.ctx.globalAlpha = 1.0;
|
||
this.arrayImages[i].image.ctx.setTransform(1, 0, 0, 1, 0, 0);
|
||
this.arrayImages[i].image.ctx.fillStyle = "#ffffff";
|
||
this.arrayImages[i].image.ctx.fillRect(0, 0, _w, _h);
|
||
return this.arrayImages[i];
|
||
}
|
||
this.arrayImages[i].image_unusedCount++;
|
||
}
|
||
this.CheckImagesForNeed();
|
||
var index = this.arrayCount;
|
||
this.arrayCount++;
|
||
|
||
this.arrayImages[index] = new CCacheImage();
|
||
this.arrayImages[index].image = document.createElement('canvas');
|
||
this.arrayImages[index].image.width = _w;
|
||
this.arrayImages[index].image.height = _h;
|
||
this.arrayImages[index].image.ctx = this.arrayImages[index].image.getContext('2d');
|
||
this.arrayImages[index].image.ctx.globalAlpha = 1.0;
|
||
this.arrayImages[index].image.ctx.setTransform(1, 0, 0, 1, 0, 0);
|
||
this.arrayImages[index].image.ctx.fillStyle = "#ffffff";
|
||
this.arrayImages[index].image.ctx.fillRect(0, 0, _w, _h);
|
||
this.arrayImages[index].image_locked = 1;
|
||
this.arrayImages[index].image_unusedCount = 0;
|
||
return this.arrayImages[index];
|
||
}
|
||
}
|
||
|
||
function CPolygonPoint(X, Y)
|
||
{
|
||
this.X = X;
|
||
this.Y = Y;
|
||
}
|
||
function CPolygonVectors()
|
||
{
|
||
this.Page = -1;
|
||
this.VX = [];
|
||
this.VY = [];
|
||
}
|
||
function CPolygonPath(precision)
|
||
{
|
||
this.Page = -1;
|
||
this.Direction = 1;
|
||
this.precision = precision;
|
||
this.Points = [];
|
||
}
|
||
CPolygonPath.prototype.PushPoint = function (x, y)
|
||
{
|
||
this.Points.push(new CPolygonPoint(x / this.precision, y / this.precision));
|
||
};
|
||
CPolygonPath.prototype.CorrectExtremePoints = function ()
|
||
{
|
||
var Lng = this.Points.length;
|
||
|
||
this.Points[0].X = this.Points[Lng - 1].X;
|
||
this.Points[Lng - 1].Y = this.Points[0].Y;
|
||
};
|
||
|
||
function CPolygon()
|
||
{
|
||
this.Vectors = [];
|
||
this.precision = 1000;
|
||
}
|
||
CPolygon.prototype.fill = function (arrBounds)
|
||
{
|
||
this.Vectors.length = 0;
|
||
|
||
if (arrBounds.length <= 0)
|
||
return;
|
||
|
||
var nStartLineIndex = 0, nStartIndex = 0,
|
||
CountLines = arrBounds.length,
|
||
CountBounds;
|
||
|
||
while (nStartLineIndex < arrBounds.length)
|
||
{
|
||
CountBounds = arrBounds[nStartLineIndex].length;
|
||
|
||
while (nStartIndex < CountBounds)
|
||
{
|
||
if (arrBounds[nStartLineIndex][nStartIndex].W < 0.001)
|
||
nStartIndex++;
|
||
else
|
||
break;
|
||
}
|
||
|
||
if (nStartIndex < CountBounds)
|
||
break;
|
||
|
||
nStartLineIndex++;
|
||
nStartIndex = 0;
|
||
}
|
||
|
||
if (nStartLineIndex >= arrBounds.length)
|
||
return;
|
||
|
||
var CurrentPage = arrBounds[nStartLineIndex][nStartIndex].Page,
|
||
CurrentVectors = new CPolygonVectors(),
|
||
VectorsX = CurrentVectors.VX,
|
||
VectorsY = CurrentVectors.VY;
|
||
|
||
CurrentVectors.Page = CurrentPage;
|
||
this.Vectors.push(CurrentVectors);
|
||
|
||
for (var LineIndex = nStartLineIndex; LineIndex < CountLines; nStartIndex = 0, LineIndex++)
|
||
{
|
||
if (arrBounds[LineIndex][nStartIndex].Page !== CurrentPage)
|
||
{
|
||
CurrentPage = arrBounds[LineIndex][nStartIndex].Page;
|
||
|
||
CurrentVectors = new CPolygonVectors();
|
||
VectorsX = CurrentVectors.VX;
|
||
VectorsY = CurrentVectors.VY;
|
||
CurrentVectors.Page = CurrentPage;
|
||
this.Vectors.push(CurrentVectors);
|
||
|
||
}
|
||
|
||
for (var Index = nStartIndex; Index < arrBounds[LineIndex].length; Index++)
|
||
{
|
||
var oBound = arrBounds[LineIndex][Index];
|
||
|
||
if (oBound.W < 0.001)
|
||
continue;
|
||
|
||
var x1 = Math.round(oBound.X * this.precision), x2 = Math.round((oBound.X + oBound.W) * this.precision),
|
||
y1 = Math.round(oBound.Y * this.precision), y2 = Math.round((oBound.Y + oBound.H) * this.precision);
|
||
|
||
if (VectorsX[y1] == undefined)
|
||
{
|
||
VectorsX[y1] = {};
|
||
}
|
||
|
||
this.IntersectionX(VectorsX, x2, x1, y1);
|
||
|
||
if (VectorsY[x1] == undefined)
|
||
{
|
||
VectorsY[x1] = {};
|
||
}
|
||
|
||
this.IntersectionY(VectorsY, y1, y2, x1);
|
||
|
||
if (VectorsX[y2] == undefined)
|
||
{
|
||
VectorsX[y2] = {};
|
||
}
|
||
|
||
this.IntersectionX(VectorsX, x1, x2, y2);
|
||
|
||
if (VectorsY[x2] == undefined)
|
||
{
|
||
VectorsY[x2] = {};
|
||
}
|
||
|
||
this.IntersectionY(VectorsY, y2, y1, x2);
|
||
}
|
||
}
|
||
};
|
||
CPolygon.prototype.IntersectionX = function (VectorsX, BeginX, EndX, Y)
|
||
{
|
||
var CurrentVector = {};
|
||
CurrentVector[BeginX] = EndX;
|
||
var VX = VectorsX[Y];
|
||
|
||
if (BeginX > EndX)
|
||
{
|
||
while (true == this.IntersectVectorX(CurrentVector, VX))
|
||
{
|
||
}
|
||
}
|
||
else
|
||
{
|
||
while (true == this.IntersectVectorX(VX, CurrentVector))
|
||
{
|
||
}
|
||
}
|
||
|
||
for (var X in CurrentVector)
|
||
{
|
||
var VBeginX = parseInt(X);
|
||
var VEndX = CurrentVector[VBeginX];
|
||
|
||
if (VBeginX !== VEndX || VX[VBeginX] === undefined) // добавляем точку, только если она не существует, а ненулевой вектор всегда
|
||
{
|
||
VX[VBeginX] = VEndX;
|
||
}
|
||
}
|
||
};
|
||
CPolygon.prototype.IntersectVectorX = function (VectorOpp, VectorClW) // vector opposite, vector clockwise
|
||
{
|
||
for (var X in VectorOpp)
|
||
{
|
||
var VBeginX = parseInt(X);
|
||
var VEndX = VectorOpp[VBeginX];
|
||
|
||
if (VEndX == VBeginX)
|
||
continue;
|
||
|
||
for (var ClwX in VectorClW)
|
||
{
|
||
var ClwBeginX = parseInt(ClwX);
|
||
var ClwEndX = VectorClW[ClwBeginX];
|
||
var bIntersection = false;
|
||
|
||
if (ClwBeginX == ClwEndX)
|
||
continue;
|
||
|
||
if (ClwBeginX <= VEndX && VBeginX <= ClwEndX) // inside vector ClW
|
||
{
|
||
VectorOpp[VBeginX] = VBeginX;
|
||
|
||
VectorClW[ClwBeginX] = VEndX;
|
||
VectorClW[VBeginX] = ClwEndX;
|
||
|
||
bIntersection = true;
|
||
}
|
||
else if (VEndX <= ClwBeginX && ClwEndX <= VBeginX) // inside vector Opposite clockwise
|
||
{
|
||
VectorClW[ClwBeginX] = ClwBeginX;
|
||
|
||
VectorOpp[VBeginX] = ClwEndX;
|
||
VectorOpp[ClwBeginX] = VEndX;
|
||
|
||
bIntersection = true;
|
||
|
||
}
|
||
else if (ClwBeginX < VEndX && VEndX < ClwEndX) // intersect vector ClW
|
||
{
|
||
VectorClW[ClwBeginX] = VEndX;
|
||
VectorOpp[VBeginX] = ClwEndX;
|
||
|
||
bIntersection = true;
|
||
}
|
||
else if (ClwBeginX < VBeginX && VBeginX < ClwEndX) // intersect vector ClW
|
||
{
|
||
VectorOpp[ClwBeginX] = VEndX;
|
||
VectorClW[VBeginX] = ClwEndX;
|
||
|
||
delete VectorOpp[VBeginX];
|
||
delete VectorClW[ClwBeginX];
|
||
|
||
bIntersection = true;
|
||
}
|
||
|
||
if (bIntersection == true)
|
||
return true;
|
||
}
|
||
}
|
||
|
||
return false;
|
||
};
|
||
CPolygon.prototype.IntersectionY = function (VectorsY, BeginY, EndY, X)
|
||
{
|
||
var bIntersect = false;
|
||
|
||
for (var y in VectorsY[X])
|
||
{
|
||
var CurBeginY = parseInt(y);
|
||
var CurEndY = VectorsY[X][CurBeginY];
|
||
|
||
var minY, maxY;
|
||
|
||
if (CurBeginY < CurEndY)
|
||
{
|
||
minY = CurBeginY;
|
||
maxY = CurEndY;
|
||
}
|
||
else
|
||
{
|
||
minY = CurEndY;
|
||
maxY = CurBeginY;
|
||
}
|
||
|
||
var bInterSection = !((maxY <= BeginY && maxY <= EndY) || (minY >= BeginY && minY >= EndY )), // нач или конечная точка нах-ся внутри данного отрезка
|
||
bDirection = (CurBeginY - CurEndY) * (BeginY - EndY) < 0; // векторы противоположно направленны
|
||
|
||
if (bInterSection && bDirection) // если направления векторов совпало, значит один Bounds нах-ся в другом, ничего не делаем, такого быть не должно
|
||
{
|
||
|
||
VectorsY[X][CurBeginY] = EndY;
|
||
VectorsY[X][BeginY] = CurEndY;
|
||
bIntersect = true;
|
||
}
|
||
}
|
||
|
||
if (bIntersect == false)
|
||
{
|
||
VectorsY[X][BeginY] = EndY;
|
||
}
|
||
};
|
||
CPolygon.prototype.GetPaths = function (shift)
|
||
{
|
||
var Paths = [];
|
||
|
||
shift *= this.precision;
|
||
|
||
for (var PageIndex = 0; PageIndex < this.Vectors.length; PageIndex++)
|
||
{
|
||
var y, x1, x2,
|
||
x, y1, y2;
|
||
|
||
var VectorsX = this.Vectors[PageIndex].VX,
|
||
VectorsY = this.Vectors[PageIndex].VY,
|
||
Page = this.Vectors[PageIndex].Page;
|
||
|
||
|
||
for (var LineIndex in VectorsX)
|
||
{
|
||
for (var Index in VectorsX[LineIndex])
|
||
{
|
||
var Polygon = new CPolygonPath(this.precision);
|
||
Polygon.Page = Page;
|
||
|
||
y = parseInt(LineIndex);
|
||
x1 = parseInt(Index);
|
||
x2 = VectorsX[y][x1];
|
||
|
||
VectorsX[y][x1] = -1;
|
||
|
||
var Direction = x1 > x2 ? 1 : -1;
|
||
var minY = y;
|
||
var SignRightLeft, SignDownUp;
|
||
var X, Y;
|
||
|
||
if (x2 !== -1)
|
||
{
|
||
SignRightLeft = x1 > x2 ? 1 : -1;
|
||
Y = y - SignRightLeft * shift;
|
||
|
||
Polygon.PushPoint(x1, Y);
|
||
|
||
while (true)
|
||
{
|
||
x = x2;
|
||
y1 = y;
|
||
y2 = VectorsY[x][y1];
|
||
|
||
if (y2 == -1)
|
||
{
|
||
break;
|
||
}
|
||
else if (y2 == undefined) // такой ситуации не должно произойти, если произошла, значит есть ошибка в алгоритме => не отрисовываем путь
|
||
{
|
||
return [];
|
||
}
|
||
|
||
VectorsY[x][y1] = -1; // выставляем -1 => чтобы не добавить повторно путь с данными точками + проверка на возвращение в стартовую точку
|
||
|
||
SignDownUp = y1 > y2 ? 1 : -1;
|
||
X = x + SignDownUp * shift;
|
||
|
||
Polygon.PushPoint(X, Y);
|
||
|
||
y = y2;
|
||
x1 = x;
|
||
x2 = VectorsX[y][x1];
|
||
|
||
if (x2 == -1)
|
||
{
|
||
break;
|
||
}
|
||
else if (x2 == undefined) // такой ситуации не должно произойти, если произошла, значит есть ошибка в алгоритме => не отрисовываем путь
|
||
{
|
||
return [];
|
||
}
|
||
|
||
VectorsX[y][x1] = -1; // выставляем -1 => чтобы не добавить повторно путь с данными точками + проверка на возвращение в стартовую точку
|
||
|
||
SignRightLeft = x1 > x2 ? 1 : -1;
|
||
Y = y - SignRightLeft * shift;
|
||
|
||
Polygon.PushPoint(X, Y);
|
||
|
||
if (y < minY) // направление обхода
|
||
{
|
||
minY = y;
|
||
Direction = x1 > x2 ? 1 : -1;
|
||
}
|
||
|
||
}
|
||
Polygon.PushPoint(X, Y);
|
||
Polygon.CorrectExtremePoints();
|
||
|
||
|
||
Polygon.Direction = Direction;
|
||
Paths.push(Polygon);
|
||
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
return Paths;
|
||
};
|
||
|
||
function CDrawingPage()
|
||
{
|
||
this.left = 0;
|
||
this.top = 0;
|
||
this.right = 0;
|
||
this.bottom = 0;
|
||
|
||
this.cachedImage = null;
|
||
|
||
this.IsRecalculate = false;
|
||
this.RecalculateTime = -1;
|
||
}
|
||
CDrawingPage.prototype =
|
||
{
|
||
SetRepaint: function (cache_manager)
|
||
{
|
||
if (this.cachedImage != null && this.cachedImage.image != null)
|
||
{
|
||
this.IsRecalculate = true;
|
||
if (-1 == this.RecalculateTime)
|
||
this.RecalculateTime = new Date().getTime();
|
||
return;
|
||
}
|
||
this.UnLock(cache_manager);
|
||
},
|
||
|
||
UnLock: function (cache_manager)
|
||
{
|
||
cache_manager.UnLock(this.cachedImage);
|
||
this.cachedImage = null;
|
||
this.IsRecalculate = false;
|
||
this.RecalculateTime = -1;
|
||
}
|
||
};
|
||
|
||
var g_page_outline_inner = false;//AscCommon.AscBrowser.isChrome;
|
||
function CPage()
|
||
{
|
||
this.width_mm = 210;
|
||
this.height_mm = 297;
|
||
|
||
this.margin_left = 0;
|
||
this.margin_top = 0;
|
||
this.margin_right = 0;
|
||
this.margin_bottom = 0;
|
||
|
||
this.pageIndex = -1;
|
||
|
||
this.searchingArray = [];
|
||
this.selectionArray = [];
|
||
this.drawingPage = new CDrawingPage();
|
||
|
||
this.Draw = function (context, xDst, yDst, wDst, hDst, contextW, contextH)
|
||
{
|
||
if (null != this.drawingPage.cachedImage)
|
||
{
|
||
if (!g_page_outline_inner)
|
||
{
|
||
context.strokeStyle = GlobalSkin.PageOutline;
|
||
context.lineWidth = 1;
|
||
|
||
// ctx.strokeRect(x - 0.5, y - 0.5, w + 1, h + 1);
|
||
context.beginPath();
|
||
context.moveTo(xDst - 0.5, yDst - 0.5);
|
||
context.lineTo(xDst + wDst + 0.5, yDst - 0.5);
|
||
context.lineTo(xDst + wDst + 0.5, yDst + hDst + 0.5);
|
||
context.lineTo(xDst - 0.5, yDst + hDst + 0.5);
|
||
context.closePath();
|
||
context.stroke();
|
||
context.beginPath();
|
||
}
|
||
|
||
// потом посмотреть на кусочную отрисовку
|
||
context.drawImage(this.drawingPage.cachedImage.image, xDst, yDst, wDst, hDst);
|
||
}
|
||
else
|
||
{
|
||
context.fillStyle = "#ffffff";
|
||
|
||
if (!g_page_outline_inner)
|
||
{
|
||
context.strokeStyle = GlobalSkin.PageOutline;
|
||
context.lineWidth = 1;
|
||
|
||
// ctx.strokeRect(x - 0.5, y - 0.5, w + 1, h + 1);
|
||
context.beginPath();
|
||
context.moveTo(xDst - 0.5, yDst - 0.5);
|
||
context.lineTo(xDst + wDst + 0.5, yDst - 0.5);
|
||
context.lineTo(xDst + wDst + 0.5, yDst + hDst + 0.5);
|
||
context.lineTo(xDst - 0.5, yDst + hDst + 0.5);
|
||
context.closePath();
|
||
context.stroke();
|
||
context.beginPath();
|
||
}
|
||
|
||
context.fillRect(xDst, yDst, wDst, hDst);
|
||
}
|
||
};
|
||
|
||
this.DrawSelection = function (overlay, xDst, yDst, wDst, hDst, TextMatrix)
|
||
{
|
||
var dKoefX = wDst / this.width_mm;
|
||
var dKoefY = hDst / this.height_mm;
|
||
|
||
var selectionArray = this.selectionArray;
|
||
|
||
if (null == TextMatrix || global_MatrixTransformer.IsIdentity(TextMatrix))
|
||
{
|
||
for (var i = 0; i < selectionArray.length; i++)
|
||
{
|
||
var r = selectionArray[i];
|
||
|
||
var _x = ((xDst + dKoefX * r.x) >> 0) - 0.5;
|
||
var _y = ((yDst + dKoefY * r.y) >> 0) - 0.5;
|
||
|
||
var _w = (dKoefX * r.w + 1) >> 0;
|
||
var _h = (dKoefY * r.h + 1) >> 0;
|
||
|
||
if (_x < overlay.min_x)
|
||
overlay.min_x = _x;
|
||
if ((_x + _w) > overlay.max_x)
|
||
overlay.max_x = _x + _w;
|
||
|
||
if (_y < overlay.min_y)
|
||
overlay.min_y = _y;
|
||
if ((_y + _h) > overlay.max_y)
|
||
overlay.max_y = _y + _h;
|
||
|
||
overlay.m_oContext.rect(_x, _y, _w, _h);
|
||
}
|
||
}
|
||
else
|
||
{
|
||
for (var i = 0; i < selectionArray.length; i++)
|
||
{
|
||
var r = selectionArray[i];
|
||
|
||
var _x1 = TextMatrix.TransformPointX(r.x, r.y);
|
||
var _y1 = TextMatrix.TransformPointY(r.x, r.y);
|
||
|
||
var _x2 = TextMatrix.TransformPointX(r.x + r.w, r.y);
|
||
var _y2 = TextMatrix.TransformPointY(r.x + r.w, r.y);
|
||
|
||
var _x3 = TextMatrix.TransformPointX(r.x + r.w, r.y + r.h);
|
||
var _y3 = TextMatrix.TransformPointY(r.x + r.w, r.y + r.h);
|
||
|
||
var _x4 = TextMatrix.TransformPointX(r.x, r.y + r.h);
|
||
var _y4 = TextMatrix.TransformPointY(r.x, r.y + r.h);
|
||
|
||
var x1 = xDst + dKoefX * _x1;
|
||
var y1 = yDst + dKoefY * _y1;
|
||
|
||
var x2 = xDst + dKoefX * _x2;
|
||
var y2 = yDst + dKoefY * _y2;
|
||
|
||
var x3 = xDst + dKoefX * _x3;
|
||
var y3 = yDst + dKoefY * _y3;
|
||
|
||
var x4 = xDst + dKoefX * _x4;
|
||
var y4 = yDst + dKoefY * _y4;
|
||
|
||
overlay.CheckPoint(x1, y1);
|
||
overlay.CheckPoint(x2, y2);
|
||
overlay.CheckPoint(x3, y3);
|
||
overlay.CheckPoint(x4, y4);
|
||
|
||
var ctx = overlay.m_oContext;
|
||
ctx.moveTo(x1, y1);
|
||
ctx.lineTo(x2, y2);
|
||
ctx.lineTo(x3, y3);
|
||
ctx.lineTo(x4, y4);
|
||
ctx.closePath();
|
||
}
|
||
}
|
||
}
|
||
this.DrawSearch = function (overlay, xDst, yDst, wDst, hDst, drDoc)
|
||
{
|
||
var dKoefX = wDst / this.width_mm;
|
||
var dKoefY = hDst / this.height_mm;
|
||
|
||
// проверяем колонтитулы ------------
|
||
var ret = this.drawInHdrFtr(overlay, xDst, yDst, wDst, hDst, dKoefX, dKoefY, drDoc._search_HdrFtr_All);
|
||
if (!ret && this.pageIndex != 0)
|
||
ret = this.drawInHdrFtr(overlay, xDst, yDst, wDst, hDst, dKoefX, dKoefY, drDoc._search_HdrFtr_All_no_First);
|
||
if (!ret && this.pageIndex == 0)
|
||
ret = this.drawInHdrFtr(overlay, xDst, yDst, wDst, hDst, dKoefX, dKoefY, drDoc._search_HdrFtr_First);
|
||
if (!ret && (this.pageIndex & 1) == 1)
|
||
ret = this.drawInHdrFtr(overlay, xDst, yDst, wDst, hDst, dKoefX, dKoefY, drDoc._search_HdrFtr_Even);
|
||
if (!ret && (this.pageIndex & 1) == 0)
|
||
ret = this.drawInHdrFtr(overlay, xDst, yDst, wDst, hDst, dKoefX, dKoefY, drDoc._search_HdrFtr_Odd);
|
||
if (!ret && (this.pageIndex != 0))
|
||
ret = this.drawInHdrFtr(overlay, xDst, yDst, wDst, hDst, dKoefX, dKoefY, drDoc._search_HdrFtr_Odd_no_First);
|
||
// ----------------------------------
|
||
|
||
var ctx = overlay.m_oContext;
|
||
for (var i = 0; i < this.searchingArray.length; i++)
|
||
{
|
||
var place = this.searchingArray[i];
|
||
|
||
if (!place.Transform)
|
||
{
|
||
if (undefined === place.Ex)
|
||
{
|
||
var _x = ((xDst + dKoefX * place.X) >> 0) - 0.5;
|
||
var _y = ((yDst + dKoefY * place.Y) >> 0) - 0.5;
|
||
|
||
var _w = ((dKoefX * place.W) >> 0) + 1;
|
||
var _h = ((dKoefY * place.H) >> 0) + 1;
|
||
|
||
if (_x < overlay.min_x)
|
||
overlay.min_x = _x;
|
||
if ((_x + _w) > overlay.max_x)
|
||
overlay.max_x = _x + _w;
|
||
|
||
if (_y < overlay.min_y)
|
||
overlay.min_y = _y;
|
||
if ((_y + _h) > overlay.max_y)
|
||
overlay.max_y = _y + _h;
|
||
|
||
ctx.rect(_x, _y, _w, _h);
|
||
}
|
||
else
|
||
{
|
||
var _x1 = (xDst + dKoefX * place.X) >> 0;
|
||
var _y1 = (yDst + dKoefY * place.Y) >> 0;
|
||
|
||
var x2 = place.X + place.W * place.Ex;
|
||
var y2 = place.Y + place.W * place.Ey;
|
||
var _x2 = (xDst + dKoefX * x2) >> 0;
|
||
var _y2 = (yDst + dKoefY * y2) >> 0;
|
||
|
||
var x3 = x2 - place.H * place.Ey;
|
||
var y3 = y2 + place.H * place.Ex;
|
||
var _x3 = (xDst + dKoefX * x3) >> 0;
|
||
var _y3 = (yDst + dKoefY * y3) >> 0;
|
||
|
||
var x4 = place.X - place.H * place.Ey;
|
||
var y4 = place.Y + place.H * place.Ex;
|
||
var _x4 = (xDst + dKoefX * x4) >> 0;
|
||
var _y4 = (yDst + dKoefY * y4) >> 0;
|
||
|
||
overlay.CheckPoint(_x1, _y1);
|
||
overlay.CheckPoint(_x2, _y2);
|
||
overlay.CheckPoint(_x3, _y3);
|
||
overlay.CheckPoint(_x4, _y4);
|
||
|
||
ctx.moveTo(_x1, _y1);
|
||
ctx.lineTo(_x2, _y2);
|
||
ctx.lineTo(_x3, _y3);
|
||
ctx.lineTo(_x4, _y4);
|
||
ctx.lineTo(_x1, _y1);
|
||
}
|
||
}
|
||
else
|
||
{
|
||
var _tr = place.Transform;
|
||
if (undefined === place.Ex)
|
||
{
|
||
var _x1 = xDst + dKoefX * _tr.TransformPointX(place.X, place.Y);
|
||
var _y1 = yDst + dKoefY * _tr.TransformPointY(place.X, place.Y);
|
||
|
||
var _x2 = xDst + dKoefX * _tr.TransformPointX(place.X + place.W, place.Y);
|
||
var _y2 = yDst + dKoefY * _tr.TransformPointY(place.X + place.W, place.Y);
|
||
|
||
var _x3 = xDst + dKoefX * _tr.TransformPointX(place.X + place.W, place.Y + place.H);
|
||
var _y3 = yDst + dKoefY * _tr.TransformPointY(place.X + place.W, place.Y + place.H);
|
||
|
||
var _x4 = xDst + dKoefX * _tr.TransformPointX(place.X, place.Y + place.H);
|
||
var _y4 = yDst + dKoefY * _tr.TransformPointY(place.X, place.Y + place.H);
|
||
|
||
overlay.CheckPoint(_x1, _y1);
|
||
overlay.CheckPoint(_x2, _y2);
|
||
overlay.CheckPoint(_x3, _y3);
|
||
overlay.CheckPoint(_x4, _y4);
|
||
|
||
ctx.moveTo(_x1, _y1);
|
||
ctx.lineTo(_x2, _y2);
|
||
ctx.lineTo(_x3, _y3);
|
||
ctx.lineTo(_x4, _y4);
|
||
ctx.lineTo(_x1, _y1);
|
||
}
|
||
else
|
||
{
|
||
var x2 = place.X + place.W * place.Ex;
|
||
var y2 = place.Y + place.W * place.Ey;
|
||
|
||
var x3 = x2 - place.H * place.Ey;
|
||
var y3 = y2 + place.H * place.Ex;
|
||
|
||
var x4 = place.X - place.H * place.Ey;
|
||
var y4 = place.Y + place.H * place.Ex;
|
||
|
||
var _x1 = xDst + dKoefX * _tr.TransformPointX(place.X, place.Y);
|
||
var _y1 = yDst + dKoefY * _tr.TransformPointY(place.X, place.Y);
|
||
|
||
var _x2 = xDst + dKoefX * _tr.TransformPointX(x2, y2);
|
||
var _y2 = yDst + dKoefY * _tr.TransformPointY(x2, y2);
|
||
|
||
var _x3 = xDst + dKoefX * _tr.TransformPointX(x3, y3);
|
||
var _y3 = yDst + dKoefY * _tr.TransformPointY(x3, y3);
|
||
|
||
var _x4 = xDst + dKoefX * _tr.TransformPointX(x4, y4);
|
||
var _y4 = yDst + dKoefY * _tr.TransformPointY(x4, y4);
|
||
|
||
overlay.CheckPoint(_x1, _y1);
|
||
overlay.CheckPoint(_x2, _y2);
|
||
overlay.CheckPoint(_x3, _y3);
|
||
overlay.CheckPoint(_x4, _y4);
|
||
|
||
ctx.moveTo(_x1, _y1);
|
||
ctx.lineTo(_x2, _y2);
|
||
ctx.lineTo(_x3, _y3);
|
||
ctx.lineTo(_x4, _y4);
|
||
ctx.lineTo(_x1, _y1);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
this.DrawSearch2 = function (overlay, xDst, yDst, wDst, hDst, _searching)
|
||
{
|
||
var dKoefX = wDst / this.width_mm;
|
||
var dKoefY = hDst / this.height_mm;
|
||
|
||
var ctx = overlay.m_oContext;
|
||
for (var i = 0; i < _searching.length; i++)
|
||
{
|
||
var _find_count = _searching[i].length;
|
||
|
||
for (var j = 0; j < _find_count; j++)
|
||
{
|
||
var place = _searching[i][j];
|
||
|
||
if (!place.Transform)
|
||
{
|
||
if (undefined === place.Ex)
|
||
{
|
||
var _x = ((xDst + dKoefX * place.X) >> 0) - 0.5;
|
||
var _y = ((yDst + dKoefY * place.Y) >> 0) - 0.5;
|
||
|
||
var _w = ((dKoefX * place.W) >> 0) + 1;
|
||
var _h = ((dKoefY * place.H) >> 0) + 1;
|
||
|
||
if (_x < overlay.min_x)
|
||
overlay.min_x = _x;
|
||
if ((_x + _w) > overlay.max_x)
|
||
overlay.max_x = _x + _w;
|
||
|
||
if (_y < overlay.min_y)
|
||
overlay.min_y = _y;
|
||
if ((_y + _h) > overlay.max_y)
|
||
overlay.max_y = _y + _h;
|
||
|
||
ctx.rect(_x, _y, _w, _h);
|
||
}
|
||
else
|
||
{
|
||
var _x1 = (xDst + dKoefX * place.X) >> 0;
|
||
var _y1 = (yDst + dKoefY * place.Y) >> 0;
|
||
|
||
var x2 = place.X + place.W * place.Ex;
|
||
var y2 = place.Y + place.W * place.Ey;
|
||
var _x2 = (xDst + dKoefX * x2) >> 0;
|
||
var _y2 = (yDst + dKoefY * y2) >> 0;
|
||
|
||
var x3 = x2 - place.H * place.Ey;
|
||
var y3 = y2 + place.H * place.Ex;
|
||
var _x3 = (xDst + dKoefX * x3) >> 0;
|
||
var _y3 = (yDst + dKoefY * y3) >> 0;
|
||
|
||
var x4 = place.X - place.H * place.Ey;
|
||
var y4 = place.Y + place.H * place.Ex;
|
||
var _x4 = (xDst + dKoefX * x4) >> 0;
|
||
var _y4 = (yDst + dKoefY * y4) >> 0;
|
||
|
||
overlay.CheckPoint(_x1, _y1);
|
||
overlay.CheckPoint(_x2, _y2);
|
||
overlay.CheckPoint(_x3, _y3);
|
||
overlay.CheckPoint(_x4, _y4);
|
||
|
||
ctx.moveTo(_x1, _y1);
|
||
ctx.lineTo(_x2, _y2);
|
||
ctx.lineTo(_x3, _y3);
|
||
ctx.lineTo(_x4, _y4);
|
||
ctx.lineTo(_x1, _y1);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
this.drawInHdrFtr = function (overlay, xDst, yDst, wDst, hDst, dKoefX, dKoefY, arr)
|
||
{
|
||
var _c = arr.length;
|
||
if (0 == _c)
|
||
return false;
|
||
|
||
var ctx = overlay.m_oContext;
|
||
for (var i = 0; i < _c; i++)
|
||
{
|
||
var place = arr[i];
|
||
|
||
if (!place.Transform)
|
||
{
|
||
if (undefined === place.Ex)
|
||
{
|
||
var _x = ((xDst + dKoefX * place.X) >> 0) - 0.5;
|
||
var _y = ((yDst + dKoefY * place.Y) >> 0) - 0.5;
|
||
|
||
var _w = ((dKoefX * place.W) >> 0) + 1;
|
||
var _h = ((dKoefY * place.H) >> 0) + 1;
|
||
|
||
if (_x < overlay.min_x)
|
||
overlay.min_x = _x;
|
||
if ((_x + _w) > overlay.max_x)
|
||
overlay.max_x = _x + _w;
|
||
|
||
if (_y < overlay.min_y)
|
||
overlay.min_y = _y;
|
||
if ((_y + _h) > overlay.max_y)
|
||
overlay.max_y = _y + _h;
|
||
|
||
ctx.rect(_x, _y, _w, _h);
|
||
}
|
||
else
|
||
{
|
||
var _x1 = (xDst + dKoefX * place.X) >> 0;
|
||
var _y1 = (yDst + dKoefY * place.Y) >> 0;
|
||
|
||
var x2 = place.X + place.W * place.Ex;
|
||
var y2 = place.Y + place.W * place.Ey;
|
||
var _x2 = (xDst + dKoefX * x2) >> 0;
|
||
var _y2 = (yDst + dKoefY * y2) >> 0;
|
||
|
||
var x3 = x2 - place.H * place.Ey;
|
||
var y3 = y2 + place.H * place.Ex;
|
||
var _x3 = (xDst + dKoefX * x3) >> 0;
|
||
var _y3 = (yDst + dKoefY * y3) >> 0;
|
||
|
||
var x4 = place.X - place.H * place.Ey;
|
||
var y4 = place.Y + place.H * place.Ex;
|
||
var _x4 = (xDst + dKoefX * x4) >> 0;
|
||
var _y4 = (yDst + dKoefY * y4) >> 0;
|
||
|
||
overlay.CheckPoint(_x1, _y1);
|
||
overlay.CheckPoint(_x2, _y2);
|
||
overlay.CheckPoint(_x3, _y3);
|
||
overlay.CheckPoint(_x4, _y4);
|
||
|
||
ctx.moveTo(_x1, _y1);
|
||
ctx.lineTo(_x2, _y2);
|
||
ctx.lineTo(_x3, _y3);
|
||
ctx.lineTo(_x4, _y4);
|
||
ctx.lineTo(_x1, _y1);
|
||
}
|
||
}
|
||
else
|
||
{
|
||
var _tr = place.Transform;
|
||
if (undefined === place.Ex)
|
||
{
|
||
var _x1 = xDst + dKoefX * _tr.TransformPointX(place.X, place.Y);
|
||
var _y1 = yDst + dKoefY * _tr.TransformPointY(place.X, place.Y);
|
||
|
||
var _x2 = xDst + dKoefX * _tr.TransformPointX(place.X + place.W, place.Y);
|
||
var _y2 = yDst + dKoefY * _tr.TransformPointY(place.X + place.W, place.Y);
|
||
|
||
var _x3 = xDst + dKoefX * _tr.TransformPointX(place.X + place.W, place.Y + place.H);
|
||
var _y3 = yDst + dKoefY * _tr.TransformPointY(place.X + place.W, place.Y + place.H);
|
||
|
||
var _x4 = xDst + dKoefX * _tr.TransformPointX(place.X, place.Y + place.H);
|
||
var _y4 = yDst + dKoefY * _tr.TransformPointY(place.X, place.Y + place.H);
|
||
|
||
overlay.CheckPoint(_x1, _y1);
|
||
overlay.CheckPoint(_x2, _y2);
|
||
overlay.CheckPoint(_x3, _y3);
|
||
overlay.CheckPoint(_x4, _y4);
|
||
|
||
ctx.moveTo(_x1, _y1);
|
||
ctx.lineTo(_x2, _y2);
|
||
ctx.lineTo(_x3, _y3);
|
||
ctx.lineTo(_x4, _y4);
|
||
ctx.lineTo(_x1, _y1);
|
||
}
|
||
else
|
||
{
|
||
var x2 = place.X + place.W * place.Ex;
|
||
var y2 = place.Y + place.W * place.Ey;
|
||
|
||
var x3 = x2 - place.H * place.Ey;
|
||
var y3 = y2 + place.H * place.Ex;
|
||
|
||
var x4 = place.X - place.H * place.Ey;
|
||
var y4 = place.Y + place.H * place.Ex;
|
||
|
||
var _x1 = xDst + dKoefX * _tr.TransformPointX(place.X, place.Y);
|
||
var _y1 = yDst + dKoefY * _tr.TransformPointY(place.X, place.Y);
|
||
|
||
var _x2 = xDst + dKoefX * _tr.TransformPointX(x2, y2);
|
||
var _y2 = yDst + dKoefY * _tr.TransformPointY(x2, y2);
|
||
|
||
var _x3 = xDst + dKoefX * _tr.TransformPointX(x3, y3);
|
||
var _y3 = yDst + dKoefY * _tr.TransformPointY(x3, y3);
|
||
|
||
var _x4 = xDst + dKoefX * _tr.TransformPointX(x4, y4);
|
||
var _y4 = yDst + dKoefY * _tr.TransformPointY(x4, y4);
|
||
|
||
overlay.CheckPoint(_x1, _y1);
|
||
overlay.CheckPoint(_x2, _y2);
|
||
overlay.CheckPoint(_x3, _y3);
|
||
overlay.CheckPoint(_x4, _y4);
|
||
|
||
ctx.moveTo(_x1, _y1);
|
||
ctx.lineTo(_x2, _y2);
|
||
ctx.lineTo(_x3, _y3);
|
||
ctx.lineTo(_x4, _y4);
|
||
ctx.lineTo(_x1, _y1);
|
||
}
|
||
}
|
||
}
|
||
return true;
|
||
}
|
||
|
||
this.DrawSearchCur = function (overlay, xDst, yDst, wDst, hDst, places)
|
||
{
|
||
var dKoefX = wDst / this.width_mm;
|
||
var dKoefY = hDst / this.height_mm;
|
||
|
||
var len = places.length;
|
||
|
||
var ctx = overlay.m_oContext;
|
||
|
||
ctx.fillStyle = "rgba(51,102,204,255)";
|
||
|
||
for (var i = 0; i < len; i++)
|
||
{
|
||
var place = places[i];
|
||
if (undefined === place.Ex)
|
||
{
|
||
var _x = ((xDst + dKoefX * place.X) >> 0) - 0.5;
|
||
var _y = ((yDst + dKoefY * place.Y) >> 0) - 0.5;
|
||
|
||
var _w = ((dKoefX * place.W) >> 0) + 1;
|
||
var _h = ((dKoefY * place.H) >> 0) + 1;
|
||
|
||
if (_x < overlay.min_x)
|
||
overlay.min_x = _x;
|
||
if ((_x + _w) > overlay.max_x)
|
||
overlay.max_x = _x + _w;
|
||
|
||
if (_y < overlay.min_y)
|
||
overlay.min_y = _y;
|
||
if ((_y + _h) > overlay.max_y)
|
||
overlay.max_y = _y + _h;
|
||
|
||
ctx.rect(_x, _y, _w, _h);
|
||
}
|
||
else
|
||
{
|
||
var _x1 = (xDst + dKoefX * place.X) >> 0;
|
||
var _y1 = (yDst + dKoefY * place.Y) >> 0;
|
||
|
||
var x2 = place.X + place.W * place.Ex;
|
||
var y2 = place.Y + place.W * place.Ey;
|
||
var _x2 = (xDst + dKoefX * x2) >> 0;
|
||
var _y2 = (yDst + dKoefY * y2) >> 0;
|
||
|
||
var x3 = x2 - place.H * place.Ey;
|
||
var y3 = y2 + place.H * place.Ex;
|
||
var _x3 = (xDst + dKoefX * x3) >> 0;
|
||
var _y3 = (yDst + dKoefY * y3) >> 0;
|
||
|
||
var x4 = place.X - place.H * place.Ey;
|
||
var y4 = place.Y + place.H * place.Ex;
|
||
var _x4 = (xDst + dKoefX * x4) >> 0;
|
||
var _y4 = (yDst + dKoefY * y4) >> 0;
|
||
|
||
overlay.CheckPoint(_x1, _y1);
|
||
overlay.CheckPoint(_x2, _y2);
|
||
overlay.CheckPoint(_x3, _y3);
|
||
overlay.CheckPoint(_x4, _y4);
|
||
|
||
ctx.moveTo(_x1, _y1);
|
||
ctx.lineTo(_x2, _y2);
|
||
ctx.lineTo(_x3, _y3);
|
||
ctx.lineTo(_x4, _y4);
|
||
ctx.lineTo(_x1, _y1);
|
||
}
|
||
}
|
||
|
||
ctx.fill();
|
||
ctx.beginPath();
|
||
}
|
||
|
||
this.DrawTableOutline = function (overlay, xDst, yDst, wDst, hDst, table_outline_dr, lastBounds)
|
||
{
|
||
var transform = table_outline_dr.TableMatrix;
|
||
if (null == transform || transform.IsIdentity2())
|
||
{
|
||
var dKoefX = wDst / this.width_mm;
|
||
var dKoefY = hDst / this.height_mm;
|
||
|
||
var _offX = (null == transform) ? 0 : transform.tx;
|
||
var _offY = (null == transform) ? 0 : transform.ty;
|
||
|
||
if (!lastBounds)
|
||
{
|
||
var _x = 0;
|
||
var _y = 0;
|
||
switch (table_outline_dr.TrackTablePos)
|
||
{
|
||
case 1:
|
||
{
|
||
_x = (xDst + dKoefX * (table_outline_dr.TableOutline.X + table_outline_dr.TableOutline.W + _offX)) >> 0;
|
||
_y = ((yDst + dKoefY * (table_outline_dr.TableOutline.Y + _offY)) >> 0) - 13;
|
||
break;
|
||
}
|
||
case 2:
|
||
{
|
||
_x = (xDst + dKoefX * (table_outline_dr.TableOutline.X + table_outline_dr.TableOutline.W + _offX)) >> 0;
|
||
_y = (yDst + dKoefY * (table_outline_dr.TableOutline.Y + table_outline_dr.TableOutline.H + _offY)) >> 0;
|
||
break;
|
||
}
|
||
case 3:
|
||
{
|
||
_x = ((xDst + dKoefX * (table_outline_dr.TableOutline.X + _offX)) >> 0) - 13;
|
||
_y = (yDst + dKoefY * (table_outline_dr.TableOutline.Y + table_outline_dr.TableOutline.H + _offY)) >> 0;
|
||
break;
|
||
}
|
||
case 0:
|
||
default:
|
||
{
|
||
_x = ((xDst + dKoefX * (table_outline_dr.TableOutline.X + _offX)) >> 0) - 13;
|
||
_y = ((yDst + dKoefY * (table_outline_dr.TableOutline.Y + _offY)) >> 0) - 13;
|
||
break;
|
||
}
|
||
}
|
||
|
||
var _w = 13;
|
||
var _h = 13;
|
||
|
||
if (_x < overlay.min_x)
|
||
overlay.min_x = _x;
|
||
if ((_x + _w) > overlay.max_x)
|
||
overlay.max_x = _x + _w;
|
||
|
||
if (_y < overlay.min_y)
|
||
overlay.min_y = _y;
|
||
if ((_y + _h) > overlay.max_y)
|
||
overlay.max_y = _y + _h;
|
||
|
||
var tmp_image = overlay.IsRetina ? table_outline_dr.image2 : table_outline_dr.image;
|
||
if (tmp_image.asc_complete)
|
||
overlay.m_oContext.drawImage(tmp_image, _x, _y, 13, 13);
|
||
}
|
||
else
|
||
{
|
||
var _xLast = (xDst + dKoefX * (lastBounds.X + lastBounds.W + _offX) + 0.5) >> 0;
|
||
var _yLast = (yDst + dKoefY * (lastBounds.Y + lastBounds.H + _offY) + 0.5) >> 0;
|
||
|
||
var ctx = overlay.m_oContext;
|
||
ctx.strokeStyle = "rgb(140, 140, 140)";
|
||
ctx.lineWidth = 1;
|
||
ctx.beginPath();
|
||
|
||
overlay.AddRect(_xLast - 0.5, _yLast - 0.5, 6, 6);
|
||
|
||
ctx.stroke();
|
||
ctx.beginPath();
|
||
}
|
||
}
|
||
else
|
||
{
|
||
var ctx = overlay.m_oContext;
|
||
|
||
var _ft = new AscCommon.CMatrix();
|
||
_ft.sx = transform.sx;
|
||
_ft.shx = transform.shx;
|
||
_ft.shy = transform.shy;
|
||
_ft.sy = transform.sy;
|
||
_ft.tx = transform.tx;
|
||
_ft.ty = transform.ty;
|
||
|
||
var coords = new AscCommon.CMatrix();
|
||
coords.sx = wDst / this.width_mm;
|
||
coords.sy = hDst / this.height_mm;
|
||
coords.tx = xDst;
|
||
coords.ty = yDst;
|
||
|
||
global_MatrixTransformer.MultiplyAppend(_ft, coords);
|
||
|
||
if (!lastBounds)
|
||
{
|
||
ctx.transform(_ft.sx, _ft.shy, _ft.shx, _ft.sy, _ft.tx, _ft.ty);
|
||
|
||
var _x = 0;
|
||
var _y = 0;
|
||
var _w = 13 / coords.sx;
|
||
var _h = 13 / coords.sy;
|
||
switch (table_outline_dr.TrackTablePos)
|
||
{
|
||
case 1:
|
||
{
|
||
_x = (table_outline_dr.TableOutline.X + table_outline_dr.TableOutline.W);
|
||
_y = (table_outline_dr.TableOutline.Y - _h);
|
||
break;
|
||
}
|
||
case 2:
|
||
{
|
||
_x = (table_outline_dr.TableOutline.X + table_outline_dr.TableOutline.W);
|
||
_y = (table_outline_dr.TableOutline.Y + table_outline_dr.TableOutline.H);
|
||
break;
|
||
}
|
||
case 3:
|
||
{
|
||
_x = (table_outline_dr.TableOutline.X - _w);
|
||
_y = (table_outline_dr.TableOutline.Y + table_outline_dr.TableOutline.H);
|
||
break;
|
||
}
|
||
case 0:
|
||
default:
|
||
{
|
||
_x = (table_outline_dr.TableOutline.X - _w);
|
||
_y = (table_outline_dr.TableOutline.Y - _h);
|
||
break;
|
||
}
|
||
}
|
||
|
||
overlay.CheckPoint(_ft.TransformPointX(_x, _y), _ft.TransformPointY(_x, _y));
|
||
overlay.CheckPoint(_ft.TransformPointX(_x + _w, _y), _ft.TransformPointY(_x + _w, _y));
|
||
overlay.CheckPoint(_ft.TransformPointX(_x + _w, _y + _h), _ft.TransformPointY(_x + _w, _y + _h));
|
||
overlay.CheckPoint(_ft.TransformPointX(_x, _y + _h), _ft.TransformPointY(_x, _y + _h));
|
||
|
||
var tmp_image = overlay.IsRetina ? table_outline_dr.image2 : table_outline_dr.image;
|
||
if (tmp_image.asc_complete)
|
||
overlay.m_oContext.drawImage(tmp_image, _x, _y, _w, _h);
|
||
|
||
overlay.SetBaseTransform();
|
||
}
|
||
else
|
||
{
|
||
var _xLast = (lastBounds.X + lastBounds.W);
|
||
var _yLast = (lastBounds.Y + lastBounds.H);
|
||
|
||
var ctx = overlay.m_oContext;
|
||
ctx.strokeStyle = "rgb(140, 140, 140)";
|
||
ctx.fillStyle = "#FFFFFF";
|
||
ctx.lineWidth = 1;
|
||
ctx.beginPath();
|
||
|
||
var _dist = 6 / _ft.GetScaleValue();
|
||
|
||
var _arr = [
|
||
_ft.TransformPointX(_xLast, _yLast),
|
||
_ft.TransformPointY(_xLast, _yLast),
|
||
_ft.TransformPointX(_xLast + _dist, _yLast),
|
||
_ft.TransformPointY(_xLast + _dist, _yLast),
|
||
_ft.TransformPointX(_xLast + _dist, _yLast + _dist),
|
||
_ft.TransformPointY(_xLast + _dist, _yLast + _dist),
|
||
_ft.TransformPointX(_xLast, _yLast + _dist),
|
||
_ft.TransformPointY(_xLast, _yLast + _dist)
|
||
];
|
||
|
||
overlay.CheckPoint(_arr[0], _arr[1]);
|
||
overlay.CheckPoint(_arr[2], _arr[3]);
|
||
overlay.CheckPoint(_arr[4], _arr[5]);
|
||
overlay.CheckPoint(_arr[6], _arr[7]);
|
||
|
||
ctx.moveTo(_arr[0], _arr[1]);
|
||
ctx.lineTo(_arr[2], _arr[3]);
|
||
ctx.lineTo(_arr[4], _arr[5]);
|
||
ctx.lineTo(_arr[6], _arr[7]);
|
||
ctx.closePath();
|
||
|
||
ctx.fill();
|
||
ctx.stroke();
|
||
ctx.beginPath();
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
function CDrawingCollaborativeTarget()
|
||
{
|
||
this.Id = "";
|
||
this.ShortId = "";
|
||
|
||
this.X = 0;
|
||
this.Y = 0;
|
||
this.Size = 0;
|
||
this.Page = -1;
|
||
|
||
this.Color = null;
|
||
this.Transform = null;
|
||
|
||
this.HtmlElement = null;
|
||
this.HtmlElementX = 0;
|
||
this.HtmlElementY = 0;
|
||
|
||
this.Color = null;
|
||
|
||
this.Style = "";
|
||
this.IsInsertToDOM = false;
|
||
}
|
||
CDrawingCollaborativeTarget.prototype =
|
||
{
|
||
CheckPosition: function (_drawing_doc, _x, _y, _size, _page, _transform)
|
||
{
|
||
// 1) создаем новый элемент, если еще его не было
|
||
var bIsHtmlElementCreate = false;
|
||
if (this.HtmlElement == null)
|
||
{
|
||
bIsHtmlElementCreate = true;
|
||
this.HtmlElement = document.createElement('canvas');
|
||
this.HtmlElement.style.cssText = "pointer-events: none;position:absolute;padding:0;margin:0;-webkit-user-select:none;width:1px;height:1px;display:block;z-index:3;";
|
||
this.HtmlElement.width = 1;
|
||
this.HtmlElement.height = 1;
|
||
|
||
this.Color = AscCommon.getUserColorById(this.ShortId, null, true);
|
||
this.Style = "rgb(" + this.Color.r + "," + this.Color.g + "," + this.Color.b + ")";
|
||
}
|
||
|
||
// 2) определяем размер
|
||
this.Transform = _transform;
|
||
this.Size = _size;
|
||
|
||
var _old_x = this.X;
|
||
var _old_y = this.Y;
|
||
var _old_page = this.Page;
|
||
|
||
this.X = _x;
|
||
this.Y = _y;
|
||
this.Page = _page;
|
||
|
||
var _oldW = this.HtmlElement.width;
|
||
var _oldH = this.HtmlElement.height;
|
||
|
||
var _newW = 2;
|
||
var _newH = (this.Size * _drawing_doc.m_oWordControl.m_nZoomValue * g_dKoef_mm_to_pix / 100) >> 0;
|
||
|
||
if (null != this.Transform && !global_MatrixTransformer.IsIdentity2(this.Transform))
|
||
{
|
||
var _x1 = this.Transform.TransformPointX(_x, _y);
|
||
var _y1 = this.Transform.TransformPointY(_x, _y);
|
||
|
||
var _x2 = this.Transform.TransformPointX(_x, _y + this.Size);
|
||
var _y2 = this.Transform.TransformPointY(_x, _y + this.Size);
|
||
|
||
var pos1 = _drawing_doc.ConvertCoordsToCursor2(_x1, _y1, this.Page);
|
||
var pos2 = _drawing_doc.ConvertCoordsToCursor2(_x2, _y2, this.Page);
|
||
|
||
_newW = (Math.abs(pos1.X - pos2.X) >> 0) + 1;
|
||
_newH = (Math.abs(pos1.Y - pos2.Y) >> 0) + 1;
|
||
|
||
if (2 > _newW)
|
||
_newW = 2;
|
||
if (2 > _newH)
|
||
_newH = 2;
|
||
|
||
if (_oldW == _newW && _oldH == _newH)
|
||
{
|
||
if (_newW != 2 && _newH != 2)
|
||
{
|
||
// просто очищаем
|
||
this.HtmlElement.width = _newW;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
this.HtmlElement.style.width = _newW + "px";
|
||
this.HtmlElement.style.height = _newH + "px";
|
||
|
||
this.HtmlElement.width = _newW;
|
||
this.HtmlElement.height = _newH;
|
||
}
|
||
var ctx = this.HtmlElement.getContext('2d');
|
||
|
||
if (_newW == 2 || _newH == 2)
|
||
{
|
||
ctx.fillStyle = this.Style;
|
||
ctx.fillRect(0, 0, _newW, _newH);
|
||
}
|
||
else
|
||
{
|
||
ctx.beginPath();
|
||
ctx.strokeStyle = this.Style;
|
||
ctx.lineWidth = 2;
|
||
|
||
if (((pos1.X - pos2.X) * (pos1.Y - pos2.Y)) >= 0)
|
||
{
|
||
ctx.moveTo(0, 0);
|
||
ctx.lineTo(_newW, _newH);
|
||
}
|
||
else
|
||
{
|
||
ctx.moveTo(0, _newH);
|
||
ctx.lineTo(_newW, 0);
|
||
}
|
||
|
||
ctx.stroke();
|
||
}
|
||
|
||
this.HtmlElementX = Math.min(pos1.X, pos2.X) >> 0;
|
||
this.HtmlElementY = Math.min(pos1.Y, pos2.Y) >> 0;
|
||
if ((!_drawing_doc.m_oWordControl.MobileTouchManager && !AscCommon.AscBrowser.isSafariMacOs) || !AscCommon.AscBrowser.isWebkit)
|
||
{
|
||
this.HtmlElement.style.left = this.HtmlElementX + "px";
|
||
this.HtmlElement.style.top = this.HtmlElementY + "px";
|
||
}
|
||
else
|
||
{
|
||
this.HtmlElement.style.left = "0px";
|
||
this.HtmlElement.style.top = "0px";
|
||
this.HtmlElement.style["webkitTransform"] = "matrix(1, 0, 0, 1, " + this.HtmlElementX + "," + this.HtmlElementY + ")";
|
||
}
|
||
}
|
||
else
|
||
{
|
||
if (_oldW == _newW && _oldH == _newH)
|
||
{
|
||
// просто очищаем
|
||
this.HtmlElement.width = _newW;
|
||
}
|
||
else
|
||
{
|
||
this.HtmlElement.style.width = _newW + "px";
|
||
this.HtmlElement.style.height = _newH + "px";
|
||
|
||
this.HtmlElement.width = _newW;
|
||
this.HtmlElement.height = _newH;
|
||
}
|
||
|
||
var ctx = this.HtmlElement.getContext('2d');
|
||
|
||
ctx.fillStyle = this.Style;
|
||
ctx.fillRect(0, 0, _newW, _newH);
|
||
|
||
if (null != this.Transform)
|
||
{
|
||
_x += this.Transform.tx;
|
||
_y += this.Transform.ty;
|
||
}
|
||
|
||
var pos = _drawing_doc.ConvertCoordsToCursor2(_x, _y, this.Page);
|
||
|
||
this.HtmlElementX = pos.X >> 0;
|
||
this.HtmlElementY = pos.Y >> 0;
|
||
|
||
if ((!_drawing_doc.m_oWordControl.MobileTouchManager && !AscCommon.AscBrowser.isSafariMacOs) || !AscCommon.AscBrowser.isWebkit)
|
||
{
|
||
this.HtmlElement.style.left = this.HtmlElementX + "px";
|
||
this.HtmlElement.style.top = this.HtmlElementY + "px";
|
||
}
|
||
else
|
||
{
|
||
this.HtmlElement.style.left = "0px";
|
||
this.HtmlElement.style.top = "0px";
|
||
this.HtmlElement.style["webkitTransform"] = "matrix(1, 0, 0, 1, " + this.HtmlElementX + "," + this.HtmlElementY + ")";
|
||
}
|
||
}
|
||
|
||
if (AscCommon.CollaborativeEditing)
|
||
AscCommon.CollaborativeEditing.Update_ForeignCursorLabelPosition(this.Id, this.HtmlElementX, this.HtmlElementY, this.Color);
|
||
|
||
// 3) добавить, если нужно
|
||
if (bIsHtmlElementCreate)
|
||
{
|
||
_drawing_doc.m_oWordControl.m_oMainView.HtmlElement.appendChild(this.HtmlElement);
|
||
this.IsInsertToDOM = true;
|
||
}
|
||
},
|
||
|
||
Remove: function (_drawing_doc)
|
||
{
|
||
if (this.IsInsertToDOM)
|
||
{
|
||
_drawing_doc.m_oWordControl.m_oMainView.HtmlElement.removeChild(this.HtmlElement);
|
||
this.IsInsertToDOM = false;
|
||
}
|
||
},
|
||
|
||
Update: function (_drawing_doc)
|
||
{
|
||
this.CheckPosition(_drawing_doc, this.X, this.Y, this.Size, this.Page, this.Transform);
|
||
}
|
||
};
|
||
|
||
function CDrawingDocument()
|
||
{
|
||
this.IsLockObjectsEnable = false;
|
||
|
||
AscCommon.g_oHtmlCursor.register("de-markerformat", "marker_format", ["marker_format", 14, 8], "pointer");
|
||
AscCommon.g_oHtmlCursor.register("select-table-row", "select_row", ["select_row", 10, 5], "default");
|
||
AscCommon.g_oHtmlCursor.register("select-table-column", "select_column", ["select_column", 5, 10], "default");
|
||
AscCommon.g_oHtmlCursor.register("select-table-cell", "select_cell", ["select_cell", 9, 0], "default");
|
||
|
||
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.FrameRect = {
|
||
IsActive: false, Rect: {X: 0, Y: 0, R: 0, B: 0}, Frame: null,
|
||
Track: {X: 0, Y: 0, L: 0, T: 0, R: 0, B: 0, PageIndex: 0, Type: -1}, IsTracked: false, PageIndex: 0
|
||
};
|
||
|
||
this.MathRect = {IsActive: false, Bounds: [], ContentSelection: null};
|
||
this.MathPolygons = [];
|
||
this.MathSelectPolygons = [];
|
||
this.FieldTrack = {IsActive: false, Rects: []};
|
||
|
||
this.m_oCacheManager = new CCacheManager();
|
||
|
||
this.m_lCountCalculatePages = 0;
|
||
|
||
this.m_bIsDocumentCalculating = true;
|
||
this.m_arPrintingWaitEndRecalculate = null;
|
||
|
||
this.m_lTimerTargetId = -1;
|
||
this.m_dTargetX = -1;
|
||
this.m_dTargetY = -1;
|
||
this.m_lTargetPage = -1;
|
||
this.m_dTargetSize = 1;
|
||
|
||
this.NeedScrollToTargetFlag = false;
|
||
|
||
this.TargetHtmlElement = null;
|
||
this.TargetHtmlElementBlock = false; // true - block, false - visibility
|
||
this.TargetHtmlElementLeft = 0;
|
||
this.TargetHtmlElementTop = 0;
|
||
|
||
this.CollaborativeTargets = [];
|
||
this.CollaborativeTargetsUpdateTasks = [];
|
||
|
||
this.m_bIsBreakRecalculate = false;
|
||
|
||
this.m_bIsSelection = false;
|
||
this.m_bIsSearching = false;
|
||
this.m_lCountRect = 0;
|
||
|
||
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.TableOutlineDr = new CTableOutlineDr();
|
||
|
||
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.SelectionMatrix = null;
|
||
|
||
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.GuiCanvasTextProps = null;
|
||
this.GuiCanvasTextPropsId = "gui_textprops_canvas_id";
|
||
this.GuiLastTextProps = null;
|
||
|
||
this.GuiCanvasFillTOCParentId = "";
|
||
this.GuiCanvasFillTOC = null;
|
||
|
||
this.TableStylesLastLook = null;
|
||
this.LastParagraphMargins = null;
|
||
|
||
this.TableStylesCheckLook = null;
|
||
this.TableStylesCheckLookFlag = false;
|
||
|
||
this.InlineTextTrackEnabled = false;
|
||
this.InlineTextTrack = null;
|
||
this.InlineTextTrackPage = -1;
|
||
|
||
this.AutoShapesTrack = null;
|
||
this.AutoShapesTrackLockPageNum = -1;
|
||
|
||
this.Overlay = null;
|
||
this.IsTextMatrixUse = false;
|
||
this.IsTextSelectionOutline = false;
|
||
|
||
this.OverlaySelection2 = {};
|
||
|
||
this.HorVerAnchors = [];
|
||
|
||
this.MathMenuLoad = false;
|
||
|
||
this.UpdateRulerStateFlag = false;
|
||
this.UpdateRulerStateParams = [];
|
||
|
||
this.ContentControlObjects = [];
|
||
this.ContentControlObjectsLast = [];
|
||
this.ContentControlObjectState = -1;
|
||
this.ContentControlSmallChangesCheck = { X: 0, Y: 0, Page: 0, Min: 2, IsSmall : true };
|
||
|
||
// массивы ректов для поиска
|
||
this._search_HdrFtr_All = []; // Поиск в колонтитуле, который находится на всех страницах
|
||
this._search_HdrFtr_All_no_First = []; // Поиск в колонтитуле, который находится на всех страницах, кроме первой
|
||
this._search_HdrFtr_First = []; // Поиск в колонтитуле, который находится только на первой странице
|
||
this._search_HdrFtr_Even = []; // Поиск в колонтитуле, который находится только на нечетных страницах
|
||
this._search_HdrFtr_Odd = []; // Поиск в колонтитуле, который находится только на четных страницах, включая первую
|
||
this._search_HdrFtr_Odd_no_First = []; // Поиск в колонтитуле, который находится только на нечетных страницах, кроме первой
|
||
|
||
this.showTarget = function (isShow)
|
||
{
|
||
if (this.TargetHtmlElementBlock)
|
||
this.TargetHtmlElement.style.display = isShow ? "display" : "none";
|
||
else
|
||
this.TargetHtmlElement.style.visibility = isShow ? "visible" : "hidden";
|
||
};
|
||
this.isShowTarget = function ()
|
||
{
|
||
if (this.TargetHtmlElementBlock)
|
||
return (this.TargetHtmlElement.style.display == "display") ? true : false;
|
||
else
|
||
return (this.TargetHtmlElement.style.visibility == "visible") ? true : false;
|
||
};
|
||
|
||
this.Start_CollaborationEditing = function ()
|
||
{
|
||
this.IsLockObjectsEnable = true;
|
||
this.m_oWordControl.OnRePaintAttack();
|
||
}
|
||
this.SetCursorType = function (sType, Data)
|
||
{
|
||
if ("" == this.m_sLockedCursorType)
|
||
{
|
||
if (AscCommon.c_oAscFormatPainterState.kOff !== this.m_oWordControl.m_oApi.isPaintFormat && "text" == sType)
|
||
this.m_oWordControl.m_oMainContent.HtmlElement.style.cursor = AscCommon.g_oHtmlCursor.value(AscCommon.kCurFormatPainterWord);
|
||
else if (this.m_oWordControl.m_oApi.isMarkerFormat && "text" == sType)
|
||
this.m_oWordControl.m_oMainContent.HtmlElement.style.cursor = AscCommon.g_oHtmlCursor.value("de-markerformat");
|
||
else
|
||
this.m_oWordControl.m_oMainContent.HtmlElement.style.cursor = AscCommon.g_oHtmlCursor.value(sType);
|
||
}
|
||
else
|
||
this.m_oWordControl.m_oMainContent.HtmlElement.style.cursor = AscCommon.g_oHtmlCursor.value(this.m_sLockedCursorType);
|
||
|
||
if ("undefined" === typeof(Data) || null === Data)
|
||
Data = new AscCommon.CMouseMoveData();
|
||
|
||
editor.sync_MouseMoveCallback(Data);
|
||
}
|
||
this.LockCursorType = function (sType)
|
||
{
|
||
this.m_sLockedCursorType = sType;
|
||
this.m_oWordControl.m_oMainContent.HtmlElement.style.cursor = AscCommon.g_oHtmlCursor.value(this.m_sLockedCursorType);
|
||
}
|
||
this.LockCursorTypeCur = function ()
|
||
{
|
||
this.m_sLockedCursorType = this.m_oWordControl.m_oMainContent.HtmlElement.style.cursor;
|
||
}
|
||
this.UnlockCursorType = function ()
|
||
{
|
||
this.m_sLockedCursorType = "";
|
||
}
|
||
|
||
this.OnStartRecalculate = function (pageCount)
|
||
{
|
||
if (!this.m_oWordControl.MobileTouchManager)
|
||
this.TableOutlineDr.TableOutline = null;
|
||
|
||
if (this.m_oWordControl)
|
||
this.m_oWordControl.m_oApi.checkLastWork();
|
||
|
||
this.m_lCountCalculatePages = pageCount;
|
||
//console.log("start " + this.m_lCountCalculatePages);
|
||
|
||
if (this.m_oWordControl && this.m_oWordControl.MobileTouchManager)
|
||
this.m_oWordControl.MobileTouchManager.ClearContextMenu();
|
||
|
||
this.m_bIsDocumentCalculating = true;
|
||
}
|
||
|
||
this.OnRepaintPage = function (index)
|
||
{
|
||
if (this.m_oWordControl)
|
||
this.m_oWordControl.m_oApi.checkLastWork();
|
||
|
||
var page = this.m_arrPages[index];
|
||
if (!page)
|
||
return;
|
||
|
||
page.drawingPage.SetRepaint(this.m_oCacheManager);
|
||
|
||
// перерисовать, если только страница видна на экране
|
||
if (index >= this.m_lDrawingFirst && index <= this.m_lDrawingEnd)
|
||
{
|
||
this.m_oWordControl.OnScroll();
|
||
}
|
||
}
|
||
|
||
this.OnRecalculatePage = function (index, pageObject)
|
||
{
|
||
this.m_bIsDocumentCalculating = true;
|
||
|
||
editor.sendEvent("asc_onDocumentChanged");
|
||
if (true === this.m_bIsSearching)
|
||
{
|
||
this.SearchClear();
|
||
this.m_oWordControl.OnUpdateOverlay();
|
||
}
|
||
|
||
if (this.m_bIsBreakRecalculate)
|
||
{
|
||
this.m_bIsBreakRecalculate = false;
|
||
this.m_lCountCalculatePages = index;
|
||
}
|
||
|
||
this.m_lCountCalculatePages = index + 1;
|
||
//console.log("calc " + this.m_lCountCalculatePages);
|
||
|
||
/*
|
||
if (index >= this.m_lPagesCount)
|
||
{
|
||
this.m_arrPages[index] = new CPage();
|
||
}
|
||
*/
|
||
if (undefined === this.m_arrPages[index])
|
||
this.m_arrPages[index] = new CPage();
|
||
|
||
var page = this.m_arrPages[index];
|
||
|
||
page.width_mm = pageObject.Width;
|
||
page.height_mm = pageObject.Height;
|
||
|
||
page.margin_left = pageObject.Margins.Left;
|
||
page.margin_top = pageObject.Margins.Top;
|
||
page.margin_right = pageObject.Margins.Right;
|
||
page.margin_bottom = pageObject.Margins.Bottom;
|
||
|
||
page.index = index;
|
||
|
||
page.drawingPage.SetRepaint(this.m_oCacheManager);
|
||
|
||
// теперь если эта страница на экране - то нужно вызвать отрисовку
|
||
if (index >= this.m_lDrawingFirst && index <= this.m_lDrawingEnd)
|
||
{
|
||
this.m_oWordControl.OnScroll();
|
||
}
|
||
|
||
if (this.m_lCountCalculatePages > (this.m_lPagesCount + 50) || (0 == this.m_lPagesCount && 0 != this.m_lCountCalculatePages))
|
||
{
|
||
this.OnEndRecalculate(false);
|
||
}
|
||
}
|
||
|
||
this.OnEndRecalculate = function (isFull, isBreak)
|
||
{
|
||
if (this.m_oWordControl)
|
||
this.m_oWordControl.m_oApi.checkLastWork();
|
||
|
||
if (undefined != isBreak)
|
||
{
|
||
this.m_lCountCalculatePages = this.m_lPagesCount;
|
||
}
|
||
|
||
for (var index = this.m_lCountCalculatePages; index < this.m_lPagesCount; index++)
|
||
{
|
||
var page = this.m_arrPages[index];
|
||
page.drawingPage.SetRepaint(this.m_oCacheManager);
|
||
}
|
||
|
||
this.m_bIsBreakRecalculate = (isFull === true) ? false : true;
|
||
if (isFull)
|
||
{
|
||
if (this.m_lPagesCount > this.m_lCountCalculatePages)
|
||
{
|
||
this.m_arrPages.splice(this.m_lCountCalculatePages, this.m_lPagesCount - this.m_lCountCalculatePages);
|
||
}
|
||
|
||
this.m_lPagesCount = this.m_lCountCalculatePages;
|
||
this.m_oWordControl.CalculateDocumentSize();
|
||
/*
|
||
if (true === this.m_bIsUpdateDocSize)
|
||
{
|
||
this.m_oWordControl.OnScroll();
|
||
this.m_oWordControl.OnUpdateSelection();
|
||
}
|
||
*/
|
||
}
|
||
else if ((this.m_lPagesCount + 50) < this.m_lCountCalculatePages)
|
||
{
|
||
this.m_lPagesCount = this.m_lCountCalculatePages;
|
||
this.m_oWordControl.CalculateDocumentSize();
|
||
}
|
||
else if (0 == this.m_lPagesCount && 0 != this.m_lCountCalculatePages)
|
||
{
|
||
this.m_lPagesCount = this.m_lCountCalculatePages;
|
||
this.m_oWordControl.CalculateDocumentSize();
|
||
}
|
||
|
||
//if (this.m_lCurrentPage >= this.m_lPagesCount)
|
||
// this.m_lCurrentPage = this.m_lPagesCount - 1;
|
||
if (true === isBreak || isFull)
|
||
{
|
||
//this.m_oWordControl.m_oLogicDocument.RecalculateCurPos();
|
||
this.m_lCurrentPage = this.m_oWordControl.m_oLogicDocument.Get_CurPage();
|
||
this.m_oWordControl.m_oApi.sendEvent("asc_onEndCalculate");
|
||
this.m_bIsDocumentCalculating = false;
|
||
|
||
window.setTimeout(function() {
|
||
editor.WordControl.onMouseMove(undefined, undefined);
|
||
}, 1);
|
||
}
|
||
|
||
if (-1 != this.m_lCurrentPage)
|
||
{
|
||
this.m_oWordControl.m_oApi.sync_currentPageCallback(this.m_lCurrentPage);
|
||
this.m_oWordControl.m_oApi.sync_countPagesCallback(this.m_lPagesCount);
|
||
|
||
var bIsSendCurPage = true;
|
||
if (this.m_oWordControl.m_oLogicDocument && this.m_oWordControl.m_oLogicDocument.DrawingObjects)
|
||
{
|
||
var param = this.m_oWordControl.m_oLogicDocument.DrawingObjects.isNeedUpdateRulers();
|
||
if (true === param)
|
||
{
|
||
bIsSendCurPage = false;
|
||
this.m_oWordControl.SetCurrentPage(false);
|
||
}
|
||
}
|
||
|
||
if (bIsSendCurPage && this.FrameRect.IsActive)
|
||
{
|
||
bIsSendCurPage = false;
|
||
this.m_oWordControl.SetCurrentPage(false);
|
||
}
|
||
|
||
if (bIsSendCurPage)
|
||
{
|
||
this.m_oWordControl.SetCurrentPage(false);
|
||
}
|
||
}
|
||
|
||
if (isFull)
|
||
{
|
||
this.m_oWordControl.OnScroll();
|
||
|
||
if (this.m_arPrintingWaitEndRecalculate)
|
||
this.m_oWordControl.m_oApi._downloadAs.apply(this.m_oWordControl.m_oApi, this.m_arPrintingWaitEndRecalculate);
|
||
}
|
||
|
||
//console.log("end " + this.m_lCountCalculatePages + "," + isFull + "," + isBreak);
|
||
}
|
||
|
||
this.ChangePageAttack = function (pageIndex)
|
||
{
|
||
if (pageIndex < this.m_lDrawingFirst || pageIndex > this.m_lDrawingEnd)
|
||
return;
|
||
|
||
this.StopRenderingPage(pageIndex);
|
||
this.m_oWordControl.OnScroll();
|
||
}
|
||
|
||
this.CheckPagesSizeMaximum = function(_w, _h)
|
||
{
|
||
var w = _w;
|
||
var h = _h;
|
||
|
||
// заглушка под мобильную версию (iPad не рисует большие картинки (наверное страховка по памяти))
|
||
if (g_bIsMobile)
|
||
{
|
||
var _mobile_max = 2500;
|
||
if (w > _mobile_max || h > _mobile_max)
|
||
{
|
||
if (w > h)
|
||
{
|
||
h = (h * _mobile_max / w) >> 0;
|
||
w = _mobile_max;
|
||
}
|
||
else
|
||
{
|
||
w = (w * _mobile_max / h) >> 0;
|
||
h = _mobile_max;
|
||
}
|
||
}
|
||
}
|
||
|
||
return [w, h];
|
||
}
|
||
|
||
this.CheckRecalculatePage = function (width, height, pageIndex)
|
||
{
|
||
var _drawingPage = this.m_arrPages[pageIndex].drawingPage;
|
||
var isUnlock = false;
|
||
|
||
if (_drawingPage.cachedImage != null && _drawingPage.cachedImage.image != null)
|
||
{
|
||
var _check = this.CheckPagesSizeMaximum(width, height);
|
||
if (_check[0] != _drawingPage.cachedImage.image.width || _check[1] != _drawingPage.cachedImage.image.height)
|
||
isUnlock = true;
|
||
}
|
||
|
||
if (_drawingPage.IsRecalculate)
|
||
{
|
||
if (this.IsFreezePage(pageIndex))
|
||
{
|
||
// убрал выкидывание страницы. лишнее это. пусть всегда рисуется старая, пока не перерисуем
|
||
//if ((Math.abs(_drawingPage.RecalculateTime - (new Date().getTime())) > 500 /*0.5 sec*/))
|
||
// isUnlock = true;
|
||
}
|
||
else
|
||
{
|
||
isUnlock = true;
|
||
}
|
||
}
|
||
|
||
if (isUnlock)
|
||
_drawingPage.UnLock(this.m_oCacheManager);
|
||
}
|
||
|
||
this.StartRenderingPage = function (pageIndex)
|
||
{
|
||
if (true === this.IsFreezePage(pageIndex))
|
||
{
|
||
return;
|
||
}
|
||
|
||
var page = this.m_arrPages[pageIndex];
|
||
|
||
var dKoef = (this.m_oWordControl.m_nZoomValue * g_dKoef_mm_to_pix / 100);
|
||
|
||
var w = (page.width_mm * dKoef + 0.5) >> 0;
|
||
var h = (page.height_mm * dKoef + 0.5) >> 0;
|
||
|
||
if (this.m_oWordControl.bIsRetinaSupport)
|
||
{
|
||
w = AscCommon.AscBrowser.convertToRetinaValue(w, true);
|
||
h = AscCommon.AscBrowser.convertToRetinaValue(h, true);
|
||
}
|
||
|
||
var _check = this.CheckPagesSizeMaximum(w, h);
|
||
w = _check[0];
|
||
h = _check[1];
|
||
|
||
page.drawingPage.UnLock(this.m_oCacheManager);
|
||
page.drawingPage.cachedImage = this.m_oCacheManager.Lock(w, h);
|
||
|
||
//var StartTime = new Date().getTime();
|
||
|
||
// теперь берем графикс
|
||
var g = new AscCommon.CGraphics();
|
||
g.init(page.drawingPage.cachedImage.image.ctx, w, h, page.width_mm, page.height_mm);
|
||
g.m_oFontManager = AscCommon.g_fontManager;
|
||
|
||
g.transform(1, 0, 0, 1, 0, 0);
|
||
|
||
if (null == this.m_oDocumentRenderer)
|
||
this.m_oLogicDocument.DrawPage(pageIndex, g);
|
||
else
|
||
this.m_oDocumentRenderer.drawPage(pageIndex, g);
|
||
|
||
if (g_page_outline_inner)
|
||
{
|
||
var context = page.drawingPage.cachedImage.image.ctx;
|
||
|
||
context.strokeStyle = GlobalSkin.PageOutline;
|
||
context.lineWidth = 1;
|
||
|
||
context.beginPath();
|
||
context.moveTo(0.5, 0.5);
|
||
context.lineTo(w - 0.5, 0.5);
|
||
context.lineTo(w - 0.5, h - 0.5);
|
||
context.lineTo(0.5, h - 0.5);
|
||
context.closePath();
|
||
context.stroke();
|
||
context.beginPath();
|
||
}
|
||
|
||
if (this.m_oWordControl.m_oApi.watermarkDraw)
|
||
this.m_oWordControl.m_oApi.watermarkDraw.Draw(page.drawingPage.cachedImage.image.ctx, w, h);
|
||
|
||
//var EndTime = new Date().getTime();
|
||
|
||
//alert("" + ((EndTime - StartTime) / 1000));
|
||
}
|
||
|
||
this.IsFreezePage = function (pageIndex)
|
||
{
|
||
if (pageIndex >= 0 && (pageIndex < Math.min(this.m_lCountCalculatePages, this.m_lPagesCount)))
|
||
{
|
||
if (this.m_oLogicDocument)
|
||
{
|
||
if (pageIndex >= this.m_oLogicDocument.Pages.length)
|
||
return true;
|
||
else if (!this.m_oLogicDocument.CanDrawPage(pageIndex))
|
||
return true;
|
||
}
|
||
return false;
|
||
}
|
||
return true;
|
||
}
|
||
|
||
this.RenderDocument = function (Renderer)
|
||
{
|
||
for (var i = 0; i < this.m_lPagesCount; i++)
|
||
{
|
||
var page = this.m_arrPages[i];
|
||
Renderer.BeginPage(page.width_mm, page.height_mm);
|
||
this.m_oLogicDocument.DrawPage(i, Renderer);
|
||
Renderer.EndPage();
|
||
}
|
||
}
|
||
|
||
this.ToRenderer = function ()
|
||
{
|
||
var Renderer = new AscCommon.CDocumentRenderer();
|
||
Renderer.InitPicker(AscCommon.g_oTextMeasurer.m_oManager);
|
||
Renderer.VectorMemoryForPrint = new AscCommon.CMemory();
|
||
var old_marks = this.m_oWordControl.m_oApi.ShowParaMarks;
|
||
this.m_oWordControl.m_oApi.ShowParaMarks = false;
|
||
this.RenderDocument(Renderer);
|
||
this.m_oWordControl.m_oApi.ShowParaMarks = old_marks;
|
||
var ret = Renderer.Memory.GetBase64Memory();
|
||
//console.log(ret);
|
||
return ret;
|
||
}
|
||
|
||
this.CheckPrint = function(params)
|
||
{
|
||
if (!this.m_oWordControl.m_oLogicDocument)
|
||
return false;
|
||
|
||
if (this.m_arPrintingWaitEndRecalculate)
|
||
{
|
||
this.m_oWordControl.m_oApi.sync_EndAction(Asc.c_oAscAsyncActionType.BlockInteraction, params[2]);
|
||
this.m_arPrintingWaitEndRecalculate = null;
|
||
return false;
|
||
}
|
||
|
||
if (!this.m_bIsDocumentCalculating)
|
||
return false;
|
||
|
||
this.m_arPrintingWaitEndRecalculate = params;
|
||
this.m_oWordControl.m_oApi.sync_StartAction(Asc.c_oAscAsyncActionType.BlockInteraction, params[2]);
|
||
return true;
|
||
}
|
||
|
||
this.ToRenderer2 = function ()
|
||
{
|
||
var Renderer = new AscCommon.CDocumentRenderer();
|
||
Renderer.InitPicker(AscCommon.g_oTextMeasurer.m_oManager);
|
||
|
||
var old_marks = this.m_oWordControl.m_oApi.ShowParaMarks;
|
||
this.m_oWordControl.m_oApi.ShowParaMarks = false;
|
||
|
||
var ret = "";
|
||
for (var i = 0; i < this.m_lPagesCount; i++)
|
||
{
|
||
var page = this.m_arrPages[i];
|
||
Renderer.BeginPage(page.width_mm, page.height_mm);
|
||
this.m_oLogicDocument.DrawPage(i, Renderer);
|
||
Renderer.EndPage();
|
||
|
||
ret += Renderer.Memory.GetBase64Memory();
|
||
Renderer.Memory.Seek(0);
|
||
}
|
||
|
||
this.m_oWordControl.m_oApi.ShowParaMarks = old_marks;
|
||
//console.log(ret);
|
||
return ret;
|
||
}
|
||
this.ToRendererPart = function (noBase64)
|
||
{
|
||
var watermark = this.m_oWordControl.m_oApi.watermarkDraw;
|
||
|
||
var pagescount = Math.min(this.m_lPagesCount, this.m_lCountCalculatePages);
|
||
|
||
if (-1 == this.m_lCurrentRendererPage)
|
||
{
|
||
if (watermark)
|
||
watermark.StartRenderer();
|
||
|
||
this.m_oDocRenderer = new AscCommon.CDocumentRenderer();
|
||
this.m_oDocRenderer.InitPicker(AscCommon.g_oTextMeasurer.m_oManager);
|
||
this.m_oDocRenderer.VectorMemoryForPrint = new AscCommon.CMemory();
|
||
this.m_lCurrentRendererPage = 0;
|
||
this.m_bOldShowMarks = this.m_oWordControl.m_oApi.ShowParaMarks;
|
||
this.m_oWordControl.m_oApi.ShowParaMarks = false;
|
||
}
|
||
|
||
var start = this.m_lCurrentRendererPage;
|
||
var end = pagescount - 1;
|
||
|
||
var renderer = this.m_oDocRenderer;
|
||
renderer.Memory.Seek(0);
|
||
renderer.VectorMemoryForPrint.ClearNoAttack();
|
||
|
||
for (var i = start; i <= end; i++)
|
||
{
|
||
var page = this.m_arrPages[i];
|
||
renderer.BeginPage(page.width_mm, page.height_mm);
|
||
this.m_oLogicDocument.DrawPage(i, renderer);
|
||
|
||
if (watermark)
|
||
watermark.DrawOnRenderer(renderer, page.width_mm, page.height_mm);
|
||
|
||
renderer.EndPage();
|
||
}
|
||
|
||
this.m_lCurrentRendererPage = end + 1;
|
||
|
||
if (this.m_lCurrentRendererPage >= pagescount)
|
||
{
|
||
if (watermark)
|
||
watermark.EndRenderer();
|
||
|
||
this.m_lCurrentRendererPage = -1;
|
||
this.m_oDocRenderer = null;
|
||
this.m_oWordControl.m_oApi.ShowParaMarks = this.m_bOldShowMarks;
|
||
}
|
||
|
||
if (noBase64) {
|
||
return renderer.Memory.GetData();
|
||
} else {
|
||
return renderer.Memory.GetBase64Memory();
|
||
}
|
||
}
|
||
|
||
this.StopRenderingPage = function (pageIndex)
|
||
{
|
||
if (null != this.m_oDocumentRenderer)
|
||
this.m_oDocumentRenderer.stopRenderingPage(pageIndex);
|
||
|
||
this.m_arrPages[pageIndex].drawingPage.UnLock(this.m_oCacheManager);
|
||
}
|
||
|
||
this.ClearCachePages = function ()
|
||
{
|
||
for (var i = 0; i < this.m_lPagesCount; i++)
|
||
{
|
||
var page = this.m_arrPages[i];
|
||
if (page)
|
||
page.drawingPage.SetRepaint(this.m_oCacheManager);
|
||
}
|
||
}
|
||
|
||
this.CloseFile = function ()
|
||
{
|
||
this.ClearCachePages();
|
||
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;
|
||
}
|
||
|
||
this.CheckRasterImageOnScreen = function (src)
|
||
{
|
||
if (null == this.m_oWordControl.m_oLogicDocument)
|
||
return;
|
||
|
||
if (this.m_lDrawingFirst == -1 || this.m_lDrawingEnd == -1)
|
||
return;
|
||
|
||
var bIsRaster = false;
|
||
var _checker = this.m_oWordControl.m_oLogicDocument.DrawingObjects;
|
||
for (var i = this.m_lDrawingFirst; i <= this.m_lDrawingEnd; i++)
|
||
{
|
||
var _imgs = _checker.getAllRasterImagesOnPage(i);
|
||
|
||
var _len = _imgs.length;
|
||
for (var j = 0; j < _len; j++)
|
||
{
|
||
if (AscCommon.getFullImageSrc2(_imgs[j]) == src)
|
||
{
|
||
this.StopRenderingPage(i);
|
||
bIsRaster = true;
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
|
||
if (bIsRaster)
|
||
this.m_oWordControl.OnScroll();
|
||
}
|
||
|
||
this.FirePaint = function ()
|
||
{
|
||
this.m_oWordControl.OnScroll();
|
||
}
|
||
|
||
this.ConvertCoordsFromCursor = function (x, y, bIsRul)
|
||
{
|
||
var _x = x;
|
||
var _y = y;
|
||
|
||
var dKoef = (100 * g_dKoef_pix_to_mm / this.m_oWordControl.m_nZoomValue);
|
||
|
||
if (undefined == bIsRul)
|
||
{
|
||
var _xOffset = this.m_oWordControl.X;
|
||
var _yOffset = this.m_oWordControl.Y;
|
||
|
||
/*
|
||
if (true == this.m_oWordControl.m_bIsRuler)
|
||
{
|
||
_xOffset += (5 * g_dKoef_mm_to_pix);
|
||
_yOffset += (7 * g_dKoef_mm_to_pix);
|
||
}
|
||
*/
|
||
|
||
_x = x - _xOffset;
|
||
_y = y - _yOffset;
|
||
}
|
||
|
||
for (var i = this.m_lDrawingFirst; i <= this.m_lDrawingEnd; i++)
|
||
{
|
||
var rect = this.m_arrPages[i].drawingPage;
|
||
|
||
if ((rect.left <= _x) && (_x <= rect.right) && (rect.top <= _y) && (_y <= rect.bottom))
|
||
{
|
||
var x_mm = (_x - rect.left) * dKoef;
|
||
var y_mm = (_y - rect.top) * dKoef;
|
||
|
||
return {X: x_mm, Y: y_mm, Page: rect.pageIndex, DrawPage: i};
|
||
}
|
||
}
|
||
|
||
return {X: 0, Y: 0, Page: -1, DrawPage: -1};
|
||
}
|
||
|
||
this.ConvertCoordsFromCursorPage = function (x, y, page, bIsRul)
|
||
{
|
||
var _x = x;
|
||
var _y = y;
|
||
|
||
var dKoef = (100 * g_dKoef_pix_to_mm / this.m_oWordControl.m_nZoomValue);
|
||
|
||
if (undefined == bIsRul)
|
||
{
|
||
var _xOffset = this.m_oWordControl.X;
|
||
var _yOffset = this.m_oWordControl.Y;
|
||
|
||
/*
|
||
if (true == this.m_oWordControl.m_bIsRuler)
|
||
{
|
||
_xOffset += (5 * g_dKoef_mm_to_pix);
|
||
_yOffset += (7 * g_dKoef_mm_to_pix);
|
||
}
|
||
*/
|
||
|
||
_x = x - _xOffset;
|
||
_y = y - _yOffset;
|
||
}
|
||
|
||
if (page < 0 || page >= this.m_lPagesCount)
|
||
return {X: 0, Y: 0, Page: -1, DrawPage: -1};
|
||
|
||
var rect = this.m_arrPages[page].drawingPage;
|
||
var x_mm = (_x - rect.left) * dKoef;
|
||
var y_mm = (_y - rect.top) * dKoef;
|
||
|
||
return {X: x_mm, Y: y_mm, Page: rect.pageIndex, DrawPage: page};
|
||
}
|
||
|
||
this.ConvertCoordsToAnotherPage = function (x, y, pageCoord, pageNeed)
|
||
{
|
||
if (pageCoord < 0 || pageCoord >= this.m_lPagesCount || pageNeed < 0 || pageNeed >= this.m_lPagesCount)
|
||
return {X: 0, Y: 0, Error: true};
|
||
|
||
var dKoef1 = this.m_oWordControl.m_nZoomValue * g_dKoef_mm_to_pix / 100;
|
||
var dKoef2 = 100 * g_dKoef_pix_to_mm / this.m_oWordControl.m_nZoomValue;
|
||
|
||
var page1 = this.m_arrPages[pageCoord].drawingPage;
|
||
var page2 = this.m_arrPages[pageNeed].drawingPage;
|
||
|
||
var xCursor = page1.left + x * dKoef1;
|
||
var yCursor = page1.top + y * dKoef1;
|
||
|
||
var _x = (xCursor - page2.left) * dKoef2;
|
||
var _y = (yCursor - page2.top) * dKoef2;
|
||
|
||
return {X: _x, Y: _y, Error: false};
|
||
}
|
||
|
||
this.ConvertCoordsFromCursor2 = function (x, y, bIsRul, bIsNoNormalize, _zoomVal)
|
||
{
|
||
var _x = x;
|
||
var _y = y;
|
||
|
||
var dKoef = (100 * g_dKoef_pix_to_mm / this.m_oWordControl.m_nZoomValue);
|
||
if (undefined !== _zoomVal)
|
||
dKoef = (100 * g_dKoef_pix_to_mm / _zoomVal);
|
||
|
||
if (undefined == bIsRul)
|
||
{
|
||
var _xOffset = this.m_oWordControl.X;
|
||
var _yOffset = this.m_oWordControl.Y;
|
||
|
||
if (true == this.m_oWordControl.m_bIsRuler)
|
||
{
|
||
_xOffset += (5 * g_dKoef_mm_to_pix);
|
||
_yOffset += (7 * g_dKoef_mm_to_pix);
|
||
}
|
||
|
||
_x = x - _xOffset;
|
||
_y = y - _yOffset;
|
||
}
|
||
|
||
if (-1 == this.m_lDrawingFirst || -1 == this.m_lDrawingEnd)
|
||
return {X: 0, Y: 0, Page: -1, DrawPage: -1};
|
||
|
||
for (var i = this.m_lDrawingFirst; i <= this.m_lDrawingEnd; i++)
|
||
{
|
||
var rect = this.m_arrPages[i].drawingPage;
|
||
|
||
if ((rect.left <= _x) && (_x <= rect.right) && (rect.top <= _y) && (_y <= rect.bottom))
|
||
{
|
||
var x_mm = (_x - rect.left) * dKoef;
|
||
var y_mm = (_y - rect.top) * dKoef;
|
||
|
||
if (x_mm > (this.m_arrPages[i].width_mm + 10))
|
||
x_mm = this.m_arrPages[i].width_mm + 10;
|
||
if (x_mm < -10)
|
||
x_mm = -10;
|
||
|
||
return {X: x_mm, Y: y_mm, Page: rect.pageIndex, DrawPage: i};
|
||
}
|
||
}
|
||
|
||
// в страницу не попали. вторая попытка - это попробовать найти страницу по вертикали
|
||
var _start = Math.max(this.m_lDrawingFirst - 1, 0);
|
||
var _end = Math.min(this.m_lDrawingEnd + 1, this.m_lPagesCount - 1);
|
||
for (var i = _start; i <= _end; i++)
|
||
{
|
||
var rect = this.m_arrPages[i].drawingPage;
|
||
|
||
var bIsCurrent = false;
|
||
if (i == this.m_lDrawingFirst && rect.top > _y)
|
||
{
|
||
bIsCurrent = true;
|
||
}
|
||
else if ((rect.top <= _y) && (_y <= rect.bottom))
|
||
{
|
||
bIsCurrent = true;
|
||
}
|
||
else if (i != this.m_lPagesCount - 1)
|
||
{
|
||
if (_y > rect.bottom && _y < this.m_arrPages[i + 1].drawingPage.top)
|
||
bIsCurrent = true;
|
||
}
|
||
else if (_y < rect.top)
|
||
{
|
||
// либо вышли раньше, либо это самая первая видимая страница
|
||
bIsCurrent = true;
|
||
}
|
||
else if (i == this.m_lDrawingEnd)
|
||
{
|
||
if (_y > rect.bottom)
|
||
bIsCurrent = true;
|
||
}
|
||
|
||
if (bIsCurrent)
|
||
{
|
||
var x_mm = (_x - rect.left) * dKoef;
|
||
var y_mm = (_y - rect.top) * dKoef;
|
||
|
||
if (true === bIsNoNormalize)
|
||
{
|
||
if (x_mm > (this.m_arrPages[i].width_mm + 10))
|
||
x_mm = this.m_arrPages[i].width_mm + 10;
|
||
if (x_mm < -10)
|
||
x_mm = -10;
|
||
}
|
||
|
||
return {X: x_mm, Y: y_mm, Page: rect.pageIndex, DrawPage: i};
|
||
}
|
||
}
|
||
|
||
return {X: 0, Y: 0, Page: -1, DrawPage: -1};
|
||
}
|
||
|
||
this.ConvetToPageCoords = function (x, y, pageIndex)
|
||
{
|
||
if (pageIndex < 0 || pageIndex >= this.m_lPagesCount)
|
||
{
|
||
return {X: 0, Y: 0, Page: pageIndex, Error: true};
|
||
}
|
||
var dKoef = (100 * g_dKoef_pix_to_mm / this.m_oWordControl.m_nZoomValue);
|
||
var rect = this.m_arrPages[pageIndex].drawingPage;
|
||
|
||
var _x = (x - rect.left) * dKoef;
|
||
var _y = (y - rect.top) * dKoef;
|
||
|
||
return {X: _x, Y: _y, Page: pageIndex, Error: false};
|
||
}
|
||
|
||
this.IsCursorInTableCur = function (x, y, page)
|
||
{
|
||
var _table = this.TableOutlineDr.TableOutline;
|
||
if (_table == null)
|
||
return false;
|
||
|
||
if (page != _table.PageNum)
|
||
return false;
|
||
|
||
var _dist = this.TableOutlineDr.image.width * g_dKoef_pix_to_mm;
|
||
_dist *= (100 / this.m_oWordControl.m_nZoomValue);
|
||
|
||
var _x = _table.X;
|
||
var _y = _table.Y;
|
||
var _r = _x + _table.W;
|
||
var _b = _y + _table.H;
|
||
|
||
if ((x > (_x - _dist)) && (x < _r) && (y > (_y - _dist)) && (y < _b))
|
||
{
|
||
if ((x < _x) || (y < _y))
|
||
{
|
||
this.TableOutlineDr.Counter = 0;
|
||
this.TableOutlineDr.bIsNoTable = false;
|
||
return true;
|
||
}
|
||
}
|
||
return false;
|
||
}
|
||
|
||
this.ConvertCoordsToCursorWR = function (x, y, pageIndex, transform, id_ruler_no_use)
|
||
{
|
||
var dKoef = (this.m_oWordControl.m_nZoomValue * g_dKoef_mm_to_pix / 100);
|
||
|
||
var _x = 0;
|
||
var _y = 0;
|
||
if (true == this.m_oWordControl.m_bIsRuler && (id_ruler_no_use !== false))
|
||
{
|
||
_x = 5 * g_dKoef_mm_to_pix;
|
||
_y = 7 * g_dKoef_mm_to_pix;
|
||
}
|
||
|
||
// теперь крутить всякие циклы нет смысла
|
||
if (pageIndex < 0 || pageIndex >= this.m_lPagesCount)
|
||
{
|
||
return {X: 0, Y: 0, Error: true};
|
||
}
|
||
|
||
var __x = x;
|
||
var __y = y;
|
||
if (transform)
|
||
{
|
||
__x = transform.TransformPointX(x, y);
|
||
__y = transform.TransformPointY(x, y);
|
||
}
|
||
|
||
var x_pix = (this.m_arrPages[pageIndex].drawingPage.left + __x * dKoef + _x) >> 0;
|
||
var y_pix = (this.m_arrPages[pageIndex].drawingPage.top + __y * dKoef + _y) >> 0;
|
||
|
||
return {X: x_pix, Y: y_pix, Error: false};
|
||
}
|
||
|
||
this.ConvertCoordsToCursor = function (x, y, pageIndex, bIsRul)
|
||
{
|
||
var dKoef = (this.m_oWordControl.m_nZoomValue * g_dKoef_mm_to_pix / 100);
|
||
|
||
var _x = 0;
|
||
var _y = 0;
|
||
if (true == this.m_oWordControl.m_bIsRuler)
|
||
{
|
||
if (undefined == bIsRul)
|
||
{
|
||
//_x = 5 * g_dKoef_mm_to_pix;
|
||
//_y = 7 * g_dKoef_mm_to_pix;
|
||
}
|
||
}
|
||
|
||
// теперь крутить всякие циклы нет смысла
|
||
if (pageIndex < 0 || pageIndex >= this.m_lPagesCount)
|
||
{
|
||
return {X: 0, Y: 0, Error: true};
|
||
}
|
||
|
||
var x_pix = (this.m_arrPages[pageIndex].drawingPage.left + x * dKoef + _x) >> 0;
|
||
var y_pix = (this.m_arrPages[pageIndex].drawingPage.top + y * dKoef + _y) >> 0;
|
||
|
||
return {X: x_pix, Y: y_pix, Error: false};
|
||
|
||
// old version
|
||
for (var i = this.m_lDrawingFirst; i <= this.m_lDrawingEnd; i++)
|
||
{
|
||
var rect = this.m_arrPages[i].drawingPage;
|
||
|
||
if (this.m_arrPages[i].pageIndex == pageIndex)
|
||
{
|
||
var x_pix = (rect.left + x * dKoef + _x) >> 0;
|
||
var y_pix = (rect.top + y * dKoef + _y) >> 0;
|
||
|
||
return {X: x_pix, Y: y_pix, Error: false};
|
||
}
|
||
}
|
||
|
||
return {X: 0, Y: 0, Error: true};
|
||
}
|
||
this.ConvertCoordsToCursor2 = function (x, y, pageIndex, bIsRul)
|
||
{
|
||
var dKoef = (this.m_oWordControl.m_nZoomValue * g_dKoef_mm_to_pix / 100);
|
||
|
||
var _x = 0;
|
||
var _y = 0;
|
||
if (true == this.m_oWordControl.m_bIsRuler)
|
||
{
|
||
if (undefined == bIsRul)
|
||
{
|
||
//_x = 5 * g_dKoef_mm_to_pix;
|
||
//_y = 7 * g_dKoef_mm_to_pix;
|
||
}
|
||
}
|
||
|
||
// теперь крутить всякие циклы нет смысла
|
||
if (pageIndex < 0 || pageIndex >= this.m_lPagesCount)
|
||
{
|
||
return {X: 0, Y: 0, Error: true};
|
||
}
|
||
|
||
var x_pix = (this.m_arrPages[pageIndex].drawingPage.left + x * dKoef + _x - 0.5) >> 0;
|
||
var y_pix = (this.m_arrPages[pageIndex].drawingPage.top + y * dKoef + _y - 0.5) >> 0;
|
||
|
||
return {X: x_pix, Y: y_pix, Error: false};
|
||
}
|
||
this.ConvertCoordsToCursor3 = function (x, y, pageIndex, isGlobal)
|
||
{
|
||
// теперь крутить всякие циклы нет смысла
|
||
if (pageIndex < 0 || pageIndex >= this.m_lPagesCount)
|
||
{
|
||
return {X: 0, Y: 0, Error: true};
|
||
}
|
||
|
||
var dKoef = (this.m_oWordControl.m_nZoomValue * g_dKoef_mm_to_pix / 100);
|
||
|
||
var _x = 0;
|
||
var _y = 0;
|
||
if (isGlobal)
|
||
{
|
||
_x = this.m_oWordControl.X;
|
||
_y = this.m_oWordControl.Y;
|
||
|
||
if (true == this.m_oWordControl.m_bIsRuler)
|
||
{
|
||
_x += 5 * g_dKoef_mm_to_pix;
|
||
_y += 7 * g_dKoef_mm_to_pix;
|
||
}
|
||
}
|
||
|
||
var x_pix = (this.m_arrPages[pageIndex].drawingPage.left + x * dKoef + _x + 0.5) >> 0;
|
||
var y_pix = (this.m_arrPages[pageIndex].drawingPage.top + y * dKoef + _y + 0.5) >> 0;
|
||
|
||
return {X: x_pix, Y: y_pix, Error: false};
|
||
}
|
||
|
||
this.ConvertCoordsToCursor4 = function (x, y, pageIndex)
|
||
{
|
||
// теперь крутить всякие циклы нет смысла
|
||
if (pageIndex < 0 || pageIndex >= this.m_lPagesCount)
|
||
{
|
||
return {X: 0, Y: 0, Error: true};
|
||
}
|
||
|
||
var dKoef = (this.m_oWordControl.m_nZoomValue * g_dKoef_mm_to_pix / 100);
|
||
|
||
var x_pix = (this.m_arrPages[pageIndex].drawingPage.left + x * dKoef + 0.5) >> 0;
|
||
var y_pix = (this.m_arrPages[pageIndex].drawingPage.top + y * dKoef + 0.5) >> 0;
|
||
|
||
return {X: x_pix, Y: y_pix, Error: false};
|
||
}
|
||
|
||
this.InitViewer = function ()
|
||
{
|
||
}
|
||
|
||
this.TargetStart = function ()
|
||
{
|
||
if (this.m_lTimerTargetId != -1)
|
||
clearInterval(this.m_lTimerTargetId);
|
||
this.m_lTimerTargetId = setInterval(oThis.DrawTarget, 500);
|
||
}
|
||
this.TargetEnd = function ()
|
||
{
|
||
//if (!this.TargetShowFlag)
|
||
// return;
|
||
|
||
this.TargetShowFlag = false;
|
||
this.TargetShowNeedFlag = false;
|
||
|
||
if (this.m_lTimerTargetId != -1)
|
||
{
|
||
clearInterval(this.m_lTimerTargetId);
|
||
this.m_lTimerTargetId = -1;
|
||
}
|
||
|
||
this.showTarget(false);
|
||
}
|
||
this.UpdateTargetNoAttack = function ()
|
||
{
|
||
if (null == this.m_oWordControl)
|
||
return;
|
||
|
||
this.CheckTargetDraw(this.m_dTargetX, this.m_dTargetY);
|
||
}
|
||
|
||
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 _oldW = this.TargetHtmlElement.width;
|
||
var _oldH = this.TargetHtmlElement.height;
|
||
|
||
var _newW = 2;
|
||
var _newH = (this.m_dTargetSize * this.m_oWordControl.m_nZoomValue * g_dKoef_mm_to_pix / 100) >> 0;
|
||
|
||
if (null != this.TextMatrix && !global_MatrixTransformer.IsIdentity2(this.TextMatrix))
|
||
{
|
||
var _x1 = this.TextMatrix.TransformPointX(x, y);
|
||
var _y1 = this.TextMatrix.TransformPointY(x, y);
|
||
|
||
var _x2 = this.TextMatrix.TransformPointX(x, y + this.m_dTargetSize);
|
||
var _y2 = this.TextMatrix.TransformPointY(x, y + this.m_dTargetSize);
|
||
|
||
var pos1 = this.ConvertCoordsToCursor2(_x1, _y1, this.m_lCurrentPage);
|
||
var pos2 = this.ConvertCoordsToCursor2(_x2, _y2, this.m_lCurrentPage);
|
||
|
||
_newW = (Math.abs(pos1.X - pos2.X) >> 0) + 1;
|
||
_newH = (Math.abs(pos1.Y - pos2.Y) >> 0) + 1;
|
||
|
||
if (2 > _newW)
|
||
_newW = 2;
|
||
if (2 > _newH)
|
||
_newH = 2;
|
||
|
||
if (_oldW == _newW && _oldH == _newH)
|
||
{
|
||
if (_newW != 2 && _newH != 2)
|
||
{
|
||
// просто очищаем
|
||
this.TargetHtmlElement.width = _newW;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
this.TargetHtmlElement.style.width = _newW + "px";
|
||
this.TargetHtmlElement.style.height = _newH + "px";
|
||
|
||
this.TargetHtmlElement.width = _newW;
|
||
this.TargetHtmlElement.height = _newH;
|
||
}
|
||
var ctx = this.TargetHtmlElement.getContext('2d');
|
||
|
||
if (_newW == 2 || _newH == 2)
|
||
{
|
||
ctx.fillStyle = this.GetTargetStyle();
|
||
ctx.fillRect(0, 0, _newW, _newH);
|
||
}
|
||
else
|
||
{
|
||
ctx.beginPath();
|
||
ctx.strokeStyle = this.GetTargetStyle();
|
||
ctx.lineWidth = 2;
|
||
|
||
if (((pos1.X - pos2.X) * (pos1.Y - pos2.Y)) >= 0)
|
||
{
|
||
ctx.moveTo(0, 0);
|
||
ctx.lineTo(_newW, _newH);
|
||
}
|
||
else
|
||
{
|
||
ctx.moveTo(0, _newH);
|
||
ctx.lineTo(_newW, 0);
|
||
}
|
||
|
||
ctx.stroke();
|
||
}
|
||
|
||
oThis.TargetHtmlElementLeft = Math.min(pos1.X, pos2.X) >> 0;
|
||
oThis.TargetHtmlElementTop = Math.min(pos1.Y, pos2.Y) >> 0;
|
||
if ((!oThis.m_oWordControl.MobileTouchManager && !AscCommon.AscBrowser.isSafariMacOs) || !AscCommon.AscBrowser.isWebkit)
|
||
{
|
||
oThis.TargetHtmlElement.style.left = oThis.TargetHtmlElementLeft + "px";
|
||
oThis.TargetHtmlElement.style.top = oThis.TargetHtmlElementTop + "px";
|
||
}
|
||
else
|
||
{
|
||
oThis.TargetHtmlElement.style.left = "0px";
|
||
oThis.TargetHtmlElement.style.top = "0px";
|
||
oThis.TargetHtmlElement.style["webkitTransform"] = "matrix(1, 0, 0, 1, " + oThis.TargetHtmlElementLeft + "," + oThis.TargetHtmlElementTop + ")";
|
||
}
|
||
}
|
||
else
|
||
{
|
||
if (_oldW == _newW && _oldH == _newH)
|
||
{
|
||
// просто очищаем
|
||
this.TargetHtmlElement.width = _newW;
|
||
}
|
||
else
|
||
{
|
||
this.TargetHtmlElement.style.width = _newW + "px";
|
||
this.TargetHtmlElement.style.height = _newH + "px";
|
||
|
||
this.TargetHtmlElement.width = _newW;
|
||
this.TargetHtmlElement.height = _newH;
|
||
}
|
||
|
||
var ctx = this.TargetHtmlElement.getContext('2d');
|
||
|
||
ctx.fillStyle = this.GetTargetStyle();
|
||
ctx.fillRect(0, 0, _newW, _newH);
|
||
|
||
if (null != this.TextMatrix)
|
||
{
|
||
x += this.TextMatrix.tx;
|
||
y += this.TextMatrix.ty;
|
||
}
|
||
|
||
var pos = this.ConvertCoordsToCursor2(x, y, this.m_lCurrentPage);
|
||
|
||
this.TargetHtmlElementLeft = pos.X >> 0;
|
||
this.TargetHtmlElementTop = pos.Y >> 0;
|
||
|
||
if ((!oThis.m_oWordControl.MobileTouchManager && !AscCommon.AscBrowser.isSafariMacOs) || !AscCommon.AscBrowser.isWebkit)
|
||
{
|
||
this.TargetHtmlElement.style.left = this.TargetHtmlElementLeft + "px";
|
||
this.TargetHtmlElement.style.top = this.TargetHtmlElementTop + "px";
|
||
}
|
||
else
|
||
{
|
||
oThis.TargetHtmlElement.style.left = "0px";
|
||
oThis.TargetHtmlElement.style.top = "0px";
|
||
oThis.TargetHtmlElement.style["webkitTransform"] = "matrix(1, 0, 0, 1, " + oThis.TargetHtmlElementLeft + "," + oThis.TargetHtmlElementTop + ")";
|
||
}
|
||
}
|
||
|
||
this.MoveTargetInInputContext();
|
||
};
|
||
|
||
this.MoveTargetInInputContext = function ()
|
||
{
|
||
if (AscCommon.g_inputContext)
|
||
AscCommon.g_inputContext.move(this.TargetHtmlElementLeft, this.TargetHtmlElementTop);
|
||
}
|
||
|
||
this.UpdateTargetTransform = function (matrix)
|
||
{
|
||
this.TextMatrix = matrix;
|
||
}
|
||
|
||
this.MultiplyTargetTransform = function (matrix)
|
||
{
|
||
if (!this.TextMatrix)
|
||
this.TextMatrix = matrix;
|
||
else if (matrix)
|
||
{
|
||
this.TextMatrix.Multiply(matrix, AscCommon.MATRIX_ORDER_PREPEND);
|
||
}
|
||
}
|
||
|
||
this.UpdateTarget = function (x, y, pageIndex)
|
||
{
|
||
if (this.m_oWordControl)
|
||
this.m_oWordControl.m_oApi.checkLastWork();
|
||
|
||
this.m_oWordControl.m_oLogicDocument.Set_TargetPos(x, y, pageIndex);
|
||
|
||
if(window["NATIVE_EDITOR_ENJINE"])
|
||
return;
|
||
|
||
if (this.UpdateTargetFromPaint === false && this.m_lCurrentPage != -1)
|
||
{
|
||
this.UpdateTargetCheck = true;
|
||
return;
|
||
}
|
||
|
||
var bNeedScrollToTarget = true;
|
||
if (this.m_dTargetX == x && this.m_dTargetY == y && this.m_lTargetPage == pageIndex)
|
||
bNeedScrollToTarget = false;
|
||
|
||
if (-1 != this.m_lTimerUpdateTargetID)
|
||
{
|
||
clearTimeout(this.m_lTimerUpdateTargetID);
|
||
this.m_lTimerUpdateTargetID = -1;
|
||
}
|
||
|
||
if (pageIndex >= this.m_arrPages.length)
|
||
return;
|
||
|
||
var bIsPageChanged = false;
|
||
if (this.m_lCurrentPage != pageIndex)
|
||
{
|
||
this.m_lCurrentPage = pageIndex;
|
||
this.m_oWordControl.SetCurrentPage2();
|
||
this.m_oWordControl.OnScroll();
|
||
bIsPageChanged = true;
|
||
}
|
||
|
||
var targetSize = Number(this.m_dTargetSize * this.m_oWordControl.m_nZoomValue * g_dKoef_mm_to_pix / 100);
|
||
|
||
var pos = null;
|
||
var __x = x;
|
||
var __y = y;
|
||
if (!this.TextMatrix)
|
||
{
|
||
pos = this.ConvertCoordsToCursor2(x, y, this.m_lCurrentPage);
|
||
}
|
||
else
|
||
{
|
||
__x = this.TextMatrix.TransformPointX(x, y);
|
||
__y = this.TextMatrix.TransformPointY(x, y);
|
||
|
||
pos = this.ConvertCoordsToCursor2(__x, __y, this.m_lCurrentPage);
|
||
}
|
||
|
||
//pos.Y -= targetSize;
|
||
|
||
if (true == pos.Error && (false == bIsPageChanged))
|
||
return;
|
||
|
||
// смотрим, виден ли курсор на экране
|
||
|
||
var _ww = this.m_oWordControl.m_oEditor.HtmlElement.width;
|
||
var _hh = this.m_oWordControl.m_oEditor.HtmlElement.height;
|
||
if (this.m_oWordControl.bIsRetinaSupport)
|
||
{
|
||
_ww /= AscCommon.AscBrowser.retinaPixelRatio;
|
||
_hh /= AscCommon.AscBrowser.retinaPixelRatio;
|
||
}
|
||
|
||
var boxX = 0;
|
||
var boxY = 0;
|
||
var boxR = _ww - 2;
|
||
var boxB = _hh - targetSize;
|
||
|
||
/*
|
||
if (true == this.m_oWordControl.m_bIsRuler)
|
||
{
|
||
boxX += Number(5 * g_dKoef_mm_to_pix);
|
||
boxY += Number(7 * g_dKoef_mm_to_pix);
|
||
boxR += Number(5 * g_dKoef_mm_to_pix);
|
||
boxB += Number(7 * g_dKoef_mm_to_pix);
|
||
}
|
||
*/
|
||
|
||
var nValueScrollHor = 0;
|
||
if (pos.X < boxX)
|
||
{
|
||
nValueScrollHor = this.m_oWordControl.GetHorizontalScrollTo(__x - 5, pageIndex);
|
||
}
|
||
if (pos.X > boxR)
|
||
{
|
||
var _mem = __x + 5 - g_dKoef_pix_to_mm * _ww * 100 / this.m_oWordControl.m_nZoomValue;
|
||
nValueScrollHor = this.m_oWordControl.GetHorizontalScrollTo(_mem, pageIndex);
|
||
}
|
||
|
||
var nValueScrollVer = 0;
|
||
if (pos.Y < boxY)
|
||
{
|
||
nValueScrollVer = this.m_oWordControl.GetVerticalScrollTo(__y - 5, pageIndex);
|
||
}
|
||
if (pos.Y > boxB)
|
||
{
|
||
var _mem = __y + targetSize + 5 - g_dKoef_pix_to_mm * _hh * 100 / this.m_oWordControl.m_nZoomValue;
|
||
nValueScrollVer = this.m_oWordControl.GetVerticalScrollTo(_mem, pageIndex);
|
||
}
|
||
|
||
if (!bNeedScrollToTarget)
|
||
{
|
||
nValueScrollHor = 0;
|
||
nValueScrollVer = 0;
|
||
}
|
||
|
||
if (0 != nValueScrollHor || 0 != nValueScrollVer)
|
||
{
|
||
if (this.m_oWordControl.m_bIsMouseUpSend === true && AscCommon.global_keyboardEvent.ClickCount != 1)
|
||
{
|
||
this.m_tempX = x;
|
||
this.m_tempY = y;
|
||
this.m_tempPageIndex = pageIndex;
|
||
var oThis = this;
|
||
this.m_lTimerUpdateTargetID = setTimeout(this.UpdateTargetTimer, 100);
|
||
return;
|
||
}
|
||
}
|
||
|
||
this.m_dTargetX = x;
|
||
this.m_dTargetY = y;
|
||
this.m_lTargetPage = pageIndex;
|
||
var isNeedScroll = false;
|
||
if (0 != nValueScrollHor)
|
||
{
|
||
isNeedScroll = true;
|
||
this.m_oWordControl.m_bIsUpdateTargetNoAttack = true;
|
||
var temp = nValueScrollHor * this.m_oWordControl.m_dScrollX_max / (this.m_oWordControl.m_dDocumentWidth - _ww);
|
||
this.m_oWordControl.m_oScrollHorApi.scrollToX(parseInt(temp), false);
|
||
}
|
||
if (0 != nValueScrollVer)
|
||
{
|
||
isNeedScroll = true;
|
||
this.m_oWordControl.m_bIsUpdateTargetNoAttack = true;
|
||
var temp = nValueScrollVer * this.m_oWordControl.m_dScrollY_max / (this.m_oWordControl.m_dDocumentHeight - _hh);
|
||
this.m_oWordControl.m_oScrollVerApi.scrollToY(parseInt(temp), false);
|
||
}
|
||
|
||
if (true == isNeedScroll)
|
||
{
|
||
this.m_oWordControl.m_bIsUpdateTargetNoAttack = true;
|
||
this.m_oWordControl.OnScroll();
|
||
return;
|
||
}
|
||
|
||
this.CheckTargetDraw(x, y);
|
||
}
|
||
this.UpdateTarget2 = function (x, y, pageIndex)
|
||
{
|
||
if (pageIndex >= this.m_arrPages.length)
|
||
return;
|
||
|
||
this.m_oWordControl.m_oLogicDocument.Set_TargetPos(x, y, pageIndex);
|
||
|
||
var bIsPageChanged = false;
|
||
if (this.m_lCurrentPage != pageIndex)
|
||
{
|
||
this.m_lCurrentPage = pageIndex;
|
||
this.m_oWordControl.SetCurrentPage2();
|
||
this.m_oWordControl.OnScroll();
|
||
bIsPageChanged = true;
|
||
}
|
||
|
||
this.m_dTargetX = x;
|
||
this.m_dTargetY = y;
|
||
this.m_lTargetPage = pageIndex;
|
||
|
||
var pos = this.ConvertCoordsToCursor(x, y, this.m_lCurrentPage);
|
||
|
||
if (true == pos.Error && (false == bIsPageChanged))
|
||
return;
|
||
|
||
var _ww = this.m_oWordControl.m_oEditor.HtmlElement.width;
|
||
var _hh = this.m_oWordControl.m_oEditor.HtmlElement.height;
|
||
if (this.m_oWordControl.bIsRetinaSupport)
|
||
{
|
||
_ww /= AscCommon.AscBrowser.retinaPixelRatio;
|
||
_hh /= AscCommon.AscBrowser.retinaPixelRatio;
|
||
}
|
||
|
||
// смотрим, виден ли курсор на экране
|
||
var boxX = 0;
|
||
var boxY = 0;
|
||
var boxR = _ww;
|
||
var boxB = _hh;
|
||
|
||
/*
|
||
if (true == this.m_oWordControl.m_bIsRuler)
|
||
{
|
||
boxX += Number(5 * g_dKoef_mm_to_pix);
|
||
boxY += Number(7 * g_dKoef_mm_to_pix);
|
||
boxR += Number(5 * g_dKoef_mm_to_pix);
|
||
boxB += Number(7 * g_dKoef_mm_to_pix);
|
||
}
|
||
*/
|
||
|
||
var nValueScrollHor = 0;
|
||
if (pos.X < boxX)
|
||
{
|
||
nValueScrollHor = this.m_oWordControl.GetHorizontalScrollTo(x - 5, pageIndex);
|
||
}
|
||
if (pos.X > boxR)
|
||
{
|
||
var _mem = x + 5 - g_dKoef_pix_to_mm * _ww * 100 / this.m_oWordControl.m_nZoomValue;
|
||
nValueScrollHor = this.m_oWordControl.GetHorizontalScrollTo(_mem, pageIndex);
|
||
}
|
||
|
||
var nValueScrollVer = 0;
|
||
if (pos.Y < boxY)
|
||
{
|
||
nValueScrollVer = this.m_oWordControl.GetVerticalScrollTo(y - 5, pageIndex);
|
||
}
|
||
if (pos.Y > boxB)
|
||
{
|
||
var _mem = y + this.m_dTargetSize + 5 - g_dKoef_pix_to_mm * _hh * 100 / this.m_oWordControl.m_nZoomValue;
|
||
nValueScrollVer = this.m_oWordControl.GetVerticalScrollTo(_mem, pageIndex);
|
||
}
|
||
|
||
var isNeedScroll = false;
|
||
if (0 != nValueScrollHor)
|
||
{
|
||
isNeedScroll = true;
|
||
var temp = nValueScrollHor * this.m_oWordControl.m_dScrollX_max / (this.m_oWordControl.m_dDocumentWidth - _ww);
|
||
this.m_oWordControl.m_oScrollHorApi.scrollToX(parseInt(temp), false);
|
||
}
|
||
if (0 != nValueScrollVer)
|
||
{
|
||
isNeedScroll = true;
|
||
var temp = nValueScrollVer * this.m_oWordControl.m_dScrollY_max / (this.m_oWordControl.m_dDocumentHeight - _hh);
|
||
this.m_oWordControl.m_oScrollVerApi.scrollToY(parseInt(temp), false);
|
||
}
|
||
|
||
if (true == isNeedScroll)
|
||
{
|
||
this.m_oWordControl.OnScroll();
|
||
return;
|
||
}
|
||
}
|
||
|
||
this.UpdateTargetTimer = function ()
|
||
{
|
||
var x = oThis.m_tempX;
|
||
var y = oThis.m_tempY;
|
||
var pageIndex = oThis.m_tempPageIndex;
|
||
|
||
oThis.m_lTimerUpdateTargetID = -1;
|
||
if (pageIndex >= oThis.m_arrPages.length)
|
||
return;
|
||
|
||
var oWordControl = oThis.m_oWordControl;
|
||
|
||
var bIsPageChanged = false;
|
||
if (oThis.m_lCurrentPage != pageIndex)
|
||
{
|
||
oThis.m_lCurrentPage = pageIndex;
|
||
oWordControl.SetCurrentPage2();
|
||
oWordControl.OnScroll();
|
||
bIsPageChanged = true;
|
||
}
|
||
|
||
oThis.m_dTargetX = x;
|
||
oThis.m_dTargetY = y;
|
||
oThis.m_lTargetPage = pageIndex;
|
||
|
||
var targetSize = Number(oThis.m_dTargetSize * oWordControl.m_nZoomValue * g_dKoef_mm_to_pix / 100);
|
||
var pos = oThis.ConvertCoordsToCursor2(x, y, oThis.m_lCurrentPage);
|
||
//pos.Y -= targetSize;
|
||
|
||
if (true === pos.Error && (false === bIsPageChanged))
|
||
return;
|
||
|
||
// смотрим, виден ли курсор на экране
|
||
var boxX = 0;
|
||
var boxY = 0;
|
||
var boxR = oWordControl.m_oEditor.HtmlElement.width - 2;
|
||
var boxB = oWordControl.m_oEditor.HtmlElement.height - targetSize;
|
||
|
||
/*
|
||
if (true === oWordControl.m_bIsRuler)
|
||
{
|
||
boxX += Number(5 * g_dKoef_mm_to_pix);
|
||
boxY += Number(7 * g_dKoef_mm_to_pix);
|
||
boxR += Number(5 * g_dKoef_mm_to_pix);
|
||
boxB += Number(7 * g_dKoef_mm_to_pix);
|
||
}
|
||
*/
|
||
|
||
var nValueScrollHor = 0;
|
||
if (pos.X < boxX)
|
||
{
|
||
nValueScrollHor = boxX - pos.X;
|
||
}
|
||
if (pos.X > boxR)
|
||
{
|
||
nValueScrollHor = boxR - pos.X;
|
||
}
|
||
|
||
var nValueScrollVer = 0;
|
||
if (pos.Y < boxY)
|
||
{
|
||
nValueScrollVer = boxY - pos.Y;
|
||
}
|
||
if (pos.Y > boxB)
|
||
{
|
||
nValueScrollVer = boxB - pos.Y;
|
||
}
|
||
|
||
var isNeedScroll = false;
|
||
if (0 != nValueScrollHor)
|
||
{
|
||
isNeedScroll = true;
|
||
oWordControl.m_bIsUpdateTargetNoAttack = true;
|
||
oWordControl.m_oScrollHorApi.scrollByX(-nValueScrollHor, false);
|
||
}
|
||
if (0 != nValueScrollVer)
|
||
{
|
||
isNeedScroll = true;
|
||
oWordControl.m_bIsUpdateTargetNoAttack = true;
|
||
oWordControl.m_oScrollVerApi.scrollByY(-nValueScrollVer, false);
|
||
}
|
||
|
||
if (true === isNeedScroll)
|
||
{
|
||
oWordControl.m_bIsUpdateTargetNoAttack = true;
|
||
oWordControl.OnScroll();
|
||
return;
|
||
}
|
||
|
||
oThis.TargetHtmlElementLeft = pos.X >> 0;
|
||
oThis.TargetHtmlElementTop = pos.Y >> 0;
|
||
oThis.TargetHtmlElement.style.left = oThis.TargetHtmlElementLeft + "px";
|
||
oThis.TargetHtmlElement.style.top = oThis.TargetHtmlElementTop + "px";
|
||
}
|
||
|
||
this.SetTargetSize = function (size)
|
||
{
|
||
this.m_dTargetSize = size;
|
||
//this.TargetHtmlElement.style.height = Number(this.m_dTargetSize * this.m_oWordControl.m_nZoomValue * g_dKoef_mm_to_pix / 100) + "px";
|
||
//this.TargetHtmlElement.style.width = "2px";
|
||
}
|
||
this.DrawTarget = function ()
|
||
{
|
||
if (oThis.NeedTarget && oThis.m_oWordControl.IsFocus)
|
||
{
|
||
oThis.showTarget(!oThis.isShowTarget());
|
||
}
|
||
};
|
||
|
||
this.TargetShow = function ()
|
||
{
|
||
this.TargetShowNeedFlag = true;
|
||
}
|
||
this.CheckTargetShow = function ()
|
||
{
|
||
if (this.TargetShowFlag && this.TargetShowNeedFlag)
|
||
{
|
||
this.showTarget(true);
|
||
this.TargetShowNeedFlag = false;
|
||
return;
|
||
}
|
||
|
||
if (!this.TargetShowNeedFlag)
|
||
return;
|
||
|
||
this.TargetShowNeedFlag = false;
|
||
|
||
if (-1 == this.m_lTimerTargetId)
|
||
this.TargetStart();
|
||
|
||
if (oThis.NeedTarget)
|
||
this.showTarget(true);
|
||
|
||
this.TargetShowFlag = true;
|
||
}
|
||
this.StartTrackImage = function (obj, x, y, w, h, type, pagenum)
|
||
{
|
||
}
|
||
this.StartTrackTable = function (obj, transform)
|
||
{
|
||
if (this.m_oWordControl.MobileTouchManager)
|
||
{
|
||
if (!this.m_oWordControl.MobileTouchManager.TableStartTrack_Check)
|
||
return;
|
||
}
|
||
|
||
this.TableOutlineDr.TableOutline = obj;
|
||
this.TableOutlineDr.Counter = 0;
|
||
this.TableOutlineDr.bIsNoTable = false;
|
||
this.TableOutlineDr.CheckStartTrack(this.m_oWordControl, transform);
|
||
|
||
if (this.m_oWordControl.MobileTouchManager)
|
||
this.m_oWordControl.OnUpdateOverlay();
|
||
}
|
||
this.EndTrackTable = function (pointer, bIsAttack)
|
||
{
|
||
if (this.TableOutlineDr.TableOutline != null)
|
||
{
|
||
if (pointer == this.TableOutlineDr.TableOutline.Table || bIsAttack)
|
||
{
|
||
this.TableOutlineDr.TableOutline = null;
|
||
this.TableOutlineDr.Counter = 0;
|
||
}
|
||
}
|
||
}
|
||
this.CheckTrackTable = function ()
|
||
{
|
||
if (null == this.TableOutlineDr.TableOutline)
|
||
return;
|
||
|
||
if (this.TableOutlineDr.bIsNoTable && this.TableOutlineDr.bIsTracked === false)
|
||
{
|
||
this.TableOutlineDr.Counter++;
|
||
if (this.TableOutlineDr.Counter > 100)
|
||
{
|
||
this.TableOutlineDr.TableOutline = null;
|
||
this.m_oWordControl.OnUpdateOverlay();
|
||
}
|
||
}
|
||
}
|
||
|
||
this.DrawFrameTrack = function (overlay)
|
||
{
|
||
if (!this.FrameRect.IsActive)
|
||
return;
|
||
|
||
var _page = this.m_arrPages[this.FrameRect.PageIndex];
|
||
var drPage = _page.drawingPage;
|
||
|
||
var dKoefX = (drPage.right - drPage.left) / _page.width_mm;
|
||
var dKoefY = (drPage.bottom - drPage.top) / _page.height_mm;
|
||
|
||
var _x = (drPage.left + dKoefX * this.FrameRect.Rect.X);
|
||
var _y = (drPage.top + dKoefY * this.FrameRect.Rect.Y);
|
||
var _r = (drPage.left + dKoefX * this.FrameRect.Rect.R);
|
||
var _b = (drPage.top + dKoefY * this.FrameRect.Rect.B);
|
||
|
||
if (_x < overlay.min_x)
|
||
overlay.min_x = _x;
|
||
if (_r > overlay.max_x)
|
||
overlay.max_x = _r;
|
||
|
||
if (_y < overlay.min_y)
|
||
overlay.min_y = _y;
|
||
if (_b > overlay.max_y)
|
||
overlay.max_y = _b;
|
||
|
||
var ctx = overlay.m_oContext;
|
||
ctx.strokeStyle = "#939393";
|
||
ctx.lineWidth = 1;
|
||
|
||
ctx.beginPath();
|
||
this.AutoShapesTrack.AddRectDashClever(ctx, _x >> 0, _y >> 0, _r >> 0, _b >> 0, 2, 2, true);
|
||
ctx.beginPath();
|
||
|
||
var _w = 4;
|
||
var _wc = 5;
|
||
|
||
var _x1 = (_x >> 0) + 1;
|
||
var _y1 = (_y >> 0) + 1;
|
||
|
||
var _x2 = (_r >> 0) - _w;
|
||
var _y2 = (_b >> 0) - _w;
|
||
|
||
var _xc = ((_x + _r - _wc) / 2) >> 0;
|
||
var _yc = ((_y + _b - _wc) / 2) >> 0;
|
||
|
||
ctx.rect(_x1, _y1, _w, _w);
|
||
ctx.rect(_xc, _y1, _wc, _w);
|
||
ctx.rect(_x2, _y1, _w, _w);
|
||
ctx.rect(_x1, _yc, _w, _wc);
|
||
ctx.rect(_x2, _yc, _w, _wc);
|
||
ctx.rect(_x1, _y2, _w, _w);
|
||
ctx.rect(_xc, _y2, _wc, _w);
|
||
ctx.rect(_x2, _y2, _w, _w);
|
||
|
||
ctx.fillStyle = "#777777";
|
||
ctx.fill();
|
||
ctx.beginPath();
|
||
|
||
// move
|
||
if (this.FrameRect.IsTracked)
|
||
{
|
||
_page = this.m_arrPages[this.FrameRect.Track.PageIndex];
|
||
drPage = _page.drawingPage;
|
||
|
||
dKoefX = (drPage.right - drPage.left) / _page.width_mm;
|
||
dKoefY = (drPage.bottom - drPage.top) / _page.height_mm;
|
||
|
||
var __x = (drPage.left + dKoefX * this.FrameRect.Track.L) >> 0;
|
||
var __y = (drPage.top + dKoefY * this.FrameRect.Track.T) >> 0;
|
||
var __r = (drPage.left + dKoefX * this.FrameRect.Track.R) >> 0;
|
||
var __b = (drPage.top + dKoefY * this.FrameRect.Track.B) >> 0;
|
||
|
||
if (__x < overlay.min_x)
|
||
overlay.min_x = __x;
|
||
if (__r > overlay.max_x)
|
||
overlay.max_x = __r;
|
||
|
||
if (__y < overlay.min_y)
|
||
overlay.min_y = __y;
|
||
if (__b > overlay.max_y)
|
||
overlay.max_y = __b;
|
||
|
||
ctx.strokeStyle = "#FFFFFF";
|
||
|
||
ctx.beginPath();
|
||
ctx.rect(__x + 0.5, __y + 0.5, __r - __x, __b - __y);
|
||
ctx.stroke();
|
||
|
||
ctx.strokeStyle = "#000000";
|
||
ctx.beginPath();
|
||
this.AutoShapesTrack.AddRectDashClever(ctx, __x, __y, __r, __b, 3, 3, true);
|
||
ctx.beginPath();
|
||
}
|
||
};
|
||
|
||
this.ContentControlsSaveLast = function()
|
||
{
|
||
this.ContentControlObjectsLast = [];
|
||
for (var i = 0; i < this.ContentControlObjects.length; i++)
|
||
{
|
||
this.ContentControlObjectsLast.push(this.ContentControlObjects[i].Copy());
|
||
}
|
||
};
|
||
|
||
this.ContentControlsCheckLast = function()
|
||
{
|
||
var _len1 = this.ContentControlObjects.length;
|
||
var _len2 = this.ContentControlObjectsLast.length;
|
||
|
||
if (_len1 != _len2)
|
||
return true;
|
||
|
||
var count1, count2;
|
||
for (var i = 0; i < _len1; i++)
|
||
{
|
||
var _obj1 = this.ContentControlObjects[i];
|
||
var _obj2 = this.ContentControlObjectsLast[i];
|
||
|
||
if (_obj1.id != _obj2.id)
|
||
return true;
|
||
if (_obj1.type != _obj2.type)
|
||
return true;
|
||
|
||
if (_obj1.rects && _obj2.rects)
|
||
{
|
||
count1 = _obj1.rects.length;
|
||
count2 = _obj2.rects.length;
|
||
|
||
if (count1 != count2)
|
||
return true;
|
||
|
||
for (var j = 0; j < count1; j++)
|
||
{
|
||
if (Math.abs(_obj1.rects[j].X - _obj2.rects[j].X) > 0.00001 ||
|
||
Math.abs(_obj1.rects[j].Y - _obj2.rects[j].Y) > 0.00001 ||
|
||
Math.abs(_obj1.rects[j].R - _obj2.rects[j].R) > 0.00001 ||
|
||
Math.abs(_obj1.rects[j].B - _obj2.rects[j].B) > 0.00001 ||
|
||
_obj1.rects[j].Page != _obj2.rects[j].Page)
|
||
{
|
||
return true;
|
||
}
|
||
}
|
||
}
|
||
else if (_obj1.path && _obj2.path)
|
||
{
|
||
count1 = _obj1.paths.length;
|
||
count2 = _obj2.paths.length;
|
||
|
||
if (count1 != count2)
|
||
return true;
|
||
|
||
var _points1, _points2;
|
||
for (var j = 0; j < count1; j++)
|
||
{
|
||
if (_obj1.paths[j].Page != _obj2.paths[j].Page)
|
||
return true;
|
||
|
||
_points1 = _obj1.paths[j].Points;
|
||
_points2 = _obj2.paths[j].Points;
|
||
|
||
if (_points1.length != _points2.length)
|
||
return true;
|
||
|
||
for (var k = 0; k < _points1.length; k++)
|
||
{
|
||
if (Math.abs(_points1[k].X - _points[k].X) > 0.00001 || Math.abs(_points1[k].Y - _points[k].Y) > 0.00001)
|
||
return true;
|
||
}
|
||
}
|
||
}
|
||
else
|
||
{
|
||
return true;
|
||
}
|
||
}
|
||
|
||
return false;
|
||
};
|
||
|
||
this.DrawContentControlsTrack = function(overlay)
|
||
{
|
||
var ctx = overlay.m_oContext;
|
||
ctx.strokeStyle = "#ADADAD";
|
||
ctx.lineWidth = 1;
|
||
|
||
var _object, _rect, _path;
|
||
var _x, _y, _r, _b;
|
||
var _transform, offset_x, offset_y;
|
||
var _curPage;
|
||
var _color;
|
||
|
||
var isNoButtons = this.m_oWordControl.m_oLogicDocument ? this.m_oWordControl.m_oLogicDocument.IsFillingFormMode() : false;
|
||
var buttonsCount = 0;
|
||
|
||
for (var nIndexContentControl = 0; nIndexContentControl < this.ContentControlObjects.length; nIndexContentControl++)
|
||
{
|
||
_object = this.ContentControlObjects[nIndexContentControl];
|
||
_transform = _object.transform;
|
||
_curPage = _object.getPage();
|
||
_color = _object.getColor();
|
||
|
||
buttonsCount = _object.Buttons.length;
|
||
if (isNoButtons)
|
||
buttonsCount = 0;
|
||
|
||
if (_color)
|
||
{
|
||
ctx.strokeStyle = "rgba(" + _color.r + ", " + _color.g + ", " + _color.b + ", 1)";
|
||
ctx.fillStyle = "rgba(" + _color.r + ", " + _color.g + ", " + _color.b + ", 0.25)";
|
||
}
|
||
else
|
||
{
|
||
ctx.strokeStyle = "#ADADAD";
|
||
ctx.fillStyle = "rgba(205, 205, 205, 0.5)";
|
||
}
|
||
|
||
|
||
offset_x = 0;
|
||
offset_y = 0;
|
||
if (_transform && global_MatrixTransformer.IsIdentity2(_transform))
|
||
{
|
||
offset_x = _transform.tx;
|
||
offset_y = _transform.ty;
|
||
_transform = null;
|
||
}
|
||
|
||
if (!_transform)
|
||
{
|
||
if (_object.rects)
|
||
{
|
||
for (var j = 0; j < _object.rects.length; j++)
|
||
{
|
||
_rect = _object.rects[j];
|
||
|
||
if (_rect.Page < this.m_lDrawingFirst || _rect.Page > this.m_lDrawingEnd)
|
||
continue;
|
||
|
||
var _page = this.m_arrPages[_rect.Page];
|
||
var drPage = _page.drawingPage;
|
||
|
||
var dKoefX = (drPage.right - drPage.left) / _page.width_mm;
|
||
var dKoefY = (drPage.bottom - drPage.top) / _page.height_mm;
|
||
|
||
ctx.beginPath();
|
||
|
||
_x = (drPage.left + dKoefX * (_rect.X + offset_x));
|
||
_y = (drPage.top + dKoefY * (_rect.Y + offset_y));
|
||
_r = (drPage.left + dKoefX * (_rect.R + offset_x));
|
||
_b = (drPage.top + dKoefY * (_rect.B + offset_y));
|
||
|
||
overlay.CheckRect(_x, _y, _r - _x, _b - _y);
|
||
ctx.rect((_x >> 0) + 0.5, (_y >> 0) + 0.5, (_r - _x) >> 0, (_b - _y) >> 0);
|
||
|
||
if (_object.type == c_oContentControlTrack.Hover)
|
||
{
|
||
//ctx.fillStyle = "rgba(205, 205, 205, 0.5)";
|
||
ctx.fill();
|
||
}
|
||
ctx.stroke();
|
||
|
||
ctx.beginPath();
|
||
}
|
||
}
|
||
else if (_object.paths)
|
||
{
|
||
for (var j = 0; j < _object.paths.length; j++)
|
||
{
|
||
_path = _object.paths[j];
|
||
if (_path.Page < this.m_lDrawingFirst || _path.Page > this.m_lDrawingEnd)
|
||
continue;
|
||
|
||
var _page = this.m_arrPages[_path.Page];
|
||
var drPage = _page.drawingPage;
|
||
|
||
var dKoefX = (drPage.right - drPage.left) / _page.width_mm;
|
||
var dKoefY = (drPage.bottom - drPage.top) / _page.height_mm;
|
||
|
||
ctx.beginPath();
|
||
|
||
var Points = _path.Points;
|
||
|
||
var nCount = Points.length;
|
||
for (var nIndex = 0; nIndex < nCount; nIndex++)
|
||
{
|
||
_x = (drPage.left + dKoefX * (Points[nIndex].X + offset_x));
|
||
_y = (drPage.top + dKoefY * (Points[nIndex].Y + offset_y));
|
||
|
||
overlay.CheckPoint(_x, _y);
|
||
|
||
_x = (_x >> 0) + 0.5;
|
||
_y = (_y >> 0) + 0.5;
|
||
|
||
if (0 == nIndex)
|
||
ctx.moveTo(_x, _y);
|
||
else
|
||
ctx.lineTo(_x, _y);
|
||
}
|
||
|
||
ctx.closePath();
|
||
|
||
if (_object.type == c_oContentControlTrack.Hover)
|
||
{
|
||
//ctx.fillStyle = "rgba(205, 205, 205, 0.5)";
|
||
ctx.fill();
|
||
}
|
||
|
||
ctx.stroke();
|
||
ctx.beginPath();
|
||
}
|
||
}
|
||
}
|
||
else
|
||
{
|
||
if (_object.rects)
|
||
{
|
||
for (var j = 0; j < _object.rects.length; j++)
|
||
{
|
||
_rect = _object.rects[j];
|
||
|
||
if (_rect.Page < this.m_lDrawingFirst || _rect.Page > this.m_lDrawingEnd)
|
||
continue;
|
||
|
||
var x1 = _transform.TransformPointX(_rect.X, _rect.Y);
|
||
var y1 = _transform.TransformPointY(_rect.X, _rect.Y);
|
||
|
||
var x2 = _transform.TransformPointX(_rect.R, _rect.Y);
|
||
var y2 = _transform.TransformPointY(_rect.R, _rect.Y);
|
||
|
||
var x3 = _transform.TransformPointX(_rect.R, _rect.B);
|
||
var y3 = _transform.TransformPointY(_rect.R, _rect.B);
|
||
|
||
var x4 = _transform.TransformPointX(_rect.X, _rect.B);
|
||
var y4 = _transform.TransformPointY(_rect.X, _rect.B);
|
||
|
||
var _page = this.m_arrPages[_rect.Page];
|
||
var drPage = _page.drawingPage;
|
||
|
||
var dKoefX = (drPage.right - drPage.left) / _page.width_mm;
|
||
var dKoefY = (drPage.bottom - drPage.top) / _page.height_mm;
|
||
|
||
x1 = drPage.left + dKoefX * x1;
|
||
x2 = drPage.left + dKoefX * x2;
|
||
x3 = drPage.left + dKoefX * x3;
|
||
x4 = drPage.left + dKoefX * x4;
|
||
|
||
y1 = drPage.top + dKoefY * y1;
|
||
y2 = drPage.top + dKoefY * y2;
|
||
y3 = drPage.top + dKoefY * y3;
|
||
y4 = drPage.top + dKoefY * y4;
|
||
|
||
ctx.beginPath();
|
||
|
||
overlay.CheckPoint(x1, y1);
|
||
overlay.CheckPoint(x2, y2);
|
||
overlay.CheckPoint(x3, y3);
|
||
overlay.CheckPoint(x4, y4);
|
||
|
||
ctx.moveTo(x1, y1);
|
||
ctx.lineTo(x2, y2);
|
||
ctx.lineTo(x3, y3);
|
||
ctx.lineTo(x4, y4);
|
||
ctx.closePath();
|
||
|
||
if (_object.type == c_oContentControlTrack.Hover)
|
||
{
|
||
//ctx.fillStyle = "rgba(205, 205, 205, 0.5)";
|
||
ctx.fill();
|
||
}
|
||
ctx.stroke();
|
||
|
||
ctx.beginPath();
|
||
}
|
||
}
|
||
else if (_object.paths)
|
||
{
|
||
for (var j = 0; j < _object.paths.length; j++)
|
||
{
|
||
_path = _object.paths[j];
|
||
if (_path.Page < this.m_lDrawingFirst || _path.Page > this.m_lDrawingEnd)
|
||
continue;
|
||
|
||
var _page = this.m_arrPages[_path.Page];
|
||
var drPage = _page.drawingPage;
|
||
|
||
var dKoefX = (drPage.right - drPage.left) / _page.width_mm;
|
||
var dKoefY = (drPage.bottom - drPage.top) / _page.height_mm;
|
||
|
||
ctx.beginPath();
|
||
|
||
var Points = _path.Points;
|
||
|
||
var nCount = Points.length;
|
||
for (var nIndex = 0; nIndex < nCount; nIndex++)
|
||
{
|
||
var _x = _transform.TransformPointX(Points[nIndex].X, Points[nIndex].Y);
|
||
var _y = _transform.TransformPointY(Points[nIndex].X, Points[nIndex].Y);
|
||
|
||
_x = (drPage.left + dKoefX * _x);
|
||
_y = (drPage.top + dKoefY * _y);
|
||
|
||
overlay.CheckPoint(_x, _y);
|
||
|
||
if (0 == nIndex)
|
||
ctx.moveTo(_x, _y);
|
||
else
|
||
ctx.lineTo(_x, _y);
|
||
}
|
||
|
||
ctx.closePath();
|
||
|
||
if (_object.type == c_oContentControlTrack.Hover)
|
||
{
|
||
//ctx.fillStyle = "rgba(205, 205, 205, 0.5)";
|
||
ctx.fill();
|
||
}
|
||
|
||
ctx.stroke();
|
||
ctx.beginPath();
|
||
}
|
||
}
|
||
}
|
||
|
||
if (_object.type == c_oContentControlTrack.In)
|
||
{
|
||
if (_curPage < this.m_lDrawingFirst || _curPage > this.m_lDrawingEnd)
|
||
continue;
|
||
|
||
_rect = _object.getXY();
|
||
var _page = this.m_arrPages[_curPage];
|
||
var drPage = _page.drawingPage;
|
||
|
||
var dKoefX = (drPage.right - drPage.left) / _page.width_mm;
|
||
var dKoefY = (drPage.bottom - drPage.top) / _page.height_mm;
|
||
|
||
if (!_transform)
|
||
{
|
||
_x = (drPage.left + dKoefX * (_rect.X + offset_x));
|
||
_y = (drPage.top + dKoefY * (_rect.Y + offset_y));
|
||
|
||
_x = ((_x >> 0) + 0.5) - 15;
|
||
_y = ((_y >> 0) + 0.5);
|
||
|
||
var nAdvancedL = 0;
|
||
var nAdvancedLB = 0;
|
||
|
||
if (_object.Name == "" && 0 == buttonsCount)
|
||
{
|
||
if (!isNoButtons)
|
||
{
|
||
ctx.rect(_x, _y, 15, 20);
|
||
overlay.CheckRect(_x, _y, 15, 20);
|
||
|
||
ctx.fillStyle = (1 == this.ContentControlObjectState) ? AscCommonWord.GlobalSkin.ContentControlsAnchorActive : AscCommonWord.GlobalSkin.ContentControlsBack;
|
||
|
||
ctx.fill();
|
||
ctx.stroke();
|
||
}
|
||
}
|
||
else
|
||
{
|
||
_x += 15;
|
||
_y -= 20;
|
||
|
||
var widthControl = 0;
|
||
|
||
if (_object.Name != "")
|
||
{
|
||
ctx.font = g_oContentControlButtonIcons.getFont();
|
||
widthControl += (g_oContentControlButtonIcons.measure(_object.Name, ctx) >> 0);
|
||
widthControl += 6; // 3 + 3
|
||
if (_object.NameButtonAdvanced && !isNoButtons)
|
||
{
|
||
nAdvancedL = _x + 15 + widthControl;
|
||
widthControl += 5;
|
||
widthControl += 3;
|
||
}
|
||
else
|
||
widthControl += 3;
|
||
}
|
||
|
||
_object.NameWidth = widthControl;
|
||
|
||
nAdvancedLB = _x + widthControl;
|
||
if (!isNoButtons)
|
||
nAdvancedLB += 15;
|
||
|
||
widthControl += (20 * buttonsCount);
|
||
|
||
var _textNameOffset = 15;
|
||
if (isNoButtons)
|
||
_textNameOffset = 0;
|
||
|
||
overlay.CheckRect(_x, _y, _textNameOffset + widthControl, 20);
|
||
|
||
ctx.beginPath();
|
||
|
||
var _fillStyleSetup = (1 == this.ContentControlObjectState) ? AscCommonWord.GlobalSkin.ContentControlsAnchorActive : AscCommonWord.GlobalSkin.ContentControlsBack;
|
||
var _fillStyle = "";
|
||
var _fillX = _x;
|
||
var _fillW = isNoButtons ? 0 : 15;
|
||
if (_object.NameWidth != 0)
|
||
{
|
||
if (_object.ActiveButtonIndex == -1)
|
||
_fillStyle = AscCommonWord.GlobalSkin.ContentControlsActive;
|
||
else if (_object.HoverButtonIndex == -1)
|
||
_fillStyle = AscCommonWord.GlobalSkin.ContentControlsHover;
|
||
else
|
||
_fillStyle = AscCommonWord.GlobalSkin.ContentControlsBack;
|
||
|
||
if (_fillStyle != _fillStyleSetup)
|
||
{
|
||
ctx.rect(_fillX, _y, _fillW, 20);
|
||
_fillX = _fillX + _fillW;
|
||
_fillW = 0;
|
||
|
||
ctx.fillStyle = _fillStyleSetup;
|
||
ctx.fill();
|
||
ctx.beginPath();
|
||
}
|
||
_fillW += _object.NameWidth;
|
||
_fillStyleSetup = _fillStyle;
|
||
}
|
||
|
||
for (var nIndexB = 0; nIndexB < buttonsCount; nIndexB++)
|
||
{
|
||
if (_object.ActiveButtonIndex == nIndexB)
|
||
_fillStyle = AscCommonWord.GlobalSkin.ContentControlsActive;
|
||
else if (_object.HoverButtonIndex == nIndexB)
|
||
_fillStyle = AscCommonWord.GlobalSkin.ContentControlsHover;
|
||
else
|
||
_fillStyle = AscCommonWord.GlobalSkin.ContentControlsBack;
|
||
|
||
if (_fillStyle != _fillStyleSetup)
|
||
{
|
||
ctx.rect(_fillX, _y, _fillW, 20);
|
||
_fillX = _fillX + _fillW;
|
||
_fillW = 0;
|
||
|
||
ctx.fillStyle = _fillStyleSetup;
|
||
ctx.fill();
|
||
ctx.beginPath();
|
||
}
|
||
|
||
_fillW += 20;
|
||
_fillStyleSetup = _fillStyle;
|
||
}
|
||
|
||
ctx.rect(_fillX, _y, _fillW, 20);
|
||
ctx.fillStyle = _fillStyleSetup;
|
||
ctx.fill();
|
||
_fillX = _fillX + _fillW;
|
||
_fillW = 0;
|
||
|
||
ctx.beginPath();
|
||
if (!isNoButtons)
|
||
ctx.rect(_x, _y, 15 + widthControl, 20);
|
||
else
|
||
ctx.rect(_x, _y, widthControl, 20);
|
||
ctx.stroke();
|
||
}
|
||
|
||
ctx.beginPath();
|
||
|
||
if (_object.Name != "")
|
||
{
|
||
ctx.fillStyle = (_object.ActiveButtonIndex == -1) ? AscCommonWord.GlobalSkin.ContentControlsTextActive : AscCommonWord.GlobalSkin.ContentControlsText;
|
||
|
||
ctx.fillText(_object.Name, _x + _textNameOffset + 3, _y + 20 - 6);
|
||
|
||
if (_object.NameButtonAdvanced && !isNoButtons)
|
||
{
|
||
nAdvancedL = (nAdvancedL + 0.5) >> 0;
|
||
var nY = _y - 0.5;
|
||
nY += 10;
|
||
nY -= 1;
|
||
|
||
var plus = AscCommon.AscBrowser.isRetina ? 0.5 : 1;
|
||
|
||
for (var i = 0; i <= 2; i+=plus)
|
||
ctx.rect(nAdvancedL + i, nY + i, 1, 1);
|
||
|
||
for (var i = 0; i <= 2; i+=plus)
|
||
ctx.rect(nAdvancedL + 4 - i, nY + i, 1, 1);
|
||
|
||
ctx.fill();
|
||
ctx.beginPath();
|
||
}
|
||
}
|
||
|
||
var _yCell = _y;
|
||
if (!AscCommon.AscBrowser.isRetina)
|
||
_yCell = 1 + (_y >> 0);
|
||
|
||
for (var nIndexB = 0; nIndexB < buttonsCount; nIndexB++)
|
||
{
|
||
var image = g_oContentControlButtonIcons.getImage(_object.Buttons[nIndexB], nIndexB == _object.ActiveButtonIndex);
|
||
if (image)
|
||
ctx.drawImage(image, nAdvancedLB >> 0, _yCell, 20, 20);
|
||
nAdvancedLB += 20;
|
||
}
|
||
|
||
if (!isNoButtons)
|
||
{
|
||
var cx = _x - 0.5 + 4;
|
||
var cy = _y - 0.5 + 4;
|
||
|
||
var _color1 = "#ADADAD";
|
||
var _color2 = "#D4D4D4";
|
||
|
||
if (0 == this.ContentControlObjectState || 1 == this.ContentControlObjectState) {
|
||
_color1 = "#444444";
|
||
_color2 = "#9D9D9D";
|
||
}
|
||
|
||
overlay.AddRect(cx, cy, 3, 3);
|
||
overlay.AddRect(cx + 5, cy, 3, 3);
|
||
overlay.AddRect(cx, cy + 5, 3, 3);
|
||
overlay.AddRect(cx + 5, cy + 5, 3, 3);
|
||
overlay.AddRect(cx, cy + 10, 3, 3);
|
||
overlay.AddRect(cx + 5, cy + 10, 3, 3);
|
||
|
||
ctx.fillStyle = _color2;
|
||
ctx.fill();
|
||
ctx.beginPath();
|
||
|
||
ctx.moveTo(cx + 1.5, cy);
|
||
ctx.lineTo(cx + 1.5, cy + 3);
|
||
ctx.moveTo(cx + 6.5, cy);
|
||
ctx.lineTo(cx + 6.5, cy + 3);
|
||
ctx.moveTo(cx + 1.5, cy + 5);
|
||
ctx.lineTo(cx + 1.5, cy + 8);
|
||
ctx.moveTo(cx + 6.5, cy + 5);
|
||
ctx.lineTo(cx + 6.5, cy + 8);
|
||
ctx.moveTo(cx + 1.5, cy + 10);
|
||
ctx.lineTo(cx + 1.5, cy + 13);
|
||
ctx.moveTo(cx + 6.5, cy + 10);
|
||
ctx.lineTo(cx + 6.5, cy + 13);
|
||
|
||
ctx.moveTo(cx, cy + 1.5);
|
||
ctx.lineTo(cx + 3, cy + 1.5);
|
||
ctx.moveTo(cx + 5, cy + 1.5);
|
||
ctx.lineTo(cx + 8, cy + 1.5);
|
||
ctx.moveTo(cx, cy + 6.5);
|
||
ctx.lineTo(cx + 3, cy + 6.5);
|
||
ctx.moveTo(cx + 5, cy + 6.5);
|
||
ctx.lineTo(cx + 8, cy + 6.5);
|
||
ctx.moveTo(cx, cy + 11.5);
|
||
ctx.lineTo(cx + 3, cy + 11.5);
|
||
ctx.moveTo(cx + 5, cy + 11.5);
|
||
ctx.lineTo(cx + 8, cy + 11.5);
|
||
|
||
ctx.strokeStyle = _color1;
|
||
ctx.stroke();
|
||
}
|
||
ctx.beginPath();
|
||
}
|
||
else
|
||
{
|
||
var _x = _rect.X - (15 / dKoefX);
|
||
var _y = _rect.Y;
|
||
var _r = _rect.X;
|
||
var _b = _rect.Y + (20 / dKoefY);
|
||
|
||
var nAdvancedL = 0;
|
||
var nAdvancedLB = 0;
|
||
if (_object.Name != "" || 0 != buttonsCount && !isNoButtons)
|
||
{
|
||
_x = _rect.X;
|
||
_y = _rect.Y - (20 / dKoefY);
|
||
_b = _rect.Y;
|
||
|
||
var widthControl = 0;
|
||
|
||
if (_object.Name != 0)
|
||
{
|
||
ctx.font = g_oContentControlButtonIcons.getFont();
|
||
widthControl += (g_oContentControlButtonIcons.measure(_object.Name, ctx) + 3);
|
||
widthControl += 6; // 3 + 3
|
||
if (_object.NameButtonAdvanced && !isNoButtons)
|
||
{
|
||
nAdvancedL = 15 + widthControl;
|
||
widthControl += 5;
|
||
widthControl += 3;
|
||
}
|
||
else
|
||
widthControl += 3;
|
||
}
|
||
|
||
_object.NameWidth = widthControl;
|
||
|
||
nAdvancedLB = widthControl;
|
||
if (!isNoButtons)
|
||
nAdvancedLB += 15;
|
||
|
||
widthControl += (20 * buttonsCount);
|
||
|
||
if (!isNoButtons)
|
||
_r = _x + ((15 + widthControl) / dKoefX);
|
||
else
|
||
_r = _x + (widthControl / dKoefX);
|
||
}
|
||
|
||
var x1 = _transform.TransformPointX(_x, _y);
|
||
var y1 = _transform.TransformPointY(_x, _y);
|
||
|
||
var x2 = _transform.TransformPointX(_r, _y);
|
||
var y2 = _transform.TransformPointY(_r, _y);
|
||
|
||
var x3 = _transform.TransformPointX(_r, _b);
|
||
var y3 = _transform.TransformPointY(_r, _b);
|
||
|
||
var x4 = _transform.TransformPointX(_x, _b);
|
||
var y4 = _transform.TransformPointY(_x, _b);
|
||
|
||
x1 = drPage.left + dKoefX * x1;
|
||
x2 = drPage.left + dKoefX * x2;
|
||
x3 = drPage.left + dKoefX * x3;
|
||
x4 = drPage.left + dKoefX * x4;
|
||
|
||
y1 = drPage.top + dKoefY * y1;
|
||
y2 = drPage.top + dKoefY * y2;
|
||
y3 = drPage.top + dKoefY * y3;
|
||
y4 = drPage.top + dKoefY * y4;
|
||
|
||
overlay.CheckPoint(x1, y1);
|
||
overlay.CheckPoint(x2, y2);
|
||
overlay.CheckPoint(x3, y3);
|
||
overlay.CheckPoint(x4, y4);
|
||
|
||
ctx.beginPath();
|
||
|
||
if (_object.Name == "" && 0 == buttonsCount)
|
||
{
|
||
if (!isNoButtons)
|
||
{
|
||
ctx.moveTo(x1, y1);
|
||
ctx.lineTo(x2, y2);
|
||
ctx.lineTo(x3, y3);
|
||
ctx.lineTo(x4, y4);
|
||
ctx.closePath();
|
||
|
||
ctx.fillStyle = (1 == this.ContentControlObjectState) ? AscCommonWord.GlobalSkin.ContentControlsAnchorActive : AscCommonWord.GlobalSkin.ContentControlsBack;
|
||
ctx.fill();
|
||
ctx.stroke();
|
||
}
|
||
}
|
||
else
|
||
{
|
||
var _ft = new AscCommon.CMatrix();
|
||
_ft.sx = _transform.sx;
|
||
_ft.shx = _transform.shx;
|
||
_ft.shy = _transform.shy;
|
||
_ft.sy = _transform.sy;
|
||
_ft.tx = _transform.tx;
|
||
_ft.ty = _transform.ty;
|
||
|
||
var coords = new AscCommon.CMatrix();
|
||
coords.sx = dKoefX;
|
||
coords.sy = dKoefY;
|
||
coords.tx = drPage.left;
|
||
coords.ty = drPage.top;
|
||
|
||
global_MatrixTransformer.MultiplyAppend(_ft, coords);
|
||
|
||
ctx.transform(_ft.sx, _ft.shy, _ft.shx, _ft.sy, _ft.tx, _ft.ty);
|
||
|
||
var _fillStyleSetup = (1 == this.ContentControlObjectState) ? AscCommonWord.GlobalSkin.ContentControlsAnchorActive : AscCommonWord.GlobalSkin.ContentControlsBack;
|
||
var _fillStyle = "";
|
||
var _fillX = _x;
|
||
var _fillW = isNoButtons ? 0 : 15;
|
||
if (_object.Name != "")
|
||
{
|
||
if (_object.NameWidth != 0)
|
||
{
|
||
if (_object.ActiveButtonIndex == -1)
|
||
_fillStyle = AscCommonWord.GlobalSkin.ContentControlsActive;
|
||
else if (_object.HoverButtonIndex == -1)
|
||
_fillStyle = AscCommonWord.GlobalSkin.ContentControlsHover;
|
||
else
|
||
_fillStyle = AscCommonWord.GlobalSkin.ContentControlsBack;
|
||
|
||
if (_fillStyle != _fillStyleSetup)
|
||
{
|
||
ctx.rect(_fillX, _y, _fillW / dKoefX, 20 / dKoefY);
|
||
_fillX = _fillX + _fillW / dKoefX;
|
||
_fillW = 0;
|
||
|
||
ctx.fillStyle = _fillStyleSetup;
|
||
ctx.fill();
|
||
ctx.beginPath();
|
||
}
|
||
|
||
_fillW += _object.NameWidth;
|
||
_fillStyleSetup = _fillStyle;
|
||
}
|
||
}
|
||
|
||
for (var nIndexB = 0; nIndexB < buttonsCount; nIndexB++)
|
||
{
|
||
if (_object.ActiveButtonIndex == nIndexB)
|
||
_fillStyle = AscCommonWord.GlobalSkin.ContentControlsActive;
|
||
else if (_object.HoverButtonIndex == nIndexB)
|
||
_fillStyle = AscCommonWord.GlobalSkin.ContentControlsHover;
|
||
else
|
||
_fillStyle = AscCommonWord.GlobalSkin.ContentControlsBack;
|
||
|
||
if (_fillStyle != _fillStyleSetup)
|
||
{
|
||
ctx.rect(_fillX, _y, _fillW / dKoefX, 20 / dKoefY);
|
||
_fillX = _fillX + _fillW / dKoefX;
|
||
_fillW = 0;
|
||
|
||
ctx.fillStyle = _fillStyleSetup;
|
||
ctx.fill();
|
||
ctx.beginPath();
|
||
}
|
||
|
||
_fillW += 20;
|
||
_fillStyleSetup = _fillStyle;
|
||
}
|
||
|
||
ctx.rect(_fillX, _y, _fillW / dKoefX, 20 / dKoefY);
|
||
ctx.fillStyle = _fillStyleSetup;
|
||
ctx.fill();
|
||
_fillX = _fillX + _fillW / dKoefX;
|
||
_fillW = 0;
|
||
|
||
ctx.beginPath();
|
||
|
||
if (_object.Name != "")
|
||
{
|
||
ctx.fillStyle = (_object.ActiveButtonIndex == -1) ? AscCommonWord.GlobalSkin.ContentControlsTextActive : AscCommonWord.GlobalSkin.ContentControlsText;
|
||
|
||
ctx.font = g_oContentControlButtonIcons.getFont(dKoefY);
|
||
var _offset15 = isNoButtons ? 0 : 15;
|
||
ctx.fillText(_object.Name, _x + (_offset15 + 3) / dKoefX, _y + (20 - 6) / dKoefY);
|
||
|
||
if (_object.NameButtonAdvanced && !isNoButtons)
|
||
{
|
||
var nY = _y;
|
||
nY += 9 / dKoefY;
|
||
|
||
for (var i = 0; i < 3; i++)
|
||
ctx.rect(_x + (nAdvancedL + i) / dKoefX, nY + i / dKoefY, 1 / dKoefX, 1 / dKoefY);
|
||
|
||
for (var i = 0; i < 2; i++)
|
||
ctx.rect(_x + (nAdvancedL + 4 - i) / dKoefX, nY + i / dKoefY, 1 / dKoefX, 1 / dKoefY);
|
||
|
||
ctx.fill();
|
||
ctx.beginPath();
|
||
}
|
||
}
|
||
|
||
for (var nIndexB = 0; nIndexB < buttonsCount; nIndexB++)
|
||
{
|
||
var image = g_oContentControlButtonIcons.getImage(_object.Buttons[nIndexB], nIndexB == _object.ActiveButtonIndex);
|
||
if (image)
|
||
ctx.drawImage(image, _x + nAdvancedLB / dKoefX, _y, 20 / dKoefX, 20 / dKoefY);
|
||
nAdvancedLB += 20;
|
||
}
|
||
|
||
overlay.SetBaseTransform();
|
||
|
||
ctx.beginPath();
|
||
ctx.moveTo(x1, y1);
|
||
ctx.lineTo(x2, y2);
|
||
ctx.lineTo(x3, y3);
|
||
ctx.lineTo(x4, y4);
|
||
ctx.closePath();
|
||
|
||
ctx.stroke();
|
||
}
|
||
|
||
ctx.beginPath();
|
||
|
||
if (!isNoButtons)
|
||
{
|
||
var cx1 = _x + 5 / dKoefX;
|
||
var cy1 = _y + 5 / dKoefY;
|
||
var cx2 = _x + 10 / dKoefX;
|
||
var cy2 = _y + 5 / dKoefY;
|
||
|
||
var cx3 = _x + 5 / dKoefX;
|
||
var cy3 = _y + 10 / dKoefY;
|
||
var cx4 = _x + 10 / dKoefX;
|
||
var cy4 = _y + 10 / dKoefY;
|
||
|
||
var cx5 = _x + 5 / dKoefX;
|
||
var cy5 = _y + 15 / dKoefY;
|
||
var cx6 = _x + 10 / dKoefX;
|
||
var cy6 = _y + 15 / dKoefY;
|
||
|
||
overlay.AddEllipse(drPage.left + dKoefX * _transform.TransformPointX(cx1, cy1), drPage.top + dKoefY * _transform.TransformPointY(cx1, cy1), 1.5);
|
||
overlay.AddEllipse(drPage.left + dKoefX * _transform.TransformPointX(cx2, cy2), drPage.top + dKoefY * _transform.TransformPointY(cx2, cy2), 1.5);
|
||
overlay.AddEllipse(drPage.left + dKoefX * _transform.TransformPointX(cx3, cy3), drPage.top + dKoefY * _transform.TransformPointY(cx3, cy3), 1.5);
|
||
overlay.AddEllipse(drPage.left + dKoefX * _transform.TransformPointX(cx4, cy4), drPage.top + dKoefY * _transform.TransformPointY(cx4, cy4), 1.5);
|
||
overlay.AddEllipse(drPage.left + dKoefX * _transform.TransformPointX(cx5, cy5), drPage.top + dKoefY * _transform.TransformPointY(cx5, cy5), 1.5);
|
||
overlay.AddEllipse(drPage.left + dKoefX * _transform.TransformPointX(cx6, cy6), drPage.top + dKoefY * _transform.TransformPointY(cx6, cy6), 1.5);
|
||
|
||
var _color1 = "#ADADAD";
|
||
if (0 == this.ContentControlObjectState || 1 == this.ContentControlObjectState)
|
||
_color1 = "#444444";
|
||
|
||
ctx.fillStyle = _color1;
|
||
ctx.fill();
|
||
ctx.beginPath();
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
this.ContentControlsSaveLast();
|
||
};
|
||
|
||
this.OnDrawContentControl = function(id, type, rects, transform, name, name_advanced, button_types, color)
|
||
{
|
||
var isActiveRemove = false;
|
||
// всегда должен быть максимум один hover и in
|
||
for (var i = 0; i < this.ContentControlObjects.length; i++)
|
||
{
|
||
if (type == this.ContentControlObjects[i].type)
|
||
{
|
||
if (-2 != this.ContentControlObjects[i].ActiveButtonIndex)
|
||
isActiveRemove = true;
|
||
|
||
this.ContentControlObjects.splice(i, 1);
|
||
i--;
|
||
}
|
||
}
|
||
|
||
if (null == id || !rects || rects.length == 0)
|
||
{
|
||
if (isActiveRemove)
|
||
this.m_oWordControl.m_oApi.sendEvent("asc_onHideContentControlsActions");
|
||
return;
|
||
}
|
||
|
||
if (type == c_oContentControlTrack.In)
|
||
{
|
||
if (this.ContentControlObjects.length != 0 && this.ContentControlObjects[0].id == id)
|
||
{
|
||
if (-2 != this.ContentControlObjects[0].ActiveButtonIndex)
|
||
isActiveRemove = true;
|
||
|
||
this.ContentControlObjects.splice(0, 1);
|
||
}
|
||
if (this.m_oWordControl.m_oApi.isViewMode)
|
||
this.ContentControlObjects.push(new CContentControlTrack(id, type, rects, transform, name, undefined, undefined, color));
|
||
else
|
||
this.ContentControlObjects.push(new CContentControlTrack(id, type, rects, transform, name, name_advanced, button_types, color));
|
||
}
|
||
else
|
||
{
|
||
if (this.ContentControlObjects.length != 0 && this.ContentControlObjects[0].id == id)
|
||
return;
|
||
|
||
if (this.m_oWordControl.m_oApi.isViewMode)
|
||
this.ContentControlObjects.push(new CContentControlTrack(id, type, rects, transform, name, undefined, undefined, color));
|
||
else
|
||
this.ContentControlObjects.push(new CContentControlTrack(id, type, rects, transform, name, name_advanced, button_types, color));
|
||
}
|
||
|
||
if (isActiveRemove)
|
||
this.m_oWordControl.m_oApi.sendEvent("asc_onHideContentControlsActions");
|
||
};
|
||
|
||
this.private_DrawMathTrack = function (overlay, oPath, shift, color, dKoefX, dKoefY, drPage)
|
||
{
|
||
var ctx = overlay.m_oContext;
|
||
ctx.strokeStyle = color;
|
||
ctx.lineWidth = 1;
|
||
ctx.beginPath();
|
||
|
||
var Points = oPath.Points;
|
||
|
||
var nCount = Points.length;
|
||
// берем предпоследнюю точку, т.к. последняя совпадает с первой
|
||
var PrevX = Points[nCount - 2].X, PrevY = Points[nCount - 2].Y;
|
||
var _x = drPage.left + dKoefX * Points[nCount - 2].X,
|
||
_y = drPage.top + dKoefY * Points[nCount - 2].Y;
|
||
var StartX, StartY;
|
||
|
||
for (var nIndex = 0; nIndex < nCount; nIndex++)
|
||
{
|
||
if (PrevX > Points[nIndex].X)
|
||
{
|
||
_y = drPage.top + dKoefY * Points[nIndex].Y - shift;
|
||
}
|
||
else if (PrevX < Points[nIndex].X)
|
||
{
|
||
_y = drPage.top + dKoefY * Points[nIndex].Y + shift;
|
||
}
|
||
|
||
if (PrevY < Points[nIndex].Y)
|
||
{
|
||
_x = drPage.left + dKoefX * Points[nIndex].X - shift;
|
||
}
|
||
else if (PrevY > Points[nIndex].Y)
|
||
{
|
||
_x = drPage.left + dKoefX * Points[nIndex].X + shift;
|
||
}
|
||
|
||
PrevX = Points[nIndex].X;
|
||
PrevY = Points[nIndex].Y;
|
||
|
||
if (nIndex > 0)
|
||
{
|
||
overlay.CheckPoint(_x, _y);
|
||
|
||
if (1 == nIndex)
|
||
{
|
||
StartX = _x;
|
||
StartY = _y;
|
||
overlay.m_oContext.moveTo((_x >> 0) + 0.5, (_y >> 0) + 0.5);
|
||
}
|
||
else
|
||
{
|
||
overlay.m_oContext.lineTo((_x >> 0) + 0.5, (_y >> 0) + 0.5);
|
||
}
|
||
}
|
||
}
|
||
|
||
overlay.m_oContext.lineTo((StartX >> 0) + 0.5, (StartY >> 0) + 0.5);
|
||
|
||
ctx.closePath();
|
||
ctx.stroke();
|
||
ctx.beginPath();
|
||
};
|
||
this.private_DrawMathTrackWithMatrix = function (overlay, oPath, ShiftX, ShiftY, color, dKoefX, dKoefY, drPage, m)
|
||
{
|
||
var ctx = overlay.m_oContext;
|
||
ctx.strokeStyle = color;
|
||
ctx.lineWidth = 1;
|
||
ctx.beginPath();
|
||
|
||
var Points = oPath.Points;
|
||
|
||
var nCount = Points.length;
|
||
// берем предпоследнюю точку, т.к. последняя совпадает с первой
|
||
var x = Points[nCount - 2].X, y = Points[nCount - 2].Y;
|
||
var _x, _y;
|
||
|
||
var PrevX = Points[nCount - 2].X, PrevY = Points[nCount - 2].Y;
|
||
var StartX, StartY;
|
||
|
||
for (var nIndex = 0; nIndex < nCount; nIndex++)
|
||
{
|
||
if (PrevX > Points[nIndex].X)
|
||
{
|
||
y = Points[nIndex].Y - ShiftY;
|
||
}
|
||
else if (PrevX < Points[nIndex].X)
|
||
{
|
||
y = Points[nIndex].Y + ShiftY;
|
||
}
|
||
|
||
if (PrevY < Points[nIndex].Y)
|
||
{
|
||
x = Points[nIndex].X - ShiftX;
|
||
}
|
||
else if (PrevY > Points[nIndex].Y)
|
||
{
|
||
x = Points[nIndex].X + ShiftX;
|
||
}
|
||
|
||
PrevX = Points[nIndex].X;
|
||
PrevY = Points[nIndex].Y;
|
||
|
||
if (nIndex > 0)
|
||
{
|
||
_x = (drPage.left + dKoefX * m.TransformPointX(x, y));
|
||
_y = (drPage.top + dKoefY * m.TransformPointY(x, y));
|
||
|
||
overlay.CheckPoint(_x, _y);
|
||
|
||
if (1 == nIndex)
|
||
{
|
||
StartX = _x;
|
||
StartY = _y;
|
||
overlay.m_oContext.moveTo((_x >> 0) + 0.5, (_y >> 0) + 0.5);
|
||
}
|
||
else
|
||
{
|
||
overlay.m_oContext.lineTo((_x >> 0) + 0.5, (_y >> 0) + 0.5);
|
||
}
|
||
}
|
||
|
||
}
|
||
|
||
overlay.m_oContext.lineTo((StartX >> 0) + 0.5, (StartY >> 0) + 0.5);
|
||
|
||
ctx.closePath();
|
||
ctx.stroke();
|
||
ctx.beginPath();
|
||
};
|
||
|
||
this.DrawMathTrack = function (overlay)
|
||
{
|
||
if (!this.MathRect.IsActive)
|
||
return;
|
||
|
||
overlay.Show();
|
||
|
||
var ctx = overlay.m_oContext;
|
||
var nIndex, nCount;
|
||
var oPath, SelectPaths;
|
||
var _page, drPage, dKoefX, dKoefY;
|
||
var PathLng = this.MathPolygons.length;
|
||
var Points, nPointIndex, _x, _y;
|
||
|
||
if (null == this.TextMatrix || global_MatrixTransformer.IsIdentity(this.TextMatrix))
|
||
{
|
||
for (nIndex = 0; nIndex < PathLng; nIndex++)
|
||
{
|
||
oPath = this.MathPolygons[nIndex];
|
||
|
||
_page = this.m_arrPages[oPath.Page];
|
||
drPage = _page.drawingPage;
|
||
|
||
dKoefX = (drPage.right - drPage.left) / _page.width_mm;
|
||
dKoefY = (drPage.bottom - drPage.top) / _page.height_mm;
|
||
|
||
this.private_DrawMathTrack(overlay, oPath, 0, "#939393", dKoefX, dKoefY, drPage);
|
||
this.private_DrawMathTrack(overlay, oPath, 1, "#FFFFFF", dKoefX, dKoefY, drPage);
|
||
}
|
||
|
||
SelectPaths = this.MathSelectPolygons;
|
||
|
||
for (nIndex = 0, nCount = SelectPaths.length; nIndex < nCount; nIndex++)
|
||
{
|
||
oPath = SelectPaths[nIndex];
|
||
_page = this.m_arrPages[oPath.Page];
|
||
drPage = _page.drawingPage;
|
||
|
||
dKoefX = (drPage.right - drPage.left) / _page.width_mm;
|
||
dKoefY = (drPage.bottom - drPage.top) / _page.height_mm;
|
||
|
||
ctx.fillStyle = "#375082";
|
||
ctx.beginPath();
|
||
|
||
Points = oPath.Points;
|
||
for (nPointIndex = 0; nPointIndex < Points.length - 1; nPointIndex++)
|
||
{
|
||
_x = drPage.left + dKoefX * Points[nPointIndex].X;
|
||
_y = drPage.top + dKoefY * Points[nPointIndex].Y;
|
||
|
||
overlay.CheckPoint(_x, _y);
|
||
|
||
if (0 == nPointIndex)
|
||
ctx.moveTo((_x >> 0) + 0.5, (_y >> 0) + 0.5);
|
||
else
|
||
ctx.lineTo((_x >> 0) + 0.5, (_y >> 0) + 0.5);
|
||
}
|
||
|
||
ctx.globalAlpha = 0.2;
|
||
ctx.fill();
|
||
ctx.globalAlpha = 1;
|
||
|
||
}
|
||
}
|
||
else
|
||
{
|
||
for (nIndex = 0; nIndex < PathLng; nIndex++)
|
||
{
|
||
oPath = this.MathPolygons[nIndex];
|
||
_page = this.m_arrPages[oPath.Page];
|
||
drPage = _page.drawingPage;
|
||
|
||
dKoefX = (drPage.right - drPage.left) / _page.width_mm;
|
||
dKoefY = (drPage.bottom - drPage.top) / _page.height_mm;
|
||
|
||
var _1px_mm_x = 1 / Math.max(dKoefX, 0.001);
|
||
var _1px_mm_y = 1 / Math.max(dKoefY, 0.001);
|
||
|
||
this.private_DrawMathTrackWithMatrix(overlay, oPath, 0, 0, "#939393", dKoefX, dKoefY, drPage, this.TextMatrix);
|
||
this.private_DrawMathTrackWithMatrix(overlay, oPath, _1px_mm_x, _1px_mm_y, "#FFFFFF", dKoefX, dKoefY, drPage, this.TextMatrix);
|
||
}
|
||
|
||
SelectPaths = this.MathSelectPolygons;
|
||
|
||
for (nIndex = 0, nCount = SelectPaths.length; nIndex < nCount; nIndex++)
|
||
{
|
||
oPath = SelectPaths[nIndex];
|
||
_page = this.m_arrPages[oPath.Page];
|
||
drPage = _page.drawingPage;
|
||
|
||
dKoefX = (drPage.right - drPage.left) / _page.width_mm;
|
||
dKoefY = (drPage.bottom - drPage.top) / _page.height_mm;
|
||
|
||
ctx.fillStyle = "#375082";
|
||
ctx.beginPath();
|
||
|
||
Points = oPath.Points;
|
||
for (nPointIndex = 0; nPointIndex < Points.length - 1; nPointIndex++)
|
||
{
|
||
var x = Points[nPointIndex].X, y = Points[nPointIndex].Y;
|
||
_x = drPage.left + dKoefX * this.TextMatrix.TransformPointX(x, y);
|
||
_y = drPage.top + dKoefY * this.TextMatrix.TransformPointY(x, y);
|
||
|
||
overlay.CheckPoint(_x, _y);
|
||
|
||
if (0 == nPointIndex)
|
||
ctx.moveTo((_x >> 0) + 0.5, (_y >> 0) + 0.5);
|
||
else
|
||
ctx.lineTo((_x >> 0) + 0.5, (_y >> 0) + 0.5);
|
||
}
|
||
|
||
ctx.globalAlpha = 0.2;
|
||
ctx.fill();
|
||
ctx.globalAlpha = 1;
|
||
|
||
}
|
||
}
|
||
};
|
||
|
||
this.DrawFieldTrack = function (overlay)
|
||
{
|
||
if (!this.FieldTrack.IsActive)
|
||
return;
|
||
|
||
overlay.Show();
|
||
|
||
for (var nIndex = 0, nCount = this.FieldTrack.Rects.length; nIndex < nCount; nIndex++)
|
||
{
|
||
var FieldRect = this.FieldTrack.Rects[nIndex];
|
||
|
||
var _page = this.m_arrPages[FieldRect.PageIndex];
|
||
var drPage = _page.drawingPage;
|
||
|
||
var dKoefX = (drPage.right - drPage.left) / _page.width_mm;
|
||
var dKoefY = (drPage.bottom - drPage.top) / _page.height_mm;
|
||
|
||
if (null == this.TextMatrix || global_MatrixTransformer.IsIdentity(this.TextMatrix))
|
||
{
|
||
var _x = (drPage.left + dKoefX * FieldRect.X0);
|
||
var _y = (drPage.top + dKoefY * FieldRect.Y0);
|
||
var _r = (drPage.left + dKoefX * FieldRect.X1);
|
||
var _b = (drPage.top + dKoefY * FieldRect.Y1);
|
||
|
||
if (_x < overlay.min_x)
|
||
overlay.min_x = _x;
|
||
if (_r > overlay.max_x)
|
||
overlay.max_x = _r;
|
||
|
||
if (_y < overlay.min_y)
|
||
overlay.min_y = _y;
|
||
if (_b > overlay.max_y)
|
||
overlay.max_y = _b;
|
||
|
||
var ctx = overlay.m_oContext;
|
||
ctx.fillStyle = "#375082";
|
||
|
||
ctx.beginPath();
|
||
this.AutoShapesTrack.AddRect(ctx, _x >> 0, _y >> 0, _r >> 0, _b >> 0);
|
||
|
||
ctx.globalAlpha = 0.2;
|
||
ctx.fill();
|
||
ctx.globalAlpha = 1;
|
||
ctx.beginPath();
|
||
}
|
||
else
|
||
{
|
||
var _arrSelect = TransformRectByMatrix(this.TextMatrix, [FieldRect.X0, FieldRect.Y0, FieldRect.X1, FieldRect.Y1], drPage.left, drPage.top, dKoefX, dKoefY);
|
||
|
||
overlay.CheckPoint(_arrSelect[0], _arrSelect[1]);
|
||
overlay.CheckPoint(_arrSelect[2], _arrSelect[3]);
|
||
overlay.CheckPoint(_arrSelect[4], _arrSelect[5]);
|
||
overlay.CheckPoint(_arrSelect[6], _arrSelect[7]);
|
||
|
||
var ctx = overlay.m_oContext;
|
||
ctx.fillStyle = "#375082";
|
||
|
||
ctx.beginPath();
|
||
|
||
ctx.moveTo(_arrSelect[0], _arrSelect[1]);
|
||
ctx.lineTo(_arrSelect[2], _arrSelect[3]);
|
||
ctx.lineTo(_arrSelect[4], _arrSelect[5]);
|
||
ctx.lineTo(_arrSelect[6], _arrSelect[7]);
|
||
ctx.closePath();
|
||
|
||
ctx.globalAlpha = 0.2;
|
||
ctx.fill();
|
||
ctx.globalAlpha = 1;
|
||
ctx.beginPath();
|
||
}
|
||
}
|
||
}
|
||
|
||
this.DrawTableTrack = function (overlay)
|
||
{
|
||
if (null == this.TableOutlineDr.TableOutline)
|
||
return;
|
||
|
||
var _table = this.TableOutlineDr.TableOutline.Table;
|
||
|
||
if (!_table.Is_Inline() || this.TableOutlineDr.IsResizeTableTrack)
|
||
{
|
||
if (null == this.TableOutlineDr.CurPos)
|
||
return;
|
||
|
||
var _page = this.m_arrPages[this.TableOutlineDr.CurPos.Page];
|
||
var drPage = _page.drawingPage;
|
||
|
||
var dKoefX = (drPage.right - drPage.left) / _page.width_mm;
|
||
var dKoefY = (drPage.bottom - drPage.top) / _page.height_mm;
|
||
|
||
if (!this.TableOutlineDr.TableMatrix || global_MatrixTransformer.IsIdentity(this.TableOutlineDr.TableMatrix))
|
||
{
|
||
var _x = ((drPage.left + dKoefX * this.TableOutlineDr.CurPos.X) >> 0) + 0.5;
|
||
var _y = ((drPage.top + dKoefY * this.TableOutlineDr.CurPos.Y) >> 0) + 0.5;
|
||
|
||
var _r = _x + ((dKoefX * this.TableOutlineDr.TableOutline.W) >> 0);
|
||
var _b = _y + ((dKoefY * this.TableOutlineDr.TableOutline.H) >> 0);
|
||
|
||
if (this.TableOutlineDr.IsResizeTableTrack)
|
||
{
|
||
var _lastBounds = this.TableOutlineDr.getLastPageBounds();
|
||
var _lastX = _lastBounds.X;
|
||
var _lastY = this.TableOutlineDr.getFullTopPosition(_lastBounds);
|
||
var _lastYStart = _lastBounds.Y;
|
||
|
||
_x = ((drPage.left + dKoefX * _lastX) >> 0) + 0.5;
|
||
_y = ((drPage.top + dKoefY * _lastY) >> 0) + 0.5;
|
||
var _yStart = ((drPage.top + dKoefY * _lastYStart) >> 0) + 0.5;
|
||
|
||
_r = _x + ((dKoefX * (_lastBounds.W + this.TableOutlineDr.AddResizeCurrentW)) >> 0);
|
||
_b = _yStart + ((dKoefY * (_lastBounds.H + this.TableOutlineDr.AddResizeCurrentH)) >> 0);
|
||
}
|
||
|
||
overlay.CheckPoint(_x, _y);
|
||
overlay.CheckPoint(_x, _b);
|
||
overlay.CheckPoint(_r, _y);
|
||
overlay.CheckPoint(_r, _b);
|
||
|
||
var ctx = overlay.m_oContext;
|
||
ctx.strokeStyle = "#FFFFFF";
|
||
|
||
ctx.beginPath();
|
||
ctx.rect(_x, _y, _r - _x, _b - _y);
|
||
ctx.stroke();
|
||
|
||
ctx.strokeStyle = "#000000";
|
||
ctx.beginPath();
|
||
|
||
// набиваем пунктир
|
||
var dot_size = 3;
|
||
for (var i = _x; i < _r; i += dot_size)
|
||
{
|
||
ctx.moveTo(i, _y);
|
||
i += dot_size;
|
||
|
||
if (i > _r)
|
||
i = _r;
|
||
|
||
ctx.lineTo(i, _y);
|
||
}
|
||
for (var i = _y; i < _b; i += dot_size)
|
||
{
|
||
ctx.moveTo(_r, i);
|
||
i += dot_size;
|
||
|
||
if (i > _b)
|
||
i = _b;
|
||
|
||
ctx.lineTo(_r, i);
|
||
}
|
||
for (var i = _r; i > _x; i -= dot_size)
|
||
{
|
||
ctx.moveTo(i, _b);
|
||
i -= dot_size;
|
||
|
||
if (i < _x)
|
||
i = _x;
|
||
|
||
ctx.lineTo(i, _b);
|
||
}
|
||
for (var i = _b; i > _y; i -= dot_size)
|
||
{
|
||
ctx.moveTo(_x, i);
|
||
i -= dot_size;
|
||
|
||
if (i < _y)
|
||
i = _y;
|
||
|
||
ctx.lineTo(_x, i);
|
||
}
|
||
|
||
ctx.stroke();
|
||
ctx.beginPath();
|
||
}
|
||
else
|
||
{
|
||
var _x = this.TableOutlineDr.CurPos.X + _table.GetTableOffsetCorrection();
|
||
var _y = this.TableOutlineDr.CurPos.Y;
|
||
var _r = _x + this.TableOutlineDr.TableOutline.W;
|
||
var _b = _y + this.TableOutlineDr.TableOutline.H;
|
||
|
||
if (this.TableOutlineDr.IsResizeTableTrack)
|
||
{
|
||
_x = this.TableOutlineDr.TableOutline.X;
|
||
_y = this.TableOutlineDr.TableOutline.Y;
|
||
|
||
_r = _x + (this.TableOutlineDr.TableOutline.W + this.TableOutlineDr.AddResizeCurrentW);
|
||
_b = _y + (this.TableOutlineDr.TableOutline.H + this.TableOutlineDr.AddResizeCurrentH);
|
||
}
|
||
|
||
var transform = this.TableOutlineDr.TableMatrix;
|
||
|
||
var x1 = transform.TransformPointX(_x, _y);
|
||
var y1 = transform.TransformPointY(_x, _y);
|
||
|
||
var x2 = transform.TransformPointX(_r, _y);
|
||
var y2 = transform.TransformPointY(_r, _y);
|
||
|
||
var x3 = transform.TransformPointX(_r, _b);
|
||
var y3 = transform.TransformPointY(_r, _b);
|
||
|
||
var x4 = transform.TransformPointX(_x, _b);
|
||
var y4 = transform.TransformPointY(_x, _b);
|
||
|
||
x1 = drPage.left + dKoefX * x1;
|
||
y1 = drPage.top + dKoefY * y1;
|
||
|
||
x2 = drPage.left + dKoefX * x2;
|
||
y2 = drPage.top + dKoefY * y2;
|
||
|
||
x3 = drPage.left + dKoefX * x3;
|
||
y3 = drPage.top + dKoefY * y3;
|
||
|
||
x4 = drPage.left + dKoefX * x4;
|
||
y4 = drPage.top + dKoefY * y4;
|
||
|
||
overlay.CheckPoint(x1, y1);
|
||
overlay.CheckPoint(x2, y2);
|
||
overlay.CheckPoint(x3, y3);
|
||
overlay.CheckPoint(x4, y4);
|
||
|
||
var ctx = overlay.m_oContext;
|
||
ctx.strokeStyle = "#FFFFFF";
|
||
|
||
ctx.beginPath();
|
||
ctx.moveTo(x1, y1);
|
||
ctx.lineTo(x2, y2);
|
||
ctx.lineTo(x3, y3);
|
||
ctx.lineTo(x4, y4);
|
||
ctx.closePath();
|
||
ctx.stroke();
|
||
|
||
ctx.strokeStyle = "#000000";
|
||
ctx.beginPath();
|
||
this.AutoShapesTrack.AddRectDash(ctx, x1, y1, x2, y2, x4, y4, x3, y3, 3, 3, true);
|
||
ctx.beginPath();
|
||
}
|
||
}
|
||
else
|
||
{
|
||
this.LockCursorType("default");
|
||
|
||
var _x = global_mouseEvent.X;
|
||
var _y = global_mouseEvent.Y;
|
||
var posMouse = this.ConvertCoordsFromCursor2(_x, _y);
|
||
|
||
this.TableOutlineDr.InlinePos = this.m_oWordControl.m_oLogicDocument.Get_NearestPos(posMouse.Page, posMouse.X, posMouse.Y);
|
||
this.TableOutlineDr.InlinePos.Page = posMouse.Page;
|
||
//var posView = this.ConvertCoordsToCursor(this.TableOutlineDr.InlinePos.X, this.TableOutlineDr.InlinePos.Y, posMouse.Page, true);
|
||
|
||
var _near = this.TableOutlineDr.InlinePos;
|
||
this.AutoShapesTrack.SetCurrentPage(_near.Page);
|
||
this.AutoShapesTrack.DrawInlineMoveCursor(_near.X, _near.Y, _near.Height, _near.transform);
|
||
}
|
||
}
|
||
this.SetCurrentPage = function (PageIndex)
|
||
{
|
||
if (PageIndex >= this.m_arrPages.length)
|
||
return;
|
||
if (this.m_lCurrentPage == PageIndex)
|
||
return;
|
||
|
||
this.m_lCurrentPage = PageIndex;
|
||
this.m_oWordControl.SetCurrentPage();
|
||
}
|
||
|
||
this.SelectEnabled = function (bIsEnabled)
|
||
{
|
||
this.m_bIsSelection = bIsEnabled;
|
||
if (false === this.m_bIsSelection)
|
||
{
|
||
this.SelectClear();
|
||
//this.m_oWordControl.CheckUnShowOverlay();
|
||
this.m_oWordControl.OnUpdateOverlay();
|
||
this.m_oWordControl.m_oOverlayApi.m_oContext.globalAlpha = 1.0;
|
||
}
|
||
}
|
||
this.SelectClear = function ()
|
||
{
|
||
if (this.m_oWordControl.MobileTouchManager)
|
||
{
|
||
this.m_oWordControl.MobileTouchManager.RectSelect1 = null;
|
||
this.m_oWordControl.MobileTouchManager.RectSelect2 = null;
|
||
}
|
||
}
|
||
this.SearchClear = function ()
|
||
{
|
||
for (var i = 0; i < this.m_lPagesCount; i++)
|
||
{
|
||
this.m_arrPages[i].searchingArray.splice(0, this.m_arrPages[i].searchingArray.length);
|
||
}
|
||
|
||
this._search_HdrFtr_All.splice(0, this._search_HdrFtr_All.length);
|
||
this._search_HdrFtr_All_no_First.splice(0, this._search_HdrFtr_All_no_First.length);
|
||
this._search_HdrFtr_First.splice(0, this._search_HdrFtr_First.length);
|
||
this._search_HdrFtr_Even.splice(0, this._search_HdrFtr_Even.length);
|
||
this._search_HdrFtr_Odd.splice(0, this._search_HdrFtr_Odd.length);
|
||
this._search_HdrFtr_Odd_no_First.splice(0, this._search_HdrFtr_Odd_no_First.length);
|
||
|
||
this.m_oWordControl.m_oOverlayApi.Clear();
|
||
this.m_bIsSearching = false;
|
||
}
|
||
this.AddPageSearch = function (findText, rects, type)
|
||
{
|
||
var _len = rects.length;
|
||
if (_len == 0)
|
||
return;
|
||
|
||
if (this.m_oWordControl.m_oOverlay.HtmlElement.style.display == "none")
|
||
{
|
||
this.m_oWordControl.ShowOverlay();
|
||
this.m_oWordControl.m_oOverlayApi.m_oContext.globalAlpha = 0.2;
|
||
}
|
||
|
||
var navigator = {Page: rects[0].PageNum, Place: rects, Type: type};
|
||
|
||
var _find = {text: findText, navigator: navigator};
|
||
this.m_oWordControl.m_oApi.sync_SearchFoundCallback(_find);
|
||
|
||
var is_update = false;
|
||
|
||
var _type = type & 0x00FF;
|
||
switch (_type)
|
||
{
|
||
case search_Common:
|
||
{
|
||
var _pages = this.m_arrPages;
|
||
for (var i = 0; i < _len; i++)
|
||
{
|
||
var r = rects[i];
|
||
|
||
if (this.SearchTransform)
|
||
r.Transform = this.SearchTransform;
|
||
|
||
_pages[r.PageNum].searchingArray[_pages[r.PageNum].searchingArray.length] = r;
|
||
|
||
if (r.PageNum >= this.m_lDrawingFirst && r.PageNum <= this.m_lDrawingEnd)
|
||
is_update = true;
|
||
}
|
||
break;
|
||
}
|
||
case search_HdrFtr_All:
|
||
{
|
||
for (var i = 0; i < _len; i++)
|
||
{
|
||
if (this.SearchTransform)
|
||
rects[i].Transform = this.SearchTransform;
|
||
|
||
this._search_HdrFtr_All[this._search_HdrFtr_All.length] = rects[i];
|
||
}
|
||
is_update = true;
|
||
|
||
break;
|
||
}
|
||
case search_HdrFtr_All_no_First:
|
||
{
|
||
for (var i = 0; i < _len; i++)
|
||
{
|
||
if (this.SearchTransform)
|
||
rects[i].Transform = this.SearchTransform;
|
||
|
||
this._search_HdrFtr_All_no_First[this._search_HdrFtr_All_no_First.length] = rects[i];
|
||
}
|
||
if (this.m_lDrawingEnd > 0)
|
||
is_update = true;
|
||
|
||
break;
|
||
}
|
||
case search_HdrFtr_First:
|
||
{
|
||
for (var i = 0; i < _len; i++)
|
||
{
|
||
if (this.SearchTransform)
|
||
rects[i].Transform = this.SearchTransform;
|
||
|
||
this._search_HdrFtr_First[this._search_HdrFtr_First.length] = rects[i];
|
||
}
|
||
if (this.m_lDrawingFirst == 0)
|
||
is_update = true;
|
||
|
||
break;
|
||
}
|
||
case search_HdrFtr_Even:
|
||
{
|
||
for (var i = 0; i < _len; i++)
|
||
{
|
||
if (this.SearchTransform)
|
||
rects[i].Transform = this.SearchTransform;
|
||
|
||
this._search_HdrFtr_Even[this._search_HdrFtr_Even.length] = rects[i];
|
||
}
|
||
var __c = this.m_lDrawingEnd - this.m_lDrawingFirst;
|
||
|
||
if (__c > 1)
|
||
is_update = true;
|
||
else if (__c == 1 && (this.m_lDrawingFirst & 1) == 1)
|
||
is_update = true;
|
||
|
||
break;
|
||
}
|
||
case search_HdrFtr_Odd:
|
||
{
|
||
for (var i = 0; i < _len; i++)
|
||
{
|
||
if (this.SearchTransform)
|
||
rects[i].Transform = this.SearchTransform;
|
||
|
||
this._search_HdrFtr_Odd[this._search_HdrFtr_Odd.length] = rects[i];
|
||
}
|
||
var __c = this.m_lDrawingEnd - this.m_lDrawingFirst;
|
||
|
||
if (__c > 1)
|
||
is_update = true;
|
||
else if (__c == 1 && (this.m_lDrawingFirst & 1) == 0)
|
||
is_update = true;
|
||
|
||
break;
|
||
}
|
||
case search_HdrFtr_Odd_no_First:
|
||
{
|
||
for (var i = 0; i < _len; i++)
|
||
{
|
||
if (this.SearchTransform)
|
||
rects[i].Transform = this.SearchTransform;
|
||
|
||
this._search_HdrFtr_Odd_no_First[this._search_HdrFtr_Odd_no_First.length] = rects[i];
|
||
}
|
||
|
||
if (this.m_lDrawingEnd > 1)
|
||
{
|
||
var __c = this.m_lDrawingEnd - this.m_lDrawingFirst;
|
||
if (__c > 1)
|
||
is_update = true;
|
||
else if (__c == 1 && (this.m_lDrawingFirst & 1) == 0)
|
||
is_update = true;
|
||
}
|
||
|
||
break;
|
||
}
|
||
default:
|
||
break;
|
||
}
|
||
|
||
if (is_update)
|
||
this.m_oWordControl.OnUpdateOverlay();
|
||
|
||
}
|
||
|
||
this.StartSearchTransform = function (transform)
|
||
{
|
||
this.SearchTransform = transform.CreateDublicate();
|
||
}
|
||
|
||
this.EndSearchTransform = function ()
|
||
{
|
||
this.SearchTransform = null;
|
||
}
|
||
|
||
this.StartSearch = function ()
|
||
{
|
||
this.SearchClear();
|
||
if (this.m_bIsSelection)
|
||
this.m_oWordControl.OnUpdateOverlay();
|
||
this.m_bIsSearching = true;
|
||
}
|
||
this.EndSearch = function (bIsChange)
|
||
{
|
||
if (bIsChange)
|
||
{
|
||
this.SearchClear();
|
||
this.m_bIsSearching = false;
|
||
this.m_oWordControl.OnUpdateOverlay();
|
||
}
|
||
else
|
||
{
|
||
this.m_bIsSearching = true;
|
||
this.m_oWordControl.OnUpdateOverlay();
|
||
}
|
||
this.m_oWordControl.m_oApi.sync_SearchEndCallback();
|
||
}
|
||
|
||
this.SetTextSelectionOutline = function (isSelectionOutline)
|
||
{
|
||
this.IsTextSelectionOutline = isSelectionOutline;
|
||
}
|
||
|
||
this.private_StartDrawSelection = function (overlay, isSelect2)
|
||
{
|
||
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.m_oWordControl.MobileTouchManager && (true !== isSelect2))
|
||
{
|
||
this.m_oWordControl.MobileTouchManager.RectSelect1 = null;
|
||
this.m_oWordControl.MobileTouchManager.RectSelect2 = null;
|
||
}
|
||
}
|
||
this.private_EndDrawSelection = function ()
|
||
{
|
||
var ctx = this.Overlay.m_oContext;
|
||
|
||
ctx.globalAlpha = 0.2;
|
||
ctx.fill();
|
||
|
||
if (this.IsTextMatrixUse && this.IsTextSelectionOutline)
|
||
{
|
||
ctx.strokeStyle = "#9ADBFE";
|
||
ctx.lineWidth = 1;
|
||
ctx.globalAlpha = 1.0;
|
||
ctx.stroke();
|
||
}
|
||
|
||
ctx.beginPath();
|
||
ctx.globalAlpha = 1.0;
|
||
|
||
this.IsTextMatrixUse = false;
|
||
this.Overlay = null;
|
||
}
|
||
|
||
this.AddPageSelection = function (pageIndex, x, y, w, h)
|
||
{
|
||
if (null == this.SelectionMatrix)
|
||
this.SelectionMatrix = this.TextMatrix;
|
||
|
||
this.IsTextMatrixUse = ((null != this.TextMatrix) && !global_MatrixTransformer.IsIdentity(this.TextMatrix));
|
||
|
||
var page = this.m_arrPages[pageIndex];
|
||
var drawPage = page.drawingPage;
|
||
|
||
var dKoefX = (drawPage.right - drawPage.left) / page.width_mm;
|
||
var dKoefY = (drawPage.bottom - drawPage.top) / page.height_mm;
|
||
|
||
if (!this.IsTextMatrixUse)
|
||
{
|
||
var _x = ((drawPage.left + dKoefX * x) >> 0);
|
||
var _y = ((drawPage.top + dKoefY * y) >> 0);
|
||
|
||
var _r = ((drawPage.left + dKoefX * (x + w)) >> 0);
|
||
var _b = ((drawPage.top + dKoefY * (y + h)) >> 0);
|
||
|
||
var _w = _r - _x + 1;
|
||
var _h = _b - _y + 1;
|
||
|
||
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 = drawPage.left + dKoefX * _x1;
|
||
var y1 = drawPage.top + dKoefY * _y1;
|
||
|
||
var x2 = drawPage.left + dKoefX * _x2;
|
||
var y2 = drawPage.top + dKoefY * _y2;
|
||
|
||
var x3 = drawPage.left + dKoefX * _x3;
|
||
var y3 = drawPage.top + dKoefY * _y3;
|
||
|
||
var x4 = drawPage.left + dKoefX * _x4;
|
||
var y4 = drawPage.top + dKoefY * _y4;
|
||
|
||
if (global_MatrixTransformer.IsIdentity2(this.TextMatrix))
|
||
{
|
||
x1 = (x1 >> 0) + 0.5;
|
||
y1 = (y1 >> 0) + 0.5;
|
||
|
||
x2 = (x2 >> 0) + 0.5;
|
||
y2 = (y2 >> 0) + 0.5;
|
||
|
||
x3 = (x3 >> 0) + 0.5;
|
||
y3 = (y3 >> 0) + 0.5;
|
||
|
||
x4 = (x4 >> 0) + 0.5;
|
||
y4 = (y4 >> 0) + 0.5;
|
||
}
|
||
|
||
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.AddPageSelection2 = function (pageIndex, x, y, w, h)
|
||
{
|
||
if (!this.OverlaySelection2.Data)
|
||
this.OverlaySelection2.Data = [];
|
||
|
||
this.OverlaySelection2.Data.push([pageIndex, x, y, w, h]);
|
||
}
|
||
|
||
this.DrawPageSelection2 = function(overlay)
|
||
{
|
||
if (this.OverlaySelection2.Data)
|
||
{
|
||
this.private_StartDrawSelection(overlay, true);
|
||
|
||
var len = this.OverlaySelection2.Data.length;
|
||
var value;
|
||
for (var i = 0; i < len; i++)
|
||
{
|
||
value = this.OverlaySelection2.Data[i];
|
||
this.AddPageSelection(value[0], value[1], value[2], value[3], value[4]);
|
||
}
|
||
|
||
this.private_EndDrawSelection();
|
||
}
|
||
this.OverlaySelection2 = {};
|
||
}
|
||
|
||
this.CheckSelectMobile = function (overlay)
|
||
{
|
||
var _select = this.m_oWordControl.m_oLogicDocument.GetSelectionBounds();
|
||
if (!_select)
|
||
return;
|
||
|
||
var _rect1 = _select.Start;
|
||
var _rect2 = _select.End;
|
||
|
||
if (!_rect1 || !_rect2)
|
||
return;
|
||
|
||
var _matrix = this.TextMatrix;
|
||
|
||
var ctx = overlay.m_oContext;
|
||
|
||
var pos1, pos2, pos3, pos4;
|
||
|
||
if (!_matrix || global_MatrixTransformer.IsIdentity(_matrix))
|
||
{
|
||
pos1 = this.ConvertCoordsToCursorWR(_rect1.X, _rect1.Y, _rect1.Page, undefined, false);
|
||
pos2 = this.ConvertCoordsToCursorWR(_rect1.X, _rect1.Y + _rect1.H, _rect1.Page, undefined, false);
|
||
|
||
pos3 = this.ConvertCoordsToCursorWR(_rect2.X + _rect2.W, _rect2.Y, _rect2.Page, undefined, false);
|
||
pos4 = this.ConvertCoordsToCursorWR(_rect2.X + _rect2.W, _rect2.Y + _rect2.H, _rect2.Page, undefined, false);
|
||
|
||
ctx.strokeStyle = "#1B63BA";
|
||
|
||
ctx.moveTo(pos1.X >> 0, pos1.Y >> 0);
|
||
ctx.lineTo(pos2.X >> 0, pos2.Y >> 0);
|
||
|
||
ctx.moveTo(pos3.X >> 0, pos3.Y >> 0);
|
||
ctx.lineTo(pos4.X >> 0, pos4.Y >> 0);
|
||
|
||
ctx.lineWidth = 2;
|
||
ctx.stroke();
|
||
|
||
/*
|
||
ctx.beginPath();
|
||
|
||
ctx.fillStyle = "rgba(0, 0, 0, 0.5)";
|
||
overlay.AddEllipse(pos1.X, pos1.Y - 5, 6.5);
|
||
overlay.AddEllipse(pos4.X, pos4.Y + 5, 6.5);
|
||
ctx.fill();
|
||
|
||
ctx.beginPath();
|
||
|
||
ctx.fillStyle = "#FFFFFF";
|
||
overlay.AddEllipse(pos1.X, pos1.Y - 5, 6);
|
||
overlay.AddEllipse(pos4.X, pos4.Y + 5, 6);
|
||
ctx.fill();
|
||
*/
|
||
|
||
ctx.beginPath();
|
||
|
||
ctx.fillStyle = "#1B63BA";
|
||
overlay.AddEllipse(pos1.X, pos1.Y - 5, 5);
|
||
overlay.AddEllipse(pos4.X, pos4.Y + 5, 5);
|
||
ctx.fill();
|
||
}
|
||
else
|
||
{
|
||
var _xx11 = _matrix.TransformPointX(_rect1.X, _rect1.Y);
|
||
var _yy11 = _matrix.TransformPointY(_rect1.X, _rect1.Y);
|
||
|
||
var _xx12 = _matrix.TransformPointX(_rect1.X, _rect1.Y + _rect1.H);
|
||
var _yy12 = _matrix.TransformPointY(_rect1.X, _rect1.Y + _rect1.H);
|
||
|
||
var _xx21 = _matrix.TransformPointX(_rect2.X + _rect2.W, _rect2.Y);
|
||
var _yy21 = _matrix.TransformPointY(_rect2.X + _rect2.W, _rect2.Y);
|
||
|
||
var _xx22 = _matrix.TransformPointX(_rect2.X + _rect2.W, _rect2.Y + _rect2.H);
|
||
var _yy22 = _matrix.TransformPointY(_rect2.X + _rect2.W, _rect2.Y + _rect2.H);
|
||
|
||
pos1 = this.ConvertCoordsToCursorWR(_xx11, _yy11, _rect1.Page, undefined, false);
|
||
pos2 = this.ConvertCoordsToCursorWR(_xx12, _yy12, _rect1.Page, undefined, false);
|
||
|
||
pos3 = this.ConvertCoordsToCursorWR(_xx21, _yy21, _rect2.Page, undefined, false);
|
||
pos4 = this.ConvertCoordsToCursorWR(_xx22, _yy22, _rect2.Page, undefined, false);
|
||
|
||
ctx.strokeStyle = "#1B63BA";
|
||
|
||
ctx.moveTo(pos1.X, pos1.Y);
|
||
ctx.lineTo(pos2.X, pos2.Y);
|
||
|
||
ctx.moveTo(pos3.X, pos3.Y);
|
||
ctx.lineTo(pos4.X, pos4.Y);
|
||
|
||
ctx.lineWidth = 2;
|
||
ctx.stroke();
|
||
|
||
/*
|
||
ctx.beginPath();
|
||
|
||
ctx.fillStyle = "rgba(0, 0, 0, 0.5)";
|
||
overlay.AddEllipse(pos1.X, pos1.Y - 5, 6.5);
|
||
overlay.AddEllipse(pos4.X, pos4.Y + 5, 6.5);
|
||
ctx.fill();
|
||
|
||
ctx.beginPath();
|
||
|
||
ctx.fillStyle = "#FFFFFF";
|
||
overlay.AddEllipse(pos1.X, pos1.Y - 5, 6);
|
||
overlay.AddEllipse(pos4.X, pos4.Y + 5, 6);
|
||
ctx.fill();
|
||
*/
|
||
|
||
ctx.beginPath();
|
||
|
||
ctx.fillStyle = "#1B63BA";
|
||
overlay.AddEllipse(pos1.X, pos1.Y - 5, 5);
|
||
overlay.AddEllipse(pos4.X, pos4.Y + 5, 5);
|
||
ctx.fill();
|
||
}
|
||
}
|
||
|
||
this.SelectShow = function ()
|
||
{
|
||
this.m_oWordControl.OnUpdateOverlay();
|
||
}
|
||
|
||
this.Set_RulerState_Start = function ()
|
||
{
|
||
this.UpdateRulerStateFlag = true;
|
||
}
|
||
this.Set_RulerState_End = function ()
|
||
{
|
||
if (this.UpdateRulerStateFlag)
|
||
{
|
||
this.UpdateRulerStateFlag = false;
|
||
if (this.UpdateRulerStateParams.length > 0)
|
||
{
|
||
switch (this.UpdateRulerStateParams[0])
|
||
{
|
||
case 0:
|
||
{
|
||
this.Set_RulerState_Table(this.UpdateRulerStateParams[1],
|
||
this.UpdateRulerStateParams[2]);
|
||
break;
|
||
}
|
||
case 1:
|
||
{
|
||
this.Set_RulerState_Paragraph(this.UpdateRulerStateParams[1],
|
||
this.UpdateRulerStateParams[2]);
|
||
break;
|
||
}
|
||
case 2:
|
||
{
|
||
this.Set_RulerState_HdrFtr(this.UpdateRulerStateParams[1],
|
||
this.UpdateRulerStateParams[2],
|
||
this.UpdateRulerStateParams[3]);
|
||
break;
|
||
}
|
||
case 3:
|
||
{
|
||
this.Set_RulerState_Columns(this.UpdateRulerStateParams[1]);
|
||
break;
|
||
}
|
||
default:
|
||
break;
|
||
}
|
||
|
||
this.UpdateRulerStateParams = [];
|
||
}
|
||
}
|
||
}
|
||
|
||
this.Set_RulerState_Table = function (markup, transform)
|
||
{
|
||
if (this.UpdateRulerStateFlag)
|
||
{
|
||
this.UpdateRulerStateParams.splice(0, this.UpdateRulerStateParams.length);
|
||
this.UpdateRulerStateParams.push(0);
|
||
this.UpdateRulerStateParams.push(markup);
|
||
this.UpdateRulerStateParams.push(transform);
|
||
return;
|
||
}
|
||
|
||
this.FrameRect.IsActive = false;
|
||
|
||
var hor_ruler = this.m_oWordControl.m_oHorRuler;
|
||
var ver_ruler = this.m_oWordControl.m_oVerRuler;
|
||
|
||
hor_ruler.CurrentObjectType = RULER_OBJECT_TYPE_TABLE;
|
||
hor_ruler.m_oTableMarkup = markup.CreateDublicate();
|
||
|
||
ver_ruler.CurrentObjectType = RULER_OBJECT_TYPE_TABLE;
|
||
ver_ruler.m_oTableMarkup = markup.CreateDublicate();
|
||
|
||
this.TableOutlineDr.TableMatrix = null;
|
||
this.TableOutlineDr.CurrentPageIndex = this.m_lCurrentPage;
|
||
if (transform)
|
||
{
|
||
hor_ruler.m_oTableMarkup.TransformX = transform.tx;
|
||
hor_ruler.m_oTableMarkup.TransformY = transform.ty;
|
||
|
||
ver_ruler.m_oTableMarkup.TransformX = transform.tx;
|
||
ver_ruler.m_oTableMarkup.TransformY = transform.ty;
|
||
|
||
hor_ruler.m_oTableMarkup.CorrectFrom();
|
||
ver_ruler.m_oTableMarkup.CorrectFrom();
|
||
|
||
this.TableOutlineDr.TableMatrix = transform.CreateDublicate();
|
||
}
|
||
|
||
hor_ruler.CalculateMargins();
|
||
|
||
if (0 <= this.m_lCurrentPage && this.m_lCurrentPage < this.m_lPagesCount)
|
||
{
|
||
hor_ruler.CreateBackground(this.m_arrPages[this.m_lCurrentPage]);
|
||
ver_ruler.CreateBackground(this.m_arrPages[this.m_lCurrentPage]);
|
||
}
|
||
|
||
this.m_oWordControl.UpdateHorRuler();
|
||
this.m_oWordControl.UpdateVerRuler();
|
||
|
||
if (this.m_oWordControl.MobileTouchManager)
|
||
{
|
||
this.m_oWordControl.MobileTouchManager.TableStartTrack_Check = true;
|
||
markup.Table.Start_TrackTable();
|
||
this.m_oWordControl.MobileTouchManager.TableStartTrack_Check = false;
|
||
}
|
||
}
|
||
|
||
this.Set_RulerState_Paragraph = function (margins, isCanTrackMargins)
|
||
{
|
||
if (this.UpdateRulerStateFlag)
|
||
{
|
||
this.UpdateRulerStateParams.splice(0, this.UpdateRulerStateParams.length);
|
||
this.UpdateRulerStateParams.push(1);
|
||
this.UpdateRulerStateParams.push(margins);
|
||
this.UpdateRulerStateParams.push(isCanTrackMargins);
|
||
return;
|
||
}
|
||
|
||
if (margins && margins.Frame !== undefined)
|
||
{
|
||
var bIsUpdate = false;
|
||
|
||
if (!this.FrameRect.IsActive)
|
||
bIsUpdate = true;
|
||
|
||
if (!bIsUpdate)
|
||
{
|
||
if (this.FrameRect.Rect.X != margins.L ||
|
||
this.FrameRect.Rect.Y != margins.T ||
|
||
this.FrameRect.Rect.R != margins.R ||
|
||
this.FrameRect.Rect.B != margins.B ||
|
||
this.FrameRect.PageIndex != margins.PageIndex)
|
||
{
|
||
bIsUpdate = true;
|
||
}
|
||
}
|
||
|
||
this.FrameRect.IsActive = true;
|
||
this.FrameRect.Rect.X = margins.L;
|
||
this.FrameRect.Rect.Y = margins.T;
|
||
this.FrameRect.Rect.R = margins.R;
|
||
this.FrameRect.Rect.B = margins.B;
|
||
this.FrameRect.PageIndex = margins.PageIndex;
|
||
this.FrameRect.Frame = margins.Frame;
|
||
|
||
if (bIsUpdate)
|
||
{
|
||
if (this.m_oWordControl.m_oOverlay.HtmlElement.style.display != "block")
|
||
this.m_oWordControl.ShowOverlay();
|
||
|
||
this.m_oWordControl.OnUpdateOverlay();
|
||
}
|
||
}
|
||
else
|
||
{
|
||
if (this.FrameRect.IsActive)
|
||
{
|
||
if (this.m_oWordControl.m_oOverlay.HtmlElement.style.display != "block")
|
||
this.m_oWordControl.ShowOverlay();
|
||
|
||
this.FrameRect.IsActive = false;
|
||
this.m_oWordControl.OnUpdateOverlay();
|
||
}
|
||
else
|
||
this.FrameRect.IsActive = false;
|
||
}
|
||
|
||
var hor_ruler = this.m_oWordControl.m_oHorRuler;
|
||
var ver_ruler = this.m_oWordControl.m_oVerRuler;
|
||
|
||
if (hor_ruler.CurrentObjectType == RULER_OBJECT_TYPE_PARAGRAPH && ver_ruler.CurrentObjectType == RULER_OBJECT_TYPE_PARAGRAPH)
|
||
{
|
||
if ((margins && !hor_ruler.IsCanMoveMargins) || (!margins && hor_ruler.IsCanMoveMargins))
|
||
{
|
||
var bIsNeedUpdate = false;
|
||
if (margins && this.LastParagraphMargins)
|
||
{
|
||
if (margins.L != this.LastParagraphMargins.L ||
|
||
margins.T != this.LastParagraphMargins.T ||
|
||
margins.R != this.LastParagraphMargins.R ||
|
||
margins.B != this.LastParagraphMargins.B)
|
||
{
|
||
bIsNeedUpdate = true;
|
||
}
|
||
}
|
||
|
||
if (!bIsNeedUpdate)
|
||
return;
|
||
}
|
||
}
|
||
|
||
hor_ruler.CurrentObjectType = RULER_OBJECT_TYPE_PARAGRAPH;
|
||
hor_ruler.m_oTableMarkup = null;
|
||
hor_ruler.m_oColumnMarkup = null;
|
||
|
||
ver_ruler.CurrentObjectType = RULER_OBJECT_TYPE_PARAGRAPH;
|
||
ver_ruler.m_oTableMarkup = null;
|
||
|
||
// вообще надо посмотреть... может и был параграф до этого.
|
||
// тогда вэкграунд перерисовывать не нужно. Только надо знать, на той же странице это было или нет
|
||
if (-1 != this.m_lCurrentPage && this.m_arrPages[this.m_lCurrentPage])
|
||
{
|
||
if (margins)
|
||
{
|
||
var cachedPage = {};
|
||
cachedPage.width_mm = this.m_arrPages[this.m_lCurrentPage].width_mm;
|
||
cachedPage.height_mm = this.m_arrPages[this.m_lCurrentPage].height_mm;
|
||
|
||
cachedPage.margin_left = margins.L;
|
||
cachedPage.margin_top = margins.T;
|
||
cachedPage.margin_right = margins.R;
|
||
cachedPage.margin_bottom = margins.B;
|
||
|
||
hor_ruler.CreateBackground(cachedPage);
|
||
ver_ruler.CreateBackground(cachedPage);
|
||
|
||
// disable margins
|
||
if (true !== isCanTrackMargins)
|
||
{
|
||
hor_ruler.IsCanMoveMargins = false;
|
||
ver_ruler.IsCanMoveMargins = false;
|
||
}
|
||
else
|
||
{
|
||
hor_ruler.IsCanMoveMargins = true;
|
||
ver_ruler.IsCanMoveMargins = true;
|
||
}
|
||
|
||
this.LastParagraphMargins = {};
|
||
this.LastParagraphMargins.L = margins.L;
|
||
this.LastParagraphMargins.T = margins.T;
|
||
this.LastParagraphMargins.R = margins.R;
|
||
this.LastParagraphMargins.B = margins.B;
|
||
}
|
||
else
|
||
{
|
||
hor_ruler.CreateBackground(this.m_arrPages[this.m_lCurrentPage]);
|
||
ver_ruler.CreateBackground(this.m_arrPages[this.m_lCurrentPage]);
|
||
|
||
// enable margins
|
||
hor_ruler.IsCanMoveMargins = true;
|
||
ver_ruler.IsCanMoveMargins = true;
|
||
|
||
this.LastParagraphMargins = null;
|
||
}
|
||
}
|
||
|
||
this.m_oWordControl.UpdateHorRuler();
|
||
this.m_oWordControl.UpdateVerRuler();
|
||
}
|
||
|
||
this.Set_RulerState_Columns = function (markup)
|
||
{
|
||
if (this.UpdateRulerStateFlag)
|
||
{
|
||
this.UpdateRulerStateParams.splice(0, this.UpdateRulerStateParams.length);
|
||
this.UpdateRulerStateParams.push(3);
|
||
this.UpdateRulerStateParams.push(markup);
|
||
return;
|
||
}
|
||
|
||
this.FrameRect.IsActive = false;
|
||
|
||
var hor_ruler = this.m_oWordControl.m_oHorRuler;
|
||
var ver_ruler = this.m_oWordControl.m_oVerRuler;
|
||
|
||
hor_ruler.CurrentObjectType = RULER_OBJECT_TYPE_COLUMNS;
|
||
hor_ruler.m_oTableMarkup = null;
|
||
hor_ruler.m_oColumnMarkup = markup.CreateDuplicate();
|
||
|
||
ver_ruler.CurrentObjectType = RULER_OBJECT_TYPE_PARAGRAPH;
|
||
ver_ruler.m_oTableMarkup = null;
|
||
|
||
this.TableOutlineDr.TableMatrix = null;
|
||
this.TableOutlineDr.CurrentPageIndex = this.m_lCurrentPage;
|
||
|
||
hor_ruler.CalculateMargins();
|
||
|
||
if (0 <= this.m_lCurrentPage && this.m_lCurrentPage < this.m_lPagesCount)
|
||
{
|
||
hor_ruler.CreateBackground(this.m_arrPages[this.m_lCurrentPage]);
|
||
ver_ruler.CreateBackground(this.m_arrPages[this.m_lCurrentPage]);
|
||
}
|
||
|
||
this.m_oWordControl.UpdateHorRuler();
|
||
this.m_oWordControl.UpdateVerRuler();
|
||
};
|
||
|
||
this.Set_RulerState_HdrFtr = function (bHeader, Y0, Y1)
|
||
{
|
||
if (this.UpdateRulerStateFlag)
|
||
{
|
||
this.UpdateRulerStateParams.splice(0, this.UpdateRulerStateParams.length);
|
||
this.UpdateRulerStateParams.push(2);
|
||
this.UpdateRulerStateParams.push(bHeader);
|
||
this.UpdateRulerStateParams.push(Y0);
|
||
this.UpdateRulerStateParams.push(Y1);
|
||
return;
|
||
}
|
||
|
||
this.FrameRect.IsActive = false;
|
||
|
||
var hor_ruler = this.m_oWordControl.m_oHorRuler;
|
||
var ver_ruler = this.m_oWordControl.m_oVerRuler;
|
||
|
||
hor_ruler.CurrentObjectType = RULER_OBJECT_TYPE_PARAGRAPH;
|
||
hor_ruler.m_oTableMarkup = null;
|
||
hor_ruler.m_oColumnMarkup = null;
|
||
|
||
ver_ruler.CurrentObjectType = (true === bHeader) ? RULER_OBJECT_TYPE_HEADER : RULER_OBJECT_TYPE_FOOTER;
|
||
ver_ruler.header_top = Y0;
|
||
ver_ruler.header_bottom = Y1;
|
||
ver_ruler.m_oTableMarkup = null;
|
||
|
||
// вообще надо посмотреть... может и бал параграф до этого.
|
||
// тогда вэкграунд перерисовывать не нужно. Только надо знать, на той же странице это было или нет
|
||
if (-1 != this.m_lCurrentPage)
|
||
{
|
||
hor_ruler.CreateBackground(this.m_arrPages[this.m_lCurrentPage]);
|
||
ver_ruler.CreateBackground(this.m_arrPages[this.m_lCurrentPage]);
|
||
}
|
||
|
||
this.m_oWordControl.UpdateHorRuler();
|
||
this.m_oWordControl.UpdateVerRuler();
|
||
}
|
||
|
||
this.Update_MathTrack = function (IsActive, IsContentActive, oMath)
|
||
{
|
||
this.MathRect.IsActive = IsActive;
|
||
|
||
if (true === IsActive && null !== oMath)
|
||
{
|
||
var selectBounds = true === IsContentActive ? oMath.Get_ContentSelection() : null;
|
||
if (selectBounds != null)
|
||
{
|
||
var SelectPolygon = new CPolygon();
|
||
SelectPolygon.fill(selectBounds);
|
||
this.MathSelectPolygons = SelectPolygon.GetPaths(0);
|
||
}
|
||
else
|
||
{
|
||
this.MathSelectPolygons.length = 0;
|
||
}
|
||
|
||
var arrBounds = oMath.Get_Bounds();
|
||
|
||
if (arrBounds.length <= 0)
|
||
return;
|
||
|
||
var MPolygon = new CPolygon();
|
||
MPolygon.fill(arrBounds);
|
||
|
||
var PixelError = this.GetMMPerDot(1) * 3;
|
||
this.MathPolygons = MPolygon.GetPaths(PixelError);
|
||
}
|
||
};
|
||
|
||
this.Update_FieldTrack = function (IsActive, aRects)
|
||
{
|
||
this.FieldTrack.IsActive = IsActive;
|
||
|
||
if (true === IsActive)
|
||
this.FieldTrack.Rects = aRects;
|
||
else
|
||
this.FieldTrack.Rects = [];
|
||
};
|
||
|
||
this.Update_ParaTab = function (Default_Tab, ParaTabs)
|
||
{
|
||
var hor_ruler = this.m_oWordControl.m_oHorRuler;
|
||
|
||
var __tabs = ParaTabs.Tabs;
|
||
if (undefined === __tabs)
|
||
__tabs = ParaTabs;
|
||
|
||
var _len = __tabs.length;
|
||
if ((Default_Tab == hor_ruler.m_dDefaultTab) && (hor_ruler.m_arrTabs.length == _len) && (_len == 0))
|
||
{
|
||
// потом можно и проверить сами табы
|
||
return;
|
||
}
|
||
|
||
hor_ruler.m_dDefaultTab = Default_Tab;
|
||
hor_ruler.m_arrTabs = [];
|
||
var _ar = hor_ruler.m_arrTabs;
|
||
|
||
for (var i = 0; i < _len; i++)
|
||
{
|
||
if (__tabs[i].Value == tab_Left)
|
||
_ar[i] = new CTab(__tabs[i].Pos, AscCommon.g_tabtype_left, __tabs[i].Leader);
|
||
else if (__tabs[i].Value == tab_Center)
|
||
_ar[i] = new CTab(__tabs[i].Pos, AscCommon.g_tabtype_center, __tabs[i].Leader);
|
||
else if (__tabs[i].Value == tab_Right)
|
||
_ar[i] = new CTab(__tabs[i].Pos, AscCommon.g_tabtype_right, __tabs[i].Leader);
|
||
else
|
||
{
|
||
// не должно такого быть. но приходит
|
||
_ar[i] = new CTab(__tabs[i].Pos, AscCommon.g_tabtype_left, __tabs[i].Leader);
|
||
}
|
||
}
|
||
|
||
hor_ruler.CorrectTabs();
|
||
this.m_oWordControl.UpdateHorRuler();
|
||
}
|
||
|
||
this.CorrectRulerPosition = function (pos)
|
||
{
|
||
if (AscCommon.global_keyboardEvent.AltKey)
|
||
return pos;
|
||
|
||
return ((pos / 2.5 + 0.5) >> 0) * 2.5;
|
||
}
|
||
|
||
this.UpdateTableRuler = function (isCols, index, position)
|
||
{
|
||
var dKoef_mm_to_pix = g_dKoef_mm_to_pix * this.m_oWordControl.m_nZoomValue / 100;
|
||
if (false === isCols)
|
||
{
|
||
var markup = this.m_oWordControl.m_oVerRuler.m_oTableMarkup;
|
||
if (markup == null)
|
||
return;
|
||
|
||
position += markup.TransformY;
|
||
if (0 == index)
|
||
{
|
||
var delta = position - markup.Rows[0].Y;
|
||
markup.Rows[0].Y = position;
|
||
markup.Rows[0].H -= delta;
|
||
}
|
||
else
|
||
{
|
||
var delta = (markup.Rows[index - 1].Y + markup.Rows[index - 1].H) - position;
|
||
|
||
markup.Rows[index - 1].H -= delta;
|
||
|
||
if (index != markup.Rows.length)
|
||
{
|
||
markup.Rows[index].Y -= delta;
|
||
markup.Rows[index].H += delta;
|
||
}
|
||
}
|
||
|
||
if ("none" == this.m_oWordControl.m_oOverlay.HtmlElement.style.display)
|
||
this.m_oWordControl.ShowOverlay();
|
||
|
||
this.m_oWordControl.UpdateVerRulerBack();
|
||
this.m_oWordControl.m_oOverlayApi.HorLine(this.m_arrPages[this.m_lCurrentPage].drawingPage.top + position * dKoef_mm_to_pix);
|
||
}
|
||
else
|
||
{
|
||
var markup = this.m_oWordControl.m_oHorRuler.m_oTableMarkup;
|
||
if (markup == null)
|
||
return;
|
||
|
||
position += markup.TransformX;
|
||
|
||
if (0 == index)
|
||
{
|
||
var _add = markup.X - position;
|
||
markup.X = position;
|
||
if (markup.Cols.length > 0)
|
||
markup.Cols[0] += _add;
|
||
}
|
||
else
|
||
{
|
||
var _start = markup.X;
|
||
for (var i = 0; i < (index - 1); i++)
|
||
{
|
||
_start += markup.Cols[i];
|
||
}
|
||
|
||
var _old = markup.Cols[index - 1];
|
||
markup.Cols[index - 1] = position - _start;
|
||
|
||
if (index != markup.Cols.length)
|
||
{
|
||
markup.Cols[index] += (_old - markup.Cols[index - 1]);
|
||
}
|
||
}
|
||
|
||
if ("none" == this.m_oWordControl.m_oOverlay.HtmlElement.style.display)
|
||
this.m_oWordControl.ShowOverlay();
|
||
|
||
this.m_oWordControl.UpdateHorRulerBack();
|
||
this.m_oWordControl.m_oOverlayApi.VertLine(this.m_arrPages[this.m_lCurrentPage].drawingPage.left + position * dKoef_mm_to_pix);
|
||
}
|
||
}
|
||
this.GetDotsPerMM = function (value)
|
||
{
|
||
return value * this.m_oWordControl.m_nZoomValue * g_dKoef_mm_to_pix / 100;
|
||
}
|
||
|
||
this.GetMMPerDot = function (value)
|
||
{
|
||
return value / this.GetDotsPerMM(1);
|
||
}
|
||
this.GetVisibleMMHeight = function ()
|
||
{
|
||
var pixHeigth = this.m_oWordControl.m_oEditor.HtmlElement.height;
|
||
if (this.m_oWordControl.bIsRetinaSupport)
|
||
pixHeigth /= AscCommon.AscBrowser.retinaPixelRatio;
|
||
var pixBetweenPages = 20 * (this.m_lDrawingEnd - this.m_lDrawingFirst);
|
||
|
||
return (pixHeigth - pixBetweenPages) * g_dKoef_pix_to_mm * 100 / this.m_oWordControl.m_nZoomValue;
|
||
}
|
||
|
||
// вот оооочень важная функция. она выкидывает из кэша неиспользуемые шрифты
|
||
this.CheckFontCache = function ()
|
||
{
|
||
var map_used = this.m_oWordControl.m_oLogicDocument.Document_CreateFontMap();
|
||
|
||
var _measure_map = g_oTextMeasurer.m_oManager.m_oFontsCache.Fonts;
|
||
var _drawing_map = AscCommon.g_fontManager.m_oFontsCache.Fonts;
|
||
|
||
var map_keys = {};
|
||
var api = this.m_oWordControl.m_oApi;
|
||
for (var i in map_used)
|
||
{
|
||
var key = AscFonts.GenerateMapId(api, g_fontApplication.GetFontInfoName(map_used[i].Name), map_used[i].Style, map_used[i].Size);
|
||
map_keys[key] = true;
|
||
}
|
||
|
||
// а теперь просто пробегаем по кэшам и удаляем ненужное
|
||
for (var i in _measure_map)
|
||
{
|
||
if (map_keys[i] == undefined)
|
||
{
|
||
//_measure_map[i] = undefined;
|
||
delete _measure_map[i];
|
||
}
|
||
}
|
||
for (var i in _drawing_map)
|
||
{
|
||
if (map_keys[i] == undefined)
|
||
{
|
||
//_drawing_map[i] = undefined;
|
||
if (null != _drawing_map[i])
|
||
_drawing_map[i].Destroy();
|
||
delete _drawing_map[i];
|
||
}
|
||
}
|
||
}
|
||
|
||
// при загрузке документа - нужно понять какие шрифты используются
|
||
this.CheckFontNeeds = function ()
|
||
{
|
||
var map_keys = this.m_oWordControl.m_oLogicDocument.Document_Get_AllFontNames();
|
||
var dstfonts = [];
|
||
for (var i in map_keys)
|
||
{
|
||
dstfonts[dstfonts.length] = new AscFonts.CFont(i, 0, "", 0, null);
|
||
}
|
||
AscFonts.FontPickerByCharacter.extendFonts(dstfonts);
|
||
this.m_oWordControl.m_oLogicDocument.Fonts = dstfonts;
|
||
return;
|
||
|
||
/*
|
||
var map_used = this.m_oWordControl.m_oLogicDocument.Document_CreateFontMap();
|
||
|
||
var map_keys = {};
|
||
for (var i in map_used)
|
||
{
|
||
var search = map_used[i];
|
||
var found = map_keys[search.Name];
|
||
|
||
var _need_style = 0;
|
||
switch (search.Style)
|
||
{
|
||
case FontStyle.FontStyleRegular:
|
||
{
|
||
_need_style = fontstyle_mask_regular;
|
||
break;
|
||
}
|
||
case FontStyle.FontStyleBold:
|
||
{
|
||
_need_style = fontstyle_mask_bold;
|
||
break;
|
||
}
|
||
case FontStyle.FontStyleItalic:
|
||
{
|
||
_need_style = fontstyle_mask_italic;
|
||
break;
|
||
}
|
||
case FontStyle.FontStyleBoldItalic:
|
||
{
|
||
_need_style = fontstyle_mask_bolditalic;
|
||
break;
|
||
}
|
||
default:
|
||
{
|
||
_need_style = fontstyle_mask_regular | fontstyle_mask_italic | fontstyle_mask_bold | fontstyle_mask_bolditalic;
|
||
break;
|
||
}
|
||
}
|
||
|
||
if (undefined === found)
|
||
{
|
||
map_keys[search.Name] = _need_style;
|
||
}
|
||
else
|
||
{
|
||
map_keys[search.Name] |= _need_style;
|
||
}
|
||
}
|
||
|
||
// теперь просто пробегаем и заполняем все объектами
|
||
var dstfonts = [];
|
||
for (var i in map_keys)
|
||
{
|
||
dstfonts[dstfonts.length] = new CFont(i, 0, "", 0, map_keys[i]);
|
||
}
|
||
this.m_oWordControl.m_oLogicDocument.Fonts = dstfonts;
|
||
*/
|
||
}
|
||
|
||
// фукнции для старта работы
|
||
this.OpenDocument = function ()
|
||
{
|
||
//SetHintsProps(false, false);
|
||
this.m_oDocumentRenderer.InitDocument(this);
|
||
|
||
this.m_oWordControl.CalculateDocumentSize();
|
||
this.m_oWordControl.OnScroll();
|
||
}
|
||
|
||
// вот здесь весь трекинг
|
||
this.DrawTrack = function (type, matrix, left, top, width, height, isLine, canRotate, isNoMove)
|
||
{
|
||
this.AutoShapesTrack.DrawTrack(type, matrix, left, top, width, height, isLine, canRotate, isNoMove);
|
||
}
|
||
|
||
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 ()
|
||
{
|
||
// потом реализовать проверку на то, что нужно ли посылать
|
||
var _theme = this.m_oWordControl.m_oLogicDocument.theme;
|
||
var _clrMap = this.m_oWordControl.m_oLogicDocument.clrSchemeMap.color_map;
|
||
|
||
var arr_colors = new Array(10);
|
||
var rgba = {R: 0, G: 0, B: 0, A: 255};
|
||
// bg1,tx1,bg2,tx2,accent1 - accent6
|
||
var array_colors_types = [6, 15, 7, 16, 0, 1, 2, 3, 4, 5];
|
||
var _count = array_colors_types.length;
|
||
|
||
var color = new AscFormat.CUniColor();
|
||
color.color = new AscFormat.CSchemeColor();
|
||
for (var i = 0; i < _count; ++i)
|
||
{
|
||
color.color.id = array_colors_types[i];
|
||
color.Calculate(_theme, _clrMap, rgba);
|
||
|
||
var _rgba = color.RGBA;
|
||
arr_colors[i] = new CColor(_rgba.R, _rgba.G, _rgba.B);
|
||
}
|
||
|
||
// теперь проверим
|
||
var bIsSend = false;
|
||
if (this.GuiControlColorsMap != null)
|
||
{
|
||
for (var i = 0; i < _count; ++i)
|
||
{
|
||
var _color1 = this.GuiControlColorsMap[i];
|
||
var _color2 = arr_colors[i];
|
||
|
||
if ((_color1.r != _color2.r) || (_color1.g != _color2.g) || (_color1.b != _color2.b))
|
||
{
|
||
bIsSend = true;
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
else
|
||
{
|
||
this.GuiControlColorsMap = new Array(_count);
|
||
bIsSend = true;
|
||
}
|
||
|
||
if (bIsSend)
|
||
{
|
||
for (var i = 0; i < _count; ++i)
|
||
{
|
||
this.GuiControlColorsMap[i] = arr_colors[i];
|
||
}
|
||
|
||
this.SendControlColors();
|
||
}
|
||
}
|
||
|
||
this.SendControlColors = function ()
|
||
{
|
||
var standart_colors = null;
|
||
if (!this.IsSendStandartColors)
|
||
{
|
||
var standartColors = AscCommon.g_oStandartColors;
|
||
var _c_s = standartColors.length;
|
||
standart_colors = new Array(_c_s);
|
||
|
||
for (var i = 0; i < _c_s; ++i)
|
||
{
|
||
standart_colors[i] = new CColor(standartColors[i].R, standartColors[i].G, standartColors[i].B);
|
||
}
|
||
|
||
this.IsSendStandartColors = true;
|
||
}
|
||
|
||
var _count = this.GuiControlColorsMap.length;
|
||
|
||
var _ret_array = new Array(_count * 6);
|
||
var _cur_index = 0;
|
||
|
||
for (var i = 0; i < _count; ++i)
|
||
{
|
||
var _color_src = this.GuiControlColorsMap[i];
|
||
|
||
_ret_array[_cur_index] = new CColor(_color_src.r, _color_src.g, _color_src.b);
|
||
_cur_index++;
|
||
|
||
// теперь с модификаторами
|
||
var _count_mods = 5;
|
||
for (var j = 0; j < _count_mods; ++j)
|
||
{
|
||
var dst_mods = new AscFormat.CColorModifiers();
|
||
dst_mods.Mods = AscCommon.GetDefaultMods(_color_src.r, _color_src.g, _color_src.b, j + 1, 1);
|
||
|
||
var _rgba = {R: _color_src.r, G: _color_src.g, B: _color_src.b, A: 255};
|
||
dst_mods.Apply(_rgba);
|
||
|
||
_ret_array[_cur_index] = new CColor(_rgba.R, _rgba.G, _rgba.B);
|
||
_cur_index++;
|
||
}
|
||
}
|
||
|
||
this.m_oWordControl.m_oApi.sync_SendThemeColors(_ret_array, standart_colors);
|
||
|
||
// regenerate styles
|
||
if (null == this.m_oWordControl.m_oApi._gui_styles)
|
||
{
|
||
if (window["NATIVE_EDITOR_ENJINE"] === true)
|
||
{
|
||
if (!this.m_oWordControl.m_oApi.asc_checkNeedCallback("asc_onInitEditorStyles"))
|
||
return;
|
||
}
|
||
var StylesPainter = new CStylesPainter();
|
||
StylesPainter.GenerateStyles(this.m_oWordControl.m_oApi, this.m_oWordControl.m_oLogicDocument.Get_Styles().Style);
|
||
}
|
||
}
|
||
|
||
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 _img = this.m_oWordControl.m_oApi.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 if (!_img || !_img.Image)
|
||
{
|
||
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.InitGuiCanvasShape = function (div_id)
|
||
{
|
||
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;
|
||
|
||
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');
|
||
|
||
_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;
|
||
|
||
if (this.GuiCanvasTextProps.width != _width || this.GuiCanvasTextProps.height != _height)
|
||
{
|
||
this.GuiCanvasTextProps.width = _width;
|
||
this.GuiCanvasTextProps.height = _height;
|
||
}
|
||
}
|
||
}
|
||
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.width = _width;
|
||
this.GuiCanvasTextProps.height = _height;
|
||
|
||
_div_elem.appendChild(this.GuiCanvasTextProps);
|
||
}
|
||
}
|
||
|
||
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;
|
||
|
||
History.TurnOff();
|
||
var _oldTurn = editor.isViewMode;
|
||
editor.isViewMode = true;
|
||
|
||
var par = new Paragraph(this, this.m_oWordControl.m_oLogicDocument);
|
||
|
||
par.MoveCursorToStartPos();
|
||
|
||
var _paraPr = new CParaPr();
|
||
par.Pr = _paraPr;
|
||
var _textPr = new CTextPr();
|
||
_textPr.FontFamily = {Name: "Arial", Index: -1};
|
||
|
||
_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.AddToContent(0, parRun);
|
||
|
||
par.Reset(0, 0, 1000, 1000, 0, 0, 1);
|
||
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 * g_dKoef_mm_to_pix;//(_bounds.Right - _bounds.Left) * g_dKoef_mm_to_pix;
|
||
var _pxBoundsH = (_bounds.Bottom - _bounds.Top) * g_dKoef_mm_to_pix;
|
||
|
||
if (this.GuiLastTextProps.Position !== undefined && this.GuiLastTextProps.Position != null && this.GuiLastTextProps.Position != 0)
|
||
{
|
||
// TODO: нужна высота без учета Position
|
||
// _pxBoundsH -= (this.GuiLastTextProps.Position * 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 * 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);
|
||
|
||
var old_marks = this.m_oWordControl.m_oApi.ShowParaMarks;
|
||
this.m_oWordControl.m_oApi.ShowParaMarks = false;
|
||
par.Draw(0, graphics);
|
||
this.m_oWordControl.m_oApi.ShowParaMarks = old_marks;
|
||
|
||
History.TurnOn();
|
||
editor.isViewMode = _oldTurn;
|
||
}
|
||
|
||
this.SetDrawImagePlaceContents = function(id, props)
|
||
{
|
||
var _div_elem = null;
|
||
|
||
if (null == id || "" == id)
|
||
{
|
||
if ("" != this.GuiCanvasFillTOCParentId)
|
||
{
|
||
_div_elem = document.getElementById(this.GuiCanvasFillTOCParentId);
|
||
|
||
if (this.GuiCanvasFillTOC && _div_elem)
|
||
_div_elem.removeChild(this.GuiCanvasFillTOC);
|
||
|
||
this.GuiCanvasFillTOCParentId = "";
|
||
this.GuiCanvasFillTOC = null;
|
||
}
|
||
return;
|
||
}
|
||
|
||
if (id != this.GuiCanvasFillTOCParentId)
|
||
{
|
||
_div_elem = document.getElementById(this.GuiCanvasFillTOCParentId);
|
||
|
||
if (this.GuiCanvasFillTOC && _div_elem)
|
||
_div_elem.removeChild(this.GuiCanvasFillTOC);
|
||
|
||
this.GuiCanvasFillTOCParentId = "";
|
||
this.GuiCanvasFillTOC = null;
|
||
}
|
||
|
||
this.GuiCanvasFillTOCParentId = id;
|
||
_div_elem = document.getElementById(this.GuiCanvasFillTOCParentId);
|
||
if (!_div_elem)
|
||
return;
|
||
|
||
var widthPx = _div_elem.offsetWidth;
|
||
var heightPx = _div_elem.offsetHeight;
|
||
|
||
if (null == this.GuiCanvasFillTOC)
|
||
{
|
||
this.GuiCanvasFillTexture = null;
|
||
this.GuiCanvasFillTextureCtx = null;
|
||
|
||
this.GuiCanvasFillTOC = document.createElement('canvas');
|
||
_div_elem.appendChild(this.GuiCanvasFillTOC);
|
||
}
|
||
|
||
// draw!
|
||
var wPx = AscBrowser.convertToRetinaValue(widthPx, true);
|
||
var hPx = AscBrowser.convertToRetinaValue(heightPx, true);
|
||
var wMm = wPx * g_dKoef_pix_to_mm / AscCommon.AscBrowser.retinaPixelRatio;
|
||
var hMm = hPx * g_dKoef_pix_to_mm / AscCommon.AscBrowser.retinaPixelRatio;
|
||
|
||
var wPxOffset = AscBrowser.convertToRetinaValue(8, true);
|
||
var wMmOffset = wPxOffset * g_dKoef_pix_to_mm / AscCommon.AscBrowser.retinaPixelRatio;
|
||
|
||
this.GuiCanvasFillTOC.style.width = widthPx + "px";
|
||
this.GuiCanvasFillTOC.width = wPx;
|
||
|
||
History.TurnOff();
|
||
var _oldTurn = editor.isViewMode;
|
||
editor.isViewMode = true;
|
||
|
||
var ctx = this.GuiCanvasFillTOC.getContext('2d');
|
||
|
||
var old_marks = this.m_oWordControl.m_oApi.ShowParaMarks;
|
||
this.m_oWordControl.m_oApi.ShowParaMarks = false;
|
||
|
||
// content
|
||
var oLogicDocument = this.m_oWordControl.m_oLogicDocument;
|
||
var oStyles = oLogicDocument.GetStyles();
|
||
|
||
var oHeader = new CHeaderFooter(oLogicDocument.HdrFtr, oLogicDocument, this, AscCommon.hdrftr_Header);
|
||
var oDocumentContent = oHeader.GetContent();
|
||
|
||
var nOutlineStart = props.get_OutlineStart();
|
||
var nOutlineEnd = props.get_OutlineEnd();
|
||
var nStylesType = props.get_StylesType();
|
||
var isShowPageNum = props.get_ShowPageNumbers();
|
||
var isRightTab = props.get_RightAlignTab();
|
||
var nTabLeader = props.get_TabLeader();
|
||
|
||
if (undefined === nTabLeader || null === nTabLeader)
|
||
nTabLeader = Asc.c_oAscTabLeader.Dot;
|
||
|
||
var arrLevels = [];
|
||
var arrStylesToDelete = [];
|
||
|
||
for (var nIndex = 0, nCount = props.get_StylesCount(); nIndex < nCount; ++nIndex)
|
||
{
|
||
var nLvl = props.get_StyleLevel(nIndex) - 1;
|
||
var sName = props.get_StyleName(nIndex);
|
||
|
||
if (!arrLevels[nLvl])
|
||
{
|
||
var sStyleId = null;
|
||
if (Asc.c_oAscTOCStylesType.Current === nStylesType)
|
||
{
|
||
sStyleId = oStyles.GetDefaultTOC(nLvl);
|
||
}
|
||
else
|
||
{
|
||
var oStyle = new CStyle("", null, null, styletype_Paragraph, true);
|
||
oStyle.CreateTOC(nLvl, nStylesType);
|
||
sStyleId = oStyle.GetId();
|
||
oStyles.Add(oStyle);
|
||
arrStylesToDelete.push(oStyle.GetId());
|
||
}
|
||
|
||
arrLevels[nLvl] = {
|
||
Styles : [],
|
||
StyleId : sStyleId
|
||
};
|
||
}
|
||
|
||
var isAddStyle = true;
|
||
for (var nIndex = 0, nCount = arrLevels[nLvl].Styles.length; nIndex < nCount; ++nIndex)
|
||
{
|
||
if (arrLevels[nLvl].Styles[nIndex] === sName)
|
||
{
|
||
isAddStyle = false;
|
||
break;
|
||
}
|
||
}
|
||
|
||
if (isAddStyle)
|
||
arrLevels[nLvl].Styles.push(sName);
|
||
}
|
||
|
||
for (var _nLvl = nOutlineStart; _nLvl <= nOutlineEnd; ++_nLvl)
|
||
{
|
||
var sName = "Heading " + _nLvl;
|
||
var nLvl = _nLvl - 1;
|
||
|
||
if (!arrLevels[nLvl])
|
||
{
|
||
var sStyleId = null;
|
||
if (Asc.c_oAscTOCStylesType.Current === nStylesType)
|
||
{
|
||
sStyleId = oStyles.GetDefaultTOC(nLvl);
|
||
}
|
||
else
|
||
{
|
||
var oStyle = new CStyle("", null, null, styletype_Paragraph, true);
|
||
oStyle.CreateTOC(nLvl, nStylesType);
|
||
sStyleId = oStyle.GetId();
|
||
oStyles.Add(oStyle);
|
||
arrStylesToDelete.push(oStyle.GetId());
|
||
}
|
||
|
||
arrLevels[nLvl] = {
|
||
Styles : [],
|
||
StyleId : sStyleId
|
||
};
|
||
}
|
||
|
||
var isAddStyle = true;
|
||
for (var nIndex = 0, nCount = arrLevels[nLvl].Styles.length; nIndex < nCount; ++nIndex)
|
||
{
|
||
if (arrLevels[nLvl].Styles[nIndex] === sName)
|
||
{
|
||
isAddStyle = false;
|
||
break;
|
||
}
|
||
}
|
||
|
||
if (isAddStyle)
|
||
arrLevels[nLvl].Styles.push(sName);
|
||
}
|
||
|
||
var oParaIndex = 0;
|
||
var nPageIndex = 1;
|
||
|
||
|
||
for (var nLvl = 0; nLvl <= 8; ++nLvl)
|
||
{
|
||
if (!arrLevels[nLvl])
|
||
continue;
|
||
|
||
var sStyleId = arrLevels[nLvl].StyleId;
|
||
for (var nIndex = 0, nCount = arrLevels[nLvl].Styles.length; nIndex < nCount; ++nIndex)
|
||
{
|
||
var sStyleName = AscCommon.translateManager.getValue(arrLevels[nLvl].Styles[nIndex]);
|
||
|
||
var oParagraph = new Paragraph(this, oDocumentContent, false);
|
||
oDocumentContent.AddToContent(oParaIndex++, oParagraph);
|
||
oParagraph.SetParagraphStyleById(sStyleId);
|
||
|
||
var oRun = new ParaRun(oParagraph, false);
|
||
oParagraph.AddToContent(0, oRun);
|
||
oRun.AddText(sStyleName);
|
||
|
||
if (isShowPageNum)
|
||
{
|
||
if (isRightTab)
|
||
{
|
||
var oParaTabs = new CParaTabs();
|
||
oParaTabs.Add(new CParaTab(tab_Right, wMm - 2 - wMmOffset, nTabLeader));
|
||
oParagraph.SetParagraphTabs(oParaTabs);
|
||
|
||
oRun.AddToContent(-1, new ParaTab());
|
||
}
|
||
else
|
||
{
|
||
oRun.AddToContent(-1, new ParaSpace());
|
||
}
|
||
|
||
oRun.AddText("" + nPageIndex);
|
||
|
||
nPageIndex += 2;
|
||
}
|
||
}
|
||
}
|
||
|
||
oDocumentContent.Reset(1, 0, 1000, 10000);
|
||
oDocumentContent.Recalculate_Page(0, true);
|
||
|
||
for (var nIndex = 0, nCount = arrStylesToDelete.length; nIndex < nCount; ++nIndex)
|
||
{
|
||
oStyles.Remove(arrStylesToDelete[nIndex]);
|
||
}
|
||
|
||
var nContentHeight = oDocumentContent.GetSummaryHeight();
|
||
var nContentHeightPx = (AscCommon.AscBrowser.retinaPixelRatio * nContentHeight / g_dKoef_pix_to_mm) >> 0;
|
||
|
||
if (nContentHeightPx > hPx)
|
||
{
|
||
hPx = nContentHeightPx;
|
||
hMm = nContentHeight;
|
||
}
|
||
|
||
this.GuiCanvasFillTOC.style.height = AscBrowser.convertToRetinaValue(hPx, false) + "px";
|
||
this.GuiCanvasFillTOC.height = hPx;
|
||
|
||
var ctx = this.GuiCanvasFillTOC.getContext('2d');
|
||
|
||
ctx.fillStyle = "#FFFFFF";
|
||
ctx.fillRect(0, 0, wPx, hPx);
|
||
|
||
var graphics = new AscCommon.CGraphics();
|
||
graphics.init(ctx, wPx, hPx, wMm, hMm);
|
||
graphics.m_oFontManager = AscCommon.g_fontManager;
|
||
graphics.m_oCoordTransform.tx = graphics.m_oCoordTransform.ty = wPxOffset;
|
||
graphics.transform(1, 0, 0, 1, 0, 0);
|
||
oDocumentContent.Draw(0, graphics);
|
||
|
||
this.m_oWordControl.m_oApi.ShowParaMarks = old_marks;
|
||
|
||
History.TurnOn();
|
||
editor.isViewMode = _oldTurn;
|
||
}
|
||
|
||
this.StartTableStylesCheck = function ()
|
||
{
|
||
this.TableStylesCheckLookFlag = true;
|
||
}
|
||
|
||
this.EndTableStylesCheck = function ()
|
||
{
|
||
this.TableStylesCheckLookFlag = false;
|
||
if (this.TableStylesCheckLook != null)
|
||
{
|
||
this.CheckTableStyles(this.TableStylesCheckLook);
|
||
this.TableStylesCheckLook = null;
|
||
}
|
||
}
|
||
|
||
this.CheckTableStyles = function (tableLook)
|
||
{
|
||
if (this.TableStylesCheckLookFlag)
|
||
{
|
||
this.TableStylesCheckLook = tableLook;
|
||
return;
|
||
}
|
||
|
||
// сначала проверим, подписан ли кто на этот евент
|
||
// а то во вьюере не стоит ничего посылать
|
||
if (!this.m_oWordControl.m_oApi.asc_checkNeedCallback("asc_onInitTableTemplates"))
|
||
return;
|
||
|
||
var bIsChanged = false;
|
||
if (null == this.TableStylesLastLook)
|
||
{
|
||
this.TableStylesLastLook = new Asc.CTablePropLook();
|
||
|
||
this.TableStylesLastLook.FirstCol = tableLook.FirstCol;
|
||
this.TableStylesLastLook.FirstRow = tableLook.FirstRow;
|
||
this.TableStylesLastLook.LastCol = tableLook.LastCol;
|
||
this.TableStylesLastLook.LastRow = tableLook.LastRow;
|
||
this.TableStylesLastLook.BandHor = tableLook.BandHor;
|
||
this.TableStylesLastLook.BandVer = tableLook.BandVer;
|
||
bIsChanged = true;
|
||
}
|
||
else
|
||
{
|
||
if (this.TableStylesLastLook.FirstCol != tableLook.FirstCol)
|
||
{
|
||
this.TableStylesLastLook.FirstCol = tableLook.FirstCol;
|
||
bIsChanged = true;
|
||
}
|
||
if (this.TableStylesLastLook.FirstRow != tableLook.FirstRow)
|
||
{
|
||
this.TableStylesLastLook.FirstRow = tableLook.FirstRow;
|
||
bIsChanged = true;
|
||
}
|
||
if (this.TableStylesLastLook.LastCol != tableLook.LastCol)
|
||
{
|
||
this.TableStylesLastLook.LastCol = tableLook.LastCol;
|
||
bIsChanged = true;
|
||
}
|
||
if (this.TableStylesLastLook.LastRow != tableLook.LastRow)
|
||
{
|
||
this.TableStylesLastLook.LastRow = tableLook.LastRow;
|
||
bIsChanged = true;
|
||
}
|
||
if (this.TableStylesLastLook.BandHor != tableLook.BandHor)
|
||
{
|
||
this.TableStylesLastLook.BandHor = tableLook.BandHor;
|
||
bIsChanged = true;
|
||
}
|
||
if (this.TableStylesLastLook.BandVer != tableLook.BandVer)
|
||
{
|
||
this.TableStylesLastLook.BandVer = tableLook.BandVer;
|
||
bIsChanged = true;
|
||
}
|
||
}
|
||
|
||
if (!bIsChanged)
|
||
return;
|
||
|
||
var logicDoc = this.m_oWordControl.m_oLogicDocument;
|
||
var _dst_styles = [];
|
||
|
||
var _styles = logicDoc.Styles.Get_AllTableStyles();
|
||
var _styles_len = _styles.length;
|
||
|
||
if (_styles_len == 0)
|
||
return _dst_styles;
|
||
|
||
var _x_mar = 10;
|
||
var _y_mar = 10;
|
||
var _r_mar = 10;
|
||
var _b_mar = 10;
|
||
var _pageW = 297;
|
||
var _pageH = 210;
|
||
|
||
var W = (_pageW - _x_mar - _r_mar);
|
||
var H = (_pageH - _y_mar - _b_mar);
|
||
|
||
if (_canvas_tables == null)
|
||
{
|
||
_canvas_tables = document.createElement('canvas');
|
||
|
||
if (!this.m_oWordControl.bIsRetinaSupport)
|
||
{
|
||
_canvas_tables.width = TABLE_STYLE_WIDTH_PIX;
|
||
_canvas_tables.height = TABLE_STYLE_HEIGHT_PIX;
|
||
}
|
||
else
|
||
{
|
||
_canvas_tables.width = (TABLE_STYLE_WIDTH_PIX * AscCommon.AscBrowser.retinaPixelRatio) >> 0;
|
||
_canvas_tables.height = (TABLE_STYLE_HEIGHT_PIX * AscCommon.AscBrowser.retinaPixelRatio) >> 0;
|
||
}
|
||
}
|
||
|
||
var _canvas = _canvas_tables;
|
||
var ctx = _canvas.getContext('2d');
|
||
|
||
var Rows = 5;
|
||
|
||
History.TurnOff();
|
||
g_oTableId.m_bTurnOff = true;
|
||
for (var i1 = 0; i1 < _styles_len; i1++)
|
||
{
|
||
var i = _styles[i1];
|
||
var _style = logicDoc.Styles.Style[i];
|
||
|
||
if (!_style || _style.Type != styletype_Table)
|
||
continue;
|
||
|
||
if (_table_styles == null)
|
||
{
|
||
var Cols = 5;
|
||
|
||
var Grid = [];
|
||
for (var ii = 0; ii < Cols; ii++)
|
||
Grid[ii] = W / Cols;
|
||
|
||
_table_styles = new CTable(this, logicDoc, true, Rows, Cols, Grid);
|
||
_table_styles.Reset(_x_mar, _y_mar, 1000, 1000, 0, 0, 1);
|
||
_table_styles.Set_Props({
|
||
TableStyle: i,
|
||
TableLook: tableLook,
|
||
TableLayout: c_oAscTableLayout.Fixed
|
||
});
|
||
_table_styles.Set_Props({
|
||
TableDefaultMargins : {Top : 0, Bottom : 0}
|
||
});
|
||
|
||
for (var j = 0; j < Rows; j++)
|
||
_table_styles.Content[j].Set_Height(H / Rows, Asc.linerule_AtLeast);
|
||
}
|
||
else
|
||
{
|
||
_table_styles.Set_Props({
|
||
TableStyle: i,
|
||
TableLook: tableLook,
|
||
TableLayout: c_oAscTableLayout.Fixed,
|
||
CellSelect: false
|
||
});
|
||
_table_styles.Set_Props({
|
||
TableDefaultMargins : {Top : 0, Bottom : 0}
|
||
});
|
||
_table_styles.Recalc_CompiledPr2();
|
||
|
||
for (var j = 0; j < Rows; j++)
|
||
_table_styles.Content[j].Set_Height(H / Rows, Asc.linerule_AtLeast);
|
||
}
|
||
|
||
|
||
ctx.fillStyle = "#FFFFFF";
|
||
ctx.fillRect(0, 0, _canvas.width, _canvas.height);
|
||
|
||
var graphics = new AscCommon.CGraphics();
|
||
graphics.init(ctx, _canvas.width, _canvas.height, _pageW, _pageH);
|
||
graphics.m_oFontManager = AscCommon.g_fontManager;
|
||
graphics.transform(1, 0, 0, 1, 0, 0);
|
||
|
||
_table_styles.Recalculate_Page(0);
|
||
|
||
var _old_mode = editor.isViewMode;
|
||
editor.isViewMode = true;
|
||
editor.isShowTableEmptyLineAttack = true;
|
||
_table_styles.Draw(0, graphics);
|
||
editor.isShowTableEmptyLineAttack = false;
|
||
editor.isViewMode = _old_mode;
|
||
|
||
var _styleD = new Asc.CAscTableStyle();
|
||
_styleD.Type = 0;
|
||
_styleD.Image = _canvas.toDataURL("image/png");
|
||
_styleD.Id = i;
|
||
_dst_styles.push(_styleD);
|
||
}
|
||
g_oTableId.m_bTurnOff = false;
|
||
History.TurnOn();
|
||
|
||
this.m_oWordControl.m_oApi.sync_InitEditorTableStyles(_dst_styles, this.m_oWordControl.bIsRetinaSupport);
|
||
}
|
||
|
||
this.IsMobileVersion = function ()
|
||
{
|
||
if (this.m_oWordControl.MobileTouchManager)
|
||
return true;
|
||
return false;
|
||
}
|
||
|
||
this.OnSelectEnd = function ()
|
||
{
|
||
if (this.m_oWordControl && this.m_oWordControl.MobileTouchManager)
|
||
this.m_oWordControl.MobileTouchManager.CheckSelectRects();
|
||
}
|
||
|
||
// mouse events
|
||
this.checkMouseDown_Drawing = function (pos)
|
||
{
|
||
var oWordControl = this.m_oWordControl;
|
||
var _ret = this.TableOutlineDr.checkMouseDown(pos, oWordControl);
|
||
if (_ret === true)
|
||
{
|
||
oWordControl.m_oLogicDocument.RemoveSelection(true);
|
||
this.TableOutlineDr.bIsTracked = true;
|
||
if (!this.TableOutlineDr.IsResizeTableTrack)
|
||
this.LockCursorType("move");
|
||
else
|
||
this.LockCursorType("default");
|
||
|
||
this.TableOutlineDr.TableOutline.Table.SelectAll();
|
||
this.TableOutlineDr.TableOutline.Table.Document_SetThisElementCurrent(true);
|
||
|
||
if (-1 == oWordControl.m_oTimerScrollSelect)
|
||
{
|
||
oWordControl.m_oTimerScrollSelect = setInterval(oWordControl.SelectWheel, 20);
|
||
}
|
||
oWordControl.EndUpdateOverlay();
|
||
return true;
|
||
}
|
||
|
||
var isNoButtons = oWordControl.m_oLogicDocument ? oWordControl.m_oLogicDocument.IsFillingFormMode() : false;
|
||
|
||
if (this.FrameRect.IsActive)
|
||
{
|
||
var eps = 10 * g_dKoef_pix_to_mm * 100 / oWordControl.m_nZoomValue;
|
||
var _check = this.checkCursorOnTrackRect(pos.X, pos.Y, eps, this.FrameRect.Rect);
|
||
|
||
if (-1 != _check)
|
||
{
|
||
this.FrameRect.IsTracked = true;
|
||
this.FrameRect.Track.X = pos.X;
|
||
this.FrameRect.Track.Y = pos.Y;
|
||
this.FrameRect.Track.Type = _check;
|
||
|
||
switch (_check)
|
||
{
|
||
case 0:
|
||
{
|
||
this.LockCursorType("nw-resize");
|
||
break;
|
||
}
|
||
case 1:
|
||
{
|
||
this.LockCursorType("n-resize");
|
||
break;
|
||
}
|
||
case 2:
|
||
{
|
||
this.LockCursorType("ne-resize");
|
||
break;
|
||
}
|
||
case 3:
|
||
{
|
||
this.LockCursorType("e-resize");
|
||
break;
|
||
}
|
||
case 4:
|
||
{
|
||
this.LockCursorType("se-resize");
|
||
break;
|
||
}
|
||
case 5:
|
||
{
|
||
this.LockCursorType("s-resize");
|
||
break;
|
||
}
|
||
case 6:
|
||
{
|
||
this.LockCursorType("sw-resize");
|
||
break;
|
||
}
|
||
case 7:
|
||
{
|
||
this.LockCursorType("w-resize");
|
||
break;
|
||
}
|
||
default:
|
||
{
|
||
this.LockCursorType("move");
|
||
break;
|
||
}
|
||
}
|
||
|
||
if (-1 == oWordControl.m_oTimerScrollSelect)
|
||
{
|
||
oWordControl.m_oTimerScrollSelect = setInterval(oWordControl.SelectWheel, 20);
|
||
}
|
||
oWordControl.EndUpdateOverlay();
|
||
return true;
|
||
}
|
||
}
|
||
|
||
for (var i = 0; i < this.ContentControlObjects.length; i++)
|
||
{
|
||
var _content_control = this.ContentControlObjects[i];
|
||
var _content_control_buttons_len = _content_control.Buttons.length;
|
||
if (isNoButtons)
|
||
_content_control_buttons_len = 0;
|
||
|
||
if (_content_control.type == c_oContentControlTrack.In)
|
||
{
|
||
var _rect = _content_control.getXY();
|
||
|
||
var _page = this.m_arrPages[_content_control.getPage()];
|
||
if (!_page)
|
||
return false;
|
||
|
||
var drPage = _page.drawingPage;
|
||
|
||
var dKoefX = (drPage.right - drPage.left) / _page.width_mm;
|
||
var dKoefY = (drPage.bottom - drPage.top) / _page.height_mm;
|
||
|
||
var _x = _rect.X - (15 / dKoefX);
|
||
var _y = _rect.Y;
|
||
var _r = _rect.X;
|
||
var _b = _rect.Y + (20 / dKoefY);
|
||
|
||
if (_content_control.Name != "" || 0 != _content_control_buttons_len)
|
||
{
|
||
_x = _rect.X;
|
||
_y = _rect.Y - (20 / dKoefY);
|
||
_r = _rect.X + (15 / dKoefX);
|
||
_b = _rect.Y;
|
||
}
|
||
|
||
var posX = pos.X;
|
||
var posY = pos.Y;
|
||
|
||
var _transform = _content_control.transform;
|
||
if (_transform && global_MatrixTransformer.IsIdentity2(_transform))
|
||
{
|
||
_x += _transform.tx;
|
||
_y += _transform.ty;
|
||
_r += _transform.tx;
|
||
_b += _transform.ty;
|
||
|
||
_transform = null;
|
||
}
|
||
if (_transform)
|
||
{
|
||
var _invert = global_MatrixTransformer.Invert(_transform);
|
||
posX = _invert.TransformPointX(pos.X, pos.Y);
|
||
posY = _invert.TransformPointY(pos.X, pos.Y);
|
||
}
|
||
|
||
if (posX > _x && posX < _r && posY > _y && posY < _b)
|
||
{
|
||
oWordControl.m_oLogicDocument.SelectContentControl(_content_control.id);
|
||
this.ContentControlObjectState = 1;
|
||
this.ContentControlSmallChangesCheck.X = pos.X;
|
||
this.ContentControlSmallChangesCheck.Y = pos.Y;
|
||
this.ContentControlSmallChangesCheck.Page = pos.Page;
|
||
this.ContentControlSmallChangesCheck.IsSmall = true;
|
||
|
||
//this.InlineTextTrackEnabled = true;
|
||
this.InlineTextTrack = null;
|
||
this.InlineTextTrackPage = -1;
|
||
|
||
oWordControl.ShowOverlay();
|
||
oWordControl.OnUpdateOverlay();
|
||
oWordControl.EndUpdateOverlay();
|
||
|
||
this.LockCursorType("default");
|
||
return true;
|
||
}
|
||
else if (_content_control.NameButtonAdvanced && !isNoButtons && posX > _r && posX < (_r + _content_control.NameWidth / dKoefX) && posY > _y && posY < _b)
|
||
{
|
||
if (_content_control.ActiveButtonIndex == -1)
|
||
{
|
||
_content_control.ActiveButtonIndex = -2;
|
||
oWordControl.m_oApi.sendEvent("asc_onHideContentControlsActions");
|
||
}
|
||
else
|
||
{
|
||
_content_control.ActiveButtonIndex = -1;
|
||
|
||
var xCC = _r;
|
||
var yCC = _b;
|
||
if (_transform)
|
||
{
|
||
xCC = _transform.TransformPointX(_r, _b);
|
||
yCC = _transform.TransformPointY(_r, _b);
|
||
}
|
||
|
||
var posOnScreen = this.ConvertCoordsToCursorWR(xCC, yCC, _content_control.getPage());
|
||
oWordControl.m_oApi.sendEvent("asc_onShowContentControlsActions", 0, posOnScreen.X, posOnScreen.Y);
|
||
}
|
||
|
||
oWordControl.ShowOverlay();
|
||
oWordControl.OnUpdateOverlay();
|
||
oWordControl.EndUpdateOverlay();
|
||
|
||
this.LockCursorType("default");
|
||
return true;
|
||
}
|
||
else
|
||
{
|
||
var _posR = _r + _content_control.NameWidth / dKoefX;
|
||
for (var indexB = 0; indexB < _content_control_buttons_len; indexB++)
|
||
{
|
||
if (posX > _posR && posX < (_posR + 20 / dKoefX) && posY > _y && posY < _b)
|
||
{
|
||
if (_content_control.ActiveButtonIndex == indexB)
|
||
{
|
||
_content_control.ActiveButtonIndex = -2;
|
||
oWordControl.m_oApi.sendEvent("asc_onHideContentControlsActions");
|
||
}
|
||
else
|
||
{
|
||
_content_control.ActiveButtonIndex = indexB;
|
||
|
||
var xCC = _posR;
|
||
var yCC = _b;
|
||
if (_transform)
|
||
{
|
||
xCC = _transform.TransformPointX(_posR, _b);
|
||
yCC = _transform.TransformPointY(_posR, _b);
|
||
}
|
||
|
||
var posOnScreen = this.ConvertCoordsToCursorWR(xCC, yCC, _content_control.getPage());
|
||
oWordControl.m_oApi.sendEvent("asc_onShowContentControlsActions", indexB + 1, posOnScreen.X, posOnScreen.Y);
|
||
}
|
||
|
||
oWordControl.ShowOverlay();
|
||
oWordControl.OnUpdateOverlay();
|
||
oWordControl.EndUpdateOverlay();
|
||
|
||
this.LockCursorType("default");
|
||
return true;
|
||
}
|
||
_posR += (20 / dKoefX);
|
||
}
|
||
}
|
||
|
||
break;
|
||
}
|
||
}
|
||
|
||
return false;
|
||
};
|
||
|
||
this.checkMouseDown_DrawingOnUp = function (pos)
|
||
{
|
||
var oWordControl = this.m_oWordControl;
|
||
var isNoButtons = oWordControl.m_oLogicDocument ? oWordControl.m_oLogicDocument.IsFillingFormMode() : false;
|
||
|
||
for (var i = 0; i < this.ContentControlObjects.length; i++)
|
||
{
|
||
var _content_control = this.ContentControlObjects[i];
|
||
var _content_control_buttons_len = _content_control.Buttons.length;
|
||
if (isNoButtons)
|
||
_content_control_buttons_len = 0;
|
||
|
||
if (_content_control.type == c_oContentControlTrack.In)
|
||
{
|
||
var _rect = _content_control.getXY();
|
||
|
||
var _page = this.m_arrPages[_content_control.getPage()];
|
||
if (!_page)
|
||
return false;
|
||
|
||
var drPage = _page.drawingPage;
|
||
|
||
var dKoefX = (drPage.right - drPage.left) / _page.width_mm;
|
||
var dKoefY = (drPage.bottom - drPage.top) / _page.height_mm;
|
||
|
||
var _x = _rect.X - (15 / dKoefX);
|
||
var _y = _rect.Y;
|
||
var _r = _rect.X;
|
||
var _b = _rect.Y + (20 / dKoefY);
|
||
|
||
if (_content_control.Name != "" || 0 != _content_control_buttons_len)
|
||
{
|
||
_x = _rect.X;
|
||
_y = _rect.Y - (20 / dKoefY);
|
||
_r = _rect.X + (15 / dKoefX);
|
||
_b = _rect.Y;
|
||
}
|
||
|
||
var posX = pos.X;
|
||
var posY = pos.Y;
|
||
|
||
var _transform = _content_control.transform;
|
||
if (_transform && global_MatrixTransformer.IsIdentity2(_transform))
|
||
{
|
||
_x += _transform.tx;
|
||
_y += _transform.ty;
|
||
_r += _transform.tx;
|
||
_b += _transform.ty;
|
||
|
||
_transform = null;
|
||
}
|
||
if (_transform)
|
||
{
|
||
var _invert = global_MatrixTransformer.Invert(_transform);
|
||
posX = _invert.TransformPointX(pos.X, pos.Y);
|
||
posY = _invert.TransformPointY(pos.X, pos.Y);
|
||
}
|
||
|
||
if (posX > _x && posX < _r && posY > _y && posY < _b)
|
||
{
|
||
return true;
|
||
}
|
||
else if (_content_control.NameButtonAdvanced && !isNoButtons && posX > _r && posX < (_r + _content_control.NameWidth / dKoefX) && posY > _y && posY < _b)
|
||
{
|
||
return true;
|
||
}
|
||
else
|
||
{
|
||
var _posR = _r + _content_control.NameWidth / dKoefX;
|
||
for (var indexB = 0; indexB < _content_control_buttons_len; indexB++)
|
||
{
|
||
if (posX > _posR && posX < (_posR + 20 / dKoefX) && posY > _y && posY < _b)
|
||
{
|
||
return true;
|
||
}
|
||
_posR += (20 / dKoefX);
|
||
}
|
||
}
|
||
|
||
break;
|
||
}
|
||
}
|
||
|
||
return false;
|
||
};
|
||
|
||
this.checkMouseMove_Drawing = function (pos)
|
||
{
|
||
var oWordControl = this.m_oWordControl;
|
||
var isNoButtons = oWordControl.m_oLogicDocument ? oWordControl.m_oLogicDocument.IsFillingFormMode() : false;
|
||
|
||
if (this.TableOutlineDr.bIsTracked)
|
||
{
|
||
this.TableOutlineDr.checkMouseMove(global_mouseEvent.X, global_mouseEvent.Y, oWordControl);
|
||
oWordControl.ShowOverlay();
|
||
oWordControl.OnUpdateOverlay();
|
||
oWordControl.EndUpdateOverlay();
|
||
return true;
|
||
}
|
||
if (this.TableOutlineDr.checkMouseMoveTrack)
|
||
{
|
||
if (this.TableOutlineDr.checkMouseMoveTrack(pos, oWordControl))
|
||
{
|
||
this.SetCursorType("default");
|
||
return true;
|
||
}
|
||
}
|
||
if (this.TableOutlineDr.checkMouseMove2)
|
||
{
|
||
if (this.TableOutlineDr.checkMouseMove2(global_mouseEvent.X, global_mouseEvent.Y, oWordControl))
|
||
return true;
|
||
}
|
||
|
||
if (this.InlineTextTrackEnabled)
|
||
{
|
||
if (pos.Page != this.ContentControlSmallChangesCheck.Page ||
|
||
Math.abs(pos.X - this.ContentControlSmallChangesCheck.X) > this.ContentControlSmallChangesCheck.Min ||
|
||
Math.abs(pos.Y - this.ContentControlSmallChangesCheck.Y) > this.ContentControlSmallChangesCheck.Min)
|
||
{
|
||
this.ContentControlSmallChangesCheck.IsSmall = false;
|
||
}
|
||
|
||
this.InlineTextTrack = oWordControl.m_oLogicDocument.Get_NearestPos(pos.Page, pos.X, pos.Y);
|
||
this.InlineTextTrackPage = pos.Page;
|
||
|
||
oWordControl.ShowOverlay();
|
||
oWordControl.OnUpdateOverlay();
|
||
oWordControl.EndUpdateOverlay();
|
||
return true;
|
||
}
|
||
|
||
if (this.FrameRect.IsActive)
|
||
{
|
||
if (!this.FrameRect.IsTracked && this.FrameRect.PageIndex == pos.Page)
|
||
{
|
||
var eps = 10 * g_dKoef_pix_to_mm * 100 / oWordControl.m_nZoomValue;
|
||
var _check = this.checkCursorOnTrackRect(pos.X, pos.Y, eps, this.FrameRect.Rect);
|
||
|
||
if (_check != -1)
|
||
{
|
||
switch (_check)
|
||
{
|
||
case 0:
|
||
{
|
||
this.SetCursorType("nw-resize");
|
||
break;
|
||
}
|
||
case 1:
|
||
{
|
||
this.SetCursorType("n-resize");
|
||
break;
|
||
}
|
||
case 2:
|
||
{
|
||
this.SetCursorType("ne-resize");
|
||
break;
|
||
}
|
||
case 3:
|
||
{
|
||
this.SetCursorType("e-resize");
|
||
break;
|
||
}
|
||
case 4:
|
||
{
|
||
this.SetCursorType("se-resize");
|
||
break;
|
||
}
|
||
case 5:
|
||
{
|
||
this.SetCursorType("s-resize");
|
||
break;
|
||
}
|
||
case 6:
|
||
{
|
||
this.SetCursorType("sw-resize");
|
||
break;
|
||
}
|
||
case 7:
|
||
{
|
||
this.SetCursorType("w-resize");
|
||
break;
|
||
}
|
||
default:
|
||
{
|
||
this.SetCursorType("move");
|
||
break;
|
||
}
|
||
}
|
||
// оверлей не нужно перерисовывать
|
||
oWordControl.EndUpdateOverlay();
|
||
return true;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
this.checkTrackRect(pos);
|
||
|
||
oWordControl.ShowOverlay();
|
||
oWordControl.OnUpdateOverlay();
|
||
oWordControl.EndUpdateOverlay();
|
||
return true;
|
||
}
|
||
}
|
||
|
||
var _content_control = null;
|
||
var isChangeHover = false;
|
||
for (var i = 0; i < this.ContentControlObjects.length; i++)
|
||
{
|
||
if (-2 != this.ContentControlObjects[i].HoverButtonIndex)
|
||
isChangeHover = true;
|
||
this.ContentControlObjects[i].HoverButtonIndex = -2;
|
||
if (this.ContentControlObjects[i].type == c_oContentControlTrack.In)
|
||
{
|
||
_content_control = this.ContentControlObjects[i];
|
||
break;
|
||
}
|
||
}
|
||
|
||
if (_content_control && pos.Page == _content_control.getPage())
|
||
{
|
||
var _content_control_buttons_len = _content_control.Buttons.length;
|
||
if (isNoButtons)
|
||
_content_control_buttons_len = 0;
|
||
|
||
if (1 == this.ContentControlObjectState)
|
||
{
|
||
if (pos.Page == this.ContentControlSmallChangesCheck.Page &&
|
||
Math.abs(pos.X - this.ContentControlSmallChangesCheck.X) < this.ContentControlSmallChangesCheck.Min &&
|
||
Math.abs(pos.Y - this.ContentControlSmallChangesCheck.Y) < this.ContentControlSmallChangesCheck.Min)
|
||
{
|
||
oWordControl.ShowOverlay();
|
||
oWordControl.OnUpdateOverlay();
|
||
oWordControl.EndUpdateOverlay();
|
||
return true;
|
||
}
|
||
|
||
this.InlineTextTrackEnabled = true;
|
||
this.ContentControlSmallChangesCheck.IsSmall = false;
|
||
|
||
this.InlineTextTrack = oWordControl.m_oLogicDocument.Get_NearestPos(pos.Page, pos.X, pos.Y);
|
||
this.InlineTextTrackPage = pos.Page;
|
||
|
||
oWordControl.ShowOverlay();
|
||
oWordControl.OnUpdateOverlay();
|
||
oWordControl.EndUpdateOverlay();
|
||
return true;
|
||
}
|
||
|
||
var _page = this.m_arrPages[pos.Page];
|
||
var drPage = _page.drawingPage;
|
||
|
||
var dKoefX = (drPage.right - drPage.left) / _page.width_mm;
|
||
var dKoefY = (drPage.bottom - drPage.top) / _page.height_mm;
|
||
|
||
var rect = _content_control.getXY();
|
||
var _x = rect.X - (15 / dKoefX);
|
||
var _y = rect.Y;
|
||
var _r = rect.X;
|
||
var _b = rect.Y + (20 / dKoefY);
|
||
|
||
if (_content_control.Name != "" || 0 != _content_control_buttons_len)
|
||
{
|
||
_x = rect.X;
|
||
_y = rect.Y - (20 / dKoefY);
|
||
_r = rect.X + (15 / dKoefX);
|
||
_b = rect.Y;
|
||
}
|
||
|
||
var posX = pos.X;
|
||
var posY = pos.Y;
|
||
|
||
var _transform = _content_control.transform;
|
||
if (_transform && global_MatrixTransformer.IsIdentity2(_transform))
|
||
{
|
||
_x += _transform.tx;
|
||
_y += _transform.ty;
|
||
_r += _transform.tx;
|
||
_b += _transform.ty;
|
||
|
||
_transform = null;
|
||
}
|
||
if (_transform)
|
||
{
|
||
var _invert = global_MatrixTransformer.Invert(_transform);
|
||
posX = _invert.TransformPointX(pos.X, pos.Y);
|
||
posY = _invert.TransformPointY(pos.X, pos.Y);
|
||
}
|
||
|
||
var _old = this.ContentControlObjectState;
|
||
this.ContentControlObjectState = -1;
|
||
if (posX > _x && posX < _r && posY > _y && posY < _b)
|
||
{
|
||
this.ContentControlObjectState = 0;
|
||
oWordControl.ShowOverlay();
|
||
oWordControl.OnUpdateOverlay();
|
||
oWordControl.EndUpdateOverlay();
|
||
|
||
this.SetCursorType("default");
|
||
|
||
oWordControl.m_oApi.sync_MouseMoveStartCallback();
|
||
oWordControl.m_oApi.sync_MouseMoveEndCallback();
|
||
return true;
|
||
}
|
||
else if (_content_control.NameButtonAdvanced && !isNoButtons && posX > _r && posX < (_r + _content_control.NameWidth / dKoefX) && posY > _y && posY < _b)
|
||
{
|
||
_content_control.HoverButtonIndex = -1;
|
||
oWordControl.ShowOverlay();
|
||
oWordControl.OnUpdateOverlay();
|
||
oWordControl.EndUpdateOverlay();
|
||
|
||
this.SetCursorType("default");
|
||
|
||
oWordControl.m_oApi.sync_MouseMoveStartCallback();
|
||
oWordControl.m_oApi.sync_MouseMoveEndCallback();
|
||
return true;
|
||
}
|
||
else
|
||
{
|
||
var _posR = _r + _content_control.NameWidth / dKoefX;
|
||
for (var indexB = 0; indexB < _content_control_buttons_len; indexB++)
|
||
{
|
||
if (posX > _posR && posX < (_posR + 20 / dKoefX) && posY > _y && posY < _b)
|
||
{
|
||
_content_control.HoverButtonIndex = indexB;
|
||
oWordControl.ShowOverlay();
|
||
oWordControl.OnUpdateOverlay();
|
||
oWordControl.EndUpdateOverlay();
|
||
|
||
this.SetCursorType("default");
|
||
|
||
oWordControl.m_oApi.sync_MouseMoveStartCallback();
|
||
oWordControl.m_oApi.sync_MouseMoveEndCallback();
|
||
return true;
|
||
}
|
||
_posR += (20 / dKoefX);
|
||
}
|
||
}
|
||
|
||
if (_old != this.ContentControlObjectState)
|
||
oWordControl.OnUpdateOverlay();
|
||
}
|
||
|
||
if (isChangeHover)
|
||
oWordControl.OnUpdateOverlay();
|
||
|
||
return false;
|
||
};
|
||
|
||
this.checkMouseUp_Drawing = function (pos)
|
||
{
|
||
var oWordControl = this.m_oWordControl;
|
||
|
||
var oldContentControlSmall = this.ContentControlSmallChangesCheck.IsSmall;
|
||
this.ContentControlSmallChangesCheck.IsSmall = true;
|
||
|
||
if (this.TableOutlineDr.bIsTracked)
|
||
{
|
||
this.TableOutlineDr.checkMouseUp(global_mouseEvent.X, global_mouseEvent.Y, oWordControl);
|
||
oWordControl.m_oLogicDocument.Document_UpdateInterfaceState();
|
||
oWordControl.m_oLogicDocument.Document_UpdateRulersState();
|
||
|
||
if (-1 != oWordControl.m_oTimerScrollSelect)
|
||
{
|
||
clearInterval(oWordControl.m_oTimerScrollSelect);
|
||
oWordControl.m_oTimerScrollSelect = -1;
|
||
}
|
||
oWordControl.OnUpdateOverlay();
|
||
|
||
oWordControl.EndUpdateOverlay();
|
||
return true;
|
||
}
|
||
|
||
if (this.InlineTextTrackEnabled && (this.ContentControlObjectState != 1))
|
||
{
|
||
this.InlineTextTrack = oWordControl.m_oLogicDocument.Get_NearestPos(pos.Page, pos.X, pos.Y);
|
||
this.InlineTextTrackPage = pos.Page;
|
||
this.EndTrackText();
|
||
|
||
oWordControl.ShowOverlay();
|
||
oWordControl.OnUpdateOverlay();
|
||
oWordControl.EndUpdateOverlay();
|
||
return true;
|
||
}
|
||
|
||
if (this.FrameRect.IsActive && this.FrameRect.IsTracked)
|
||
{
|
||
this.FrameRect.IsTracked = false;
|
||
|
||
this.checkTrackRect(pos);
|
||
var _track = this.FrameRect.Track;
|
||
this.FrameRect.Frame.Change_Frame(_track.L, _track.T, _track.R - _track.L, _track.B - _track.T, _track.PageIndex);
|
||
|
||
if (-1 != oWordControl.m_oTimerScrollSelect)
|
||
{
|
||
clearInterval(oWordControl.m_oTimerScrollSelect);
|
||
oWordControl.m_oTimerScrollSelect = -1;
|
||
}
|
||
oWordControl.OnUpdateOverlay();
|
||
|
||
oWordControl.EndUpdateOverlay();
|
||
return true;
|
||
}
|
||
|
||
if (this.ContentControlObjectState == 1)
|
||
{
|
||
for (var i = 0; i < this.ContentControlObjects.length; i++)
|
||
{
|
||
var _object = this.ContentControlObjects[i];
|
||
if (_object.type == c_oContentControlTrack.In)
|
||
{
|
||
if (this.InlineTextTrackEnabled)
|
||
{
|
||
if (this.InlineTextTrack && !oldContentControlSmall) // значит был MouseMove
|
||
{
|
||
this.InlineTextTrack = oWordControl.m_oLogicDocument.Get_NearestPos(pos.Page, pos.X, pos.Y);
|
||
this.m_oWordControl.m_oLogicDocument.OnContentControlTrackEnd(_object.id, this.InlineTextTrack, AscCommon.global_keyboardEvent.CtrlKey);
|
||
this.InlineTextTrackEnabled = false;
|
||
this.InlineTextTrack = null;
|
||
this.InlineTextTrackPage = -1;
|
||
}
|
||
else
|
||
{
|
||
this.InlineTextTrackEnabled = false;
|
||
}
|
||
}
|
||
break;
|
||
}
|
||
}
|
||
|
||
this.ContentControlObjectState = 0;
|
||
oWordControl.ShowOverlay();
|
||
oWordControl.OnUpdateOverlay();
|
||
oWordControl.EndUpdateOverlay();
|
||
return true;
|
||
}
|
||
|
||
return false;
|
||
}
|
||
|
||
this.checkCursorOnTrackRect = function (X, Y, eps, rect)
|
||
{
|
||
// 0-1-...-7 - точки по часовой стрелке, начиная с left-top,
|
||
// 8-..-11 - стороны по часовой стрелке, начиная с top
|
||
|
||
var __x_dist1 = Math.abs(X - rect.X);
|
||
var __x_dist2 = Math.abs(X - ((rect.X + rect.R) / 2));
|
||
var __x_dist3 = Math.abs(X - rect.R);
|
||
|
||
var __y_dist1 = Math.abs(Y - rect.Y);
|
||
var __y_dist2 = Math.abs(Y - ((rect.Y + rect.B) / 2));
|
||
var __y_dist3 = Math.abs(Y - rect.B);
|
||
|
||
if (__y_dist1 < eps)
|
||
{
|
||
if ((X < (rect.X - eps)) || (X > (rect.R + eps)))
|
||
return -1;
|
||
|
||
if (__x_dist1 <= __x_dist2 && __x_dist1 <= __x_dist3)
|
||
return (__x_dist1 < eps) ? 0 : 8;
|
||
|
||
if (__x_dist2 <= __x_dist1 && __x_dist2 <= __x_dist3)
|
||
return (__x_dist2 < eps) ? 1 : 8;
|
||
|
||
if (__x_dist3 <= __x_dist1 && __x_dist3 <= __x_dist2)
|
||
return (__x_dist3 < eps) ? 2 : 8;
|
||
|
||
return 8;
|
||
}
|
||
|
||
if (__y_dist3 < eps)
|
||
{
|
||
if ((X < (rect.X - eps)) || (X > (rect.R + eps)))
|
||
return -1;
|
||
|
||
if (__x_dist1 <= __x_dist2 && __x_dist1 <= __x_dist3)
|
||
return (__x_dist1 < eps) ? 6 : 10;
|
||
|
||
if (__x_dist2 <= __x_dist1 && __x_dist2 <= __x_dist3)
|
||
return (__x_dist2 < eps) ? 5 : 10;
|
||
|
||
if (__x_dist3 <= __x_dist1 && __x_dist3 <= __x_dist2)
|
||
return (__x_dist3 < eps) ? 4 : 10;
|
||
|
||
return 8;
|
||
}
|
||
|
||
if (__x_dist1 < eps)
|
||
{
|
||
if ((Y < (rect.Y - eps)) || (Y > (rect.B + eps)))
|
||
return -1;
|
||
|
||
if (__y_dist1 <= __y_dist2 && __y_dist1 <= __y_dist3)
|
||
return (__y_dist1 < eps) ? 0 : 11;
|
||
|
||
if (__y_dist2 <= __y_dist1 && __y_dist2 <= __y_dist3)
|
||
return (__y_dist2 < eps) ? 7 : 11;
|
||
|
||
if (__y_dist3 <= __y_dist1 && __y_dist3 <= __y_dist2)
|
||
return (__y_dist3 < eps) ? 6 : 11;
|
||
|
||
return 11;
|
||
}
|
||
|
||
if (__x_dist3 < eps)
|
||
{
|
||
if ((Y < (rect.Y - eps)) || (Y > (rect.B + eps)))
|
||
return -1;
|
||
|
||
if (__y_dist1 <= __y_dist2 && __y_dist1 <= __y_dist3)
|
||
return (__y_dist1 < eps) ? 2 : 9;
|
||
|
||
if (__y_dist2 <= __y_dist1 && __y_dist2 <= __y_dist3)
|
||
return (__y_dist2 < eps) ? 3 : 9;
|
||
|
||
if (__y_dist3 <= __y_dist1 && __y_dist3 <= __y_dist2)
|
||
return (__y_dist3 < eps) ? 4 : 9;
|
||
|
||
return 9;
|
||
}
|
||
|
||
return -1;
|
||
}
|
||
|
||
this.checkTrackRect = function (pos)
|
||
{
|
||
var _min_dist = 3; // mm;
|
||
|
||
var _track = this.FrameRect.Track;
|
||
var _rect = this.FrameRect.Rect;
|
||
_track.PageIndex = this.FrameRect.PageIndex;
|
||
switch (_track.Type)
|
||
{
|
||
case 0:
|
||
{
|
||
_track.L = _rect.X + (pos.X - _track.X);
|
||
_track.T = _rect.Y + (pos.Y - _track.Y);
|
||
_track.R = _rect.R;
|
||
_track.B = _rect.B;
|
||
|
||
if (_track.L > (_track.R - _min_dist))
|
||
_track.L = _track.R - _min_dist;
|
||
if (_track.T > (_track.B - _min_dist))
|
||
_track.T = _track.B - _min_dist;
|
||
|
||
break;
|
||
}
|
||
case 1:
|
||
{
|
||
_track.L = _rect.X;
|
||
_track.T = _rect.Y + (pos.Y - _track.Y);
|
||
_track.R = _rect.R;
|
||
_track.B = _rect.B;
|
||
|
||
if (_track.T > (_track.B - _min_dist))
|
||
_track.T = _track.B - _min_dist;
|
||
|
||
break;
|
||
}
|
||
case 2:
|
||
{
|
||
_track.L = _rect.X;
|
||
_track.T = _rect.Y + (pos.Y - _track.Y);
|
||
_track.R = _rect.R + (pos.X - _track.X);
|
||
_track.B = _rect.B;
|
||
|
||
if (_track.R < (_track.L + _min_dist))
|
||
_track.R = _track.L + _min_dist;
|
||
if (_track.T > (_track.B - _min_dist))
|
||
_track.T = _track.B - _min_dist;
|
||
|
||
break;
|
||
}
|
||
case 3:
|
||
{
|
||
_track.L = _rect.X;
|
||
_track.T = _rect.Y;
|
||
_track.R = _rect.R + (pos.X - _track.X);
|
||
_track.B = _rect.B;
|
||
|
||
if (_track.R < (_track.L + _min_dist))
|
||
_track.R = _track.L + _min_dist;
|
||
|
||
break;
|
||
}
|
||
case 4:
|
||
{
|
||
_track.L = _rect.X;
|
||
_track.T = _rect.Y;
|
||
_track.R = _rect.R + (pos.X - _track.X);
|
||
_track.B = _rect.B + (pos.Y - _track.Y);
|
||
|
||
if (_track.R < (_track.L + _min_dist))
|
||
_track.R = _track.L + _min_dist;
|
||
if (_track.B < (_track.T + _min_dist))
|
||
_track.B = _track.T + _min_dist;
|
||
|
||
break;
|
||
}
|
||
case 5:
|
||
{
|
||
_track.L = _rect.X;
|
||
_track.T = _rect.Y;
|
||
_track.R = _rect.R;
|
||
_track.B = _rect.B + (pos.Y - _track.Y);
|
||
|
||
if (_track.B < (_track.T + _min_dist))
|
||
_track.B = _track.T + _min_dist;
|
||
|
||
break;
|
||
}
|
||
case 6:
|
||
{
|
||
_track.L = _rect.X + (pos.X - _track.X);
|
||
_track.T = _rect.Y;
|
||
_track.R = _rect.R;
|
||
_track.B = _rect.B + (pos.Y - _track.Y);
|
||
|
||
if (_track.L > (_track.R - _min_dist))
|
||
_track.L = _track.R - _min_dist;
|
||
if (_track.B < (_track.T + _min_dist))
|
||
_track.B = _track.T + _min_dist;
|
||
|
||
break;
|
||
}
|
||
case 7:
|
||
{
|
||
_track.L = _rect.X + (pos.X - _track.X);
|
||
_track.T = _rect.Y;
|
||
_track.R = _rect.R;
|
||
_track.B = _rect.B;
|
||
|
||
if (_track.L > (_track.R - _min_dist))
|
||
_track.L = _track.R - _min_dist;
|
||
|
||
break;
|
||
}
|
||
default:
|
||
{
|
||
_track.L = pos.X - (_track.X - _rect.X);
|
||
_track.T = pos.Y - (_track.Y - _rect.Y);
|
||
_track.R = _track.L + _rect.R - _rect.X;
|
||
_track.B = _track.T + _rect.B - _rect.Y;
|
||
|
||
_track.PageIndex = pos.Page;
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
|
||
this.DrawVerAnchor = function (pageNum, xPos, bIsFromDrawings)
|
||
{
|
||
if (undefined === bIsFromDrawings)
|
||
{
|
||
if (this.m_oWordControl.m_oApi.ShowSnapLines)
|
||
{
|
||
this.HorVerAnchors.push({Type: 0, Page: pageNum, Pos: xPos});
|
||
}
|
||
return;
|
||
}
|
||
|
||
var _pos = this.ConvertCoordsToCursor4(xPos, 0, pageNum);
|
||
if (_pos.Error === false)
|
||
{
|
||
this.m_oWordControl.m_oOverlayApi.DashLineColor = "#C8C8C8";
|
||
this.m_oWordControl.m_oOverlayApi.VertLine2(_pos.X);
|
||
this.m_oWordControl.m_oOverlayApi.DashLineColor = "#000000";
|
||
}
|
||
}
|
||
|
||
this.DrawHorAnchor = function (pageNum, yPos, bIsFromDrawings)
|
||
{
|
||
if (undefined === bIsFromDrawings)
|
||
{
|
||
if (this.m_oWordControl.m_oApi.ShowSnapLines)
|
||
{
|
||
this.HorVerAnchors.push({Type: 1, Page: pageNum, Pos: yPos});
|
||
}
|
||
return;
|
||
}
|
||
|
||
var _pos = this.ConvertCoordsToCursor4(0, yPos, pageNum);
|
||
if (_pos.Error === false)
|
||
{
|
||
this.m_oWordControl.m_oOverlayApi.DashLineColor = "#C8C8C8";
|
||
this.m_oWordControl.m_oOverlayApi.HorLine2(_pos.Y);
|
||
this.m_oWordControl.m_oOverlayApi.DashLineColor = "#000000";
|
||
}
|
||
}
|
||
|
||
this.DrawHorVerAnchor = function ()
|
||
{
|
||
for (var i = 0; i < this.HorVerAnchors.length; i++)
|
||
{
|
||
var _anchor = this.HorVerAnchors[i];
|
||
if (_anchor.Type == 0)
|
||
this.DrawVerAnchor(_anchor.Page, _anchor.Pos, true);
|
||
else
|
||
this.DrawHorAnchor(_anchor.Page, _anchor.Pos, true);
|
||
}
|
||
this.HorVerAnchors.splice(0, this.HorVerAnchors.length);
|
||
}
|
||
|
||
// track text (inline)
|
||
this.StartTrackText = function ()
|
||
{
|
||
this.InlineTextTrackEnabled = true;
|
||
this.InlineTextTrack = null;
|
||
this.InlineTextTrackPage = -1;
|
||
}
|
||
this.EndTrackText = function (isOnlyMoveTarget)
|
||
{
|
||
this.InlineTextTrackEnabled = false;
|
||
|
||
if (true !== isOnlyMoveTarget)
|
||
this.m_oWordControl.m_oLogicDocument.OnEndTextDrag(this.InlineTextTrack, AscCommon.global_keyboardEvent.CtrlKey);
|
||
else if (this.InlineTextTrack)
|
||
{
|
||
var Paragraph = this.InlineTextTrack.Paragraph;
|
||
Paragraph.Cursor_MoveToNearPos(this.InlineTextTrack);
|
||
Paragraph.Document_SetThisElementCurrent(false);
|
||
|
||
this.m_oWordControl.m_oLogicDocument.Document_UpdateSelectionState();
|
||
this.m_oWordControl.m_oLogicDocument.Document_UpdateInterfaceState();
|
||
this.m_oWordControl.m_oLogicDocument.Document_UpdateRulersState();
|
||
}
|
||
|
||
this.InlineTextTrack = null;
|
||
this.InlineTextTrackPage = -1;
|
||
}
|
||
|
||
this.IsTrackText = function ()
|
||
{
|
||
return this.InlineTextTrackEnabled;
|
||
}
|
||
|
||
this.CancelTrackText = function ()
|
||
{
|
||
this.InlineTextTrackEnabled = false;
|
||
this.InlineTextTrack = null;
|
||
this.InlineTextTrackPage = -1;
|
||
}
|
||
|
||
this.SendMathToMenu = function ()
|
||
{
|
||
if (this.MathMenuLoad)
|
||
return;
|
||
|
||
// GENERATE_IMAGES
|
||
//var _MathPainter = new CMathPainter(this.m_oWordControl.m_oApi);
|
||
//_MathPainter.StartLoad();
|
||
//return;
|
||
|
||
var _MathPainter = new AscFormat.CMathPainter(this.m_oWordControl.m_oApi);
|
||
_MathPainter.Generate();
|
||
this.MathMenuLoad = true;
|
||
};
|
||
|
||
// collaborative targets
|
||
this.Collaborative_UpdateTarget = function (_id, _shortId, _x, _y, _size, _page, _transform, is_from_paint)
|
||
{
|
||
if (is_from_paint !== true)
|
||
{
|
||
this.CollaborativeTargetsUpdateTasks.push([_id, _shortId, _x, _y, _size, _page, _transform]);
|
||
return;
|
||
}
|
||
|
||
for (var i = 0; i < this.CollaborativeTargets.length; i++)
|
||
{
|
||
if (_id == this.CollaborativeTargets[i].Id)
|
||
{
|
||
this.CollaborativeTargets[i].CheckPosition(this, _x, _y, _size, _page, _transform);
|
||
return;
|
||
}
|
||
}
|
||
var _target = new CDrawingCollaborativeTarget();
|
||
_target.Id = _id;
|
||
_target.ShortId = _shortId;
|
||
_target.CheckPosition(this, _x, _y, _size, _page, _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)
|
||
{
|
||
var _len_tasks = this.CollaborativeTargetsUpdateTasks.length;
|
||
var i = 0;
|
||
for (i = 0; i < _len_tasks; i++)
|
||
{
|
||
var _tmp = this.CollaborativeTargetsUpdateTasks[i];
|
||
this.Collaborative_UpdateTarget(_tmp[0], _tmp[1], _tmp[2], _tmp[3], _tmp[4], _tmp[5], _tmp[6], true);
|
||
}
|
||
if (_len_tasks != 0)
|
||
this.CollaborativeTargetsUpdateTasks.splice(0, _len_tasks);
|
||
|
||
if (bIsChangePosition)
|
||
{
|
||
for (i = 0; i < this.CollaborativeTargets.length; i++)
|
||
{
|
||
this.CollaborativeTargets[i].Update(this);
|
||
}
|
||
}
|
||
};
|
||
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;
|
||
};
|
||
}
|
||
function CStylesPainter()
|
||
{
|
||
this.defaultStyles = null;
|
||
this.docStyles = null;
|
||
|
||
this.mergedStyles = null;
|
||
|
||
this.STYLE_THUMBNAIL_WIDTH = GlobalSkin.STYLE_THUMBNAIL_WIDTH;
|
||
this.STYLE_THUMBNAIL_HEIGHT = GlobalSkin.STYLE_THUMBNAIL_HEIGHT;
|
||
|
||
this.CurrentTranslate = null;
|
||
this.IsRetinaEnabled = false;
|
||
}
|
||
CStylesPainter.prototype =
|
||
{
|
||
CheckStylesNames : function(_api, ds)
|
||
{
|
||
var DocumentStyles = _api.WordControl.m_oLogicDocument.Get_Styles();
|
||
for (var i in ds)
|
||
{
|
||
var style = ds[i];
|
||
if (style.IsExpressStyle(DocumentStyles) && null === DocumentStyles.GetStyleIdByName(style.Name))
|
||
{
|
||
AscFonts.FontPickerByCharacter.getFontsByString(style.Name);
|
||
}
|
||
}
|
||
|
||
AscFonts.FontPickerByCharacter.getFontsByString("Aa");
|
||
|
||
var styles = DocumentStyles.Style;
|
||
|
||
if (!styles)
|
||
return;
|
||
|
||
for (var i in styles)
|
||
{
|
||
var style = styles[i];
|
||
if (style.IsExpressStyle(DocumentStyles))
|
||
{
|
||
AscFonts.FontPickerByCharacter.getFontsByString(style.Name);
|
||
AscFonts.FontPickerByCharacter.getFontsByString(AscCommon.translateManager.getValue(style.Name));
|
||
}
|
||
}
|
||
},
|
||
|
||
GenerateStyles: function (_api, ds)
|
||
{
|
||
var _oldX = this.STYLE_THUMBNAIL_WIDTH;
|
||
var _oldY = this.STYLE_THUMBNAIL_HEIGHT;
|
||
if (_api.WordControl.bIsRetinaSupport)
|
||
{
|
||
this.STYLE_THUMBNAIL_WIDTH = AscCommon.AscBrowser.convertToRetinaValue(this.STYLE_THUMBNAIL_WIDTH, true);
|
||
this.STYLE_THUMBNAIL_HEIGHT = AscCommon.AscBrowser.convertToRetinaValue(this.STYLE_THUMBNAIL_HEIGHT, true);
|
||
this.IsRetinaEnabled = true;
|
||
}
|
||
|
||
this.CurrentTranslate = _api.CurrentTranslate;
|
||
|
||
this.GenerateDefaultStyles(_api, ds);
|
||
this.GenerateDocumentStyles(_api);
|
||
|
||
// стили сформированы. осталось просто сформировать единый список
|
||
var _count_default = this.defaultStyles.length;
|
||
var _count_doc = 0;
|
||
if (null != this.docStyles)
|
||
_count_doc = this.docStyles.length;
|
||
|
||
var aPriorityStyles = [];
|
||
var fAddToPriorityStyles = function (style)
|
||
{
|
||
var index = style.uiPriority;
|
||
if (null == index)
|
||
index = 0;
|
||
var aSubArray = aPriorityStyles[index];
|
||
if (null == aSubArray)
|
||
{
|
||
aSubArray = [];
|
||
aPriorityStyles[index] = aSubArray;
|
||
}
|
||
aSubArray.push(style);
|
||
};
|
||
var _map_document = {};
|
||
|
||
for (var i = 0; i < _count_doc; i++)
|
||
{
|
||
var style = this.docStyles[i];
|
||
_map_document[style.Name] = 1;
|
||
fAddToPriorityStyles(style);
|
||
}
|
||
|
||
for (var i = 0; i < _count_default; i++)
|
||
{
|
||
var style = this.defaultStyles[i];
|
||
if (null == _map_document[style.Name])
|
||
fAddToPriorityStyles(style);
|
||
}
|
||
|
||
this.mergedStyles = [];
|
||
for (var index in aPriorityStyles)
|
||
{
|
||
var aSubArray = aPriorityStyles[index];
|
||
aSubArray.sort(function (a, b)
|
||
{
|
||
if (a.Name < b.Name)
|
||
return -1;
|
||
else if (a.Name > b.Name)
|
||
return 1;
|
||
else
|
||
return 0;
|
||
});
|
||
for (var i = 0, length = aSubArray.length; i < length; ++i)
|
||
{
|
||
this.mergedStyles.push(aSubArray[i]);
|
||
}
|
||
}
|
||
|
||
if (_api.WordControl.bIsRetinaSupport)
|
||
{
|
||
this.STYLE_THUMBNAIL_WIDTH = _oldX;
|
||
this.STYLE_THUMBNAIL_HEIGHT = _oldY;
|
||
}
|
||
|
||
// export
|
||
this["STYLE_THUMBNAIL_WIDTH"] = this.STYLE_THUMBNAIL_WIDTH;
|
||
this["STYLE_THUMBNAIL_HEIGHT"] = this.STYLE_THUMBNAIL_HEIGHT;
|
||
|
||
// теперь просто отдаем евент наверх
|
||
_api.sync_InitEditorStyles(this);
|
||
},
|
||
GenerateDefaultStyles: function (_api, ds)
|
||
{
|
||
var styles = ds;
|
||
|
||
// добавили переводы => нельзя кэшировать
|
||
var _canvas = document.createElement('canvas');
|
||
_canvas.width = this.STYLE_THUMBNAIL_WIDTH;
|
||
_canvas.height = this.STYLE_THUMBNAIL_HEIGHT;
|
||
var ctx = _canvas.getContext('2d');
|
||
|
||
ctx.fillStyle = "#FFFFFF";
|
||
ctx.fillRect(0, 0, _canvas.width, _canvas.height);
|
||
|
||
var graphics = new AscCommon.CGraphics();
|
||
if (!this.IsRetinaEnabled)
|
||
{
|
||
graphics.init(ctx, _canvas.width, _canvas.height, _canvas.width * g_dKoef_pix_to_mm, _canvas.height * g_dKoef_pix_to_mm);
|
||
}
|
||
else
|
||
{
|
||
graphics.init(ctx, _canvas.width, _canvas.height,
|
||
_canvas.width * g_dKoef_pix_to_mm / AscCommon.AscBrowser.retinaPixelRatio,
|
||
_canvas.height * g_dKoef_pix_to_mm / AscCommon.AscBrowser.retinaPixelRatio);
|
||
}
|
||
graphics.m_oFontManager = AscCommon.g_fontManager;
|
||
|
||
var DocumentStyles = _api.WordControl.m_oLogicDocument.Get_Styles();
|
||
this.defaultStyles = [];
|
||
for (var i in styles)
|
||
{
|
||
var style = styles[i];
|
||
if (style.IsExpressStyle(DocumentStyles) && null === DocumentStyles.GetStyleIdByName(style.Name))
|
||
{
|
||
this.drawStyle(graphics, style, AscCommon.translateManager.getValue(style.Name));
|
||
this.defaultStyles.push(new AscCommon.CStyleImage(style.Name, AscCommon.c_oAscStyleImage.Default,
|
||
_canvas.toDataURL("image/png"), style.uiPriority));
|
||
}
|
||
}
|
||
},
|
||
|
||
GenerateDocumentStyles: function (_api)
|
||
{
|
||
if (!_api.WordControl.m_oLogicDocument)
|
||
{
|
||
return;
|
||
}
|
||
|
||
var __Styles = _api.WordControl.m_oLogicDocument.Get_Styles();
|
||
var styles = __Styles.Style;
|
||
|
||
if (!styles)
|
||
{
|
||
return;
|
||
}
|
||
|
||
var cur_index = 0;
|
||
|
||
var _canvas = document.createElement('canvas');
|
||
_canvas.width = this.STYLE_THUMBNAIL_WIDTH;
|
||
_canvas.height = this.STYLE_THUMBNAIL_HEIGHT;
|
||
var ctx = _canvas.getContext('2d');
|
||
|
||
if (window["flat_desine"] !== true)
|
||
{
|
||
ctx.fillStyle = "#FFFFFF";
|
||
ctx.fillRect(0, 0, _canvas.width, _canvas.height);
|
||
}
|
||
|
||
var graphics = new AscCommon.CGraphics();
|
||
if (!this.IsRetinaEnabled)
|
||
{
|
||
graphics.init(ctx, _canvas.width, _canvas.height, _canvas.width * g_dKoef_pix_to_mm, _canvas.height * g_dKoef_pix_to_mm);
|
||
}
|
||
else
|
||
{
|
||
graphics.init(ctx, _canvas.width, _canvas.height,
|
||
_canvas.width * g_dKoef_pix_to_mm / AscCommon.AscBrowser.retinaPixelRatio,
|
||
_canvas.height * g_dKoef_pix_to_mm / AscCommon.AscBrowser.retinaPixelRatio);
|
||
}
|
||
graphics.m_oFontManager = AscCommon.g_fontManager;
|
||
|
||
this.docStyles = [];
|
||
for (var i in styles)
|
||
{
|
||
var style = styles[i];
|
||
if (style.IsExpressStyle(__Styles))
|
||
{
|
||
// как только меняется сериалайзер - меняется и код здесь. Да, не очень удобно,
|
||
// зато быстро делается
|
||
var formalStyle = i.toLowerCase().replace(/\s/g, "");
|
||
var res = formalStyle.match(/^heading([1-9][0-9]*)$/);
|
||
var index = (res) ? res[1] - 1 : -1;
|
||
|
||
var _dr_style = __Styles.Get_Pr(i, styletype_Paragraph);
|
||
_dr_style.Name = style.Name;
|
||
_dr_style.Id = i;
|
||
|
||
this.drawStyle(graphics, _dr_style,
|
||
__Styles.Is_StyleDefault(style.Name) ? AscCommon.translateManager.getValue(style.Name) : style.Name);
|
||
this.docStyles[cur_index] = new AscCommon.CStyleImage(style.Name, AscCommon.c_oAscStyleImage.Document,
|
||
_canvas.toDataURL("image/png"), style.uiPriority);
|
||
|
||
// алгоритм смены имени
|
||
if (style.Default)
|
||
{
|
||
switch (style.Default)
|
||
{
|
||
case 1:
|
||
break;
|
||
case 2:
|
||
this.docStyles[cur_index].Name = "No List";
|
||
break;
|
||
case 3:
|
||
this.docStyles[cur_index].Name = "Normal";
|
||
break;
|
||
case 4:
|
||
this.docStyles[cur_index].Name = "Normal Table";
|
||
break;
|
||
}
|
||
}
|
||
else if (index != -1)
|
||
{
|
||
this.docStyles[cur_index].Name = "Heading ".concat(index + 1);
|
||
}
|
||
|
||
cur_index++;
|
||
}
|
||
}
|
||
},
|
||
drawStyle: function (graphics, style, styleName)
|
||
{
|
||
var ctx = graphics.m_oContext;
|
||
ctx.fillStyle = "#FFFFFF";
|
||
ctx.fillRect(0, 0, this.STYLE_THUMBNAIL_WIDTH, this.STYLE_THUMBNAIL_HEIGHT);
|
||
|
||
var font = {
|
||
FontFamily: {Name: "Times New Roman", Index: -1},
|
||
Color: {r: 0, g: 0, b: 0},
|
||
Bold: false,
|
||
Italic: false,
|
||
FontSize: 10
|
||
};
|
||
|
||
var textPr = style.TextPr;
|
||
if (textPr.FontFamily != undefined)
|
||
{
|
||
font.FontFamily.Name = textPr.FontFamily.Name;
|
||
font.FontFamily.Index = textPr.FontFamily.Index;
|
||
}
|
||
|
||
if (textPr.Bold != undefined)
|
||
font.Bold = textPr.Bold;
|
||
if (textPr.Italic != undefined)
|
||
font.Italic = textPr.Italic;
|
||
|
||
if (textPr.FontSize != undefined)
|
||
font.FontSize = textPr.FontSize;
|
||
|
||
graphics.SetFont(font);
|
||
|
||
if (textPr.Color == undefined)
|
||
graphics.b_color1(0, 0, 0, 255);
|
||
else
|
||
graphics.b_color1(textPr.Color.r, textPr.Color.g, textPr.Color.b, 255);
|
||
|
||
var dKoefToMM = g_dKoef_pix_to_mm;
|
||
if (this.IsRetinaEnabled)
|
||
dKoefToMM /= AscCommon.AscBrowser.retinaPixelRatio;
|
||
|
||
if (window["flat_desine"] !== true)
|
||
{
|
||
var y = 0;
|
||
var b = dKoefToMM * this.STYLE_THUMBNAIL_HEIGHT;
|
||
var w = dKoefToMM * this.STYLE_THUMBNAIL_WIDTH;
|
||
|
||
graphics.transform(1, 0, 0, 1, 0, 0);
|
||
graphics.save();
|
||
graphics._s();
|
||
graphics._m(-0.5, y);
|
||
graphics._l(w, y);
|
||
graphics._l(w, b);
|
||
graphics._l(0, b);
|
||
graphics._z();
|
||
graphics.clip();
|
||
|
||
graphics.t(this.CurrentTranslate.StylesText, 0.5, (y + b) / 2);
|
||
|
||
ctx.setTransform(1, 0, 0, 1, 0, 0);
|
||
ctx.fillStyle = "#E8E8E8";
|
||
|
||
var _b = this.STYLE_THUMBNAIL_HEIGHT - 1.5;
|
||
var _x = 2;
|
||
var _w = this.STYLE_THUMBNAIL_WIDTH - 4;
|
||
var _h = (this.STYLE_THUMBNAIL_HEIGHT / 3) >> 0;
|
||
ctx.beginPath();
|
||
ctx.moveTo(_x, _b - _h);
|
||
ctx.lineTo(_x + _w, _b - _h);
|
||
ctx.lineTo(_x + _w, _b);
|
||
ctx.lineTo(_x, _b);
|
||
ctx.closePath();
|
||
ctx.fill();
|
||
|
||
ctx.lineWidth = 1;
|
||
ctx.strokeStyle = "#D8D8D8";
|
||
ctx.beginPath();
|
||
ctx.rect(0.5, 0.5, this.STYLE_THUMBNAIL_WIDTH - 1, this.STYLE_THUMBNAIL_HEIGHT - 1);
|
||
|
||
ctx.stroke();
|
||
|
||
graphics.restore();
|
||
}
|
||
else
|
||
{
|
||
g_oTableId.m_bTurnOff = true;
|
||
History.TurnOff();
|
||
|
||
var oldDefTabStop = AscCommonWord.Default_Tab_Stop;
|
||
AscCommonWord.Default_Tab_Stop = 1;
|
||
|
||
var hdr = new CHeaderFooter(editor.WordControl.m_oLogicDocument.HdrFtr, editor.WordControl.m_oLogicDocument, editor.WordControl.m_oDrawingDocument, AscCommon.hdrftr_Header);
|
||
var _dc = hdr.Content;//new CDocumentContent(editor.WordControl.m_oLogicDocument, editor.WordControl.m_oDrawingDocument, 0, 0, 0, 0, false, true, false);
|
||
|
||
var par = new Paragraph(editor.WordControl.m_oDrawingDocument, _dc, false);
|
||
var run = new ParaRun(par, false);
|
||
run.AddText(styleName);
|
||
|
||
_dc.Internal_Content_Add(0, par, false);
|
||
par.Add_ToContent(0, run);
|
||
par.Style_Add(style.Id, false);
|
||
par.Set_Align(AscCommon.align_Left);
|
||
par.Set_Tabs(new CParaTabs());
|
||
|
||
if (!textPr.Color || (255 === textPr.Color.r && 255 === textPr.Color.g && 255 === textPr.Color.b))
|
||
run.Set_Color(new CDocumentColor(0, 0, 0, false));
|
||
|
||
var _brdL = style.ParaPr.Brd.Left;
|
||
if (undefined !== _brdL && null !== _brdL)
|
||
{
|
||
var brdL = new CDocumentBorder();
|
||
brdL.Set_FromObject(_brdL);
|
||
brdL.Space = 0;
|
||
par.Set_Border(brdL, AscDFH.historyitem_Paragraph_Borders_Left);
|
||
}
|
||
|
||
var _brdT = style.ParaPr.Brd.Top;
|
||
if (undefined !== _brdT && null !== _brdT)
|
||
{
|
||
var brd = new CDocumentBorder();
|
||
brd.Set_FromObject(_brdT);
|
||
brd.Space = 0;
|
||
par.Set_Border(brd, AscDFH.historyitem_Paragraph_Borders_Top);
|
||
}
|
||
|
||
var _brdB = style.ParaPr.Brd.Bottom;
|
||
if (undefined !== _brdB && null !== _brdB)
|
||
{
|
||
var brd = new CDocumentBorder();
|
||
brd.Set_FromObject(_brdB);
|
||
brd.Space = 0;
|
||
par.Set_Border(brd, AscDFH.historyitem_Paragraph_Borders_Bottom);
|
||
}
|
||
|
||
var _brdR = style.ParaPr.Brd.Right;
|
||
if (undefined !== _brdR && null !== _brdR)
|
||
{
|
||
var brd = new CDocumentBorder();
|
||
brd.Set_FromObject(_brdR);
|
||
brd.Space = 0;
|
||
par.Set_Border(brd, AscDFH.historyitem_Paragraph_Borders_Right);
|
||
}
|
||
|
||
var _ind = new CParaInd();
|
||
_ind.FirstLine = 0;
|
||
_ind.Left = 0;
|
||
_ind.Right = 0;
|
||
par.Set_Ind(_ind, false);
|
||
|
||
var _sp = new CParaSpacing();
|
||
_sp.Line = 1;
|
||
_sp.LineRule = Asc.linerule_Auto;
|
||
_sp.Before = 0;
|
||
_sp.BeforeAutoSpacing = false;
|
||
_sp.After = 0;
|
||
_sp.AfterAutoSpacing = false;
|
||
par.Set_Spacing(_sp, false);
|
||
|
||
_dc.Reset(0, 0, 10000, 10000);
|
||
_dc.Recalculate_Page(0, true);
|
||
|
||
_dc.Reset(0, 0, par.Lines[0].Ranges[0].W + 0.001, 10000);
|
||
_dc.Recalculate_Page(0, true);
|
||
//par.Reset(0, 0, 10000, 10000, 0);
|
||
//par.Recalculate_Page(0);
|
||
|
||
var y = 0;
|
||
var b = dKoefToMM * this.STYLE_THUMBNAIL_HEIGHT;
|
||
var w = dKoefToMM * this.STYLE_THUMBNAIL_WIDTH;
|
||
var off = 10 * dKoefToMM;
|
||
var off2 = 5 * dKoefToMM;
|
||
var off3 = 1 * dKoefToMM;
|
||
|
||
graphics.transform(1, 0, 0, 1, 0, 0);
|
||
graphics.save();
|
||
graphics._s();
|
||
graphics._m(off2, y + off3);
|
||
graphics._l(w - off, y + off3);
|
||
graphics._l(w - off, b - off3);
|
||
graphics._l(off2, b - off3);
|
||
graphics._z();
|
||
graphics.clip();
|
||
|
||
//graphics.t(style.Name, off + 0.5, y + 0.75 * (b - y));
|
||
var baseline = par.Lines[0].Y;
|
||
par.Shift(0, off + 0.5, y + 0.75 * (b - y) - baseline);
|
||
par.Draw(0, graphics);
|
||
|
||
graphics.restore();
|
||
|
||
AscCommonWord.Default_Tab_Stop = oldDefTabStop;
|
||
|
||
g_oTableId.m_bTurnOff = false;
|
||
History.TurnOn();
|
||
}
|
||
}
|
||
};
|
||
CStylesPainter.prototype.get_MergedStyles = function ()
|
||
{
|
||
return this.mergedStyles;
|
||
};
|
||
|
||
|
||
|
||
function TransformRectByMatrix(m, arr, offX, offY, koefX, koefY)
|
||
{
|
||
var ret = [];
|
||
ret.push(offX + koefX * m.TransformPointX(arr[0], arr[1]));
|
||
ret.push(offY + koefY * m.TransformPointY(arr[0], arr[1]));
|
||
|
||
ret.push(offX + koefX * m.TransformPointX(arr[2], arr[1]));
|
||
ret.push(offY + koefY * m.TransformPointY(arr[2], arr[1]));
|
||
|
||
ret.push(offX + koefX * m.TransformPointX(arr[2], arr[3]));
|
||
ret.push(offY + koefY * m.TransformPointY(arr[2], arr[3]));
|
||
|
||
ret.push(offX + koefX * m.TransformPointX(arr[0], arr[3]));
|
||
ret.push(offY + koefY * m.TransformPointY(arr[0], arr[3]));
|
||
return ret;
|
||
}
|
||
|
||
//--------------------------------------------------------export----------------------------------------------------
|
||
window['AscCommon'] = window['AscCommon'] || {};
|
||
window['AscCommonWord'] = window['AscCommonWord'] || {};
|
||
window['AscCommon'].CPage = CPage;
|
||
window['AscCommon'].CDrawingDocument = CDrawingDocument;
|
||
|
||
window['AscCommonWord'].CStylesPainter = CStylesPainter;
|
||
CStylesPainter.prototype['get_MergedStyles'] = CStylesPainter.prototype.get_MergedStyles;
|