Commit c8002770 authored by Anna.Pavlova's avatar Anna.Pavlova Committed by Alexander.Trofimov

1. Поправлен баг, касаемый перехода к первой строки : прежде чем выставить...

1. Поправлен баг, касаемый перехода к первой строки : прежде чем выставить флаг, пересчитать формулу заново, пройдемся по всем Range в текущей разбивке
2. Вследствии того, что сначала рассчитываем строку без учета разбивки плавающими объектами, потом учитывая их, происходило изменение ширины формулы и соответственно делался пересчет => зацикливание. В данной ситуации делаем возврат к макс ширины формулы, которая была до этого: до того как пришел пересчет без учета плавающих объектов.

git-svn-id: svn://192.168.3.15/activex/AVS/Sources/TeamlabOffice/trunk/OfficeWeb@63307 954022d7-b5bf-4e40-9824-e11837661b57
parent 5aca5006
...@@ -216,13 +216,16 @@ function CParaMathLineWidths() ...@@ -216,13 +216,16 @@ function CParaMathLineWidths()
this.Widths = []; this.Widths = [];
this.bLarge = false; this.bLarge = false;
this.MinW = 0; // without first line
this.MaxW = 0; // without first line this.MaxW = 0; // without first line
this.PrevMaxW = 0;
} }
CParaMathLineWidths.prototype.UpdateWidth = function(Line, W) CParaMathLineWidths.prototype.UpdateWidth = function(Line, W)
{ {
var bFastUpdate = false; var bFastUpdate = false;
this.PrevMaxW = this.MaxW;
if(Line >= this.Widths.length) if(Line >= this.Widths.length)
{ {
bFastUpdate = true; bFastUpdate = true;
...@@ -249,7 +252,6 @@ CParaMathLineWidths.prototype.UpdateWidth = function(Line, W) ...@@ -249,7 +252,6 @@ CParaMathLineWidths.prototype.UpdateWidth = function(Line, W)
if(lng > 1) if(lng > 1)
{ {
this.MaxW = this.Widths[1].Measure; this.MaxW = this.Widths[1].Measure;
this.MinW = this.Widths[1].Measure;
for(var i = 2; i < lng; i++) for(var i = 2; i < lng; i++)
{ {
...@@ -307,9 +309,9 @@ CParaMathLineWidths.prototype.GetMax = function() ...@@ -307,9 +309,9 @@ CParaMathLineWidths.prototype.GetMax = function()
{ {
return this.MaxW; return this.MaxW;
}; };
CParaMathLineWidths.prototype.GetMin = function() CParaMathLineWidths.prototype.ReverseMaxW = function()
{ {
return this.MinW; this.MaxW = this.PrevMaxW;
}; };
CParaMathLineWidths.prototype.UpdateMinMax = function(Pos) CParaMathLineWidths.prototype.UpdateMinMax = function(Pos)
{ {
...@@ -323,11 +325,6 @@ CParaMathLineWidths.prototype.UpdateMinMax = function(Pos) ...@@ -323,11 +325,6 @@ CParaMathLineWidths.prototype.UpdateMinMax = function(Pos)
bUpdMaxWidth = true; bUpdMaxWidth = true;
} }
if(this.MinW > Item)
{
this.MinW = Item;
}
return bUpdMaxWidth; return bUpdMaxWidth;
}; };
CParaMathLineWidths.prototype.private_GetW = function(CurLine) CParaMathLineWidths.prototype.private_GetW = function(CurLine)
...@@ -456,6 +453,11 @@ CMathPageInfo.prototype.UpdateCurrentWidth = function(_Line, Width) ...@@ -456,6 +453,11 @@ CMathPageInfo.prototype.UpdateCurrentWidth = function(_Line, Width)
return this.Info[this.CurPage].LineWidths.UpdateWidth(Line, Width); return this.Info[this.CurPage].LineWidths.UpdateWidth(Line, Width);
}; };
CMathPageInfo.prototype.ReverseCurrentMaxW = function(_Line)
{
var Line = this.Info[this.CurPage].GetNumberLine(_Line - this.StartLine);
this.Info[this.CurPage].LineWidths.ReverseMaxW(Line);
};
CMathPageInfo.prototype.GetCurrentMaxWidth = function() CMathPageInfo.prototype.GetCurrentMaxWidth = function()
{ {
return this.Info[this.CurPage].LineWidths.GetMax(); return this.Info[this.CurPage].LineWidths.GetMax();
...@@ -1279,10 +1281,17 @@ ParaMath.prototype.private_InitWrapSettings = function(PRS) ...@@ -1279,10 +1281,17 @@ ParaMath.prototype.private_InitWrapSettings = function(PRS)
ParaMath.prototype.private_RecalculateRangeWrap = function(PRS, ParaPr, Depth) ParaMath.prototype.private_RecalculateRangeWrap = function(PRS, ParaPr, Depth)
{ {
var bNextLine = (PRS.Range > 0 && this.ParaMathRPI.Wrap == WRAP_MATH_LEFT) || (PRS.Range == 0 && this.ParaMathRPI.Wrap == WRAP_MATH_RIGHT); var bNextLine = (PRS.Range > 0 && this.ParaMathRPI.Wrap == WRAP_MATH_LEFT) || (PRS.Range == 0 && this.ParaMathRPI.Wrap == WRAP_MATH_RIGHT);
var ParaLine = PRS.Line;
if(PRS.Ranges.length == 0 && true == this.Root.IsStartRange()) if(this.ParaMathRPI.CheckRangesInLine(PRS))
{ {
PRS.NewRange = true; this.PageInfo.ReverseCurrentMaxW(ParaLine);
}
if(this.ParaMathRPI.bRecalcResultPrevLine == true)
{
this.ParaMathRPI.bRecalcResultPrevLine = PRS.Range < PRS.Ranges.length;
this.UpdateInfoForBreak(PRS, ParaLine);
} }
else if(PRS.Ranges.length > 0 && (bNextLine || this.ParaMathRPI.Wrap == WRAP_MATH_TOPBOTTOM)) else if(PRS.Ranges.length > 0 && (bNextLine || this.ParaMathRPI.Wrap == WRAP_MATH_TOPBOTTOM))
{ {
...@@ -1303,10 +1312,13 @@ ParaMath.prototype.private_RecalculateRangeWrap = function(PRS, ParaPr, Depth) ...@@ -1303,10 +1312,13 @@ ParaMath.prototype.private_RecalculateRangeWrap = function(PRS, ParaPr, Depth)
PRS.Range = _Range; PRS.Range = _Range;
} }
var ParaLine = PRS.Line;
this.private_RecalculateRoot(PRS, ParaPr, Depth); this.private_RecalculateRoot(PRS, ParaPr, Depth);
if(PRS.RecalcResult == recalcresult_PrevLine && PRS.Range < PRS.Ranges.length)
{
this.ParaMathRPI.bRecalcResultPrevLine = true;
}
if(PRS.bMathWordLarge == true) if(PRS.bMathWordLarge == true)
{ {
if(this.ParaMathRPI.Wrap == WRAP_MATH_LEFT || this.ParaMathRPI.Wrap == WRAP_MATH_RIGHT) if(this.ParaMathRPI.Wrap == WRAP_MATH_LEFT || this.ParaMathRPI.Wrap == WRAP_MATH_RIGHT)
...@@ -1337,6 +1349,7 @@ ParaMath.prototype.private_RecalculateRangeWrap = function(PRS, ParaPr, Depth) ...@@ -1337,6 +1349,7 @@ ParaMath.prototype.private_RecalculateRangeWrap = function(PRS, ParaPr, Depth)
PRS.RestartPageRecalcInfo.Object = this; PRS.RestartPageRecalcInfo.Object = this;
} }
this.ParaMathRPI.UpdateInfoLine(PRS);
}; };
ParaMath.prototype.private_RecalculateRoot = function(PRS, ParaPr, Depth) ParaMath.prototype.private_RecalculateRoot = function(PRS, ParaPr, Depth)
{ {
...@@ -1367,7 +1380,6 @@ ParaMath.prototype.private_RecalculateRoot = function(PRS, ParaPr, Depth) ...@@ -1367,7 +1380,6 @@ ParaMath.prototype.private_RecalculateRoot = function(PRS, ParaPr, Depth)
} }
this.UpdateWidthLine(PRS, WidthLine); this.UpdateWidthLine(PRS, WidthLine);
} }
}; };
ParaMath.prototype.private_UpdateXLimits = function(PRS, bRecalculate) ParaMath.prototype.private_UpdateXLimits = function(PRS, bRecalculate)
...@@ -1405,25 +1417,9 @@ ParaMath.prototype.private_UpdateXLimits = function(PRS, bRecalculate) ...@@ -1405,25 +1417,9 @@ ParaMath.prototype.private_UpdateXLimits = function(PRS, bRecalculate)
} }
} }
}; };
ParaMath.prototype.UpdateInfoForBreakByPRS = function(PRS)
{
var AbsolutePage = this.Paragraph == null ? 0 : this.Paragraph.Get_StartPage_Absolute();
var Page = AbsolutePage + PRS.Page;
var Line = this.PageInfo.GetFirstLineOnPage(Page);
this.UpdateInfoForBreak(PRS, Line);
/*PRS.Set_RestartPageRecalcInfo(this.PageInfo.GetFirstLineOnPage(Page), this);
PRS.RecalcResult = recalcresult_PrevLine;
PRS.NewRange = true;*/
};
ParaMath.prototype.UpdateInfoForBreak = function(PRS, Line) ParaMath.prototype.UpdateInfoForBreak = function(PRS, Line)
{ {
/*var AbsolutePage = this.Paragraph == null ? 0 : this.Paragraph.Get_StartPage_Absolute(); PRS.Set_RestartPageRecalcInfo(Line, this);
var Page = AbsolutePage + PRS.Page;*/
PRS.Set_RestartPageRecalcInfo(Line /*this.PageInfo.GetFirstLineOnPage(Page)*/, this);
PRS.RecalcResult = recalcresult_PrevLine; PRS.RecalcResult = recalcresult_PrevLine;
PRS.NewRange = true; PRS.NewRange = true;
}; };
...@@ -1492,7 +1488,14 @@ ParaMath.prototype.UpdateWidthLine = function(PRS, Width) ...@@ -1492,7 +1488,14 @@ ParaMath.prototype.UpdateWidthLine = function(PRS, Width)
var bChangeMaxW = this.PageInfo.UpdateCurrentWidth(PRS.Line, W); var bChangeMaxW = this.PageInfo.UpdateCurrentWidth(PRS.Line, W);
if(bChangeMaxW == true && this.Is_Inline() == false && align_Justify == this.Get_Align()) if(bChangeMaxW == true && this.Is_Inline() == false && align_Justify == this.Get_Align())
this.UpdateInfoForBreakByPRS(PRS); {
var AbsolutePage = this.Paragraph == null ? 0 : this.Paragraph.Get_StartPage_Absolute();
var Page = AbsolutePage + PRS.Page;
var Line = this.PageInfo.GetFirstLineOnPage(Page);
this.UpdateInfoForBreak(PRS, Line);
}
} }
}; };
ParaMath.prototype.Recalculate_Range_Spaces = function(PRSA, _CurLine, _CurRange, _CurPage) ParaMath.prototype.Recalculate_Range_Spaces = function(PRSA, _CurLine, _CurRange, _CurPage)
...@@ -3399,16 +3402,19 @@ function CMathRecalculateInfo() ...@@ -3399,16 +3402,19 @@ function CMathRecalculateInfo()
this.bRecalcCtrPrp = false; // необходимо для пересчета CtrPrp (когда изменились текстовые настройки у первого элемнента, ctrPrp нужно пересчитать заново для всей формулы) this.bRecalcCtrPrp = false; // необходимо для пересчета CtrPrp (когда изменились текстовые настройки у первого элемнента, ctrPrp нужно пересчитать заново для всей формулы)
this.bCorrect_FontSize = false; this.bCorrect_FontSize = false;
this.RangesX0 = 0; this.RangesX0 = 0;
this.RangesX1 = 0; this.RangesX1 = 0;
this.Wrap = WRAP_MATH_EMPTY; this.Wrap = WRAP_MATH_EMPTY;
this.bInternalRanges = false; this.bInternalRanges = false;
this.bStartRanges = false; this.bStartRanges = false;
this.bRecalcResultPrevLine = false;
this.InfoLine = new CMathInfoLines();
} }
CMathRecalculateInfo.prototype.ResetInfoRanges = function() CMathRecalculateInfo.prototype.ResetInfoRanges = function()
{ {
this.RangesX0 = 0; this.RangesX0 = 0;
this.RangesX1 = 0; this.RangesX1 = 0;
this.Wrap = WRAP_MATH_EMPTY; this.Wrap = WRAP_MATH_EMPTY;
this.bInternalRanges = false; this.bInternalRanges = false;
this.bStartRanges = false; this.bStartRanges = false;
...@@ -3419,6 +3425,30 @@ CMathRecalculateInfo.prototype.ClearRecalculate = function() ...@@ -3419,6 +3425,30 @@ CMathRecalculateInfo.prototype.ClearRecalculate = function()
this.bRecalcCtrPrp = false; this.bRecalcCtrPrp = false;
this.bCorrect_FontSize = false; this.bCorrect_FontSize = false;
}; };
CMathRecalculateInfo.prototype.UpdateInfoLine = function(PRS)
{
this.InfoLine.Line = PRS.Line;
this.InfoLine.Range = PRS.Range;
this.InfoLine.CountRanges = PRS.Ranges.length;
};
CMathRecalculateInfo.prototype.CheckRangesInLine = function(PRS)
{
var bSameLine = this.InfoLine.Line == PRS.Line && this.InfoLine.Range == PRS.Range;
return bSameLine && (this.InfoLine.CountRanges !== PRS.Ranges.length);
};
function CMathInfoLines()
{
this.Line = -1;
this.Range = -1;
this.CountRanges = 0;
}
CMathInfoLines.prototype.Reset = function()
{
this.Line = -1;
this.Range = -1;
this.CountRanges = 0;
};
function CMathRecalculateObject() function CMathRecalculateObject()
{ {
......
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