Commit 6b8910a5 authored by Ilya Kirillov's avatar Ilya Kirillov

Fixed bug #33610 Reworked positioning in math.

parent 4a731f23
......@@ -2841,32 +2841,36 @@ ParaMath.prototype.Cursor_MoveToEndPos = function(SelectFromEnd)
ParaMath.prototype.Get_ParaContentPosByXY = function(SearchPos, Depth, _CurLine, _CurRange, StepEnd, Flag) // получить логическую позицию по XY
{
var Result = false;
var Result = false;
var CurX = SearchPos.CurX;
var CurX = SearchPos.CurX;
var MathX = SearchPos.CurX;
var MathW = this.Root.Get_Width(_CurLine, _CurRange);
if(SearchPos.X > SearchPos.CurX || SearchPos.DiffX > 1000000 - 1) // Необходимая проверка, если случайно пришла ф-ия поиска позиции, без этой проверки будет некорректно выполнен поиск (если внутри формулы есть мат объекты => позиции поиска перетрутся в CMathBase)
{
Result = this.Root.Get_ParaContentPosByXY(SearchPos, Depth, _CurLine, _CurRange, StepEnd);
if(SearchPos.InText)
SearchPos.DiffX = 0.001; // чтобы всегда встать в формулу, если попали в текст
}
// Такое возможно, если все элементы до этого (в том числе и этот) были пустыми, тогда, чтобы не возвращать
// неправильную позицию вернем позицию начала данного элемента.
if (SearchPos.DiffX > 1000000 - 1)
{
this.Get_StartPos(SearchPos.Pos, Depth);
Result = true;
}
// Если мы попадаем четко в формулу, тогда ищем внутри нее, если нет, тогда не заходим внутрь
if ((SearchPos.X > MathX && SearchPos.X < MathX + MathW) || SearchPos.DiffX > 1000000 - 1)
{
Result = this.Root.Get_ParaContentPosByXY(SearchPos, Depth, _CurLine, _CurRange, StepEnd);
if (SearchPos.InText)
SearchPos.DiffX = 0.001; // чтобы всегда встать в формулу, если попали в текст
SearchPos.CurX = CurX + this.Root.Get_Width(_CurLine, _CurRange);
// Если мы попадаем в формулу, тогда не ищем позицию вне ее
if (Result)
SearchPos.DiffX = 0;
}
// Такое возможно, если все элементы до этого (в том числе и этот) были пустыми, тогда, чтобы не возвращать
// неправильную позицию вернем позицию начала данного элемента.
if (SearchPos.DiffX > 1000000 - 1)
{
this.Get_StartPos(SearchPos.Pos, Depth);
Result = true;
}
return Result;
SearchPos.CurX = CurX + MathW;
return Result;
};
ParaMath.prototype.Get_ParaContentPos = function(bSelection, bStart, ContentPos) // получить текущую логическую позицию
......
......@@ -4077,7 +4077,7 @@ Paragraph.prototype =
SearchPos.InText = false;
// Такое возможно, если все раны до этого (в том числе и этот) были пустыми, тогда, чтобы не возвращать
// неправильную позицию вернем позицию начала данного путого рана.
// неправильную позицию вернем позицию начала данного пустого рана.
if ( SearchPos.DiffX > 1000000 - 1 )
{
SearchPos.Line = -1;
......
......@@ -5189,9 +5189,9 @@ ParaRun.prototype.Get_ParaContentPosByXY = function(SearchPos, Depth, _CurLine,
if ((Math.abs( Diff ) < SearchPos.DiffX + 0.001 && (SearchPos.CenterMode || SearchPos.X > SearchPos.CurX)) && InMathText == false)
{
SearchPos.DiffX = Math.abs( Diff );
SearchPos.Pos.Update( CurPos, Depth );
Result = true;
SearchPos.DiffX = Math.abs(Diff);
SearchPos.Pos.Update(CurPos, Depth);
Result = true;
if ( Diff >= - 0.001 && Diff <= TempDx + 0.001 )
{
......@@ -5213,12 +5213,14 @@ ParaRun.prototype.Get_ParaContentPosByXY = function(SearchPos, Depth, _CurLine,
// Если мы ищем позицию для селекта, тогда нужно искать и за знаком параграфа
if ( true === StepEnd )
{
SearchPos.DiffX = Math.abs(Diff);
SearchPos.Pos.Update( this.Content.length, Depth );
Result = true;
}
}
else if ( CurPos === EndPos - 1 && para_NewLine != ItemType )
{
SearchPos.DiffX = Math.abs(Diff);
SearchPos.Pos.Update( EndPos, Depth );
Result = true;
}
......@@ -5229,6 +5231,7 @@ ParaRun.prototype.Get_ParaContentPosByXY = function(SearchPos, Depth, _CurLine,
// неправильную позицию вернем позицию начала данного путого рана.
if ( SearchPos.DiffX > 1000000 - 1 )
{
SearchPos.DiffX = SearchPos.X - SearchPos.CurX;
SearchPos.Pos.Update( StartPos, Depth );
Result = true;
}
......@@ -5246,9 +5249,9 @@ ParaRun.prototype.Get_ParaContentPosByXY = function(SearchPos, Depth, _CurLine,
Diff = SearchPos.X - SearchPos.CurX;
if(SearchPos.InText == false && (bEmpty || StartPos !== EndPos) && (Math.abs( Diff ) < SearchPos.DiffX + 0.001 && (SearchPos.CenterMode || SearchPos.X > SearchPos.CurX)))
{
SearchPos.DiffX = Math.abs( Diff );
SearchPos.Pos.Update( CurPos, Depth );
Result = true;
SearchPos.DiffX = Math.abs(Diff);
SearchPos.Pos.Update(CurPos, Depth);
Result = true;
}
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment