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

1. Переделала Recalculate_MinMaxContentWidth

2. Поправила падение при отрисовке линейной дроби
3. Поправила зависание документа при пересчете формулы и картинки (прикреплена к предыдущему параграфу). 
Проблема возникала из-за того, что ширина могла обновиться больше одного раза пересчет(и соответственно максимальная ширина тоже), в связи с этим обновляли значение предыдущей максимальной ширины несколько раз.
4. Поправила баг : не учитывалось умещается ли N-арный оператор в Range, как следствие, он мог отрисоваться поверх картинки
5. Поправила падение в инлайновой формуле для случая, когда картинка шла перед формулой

git-svn-id: svn://192.168.3.15/activex/AVS/Sources/TeamlabOffice/trunk/OfficeWeb@63368 954022d7-b5bf-4e40-9824-e11837661b57
parent a16f9f74
...@@ -219,8 +219,6 @@ CParaMathLineWidths.prototype.UpdateWidth = function(Line, W) ...@@ -219,8 +219,6 @@ 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;
...@@ -260,6 +258,10 @@ CParaMathLineWidths.prototype.UpdateWidth = function(Line, W) ...@@ -260,6 +258,10 @@ CParaMathLineWidths.prototype.UpdateWidth = function(Line, W)
return bUpdMaxWidth; return bUpdMaxWidth;
}; };
CParaMathLineWidths.prototype.UpdatePrevMaxWidth = function()
{
this.PrevMaxW = this.MaxW;
};
CParaMathLineWidths.prototype.SetWordLarge = function(Line, bWordLarge) CParaMathLineWidths.prototype.SetWordLarge = function(Line, bWordLarge)
{ {
if(Line >= this.Widths.length) if(Line >= this.Widths.length)
...@@ -442,6 +444,10 @@ CMathPageInfo.prototype.GetStarLinetWidth = function() ...@@ -442,6 +444,10 @@ CMathPageInfo.prototype.GetStarLinetWidth = function()
{ {
return this.Info[0].LineWidths.GetFirst(); return this.Info[0].LineWidths.GetFirst();
}; };
CMathPageInfo.prototype.UpdatePrevMaxWidth = function()
{
this.Info[this.CurPage].LineWidths.UpdatePrevMaxWidth();
};
CMathPageInfo.prototype.UpdateCurrentWidth = function(_Line, Width) CMathPageInfo.prototype.UpdateCurrentWidth = function(_Line, Width)
{ {
var Line = this.Info[this.CurPage].GetNumberLine(_Line - this.StartLine); var Line = this.Info[this.CurPage].GetNumberLine(_Line - this.StartLine);
...@@ -1232,13 +1238,6 @@ ParaMath.prototype.Recalculate_Range = function(PRS, ParaPr, Depth) ...@@ -1232,13 +1238,6 @@ ParaMath.prototype.Recalculate_Range = function(PRS, ParaPr, Depth)
}; };
ParaMath.prototype.private_InitWrapSettings = function(PRS) ParaMath.prototype.private_InitWrapSettings = function(PRS)
{ {
//var ParaLine = PRS.Line;
//var ParaRange = PRS.Range;
//var bFirstRange = this.Root.IsFirstRange(ParaLine, ParaRange);
//var PrevLineObject = PRS.RestartPageRecalcInfo.Object;
//if(PrevLineObject == null && true == bFirstRange && PRS.bFastRecalculate == false && this.ParaMathRPI.bInternalRanges == false)
var XStart, XEnd, IndexRange; var XStart, XEnd, IndexRange;
if(this.ParaMathRPI.bStartRanges == true) if(this.ParaMathRPI.bStartRanges == true)
...@@ -1338,6 +1337,7 @@ ParaMath.prototype.private_RecalculateRangeWrap = function(PRS, ParaPr, Depth) ...@@ -1338,6 +1337,7 @@ ParaMath.prototype.private_RecalculateRangeWrap = function(PRS, ParaPr, Depth)
this.private_UpdateXLimits(PRS); this.private_UpdateXLimits(PRS);
this.PageInfo.UpdatePrevMaxWidth();
this.private_RecalculateRoot(PRS, ParaPr, Depth); this.private_RecalculateRoot(PRS, ParaPr, Depth);
if(PRS.RecalcResult == recalcresult_PrevLine && PRS.Range < PRS.Ranges.length) if(PRS.RecalcResult == recalcresult_PrevLine && PRS.Range < PRS.Ranges.length)
...@@ -1610,35 +1610,12 @@ ParaMath.prototype.Refresh_RecalcData2 = function(Data) ...@@ -1610,35 +1610,12 @@ ParaMath.prototype.Refresh_RecalcData2 = function(Data)
ParaMath.prototype.Recalculate_MinMaxContentWidth = function(MinMax) ParaMath.prototype.Recalculate_MinMaxContentWidth = function(MinMax)
{ {
// TODO переделать var RPI = new CRPI();
if (true === this.NeedResize) RPI.MergeMathInfo(this.ParaMathRPI);
{ var ArgSize = new CMathArgSize();
var RPI = new CRPI();
RPI.MergeMathInfo(this.ParaMathRPI);
this.Root.PreRecalc(null, this, new CMathArgSize(), RPI);
this.Root.Resize(g_oTextMeasurer, RPI);
this.Width = this.Root.size.width;
}
if ( false === MinMax.bWord )
{
MinMax.bWord = true;
MinMax.nWordLen = this.Width;
}
else
{
MinMax.nWordLen += this.Width;
}
if ( MinMax.nSpaceLen > 0 )
{
MinMax.nCurMaxWidth += MinMax.nSpaceLen;
MinMax.nSpaceLen = 0;
}
MinMax.nCurMaxWidth += this.Width; this.Root.PreRecalc(null, this, ArgSize, RPI);
this.Root.Recalculate_MinMaxContentWidth(MinMax);
}; };
ParaMath.prototype.Get_Range_VisibleWidth = function(RangeW, _CurLine, _CurRange) ParaMath.prototype.Get_Range_VisibleWidth = function(RangeW, _CurLine, _CurRange)
......
This diff is collapsed.
...@@ -112,7 +112,7 @@ CFraction.prototype.drawSkewedFraction = function(PDSE) ...@@ -112,7 +112,7 @@ CFraction.prototype.drawSkewedFraction = function(PDSE)
{ {
var mgCtrPrp = this.Get_TxtPrControlLetter(); var mgCtrPrp = this.Get_TxtPrControlLetter();
var penW = mgCtrPrp.FontSize/12.5*g_dKoef_pix_to_mm; var penW = mgCtrPrp.FontSize*0.0211;
var gap = this.dW/2 - penW/7.5; var gap = this.dW/2 - penW/7.5;
var plh = 9.877777777777776 * mgCtrPrp.FontSize / 36; var plh = 9.877777777777776 * mgCtrPrp.FontSize / 36;
...@@ -219,7 +219,7 @@ CFraction.prototype.drawLinearFraction = function(PDSE) ...@@ -219,7 +219,7 @@ CFraction.prototype.drawLinearFraction = function(PDSE)
y2 = Y + this.size.height; y2 = Y + this.size.height;
var mgCtrPrp = this.Get_TxtPrControlLetter(); var mgCtrPrp = this.Get_TxtPrControlLetter();
var penW = mgCtrPrp.FontSize/12.5*g_dKoef_pix_to_mm; var penW = mgCtrPrp.FontSize*0.0211;
PDSE.Graphics.SetFont(mgCtrPrp); PDSE.Graphics.SetFont(mgCtrPrp);
PDSE.Graphics.p_width(penW*1000); PDSE.Graphics.p_width(penW*1000);
......
...@@ -237,7 +237,7 @@ CMathFunc.prototype.GetFirstElement = function() ...@@ -237,7 +237,7 @@ CMathFunc.prototype.GetFirstElement = function()
}; };
CMathFunc.prototype.setDistance = function() CMathFunc.prototype.setDistance = function()
{ {
this.dW = this.Get_TxtPrControlLetter().FontSize/6*g_dKoef_pt_to_mm; this.dW = this.Get_TxtPrControlLetter().FontSize*0.044;
}; };
CMathFunc.prototype.getFName = function() CMathFunc.prototype.getFName = function()
{ {
......
...@@ -3661,48 +3661,6 @@ CMathContent.prototype.Select_All = function(Direction) ...@@ -3661,48 +3661,6 @@ CMathContent.prototype.Select_All = function(Direction)
this.Content[nPos].Select_All(Direction); this.Content[nPos].Select_All(Direction);
} }
}; };
CMathContent.prototype.old_Selection_DrawRange = function(_CurLine, _CurRange, SelectionDraw)
{
var Start = this.Selection.Start;
var End = this.Selection.End;
if(Start > End)
{
Start = this.Selection.End;
End = this.Selection.Start;
}
SelectionDraw.StartX += this.pos.x;
var PointsInfo = new CMathPointInfo();
PointsInfo.SetInfoPoints(this.InfoPoints);
var bDrawSelection = false;
for(var nPos = 0, nCount = this.Content.length; nPos < nCount; nPos++)
{
bDrawSelection = nPos >= Start && nPos <= End ? true : false;
if(para_Math_Run === this.Content[nPos].Type)
this.Content[nPos].Selection_DrawRange(_CurLine, _CurRange, SelectionDraw, PointsInfo);
else
{
if(true === bDrawSelection)
{
SelectionDraw.W += this.Content[nPos].size.width;
SelectionDraw.FindStart = false;
}
else if(true === SelectionDraw.FindStart)
SelectionDraw.StartX += this.Content[nPos].size.width;
}
}
// Выставляем высоту селекта. В верхнем контенте высота задается параграфом
if(true !== this.bRoot)
{
SelectionDraw.StartY = this.ParaMath.Y + this.pos.y;
SelectionDraw.H = this.size.height;
}
};
CMathContent.prototype.Selection_DrawRange = function(_CurLine, _CurRange, SelectionDraw) CMathContent.prototype.Selection_DrawRange = function(_CurLine, _CurRange, SelectionDraw)
{ {
var SelectionStartPos = this.Selection.Start; var SelectionStartPos = this.Selection.Start;
...@@ -3885,7 +3843,7 @@ CMathContent.prototype.Recalculate_Range = function(PRS, ParaPr, Depth) ...@@ -3885,7 +3843,7 @@ CMathContent.prototype.Recalculate_Range = function(PRS, ParaPr, Depth)
var Brk_Before = this.ParaMath.Is_BrkBinBefore(); var Brk_Before = this.ParaMath.Is_BrkBinBefore();
// для внутристроковой формулы : начало формулы - начало нового слова // для внутристроковой формулы : начало формулы - начало нового слова
if(this.bRoot && bInline && RangeStartPos == 0) if(this.bRoot && bInline && true == this.IsFirstRange(PRS.Line, PRS.Range))
{ {
PRS.Update_CurPos(0, Depth); PRS.Update_CurPos(0, Depth);
PRS.Update_CurPos(0, Depth+1); // нулевой элемент всегда Run PRS.Update_CurPos(0, Depth+1); // нулевой элемент всегда Run
...@@ -3946,6 +3904,8 @@ CMathContent.prototype.Recalculate_Range = function(PRS, ParaPr, Depth) ...@@ -3946,6 +3904,8 @@ CMathContent.prototype.Recalculate_Range = function(PRS, ParaPr, Depth)
var PrevLastPos = PRS.PosEndRun.Get(_Depth-1), var PrevLastPos = PRS.PosEndRun.Get(_Depth-1),
LastPos = PRS.PosEndRun.Get(_Depth); LastPos = PRS.PosEndRun.Get(_Depth);
var PrevWord = PRS.Word;
Item.Recalculate_Range(PRS, ParaPr, Depth + 1); Item.Recalculate_Range(PRS, ParaPr, Depth + 1);
PRS.bBoxOperator = Type == para_Math_Composition && Item.kind == MATH_BOX; PRS.bBoxOperator = Type == para_Math_Composition && Item.kind == MATH_BOX;
...@@ -4018,7 +3978,8 @@ CMathContent.prototype.Recalculate_Range = function(PRS, ParaPr, Depth) ...@@ -4018,7 +3978,8 @@ CMathContent.prototype.Recalculate_Range = function(PRS, ParaPr, Depth)
var bInsideOperator = Item.bOneLine == false && PRS.bInsideOper == true; var bInsideOperator = Item.bOneLine == false && PRS.bInsideOper == true;
// обновляем BreakPos на конец Run, т.к. внутри мат объекта BreakPos может измениться на if(true !== Word) // обновляем BreakPos на конец Run, т.к. внутри мат объекта BreakPos может измениться на if(true !== Word)
if(Brk_Before == false && bNoOneBreakOperator == false && bInsideOperator == false) // обновляем только в том случае, если Word = false, иначе можем здесь перебить корректный LineBreakPos
if(PrevWord == false && Brk_Before == false && bNoOneBreakOperator == false && bInsideOperator == false)
{ {
// обновим : начало нового слова - конец предыдущего Run // обновим : начало нового слова - конец предыдущего Run
......
...@@ -477,7 +477,6 @@ CNary.prototype.Recalculate_Range = function(PRS, ParaPr, Depth) ...@@ -477,7 +477,6 @@ CNary.prototype.Recalculate_Range = function(PRS, ParaPr, Depth)
var RangeStartPos = this.protected_AddRange(CurLine, CurRange), var RangeStartPos = this.protected_AddRange(CurLine, CurRange),
RangeEndPos = 2; RangeEndPos = 2;
//this.VerifyWordLen(PRS);
if(CurLine == 0 && CurRange == 0) if(CurLine == 0 && CurRange == 0)
{ {
...@@ -509,6 +508,19 @@ CNary.prototype.Recalculate_Range = function(PRS, ParaPr, Depth) ...@@ -509,6 +508,19 @@ CNary.prototype.Recalculate_Range = function(PRS, ParaPr, Depth)
PRS.WordLen += this.dW; PRS.WordLen += this.dW;
if(PRS.X + PRS.SpaceLen + PRS.WordLen > PRS.XEnd)
{
var _Depth = PRS.PosEndRun.Depth;
var PrevLastPos = PRS.PosEndRun.Get(_Depth-1),
LastPos = PRS.PosEndRun.Get(_Depth);
PRS.Update_CurPos(PrevLastPos, _Depth-1);
PRS.Set_LineBreakPos(LastPos);
PRS.MoveToLBP = true;
PRS.NewRange = true;
return;
}
this.Arg.Recalculate_Reset(PRS.Range, PRS.Line, PRS); // обновим StartLine и StartRange this.Arg.Recalculate_Reset(PRS.Range, PRS.Line, PRS); // обновим StartLine и StartRange
} }
......
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