3742 lines
124 KiB
JavaScript
3742 lines
124 KiB
JavaScript
/*
|
||
* (c) Copyright Ascensio System SIA 2010-2024
|
||
*
|
||
* This program is a free software product. You can redistribute it and/or
|
||
* modify it under the terms of the GNU Affero General Public License (AGPL)
|
||
* version 3 as published by the Free Software Foundation. In accordance with
|
||
* Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect
|
||
* that Ascensio System SIA expressly excludes the warranty of non-infringement
|
||
* of any third-party rights.
|
||
*
|
||
* This program is distributed WITHOUT ANY WARRANTY; without even the implied
|
||
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For
|
||
* details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html
|
||
*
|
||
* You can contact Ascensio System SIA at 20A-6 Ernesta Birznieka-Upish
|
||
* street, Riga, Latvia, EU, LV-1050.
|
||
*
|
||
* The interactive user interfaces in modified source and object code versions
|
||
* of the Program must display Appropriate Legal Notices, as required under
|
||
* Section 5 of the GNU AGPL version 3.
|
||
*
|
||
* Pursuant to Section 7(b) of the License you must retain the original Product
|
||
* logo when distributing the program. Pursuant to Section 7(e) we decline to
|
||
* grant you any rights under trademark law for use of our trademarks.
|
||
*
|
||
* All the Product's GUI elements, including illustrations and icon sets, as
|
||
* well as technical writing content are licensed under the terms of the
|
||
* Creative Commons Attribution-ShareAlike 4.0 International. See the License
|
||
* terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode
|
||
*
|
||
*/
|
||
|
||
"use strict";
|
||
|
||
// Import
|
||
var c_oAscDocumentUnits = Asc.c_oAscDocumentUnits;
|
||
var global_mouseEvent = AscCommon.global_mouseEvent;
|
||
var g_dKoef_pix_to_mm = AscCommon.g_dKoef_pix_to_mm;
|
||
var g_dKoef_mm_to_pix = AscCommon.g_dKoef_mm_to_pix;
|
||
|
||
function CTab(pos, type, leader)
|
||
{
|
||
this.pos = pos;
|
||
this.type = type;
|
||
this.leader = leader;
|
||
}
|
||
|
||
var g_array_objects_length = 1;
|
||
|
||
var RULER_OBJECT_TYPE_PARAGRAPH = 1;
|
||
var RULER_OBJECT_TYPE_HEADER = 2;
|
||
var RULER_OBJECT_TYPE_FOOTER = 4;
|
||
var RULER_OBJECT_TYPE_TABLE = 8;
|
||
var RULER_OBJECT_TYPE_COLUMNS = 16;
|
||
|
||
function CHorRulerRepaintChecker()
|
||
{
|
||
// zoom/section check
|
||
this.Width = 0;
|
||
this.Height = 0;
|
||
|
||
// ruler type check
|
||
this.Type = 0;
|
||
|
||
// margin check
|
||
this.MarginLeft = 0;
|
||
this.MarginRight = 0;
|
||
|
||
// table column check
|
||
this.tableCols = [];
|
||
this.marginsLeft = [];
|
||
this.marginsRight = [];
|
||
|
||
this.columns = null; // CColumnsMarkup
|
||
|
||
// blit to main params
|
||
this.BlitAttack = false;
|
||
this.BlitLeft = 0;
|
||
this.BlitIndentLeft = 0;
|
||
this.BlitIndentLeftFirst = 0;
|
||
this.BlitIndentRight = 0;
|
||
this.BlitDefaultTab = 0;
|
||
this.BlitTabs = null;
|
||
this.BlitRtl = false;
|
||
|
||
this.BlitMarginLeftInd = 0;
|
||
this.BlitMarginRightInd = 0;
|
||
}
|
||
|
||
function CVerRulerRepaintChecker()
|
||
{
|
||
// zoom/section check
|
||
this.Width = 0;
|
||
this.Height = 0;
|
||
|
||
// ruler type check
|
||
this.Type = 0;
|
||
|
||
// margin check
|
||
this.MarginTop = 0;
|
||
this.MarginBottom = 0;
|
||
|
||
// header/footer check
|
||
this.HeaderTop = 0;
|
||
this.HeaderBottom = 0;
|
||
|
||
// table column check
|
||
this.rowsY = [];
|
||
this.rowsH = [];
|
||
|
||
// blit params
|
||
this.BlitAttack = false;
|
||
this.BlitTop = 0;
|
||
}
|
||
|
||
function RulerCorrectPosition(_ruler, val, margin)
|
||
{
|
||
if (AscCommon.global_keyboardEvent.AltKey)
|
||
return val;
|
||
|
||
var mm_1_4 = 10 / 4;
|
||
|
||
if (_ruler.Units == c_oAscDocumentUnits.Inch)
|
||
mm_1_4 = 25.4 / 16;
|
||
else if (_ruler.Units == c_oAscDocumentUnits.Point)
|
||
mm_1_4 = 25.4 / 12;
|
||
|
||
var mm_1_8 = mm_1_4 / 2;
|
||
|
||
if (undefined === margin)
|
||
return (((val + mm_1_8) / mm_1_4) >> 0) * mm_1_4;
|
||
|
||
if (val >= margin)
|
||
return margin + (((val - margin + mm_1_8) / mm_1_4) >> 0) * mm_1_4;
|
||
|
||
return margin + (((val - margin - mm_1_8) / mm_1_4) >> 0) * mm_1_4;
|
||
}
|
||
|
||
function RulerCheckSimpleChanges()
|
||
{
|
||
this.X = -1;
|
||
this.Y = -1;
|
||
this.IsSimple = true;
|
||
|
||
this.IsDown = false;
|
||
}
|
||
RulerCheckSimpleChanges.prototype =
|
||
{
|
||
Clear : function()
|
||
{
|
||
this.X = -1;
|
||
this.Y = -1;
|
||
this.IsSimple = true;
|
||
this.IsDown = false;
|
||
},
|
||
|
||
Reinit : function()
|
||
{
|
||
this.X = global_mouseEvent.X;
|
||
this.Y = global_mouseEvent.Y;
|
||
this.IsSimple = true;
|
||
this.IsDown = true;
|
||
},
|
||
|
||
CheckMove : function()
|
||
{
|
||
if (!this.IsDown)
|
||
return;
|
||
if (!this.IsSimple)
|
||
return;
|
||
|
||
if (Math.abs(global_mouseEvent.X - this.X) > 0 || Math.abs(global_mouseEvent.Y - this.Y) > 0)
|
||
this.IsSimple = false;
|
||
}
|
||
};
|
||
|
||
(function(){
|
||
AscWord.RULER_DRAG_TYPE = {
|
||
none : 0,
|
||
leftMargin : 1,
|
||
rightMargin : 2,
|
||
leftFirstInd : 3,
|
||
leftInd : 4,
|
||
firstInd : 5,
|
||
rightInd : 6,
|
||
tab : 7,
|
||
table : 8,
|
||
columnSize : 9,
|
||
columnPos : 10
|
||
};
|
||
})();
|
||
|
||
function CHorRuler()
|
||
{
|
||
this.m_oPage = null; // текущая страница. Нужна для размеров и маргинов в режиме RULER_OBJECT_TYPE_PARAGRAPH
|
||
|
||
this.m_nTop = 0; // начало прямогулольника линейки
|
||
this.m_nBottom = 0; // конец прямоугольника линейки
|
||
|
||
// реализация tab'ов
|
||
this.m_dDefaultTab = 12.5;
|
||
this.m_arrTabs = [];
|
||
this.m_lCurrentTab = -1;
|
||
this.m_dCurrentTabNewPosition = -1;
|
||
this.m_dMaxTab = 0;
|
||
this.IsDrawingCurTab = true; // это подсказка для пользователя - будет ли оставлен таб после отпускания мышки, или будет выкинут
|
||
|
||
this.m_dMarginLeft = 20;
|
||
this.m_dMarginRight = 190;
|
||
|
||
this.m_dIndentLeft = 10;
|
||
this.m_dIndentRight = 20;
|
||
this.m_dIndentLeftFirst = 20;
|
||
this.m_bRtl = false;
|
||
|
||
this.m_oCanvas = null;
|
||
|
||
this.m_dZoom = 1;
|
||
|
||
this.DragType = AscWord.RULER_DRAG_TYPE.none;
|
||
this.DragTypeMouseDown = AscWord.RULER_DRAG_TYPE.none;
|
||
|
||
this.m_dIndentLeft_old = -10000;
|
||
this.m_dIndentLeftFirst_old = -10000;
|
||
this.m_dIndentRight_old = -10000;
|
||
|
||
// отдельные настройки для текущего объекта линейки
|
||
this.CurrentObjectType = RULER_OBJECT_TYPE_PARAGRAPH;
|
||
this.m_oTableMarkup = null;
|
||
this.m_oColumnMarkup = null;
|
||
this.DragTablePos = -1;
|
||
|
||
this.TableMarginLeft = 0;
|
||
this.TableMarginLeftTrackStart = 0;
|
||
this.TableMarginRight = 0;
|
||
|
||
this.m_oWordControl = null;
|
||
|
||
this.RepaintChecker = new CHorRulerRepaintChecker();
|
||
this.m_bIsMouseDown = false;
|
||
|
||
// presentations addons
|
||
this.IsCanMoveMargins = true;
|
||
this.IsCanMoveAnyMarkers = true;
|
||
this.IsDrawAnyMarkers = true;
|
||
|
||
this.SimpleChanges = new RulerCheckSimpleChanges();
|
||
|
||
this.Units = c_oAscDocumentUnits.Millimeter;
|
||
|
||
this.DrawTablePict = function() {
|
||
var ctx = g_memory.ctx;
|
||
var dPR = AscCommon.AscBrowser.retinaPixelRatio;
|
||
var isNeedRedraw = (dPR - Math.floor(dPR)) >= 0.5 ? true : false;
|
||
var roundDPR = isNeedRedraw ? Math.floor(dPR) : Math.round(dPR);
|
||
|
||
var canvasWidth = (isNeedRedraw && dPR >= 1 ) ? Math.round(7 * (Math.floor(dPR) + 0.5)) : 7 * (isNeedRedraw ? dPR : ( dPR >= 1 ? Math.round(dPR) : dPR)),
|
||
canvasHeight = (isNeedRedraw && dPR >= 1) ? Math.round(8 * (Math.floor(dPR) + 0.5)) : 8 * (isNeedRedraw ? dPR : ( dPR >= 1 ? Math.round(dPR) : dPR));
|
||
|
||
if (null != this.tableSprite)
|
||
{
|
||
if (ctx.canvas.width == canvasWidth)
|
||
return;
|
||
}
|
||
|
||
ctx.canvas.width = canvasWidth;
|
||
ctx.canvas.height = canvasHeight;
|
||
|
||
|
||
ctx.beginPath();
|
||
ctx.fillStyle = '#ffffff';
|
||
ctx.strokeStyle = '#ffffff';
|
||
ctx.stroke();
|
||
ctx.rect(0,0,ctx.canvas.width, ctx.canvas.height)
|
||
ctx.fill();
|
||
|
||
ctx.beginPath();
|
||
ctx.strokeStyle = '#646464';
|
||
ctx.lineWidth = roundDPR;
|
||
|
||
var step = isNeedRedraw ? Math.round(dPR): ctx.lineWidth;
|
||
for (var i = 0; i < 7 * ctx.canvas.width; i += step + ctx.lineWidth) {
|
||
ctx.moveTo(0, 0.5 * ctx.lineWidth + step + i);
|
||
ctx.lineTo(ctx.canvas.width, 0.5 * ctx.lineWidth + step + i);
|
||
ctx.stroke();
|
||
}
|
||
for (var i = 0; i < 8 * ctx.canvas.height; i += step + ctx.lineWidth) {
|
||
ctx.moveTo(0.5 * ctx.lineWidth + step + i, 0);
|
||
ctx.lineTo(0.5 * ctx.lineWidth + step + i, ctx.canvas.height);
|
||
ctx.stroke();
|
||
}
|
||
|
||
return ctx.canvas;
|
||
}
|
||
|
||
this.tableSprite = null;
|
||
|
||
this.CheckCanvas = function()
|
||
{
|
||
this.m_dZoom = this.m_oWordControl.m_nZoomValue / 100;
|
||
var dPR = AscCommon.AscBrowser.retinaPixelRatio;
|
||
|
||
var tablePict = this.DrawTablePict();
|
||
if (tablePict)
|
||
this.tableSprite = tablePict;
|
||
|
||
var dKoef_mm_to_pix = g_dKoef_mm_to_pix * this.m_dZoom;
|
||
dKoef_mm_to_pix *= dPR;
|
||
|
||
var widthNew = dKoef_mm_to_pix * this.m_oPage.width_mm;
|
||
|
||
var _width = 10 * Math.round(dPR) + widthNew;
|
||
if (dPR > 1)
|
||
_width += Math.round(dPR);
|
||
|
||
var _height = 8 * g_dKoef_mm_to_pix * dPR;
|
||
|
||
var intW = _width >> 0;
|
||
var intH = _height >> 0;
|
||
if (null == this.m_oCanvas)
|
||
{
|
||
this.m_oCanvas = document.createElement('canvas');
|
||
this.m_oCanvas.width = intW;
|
||
this.m_oCanvas.height = intH;
|
||
}
|
||
else
|
||
{
|
||
var oldW = this.m_oCanvas.width;
|
||
var oldH = this.m_oCanvas.height;
|
||
|
||
if ((oldW != intW) || (oldH != intH))
|
||
{
|
||
delete this.m_oCanvas;
|
||
this.m_oCanvas = document.createElement('canvas');
|
||
this.m_oCanvas.width = intW;
|
||
this.m_oCanvas.height = intH;
|
||
}
|
||
}
|
||
return widthNew;
|
||
}
|
||
|
||
this.CreateBackground = function(cachedPage, isattack)
|
||
{
|
||
if (window["NATIVE_EDITOR_ENJINE"])
|
||
return;
|
||
|
||
if (null == cachedPage || undefined == cachedPage)
|
||
return;
|
||
|
||
this.m_oPage = cachedPage;
|
||
var width = this.CheckCanvas();
|
||
|
||
if (0 == this.DragType)
|
||
{
|
||
this.m_dMarginLeft = cachedPage.margin_left;
|
||
this.m_dMarginRight = cachedPage.margin_right;
|
||
}
|
||
|
||
// check old state
|
||
var checker = this.RepaintChecker;
|
||
var markup = this.m_oTableMarkup;
|
||
if (this.CurrentObjectType == RULER_OBJECT_TYPE_COLUMNS)
|
||
markup = this.m_oColumnMarkup;
|
||
|
||
if (isattack !== true && this.CurrentObjectType == checker.Type && width == checker.Width)
|
||
{
|
||
if (this.CurrentObjectType == RULER_OBJECT_TYPE_PARAGRAPH)
|
||
{
|
||
if (this.m_dMarginLeft == checker.MarginLeft && this.m_dMarginRight == checker.MarginRight)
|
||
return;
|
||
}
|
||
else if (this.CurrentObjectType == RULER_OBJECT_TYPE_TABLE)
|
||
{
|
||
var oldcount = checker.tableCols.length;
|
||
var newcount = 1 + markup.Cols.length;
|
||
|
||
if (oldcount == newcount)
|
||
{
|
||
var arr1 = checker.tableCols;
|
||
var arr2 = markup.Cols;
|
||
|
||
if (arr1[0] == markup.X)
|
||
{
|
||
var _break = false;
|
||
for (var i = 1; i < newcount; i++)
|
||
{
|
||
if (arr1[i] != arr2[i - 1])
|
||
{
|
||
_break = true;
|
||
break;
|
||
}
|
||
}
|
||
|
||
if (!_break)
|
||
{
|
||
--newcount;
|
||
var _margs = markup.Margins;
|
||
|
||
for (var i = 0; i < newcount; i++)
|
||
{
|
||
if (_margs[i].Left != checker.marginsLeft[i] || _margs[i].Right != checker.marginsRight[i])
|
||
{
|
||
_break = true;
|
||
break;
|
||
}
|
||
}
|
||
|
||
if (!_break)
|
||
return;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
else if (this.CurrentObjectType == RULER_OBJECT_TYPE_COLUMNS)
|
||
{
|
||
if (this.m_oColumnMarkup.X == checker.columns.X)
|
||
{
|
||
if (markup.EqualWidth == checker.columns.EqualWidth)
|
||
{
|
||
if (markup.EqualWidth)
|
||
{
|
||
if (markup.Num == checker.columns.Num && markup.Space == checker.columns.Space && markup.R == checker.columns.R)
|
||
return;
|
||
}
|
||
else
|
||
{
|
||
var _arr1 = markup.Cols;
|
||
var _arr2 = checker.columns.Cols;
|
||
if (_arr1 && _arr2 && _arr1.length == _arr2.length)
|
||
{
|
||
var _len = _arr1.length;
|
||
var _index = 0;
|
||
for (_index = 0; _index < _len; _index++)
|
||
{
|
||
if (_arr1[_index].W != _arr2[_index].W || _arr1[_index].Space != _arr2[_index].Space)
|
||
break;
|
||
}
|
||
|
||
if (_index == _len)
|
||
return;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
//console.log("horizontal");
|
||
|
||
checker.Width = width;
|
||
checker.Type = this.CurrentObjectType;
|
||
checker.BlitAttack = true;
|
||
|
||
var dPR = AscCommon.AscBrowser.retinaPixelRatio;
|
||
var dKoef_mm_to_pix = g_dKoef_mm_to_pix * this.m_dZoom * dPR;
|
||
|
||
// не править !!!
|
||
this.m_nTop = Math.round(6 * dPR);//(1.8 * g_dKoef_mm_to_pix) >> 0;
|
||
this.m_nBottom = Math.round(19 * dPR);//(5.2 * g_dKoef_mm_to_pix) >> 0;
|
||
|
||
var context = this.m_oCanvas.getContext('2d');
|
||
context.setTransform(1, 0, 0, 1, 5 * Math.round( dPR), 0);
|
||
|
||
|
||
context.fillStyle = GlobalSkin.BackgroundColor;
|
||
context.fillRect(0, 0, this.m_oCanvas.width, this.m_oCanvas.height);
|
||
|
||
// промежуток между маргинами
|
||
var left_margin = 0;
|
||
var right_margin = 0;
|
||
|
||
let isRtl = false;
|
||
if (this.CurrentObjectType == RULER_OBJECT_TYPE_PARAGRAPH)
|
||
{
|
||
left_margin = (this.m_dMarginLeft * dKoef_mm_to_pix) >> 0;
|
||
right_margin = (this.m_dMarginRight * dKoef_mm_to_pix) >> 0;
|
||
|
||
checker.MarginLeft = this.m_dMarginLeft;
|
||
checker.MarginRight = this.m_dMarginRight;
|
||
isRtl = this.m_bRtl;
|
||
}
|
||
else if (this.CurrentObjectType == RULER_OBJECT_TYPE_TABLE && null != markup)
|
||
{
|
||
var _cols = checker.tableCols;
|
||
if (0 != _cols.length)
|
||
_cols.splice(0, _cols.length);
|
||
|
||
_cols[0] = markup.X;
|
||
var _ml = checker.marginsLeft;
|
||
if (0 != _ml.length)
|
||
_ml.splice(0, _ml.length);
|
||
|
||
var _mr = checker.marginsRight;
|
||
if (0 != _mr.length)
|
||
_mr.splice(0, _mr.length);
|
||
|
||
var _count_ = markup.Cols.length;
|
||
|
||
for (var i = 0; i < _count_; i++)
|
||
{
|
||
_cols[i + 1] = markup.Cols[i];
|
||
_ml[i] = markup.Margins[i].Left;
|
||
_mr[i] = markup.Margins[i].Right;
|
||
}
|
||
|
||
if (0 != _count_)
|
||
{
|
||
var _start = 0;
|
||
for (var i = 0; i < _count_; i++)
|
||
{
|
||
_start += markup.Cols[i];
|
||
}
|
||
|
||
left_margin = ((markup.X + markup.Margins[0].Left) * dKoef_mm_to_pix) >> 0;
|
||
right_margin = ((markup.X + _start - markup.Margins[markup.Margins.length - 1].Right) * dKoef_mm_to_pix) >> 0;
|
||
}
|
||
}
|
||
else if (this.CurrentObjectType == RULER_OBJECT_TYPE_COLUMNS && null != markup)
|
||
{
|
||
left_margin = (markup.X * dKoef_mm_to_pix) >> 0;
|
||
right_margin = (markup.R * dKoef_mm_to_pix) >> 0;
|
||
|
||
checker.MarginLeft = this.m_dMarginLeft;
|
||
checker.MarginRight = this.m_dMarginRight;
|
||
|
||
checker.columns = this.m_oColumnMarkup.CreateDuplicate();
|
||
}
|
||
var indent = 0.5 * Math.round(dPR);
|
||
context.fillStyle = GlobalSkin.RulerLight;
|
||
context.fillRect(left_margin + indent, this.m_nTop + indent, right_margin - left_margin, this.m_nBottom - this.m_nTop);
|
||
|
||
var intW = width >> 0;
|
||
|
||
if (true)
|
||
{
|
||
context.beginPath();
|
||
context.fillStyle = GlobalSkin.RulerDark;
|
||
|
||
context.fillRect(indent, this.m_nTop + indent, left_margin, this.m_nBottom - this.m_nTop);
|
||
context.fillRect(right_margin + indent, this.m_nTop + indent, Math.max(intW - right_margin, 1), this.m_nBottom - this.m_nTop);
|
||
context.beginPath();
|
||
}
|
||
|
||
// рамка
|
||
//context.shadowBlur = 0;
|
||
//context.shadowColor = "#81878F";
|
||
|
||
context.beginPath();
|
||
context.lineWidth = Math.round(dPR);
|
||
context.strokeStyle = GlobalSkin.RulerTextColor;
|
||
context.fillStyle = GlobalSkin.RulerTextColor;
|
||
|
||
let mm_1_4 = 10 * dKoef_mm_to_pix / 4;
|
||
let inch_1_8 = 25.4 * dKoef_mm_to_pix / 8;
|
||
let point_1_12 = 25.4 * dKoef_mm_to_pix / 12;
|
||
|
||
var middleVert = (this.m_nTop + this.m_nBottom) / 2;
|
||
var part1 = 1.5 * Math.round(dPR);
|
||
var part2 = 2.5 * Math.round(dPR);
|
||
|
||
context.font = Math.round(7 * dPR) + "pt Arial";
|
||
|
||
let _bottom = this.m_nBottom;
|
||
function drawLayoutMM(x, step, count)
|
||
{
|
||
let isDraw1_4 = Math.abs(step) > 7;
|
||
let index = 0;
|
||
let num = 0;
|
||
for (let i = 1; i <= count; ++i)
|
||
{
|
||
let lXPos = ((x + i * step) >> 0) + indent;
|
||
index++;
|
||
|
||
if (index === 4)
|
||
index = 0;
|
||
|
||
if (0 === index)
|
||
{
|
||
num++;
|
||
// number
|
||
let strNum = "" + num;
|
||
let lWidthText = context.measureText(strNum).width;
|
||
lXPos -= (lWidthText / 2.0);
|
||
context.fillText(strNum, lXPos, _bottom - Math.round(3 * dPR));
|
||
}
|
||
else if (1 === index && isDraw1_4)
|
||
{
|
||
// 1/4
|
||
context.beginPath();
|
||
context.moveTo(lXPos, middleVert - part1);
|
||
context.lineTo(lXPos, middleVert + part1);
|
||
context.stroke();
|
||
}
|
||
else if (2 === index)
|
||
{
|
||
// 1/2
|
||
context.beginPath();
|
||
context.moveTo(lXPos, middleVert - part2);
|
||
context.lineTo(lXPos, middleVert + part2);
|
||
context.stroke();
|
||
}
|
||
else if (isDraw1_4)
|
||
{
|
||
// 1/4
|
||
context.beginPath();
|
||
context.moveTo(lXPos, middleVert - part1);
|
||
context.lineTo(lXPos, middleVert + part1);
|
||
context.stroke();
|
||
}
|
||
}
|
||
}
|
||
function drawLayoutInch(x, step, count)
|
||
{
|
||
let isDraw1_8 = Math.abs(step) > 8;
|
||
let index = 0;
|
||
let num = 0;
|
||
for (let i = 1; i <= count; ++i)
|
||
{
|
||
let lXPos = ((x + i * step) >> 0) + indent;
|
||
index++;
|
||
|
||
if (index === 8)
|
||
index = 0;
|
||
|
||
if (0 === index)
|
||
{
|
||
num++;
|
||
// number
|
||
let strNum = "" + num;
|
||
let lWidthText = context.measureText(strNum).width;
|
||
lXPos -= (lWidthText / 2.0);
|
||
context.fillText(strNum, lXPos, _bottom - Math.round(3 * dPR));
|
||
}
|
||
else if (4 === index)
|
||
{
|
||
// 1/2
|
||
context.beginPath();
|
||
context.moveTo(lXPos, middleVert - part2);
|
||
context.lineTo(lXPos, middleVert + part2);
|
||
context.stroke();
|
||
}
|
||
else if (isDraw1_8)
|
||
{
|
||
// 1/8
|
||
context.beginPath();
|
||
context.moveTo(lXPos, middleVert - part1);
|
||
context.lineTo(lXPos, middleVert + part1);
|
||
context.stroke();
|
||
}
|
||
}
|
||
}
|
||
function drawLayoutPt(x, step, count)
|
||
{
|
||
let isDraw1_12 = Math.abs(step) > 5;
|
||
let index = 0;
|
||
let num = 0;
|
||
for (let i = 1; i <= count; ++i)
|
||
{
|
||
let lXPos = ((x + i * step) >> 0) + indent;
|
||
index++;
|
||
|
||
if (index === 12)
|
||
index = 0;
|
||
|
||
if (0 === index || 6 === index)
|
||
{
|
||
num++;
|
||
// number
|
||
let strNum = "" + (num * 36);
|
||
let lWidthText = context.measureText(strNum).width;
|
||
lXPos -= (lWidthText / 2.0);
|
||
context.fillText(strNum, lXPos, _bottom - Math.round(3 * dPR));
|
||
}
|
||
else if (isDraw1_12)
|
||
{
|
||
// 1/12
|
||
context.beginPath();
|
||
context.moveTo(lXPos, middleVert - part1);
|
||
context.lineTo(lXPos, middleVert + part1);
|
||
context.stroke();
|
||
}
|
||
}
|
||
}
|
||
|
||
let step = point_1_12;
|
||
let drawFunc = null;
|
||
|
||
if (this.Units === c_oAscDocumentUnits.Millimeter)
|
||
{
|
||
step = mm_1_4;
|
||
drawFunc = drawLayoutMM;
|
||
}
|
||
else if (this.Units === c_oAscDocumentUnits.Inch)
|
||
{
|
||
step = inch_1_8;
|
||
drawFunc = drawLayoutInch;
|
||
}
|
||
else if (this.Units === c_oAscDocumentUnits.Point)
|
||
{
|
||
step = point_1_12;
|
||
drawFunc = drawLayoutPt;
|
||
}
|
||
|
||
if (drawFunc)
|
||
{
|
||
let zeroX = isRtl ? right_margin : left_margin;
|
||
let rCount = isRtl ? ((width - right_margin) / step) >> 0 : (((width - left_margin) / step) >> 0) - 1;
|
||
let lCount = isRtl ? ((right_margin / step) >> 0) - 1 : left_margin / step >> 0;
|
||
|
||
drawFunc(zeroX, step, rCount);
|
||
drawFunc(zeroX, -step, lCount);
|
||
}
|
||
|
||
if (null != markup && this.CurrentObjectType == RULER_OBJECT_TYPE_TABLE)
|
||
{
|
||
var _count = markup.Cols.length;
|
||
if (0 != _count)
|
||
{
|
||
context.fillStyle = GlobalSkin.RulerDark;
|
||
context.strokeStyle = GlobalSkin.RulerOutline;
|
||
|
||
var _offset = markup.X;
|
||
for (var i = 0; i <= _count; i++)
|
||
{
|
||
var __xID = 0;
|
||
__xID = (-2.5 * dPR + _offset * dKoef_mm_to_pix) >> 0;
|
||
|
||
var __yID = this.m_nBottom - Math.round(10 * dPR);
|
||
|
||
if (0 == i)
|
||
{
|
||
context.drawImage(this.tableSprite, __xID, __yID);
|
||
_offset += markup.Cols[i];
|
||
continue;
|
||
}
|
||
if (i == _count)
|
||
{
|
||
context.drawImage(this.tableSprite, __xID, __yID);
|
||
break;
|
||
}
|
||
|
||
var __x = (((_offset - markup.Margins[i-1].Right) * dKoef_mm_to_pix) >> 0) + indent;
|
||
var __r = (((_offset + markup.Margins[i].Left) * dKoef_mm_to_pix) >> 0) + indent;
|
||
|
||
context.fillRect(__x, this.m_nTop + indent, __r - __x, this.m_nBottom - this.m_nTop);
|
||
context.strokeRect(__x, this.m_nTop + indent, __r - __x, this.m_nBottom - this.m_nTop);
|
||
context.drawImage(this.tableSprite, __xID, __yID);
|
||
|
||
_offset += markup.Cols[i];
|
||
}
|
||
}
|
||
}
|
||
|
||
if (null != markup && this.CurrentObjectType == RULER_OBJECT_TYPE_COLUMNS)
|
||
{
|
||
var _array = markup.EqualWidth ? [] : markup.Cols;
|
||
if (markup.EqualWidth)
|
||
{
|
||
var _w = ((markup.R - markup.X) - markup.Space * (markup.Num - 1)) / markup.Num;
|
||
|
||
for (var i = 0; i < markup.Num; i++)
|
||
{
|
||
var _cur = new CColumnsMarkupColumn();
|
||
_cur.W = _w;
|
||
_cur.Space = markup.Space;
|
||
_array.push(_cur);
|
||
}
|
||
}
|
||
|
||
var _count = _array.length;
|
||
if (0 != _count)
|
||
{
|
||
context.fillStyle = GlobalSkin.RulerDark;
|
||
context.strokeStyle = GlobalSkin.RulerOutline;
|
||
|
||
var _offsetX = markup.X;
|
||
for (var i = 0; i < _count; i++)
|
||
{
|
||
var __xTmp = _offsetX + _array[i].W;
|
||
var __rTmp = __xTmp + _array[i].Space;
|
||
|
||
var _offset = (__xTmp + __rTmp) / 2;
|
||
|
||
if (i == (_count - 1))
|
||
continue;
|
||
|
||
var __xID = 0;
|
||
__xID = ((2.5 + _offset * dKoef_mm_to_pix)) * dPR >> 0;
|
||
|
||
var __yID = this.m_nBottom - Math.round(10 * dPR);
|
||
|
||
var __x = ((__xTmp * dKoef_mm_to_pix) >> 0) + indent;
|
||
var __r = ((__rTmp * dKoef_mm_to_pix) >> 0) + indent;
|
||
|
||
context.fillRect(__x, this.m_nTop + indent, __r - __x, this.m_nBottom - this.m_nTop);
|
||
context.strokeRect(__x, this.m_nTop + indent, __r - __x, this.m_nBottom - this.m_nTop);
|
||
|
||
if (!markup.EqualWidth)
|
||
context.drawImage(this.tableSprite, __xID, __yID);
|
||
|
||
if ((__r - __x) > 10)
|
||
{
|
||
context.fillStyle = GlobalSkin.RulerLight;
|
||
context.strokeStyle = GlobalSkin.RulerMarkersOutlineColor;
|
||
|
||
var roundV1 = Math.round(3 * dPR);
|
||
var roundV2 = Math.round(6 * dPR);
|
||
context.fillRect(__x + roundV1, this.m_nTop + indent + roundV1, roundV1, this.m_nBottom - this.m_nTop - roundV2);
|
||
context.fillRect(__r - roundV2, this.m_nTop + indent + roundV1, roundV1, this.m_nBottom - this.m_nTop - roundV2);
|
||
context.strokeRect(__x + roundV1, this.m_nTop + indent + roundV1, roundV1, this.m_nBottom - this.m_nTop - roundV2);
|
||
context.strokeRect(__r - roundV2, this.m_nTop + indent + roundV1, roundV1, this.m_nBottom - this.m_nTop - roundV2);
|
||
context.fillStyle = GlobalSkin.RulerDark;
|
||
context.strokeStyle = GlobalSkin.RulerOutline;
|
||
}
|
||
|
||
_offsetX += (_array[i].W + _array[i].Space);
|
||
}
|
||
}
|
||
}
|
||
|
||
context.beginPath();
|
||
context.strokeStyle = GlobalSkin.RulerOutline;
|
||
context.strokeRect(indent, this.m_nTop + indent, Math.max(intW - 1, 1), this.m_nBottom - this.m_nTop);
|
||
context.beginPath();
|
||
context.moveTo(left_margin + indent, this.m_nTop + indent);
|
||
context.lineTo(left_margin + indent, this.m_nBottom - indent);
|
||
|
||
context.moveTo(right_margin + indent, this.m_nTop + indent);
|
||
context.lineTo(right_margin + indent, this.m_nBottom - indent);
|
||
|
||
context.stroke();
|
||
}
|
||
|
||
this.CorrectTabs = function()
|
||
{
|
||
this.m_dMaxTab = 0;
|
||
var _old_c = this.m_arrTabs.length;
|
||
if (0 == _old_c)
|
||
return;
|
||
|
||
var _old = this.m_arrTabs;
|
||
var _new = [];
|
||
|
||
for (var i = 0; i < _old_c; i++)
|
||
{
|
||
for (var j = i + 1; j < _old_c; j++)
|
||
{
|
||
if (_old[j].pos < _old[i].pos)
|
||
{
|
||
var temp = _old[i];
|
||
_old[i] = _old[j];
|
||
_old[j] = temp;
|
||
}
|
||
}
|
||
}
|
||
|
||
var _new_len = 0;
|
||
_new[_new_len++] = _old[0];
|
||
for (var i = 1; i < _old_c; i++)
|
||
{
|
||
if (_new[_new_len - 1].pos != _old[i].pos)
|
||
_new[_new_len++] = _old[i];
|
||
}
|
||
this.m_arrTabs = null;
|
||
this.m_arrTabs = _new;
|
||
|
||
this.m_dMaxTab = this.m_arrTabs[_new_len - 1].pos;
|
||
}
|
||
|
||
this.CalculateMargins = function()
|
||
{
|
||
if (this.CurrentObjectType == RULER_OBJECT_TYPE_TABLE)
|
||
{
|
||
this.TableMarginLeft = 0;
|
||
this.TableMarginRight = 0;
|
||
|
||
var markup = this.m_oTableMarkup;
|
||
var margin_left = markup.X;
|
||
|
||
var _col = markup.CurCol;
|
||
for (var i = 0; i < _col; i++)
|
||
margin_left += markup.Cols[i];
|
||
|
||
this.TableMarginLeft = margin_left + markup.Margins[_col].Left;
|
||
this.TableMarginRight = margin_left + markup.Cols[_col] - markup.Margins[_col].Right;
|
||
}
|
||
else if (this.CurrentObjectType == RULER_OBJECT_TYPE_COLUMNS)
|
||
{
|
||
this.TableMarginLeft = 0;
|
||
this.TableMarginRight = 0;
|
||
|
||
var markup = this.m_oColumnMarkup;
|
||
|
||
if (markup.EqualWidth)
|
||
{
|
||
var _w = ((markup.R - markup.X) - markup.Space * (markup.Num - 1)) / markup.Num;
|
||
|
||
this.TableMarginLeft = markup.X + (_w + markup.Space) * markup.CurCol;
|
||
this.TableMarginRight = this.TableMarginLeft + _w;
|
||
}
|
||
else
|
||
{
|
||
var margin_left = markup.X;
|
||
var _col = markup.CurCol;
|
||
for (var i = 0; i < _col; i++)
|
||
margin_left += (markup.Cols[i].W + markup.Cols[i].Space);
|
||
|
||
this.TableMarginLeft = margin_left;
|
||
this.TableMarginRight = margin_left + markup.Cols[_col].W;
|
||
|
||
var _x = markup.X;
|
||
|
||
var _len = markup.Cols.length;
|
||
for (var i = 0; i < _len; i++)
|
||
{
|
||
_x += markup.Cols[i].W;
|
||
|
||
if (i != (_len - 1))
|
||
_x += markup.Cols[i].Space;
|
||
}
|
||
|
||
markup.R = _x;
|
||
}
|
||
}
|
||
}
|
||
|
||
this.OnMouseMove = function(left, top, e)
|
||
{
|
||
var word_control = this.m_oWordControl;
|
||
|
||
AscCommon.check_MouseMoveEvent(e);
|
||
|
||
this.SimpleChanges.CheckMove();
|
||
|
||
// теперь определяем позицию относительно самой линейки. Все в миллиметрах
|
||
var hor_ruler = word_control.m_oTopRuler_horRuler;
|
||
var dKoefPxToMM = 100 * g_dKoef_pix_to_mm / word_control.m_nZoomValue;
|
||
|
||
var _x = global_mouseEvent.X - left - word_control.X - word_control.GetMainContentBounds().L * g_dKoef_mm_to_pix;
|
||
if (!word_control.m_oApi.isRtlInterface)
|
||
_x -= 5 * g_dKoef_mm_to_pix;
|
||
|
||
_x *= dKoefPxToMM;
|
||
var _y = (global_mouseEvent.Y - word_control.Y) * g_dKoef_pix_to_mm;
|
||
|
||
var dKoef_mm_to_pix = g_dKoef_mm_to_pix * this.m_dZoom;
|
||
var mm_1_4 = 10 / 4;
|
||
var mm_1_8 = mm_1_4 / 2;
|
||
|
||
var _margin_left = this.m_dMarginLeft;
|
||
var _margin_right = this.m_dMarginRight;
|
||
if (this.CurrentObjectType == RULER_OBJECT_TYPE_TABLE || this.CurrentObjectType == RULER_OBJECT_TYPE_COLUMNS)
|
||
{
|
||
_margin_left = this.TableMarginLeft;
|
||
_margin_right = this.TableMarginRight;
|
||
}
|
||
|
||
var _presentations = false;
|
||
if (word_control.EditorType === "presentations")
|
||
_presentations = true;
|
||
|
||
switch (this.DragType)
|
||
{
|
||
case AscWord.RULER_DRAG_TYPE.none:
|
||
{
|
||
var position = this.CheckMouseType(_x, _y);
|
||
if ((1 == position) || (2 == position) || (8 == position) || (9 == position) || (10 == position))
|
||
word_control.m_oDrawingDocument.SetCursorType("w-resize");
|
||
else
|
||
word_control.m_oDrawingDocument.SetCursorType("default");
|
||
|
||
break;
|
||
}
|
||
case AscWord.RULER_DRAG_TYPE.leftMargin:
|
||
{
|
||
var newVal = RulerCorrectPosition(this, _x, _margin_left);
|
||
|
||
if (newVal < 0)
|
||
newVal = 0;
|
||
|
||
var max = this.m_dMarginRight - 20;
|
||
if (0 < this.m_dIndentRight)
|
||
max = (this.m_dMarginRight - this.m_dIndentRight - 20);
|
||
if (newVal > max)
|
||
newVal = max;
|
||
|
||
var _max_ind = Math.max(this.m_dIndentLeft, this.m_dIndentLeftFirst);
|
||
if ((newVal + _max_ind) > max)
|
||
newVal = max - _max_ind;
|
||
|
||
this.m_dMarginLeft = newVal;
|
||
word_control.UpdateHorRulerBack();
|
||
|
||
var pos = left + this.m_dMarginLeft * dKoef_mm_to_pix;
|
||
word_control.m_oOverlayApi.VertLine(pos);
|
||
|
||
word_control.m_oDrawingDocument.SetCursorType("w-resize");
|
||
break;
|
||
}
|
||
case AscWord.RULER_DRAG_TYPE.rightMargin:
|
||
{
|
||
var newVal = RulerCorrectPosition(this, _x, _margin_left);
|
||
|
||
var min = this.m_dMarginLeft;
|
||
if ((this.m_dMarginLeft + this.m_dIndentLeft) > min)
|
||
min = this.m_dMarginLeft + this.m_dIndentLeft;
|
||
if ((this.m_dMarginLeft + this.m_dIndentLeftFirst) > min)
|
||
min = this.m_dMarginLeft + this.m_dIndentLeftFirst;
|
||
|
||
min += 20;
|
||
if (newVal < min)
|
||
newVal = min;
|
||
if (newVal > this.m_oPage.width_mm)
|
||
newVal = this.m_oPage.width_mm;
|
||
|
||
if ((newVal - this.m_dIndentRight) < min)
|
||
newVal = min + this.m_dIndentRight;
|
||
|
||
this.m_dMarginRight = newVal;
|
||
word_control.UpdateHorRulerBack();
|
||
|
||
var pos = left + this.m_dMarginRight * dKoef_mm_to_pix;
|
||
word_control.m_oOverlayApi.VertLine(pos);
|
||
|
||
word_control.m_oDrawingDocument.SetCursorType("w-resize");
|
||
break;
|
||
}
|
||
case AscWord.RULER_DRAG_TYPE.leftFirstInd:
|
||
{
|
||
let newVal = RulerCorrectPosition(this, _x, this.m_bRtl ? _margin_right : _margin_left);
|
||
|
||
if (this.m_bRtl)
|
||
{
|
||
let max = this.m_oPage.width_mm;
|
||
if (_presentations)
|
||
max = _margin_right;
|
||
else if (this.m_dIndentLeftFirst < this.m_dIndentLeft)
|
||
max = this.m_oPage.width_mm - (this.m_dIndentLeft - this.m_dIndentLeftFirst);
|
||
|
||
if (newVal > max)
|
||
newVal = max;
|
||
|
||
let min = _margin_left;
|
||
if (this.m_dIndentRight > 0)
|
||
min = _margin_left + this.m_dIndentRight;
|
||
|
||
if (this.m_dIndentLeftFirst > this.m_dIndentLeft)
|
||
min += this.m_dIndentLeftFirst - this.m_dIndentLeft;
|
||
|
||
if (newVal < min + 20)
|
||
newVal = Math.min(min + 20, _margin_right - this.m_dIndentLeft_old);
|
||
|
||
let newIndent = _margin_right - newVal;
|
||
this.m_dIndentLeftFirst = (this.m_dIndentLeftFirst - this.m_dIndentLeft) + newIndent;
|
||
this.m_dIndentLeft = newIndent;
|
||
}
|
||
else
|
||
{
|
||
let min = 0;
|
||
|
||
if (_presentations)
|
||
min = _margin_left;
|
||
else if (this.m_dIndentLeftFirst < this.m_dIndentLeft)
|
||
min = this.m_dIndentLeft - this.m_dIndentLeftFirst;
|
||
|
||
if (newVal < min)
|
||
newVal = min;
|
||
|
||
let max = _margin_right;
|
||
if (0 < this.m_dIndentRight)
|
||
max = _margin_right - this.m_dIndentRight;
|
||
|
||
if (this.m_dIndentLeftFirst > this.m_dIndentLeft)
|
||
max = max + (this.m_dIndentLeft - this.m_dIndentLeftFirst);
|
||
|
||
if (newVal > (max - 20))
|
||
newVal = Math.max(max - 20, (this.m_dIndentLeft_old + _margin_left));
|
||
|
||
let newIndent = newVal - _margin_left;
|
||
this.m_dIndentLeftFirst = (this.m_dIndentLeftFirst - this.m_dIndentLeft) + newIndent;
|
||
this.m_dIndentLeft = newIndent;
|
||
}
|
||
let pos = left + newVal * dKoef_mm_to_pix;
|
||
word_control.UpdateHorRulerBack();
|
||
word_control.m_oOverlayApi.VertLine(pos);
|
||
break;
|
||
}
|
||
case AscWord.RULER_DRAG_TYPE.leftInd:
|
||
{
|
||
let newVal = RulerCorrectPosition(this, _x, this.m_bRtl ? _margin_right : _margin_left);
|
||
if (newVal < 0)
|
||
newVal = 0;
|
||
|
||
if (this.m_bRtl)
|
||
{
|
||
if (newVal > (this.m_oPage.width_mm))
|
||
newVal = this.m_oPage.width_mm;
|
||
|
||
let min = Math.max(_margin_left, _margin_left + this.m_dIndentRight) + 20;
|
||
if (_presentations)
|
||
{
|
||
if (newVal > _margin_right)
|
||
newVal = _margin_right;
|
||
}
|
||
|
||
if (newVal < min)
|
||
newVal = Math.min(min, _margin_right - this.m_dIndentLeft_old);
|
||
|
||
this.m_dIndentLeft = _margin_right - newVal;
|
||
}
|
||
else
|
||
{
|
||
let max = _margin_right - 20;
|
||
if (0 < this.m_dIndentRight)
|
||
max -= this.m_dIndentRight;
|
||
|
||
if (_presentations)
|
||
{
|
||
if (newVal < _margin_left)
|
||
newVal = _margin_left;
|
||
}
|
||
|
||
if (newVal > max)
|
||
newVal = Math.max(max, _margin_left + this.m_dIndentLeft_old);
|
||
|
||
this.m_dIndentLeft = newVal - _margin_left;
|
||
}
|
||
let pos = left + newVal * dKoef_mm_to_pix;
|
||
word_control.UpdateHorRulerBack();
|
||
word_control.m_oOverlayApi.VertLine(pos);
|
||
break;
|
||
}
|
||
case AscWord.RULER_DRAG_TYPE.firstInd:
|
||
{
|
||
let newVal = RulerCorrectPosition(this, _x, this.m_bRtl ? _margin_right : _margin_left);
|
||
|
||
if (newVal < 0)
|
||
newVal = 0;
|
||
|
||
if (this.m_bRtl)
|
||
{
|
||
if (newVal > (this.m_oPage.width_mm))
|
||
newVal = this.m_oPage.width_mm;
|
||
|
||
let min = 20 + Math.max(_margin_left, _margin_left + this.m_dIndentRight);
|
||
if (_presentations)
|
||
{
|
||
if (newVal > _margin_right)
|
||
newVal = _margin_right;
|
||
}
|
||
|
||
if (newVal < min)
|
||
newVal = Math.min(min, _margin_right - this.m_dIndentLeftFirst_old);
|
||
|
||
this.m_dIndentLeftFirst = _margin_right - newVal;
|
||
}
|
||
else
|
||
{
|
||
let max = _margin_right - 20;
|
||
if (0 < this.m_dIndentRight)
|
||
max -= this.m_dIndentRight;
|
||
|
||
if (_presentations)
|
||
{
|
||
if (newVal < _margin_left)
|
||
newVal = _margin_left;
|
||
}
|
||
|
||
if (newVal > max)
|
||
newVal = Math.max(max, _margin_left + this.m_dIndentLeftFirst_old);
|
||
|
||
this.m_dIndentLeftFirst = newVal - _margin_left;
|
||
}
|
||
let pos = left + newVal * dKoef_mm_to_pix;
|
||
word_control.UpdateHorRulerBack();
|
||
word_control.m_oOverlayApi.VertLine(pos);
|
||
break;
|
||
}
|
||
case AscWord.RULER_DRAG_TYPE.rightInd:
|
||
{
|
||
let newVal = RulerCorrectPosition(this, _x, this.m_bRtl ? _margin_right : _margin_left);
|
||
|
||
if (newVal > (this.m_oPage.width_mm))
|
||
newVal = this.m_oPage.width_mm;
|
||
if (newVal < 0)
|
||
newVal = 0;
|
||
|
||
if (this.m_bRtl)
|
||
{
|
||
let max = -20 + Math.min(_margin_right, _margin_right - this.m_dIndentLeft, _margin_right - this.m_dIndentLeftFirst);
|
||
if (newVal > max)
|
||
newVal = Math.max(max, _margin_left + this.m_dIndentRight_old);
|
||
|
||
if (_presentations && newVal < _margin_left)
|
||
newVal = _margin_left;
|
||
|
||
this.m_dIndentRight = newVal - _margin_left;
|
||
}
|
||
else
|
||
{
|
||
let min = _margin_left;
|
||
if ((_margin_left + this.m_dIndentLeft) > min)
|
||
min = _margin_left + this.m_dIndentLeft;
|
||
if ((_margin_left + this.m_dIndentLeftFirst) > min)
|
||
min = _margin_left + this.m_dIndentLeftFirst;
|
||
|
||
min += 20;
|
||
|
||
if (newVal < min)
|
||
newVal = Math.min(min, _margin_right - this.m_dIndentRight_old);
|
||
|
||
if (_presentations)
|
||
{
|
||
if (newVal > _margin_right)
|
||
newVal = _margin_right;
|
||
}
|
||
this.m_dIndentRight = _margin_right - newVal;
|
||
}
|
||
let pos = left + newVal * dKoef_mm_to_pix;
|
||
word_control.UpdateHorRulerBack();
|
||
word_control.m_oOverlayApi.VertLine(pos);
|
||
break;
|
||
}
|
||
case AscWord.RULER_DRAG_TYPE.tab:
|
||
{
|
||
let newVal = RulerCorrectPosition(this, _x, this.m_bRtl ? _margin_right : _margin_left);
|
||
|
||
this.m_dCurrentTabNewPosition = this.m_bRtl ? _margin_right - newVal : newVal - _margin_left;
|
||
if (_y <= 3 || _y > 5.6)
|
||
{
|
||
this.IsDrawingCurTab = false;
|
||
word_control.OnUpdateOverlay();
|
||
}
|
||
else
|
||
{
|
||
this.IsDrawingCurTab = true;
|
||
let offset = this.m_bRtl ? _margin_right - this.m_dCurrentTabNewPosition : _margin_left + this.m_dCurrentTabNewPosition;
|
||
let pos = left + offset * dKoef_mm_to_pix;
|
||
word_control.m_oOverlayApi.VertLine(pos);
|
||
}
|
||
word_control.UpdateHorRulerBack();
|
||
break;
|
||
}
|
||
case AscWord.RULER_DRAG_TYPE.table:
|
||
{
|
||
var newVal = RulerCorrectPosition(this, _x, this.TableMarginLeftTrackStart);
|
||
|
||
// сначала определим граничные условия
|
||
var _min = 0;
|
||
var _max = this.m_oPage.width_mm;
|
||
|
||
var markup = this.m_oTableMarkup;
|
||
var _left = 0;
|
||
|
||
if (this.DragTablePos > 0)
|
||
{
|
||
var start = markup.X;
|
||
for (var i = 1; i < this.DragTablePos; i++)
|
||
start += markup.Cols[i - 1];
|
||
_left = start;
|
||
|
||
start += markup.Margins[this.DragTablePos - 1].Left;
|
||
start += markup.Margins[this.DragTablePos - 1].Right;
|
||
|
||
_min = start;
|
||
}
|
||
|
||
if (newVal < _min)
|
||
newVal = _min;
|
||
if (newVal > _max)
|
||
newVal = _max;
|
||
|
||
if (0 == this.DragTablePos)
|
||
{
|
||
markup.X = newVal;
|
||
}
|
||
else
|
||
{
|
||
markup.Cols[this.DragTablePos - 1] = newVal - _left;
|
||
}
|
||
|
||
this.CalculateMargins();
|
||
word_control.UpdateHorRulerBack();
|
||
|
||
var pos = left + newVal * dKoef_mm_to_pix;
|
||
word_control.m_oOverlayApi.VertLine(pos);
|
||
break;
|
||
}
|
||
case AscWord.RULER_DRAG_TYPE.columnSize:
|
||
{
|
||
var newVal = RulerCorrectPosition(this, _x, this.TableMarginLeftTrackStart);
|
||
|
||
// сначала определим граничные условия
|
||
var markup = this.m_oColumnMarkup;
|
||
|
||
if (markup.EqualWidth)
|
||
{
|
||
if (0 == this.DragTablePos)
|
||
{
|
||
var _min = 0;
|
||
var _max = markup.R - markup.Num * 10 - (markup.Num - 1) * markup.Space;
|
||
|
||
if (newVal < _min)
|
||
newVal = _min;
|
||
if (newVal > _max)
|
||
newVal = _max;
|
||
|
||
markup.X = newVal;
|
||
}
|
||
else if ((2 * markup.Num - 1) == this.DragTablePos)
|
||
{
|
||
var _min = markup.X + markup.Num * 10 + (markup.Num - 1) * markup.Space;
|
||
var _max = this.m_oPage.width_mm;
|
||
|
||
if (newVal < _min)
|
||
newVal = _min;
|
||
if (newVal > _max)
|
||
newVal = _max;
|
||
|
||
markup.R = newVal;
|
||
}
|
||
else
|
||
{
|
||
var bIsLeftSpace = ((this.DragTablePos & 1) == 1);
|
||
var _spaceMax = (markup.R - markup.X - 10 * markup.Num) / (markup.Num - 1);
|
||
|
||
var _col = ((this.DragTablePos + 1) >> 1);
|
||
var _center = _col * (markup.R - markup.X + markup.Space) / markup.Num - markup.Space / 2;
|
||
|
||
newVal -= markup.X;
|
||
|
||
if (bIsLeftSpace)
|
||
{
|
||
var _min = _center - _spaceMax / 2;
|
||
var _max = _center;
|
||
|
||
if (newVal < _min)
|
||
newVal = _min;
|
||
if (newVal > _max)
|
||
newVal = _max;
|
||
|
||
markup.Space = Math.abs((newVal - _center) * 2);
|
||
}
|
||
else
|
||
{
|
||
var _min = _center;
|
||
var _max = _center + _spaceMax / 2;
|
||
|
||
if (newVal < _min)
|
||
newVal = _min;
|
||
if (newVal > _max)
|
||
newVal = _max;
|
||
|
||
markup.Space = Math.abs((newVal - _center) * 2);
|
||
}
|
||
|
||
newVal += markup.X;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
var bIsLeftSpace = ((this.DragTablePos & 1) == 1);
|
||
var nSpaceNumber = ((this.DragTablePos + 1) >> 1);
|
||
var _min = 0;
|
||
var _max = this.m_oPage.width_mm;
|
||
|
||
if (0 == nSpaceNumber)
|
||
{
|
||
_max = markup.X + markup.Cols[0].W - 10;
|
||
|
||
if (newVal < _min)
|
||
newVal = _min;
|
||
if (newVal > _max)
|
||
newVal = _max;
|
||
|
||
var _delta = markup.X - newVal;
|
||
markup.X -= _delta;
|
||
markup.Cols[0].W += _delta;
|
||
}
|
||
else
|
||
{
|
||
var _offsetX = markup.X;
|
||
for (var i = 0; i < nSpaceNumber; i++)
|
||
{
|
||
_min = _offsetX;
|
||
|
||
_offsetX += markup.Cols[i].W;
|
||
if (!bIsLeftSpace || i != (nSpaceNumber - 1))
|
||
{
|
||
_min = _offsetX;
|
||
_offsetX += markup.Cols[i].Space;
|
||
}
|
||
}
|
||
|
||
if (bIsLeftSpace)
|
||
{
|
||
if (nSpaceNumber != markup.Num)
|
||
_max = _min + markup.Cols[nSpaceNumber - 1].W + markup.Cols[nSpaceNumber - 1].Space;
|
||
|
||
var _natMin = _min + 10;
|
||
|
||
if (newVal < _natMin)
|
||
newVal = _natMin;
|
||
if (newVal > _max)
|
||
newVal = _max;
|
||
|
||
markup.Cols[nSpaceNumber - 1].W = newVal - _min;
|
||
markup.Cols[nSpaceNumber - 1].Space = _max - newVal;
|
||
|
||
if (nSpaceNumber == markup.Num)
|
||
{
|
||
markup.R = newVal;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
_max = _min + markup.Cols[nSpaceNumber - 1].Space + markup.Cols[nSpaceNumber].W;
|
||
var _natMax = _max - 10;
|
||
|
||
if (newVal < _min)
|
||
newVal = _min;
|
||
if (newVal > _natMax)
|
||
newVal = _natMax;
|
||
|
||
markup.Cols[nSpaceNumber - 1].Space = newVal - _min;
|
||
markup.Cols[nSpaceNumber].W = _max - newVal;
|
||
}
|
||
}
|
||
}
|
||
|
||
this.CalculateMargins();
|
||
word_control.UpdateHorRulerBack();
|
||
|
||
var pos = left + newVal * dKoef_mm_to_pix;
|
||
word_control.m_oOverlayApi.VertLine(pos);
|
||
break;
|
||
}
|
||
case AscWord.RULER_DRAG_TYPE.columnPos:
|
||
{
|
||
var newVal = RulerCorrectPosition(this, _x, this.TableMarginLeftTrackStart);
|
||
|
||
// сначала определим граничные условия
|
||
var markup = this.m_oColumnMarkup;
|
||
|
||
var _min = markup.X;
|
||
for (var i = 0; i < this.DragTablePos; i++)
|
||
{
|
||
_min += (markup.Cols[i].W + markup.Cols[i].Space);
|
||
}
|
||
|
||
var _max = _min + markup.Cols[this.DragTablePos].W + markup.Cols[this.DragTablePos].Space;
|
||
_max += markup.Cols[this.DragTablePos + 1].W;
|
||
|
||
var _space = markup.Cols[this.DragTablePos].Space;
|
||
|
||
var _natMin = _min + _space / 2 + 10;
|
||
var _natMax = _max - _space / 2 - 10;
|
||
|
||
if (newVal < _natMin)
|
||
newVal = _natMin;
|
||
if (newVal > _natMax)
|
||
newVal = _natMax;
|
||
|
||
var _delta = newVal - (_min + markup.Cols[this.DragTablePos].W + markup.Cols[this.DragTablePos].Space / 2);
|
||
markup.Cols[this.DragTablePos].W += _delta;
|
||
markup.Cols[this.DragTablePos + 1].W -= _delta;
|
||
|
||
this.CalculateMargins();
|
||
word_control.UpdateHorRulerBack();
|
||
|
||
var pos = left + newVal * dKoef_mm_to_pix;
|
||
word_control.m_oOverlayApi.VertLine(pos);
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
|
||
this.CheckMouseType = function(x, y, isMouseDown, isNegative)
|
||
{
|
||
// проверяем где находимся
|
||
|
||
var _top = 1.8;
|
||
var _bottom = 5.2;
|
||
|
||
var _margin_left = this.m_dMarginLeft;
|
||
var _margin_right = this.m_dMarginRight;
|
||
if (this.CurrentObjectType == RULER_OBJECT_TYPE_TABLE || this.CurrentObjectType == RULER_OBJECT_TYPE_COLUMNS)
|
||
{
|
||
_margin_left = this.TableMarginLeft;
|
||
_margin_right = this.TableMarginRight;
|
||
}
|
||
|
||
var posL = _margin_left;
|
||
if ((_margin_left + this.m_dIndentLeft) > posL)
|
||
posL = _margin_left + this.m_dIndentLeft;
|
||
if ((_margin_left + this.m_dIndentLeftFirst) > posL)
|
||
posL = _margin_left + this.m_dIndentLeftFirst;
|
||
|
||
var posR = _margin_right;
|
||
if (this.m_dIndentRight > 0)
|
||
posR = _margin_right - this.m_dIndentRight;
|
||
|
||
if (this.IsCanMoveAnyMarkers && posL < posR)
|
||
{
|
||
// tabs
|
||
if (y >= 3 && y <= _bottom)
|
||
{
|
||
for (let i = 0, tabCount = this.m_arrTabs.length; i < tabCount; ++i)
|
||
{
|
||
var _pos = this.m_bRtl ? _margin_right - this.m_arrTabs[i].pos : _margin_left + this.m_arrTabs[i].pos;
|
||
if ((x >= (_pos - 1)) && (x <= (_pos + 1)))
|
||
{
|
||
if (true === isMouseDown)
|
||
this.m_lCurrentTab = i;
|
||
return AscWord.RULER_DRAG_TYPE.tab;
|
||
}
|
||
}
|
||
}
|
||
|
||
// left indent
|
||
var dCenterX = this.m_bRtl ? _margin_right - this.m_dIndentLeft : _margin_left + this.m_dIndentLeft;
|
||
|
||
var var1 = dCenterX - 1;
|
||
var var2 = 1.4;
|
||
var var3 = 1.5;
|
||
var var4 = dCenterX + 1;
|
||
|
||
if ((x >= var1) && (x <= var4))
|
||
{
|
||
if ((y >= _bottom) && (y < (_bottom + var2)))
|
||
return AscWord.RULER_DRAG_TYPE.leftFirstInd;
|
||
else if ((y > (_bottom - var3)) && (y < _bottom))
|
||
return AscWord.RULER_DRAG_TYPE.leftInd;
|
||
}
|
||
|
||
// right indent
|
||
dCenterX = this.m_bRtl ? _margin_left + this.m_dIndentRight : _margin_right - this.m_dIndentRight;
|
||
|
||
var1 = dCenterX - 1;
|
||
var4 = dCenterX + 1;
|
||
|
||
if ((x >= var1) && (x <= var4))
|
||
{
|
||
if ((y > (_bottom - var3)) && (y < _bottom))
|
||
return AscWord.RULER_DRAG_TYPE.rightInd;
|
||
}
|
||
|
||
// first line indent
|
||
dCenterX = this.m_bRtl ? _margin_right - this.m_dIndentLeftFirst : _margin_left + this.m_dIndentLeftFirst;
|
||
|
||
var1 = dCenterX - 1;
|
||
var4 = dCenterX + 1;
|
||
|
||
if ((x >= var1) && (x <= var4))
|
||
{
|
||
if ((y > (_top - 1)) && (y < (_top + 1.68)))
|
||
{
|
||
if (0 == this.m_dIndentLeftFirst && 0 == this.m_dIndentLeft && this.CurrentObjectType == RULER_OBJECT_TYPE_PARAGRAPH && this.IsCanMoveMargins)
|
||
{
|
||
if (y > (_top + 1))
|
||
return this.m_bRtl ? AscWord.RULER_DRAG_TYPE.rightMargin : AscWord.RULER_DRAG_TYPE.leftMargin;
|
||
}
|
||
return AscWord.RULER_DRAG_TYPE.firstInd;
|
||
}
|
||
}
|
||
}
|
||
|
||
var isColumnsInside = false;
|
||
var isColumnsInside2 = false;
|
||
var isTableInside = false;
|
||
|
||
if (this.CurrentObjectType == RULER_OBJECT_TYPE_PARAGRAPH && this.IsCanMoveMargins)
|
||
{
|
||
if (y >= _top && y <= _bottom)
|
||
{
|
||
// внутри линейки
|
||
if (Math.abs(x - this.m_dMarginLeft) < 1)
|
||
{
|
||
return AscWord.RULER_DRAG_TYPE.leftMargin;
|
||
}
|
||
else if (Math.abs(x - this.m_dMarginRight) < 1)
|
||
{
|
||
return AscWord.RULER_DRAG_TYPE.rightMargin;
|
||
}
|
||
|
||
if (isNegative)
|
||
{
|
||
if (x < this.m_dMarginLeft)
|
||
return -AscWord.RULER_DRAG_TYPE.leftMargin;
|
||
if (x > this.m_dMarginRight)
|
||
return -AscWord.RULER_DRAG_TYPE.rightMargin;
|
||
}
|
||
}
|
||
}
|
||
else if (this.CurrentObjectType == RULER_OBJECT_TYPE_TABLE)
|
||
{
|
||
var nTI_x = 0;
|
||
var nTI_r = 0;
|
||
if (y >= _top && y <= _bottom)
|
||
{
|
||
var markup = this.m_oTableMarkup;
|
||
var pos = markup.X;
|
||
var _count = markup.Cols.length;
|
||
for (var i = 0; i <= _count; i++)
|
||
{
|
||
if (Math.abs(x - pos) < 1)
|
||
{
|
||
this.DragTablePos = i;
|
||
return AscWord.RULER_DRAG_TYPE.table;
|
||
}
|
||
if (i == _count)
|
||
{
|
||
nTI_r = pos;
|
||
break;
|
||
}
|
||
if (i == 0)
|
||
{
|
||
nTI_x = pos;
|
||
}
|
||
|
||
pos += markup.Cols[i];
|
||
}
|
||
}
|
||
|
||
if (x > nTI_x && x < nTI_r)
|
||
isTableInside = true;
|
||
}
|
||
else if (this.CurrentObjectType == RULER_OBJECT_TYPE_COLUMNS)
|
||
{
|
||
if (y >= _top && y <= _bottom)
|
||
{
|
||
var markup = this.m_oColumnMarkup;
|
||
|
||
var nCI_x = markup.X;
|
||
var nCI_r = nCI_x;
|
||
|
||
if (markup.EqualWidth)
|
||
{
|
||
var _w = ((markup.R - markup.X) - markup.Space * (markup.Num - 1)) / markup.Num;
|
||
var _x = markup.X;
|
||
|
||
var _index = 0;
|
||
for (var i = 0; i < markup.Num; i++)
|
||
{
|
||
if (0 == i)
|
||
{
|
||
if (Math.abs(x - _x) < 1)
|
||
{
|
||
this.DragTablePos = _index;
|
||
return AscWord.RULER_DRAG_TYPE.columnSize;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
if (x < _x + 1 && x > _x - 2)
|
||
{
|
||
this.DragTablePos = _index;
|
||
return AscWord.RULER_DRAG_TYPE.columnSize;
|
||
}
|
||
}
|
||
|
||
++_index;
|
||
_x += _w;
|
||
nCI_r = _x;
|
||
|
||
if (i == markup.Num - 1)
|
||
{
|
||
if (Math.abs(x - _x) < 1)
|
||
{
|
||
this.DragTablePos = _index;
|
||
return AscWord.RULER_DRAG_TYPE.columnSize;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
if (x < _x + 2 && x > _x - 1)
|
||
{
|
||
this.DragTablePos = _index;
|
||
return AscWord.RULER_DRAG_TYPE.columnSize;
|
||
}
|
||
|
||
if (x > _x && x < (_x + markup.Space))
|
||
isColumnsInside = true;
|
||
}
|
||
|
||
++_index;
|
||
_x += markup.Space;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
var _x = markup.X;
|
||
|
||
var _index = 0;
|
||
for (var i = 0; i < markup.Cols.length; i++)
|
||
{
|
||
if (0 == i)
|
||
{
|
||
if (Math.abs(x - _x) < 1)
|
||
{
|
||
this.DragTablePos = _index;
|
||
return AscWord.RULER_DRAG_TYPE.columnSize;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
if (x < _x + 1 && x > _x - 2)
|
||
{
|
||
this.DragTablePos = _index;
|
||
return AscWord.RULER_DRAG_TYPE.columnSize;
|
||
}
|
||
}
|
||
|
||
++_index;
|
||
_x += markup.Cols[i].W;
|
||
nCI_r = _x;
|
||
|
||
if (i == markup.Num - 1)
|
||
{
|
||
if (Math.abs(x - _x) < 1)
|
||
{
|
||
this.DragTablePos = _index;
|
||
return AscWord.RULER_DRAG_TYPE.columnSize;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
if (x < _x + 2 && x > _x - 1)
|
||
{
|
||
this.DragTablePos = _index;
|
||
return AscWord.RULER_DRAG_TYPE.columnSize;
|
||
}
|
||
}
|
||
|
||
if (i != markup.Cols.length - 1)
|
||
{
|
||
if (Math.abs(x - (_x + markup.Cols[i].Space / 2)) < 1)
|
||
{
|
||
this.DragTablePos = i;
|
||
return AscWord.RULER_DRAG_TYPE.columnPos;
|
||
}
|
||
|
||
if (x > _x && x < (_x + markup.Cols[i].Space))
|
||
isColumnsInside = true;
|
||
}
|
||
|
||
++_index;
|
||
_x += markup.Cols[i].Space;
|
||
}
|
||
}
|
||
|
||
if (x > nCI_x && x < nCI_r)
|
||
isColumnsInside2 = true;
|
||
}
|
||
}
|
||
|
||
if (isNegative)
|
||
{
|
||
if (isColumnsInside)
|
||
return -AscWord.RULER_DRAG_TYPE.columnSize;
|
||
|
||
// если вникуда - то ВСЕГДА margins
|
||
return -AscWord.RULER_DRAG_TYPE.leftMargin;
|
||
|
||
if (isColumnsInside2)
|
||
return 0;
|
||
if ((y >= _top && y <= _bottom) && !isTableInside)
|
||
{
|
||
if (x < _margin_left)
|
||
return -AscWord.RULER_DRAG_TYPE.leftMargin;
|
||
if (x > _margin_right)
|
||
return -AscWord.RULER_DRAG_TYPE.rightMargin;
|
||
}
|
||
}
|
||
|
||
return AscWord.RULER_DRAG_TYPE.none;
|
||
}
|
||
|
||
this.OnMouseDown = function(left, top, e)
|
||
{
|
||
var word_control = this.m_oWordControl;
|
||
|
||
if (true === word_control.m_oApi.isStartAddShape)
|
||
{
|
||
word_control.m_oApi.sync_EndAddShape();
|
||
word_control.m_oApi.sync_StartAddShapeCallback(false);
|
||
}
|
||
if (true === word_control.m_oApi.isInkDrawerOn())
|
||
{
|
||
word_control.m_oApi.stopInkDrawer();
|
||
}
|
||
|
||
AscCommon.check_MouseDownEvent(e, true);
|
||
global_mouseEvent.LockMouse();
|
||
|
||
this.SimpleChanges.Reinit();
|
||
|
||
var dKoefPxToMM = 100 * g_dKoef_pix_to_mm / word_control.m_nZoomValue;
|
||
var dKoef_mm_to_pix = g_dKoef_mm_to_pix * this.m_dZoom;
|
||
|
||
var _x = global_mouseEvent.X - left - word_control.X - word_control.GetMainContentBounds().L * g_dKoef_mm_to_pix;
|
||
if (!word_control.m_oApi.isRtlInterface)
|
||
_x -= 5 * g_dKoef_mm_to_pix;
|
||
|
||
_x *= dKoefPxToMM;
|
||
var _y = (global_mouseEvent.Y - word_control.Y) * g_dKoef_pix_to_mm;
|
||
|
||
this.DragType = this.CheckMouseType(_x, _y, true, true);
|
||
if (this.DragType < 0)
|
||
{
|
||
this.DragTypeMouseDown = -this.DragType;
|
||
this.DragType = AscWord.RULER_DRAG_TYPE.none;
|
||
}
|
||
else
|
||
{
|
||
this.DragTypeMouseDown = this.DragType;
|
||
}
|
||
|
||
if (global_mouseEvent.ClickCount > 1)
|
||
{
|
||
var eventType = "";
|
||
switch (this.DragTypeMouseDown)
|
||
{
|
||
case AscWord.RULER_DRAG_TYPE.leftMargin:
|
||
case AscWord.RULER_DRAG_TYPE.rightMargin:
|
||
{
|
||
eventType = "margins";
|
||
break;
|
||
}
|
||
case AscWord.RULER_DRAG_TYPE.leftFirstInd:
|
||
case AscWord.RULER_DRAG_TYPE.leftInd:
|
||
case AscWord.RULER_DRAG_TYPE.firstInd:
|
||
case AscWord.RULER_DRAG_TYPE.rightInd:
|
||
{
|
||
eventType = "indents";
|
||
break;
|
||
}
|
||
case AscWord.RULER_DRAG_TYPE.tab:
|
||
{
|
||
eventType = "tabs";
|
||
break;
|
||
}
|
||
case AscWord.RULER_DRAG_TYPE.table:
|
||
{
|
||
eventType = "tables";
|
||
break;
|
||
}
|
||
case AscWord.RULER_DRAG_TYPE.columnSize:
|
||
case AscWord.RULER_DRAG_TYPE.columnPos:
|
||
{
|
||
eventType = "columns";
|
||
break;
|
||
}
|
||
}
|
||
|
||
if (eventType != "")
|
||
{
|
||
word_control.m_oApi.sendEvent("asc_onRulerDblClick", eventType);
|
||
this.DragType = AscWord.RULER_DRAG_TYPE.none;
|
||
this.OnMouseUp(left, top, e);
|
||
return;
|
||
}
|
||
}
|
||
|
||
var _margin_left = this.m_dMarginLeft;
|
||
var _margin_right = this.m_dMarginRight;
|
||
if (this.CurrentObjectType == RULER_OBJECT_TYPE_TABLE || this.CurrentObjectType == RULER_OBJECT_TYPE_COLUMNS)
|
||
{
|
||
_margin_left = this.TableMarginLeft;
|
||
_margin_right = this.TableMarginRight;
|
||
}
|
||
|
||
this.m_bIsMouseDown = true;
|
||
|
||
switch (this.DragType)
|
||
{
|
||
case AscWord.RULER_DRAG_TYPE.leftMargin:
|
||
{
|
||
var pos = left + _margin_left * dKoef_mm_to_pix;
|
||
word_control.m_oOverlayApi.VertLine(pos);
|
||
break;
|
||
}
|
||
case AscWord.RULER_DRAG_TYPE.rightMargin:
|
||
{
|
||
var pos = left + _margin_right * dKoef_mm_to_pix;
|
||
word_control.m_oOverlayApi.VertLine(pos);
|
||
break;
|
||
}
|
||
case AscWord.RULER_DRAG_TYPE.leftFirstInd:
|
||
{
|
||
let offset = this.m_bRtl ? (_margin_right - this.m_dIndentLeft) : (_margin_left + this.m_dIndentLeft);
|
||
let pos = left + offset * dKoef_mm_to_pix;
|
||
word_control.m_oOverlayApi.VertLine(pos);
|
||
|
||
this.m_dIndentLeft_old = this.m_dIndentLeft;
|
||
this.m_dIndentLeftFirst_old = this.m_dIndentLeftFirst;
|
||
break;
|
||
}
|
||
case AscWord.RULER_DRAG_TYPE.leftInd:
|
||
{
|
||
let offset = this.m_bRtl ? (_margin_right - this.m_dIndentLeft) : (_margin_left + this.m_dIndentLeft);
|
||
let pos = left + offset * dKoef_mm_to_pix;
|
||
word_control.m_oOverlayApi.VertLine(pos);
|
||
|
||
this.m_dIndentLeft_old = this.m_dIndentLeft;
|
||
break;
|
||
}
|
||
case AscWord.RULER_DRAG_TYPE.firstInd:
|
||
{
|
||
let offset = this.m_bRtl ? (_margin_right - this.m_dIndentLeftFirst) : (_margin_left + this.m_dIndentLeftFirst);
|
||
let pos = left + offset * dKoef_mm_to_pix;
|
||
word_control.m_oOverlayApi.VertLine(pos);
|
||
|
||
this.m_dIndentLeftFirst_old = this.m_dIndentLeftFirst;
|
||
break;
|
||
}
|
||
case AscWord.RULER_DRAG_TYPE.rightInd:
|
||
{
|
||
let offset = this.m_bRtl ? (_margin_left + this.m_dIndentRight) : (_margin_right - this.m_dIndentRight);
|
||
let pos = left + offset * dKoef_mm_to_pix;
|
||
word_control.m_oOverlayApi.VertLine(pos);
|
||
|
||
this.m_dIndentRight_old = this.m_dIndentRight;
|
||
break;
|
||
}
|
||
case AscWord.RULER_DRAG_TYPE.tab:
|
||
{
|
||
let offset = this.m_bRtl ? (_margin_right - this.m_arrTabs[this.m_lCurrentTab].pos) : (_margin_left + this.m_arrTabs[this.m_lCurrentTab].pos);
|
||
let pos = left + offset * dKoef_mm_to_pix;
|
||
word_control.m_oOverlayApi.VertLine(pos);
|
||
this.m_dCurrentTabNewPosition = this.m_arrTabs[this.m_lCurrentTab].pos;
|
||
break;
|
||
}
|
||
case AscWord.RULER_DRAG_TYPE.table:
|
||
{
|
||
var markup = this.m_oTableMarkup;
|
||
var pos = markup.X;
|
||
var _count = markup.Cols.length;
|
||
for (var i = 0; i < this.DragTablePos; i++)
|
||
{
|
||
pos += markup.Cols[i];
|
||
}
|
||
pos = left + pos * dKoef_mm_to_pix;
|
||
word_control.m_oOverlayApi.VertLine(pos);
|
||
|
||
this.TableMarginLeftTrackStart = this.TableMarginLeft;
|
||
break;
|
||
}
|
||
case AscWord.RULER_DRAG_TYPE.columnSize:
|
||
{
|
||
var markup = this.m_oColumnMarkup;
|
||
var pos = 0;
|
||
if (markup.EqualWidth)
|
||
{
|
||
var _w = ((markup.R - markup.X) - markup.Space * (markup.Num - 1)) / markup.Num;
|
||
var _x = markup.X + (this.DragTablePos >> 1) * (_w + markup.Space);
|
||
if (this.DragTablePos & 1 == 1)
|
||
_x += _w;
|
||
|
||
pos = _x;
|
||
}
|
||
else
|
||
{
|
||
var _x = markup.X;
|
||
|
||
var _index = 0;
|
||
for (var i = 0; i < markup.Cols.length && _index < this.DragTablePos; i++)
|
||
{
|
||
if (_index == this.DragTablePos)
|
||
break;
|
||
|
||
++_index;
|
||
_x += markup.Cols[i].W;
|
||
|
||
if (_index == this.DragTablePos)
|
||
break;
|
||
|
||
++_index;
|
||
_x += markup.Cols[i].Space;
|
||
}
|
||
|
||
pos = _x;
|
||
}
|
||
|
||
pos = left + pos * dKoef_mm_to_pix;
|
||
word_control.m_oOverlayApi.VertLine(pos);
|
||
|
||
this.TableMarginLeftTrackStart = markup.X;
|
||
break;
|
||
}
|
||
case AscWord.RULER_DRAG_TYPE.columnPos:
|
||
{
|
||
var markup = this.m_oColumnMarkup;
|
||
var pos = markup.X;
|
||
|
||
var _index = 0;
|
||
for (var i = 0; i < markup.Cols.length && i < this.DragTablePos; i++)
|
||
{
|
||
if (_index == this.DragTablePos)
|
||
break;
|
||
|
||
pos += markup.Cols[i].W;
|
||
pos += markup.Cols[i].Space;
|
||
}
|
||
|
||
if (this.DragTablePos < markup.Cols.length)
|
||
{
|
||
pos += markup.Cols[this.DragTablePos].W;
|
||
pos += markup.Cols[this.DragTablePos].Space / 2;
|
||
}
|
||
|
||
pos = left + pos * dKoef_mm_to_pix;
|
||
word_control.m_oOverlayApi.VertLine(pos);
|
||
this.TableMarginLeftTrackStart = markup.X;
|
||
break;
|
||
}
|
||
}
|
||
|
||
if (AscWord.RULER_DRAG_TYPE.none === this.DragType)
|
||
{
|
||
let posT = 3;
|
||
let posB = 5.2;
|
||
let posL = this.m_bRtl ? _margin_left + this.m_dIndentRight : _margin_left + this.m_dIndentLeft;
|
||
let posR = this.m_bRtl ? _margin_right - this.m_dIndentRight : _margin_right - this.m_dIndentLeft;
|
||
if (posT <= _y && _y <= posB && posL <= _x && _x <= posR)
|
||
{
|
||
let newVal = RulerCorrectPosition(this, _x, this.m_bRtl ? _margin_right : _margin_left);
|
||
let tabPos = this.m_bRtl ? _margin_right - newVal : newVal - _margin_left;
|
||
let tabType = word_control.m_nTabsType;
|
||
if (this.m_bRtl)
|
||
{
|
||
if (tab_Left === tabType)
|
||
tabType = tab_Right;
|
||
else if (tab_Right === tabType)
|
||
tabType = tab_Left;
|
||
}
|
||
this.m_arrTabs[this.m_arrTabs.length] = new CTab(tabPos, tabType);
|
||
word_control.UpdateHorRuler();
|
||
|
||
this.m_lCurrentTab = this.m_arrTabs.length - 1;
|
||
|
||
this.DragType = AscWord.RULER_DRAG_TYPE.tab;
|
||
this.m_dCurrentTabNewPosition = tabPos;
|
||
|
||
let pos = left + newVal * dKoef_mm_to_pix;
|
||
word_control.m_oOverlayApi.VertLine(pos);
|
||
}
|
||
}
|
||
|
||
word_control.m_oDrawingDocument.LockCursorTypeCur();
|
||
}
|
||
this.OnMouseUp = function(left, top, e)
|
||
{
|
||
var word_control = this.m_oWordControl;
|
||
this.m_oWordControl.OnUpdateOverlay();
|
||
var lockedElement = AscCommon.check_MouseUpEvent(e);
|
||
|
||
this.m_dIndentLeft_old = -10000;
|
||
this.m_dIndentLeftFirst_old = -10000;
|
||
this.m_dIndentRight_old = -10000;
|
||
|
||
if (AscWord.RULER_DRAG_TYPE.tab !== this.DragType)
|
||
{
|
||
word_control.UpdateHorRuler();
|
||
//word_control.m_oOverlayApi.UnShow();
|
||
}
|
||
|
||
var _margin_left = this.m_dMarginLeft;
|
||
var _margin_right = this.m_dMarginRight;
|
||
if (this.CurrentObjectType == RULER_OBJECT_TYPE_TABLE || this.CurrentObjectType == RULER_OBJECT_TYPE_COLUMNS)
|
||
{
|
||
_margin_left = this.TableMarginLeft;
|
||
_margin_right = this.TableMarginRight;
|
||
}
|
||
|
||
switch (this.DragType)
|
||
{
|
||
case AscWord.RULER_DRAG_TYPE.leftMargin:
|
||
case AscWord.RULER_DRAG_TYPE.rightMargin:
|
||
{
|
||
if (!this.SimpleChanges.IsSimple)
|
||
this.SetMarginProperties();
|
||
break;
|
||
}
|
||
case AscWord.RULER_DRAG_TYPE.leftFirstInd:
|
||
case AscWord.RULER_DRAG_TYPE.leftInd:
|
||
case AscWord.RULER_DRAG_TYPE.firstInd:
|
||
case AscWord.RULER_DRAG_TYPE.rightInd:
|
||
{
|
||
if (!this.SimpleChanges.IsSimple)
|
||
this.SetPrProperties();
|
||
else
|
||
word_control.OnUpdateOverlay();
|
||
break;
|
||
}
|
||
case AscWord.RULER_DRAG_TYPE.tab:
|
||
{
|
||
// смотрим, сохраняем ли таб
|
||
var _y = (global_mouseEvent.Y - word_control.Y) * g_dKoef_pix_to_mm;
|
||
if (_y <= 3 || _y > 5.6 || this.m_dCurrentTabNewPosition < this.m_dIndentLeft || this.m_dCurrentTabNewPosition > _margin_right - _margin_left - this.m_dIndentRight)
|
||
{
|
||
if (-1 !== this.m_lCurrentTab)
|
||
this.m_arrTabs.splice(this.m_lCurrentTab, 1);
|
||
}
|
||
else
|
||
{
|
||
if (this.m_lCurrentTab < this.m_arrTabs.length)
|
||
this.m_arrTabs[this.m_lCurrentTab].pos = this.m_dCurrentTabNewPosition;
|
||
}
|
||
|
||
this.m_lCurrentTab = -1;
|
||
this.CorrectTabs();
|
||
this.m_oWordControl.UpdateHorRuler();
|
||
this.SetTabsProperties();
|
||
break;
|
||
}
|
||
case AscWord.RULER_DRAG_TYPE.table:
|
||
{
|
||
if (!this.SimpleChanges.IsSimple)
|
||
this.SetTableProperties();
|
||
this.DragTablePos = -1;
|
||
break;
|
||
}
|
||
case AscWord.RULER_DRAG_TYPE.columnSize:
|
||
case AscWord.RULER_DRAG_TYPE.columnPos:
|
||
{
|
||
if (!this.SimpleChanges.IsSimple)
|
||
this.SetColumnsProperties();
|
||
this.DragTablePos = -1;
|
||
break;
|
||
}
|
||
}
|
||
|
||
if (AscWord.RULER_DRAG_TYPE.tab === this.DragType)
|
||
{
|
||
word_control.UpdateHorRuler();
|
||
//word_control.m_oOverlayApi.UnShow();
|
||
}
|
||
|
||
this.IsDrawingCurTab = true;
|
||
this.DragType = 0;
|
||
this.m_bIsMouseDown = false;
|
||
|
||
this.m_oWordControl.m_oDrawingDocument.UnlockCursorType();
|
||
this.SimpleChanges.Clear();
|
||
}
|
||
|
||
this.OnMouseUpExternal = function()
|
||
{
|
||
var word_control = this.m_oWordControl;
|
||
this.m_oWordControl.OnUpdateOverlay();
|
||
|
||
this.m_dIndentLeft_old = -10000;
|
||
this.m_dIndentLeftFirst_old = -10000;
|
||
this.m_dIndentRight_old = -10000;
|
||
|
||
if (AscWord.RULER_DRAG_TYPE.tab !== this.DragType)
|
||
{
|
||
word_control.UpdateHorRuler();
|
||
//word_control.m_oOverlayApi.UnShow();
|
||
}
|
||
|
||
var _margin_left = this.m_dMarginLeft;
|
||
var _margin_right = this.m_dMarginRight;
|
||
if (this.CurrentObjectType == RULER_OBJECT_TYPE_TABLE || this.CurrentObjectType == RULER_OBJECT_TYPE_COLUMNS)
|
||
{
|
||
_margin_left = this.TableMarginLeft;
|
||
_margin_right = this.TableMarginRight;
|
||
}
|
||
|
||
switch (this.DragType)
|
||
{
|
||
case AscWord.RULER_DRAG_TYPE.leftMargin:
|
||
case AscWord.RULER_DRAG_TYPE.rightMargin:
|
||
{
|
||
if (!this.SimpleChanges.IsSimple)
|
||
this.SetMarginProperties();
|
||
break;
|
||
}
|
||
case AscWord.RULER_DRAG_TYPE.leftFirstInd:
|
||
case AscWord.RULER_DRAG_TYPE.leftInd:
|
||
case AscWord.RULER_DRAG_TYPE.firstInd:
|
||
case AscWord.RULER_DRAG_TYPE.rightInd:
|
||
{
|
||
if (!this.SimpleChanges.IsSimple)
|
||
this.SetPrProperties();
|
||
break;
|
||
}
|
||
case AscWord.RULER_DRAG_TYPE.tab:
|
||
{
|
||
// смотрим, сохраняем ли таб
|
||
var _y = (global_mouseEvent.Y - word_control.Y) * g_dKoef_pix_to_mm;
|
||
if (_y <= 3 || _y > 5.6 || this.m_dCurrentTabNewPosition < this.m_dIndentLeft || this.m_dCurrentTabNewPosition > _margin_right - _margin_left - this.m_dIndentRight)
|
||
{
|
||
if (-1 !== this.m_lCurrentTab)
|
||
this.m_arrTabs.splice(this.m_lCurrentTab, 1);
|
||
}
|
||
else
|
||
{
|
||
if (this.m_lCurrentTab < this.m_arrTabs.length)
|
||
this.m_arrTabs[this.m_lCurrentTab].pos = this.m_dCurrentTabNewPosition;
|
||
}
|
||
this.m_lCurrentTab = -1;
|
||
this.CorrectTabs();
|
||
this.m_oWordControl.UpdateHorRuler();
|
||
this.SetTabsProperties();
|
||
break;
|
||
}
|
||
case AscWord.RULER_DRAG_TYPE.table:
|
||
{
|
||
if (!this.SimpleChanges.IsSimple)
|
||
this.SetTableProperties();
|
||
this.DragTablePos = -1;
|
||
break;
|
||
}
|
||
case AscWord.RULER_DRAG_TYPE.columnSize:
|
||
case AscWord.RULER_DRAG_TYPE.columnPos:
|
||
{
|
||
if (!this.SimpleChanges.IsSimple)
|
||
this.SetColumnsProperties();
|
||
this.DragTablePos = -1;
|
||
break;
|
||
}
|
||
}
|
||
|
||
if (AscWord.RULER_DRAG_TYPE.tab === this.DragType)
|
||
{
|
||
word_control.UpdateHorRuler();
|
||
//word_control.m_oOverlayApi.UnShow();
|
||
}
|
||
|
||
this.IsDrawingCurTab = true;
|
||
this.DragType = 0;
|
||
this.m_bIsMouseDown = false;
|
||
|
||
this.m_oWordControl.m_oDrawingDocument.UnlockCursorType();
|
||
this.SimpleChanges.Clear();
|
||
}
|
||
|
||
this.SetTabsProperties = function()
|
||
{
|
||
// потом заменить на объекты CTab (когда Илюха реализует не только левые табы)
|
||
var _arr = new CParaTabs();
|
||
var _c = this.m_arrTabs.length;
|
||
for (var i = 0; i < _c; i++)
|
||
{
|
||
if (this.m_arrTabs[i].type == tab_Left || this.m_arrTabs[i].type == tab_Right || this.m_arrTabs[i].type == tab_Center)
|
||
_arr.Add(new CParaTab(this.m_arrTabs[i].type, this.m_arrTabs[i].pos, this.m_arrTabs[i].leader));
|
||
}
|
||
|
||
if (false === this.m_oWordControl.m_oLogicDocument.Document_Is_SelectionLocked(AscCommon.changestype_Paragraph_Properties))
|
||
{
|
||
this.m_oWordControl.m_oLogicDocument.StartAction(AscDFH.historydescription_Document_SetParagraphTabs);
|
||
this.m_oWordControl.m_oLogicDocument.SetParagraphTabs(_arr);
|
||
this.m_oWordControl.m_oLogicDocument.FinalizeAction();
|
||
}
|
||
this.m_oWordControl.m_oLogicDocument.UpdateSelection();
|
||
this.m_oWordControl.m_oLogicDocument.UpdateInterface();
|
||
}
|
||
|
||
this.SetPrProperties = function(isTemporary)
|
||
{
|
||
let left = this.m_dIndentLeft;
|
||
let right = this.m_dIndentRight;
|
||
let firstLine = this.m_dIndentLeftFirst - this.m_dIndentLeft;
|
||
|
||
let logicDocument = this.m_oWordControl.m_oLogicDocument;
|
||
if (logicDocument.IsSelectionLocked(AscCommon.changestype_Paragraph_Properties))
|
||
{
|
||
logicDocument.UpdateSelection();
|
||
logicDocument.UpdateInterface();
|
||
return;
|
||
}
|
||
|
||
isTemporary = isTemporary && logicDocument.IsDocumentEditor();
|
||
|
||
if (isTemporary)
|
||
logicDocument.TurnOff_InterfaceEvents();
|
||
|
||
logicDocument.StartAction(AscDFH.historydescription_Document_SetParagraphIndentFromRulers);
|
||
logicDocument.SetParagraphIndent({
|
||
Left : left,
|
||
Right : right,
|
||
FirstLine : firstLine
|
||
});
|
||
logicDocument.UpdateInterface();
|
||
logicDocument.Recalculate();
|
||
logicDocument.FinalizeAction();
|
||
|
||
if (isTemporary)
|
||
{
|
||
AscCommon.History.SetLastPointTemporary();
|
||
logicDocument.TurnOn_InterfaceEvents();
|
||
}
|
||
}
|
||
this.SetMarginProperties = function()
|
||
{
|
||
if ( false === this.m_oWordControl.m_oLogicDocument.Document_Is_SelectionLocked(AscCommon.changestype_Document_SectPr) )
|
||
{
|
||
this.m_oWordControl.m_oLogicDocument.StartAction(AscDFH.historydescription_Document_SetDocumentMargin_Hor);
|
||
this.m_oWordControl.m_oLogicDocument.SetDocumentMargin( { Left : this.m_dMarginLeft, Right : this.m_dMarginRight }, true);
|
||
this.m_oWordControl.m_oLogicDocument.FinalizeAction();
|
||
}
|
||
this.m_oWordControl.m_oLogicDocument.UpdateSelection();
|
||
this.m_oWordControl.m_oLogicDocument.UpdateInterface();
|
||
}
|
||
|
||
this.SetTableProperties = function()
|
||
{
|
||
if ( false === this.m_oWordControl.m_oLogicDocument.Document_Is_SelectionLocked(AscCommon.changestype_Table_Properties) )
|
||
{
|
||
this.m_oWordControl.m_oLogicDocument.StartAction(AscDFH.historydescription_Document_SetTableMarkup_Hor);
|
||
|
||
this.m_oTableMarkup.CorrectTo();
|
||
this.m_oTableMarkup.Table.Update_TableMarkupFromRuler(this.m_oTableMarkup, true, this.DragTablePos);
|
||
if (this.m_oTableMarkup)
|
||
this.m_oTableMarkup.CorrectFrom();
|
||
|
||
this.m_oWordControl.m_oLogicDocument.UpdateRulers();
|
||
this.m_oWordControl.m_oLogicDocument.FinalizeAction();
|
||
}
|
||
this.m_oWordControl.m_oLogicDocument.UpdateSelection();
|
||
this.m_oWordControl.m_oLogicDocument.UpdateInterface();
|
||
}
|
||
|
||
this.SetColumnsProperties = function()
|
||
{
|
||
this.m_oWordControl.m_oLogicDocument.Update_ColumnsMarkupFromRuler(this.m_oColumnMarkup);
|
||
}
|
||
|
||
this.BlitToMain = function(left, top, htmlElement)
|
||
{
|
||
var dPR = AscCommon.AscBrowser.retinaPixelRatio;
|
||
left = Math.round(dPR * left);
|
||
var _margin_left = this.m_dMarginLeft;
|
||
var _margin_right = this.m_dMarginRight;
|
||
if (this.CurrentObjectType == RULER_OBJECT_TYPE_TABLE || this.CurrentObjectType == RULER_OBJECT_TYPE_COLUMNS)
|
||
{
|
||
_margin_left = this.TableMarginLeft;
|
||
_margin_right = this.TableMarginRight;
|
||
}
|
||
|
||
var checker = this.RepaintChecker;
|
||
if (!checker.BlitAttack && left == checker.BlitLeft && !this.m_bIsMouseDown)
|
||
{
|
||
if (checker.BlitIndentLeft == this.m_dIndentLeft
|
||
&& checker.BlitIndentLeftFirst == this.m_dIndentLeftFirst
|
||
&& checker.BlitIndentRight == this.m_dIndentRight
|
||
&& checker.BlitRtl === this.m_bRtl
|
||
&& checker.BlitDefaultTab == this.m_dDefaultTab
|
||
&& _margin_left == checker.BlitMarginLeftInd
|
||
&& _margin_right == checker.BlitMarginRightInd)
|
||
{
|
||
// осталось проверить только табы кастомные
|
||
var _count1 = 0;
|
||
if (null != checker.BlitTabs)
|
||
_count1 = checker.BlitTabs.length;
|
||
|
||
var _count2 = this.m_arrTabs.length;
|
||
if (_count1 == _count2)
|
||
{
|
||
var bIsBreak = false;
|
||
for (var ii = 0; ii < _count1; ii++)
|
||
{
|
||
if ((checker.BlitTabs[ii].type != this.m_arrTabs[ii].type) || (checker.BlitTabs[ii].pos != this.m_arrTabs[ii].pos))
|
||
{
|
||
bIsBreak = true;
|
||
break;
|
||
}
|
||
}
|
||
if (false === bIsBreak)
|
||
return;
|
||
}
|
||
}
|
||
}
|
||
|
||
checker.BlitAttack = false;
|
||
htmlElement.width = htmlElement.width;
|
||
var context = htmlElement.getContext('2d');
|
||
context.setTransform(1, 0, 0, 1, 0, 0);
|
||
|
||
if (null != this.m_oCanvas)
|
||
{
|
||
checker.BlitLeft = left;
|
||
checker.BlitRtl = this.m_bRtl;
|
||
checker.BlitIndentLeft = this.m_dIndentLeft;
|
||
checker.BlitIndentLeftFirst = this.m_dIndentLeftFirst;
|
||
checker.BlitIndentRight = this.m_dIndentRight;
|
||
checker.BlitDefaultTab = this.m_dDefaultTab;
|
||
checker.BlitTabs = null;
|
||
if (0 != this.m_arrTabs.length)
|
||
{
|
||
checker.BlitTabs = [];
|
||
var _len = this.m_arrTabs.length;
|
||
for (var ii = 0; ii < _len; ii++)
|
||
{
|
||
checker.BlitTabs[ii] = { type: this.m_arrTabs[ii].type, pos: this.m_arrTabs[ii].pos };
|
||
}
|
||
}
|
||
var roundDPR = Math.round(dPR);
|
||
var indent = 0.5 * roundDPR;
|
||
//context.drawImage(this.m_oCanvas, left - 5, 0, this.m_oCanvas.width, this.m_oCanvas.height,
|
||
// 0, 0, this.m_oCanvas.width, this.m_oCanvas.height);
|
||
|
||
context.drawImage(this.m_oCanvas, 5 * roundDPR, 0, this.m_oCanvas.width - 10 * roundDPR, this.m_oCanvas.height,
|
||
left, 0, this.m_oCanvas.width - 10 * roundDPR, this.m_oCanvas.height);
|
||
|
||
if (!this.IsDrawAnyMarkers)
|
||
return;
|
||
var dKoef_mm_to_pix = g_dKoef_mm_to_pix * this.m_dZoom * dPR;
|
||
var dCenterX = 0;
|
||
var var2 = 0;
|
||
var var3 = 0;
|
||
|
||
// не менять!!!
|
||
var2 = 5 * dPR;//(1.4 * g_dKoef_mm_to_pix) >> 0;
|
||
var3 = 3 * dPR;//(1 * g_dKoef_mm_to_pix) >> 0;
|
||
|
||
checker.BlitMarginLeftInd = _margin_left;
|
||
checker.BlitMarginRightInd = _margin_right;
|
||
|
||
var _1mm_to_pix = g_dKoef_mm_to_pix * dPR;
|
||
let top = this.m_nTop;
|
||
let bottom = this.m_nBottom;
|
||
let isRtl = this.m_bRtl;
|
||
|
||
function blitLeftInd(ind, isRtl)
|
||
{
|
||
let offset = isRtl ? (_margin_right - ind) : (_margin_left + ind);
|
||
let dCenterX = left + offset * dKoef_mm_to_pix;
|
||
|
||
let var1 = parseInt(dCenterX - _1mm_to_pix) - indent + Math.round(dPR) - 1;
|
||
let var4 = parseInt(dCenterX + _1mm_to_pix) + indent + Math.round(dPR) - 1;
|
||
|
||
if (0 !== ((var1 - var4 + Math.round(dPR)) & 1))
|
||
var4 += 1;
|
||
|
||
context.beginPath();
|
||
context.lineWidth = Math.round(dPR);
|
||
context.moveTo(var1, bottom + indent);
|
||
context.lineTo(var4, bottom + indent);
|
||
context.lineTo(var4, bottom + indent + Math.round(var2));
|
||
context.lineTo(var1, bottom + indent + Math.round(var2));
|
||
context.lineTo(var1, bottom + indent);
|
||
context.lineTo(var1, bottom + indent - Math.round(var3));
|
||
context.lineTo((var1 + var4) / 2, bottom - Math.round(var2 * 1.2));
|
||
context.lineTo(var4, bottom + indent - Math.round(var3));
|
||
context.lineTo(var4, bottom + indent);
|
||
|
||
context.fill();
|
||
context.stroke();
|
||
}
|
||
|
||
function blitFirstInd(ind, isRtl)
|
||
{
|
||
let offset = isRtl ? (_margin_right - ind) : (_margin_left + ind);
|
||
dCenterX = left + offset * dKoef_mm_to_pix;
|
||
|
||
let var1 = parseInt(dCenterX - _1mm_to_pix) - indent + Math.round(dPR) - 1;
|
||
let var4 = parseInt(dCenterX + _1mm_to_pix) + indent + Math.round(dPR) - 1;
|
||
|
||
if (0 !== ((var1 - var4 + Math.round(dPR)) & 1))
|
||
var4 += 1;
|
||
|
||
// first line indent
|
||
context.beginPath();
|
||
context.lineWidth = Math.round(dPR);
|
||
context.moveTo(var1, top + indent);
|
||
context.lineTo(var1, top + indent - Math.round(var3));
|
||
context.lineTo(var4, top + indent - Math.round(var3));
|
||
context.lineTo(var4, top + indent);
|
||
context.lineTo((var1 + var4) / 2, top + Math.round(var2 * 1.2));
|
||
context.closePath();
|
||
|
||
context.fill();
|
||
context.stroke();
|
||
}
|
||
|
||
function blitRightInd(ind, isRtl)
|
||
{
|
||
let offset = isRtl ? (_margin_left + ind) : (_margin_right - ind);
|
||
dCenterX = left + offset * dKoef_mm_to_pix;
|
||
|
||
let var1 = parseInt(dCenterX - _1mm_to_pix) - indent + Math.round(dPR) - 1;
|
||
let var4 = parseInt(dCenterX + _1mm_to_pix) + indent + Math.round(dPR) - 1;
|
||
|
||
if (0 !== ((var1 - var4 + Math.round(dPR)) & 1))
|
||
var4 += 1;
|
||
|
||
context.beginPath();
|
||
context.lineWidth = Math.round(dPR);
|
||
context.moveTo(var1, bottom + indent);
|
||
context.lineTo(var4, bottom + indent);
|
||
context.lineTo(var4, bottom + indent - Math.round(var3));
|
||
context.lineTo((var1 + var4) / 2, bottom - Math.round(var2 * 1.2));
|
||
context.lineTo(var1, bottom + indent - Math.round(var3));
|
||
context.closePath();
|
||
|
||
context.fill();
|
||
context.stroke();
|
||
}
|
||
|
||
function blitLeftTab(x, y)
|
||
{
|
||
context.beginPath();
|
||
context.moveTo(x, y);
|
||
context.lineTo(x, y + Math.round(5 * dPR));
|
||
context.lineTo(x + Math.round(5 * dPR), y + Math.round(5 * dPR));
|
||
context.stroke();
|
||
}
|
||
|
||
function blitRightTab(x, y)
|
||
{
|
||
context.beginPath();
|
||
context.moveTo(x, y);
|
||
context.lineTo(x, y + Math.round(5 * dPR));
|
||
context.lineTo(x - Math.round(5 * dPR), y + Math.round(5 * dPR));
|
||
context.stroke();
|
||
}
|
||
|
||
function blitCenterTab(x, y)
|
||
{
|
||
context.beginPath();
|
||
context.moveTo(x, y);
|
||
context.lineTo(x, y + Math.round(5 * dPR));
|
||
context.moveTo(x - Math.round(5 * dPR), y + Math.round(5 * dPR));
|
||
context.lineTo(x + Math.round(5 * dPR), y + Math.round(5 * dPR));
|
||
context.stroke();
|
||
}
|
||
|
||
function blitTab(tabPos, tabType)
|
||
{
|
||
let x = parseInt((isRtl ? (_margin_right - tabPos) : (_margin_left + tabPos)) * dKoef_mm_to_pix) + left;
|
||
let y = bottom - 5 * dPR;
|
||
|
||
let lineW = context.lineWidth;
|
||
context.lineWidth = 2 * roundDPR;
|
||
|
||
if (tab_Left === tabType)
|
||
{
|
||
if (isRtl)
|
||
blitRightTab(x, y);
|
||
else
|
||
blitLeftTab(x, y);
|
||
}
|
||
else if (tab_Right === tabType)
|
||
{
|
||
if (isRtl)
|
||
blitLeftTab(x, y);
|
||
else
|
||
blitRightTab(x, y);
|
||
}
|
||
else if (tab_Center === tab_Center)
|
||
{
|
||
blitCenterTab(x, y);
|
||
}
|
||
|
||
context.lineWidth = lineW;
|
||
}
|
||
|
||
// old position --------------------------------------
|
||
context.strokeStyle = GlobalSkin.RulerMarkersOutlineColorOld;
|
||
context.fillStyle = GlobalSkin.RulerMarkersFillColorOld;
|
||
if (-10000 !== this.m_dIndentLeft_old && this.m_dIndentLeft_old !== this.m_dIndentLeft)
|
||
blitLeftInd(this.m_dIndentLeft_old, this.m_bRtl);
|
||
|
||
if (-10000 !== this.m_dIndentLeftFirst_old && this.m_dIndentLeftFirst_old !== this.m_dIndentLeftFirst)
|
||
blitFirstInd(this.m_dIndentLeftFirst_old, this.m_bRtl);
|
||
|
||
if (-10000 !== this.m_dIndentRight_old && this.m_dIndentRight_old !== this.m_dIndentRight)
|
||
blitRightInd(this.m_dIndentRight_old, this.m_bRtl);
|
||
|
||
context.strokeStyle = GlobalSkin.RulerTabsColorOld;
|
||
if (-1 !== this.m_lCurrentTab && this.m_lCurrentTab < this.m_arrTabs.length)
|
||
{
|
||
var _tab = this.m_arrTabs[this.m_lCurrentTab];
|
||
blitTab(_tab.pos, _tab.type);
|
||
}
|
||
|
||
// ---------------------------------------------------
|
||
|
||
// рисуем инденты, только если они корректны
|
||
var posL = _margin_left;
|
||
if ((_margin_left + this.m_dIndentLeft) > posL)
|
||
posL = _margin_left + this.m_dIndentLeft;
|
||
if ((_margin_left + this.m_dIndentLeftFirst) > posL)
|
||
posL = _margin_left + this.m_dIndentLeftFirst;
|
||
|
||
var posR = _margin_right;
|
||
if (this.m_dIndentRight > 0)
|
||
posR = _margin_right - this.m_dIndentRight;
|
||
|
||
if (posL < posR)
|
||
{
|
||
context.strokeStyle = GlobalSkin.RulerMarkersOutlineColor;
|
||
context.fillStyle = GlobalSkin.RulerMarkersFillColor;
|
||
|
||
blitLeftInd(this.m_dIndentLeft, this.m_bRtl);
|
||
blitRightInd(this.m_dIndentRight, this.m_bRtl)
|
||
blitFirstInd(this.m_dIndentLeftFirst, this.m_bRtl);
|
||
}
|
||
|
||
// теперь рисуем табы ----------------------------------------
|
||
// default
|
||
var position_default_tab = this.m_dDefaultTab;
|
||
let _positon_y = this.m_nBottom + Math.round(1.5 * dPR);
|
||
|
||
var _min_default_value = Math.max(0, this.m_dMaxTab);
|
||
if (this.m_dDefaultTab > 0.01)
|
||
{
|
||
if (this.m_bRtl)
|
||
{
|
||
while (_margin_right - position_default_tab > this.m_dMarginLeft)
|
||
{
|
||
if (position_default_tab < _min_default_value)
|
||
{
|
||
position_default_tab += this.m_dDefaultTab;
|
||
continue;
|
||
}
|
||
|
||
let _x = parseInt((_margin_right - position_default_tab) * dKoef_mm_to_pix) + left + indent;
|
||
context.beginPath();
|
||
context.moveTo(_x, _positon_y);
|
||
context.lineTo(_x, _positon_y + Math.round(3 * dPR));
|
||
context.stroke();
|
||
|
||
position_default_tab += this.m_dDefaultTab;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
while (_margin_left + position_default_tab < this.m_dMarginRight)
|
||
{
|
||
if (position_default_tab < _min_default_value)
|
||
{
|
||
position_default_tab += this.m_dDefaultTab;
|
||
continue;
|
||
}
|
||
|
||
let _x = parseInt((_margin_left + position_default_tab) * dKoef_mm_to_pix) + left + indent;
|
||
context.beginPath();
|
||
context.moveTo(_x, _positon_y);
|
||
context.lineTo(_x, _positon_y + Math.round(3 * dPR));
|
||
context.stroke();
|
||
|
||
position_default_tab += this.m_dDefaultTab;
|
||
}
|
||
}
|
||
}
|
||
|
||
// custom tabs
|
||
context.strokeStyle = GlobalSkin.RulerTabsColor;
|
||
for (let i = 0, tabCount = this.m_arrTabs.length; i < tabCount; ++i)
|
||
{
|
||
let tab = this.m_arrTabs[i];
|
||
let tabPos = tab.pos;
|
||
|
||
if (i === this.m_lCurrentTab)
|
||
{
|
||
if (!this.IsDrawingCurTab)
|
||
continue;
|
||
// рисуем вместо него - позицию нового
|
||
tabPos = this.m_dCurrentTabNewPosition;
|
||
}
|
||
else if (tab.pos < this.m_dIndentLeft)
|
||
{
|
||
continue;
|
||
}
|
||
blitTab(tabPos, tab.type);
|
||
}
|
||
// -----------------------------------------------------------
|
||
}
|
||
}
|
||
|
||
this.UpdateParaInd = function(paraInd, isRtl)
|
||
{
|
||
if (!paraInd)
|
||
return 0;
|
||
|
||
let left = undefined !== paraInd.Left ? paraInd.Left : 0;
|
||
let right = undefined !== paraInd.Right ? paraInd.Right : 0;
|
||
let firstLine = undefined !== paraInd.FirstLine ? left + paraInd.FirstLine : 0;
|
||
|
||
let update = 0;
|
||
|
||
if (Math.abs(this.m_dIndentLeft - left) > AscWord.EPSILON)
|
||
{
|
||
this.m_dIndentLeft = left;
|
||
update |= 1;
|
||
}
|
||
|
||
if (Math.abs(this.m_dIndentLeftFirst - firstLine) > AscWord.EPSILON)
|
||
{
|
||
this.m_dIndentLeftFirst = firstLine;
|
||
update |= 1;
|
||
}
|
||
|
||
if (Math.abs(this.m_dIndentRight - right) > AscWord.EPSILON)
|
||
{
|
||
this.m_dIndentRight = right;
|
||
update |= 1;
|
||
}
|
||
|
||
if (this.m_bRtl !== isRtl)
|
||
{
|
||
this.m_bRtl = isRtl;
|
||
update |= 1;
|
||
update |= 2;
|
||
}
|
||
|
||
return update;
|
||
};
|
||
}
|
||
|
||
function CVerRuler()
|
||
{
|
||
this.m_oPage = null;
|
||
|
||
this.m_nLeft = 0; // значения в пикселах - смещение до самой линейки
|
||
this.m_nRight = 0; // значения в пикселах - смещение до самой линейки
|
||
// (т.е. ширина линейки в пикселах = (this.m_nRight - this.m_nLeft))
|
||
|
||
this.m_dMarginTop = 20;
|
||
this.m_dMarginBottom = 250;
|
||
|
||
this.m_oCanvas = null;
|
||
|
||
this.m_dZoom = 1;
|
||
|
||
this.DragType = 0; // 0 - none
|
||
// 1 - top margin, 2 - bottom margin
|
||
// 3 - header_top, 4 - header_bottom
|
||
// 5 - table rows
|
||
|
||
// отдельные настройки для текущего объекта линейки
|
||
this.CurrentObjectType = RULER_OBJECT_TYPE_PARAGRAPH;
|
||
this.m_oTableMarkup = null;
|
||
this.header_top = 0;
|
||
this.header_bottom = 0;
|
||
|
||
this.DragTablePos = -1;
|
||
|
||
this.RepaintChecker = new CVerRulerRepaintChecker();
|
||
|
||
// presentations addons
|
||
this.IsCanMoveMargins = true;
|
||
|
||
this.m_oWordControl = null;
|
||
|
||
this.SimpleChanges = new RulerCheckSimpleChanges();
|
||
|
||
this.Units = c_oAscDocumentUnits.Millimeter;
|
||
|
||
this.CheckCanvas = function()
|
||
{
|
||
this.m_dZoom = this.m_oWordControl.m_nZoomValue / 100;
|
||
var dPR = AscCommon.AscBrowser.retinaPixelRatio;
|
||
var dKoef_mm_to_pix = g_dKoef_mm_to_pix * this.m_dZoom * dPR;
|
||
|
||
var heightNew = dKoef_mm_to_pix * this.m_oPage.height_mm;
|
||
|
||
var _height = Math.round(10 * dPR) + heightNew;
|
||
if (dPR > 1)
|
||
_height += Math.round(dPR);
|
||
|
||
var _width = 5 * g_dKoef_mm_to_pix * dPR;
|
||
|
||
var intW = _width >> 0;
|
||
var intH = _height >> 0;
|
||
if (null == this.m_oCanvas)
|
||
{
|
||
this.m_oCanvas = document.createElement('canvas');
|
||
this.m_oCanvas.width = intW;
|
||
this.m_oCanvas.height = intH;
|
||
}
|
||
else
|
||
{
|
||
var oldW = this.m_oCanvas.width;
|
||
var oldH = this.m_oCanvas.height;
|
||
|
||
if ((oldW != intW) || (oldH != intH))
|
||
{
|
||
delete this.m_oCanvas;
|
||
this.m_oCanvas = document.createElement('canvas');
|
||
this.m_oCanvas.width = intW;
|
||
this.m_oCanvas.height = intH;
|
||
}
|
||
}
|
||
return heightNew;
|
||
}
|
||
|
||
this.CreateBackground = function(cachedPage, isattack)
|
||
{
|
||
if (window["NATIVE_EDITOR_ENJINE"])
|
||
return;
|
||
|
||
if (null == cachedPage || undefined == cachedPage)
|
||
return;
|
||
|
||
this.m_oPage = cachedPage;
|
||
var height = this.CheckCanvas();
|
||
|
||
if (0 == this.DragType)
|
||
{
|
||
this.m_dMarginTop = cachedPage.margin_top;
|
||
this.m_dMarginBottom = cachedPage.margin_bottom;
|
||
}
|
||
|
||
// check old state
|
||
var checker = this.RepaintChecker;
|
||
var markup = this.m_oTableMarkup;
|
||
|
||
if (isattack !== true && this.CurrentObjectType == checker.Type && height == checker.Height)
|
||
{
|
||
if (this.CurrentObjectType == RULER_OBJECT_TYPE_PARAGRAPH)
|
||
{
|
||
if (this.m_dMarginTop == checker.MarginTop && this.m_dMarginBottom == checker.MarginBottom)
|
||
return;
|
||
}
|
||
else if (this.CurrentObjectType == RULER_OBJECT_TYPE_HEADER || this.CurrentObjectType == RULER_OBJECT_TYPE_FOOTER)
|
||
{
|
||
if (this.header_top == checker.HeaderTop && this.header_bottom == checker.HeaderBottom)
|
||
return;
|
||
}
|
||
else if (this.CurrentObjectType == RULER_OBJECT_TYPE_TABLE)
|
||
{
|
||
var oldcount = checker.rowsY.length;
|
||
var newcount = markup.Rows.length;
|
||
|
||
if (oldcount == newcount)
|
||
{
|
||
var arr1 = checker.rowsY;
|
||
var arr2 = checker.rowsH;
|
||
|
||
var rows = markup.Rows;
|
||
|
||
var _break = false;
|
||
for (var i = 0; i < oldcount; i++)
|
||
{
|
||
if ((arr1[i] != rows[i].Y) || (arr2[i] != rows[i].H))
|
||
{
|
||
_break = true;
|
||
break;
|
||
}
|
||
}
|
||
|
||
if (!_break)
|
||
return;
|
||
}
|
||
}
|
||
}
|
||
|
||
//console.log("vertical");
|
||
|
||
checker.Height = height;
|
||
checker.Type = this.CurrentObjectType;
|
||
checker.BlitAttack = true;
|
||
|
||
var dPR = AscCommon.AscBrowser.retinaPixelRatio;
|
||
var dKoef_mm_to_pix = g_dKoef_mm_to_pix * this.m_dZoom * dPR;
|
||
|
||
// не править !!!
|
||
this.m_nLeft = Math.round(3 * dPR);//(0.8 * g_dKoef_mm_to_pix) >> 0;
|
||
this.m_nRight = Math.round(15 * dPR);//(4.2 * g_dKoef_mm_to_pix) >> 0;
|
||
|
||
var context = this.m_oCanvas.getContext('2d');
|
||
context.setTransform(1, 0, 0, 1, 0, Math.round(5 * dPR));
|
||
|
||
context.fillStyle = GlobalSkin.BackgroundColor;
|
||
context.fillRect(0, 0, this.m_oCanvas.width, this.m_oCanvas.height);
|
||
|
||
var top_margin = 0;
|
||
var bottom_margin = 0;
|
||
|
||
if (RULER_OBJECT_TYPE_PARAGRAPH == this.CurrentObjectType)
|
||
{
|
||
top_margin = (this.m_dMarginTop * dKoef_mm_to_pix) >> 0;
|
||
bottom_margin = (this.m_dMarginBottom * dKoef_mm_to_pix) >> 0;
|
||
|
||
checker.MarginTop = this.m_dMarginTop;
|
||
checker.MarginBottom = this.m_dMarginBottom;
|
||
}
|
||
else if (RULER_OBJECT_TYPE_HEADER == this.CurrentObjectType || RULER_OBJECT_TYPE_FOOTER == this.CurrentObjectType)
|
||
{
|
||
top_margin = (this.header_top * dKoef_mm_to_pix) >> 0;
|
||
bottom_margin = (this.header_bottom * dKoef_mm_to_pix) >> 0;
|
||
|
||
checker.HeaderTop = this.header_top;
|
||
checker.HeaderBottom = this.header_bottom;
|
||
}
|
||
else if (RULER_OBJECT_TYPE_TABLE == this.CurrentObjectType)
|
||
{
|
||
var _arr1 = checker.rowsY;
|
||
var _arr2 = checker.rowsH;
|
||
|
||
if (0 != _arr1.length)
|
||
_arr1.splice(0, _arr1.length);
|
||
|
||
if (0 != _arr2.length)
|
||
_arr2.splice(0, _arr2.length);
|
||
|
||
var _count = this.m_oTableMarkup.Rows.length;
|
||
|
||
for (var i = 0; i < _count; i++)
|
||
{
|
||
_arr1[i] = markup.Rows[i].Y;
|
||
_arr2[i] = markup.Rows[i].H;
|
||
}
|
||
|
||
if (_count != 0)
|
||
{
|
||
top_margin = (markup.Rows[0].Y * dKoef_mm_to_pix) >> 0;
|
||
bottom_margin = ((markup.Rows[_count - 1].Y + markup.Rows[_count - 1].H) * dKoef_mm_to_pix) >> 0;
|
||
}
|
||
}
|
||
|
||
var indent = 0.5 * Math.round(dPR);
|
||
|
||
if (bottom_margin > top_margin)
|
||
{
|
||
context.fillStyle = GlobalSkin.RulerLight;
|
||
context.fillRect(this.m_nLeft + indent, top_margin + indent, this.m_nRight - this.m_nLeft, bottom_margin - top_margin);
|
||
}
|
||
|
||
var intH = height >> 0;
|
||
|
||
if (true)
|
||
{
|
||
context.beginPath();
|
||
context.fillStyle = GlobalSkin.RulerDark;
|
||
|
||
context.fillRect(this.m_nLeft + indent, indent, this.m_nRight - this.m_nLeft, top_margin);
|
||
context.fillRect(this.m_nLeft + indent, bottom_margin + indent, this.m_nRight - this.m_nLeft, Math.max(intH - bottom_margin, 1));
|
||
context.beginPath();
|
||
}
|
||
|
||
context.beginPath();
|
||
context.lineWidth = Math.round(dPR);
|
||
context.strokeStyle = GlobalSkin.RulerTextColor;
|
||
context.fillStyle = GlobalSkin.RulerTextColor;
|
||
|
||
var mm_1_4 = 10 * dKoef_mm_to_pix / 4;
|
||
var isDraw1_4 = (mm_1_4 > 7) ? true : false;
|
||
var inch_1_8 = 25.4 * dKoef_mm_to_pix / 8;
|
||
|
||
var middleHor = (this.m_nLeft + this.m_nRight) / 2;
|
||
var part1 = dPR;
|
||
var part2 = 2.5 * dPR;
|
||
|
||
var l_part1 = Math.floor(middleHor - part1);
|
||
var r_part1 = Math.ceil(middleHor + part1);
|
||
var l_part2 = Math.floor(middleHor - part2);
|
||
var r_part2 = Math.ceil(middleHor + part2);
|
||
|
||
context.font = Math.round(7 * dPR) + "pt Arial";
|
||
|
||
if (this.Units == c_oAscDocumentUnits.Millimeter)
|
||
{
|
||
var lCount1 = ((height - top_margin) / mm_1_4) >> 0;
|
||
var lCount2 = (top_margin / mm_1_4) >> 0;
|
||
|
||
var index = 0;
|
||
var num = 0;
|
||
for (var i = 1; i < lCount1; i++)
|
||
{
|
||
var lYPos = ((top_margin + i * mm_1_4) >> 0) + indent;
|
||
index++;
|
||
|
||
if (index == 4)
|
||
index = 0;
|
||
|
||
if (0 == index)
|
||
{
|
||
num++;
|
||
// number
|
||
|
||
var strNum = "" + num;
|
||
var lWidthText = context.measureText(strNum).width;
|
||
|
||
context.translate(middleHor, lYPos);
|
||
context.rotate(-Math.PI / 2);
|
||
context.fillText(strNum, -lWidthText / 2.0, Math.round(4 * dPR));
|
||
context.setTransform(1, 0, 0, 1, 0, Math.round(5 * dPR));
|
||
}
|
||
else if (1 == index && isDraw1_4)
|
||
{
|
||
// 1/4
|
||
context.beginPath();
|
||
context.moveTo(l_part1, lYPos);
|
||
context.lineTo(r_part1, lYPos);
|
||
context.stroke();
|
||
}
|
||
else if (2 == index)
|
||
{
|
||
// 1/2
|
||
context.beginPath();
|
||
context.moveTo(l_part2, lYPos);
|
||
context.lineTo(r_part2, lYPos);
|
||
context.stroke();
|
||
}
|
||
else if (isDraw1_4)
|
||
{
|
||
// 1/4
|
||
context.beginPath();
|
||
context.moveTo(l_part1, lYPos);
|
||
context.lineTo(r_part1, lYPos);
|
||
context.stroke();
|
||
}
|
||
}
|
||
|
||
index = 0;
|
||
num = 0;
|
||
for (var i = 1; i <= lCount2; i++)
|
||
{
|
||
var lYPos = ((top_margin - i * mm_1_4) >> 0) + indent;
|
||
index++;
|
||
|
||
if (index == 4)
|
||
index = 0;
|
||
|
||
if (0 == index)
|
||
{
|
||
num++;
|
||
// number
|
||
var strNum = "" + num;
|
||
var lWidthText = context.measureText(strNum).width;
|
||
|
||
context.translate(middleHor, lYPos);
|
||
context.rotate(-Math.PI / 2);
|
||
context.fillText(strNum, -lWidthText / 2.0, Math.round(4 * dPR));
|
||
context.setTransform(1, 0, 0, 1, 0, Math.round(5 * dPR));
|
||
}
|
||
else if (1 == index && isDraw1_4)
|
||
{
|
||
// 1/4
|
||
context.beginPath();
|
||
context.moveTo(l_part1, lYPos);
|
||
context.lineTo(r_part1, lYPos);
|
||
context.stroke();
|
||
}
|
||
else if (2 == index)
|
||
{
|
||
// 1/2
|
||
context.beginPath();
|
||
context.moveTo(l_part2, lYPos);
|
||
context.lineTo(r_part2, lYPos);
|
||
context.stroke();
|
||
}
|
||
else if (isDraw1_4)
|
||
{
|
||
// 1/4
|
||
context.beginPath();
|
||
context.moveTo(l_part1, lYPos);
|
||
context.lineTo(r_part1, lYPos);
|
||
context.stroke();
|
||
}
|
||
}
|
||
}
|
||
else if (this.Units == c_oAscDocumentUnits.Inch)
|
||
{
|
||
var lCount1 = ((height - top_margin) / inch_1_8) >> 0;
|
||
var lCount2 = (top_margin / inch_1_8) >> 0;
|
||
|
||
var index = 0;
|
||
var num = 0;
|
||
for (var i = 1; i < lCount1; i++)
|
||
{
|
||
var lYPos = ((top_margin + i * inch_1_8) >> 0) + indent;
|
||
index++;
|
||
|
||
if (index == 8)
|
||
index = 0;
|
||
|
||
if (0 == index)
|
||
{
|
||
num++;
|
||
// number
|
||
|
||
var strNum = "" + num;
|
||
var lWidthText = context.measureText(strNum).width;
|
||
|
||
context.translate(middleHor, lYPos);
|
||
context.rotate(-Math.PI / 2);
|
||
context.fillText(strNum, -lWidthText / 2.0, Math.round(4 * dPR));
|
||
context.setTransform(1, 0, 0, 1, 0, Math.round(5 * dPR));
|
||
}
|
||
else if (4 == index)
|
||
{
|
||
// 1/2
|
||
context.beginPath();
|
||
context.moveTo(l_part2, lYPos);
|
||
context.lineTo(r_part2, lYPos);
|
||
context.stroke();
|
||
}
|
||
else if (inch_1_8 > 8)
|
||
{
|
||
// 1/8
|
||
context.beginPath();
|
||
context.moveTo(l_part1, lYPos);
|
||
context.lineTo(r_part1, lYPos);
|
||
context.stroke();
|
||
}
|
||
}
|
||
|
||
index = 0;
|
||
num = 0;
|
||
for (var i = 1; i <= lCount2; i++)
|
||
{
|
||
var lYPos = ((top_margin - i * inch_1_8) >> 0) + indent;
|
||
index++;
|
||
|
||
if (index == 8)
|
||
index = 0;
|
||
|
||
if (0 == index)
|
||
{
|
||
num++;
|
||
// number
|
||
var strNum = "" + num;
|
||
var lWidthText = context.measureText(strNum).width;
|
||
|
||
context.translate(middleHor, lYPos);
|
||
context.rotate(-Math.PI / 2);
|
||
context.fillText(strNum, -lWidthText / 2.0, Math.round(4 * dPR));
|
||
context.setTransform(1, 0, 0, 1, 0, Math.round(5 * dPR));
|
||
|
||
}
|
||
else if (4 == index)
|
||
{
|
||
// 1/2
|
||
context.beginPath();
|
||
context.moveTo(middleHor - part2, lYPos);
|
||
context.lineTo(middleHor + part2, lYPos);
|
||
context.stroke();
|
||
}
|
||
else if (inch_1_8 > 8)
|
||
{
|
||
// 1/8
|
||
context.beginPath();
|
||
context.moveTo(middleHor - part1, lYPos);
|
||
context.lineTo(middleHor + part1, lYPos);
|
||
context.stroke();
|
||
}
|
||
}
|
||
}
|
||
else if (this.Units == c_oAscDocumentUnits.Point)
|
||
{
|
||
var point_1_12 = 25.4 * dKoef_mm_to_pix / 12;
|
||
|
||
var lCount1 = ((height - top_margin) / point_1_12) >> 0;
|
||
var lCount2 = (top_margin / point_1_12) >> 0;
|
||
|
||
var index = 0;
|
||
var num = 0;
|
||
for (var i = 1; i < lCount1; i++)
|
||
{
|
||
var lYPos = ((top_margin + i * point_1_12) >> 0) + indent;
|
||
index++;
|
||
|
||
if (index == 12)
|
||
index = 0;
|
||
|
||
if (0 == index || 6 == index)
|
||
{
|
||
num++;
|
||
// number
|
||
|
||
var strNum = "" + (num * 36);
|
||
var lWidthText = context.measureText(strNum).width;
|
||
|
||
context.translate(middleHor, lYPos);
|
||
context.rotate(-Math.PI / 2);
|
||
context.fillText(strNum, -lWidthText / 2.0, Math.round(4 * dPR));
|
||
context.setTransform(1, 0, 0, 1, 0, Math.round(5 * dPR));
|
||
}
|
||
else if (point_1_12 > 5)
|
||
{
|
||
// 1/8
|
||
context.beginPath();
|
||
context.moveTo(l_part1, lYPos);
|
||
context.lineTo(r_part1, lYPos);
|
||
context.stroke();
|
||
}
|
||
}
|
||
|
||
index = 0;
|
||
num = 0;
|
||
for (var i = 1; i <= lCount2; i++)
|
||
{
|
||
var lYPos = ((top_margin - i * point_1_12) >> 0) + indent;
|
||
index++;
|
||
|
||
if (index == 12)
|
||
index = 0;
|
||
|
||
if (0 == index || 6 == index)
|
||
{
|
||
num++;
|
||
// number
|
||
var strNum = "" + (num * 36);
|
||
var lWidthText = context.measureText(strNum).width;
|
||
|
||
context.translate(middleHor, lYPos);
|
||
context.rotate(-Math.PI / 2);
|
||
context.fillText(strNum, -lWidthText / 2.0, Math.round(4 * dPR));
|
||
context.setTransform(1, 0, 0, 1, 0, Math.round(5 * dPR));
|
||
}
|
||
else if (point_1_12 > 5)
|
||
{
|
||
// 1/8
|
||
context.beginPath();
|
||
context.moveTo(l_part1, lYPos);
|
||
context.lineTo(r_part1, lYPos);
|
||
context.stroke();
|
||
}
|
||
}
|
||
}
|
||
|
||
if ((this.CurrentObjectType == RULER_OBJECT_TYPE_TABLE) && (null != markup))
|
||
{
|
||
var dPR = AscCommon.AscBrowser.retinaPixelRatio;
|
||
var dKoef_mm_to_pix = g_dKoef_mm_to_pix * this.m_dZoom * dPR;
|
||
|
||
// не будет нулевых таблиц.
|
||
var _count = markup.Rows.length;
|
||
|
||
if (0 == _count)
|
||
return;
|
||
|
||
var start_dark = (((markup.Rows[0].Y + markup.Rows[0].H) * dKoef_mm_to_pix) >> 0) + indent;
|
||
var end_dark = 0;
|
||
|
||
context.fillStyle = GlobalSkin.RulerDark;
|
||
context.strokeStyle = GlobalSkin.RulerOutline;
|
||
|
||
var _x = this.m_nLeft + indent;
|
||
var _w = this.m_nRight - this.m_nLeft;
|
||
for (var i = 1; i < _count; i++)
|
||
{
|
||
end_dark = ((markup.Rows[i].Y * dKoef_mm_to_pix) >> 0) + indent;
|
||
context.fillRect(_x, start_dark, _w, Math.max(end_dark - start_dark, Math.round(7 * dPR)));
|
||
context.strokeRect(_x, start_dark, _w, Math.max(end_dark - start_dark, Math.round(7 * dPR)));
|
||
|
||
start_dark = (((markup.Rows[i].Y + markup.Rows[i].H) * dKoef_mm_to_pix) >> 0) + indent;
|
||
}
|
||
}
|
||
|
||
// рамка
|
||
context.beginPath();
|
||
context.strokeStyle = GlobalSkin.RulerOutline;
|
||
context.strokeRect(this.m_nLeft + indent, indent, this.m_nRight - this.m_nLeft, Math.max(intH - 1, 1));
|
||
context.beginPath();
|
||
context.moveTo(this.m_nLeft + indent, top_margin + indent);
|
||
context.lineTo(this.m_nRight - indent, top_margin + indent);
|
||
|
||
context.moveTo(this.m_nLeft + indent, bottom_margin + indent);
|
||
context.lineTo(this.m_nRight - indent, bottom_margin + indent);
|
||
context.stroke();
|
||
}
|
||
|
||
this.OnMouseMove = function(left, top, e)
|
||
{
|
||
var word_control = this.m_oWordControl;
|
||
AscCommon.check_MouseMoveEvent(e);
|
||
|
||
this.SimpleChanges.CheckMove();
|
||
var ver_ruler = word_control.m_oLeftRuler_vertRuler;
|
||
var dKoefPxToMM = 100 * g_dKoef_pix_to_mm / word_control.m_nZoomValue;
|
||
|
||
// теперь определяем позицию относительно самой линейки. Все в миллиметрах
|
||
var _y = global_mouseEvent.Y - 7 * g_dKoef_mm_to_pix - top - word_control.Y;
|
||
_y *= dKoefPxToMM;
|
||
var _x = left * g_dKoef_pix_to_mm;
|
||
|
||
var dKoef_mm_to_pix = g_dKoef_mm_to_pix * this.m_dZoom;
|
||
var mm_1_4 = 10 / 4;
|
||
var mm_1_8 = mm_1_4 / 2;
|
||
|
||
switch (this.DragType)
|
||
{
|
||
case 0:
|
||
{
|
||
if (this.CurrentObjectType == RULER_OBJECT_TYPE_PARAGRAPH)
|
||
{
|
||
if (this.IsCanMoveMargins && ((Math.abs(_y - this.m_dMarginTop) < 1) || (Math.abs(_y - this.m_dMarginBottom) < 1)))
|
||
word_control.m_oDrawingDocument.SetCursorType("s-resize");
|
||
else
|
||
word_control.m_oDrawingDocument.SetCursorType("default");
|
||
}
|
||
else if (this.CurrentObjectType == RULER_OBJECT_TYPE_HEADER)
|
||
{
|
||
if ((Math.abs(_y - this.header_top) < 1) || (Math.abs(_y - this.header_bottom) < 1))
|
||
word_control.m_oDrawingDocument.SetCursorType("s-resize");
|
||
else
|
||
word_control.m_oDrawingDocument.SetCursorType("default");
|
||
}
|
||
else if (this.CurrentObjectType == RULER_OBJECT_TYPE_FOOTER)
|
||
{
|
||
if (Math.abs(_y - this.header_top) < 1)
|
||
word_control.m_oDrawingDocument.SetCursorType("s-resize");
|
||
else
|
||
word_control.m_oDrawingDocument.SetCursorType("default");
|
||
}
|
||
else if (this.CurrentObjectType == RULER_OBJECT_TYPE_TABLE)
|
||
{
|
||
var type = this.CheckMouseType(2, _y);
|
||
if (type == 5)
|
||
word_control.m_oDrawingDocument.SetCursorType("s-resize");
|
||
else
|
||
word_control.m_oDrawingDocument.SetCursorType("default");
|
||
}
|
||
|
||
break;
|
||
}
|
||
case 1:
|
||
{
|
||
var newVal = RulerCorrectPosition(this, _y, this.m_dMarginTop);
|
||
|
||
if (newVal > (this.m_dMarginBottom - 30))
|
||
newVal = this.m_dMarginBottom - 30;
|
||
if (newVal < 0)
|
||
newVal = 0;
|
||
|
||
this.m_dMarginTop = newVal;
|
||
word_control.UpdateVerRulerBack();
|
||
|
||
var pos = top + this.m_dMarginTop * dKoef_mm_to_pix;
|
||
word_control.m_oOverlayApi.HorLine(pos);
|
||
|
||
word_control.m_oDrawingDocument.SetCursorType("s-resize");
|
||
|
||
break;
|
||
}
|
||
case 2:
|
||
{
|
||
var newVal = RulerCorrectPosition(this, _y, this.m_dMarginTop);
|
||
|
||
if (newVal < (this.m_dMarginTop + 30))
|
||
newVal = this.m_dMarginTop + 30;
|
||
if (newVal > this.m_oPage.height_mm)
|
||
newVal = this.m_oPage.height_mm;
|
||
|
||
this.m_dMarginBottom = newVal;
|
||
word_control.UpdateVerRulerBack();
|
||
|
||
var pos = top + this.m_dMarginBottom * dKoef_mm_to_pix;
|
||
word_control.m_oOverlayApi.HorLine(pos);
|
||
|
||
word_control.m_oDrawingDocument.SetCursorType("s-resize");
|
||
|
||
break;
|
||
}
|
||
case 3:
|
||
{
|
||
var newVal = RulerCorrectPosition(this, _y, this.m_dMarginTop);
|
||
|
||
if (newVal > this.header_bottom)
|
||
newVal = this.header_bottom;
|
||
if (newVal < 0)
|
||
newVal = 0;
|
||
|
||
this.header_top = newVal;
|
||
word_control.UpdateVerRulerBack();
|
||
|
||
var pos = top + this.header_top * dKoef_mm_to_pix;
|
||
word_control.m_oOverlayApi.HorLine(pos);
|
||
|
||
word_control.m_oDrawingDocument.SetCursorType("s-resize");
|
||
|
||
break;
|
||
}
|
||
case 4:
|
||
{
|
||
var newVal = RulerCorrectPosition(this, _y, this.m_dMarginTop);
|
||
|
||
if (newVal < 0)
|
||
newVal = 0;
|
||
if (newVal > this.m_oPage.height_mm)
|
||
newVal = this.m_oPage.height_mm;
|
||
|
||
this.header_bottom = newVal;
|
||
word_control.UpdateVerRulerBack();
|
||
|
||
var pos = top + this.header_bottom * dKoef_mm_to_pix;
|
||
word_control.m_oOverlayApi.HorLine(pos);
|
||
|
||
word_control.m_oDrawingDocument.SetCursorType("s-resize");
|
||
|
||
break;
|
||
}
|
||
case 5:
|
||
{
|
||
// сначала нужно определить минимум и максимум сдвига
|
||
var _min = 0;
|
||
var _max = this.m_oPage.height_mm;
|
||
|
||
if (0 < this.DragTablePos)
|
||
{
|
||
_min = this.m_oTableMarkup.Rows[this.DragTablePos - 1].Y;
|
||
}
|
||
if (this.DragTablePos < this.m_oTableMarkup.Rows.length)
|
||
{
|
||
_max = this.m_oTableMarkup.Rows[this.DragTablePos].Y + this.m_oTableMarkup.Rows[this.DragTablePos].H;
|
||
}
|
||
|
||
var newVal = RulerCorrectPosition(this, _y, this.m_dMarginTop);
|
||
|
||
if (newVal < _min)
|
||
newVal = _min;
|
||
if (newVal > _max)
|
||
newVal = _max;
|
||
|
||
if (0 == this.DragTablePos)
|
||
{
|
||
var _bottom = this.m_oTableMarkup.Rows[0].Y + this.m_oTableMarkup.Rows[0].H;
|
||
this.m_oTableMarkup.Rows[0].Y = newVal;
|
||
this.m_oTableMarkup.Rows[0].H = _bottom - newVal;
|
||
}
|
||
else
|
||
{
|
||
var oldH = this.m_oTableMarkup.Rows[this.DragTablePos - 1].H;
|
||
this.m_oTableMarkup.Rows[this.DragTablePos - 1].H = newVal - this.m_oTableMarkup.Rows[this.DragTablePos - 1].Y;
|
||
|
||
var delta = this.m_oTableMarkup.Rows[this.DragTablePos - 1].H - oldH;
|
||
for (var i = this.DragTablePos; i < this.m_oTableMarkup.Rows.length; i++)
|
||
{
|
||
this.m_oTableMarkup.Rows[i].Y += delta;
|
||
}
|
||
}
|
||
|
||
word_control.UpdateVerRulerBack();
|
||
|
||
var pos = top + newVal * dKoef_mm_to_pix;
|
||
word_control.m_oOverlayApi.HorLine(pos);
|
||
|
||
word_control.m_oDrawingDocument.SetCursorType("s-resize");
|
||
}
|
||
}
|
||
}
|
||
|
||
this.CheckMouseType = function(x, y)
|
||
{
|
||
// проверяем где находимся
|
||
|
||
if (this.IsCanMoveMargins === false)
|
||
return 0;
|
||
|
||
if (x >= 0.8 && x <= 4.2)
|
||
{
|
||
// внутри линейки
|
||
if (this.CurrentObjectType == RULER_OBJECT_TYPE_PARAGRAPH)
|
||
{
|
||
if (Math.abs(y - this.m_dMarginTop) < 1)
|
||
{
|
||
return 1;
|
||
}
|
||
else if (Math.abs(y - this.m_dMarginBottom) < 1)
|
||
{
|
||
return 2;
|
||
}
|
||
}
|
||
else if (this.CurrentObjectType == RULER_OBJECT_TYPE_HEADER)
|
||
{
|
||
if (Math.abs(y - this.header_top) < 1)
|
||
{
|
||
return 3;
|
||
}
|
||
else if (Math.abs(y - this.header_bottom) < 1)
|
||
{
|
||
return 4;
|
||
}
|
||
}
|
||
else if (this.CurrentObjectType == RULER_OBJECT_TYPE_FOOTER)
|
||
{
|
||
if (Math.abs(y - this.header_top) < 1)
|
||
{
|
||
return 3;
|
||
}
|
||
}
|
||
else if (this.CurrentObjectType == RULER_OBJECT_TYPE_TABLE && null != this.m_oTableMarkup)
|
||
{
|
||
// не будет нулевых таблиц.
|
||
var markup = this.m_oTableMarkup;
|
||
var _count = markup.Rows.length;
|
||
|
||
if (0 == _count)
|
||
return 0;
|
||
|
||
var _start = markup.Rows[0].Y;
|
||
var _end = _start - 2;
|
||
|
||
for (var i = 0; i <= _count; i++)
|
||
{
|
||
if (i == _count)
|
||
{
|
||
_end = markup.Rows[i - 1].Y + markup.Rows[i - 1].H;
|
||
_start = _end + 2;
|
||
}
|
||
else if (i != 0)
|
||
{
|
||
_end = markup.Rows[i - 1].Y + markup.Rows[i - 1].H;
|
||
_start = markup.Rows[i].Y;
|
||
}
|
||
|
||
if ((_end - 1) < y && y < (_start + 1))
|
||
{
|
||
this.DragTablePos = i;
|
||
return 5;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
return 0;
|
||
}
|
||
|
||
this.OnMouseDown = function(left, top, e)
|
||
{
|
||
var word_control = this.m_oWordControl;
|
||
|
||
if (true === word_control.m_oApi.isStartAddShape)
|
||
{
|
||
word_control.m_oApi.sync_EndAddShape();
|
||
word_control.m_oApi.sync_StartAddShapeCallback(false);
|
||
}
|
||
if (true === word_control.m_oApi.isInkDrawerOn())
|
||
{
|
||
word_control.m_oApi.stopInkDrawer();
|
||
}
|
||
|
||
AscCommon.check_MouseDownEvent(e, true);
|
||
|
||
this.SimpleChanges.Reinit();
|
||
global_mouseEvent.LockMouse();
|
||
|
||
var dKoefPxToMM = 100 * g_dKoef_pix_to_mm / word_control.m_nZoomValue;
|
||
var dKoef_mm_to_pix = g_dKoef_mm_to_pix * this.m_dZoom;
|
||
|
||
var _y = global_mouseEvent.Y - 7 * g_dKoef_mm_to_pix - top - word_control.Y;
|
||
_y *= dKoefPxToMM;
|
||
var _x = (global_mouseEvent.X - word_control.X) * g_dKoef_pix_to_mm - word_control.GetMainContentBounds().L - word_control.GetVertRulerLeft();
|
||
|
||
this.DragType = this.CheckMouseType(_x, _y);
|
||
this.DragTypeMouseDown = this.DragType;
|
||
|
||
if (global_mouseEvent.ClickCount > 1)
|
||
{
|
||
var eventType = "";
|
||
switch (this.DragTypeMouseDown)
|
||
{
|
||
case 5:
|
||
eventType = "tables";
|
||
break;
|
||
default:
|
||
eventType = "margins";
|
||
break;
|
||
}
|
||
|
||
if (eventType != "")
|
||
{
|
||
word_control.m_oApi.sendEvent("asc_onRulerDblClick", eventType);
|
||
this.DragType = 0;
|
||
this.OnMouseUp(left, top, e);
|
||
return;
|
||
}
|
||
}
|
||
|
||
switch (this.DragType)
|
||
{
|
||
case 1:
|
||
{
|
||
var pos = top + this.m_dMarginTop * dKoef_mm_to_pix;
|
||
word_control.m_oOverlayApi.HorLine(pos);
|
||
break;
|
||
}
|
||
case 2:
|
||
{
|
||
var pos = top + this.m_dMarginBottom * dKoef_mm_to_pix;
|
||
word_control.m_oOverlayApi.HorLine(pos);
|
||
break;
|
||
}
|
||
case 3:
|
||
{
|
||
var pos = top + this.header_top * dKoef_mm_to_pix;
|
||
word_control.m_oOverlayApi.HorLine(pos);
|
||
break;
|
||
}
|
||
case 4:
|
||
{
|
||
var pos = top + this.header_bottom * dKoef_mm_to_pix;
|
||
word_control.m_oOverlayApi.HorLine(pos);
|
||
break;
|
||
}
|
||
case 5:
|
||
{
|
||
var pos = 0;
|
||
if (0 == this.DragTablePos)
|
||
{
|
||
pos = top + this.m_oTableMarkup.Rows[0].Y * dKoef_mm_to_pix;
|
||
word_control.m_oOverlayApi.HorLine(pos);
|
||
}
|
||
else
|
||
{
|
||
pos = top + (this.m_oTableMarkup.Rows[this.DragTablePos - 1].Y + this.m_oTableMarkup.Rows[this.DragTablePos - 1].H) * dKoef_mm_to_pix;
|
||
word_control.m_oOverlayApi.HorLine(pos);
|
||
}
|
||
}
|
||
}
|
||
|
||
word_control.m_oDrawingDocument.LockCursorTypeCur();
|
||
}
|
||
|
||
this.OnMouseUp = function(left, top, e)
|
||
{
|
||
var lockedElement = AscCommon.check_MouseUpEvent(e);
|
||
|
||
//this.m_oWordControl.m_oOverlayApi.UnShow();
|
||
this.m_oWordControl.OnUpdateOverlay();
|
||
|
||
switch (this.DragType)
|
||
{
|
||
case 1:
|
||
case 2:
|
||
{
|
||
if (!this.SimpleChanges.IsSimple)
|
||
this.SetMarginProperties();
|
||
break;
|
||
}
|
||
case 3:
|
||
case 4:
|
||
{
|
||
if (!this.SimpleChanges.IsSimple)
|
||
this.SetHeaderProperties();
|
||
break;
|
||
}
|
||
case 5:
|
||
{
|
||
if (!this.SimpleChanges.IsSimple)
|
||
this.SetTableProperties();
|
||
this.DragTablePos = -1;
|
||
break;
|
||
}
|
||
}
|
||
|
||
this.DragType = 0;
|
||
this.m_oWordControl.m_oDrawingDocument.UnlockCursorType();
|
||
|
||
this.SimpleChanges.Clear();
|
||
}
|
||
|
||
this.OnMouseUpExternal = function()
|
||
{
|
||
//this.m_oWordControl.m_oOverlayApi.UnShow();
|
||
this.m_oWordControl.OnUpdateOverlay();
|
||
|
||
switch (this.DragType)
|
||
{
|
||
case 1:
|
||
case 2:
|
||
{
|
||
if (!this.SimpleChanges.IsSimple)
|
||
this.SetMarginProperties();
|
||
break;
|
||
}
|
||
case 3:
|
||
case 4:
|
||
{
|
||
if (!this.SimpleChanges.IsSimple)
|
||
this.SetHeaderProperties();
|
||
break;
|
||
}
|
||
case 5:
|
||
{
|
||
if (!this.SimpleChanges.IsSimple)
|
||
this.SetTableProperties();
|
||
this.DragTablePos = -1;
|
||
break;
|
||
}
|
||
}
|
||
|
||
this.DragType = 0;
|
||
this.m_oWordControl.m_oDrawingDocument.UnlockCursorType();
|
||
|
||
this.SimpleChanges.Clear();
|
||
}
|
||
|
||
this.BlitToMain = function(left, top, htmlElement)
|
||
{
|
||
if (!this.RepaintChecker.BlitAttack && top == this.RepaintChecker.BlitTop)
|
||
return;
|
||
var dPR = AscCommon.AscBrowser.retinaPixelRatio;
|
||
top = Math.round(top * dPR);
|
||
this.RepaintChecker.BlitTop = top;
|
||
this.RepaintChecker.BlitAttack = false;
|
||
|
||
htmlElement.width = htmlElement.width;
|
||
var context = htmlElement.getContext('2d');
|
||
|
||
if (null != this.m_oCanvas)
|
||
{
|
||
context.drawImage(this.m_oCanvas, 0, Math.round(5 * dPR), this.m_oCanvas.width, this.m_oCanvas.height - Math.round(10 * dPR),
|
||
0, top, this.m_oCanvas.width, this.m_oCanvas.height - Math.round(10 * dPR));
|
||
}
|
||
}
|
||
|
||
// выставление параметров логическому документу
|
||
this.SetMarginProperties = function()
|
||
{
|
||
if ( false === this.m_oWordControl.m_oLogicDocument.Document_Is_SelectionLocked(AscCommon.changestype_Document_SectPr) )
|
||
{
|
||
this.m_oWordControl.m_oLogicDocument.StartAction(AscDFH.historydescription_Document_SetDocumentMargin_Ver);
|
||
this.m_oWordControl.m_oLogicDocument.SetDocumentMargin( { Top : this.m_dMarginTop, Bottom : this.m_dMarginBottom }, true);
|
||
this.m_oWordControl.m_oLogicDocument.FinalizeAction();
|
||
}
|
||
}
|
||
this.SetHeaderProperties = function()
|
||
{
|
||
if ( false === this.m_oWordControl.m_oLogicDocument.Document_Is_SelectionLocked(AscCommon.changestype_HdrFtr) )
|
||
{
|
||
// TODO: в данной функции при определенных параметрах может меняться верхнее поле. Поэтому, надо
|
||
// вставить проверку на залоченность с типом changestype_Document_SectPr
|
||
|
||
this.m_oWordControl.m_oLogicDocument.StartAction(AscDFH.historydescription_Document_SetHdrFtrBounds);
|
||
this.m_oWordControl.m_oLogicDocument.Document_SetHdrFtrBounds(this.header_top, this.header_bottom);
|
||
this.m_oWordControl.m_oLogicDocument.FinalizeAction();
|
||
}
|
||
}
|
||
this.SetTableProperties = function()
|
||
{
|
||
if ( false === this.m_oWordControl.m_oLogicDocument.Document_Is_SelectionLocked(AscCommon.changestype_Table_Properties) )
|
||
{
|
||
this.m_oWordControl.m_oLogicDocument.StartAction(AscDFH.historydescription_Document_SetTableMarkup_Ver);
|
||
|
||
this.m_oTableMarkup.CorrectTo();
|
||
this.m_oTableMarkup.Table.Update_TableMarkupFromRuler(this.m_oTableMarkup, false, this.DragTablePos);
|
||
if (this.m_oTableMarkup)
|
||
this.m_oTableMarkup.CorrectFrom();
|
||
|
||
this.m_oWordControl.m_oLogicDocument.FinalizeAction();
|
||
}
|
||
}
|
||
}
|