Commit d5c7a89a authored by Anna.Pavlova's avatar Anna.Pavlova

Поправлено падение : зацикливание для ситуации, когда картинка располагается в...

Поправлено падение : зацикливание для ситуации, когда картинка располагается в пред параграфе, формула занимает одну строку и располагается справа относительно картинки

git-svn-id: svn://192.168.3.15/activex/AVS/Sources/TeamlabOffice/trunk/OfficeWeb@65572 954022d7-b5bf-4e40-9824-e11837661b57
parent 566dd700
...@@ -264,7 +264,7 @@ CParaMathLineWidths.prototype.UpdateWidth = function(Line, W) ...@@ -264,7 +264,7 @@ CParaMathLineWidths.prototype.UpdateWidth = function(Line, W)
bUpdMaxWidth = Math.abs(Max - this.MaxW) > 0.0001; bUpdMaxWidth = Math.abs(Max - this.MaxW) > 0.0001;
} }
return bUpdMaxWidth; return Line !== 0 && bUpdMaxWidth; // проверка на первую строку необходима для того, чтобы не вытставить PRS.bContinueMathRecalc = true
}; };
CParaMathLineWidths.prototype.SetWordLarge = function(Line, bWordLarge) CParaMathLineWidths.prototype.SetWordLarge = function(Line, bWordLarge)
{ {
...@@ -1210,7 +1210,7 @@ ParaMath.prototype.Recalculate_Range = function(PRS, ParaPr, Depth) ...@@ -1210,7 +1210,7 @@ ParaMath.prototype.Recalculate_Range = function(PRS, ParaPr, Depth)
var PrevLineObject = PRS.RestartPageRecalcInfo.Object; var PrevLineObject = PRS.RestartPageRecalcInfo.Object;
var PrevObject = PrevLineObject == null || this.Id == PrevLineObject.Id ? null : PrevLineObject; var PrevObject = PrevLineObject == null || this.Id == PrevLineObject.Id ? null : PrevLineObject;
if(PrevLineObject == null && true == bStartRange && PRS.bFastRecalculate == false) if(PrevLineObject == null && true == bStartRange && PRS.bFastRecalculate == false && PRS.bContinueMathRecalc == false)
{ {
// информация о пересчете // информация о пересчете
var RPI = new CRPI(); var RPI = new CRPI();
...@@ -1239,7 +1239,7 @@ ParaMath.prototype.Recalculate_Range = function(PRS, ParaPr, Depth) ...@@ -1239,7 +1239,7 @@ ParaMath.prototype.Recalculate_Range = function(PRS, ParaPr, Depth)
// или же произошли какие-то изменения на странице и вызвался пересчет для этой страницы (PrevLineObject == null) и отсутствует быстрый пересчет (PRS.bFastRecalculate == false) // или же произошли какие-то изменения на странице и вызвался пересчет для этой страницы (PrevLineObject == null) и отсутствует быстрый пересчет (PRS.bFastRecalculate == false)
var bResetNextPage = true == this.PageInfo.IsResetNextPage(Page); var bResetNextPage = true == this.PageInfo.IsResetNextPage(Page);
var bResetPageInfo = PrevLineObject == null && PRS.bFastRecalculate == false && true == this.PageInfo.IsFirstLineOnPage(ParaLine, Page); var bResetPageInfo = PrevLineObject == null && PRS.bFastRecalculate == false && PRS.bContinueMathRecalc == false && true == this.PageInfo.IsFirstLineOnPage(ParaLine, Page);
if(bResetNextPage == true || bResetPageInfo == true) if(bResetNextPage == true || bResetPageInfo == true)
{ {
...@@ -1275,8 +1275,8 @@ ParaMath.prototype.Recalculate_Range = function(PRS, ParaPr, Depth) ...@@ -1275,8 +1275,8 @@ ParaMath.prototype.Recalculate_Range = function(PRS, ParaPr, Depth)
this.PageInfo.UpdateCurrentPage(Page, ParaLine); this.PageInfo.UpdateCurrentPage(Page, ParaLine);
var bRecalcNormal = true; var bRecalcNormal = true;
var bOneLineMath = PRS.bContinueMathRecalc == true && true == bStartRange && PrevLineObject == null; // пересчет заново не нужен, т.к. продолжаем пересчитывать (PRS.bContinueMathRecalc == true)
if(this.ParaMathRPI.bInline == false && PRS.bFastRecalculate == false) if(this.ParaMathRPI.bInline == false && PRS.bFastRecalculate == false && bOneLineMath == false)
{ {
var UpdWrap = this.private_UpdateWrapSettings(PRS, ParaPr); var UpdWrap = this.private_UpdateWrapSettings(PRS, ParaPr);
...@@ -1328,6 +1328,11 @@ ParaMath.prototype.Recalculate_Range = function(PRS, ParaPr, Depth) ...@@ -1328,6 +1328,11 @@ ParaMath.prototype.Recalculate_Range = function(PRS, ParaPr, Depth)
} }
} }
if(PRS.RecalcResult == recalcresult_PrevLine) // неинлайновая формула не пересчитана
{
PRS.bContinueMathRecalc = true;
}
if(PRS.NewRange == false) if(PRS.NewRange == false)
{ {
PRS.RestartPageRecalcInfo.Object = PrevObject; // возвращаем формулу, которая инициировала пересчет (если это была текущая формула, то null) PRS.RestartPageRecalcInfo.Object = PrevObject; // возвращаем формулу, которая инициировала пересчет (если это была текущая формула, то null)
...@@ -1698,7 +1703,6 @@ ParaMath.prototype.Recalculate_LineMetrics = function(PRS, ParaPr, _CurLine, _Cu ...@@ -1698,7 +1703,6 @@ ParaMath.prototype.Recalculate_LineMetrics = function(PRS, ParaPr, _CurLine, _Cu
var RootAscent = this.Root.GetAscent(_CurLine, _CurRange), var RootAscent = this.Root.GetAscent(_CurLine, _CurRange),
RootDescent = this.Root.GetDescent(_CurLine, _CurRange); RootDescent = this.Root.GetDescent(_CurLine, _CurRange);
if(PRS.LineAscent < RootAscent) if(PRS.LineAscent < RootAscent)
PRS.LineAscent = RootAscent; PRS.LineAscent = RootAscent;
...@@ -2689,28 +2693,6 @@ ParaMath.prototype.Split = function (ContentPos, Depth) ...@@ -2689,28 +2693,6 @@ ParaMath.prototype.Split = function (ContentPos, Depth)
this.Root.SplitContent(NewParaMath.Root, ContentPos, Depth); this.Root.SplitContent(NewParaMath.Root, ContentPos, Depth);
//var Pos = ContentPos.Get(Depth);
/*if(this.Root.Content[Pos].Type == para_Math_Run)
{
var NewRun = this.Root.Content[Pos].Split(ContentPos, Depth+1);
NewParaMath.Root.Add_ToContent(0, NewRun);
var len = this.Root.Content.length;
if(Pos < len - 1)
{
NewParaMath.Root.Concat_ToContent( this.Root.Content.slice(Pos + 1) );
this.Root.Remove_FromContent(Pos+1, len - Pos - 1);
}
this.SetNeedResize();
NewParaMath.SetNeedResize();
}*/
return NewParaMath; return NewParaMath;
}; };
......
...@@ -527,6 +527,7 @@ Paragraph.prototype.private_RecalculatePage = function(CurPage, bFirs ...@@ -527,6 +527,7 @@ Paragraph.prototype.private_RecalculatePage = function(CurPage, bFirs
PRS.Reset_Ranges(); PRS.Reset_Ranges();
PRS.Reset_PageBreak(); PRS.Reset_PageBreak();
PRS.Reset_RunRecalcInfo(); PRS.Reset_RunRecalcInfo();
PRS.Reset_MathRecalcInfo();
} }
else if (recalcresult_PrevLine === RecalcResult) else if (recalcresult_PrevLine === RecalcResult)
{ {
...@@ -2228,6 +2229,7 @@ function CParagraphRecalculateStateWrap(Para) ...@@ -2228,6 +2229,7 @@ function CParagraphRecalculateStateWrap(Para)
this.bBoxOperator = false; this.bBoxOperator = false;
this.bMathWrap = false; this.bMathWrap = false;
this.bBreakPosInLWord = true; // обновляем LineBreakPos (Set_LineBreakPos) для WordLarge. Не обновляем для инлайновой формулы, перед формулой есть еще текст, чтобы не перебить LineBreakPos и выставить по тем меткам, которые были до формулы разбиение this.bBreakPosInLWord = true; // обновляем LineBreakPos (Set_LineBreakPos) для WordLarge. Не обновляем для инлайновой формулы, перед формулой есть еще текст, чтобы не перебить LineBreakPos и выставить по тем меткам, которые были до формулы разбиение
this.bContinueMathRecalc = false;
} }
CParagraphRecalculateStateWrap.prototype = CParagraphRecalculateStateWrap.prototype =
...@@ -2358,7 +2360,10 @@ CParagraphRecalculateStateWrap.prototype = ...@@ -2358,7 +2360,10 @@ CParagraphRecalculateStateWrap.prototype =
{ {
this.RunRecalcInfoBreak = this.RunRecalcInfoLast; this.RunRecalcInfoBreak = this.RunRecalcInfoLast;
}, },
Reset_MathRecalcInfo: function()
{
this.bContinueMathRecalc = false;
},
Restore_RunRecalcInfo : function() Restore_RunRecalcInfo : function()
{ {
this.RunRecalcInfoLast = this.RunRecalcInfoBreak; this.RunRecalcInfoLast = this.RunRecalcInfoBreak;
......
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