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

Обновляем LineAscent и LineDescent для пересчета инлайновой формулы с...

Обновляем LineAscent и LineDescent для пересчета инлайновой формулы с картинкой в Recalculate_LineMetrics. Если в формуле находится картинка, то может так получится, что в отрезках обтекания не будет ни одного элемента => PRS.Ascent и PRS.Descent равны 0.
Далее при вычилении отрезков (PRS.Ranges) для следующей строки  учитываются PRS.Ascent и PRS.Descent предыдщей строки, а они будут равны 0, соответственно получим те же самые отрезки обтекания, что и в предыдущей строке. Произойдет зацикливание.

git-svn-id: svn://192.168.3.15/activex/AVS/Sources/TeamlabOffice/trunk/OfficeWeb@63481 954022d7-b5bf-4e40-9824-e11837661b57
parent a8e7fe36
...@@ -1501,7 +1501,14 @@ ParaMath.prototype.Recalculate_Set_RangeEndPos = function(PRS, PRP, Depth) ...@@ -1501,7 +1501,14 @@ ParaMath.prototype.Recalculate_Set_RangeEndPos = function(PRS, PRP, Depth)
ParaMath.prototype.Recalculate_LineMetrics = function(PRS, ParaPr, _CurLine, _CurRange) ParaMath.prototype.Recalculate_LineMetrics = function(PRS, ParaPr, _CurLine, _CurRange)
{ {
var ContentMetrics = new CMathBoundsMeasures(); var ContentMetrics = new CMathBoundsMeasures();
this.Root.Recalculate_LineMetrics(PRS, ParaPr, _CurLine, _CurRange, ContentMetrics);
// обновляем LineAscent и LineDescent для пересчета инлайновой формулы с картинкой
// если в формуле находится картинка, то может так получится, что в отрезках обтекания не будет ни одного элемента => PRS.Ascent и PRS.Descent равны 0
// далее при вычилении отрезков (PRS.Ranges) для следующей строки учитываются PRS.Ascent и PRS.Descent предыдщей строки, а они будут равны 0 , соответственно получим те же самые отрезки обтекания, что и в предыдущей строке
// произойдет зацикливание
var bEmptyRange = PRS.Ranges.length > 0 && this.Root.Is_EmptyRange(_CurLine, _CurRange);
this.Root.Recalculate_LineMetrics(PRS, ParaPr, _CurLine, _CurRange, ContentMetrics, bEmptyRange);
}; };
ParaMath.prototype.Recalculate_Range_Width = function(PRSC, _CurLine, _CurRange) ParaMath.prototype.Recalculate_Range_Width = function(PRSC, _CurLine, _CurRange)
{ {
......
...@@ -2789,7 +2789,7 @@ ParaRun.prototype.Recalculate_Set_RangeEndPos = function(PRS, PRP, Depth) ...@@ -2789,7 +2789,7 @@ ParaRun.prototype.Recalculate_Set_RangeEndPos = function(PRS, PRP, Depth)
this.protected_FillRangeEndPos(CurLine, CurRange, CurPos); this.protected_FillRangeEndPos(CurLine, CurRange, CurPos);
}; };
ParaRun.prototype.Recalculate_LineMetrics = function(PRS, ParaPr, _CurLine, _CurRange, ContentMetrics) ParaRun.prototype.Recalculate_LineMetrics = function(PRS, ParaPr, _CurLine, _CurRange, ContentMetrics, bEmptyRange)
{ {
var Para = PRS.Paragraph; var Para = PRS.Paragraph;
...@@ -2867,7 +2867,7 @@ ParaRun.prototype.Recalculate_LineMetrics = function(PRS, ParaPr, _CurLine, _Cur ...@@ -2867,7 +2867,7 @@ ParaRun.prototype.Recalculate_LineMetrics = function(PRS, ParaPr, _CurLine, _Cur
} }
} }
if ( true === UpdateLineMetricsText ) if ( true === UpdateLineMetricsText || true === bEmptyRange)
{ {
// Пересчитаем метрику строки относительно размера данного текста // Пересчитаем метрику строки относительно размера данного текста
if ( PRS.LineTextAscent < this.TextAscent ) if ( PRS.LineTextAscent < this.TextAscent )
......
...@@ -2007,7 +2007,7 @@ CMathBase.prototype.Recalculate_Range_OneLine = function(PRS, ParaPr, Depth) ...@@ -2007,7 +2007,7 @@ CMathBase.prototype.Recalculate_Range_OneLine = function(PRS, ParaPr, Depth)
{ {
this.Recalculate_Range(PRS, ParaPr, Depth); this.Recalculate_Range(PRS, ParaPr, Depth);
}; };
CMathBase.prototype.Recalculate_LineMetrics = function(PRS, ParaPr, _CurLine, _CurRange, ContentMetrics) CMathBase.prototype.Recalculate_LineMetrics = function(PRS, ParaPr, _CurLine, _CurRange, ContentMetrics, bEmptyRange)
{ {
var CurLine = _CurLine - this.StartLine; var CurLine = _CurLine - this.StartLine;
var CurRange = (0 === CurLine ? _CurRange - this.StartRange : _CurRange); var CurRange = (0 === CurLine ? _CurRange - this.StartRange : _CurRange);
...@@ -2026,7 +2026,7 @@ CMathBase.prototype.Recalculate_LineMetrics = function(PRS, ParaPr, _CurLine, _C ...@@ -2026,7 +2026,7 @@ CMathBase.prototype.Recalculate_LineMetrics = function(PRS, ParaPr, _CurLine, _C
for (var CurPos = 0; CurPos <= this.Content.length - 1; CurPos++) for (var CurPos = 0; CurPos <= this.Content.length - 1; CurPos++)
{ {
var Item = this.Content[CurPos]; var Item = this.Content[CurPos];
Item.Recalculate_LineMetrics(PRS, ParaPr, _CurLine, _CurRange, NewContentMetrics); Item.Recalculate_LineMetrics(PRS, ParaPr, _CurLine, _CurRange, NewContentMetrics, bEmptyRange);
} }
//this.Bounds.UpdateMetrics(CurLine, CurRange, this.size); //this.Bounds.UpdateMetrics(CurLine, CurRange, this.size);
...@@ -2049,7 +2049,7 @@ CMathBase.prototype.Recalculate_LineMetrics = function(PRS, ParaPr, _CurLine, _C ...@@ -2049,7 +2049,7 @@ CMathBase.prototype.Recalculate_LineMetrics = function(PRS, ParaPr, _CurLine, _C
for (var CurPos = StartPos; CurPos <= EndPos; CurPos++) for (var CurPos = StartPos; CurPos <= EndPos; CurPos++)
{ {
var Item = this.Content[CurPos]; var Item = this.Content[CurPos];
Item.Recalculate_LineMetrics(PRS, ParaPr, _CurLine, _CurRange, ContentMetrics); Item.Recalculate_LineMetrics(PRS, ParaPr, _CurLine, _CurRange, ContentMetrics, bEmptyRange);
var BoundItem = Item.Get_LineBound(_CurLine, _CurRange); var BoundItem = Item.Get_LineBound(_CurLine, _CurRange);
......
...@@ -419,7 +419,7 @@ CDegree.prototype.Document_UpdateInterfaceState = function(MathProps) ...@@ -419,7 +419,7 @@ CDegree.prototype.Document_UpdateInterfaceState = function(MathProps)
MathProps.Type = c_oAscMathInterfaceType.Script; MathProps.Type = c_oAscMathInterfaceType.Script;
MathProps.Pr = null; MathProps.Pr = null;
}; };
CDegree.prototype.Recalculate_LineMetrics = function(PRS, ParaPr, _CurLine, _CurRange, ContentMetrics) CDegree.prototype.Recalculate_LineMetrics = function(PRS, ParaPr, _CurLine, _CurRange, ContentMetrics, bEmptyRange)
{ {
var CurLine = PRS.Line - this.StartLine; var CurLine = PRS.Line - this.StartLine;
var CurRange = ( 0 === CurLine ? PRS.Range - this.StartRange : PRS.Range ); var CurRange = ( 0 === CurLine ? PRS.Range - this.StartRange : PRS.Range );
...@@ -434,8 +434,8 @@ CDegree.prototype.Recalculate_LineMetrics = function(PRS, ParaPr, _CurLine, _Cur ...@@ -434,8 +434,8 @@ CDegree.prototype.Recalculate_LineMetrics = function(PRS, ParaPr, _CurLine, _Cur
// чтобы при вычислении метрик итератора не были перебили метрики (например, у внутр мат объекта Asc может быть больше Asc текущего объекта) // чтобы при вычислении метрик итератора не были перебили метрики (например, у внутр мат объекта Asc может быть больше Asc текущего объекта)
var NewContentMetrics = new CMathBoundsMeasures(); var NewContentMetrics = new CMathBoundsMeasures();
this.iterContent.Recalculate_LineMetrics(PRS, ParaPr, _CurLine, _CurRange, NewContentMetrics); this.iterContent.Recalculate_LineMetrics(PRS, ParaPr, _CurLine, _CurRange, NewContentMetrics, bEmptyRange);
this.baseContent.Recalculate_LineMetrics(PRS, ParaPr, _CurLine, _CurRange, NewContentMetrics); this.baseContent.Recalculate_LineMetrics(PRS, ParaPr, _CurLine, _CurRange, NewContentMetrics, bEmptyRange);
var BoundBase = this.baseContent.Get_LineBound(_CurLine, _CurRange); var BoundBase = this.baseContent.Get_LineBound(_CurLine, _CurRange);
var Bound; var Bound;
...@@ -456,7 +456,7 @@ CDegree.prototype.Recalculate_LineMetrics = function(PRS, ParaPr, _CurLine, _Cur ...@@ -456,7 +456,7 @@ CDegree.prototype.Recalculate_LineMetrics = function(PRS, ParaPr, _CurLine, _Cur
} }
else else
{ {
CDegreeBase.prototype.Recalculate_LineMetrics.call(this, PRS, ParaPr, _CurLine, _CurRange, ContentMetrics); CDegreeBase.prototype.Recalculate_LineMetrics.call(this, PRS, ParaPr, _CurLine, _CurRange, ContentMetrics, bEmptyRange);
} }
}; };
...@@ -824,7 +824,7 @@ CDegreeSubSup.prototype.fillContent = function() ...@@ -824,7 +824,7 @@ CDegreeSubSup.prototype.fillContent = function()
CDegreeSubSup.superclass.fillContent.call(this); CDegreeSubSup.superclass.fillContent.call(this);
}; };
CDegreeSubSup.prototype.Recalculate_LineMetrics = function(PRS, ParaPr, _CurLine, _CurRange, ContentMetrics) CDegreeSubSup.prototype.Recalculate_LineMetrics = function(PRS, ParaPr, _CurLine, _CurRange, ContentMetrics, bEmptyRange)
{ {
var CurLine = PRS.Line - this.StartLine; var CurLine = PRS.Line - this.StartLine;
var CurRange = ( 0 === CurLine ? PRS.Range - this.StartRange : PRS.Range ); var CurRange = ( 0 === CurLine ? PRS.Range - this.StartRange : PRS.Range );
...@@ -840,10 +840,10 @@ CDegreeSubSup.prototype.Recalculate_LineMetrics = function(PRS, ParaPr, _CurLine ...@@ -840,10 +840,10 @@ CDegreeSubSup.prototype.Recalculate_LineMetrics = function(PRS, ParaPr, _CurLine
var NewContentMetrics = new CMathBoundsMeasures(); var NewContentMetrics = new CMathBoundsMeasures();
this.Content[1].Recalculate_LineMetrics(PRS, ParaPr, _CurLine, _CurRange, NewContentMetrics); this.Content[1].Recalculate_LineMetrics(PRS, ParaPr, _CurLine, _CurRange, NewContentMetrics, bEmptyRange);
this.Content[2].Recalculate_LineMetrics(PRS, ParaPr, _CurLine, _CurRange, NewContentMetrics); this.Content[2].Recalculate_LineMetrics(PRS, ParaPr, _CurLine, _CurRange, NewContentMetrics, bEmptyRange);
// основание, baseContent // основание, baseContent
this.Content[0].Recalculate_LineMetrics(PRS, ParaPr, _CurLine, _CurRange, NewContentMetrics); this.Content[0].Recalculate_LineMetrics(PRS, ParaPr, _CurLine, _CurRange, NewContentMetrics, bEmptyRange);
var BoundBase = this.baseContent.Get_LineBound(_CurLine, _CurRange); var BoundBase = this.baseContent.Get_LineBound(_CurLine, _CurRange);
...@@ -858,7 +858,7 @@ CDegreeSubSup.prototype.Recalculate_LineMetrics = function(PRS, ParaPr, _CurLine ...@@ -858,7 +858,7 @@ CDegreeSubSup.prototype.Recalculate_LineMetrics = function(PRS, ParaPr, _CurLine
} }
else else
{ {
CDegreeBase.prototype.Recalculate_LineMetrics.call(this, PRS, ParaPr, _CurLine, _CurRange, ContentMetrics); CDegreeBase.prototype.Recalculate_LineMetrics.call(this, PRS, ParaPr, _CurLine, _CurRange, ContentMetrics, bEmptyRange);
} }
}; };
......
...@@ -4147,7 +4147,7 @@ CMathContent.prototype.Recalculate_MinMaxContentWidth = function(MinMax) ...@@ -4147,7 +4147,7 @@ CMathContent.prototype.Recalculate_MinMaxContentWidth = function(MinMax)
} }
}; };
CMathContent.prototype.Recalculate_LineMetrics = function(PRS, ParaPr, _CurLine, _CurRange, ContentMetrics) CMathContent.prototype.Recalculate_LineMetrics = function(PRS, ParaPr, _CurLine, _CurRange, ContentMetrics, bEmptyRange)
{ {
var CurLine = _CurLine - this.StartLine; var CurLine = _CurLine - this.StartLine;
var CurRange = (0 === CurLine ? _CurRange - this.StartRange : _CurRange); var CurRange = (0 === CurLine ? _CurRange - this.StartRange : _CurRange);
...@@ -4165,7 +4165,7 @@ CMathContent.prototype.Recalculate_LineMetrics = function(PRS, ParaPr, _CurLine, ...@@ -4165,7 +4165,7 @@ CMathContent.prototype.Recalculate_LineMetrics = function(PRS, ParaPr, _CurLine,
for(var Pos = StartPos; Pos <= EndPos; Pos++) for(var Pos = StartPos; Pos <= EndPos; Pos++)
{ {
var Item = this.Content[Pos]; var Item = this.Content[Pos];
Item.Recalculate_LineMetrics(PRS, ParaPr, _CurLine, _CurRange, NewContentMetrics); Item.Recalculate_LineMetrics(PRS, ParaPr, _CurLine, _CurRange, NewContentMetrics, bEmptyRange);
} }
this.Bounds.UpdateMetrics(CurLine, CurRange, NewContentMetrics); this.Bounds.UpdateMetrics(CurLine, CurRange, NewContentMetrics);
......
...@@ -592,11 +592,11 @@ CNary.prototype.Draw_Elements = function(PDSE) ...@@ -592,11 +592,11 @@ CNary.prototype.Draw_Elements = function(PDSE)
this.Arg.Draw_Elements(PDSE); this.Arg.Draw_Elements(PDSE);
}; };
CNary.prototype.Recalculate_LineMetrics = function(PRS, ParaPr, _CurLine, _CurRange, ContentMetrics) CNary.prototype.Recalculate_LineMetrics = function(PRS, ParaPr, _CurLine, _CurRange, ContentMetrics, bEmptyRange)
{ {
if(this.bOneLine) if(this.bOneLine)
{ {
CNary.superclass.Recalculate_LineMetrics.call(this, PRS, ParaPr, _CurLine, _CurRange, ContentMetrics); CNary.superclass.Recalculate_LineMetrics.call(this, PRS, ParaPr, _CurLine, _CurRange, ContentMetrics, bEmptyRange);
} }
else else
{ {
...@@ -606,7 +606,7 @@ CNary.prototype.Recalculate_LineMetrics = function(PRS, ParaPr, _CurLine, _CurRa ...@@ -606,7 +606,7 @@ CNary.prototype.Recalculate_LineMetrics = function(PRS, ParaPr, _CurLine, _CurRa
// т.к. ParaNumbering привязывается к первому текстовому элементы, он может находится в аргументе // т.к. ParaNumbering привязывается к первому текстовому элементы, он может находится в аргументе
// обновляем LineMetrics для Base после того, как обновим метрики для аргумента // обновляем LineMetrics для Base после того, как обновим метрики для аргумента
this.Arg.Recalculate_LineMetrics(PRS, ParaPr, _CurLine, _CurRange, ContentMetrics); this.Arg.Recalculate_LineMetrics(PRS, ParaPr, _CurLine, _CurRange, ContentMetrics, bEmptyRange);
var BoundArg = this.Arg.Get_LineBound(_CurLine, _CurRange); var BoundArg = this.Arg.Get_LineBound(_CurLine, _CurRange);
...@@ -631,10 +631,10 @@ CNary.prototype.Recalculate_LineMetrics = function(PRS, ParaPr, _CurLine, _CurRa ...@@ -631,10 +631,10 @@ CNary.prototype.Recalculate_LineMetrics = function(PRS, ParaPr, _CurLine, _CurRa
var NewContentMetrics = new CMathBoundsMeasures(); var NewContentMetrics = new CMathBoundsMeasures();
this.LowerIterator.Recalculate_LineMetrics(PRS, ParaPr, _CurLine, _CurRange, NewContentMetrics); this.LowerIterator.Recalculate_LineMetrics(PRS, ParaPr, _CurLine, _CurRange, NewContentMetrics, bEmptyRange);
this.UpperIterator.Recalculate_LineMetrics(PRS, ParaPr, _CurLine, _CurRange, NewContentMetrics); this.UpperIterator.Recalculate_LineMetrics(PRS, ParaPr, _CurLine, _CurRange, NewContentMetrics, bEmptyRange);
this.Base.Recalculate_LineMetrics(PRS, ParaPr, _CurLine, _CurRange, ContentMetrics); this.Base.Recalculate_LineMetrics(PRS, ParaPr, _CurLine, _CurRange, ContentMetrics, bEmptyRange);
this.Bounds.UpdateMetrics(CurLine, CurRange, this.Base.size); this.Bounds.UpdateMetrics(CurLine, CurRange, this.Base.size);
this.UpdatePRS(PRS, this.Base.size); this.UpdatePRS(PRS, this.Base.size);
......
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