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

1. После отрисовки глифа сделала beginPath у pGraphics (для того чтобы каждый...

1. После отрисовки глифа сделала beginPath у pGraphics (для того чтобы каждый глиф отрисовывался один раз на Draw)
2. Поправила баг : если формула выходила за границы документа, после удаления части контента так, что формула переставала выходить за границы, она должна была пересчитаться полностью(т.е. не черех быстрый пересчет). Это не происходило, т.к. не пересчитывался параметр выхода за границы формулы => сравнение для быстрого пересчета проходило некорректно.

git-svn-id: svn://192.168.3.15/activex/AVS/Sources/TeamlabOffice/trunk/OfficeWeb@62920 954022d7-b5bf-4e40-9824-e11837661b57
parent 36133447
...@@ -187,7 +187,7 @@ function Get_WordDocumentDefaultMathSettings() ...@@ -187,7 +187,7 @@ function Get_WordDocumentDefaultMathSettings()
return editor.WordControl.m_oLogicDocument.Settings.MathSettings; return editor.WordControl.m_oLogicDocument.Settings.MathSettings;
} }
function MathMenu (type) function MathMenu(type)
{ {
this.Type = para_Math; this.Type = para_Math;
this.Menu = type; this.Menu = type;
...@@ -198,32 +198,43 @@ MathMenu.prototype = ...@@ -198,32 +198,43 @@ MathMenu.prototype =
{ {
return this.Type; return this.Type;
} }
};
function CMathParametersWidth()
{
this.Measure = 0;
this.bMathWordLarge = false;
} }
function CParaMathLineWidths() function CParaMathLineWidths()
{ {
this.Widths = []; this.Widths = [];
this.MinW = 0; // without first line this.bLarge = false;
this.MaxW = 0; // without first line this.MinW = 0; // without first line
this.MaxW = 0; // without first line
} }
CParaMathLineWidths.prototype.UpdateWidth = function(Line, W) CParaMathLineWidths.prototype.UpdateWidth = function(Line, W)
{ {
var CurLine = Line; var bFastUpdate = false;
var bFastUpdate = CurLine >= this.Widths.length; if(Line >= this.Widths.length)
{
bFastUpdate = true;
this.Widths[Line] = new CMathParametersWidth();
}
var bUpdMaxWidth = false; var bUpdMaxWidth = false;
var bNeedUpdate = bFastUpdate == false && Math.abs(this.Widths[CurLine] - W) > 0.00001; var bNeedUpdate = bFastUpdate == false && Math.abs(this.Widths[Line].Measure - W) > 0.00001;
this.Widths[CurLine] = W; // присваиваем до RecalcMaxMin this.Widths[Line].Measure = W; // присваиваем до RecalcMaxMin
if(CurLine !== 0) if(Line !== 0)
{ {
if(bFastUpdate) if(bFastUpdate)
{ {
bUpdMaxWidth = this.UpdateMinMax(CurLine); bUpdMaxWidth = this.UpdateMinMax(Line);
} }
else if(bNeedUpdate) else if(bNeedUpdate)
{ {
...@@ -232,8 +243,8 @@ CParaMathLineWidths.prototype.UpdateWidth = function(Line, W) ...@@ -232,8 +243,8 @@ CParaMathLineWidths.prototype.UpdateWidth = function(Line, W)
if(lng > 1) if(lng > 1)
{ {
this.MaxW = this.Widths[1]; this.MaxW = this.Widths[1].Measure;
this.MinW = this.Widths[1]; this.MinW = this.Widths[1].Measure;
for(var i = 2; i < lng; i++) for(var i = 2; i < lng; i++)
{ {
...@@ -247,6 +258,38 @@ CParaMathLineWidths.prototype.UpdateWidth = function(Line, W) ...@@ -247,6 +258,38 @@ CParaMathLineWidths.prototype.UpdateWidth = function(Line, W)
return bUpdMaxWidth; return bUpdMaxWidth;
}; };
CParaMathLineWidths.prototype.SetWordLarge = function(Line, bWordLarge)
{
if(Line >= this.Widths.length)
{
this.Widths[Line] = new CMathParametersWidth();
this.bLarge = this.bLarge || bWordLarge;
}
else
{
if(this.Widths[Line].bMathWordLarge !== bWordLarge)
{
this.Widths[Line].bMathWordLarge = bWordLarge;
var Lng = this.Widths.length;
this.bLarge = false;
for(var Pos = 0; Pos < Lng; Pos++)
{
if(this.Widths[Pos].bMathWordLarge == true)
{
this.bLarge = true;
break;
}
}
}
}
};
CParaMathLineWidths.prototype.IsLarge = function()
{
return this.bLarge;
};
CParaMathLineWidths.prototype.Get = function(Line) CParaMathLineWidths.prototype.Get = function(Line)
{ {
return this.private_GetW(Line); return this.private_GetW(Line);
...@@ -267,7 +310,7 @@ CParaMathLineWidths.prototype.UpdateMinMax = function(Pos) ...@@ -267,7 +310,7 @@ CParaMathLineWidths.prototype.UpdateMinMax = function(Pos)
{ {
var bUpdMaxWidth = false; var bUpdMaxWidth = false;
var Item = this.Widths[Pos]; var Item = this.Widths[Pos].Measure;
if(this.MaxW < Item) if(this.MaxW < Item)
{ {
...@@ -287,7 +330,7 @@ CParaMathLineWidths.prototype.private_GetW = function(CurLine) ...@@ -287,7 +330,7 @@ CParaMathLineWidths.prototype.private_GetW = function(CurLine)
var res; var res;
if(CurLine < this.Widths.length) if(CurLine < this.Widths.length)
res = this.Widths[CurLine]; res = this.Widths[CurLine].Measure;
return res; return res;
}; };
...@@ -312,6 +355,10 @@ CMathInfo.prototype.GetCountLines = function() ...@@ -312,6 +355,10 @@ CMathInfo.prototype.GetCountLines = function()
{ {
return this.LineWidths.GetCountLines(); return this.LineWidths.GetCountLines();
}; };
CMathInfo.prototype.GetNumberLine = function(Line)
{
return Line - this.FirstLineOnPage;
};
function CMathPageInfo() function CMathPageInfo()
{ {
...@@ -368,10 +415,15 @@ CMathPageInfo.prototype.SetNextWrapState = function() ...@@ -368,10 +415,15 @@ CMathPageInfo.prototype.SetNextWrapState = function()
if(InfoPage.WrapState !== ALIGN_EMPTY) if(InfoPage.WrapState !== ALIGN_EMPTY)
InfoPage.WrapState++; InfoPage.WrapState++;
}; };
CMathPageInfo.prototype.SetStateWordLarge = function(bWordLarge) CMathPageInfo.prototype.SetStateWordLarge = function(_Line, bWordLarge)
{ {
this.private_CheckInfo(this.CurPage); this.private_CheckInfo(this.CurPage);
this.Info[this.CurPage].bWordLarge = bWordLarge;
var Line = this.Info[this.CurPage].GetNumberLine(_Line - this.StartLine);
this.Info[this.CurPage].LineWidths.SetWordLarge(Line, bWordLarge);
//var Line = _Line - this.StartLine - this.Info[this.CurPage].FirstLineOnPage;
}; };
CMathPageInfo.prototype.GetWrap = function(_Page) CMathPageInfo.prototype.GetWrap = function(_Page)
{ {
...@@ -381,7 +433,7 @@ CMathPageInfo.prototype.GetWrap = function(_Page) ...@@ -381,7 +433,7 @@ CMathPageInfo.prototype.GetWrap = function(_Page)
}; };
CMathPageInfo.prototype.GetCurrentStateWordLarge = function() CMathPageInfo.prototype.GetCurrentStateWordLarge = function()
{ {
return this.Info[this.CurPage].bWordLarge; return this.Info[this.CurPage].LineWidths.IsLarge();
}; };
CMathPageInfo.prototype.IsFirstPage = function(_Page) CMathPageInfo.prototype.IsFirstPage = function(_Page)
{ {
...@@ -395,7 +447,8 @@ CMathPageInfo.prototype.UpdateCurrentWidth = function(_Line, Width) ...@@ -395,7 +447,8 @@ CMathPageInfo.prototype.UpdateCurrentWidth = function(_Line, Width)
{ {
this.private_CheckInfo(this.CurPage); this.private_CheckInfo(this.CurPage);
var Line = _Line - this.StartLine - this.Info[this.CurPage].FirstLineOnPage; var Line = this.Info[this.CurPage].GetNumberLine(_Line - this.StartLine);
//var Line = _Line - this.StartLine - this.Info[this.CurPage].FirstLineOnPage;
return this.Info[this.CurPage].LineWidths.UpdateWidth(Line, Width); return this.Info[this.CurPage].LineWidths.UpdateWidth(Line, Width);
}; };
...@@ -1156,7 +1209,7 @@ ParaMath.prototype.Recalculate_Range = function(PRS, ParaPr, Depth) ...@@ -1156,7 +1209,7 @@ ParaMath.prototype.Recalculate_Range = function(PRS, ParaPr, Depth)
this.Root.Math_UpdateGaps(ParaLine, ParaRange); this.Root.Math_UpdateGaps(ParaLine, ParaRange);
} }
console.log("Line " + PRS.Line);
this.Root.Recalculate_Range(PRS, ParaPr, Depth); this.Root.Recalculate_Range(PRS, ParaPr, Depth);
if(PRS.NewRange == false) if(PRS.NewRange == false)
...@@ -1174,10 +1227,8 @@ ParaMath.prototype.Recalculate_Range = function(PRS, ParaPr, Depth) ...@@ -1174,10 +1227,8 @@ ParaMath.prototype.Recalculate_Range = function(PRS, ParaPr, Depth)
this.UpdateWidthLine(PRS, WidthLine); this.UpdateWidthLine(PRS, WidthLine);
} }
if(PRS.X + PRS.SpaceLen + PRS.WordLen > PRS.XEnd && WrapState == ALIGN_EMPTY) var bWordLarge = PRS.bMathWordLarge == true && WrapState == ALIGN_EMPTY;
{ this.PageInfo.SetStateWordLarge(PRS.Line, bWordLarge);
this.PageInfo.SetStateWordLarge(true);
}
if(PRS.bMathWordLarge == true && WrapState !== ALIGN_EMPTY) if(PRS.bMathWordLarge == true && WrapState !== ALIGN_EMPTY)
{ {
...@@ -3213,8 +3264,8 @@ CMathRecalculateInfo.prototype.ClearRecalculate = function() ...@@ -3213,8 +3264,8 @@ CMathRecalculateInfo.prototype.ClearRecalculate = function()
function CMathRecalculateObject() function CMathRecalculateObject()
{ {
this.WrapState = ALIGN_EMPTY; this.WrapState = ALIGN_EMPTY;
this.MaxW = 0; this.MaxW = 0; // для рассчета выравнивания формулы нужно учитывать изменилась ли максимальная ширина или нет
this.bWordLarge = false; this.bWordLarge = false; // если формула выходит за границы докумена, то не нужно учитывать выравнивание, а значит можно сделать быстрый пересчет
this.bFastRecalculate = true; /*если добавляем буквы во внутренний контент, который не бьется на строки, то отменяем быстрый пересчет, this.bFastRecalculate = true; /*если добавляем буквы во внутренний контент, который не бьется на строки, то отменяем быстрый пересчет,
т.к. высота контента может поменяться (она рассчитывается точно исходя из размеров внутр элементов)*/ т.к. высота контента может поменяться (она рассчитывается точно исходя из размеров внутр элементов)*/
...@@ -3227,7 +3278,7 @@ CMathRecalculateObject.prototype.Fill = function(StructRecalc) ...@@ -3227,7 +3278,7 @@ CMathRecalculateObject.prototype.Fill = function(StructRecalc)
this.bInline = StructRecalc.bInline; this.bInline = StructRecalc.bInline;
this.Align = StructRecalc.Align; this.Align = StructRecalc.Align;
var PageInfo = StructRecalc.PageInfo; var PageInfo = StructRecalc.PageInfo;
this.WrapState = PageInfo.GetCurrentWrapState(); this.WrapState = PageInfo.GetCurrentWrapState();
this.MaxW = PageInfo.GetCurrentMaxWidthAllLines(); this.MaxW = PageInfo.GetCurrentMaxWidthAllLines();
......
...@@ -1619,6 +1619,7 @@ CMathBase.prototype.Draw_Lines = function(PDSL) ...@@ -1619,6 +1619,7 @@ CMathBase.prototype.Draw_Lines = function(PDSL)
var ArgSize = this.Get_CompiledArgSize(); var ArgSize = this.Get_CompiledArgSize();
var fontCoeff = MatGetKoeffArgSize(CtrPrp.FontSize, ArgSize.value); var fontCoeff = MatGetKoeffArgSize(CtrPrp.FontSize, ArgSize.value);
// вычисляем координату Y и LineW также как в Run
var X = PDSL.X; var X = PDSL.X;
var Y = PDSL.Baseline - CtrPrp.FontSize * fontCoeff * g_dKoef_pt_to_mm * 0.27; var Y = PDSL.Baseline - CtrPrp.FontSize * fontCoeff * g_dKoef_pt_to_mm * 0.27;
......
...@@ -3924,7 +3924,6 @@ CMathContent.prototype.Recalculate_Range = function(PRS, ParaPr, Depth) ...@@ -3924,7 +3924,6 @@ CMathContent.prototype.Recalculate_Range = function(PRS, ParaPr, Depth)
PRS.SpaceLen = 0; PRS.SpaceLen = 0;
PRS.WordLen = 0; PRS.WordLen = 0;
PRS.XRange = PRS.X; PRS.XRange = PRS.X;
} }
} }
......
...@@ -956,6 +956,7 @@ CNaryOperator.prototype.drawGlyph = function(x, y, pGraphics, PDSE) ...@@ -956,6 +956,7 @@ CNaryOperator.prototype.drawGlyph = function(x, y, pGraphics, PDSE)
this.drawPath(pGraphics, XX,YY); this.drawPath(pGraphics, XX,YY);
pGraphics.df(); pGraphics.df();
pGraphics._s();
pGraphics.SetIntegerGrid(intGrid); pGraphics.SetIntegerGrid(intGrid);
}; };
CNaryOperator.prototype.drawTextElem = function(x, y, pGraphics) CNaryOperator.prototype.drawTextElem = function(x, y, pGraphics)
......
...@@ -393,6 +393,7 @@ CGlyphOperator.prototype.draw = function(pGraphics, XX, YY, PDSE) ...@@ -393,6 +393,7 @@ CGlyphOperator.prototype.draw = function(pGraphics, XX, YY, PDSE)
this.drawPath(pGraphics, XX,YY, PDSE); this.drawPath(pGraphics, XX,YY, PDSE);
pGraphics.df(); pGraphics.df();
pGraphics._s();
pGraphics.SetIntegerGrid(intGrid); pGraphics.SetIntegerGrid(intGrid);
}; };
CGlyphOperator.prototype.drawOnlyLines = function(x, y, pGraphics, PDSE) CGlyphOperator.prototype.drawOnlyLines = function(x, y, pGraphics, PDSE)
......
...@@ -112,6 +112,8 @@ CSignRadical.prototype.new_draw = function(x, y, pGraphics) ...@@ -112,6 +112,8 @@ CSignRadical.prototype.new_draw = function(x, y, pGraphics)
pGraphics._l(x5 + penW/3*sin, y4 - penW/5); pGraphics._l(x5 + penW/3*sin, y4 - penW/5);
pGraphics.ds(); pGraphics.ds();
pGraphics._s();
}; };
CSignRadical.prototype.draw = function(x, y, pGraphics, PDSE) CSignRadical.prototype.draw = function(x, y, pGraphics, PDSE)
{ {
...@@ -209,7 +211,7 @@ CSignRadical.prototype.draw = function(x, y, pGraphics, PDSE) ...@@ -209,7 +211,7 @@ CSignRadical.prototype.draw = function(x, y, pGraphics, PDSE)
pGraphics._l(x9, y9); pGraphics._l(x9, y9);
pGraphics.ds(); pGraphics.ds();
pGraphics._s();
}; };
CSignRadical.prototype.recalculateSize = function(oMeasure, sizeArg) CSignRadical.prototype.recalculateSize = function(oMeasure, sizeArg)
{ {
......
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