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) ...@@ -2841,32 +2841,36 @@ ParaMath.prototype.Cursor_MoveToEndPos = function(SelectFromEnd)
ParaMath.prototype.Get_ParaContentPosByXY = function(SearchPos, Depth, _CurLine, _CurRange, StepEnd, Flag) // получить логическую позицию по XY 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) // Если мы попадаем четко в формулу, тогда ищем внутри нее, если нет, тогда не заходим внутрь
{ if ((SearchPos.X > MathX && SearchPos.X < MathX + MathW) || SearchPos.DiffX > 1000000 - 1)
Result = this.Root.Get_ParaContentPosByXY(SearchPos, Depth, _CurLine, _CurRange, StepEnd); {
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.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) // получить текущую логическую позицию ParaMath.prototype.Get_ParaContentPos = function(bSelection, bStart, ContentPos) // получить текущую логическую позицию
......
...@@ -4077,7 +4077,7 @@ Paragraph.prototype = ...@@ -4077,7 +4077,7 @@ Paragraph.prototype =
SearchPos.InText = false; SearchPos.InText = false;
// Такое возможно, если все раны до этого (в том числе и этот) были пустыми, тогда, чтобы не возвращать // Такое возможно, если все раны до этого (в том числе и этот) были пустыми, тогда, чтобы не возвращать
// неправильную позицию вернем позицию начала данного путого рана. // неправильную позицию вернем позицию начала данного пустого рана.
if ( SearchPos.DiffX > 1000000 - 1 ) if ( SearchPos.DiffX > 1000000 - 1 )
{ {
SearchPos.Line = -1; SearchPos.Line = -1;
......
...@@ -5189,9 +5189,9 @@ ParaRun.prototype.Get_ParaContentPosByXY = function(SearchPos, Depth, _CurLine, ...@@ -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) if ((Math.abs( Diff ) < SearchPos.DiffX + 0.001 && (SearchPos.CenterMode || SearchPos.X > SearchPos.CurX)) && InMathText == false)
{ {
SearchPos.DiffX = Math.abs( Diff ); SearchPos.DiffX = Math.abs(Diff);
SearchPos.Pos.Update( CurPos, Depth ); SearchPos.Pos.Update(CurPos, Depth);
Result = true; Result = true;
if ( Diff >= - 0.001 && Diff <= TempDx + 0.001 ) if ( Diff >= - 0.001 && Diff <= TempDx + 0.001 )
{ {
...@@ -5213,12 +5213,14 @@ ParaRun.prototype.Get_ParaContentPosByXY = function(SearchPos, Depth, _CurLine, ...@@ -5213,12 +5213,14 @@ ParaRun.prototype.Get_ParaContentPosByXY = function(SearchPos, Depth, _CurLine,
// Если мы ищем позицию для селекта, тогда нужно искать и за знаком параграфа // Если мы ищем позицию для селекта, тогда нужно искать и за знаком параграфа
if ( true === StepEnd ) if ( true === StepEnd )
{ {
SearchPos.DiffX = Math.abs(Diff);
SearchPos.Pos.Update( this.Content.length, Depth ); SearchPos.Pos.Update( this.Content.length, Depth );
Result = true; Result = true;
} }
} }
else if ( CurPos === EndPos - 1 && para_NewLine != ItemType ) else if ( CurPos === EndPos - 1 && para_NewLine != ItemType )
{ {
SearchPos.DiffX = Math.abs(Diff);
SearchPos.Pos.Update( EndPos, Depth ); SearchPos.Pos.Update( EndPos, Depth );
Result = true; Result = true;
} }
...@@ -5229,6 +5231,7 @@ ParaRun.prototype.Get_ParaContentPosByXY = function(SearchPos, Depth, _CurLine, ...@@ -5229,6 +5231,7 @@ ParaRun.prototype.Get_ParaContentPosByXY = function(SearchPos, Depth, _CurLine,
// неправильную позицию вернем позицию начала данного путого рана. // неправильную позицию вернем позицию начала данного путого рана.
if ( SearchPos.DiffX > 1000000 - 1 ) if ( SearchPos.DiffX > 1000000 - 1 )
{ {
SearchPos.DiffX = SearchPos.X - SearchPos.CurX;
SearchPos.Pos.Update( StartPos, Depth ); SearchPos.Pos.Update( StartPos, Depth );
Result = true; Result = true;
} }
...@@ -5246,9 +5249,9 @@ ParaRun.prototype.Get_ParaContentPosByXY = function(SearchPos, Depth, _CurLine, ...@@ -5246,9 +5249,9 @@ ParaRun.prototype.Get_ParaContentPosByXY = function(SearchPos, Depth, _CurLine,
Diff = SearchPos.X - SearchPos.CurX; 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))) 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.DiffX = Math.abs(Diff);
SearchPos.Pos.Update( CurPos, Depth ); SearchPos.Pos.Update(CurPos, Depth);
Result = true; 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