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

Fixed bug #33610 Reworked positioning in math.

parent 4a731f23
......@@ -2845,13 +2845,20 @@ ParaMath.prototype.Get_ParaContentPosByXY = function(SearchPos, Depth, _CurLine,
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)
// Если мы попадаем четко в формулу, тогда ищем внутри нее, если нет, тогда не заходим внутрь
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)
if (SearchPos.InText)
SearchPos.DiffX = 0.001; // чтобы всегда встать в формулу, если попали в текст
// Если мы попадаем в формулу, тогда не ищем позицию вне ее
if (Result)
SearchPos.DiffX = 0;
}
// Такое возможно, если все элементы до этого (в том числе и этот) были пустыми, тогда, чтобы не возвращать
......@@ -2862,10 +2869,7 @@ ParaMath.prototype.Get_ParaContentPosByXY = function(SearchPos, Depth, _CurLine,
Result = true;
}
SearchPos.CurX = CurX + this.Root.Get_Width(_CurLine, _CurRange);
SearchPos.CurX = CurX + MathW;
return Result;
};
......
......@@ -4077,7 +4077,7 @@ Paragraph.prototype =
SearchPos.InText = false;
// Такое возможно, если все раны до этого (в том числе и этот) были пустыми, тогда, чтобы не возвращать
// неправильную позицию вернем позицию начала данного путого рана.
// неправильную позицию вернем позицию начала данного пустого рана.
if ( SearchPos.DiffX > 1000000 - 1 )
{
SearchPos.Line = -1;
......
......@@ -5189,8 +5189,8 @@ 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 );
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,8 +5249,8 @@ 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 );
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