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

1. Не учитывалась ширина первой строки при расчете выравнивания на быстром пересчете

2. Сделала корректировка формул после конвертации старых формул в новые

git-svn-id: svn://192.168.3.15/activex/AVS/Sources/TeamlabOffice/trunk/OfficeWeb@62773 954022d7-b5bf-4e40-9824-e11837661b57
parent 5a815227
......@@ -251,6 +251,10 @@ CParaMathLineWidths.prototype.Get = function(Line)
{
return this.private_GetW(Line);
};
CParaMathLineWidths.prototype.GetFirst = function()
{
return this.private_GetW(0);
};
CParaMathLineWidths.prototype.GetMax = function()
{
return this.MaxW;
......@@ -388,6 +392,28 @@ CMathPageInfo.prototype.GetCurrentMaxWidth = function()
{
return this.Info[this.CurPage].LineWidths.GetMax();
};
CMathPageInfo.prototype.GetCurrentMaxWidthAllLines = function()
{
var MaxW = 0;
if(this.CurPage !== 0)
{
MaxW = this.Info[this.CurPage].LineWidths.GetMax();
}
else
{
var MaxWOFirst = this.Info[this.CurPage].LineWidths.GetMax(),
FirstW = this.Info[this.CurPage].LineWidths.GetFirst();
var MathSettings = Get_WordDocumentDefaultMathSettings(),
WrapState = this.GetCurrentWrapState();
var wrapIndent = MathSettings.Get_WrapIndent(WrapState);
MaxW = FirstW + wrapIndent > MaxWOFirst ? FirstW + wrapIndent : MaxWOFirst;
}
return MaxW;
};
CMathPageInfo.prototype.GetMaxWidthOnPage = function(_Page) // without first page
{
var Page = _Page - this.StartPage;
......@@ -489,7 +515,6 @@ ParaMath.prototype.Copy = function(Selected)
/// argSize, bDot и bRoot выставить на объединении контентов
NewMath.SetNeedResize();
NewMath.Root.Correct_Content(true);
return NewMath;
......@@ -554,8 +579,6 @@ ParaMath.prototype.Get_CompiledTextPr = function(Copy)
ParaMath.prototype.Add = function(Item)
{
this.ParaMathRPI.NeedResize = true;
var Type = Item.Type;
var oSelectedContent = this.GetSelectContent();
......@@ -713,7 +736,6 @@ ParaMath.prototype.Get_AlignToLine = function(_CurLine, _CurRange, _Page, _X, _X
};
ParaMath.prototype.Remove = function(Direction, bOnAddText)
{
this.ParaMathRPI.NeedResize = true;
var oSelectedContent = this.GetSelectContent();
var nStartPos = oSelectedContent.Start;
......@@ -866,9 +888,6 @@ ParaMath.prototype.Apply_TextPr = function(TextPr, IncFontSize, ApplyToAll)
{
// TODO: ParaMath.Apply_TextPr
this.ParaMathRPI.NeedResize = true;
if(ApplyToAll == true) // для ситуации, когда ApplyToAll = true, в Root формулы при этом позиции селекта не проставлены
{
this.Root.Apply_TextPr(TextPr, IncFontSize, true);
......@@ -1091,6 +1110,7 @@ ParaMath.prototype.Recalculate_Range = function(PRS, ParaPr, Depth)
var DispDef = MathSettings.Get_DispDef(),
bInline = this.ParaMathRPI.bInline;
//здесь обновляем WrapState, исходя из этого параметра будем считать WrapIndent
this.PageInfo.UpdateCurrentWrap(DispDef, bInline);
var WrapState = this.PageInfo.GetCurrentWrapState();
......@@ -1100,14 +1120,16 @@ ParaMath.prototype.Recalculate_Range = function(PRS, ParaPr, Depth)
var WrapIndent = MathSettings.Get_WrapIndent(WrapState);
PRS.WrapIndent = WrapIndent;
if(bStartLine == false)
{
PRS.X += WrapIndent;
PRS.WrapIndent = 0;
//PRS.bCompareWrapIndent = false;
}
else
{
PRS.WrapIndent = WrapIndent;
PRS.bCompareWrapIndent = true;
}
PRS.XRange = PRS.X;
......@@ -1118,6 +1140,7 @@ ParaMath.prototype.Recalculate_Range = function(PRS, ParaPr, Depth)
PRS.PrevLineRecalcInfo.Object = null;
}
//console.log("Line " + PRS.Line);
this.Root.Recalculate_Range(PRS, ParaPr, Depth);
......@@ -1292,6 +1315,7 @@ ParaMath.prototype.Refresh_RecalcData2 = function(Data)
ParaMath.prototype.Recalculate_MinMaxContentWidth = function(MinMax)
{
// TODO переделать
if (true === this.NeedResize)
{
var RPI = new CRPI();
......@@ -1358,8 +1382,6 @@ ParaMath.prototype.Set_Inline = function(value)
if(value !== this.ParaMathRPI.bInline)
{
this.ParaMathRPI.bChangeInline = true;
this.ParaMathRPI.NeedResize = true;
this.ParaMathRPI.bInline = value;
}
};
......@@ -1403,11 +1425,6 @@ ParaMath.prototype.Set_Align = function(Align)
ParaMath.prototype.raw_SetAlign = function(Align)
{
this.Jc = Align;
this.SetNeedResize();
};
ParaMath.prototype.SetNeedResize = function()
{
this.ParaMathRPI.NeedResize = true;
};
ParaMath.prototype.SetRecalcCtrPrp = function(Class)
{
......@@ -2158,8 +2175,6 @@ ParaMath.prototype.Handle_AddNewLine = function()
NeedRecalculate = true;
}
if (true === NeedRecalculate)
this.SetNeedResize();
return NeedRecalculate;
};
......@@ -2268,7 +2283,8 @@ ParaMath.prototype.Is_ContentUse = function(MathContent)
*/
ParaMath.prototype.Correct_AfterConvertFromEquation = function()
{
this.ParaMathRPI.bCorrect_FontSize = true;
//this.Root.Correct_AfterConvertFromEquation();
};
//----------------------------------------------------------------------------------------------------------------------
......@@ -3149,21 +3165,24 @@ function MatGetKoeffArgSize(FontSize, ArgSize)
return FontKoef;
}
function MatReverseFontSize(FontSize, FontKoef)
{
return (((FontSize/FontKoef * 2 + 0.5) | 0) / 2) ;
}
function CMathRecalculateInfo()
{
this.NeedResize = true;
this.bChangeInline = true;
this.bRecalcCtrPrp = false; // необходимо для пересчета CtrPrp (когда изменились текстовые настройки у первого элемнента, ctrPrp нужно пересчитать заново для всей формулы)
this.bInline = false;
this.bChangeInline = true;
this.bRecalcCtrPrp = false; // необходимо для пересчета CtrPrp (когда изменились текстовые настройки у первого элемнента, ctrPrp нужно пересчитать заново для всей формулы)
this.bInline = false;
this.bCorrect_FontSize = false;
}
CMathRecalculateInfo.prototype.ClearRecalculate = function()
{
this.NeedResize = false;
this.bRecalcCtrPrp = false;
this.bChangeInline = false;
this.bRecalcCtrPrp = false;
this.bCorrect_FontSize = false;
};
......@@ -3175,12 +3194,14 @@ function CMathRecalculateObject()
CMathRecalculateObject.prototype.Fill = function(PageInfo)
{
this.WrapState = PageInfo.GetCurrentWrapState();
this.MaxW = PageInfo.GetCurrentMaxWidth();
this.MaxW = PageInfo.GetCurrentMaxWidthAllLines();
};
CMathRecalculateObject.prototype.Load_MathInfo = function(PageInfo)
{
PageInfo.SetCurrentWrapState(this.WrapState);
PageInfo.SetCurrentMaxWidth(this.MaxW);
// текущая MaxW и MaxW в PageInfo это не одно и то же
//PageInfo.SetCurrentMaxWidth(this.MaxW);
};
CMathRecalculateObject.prototype.Compare = function(PageInfo)
{
......@@ -3189,7 +3210,7 @@ CMathRecalculateObject.prototype.Compare = function(PageInfo)
if(this.WrapState !== PageInfo.GetCurrentWrapState())
result = false;
if(this.MaxW !== PageInfo.GetCurrentMaxWidth())
if(this.MaxW !== PageInfo.GetCurrentMaxWidthAllLines())
result = false;
return result;
......
......@@ -13405,6 +13405,9 @@ CRunRecalculateObject.prototype =
if ( ( 0 === this.Lines.length || 0 === this.LinesLength ) && ( 0 === OLI.Lines.length || 0 === OLI.LinesLength ) )
return true;
// заглушка для однострочных контентов
if(OLI.Type == para_Math_Content && OLI.bOneLine == true)
return true;
if ( this.StartLine !== OLI.StartLine || this.StartRange !== OLI.StartRange || CurLine < 0 || CurLine >= this.private_Get_LinesCount() || CurLine >= OLI.protected_GetLinesCount() || CurRange < 0 || CurRange >= this.private_Get_RangesCount(CurLine) || CurRange >= OLI.protected_GetRangesCount(CurLine) )
return false;
......
......@@ -2177,6 +2177,7 @@ function CParagraphRecalculateStateWrap(Para)
this.WrapIndent = 0; // WrapIndent нужен для сравнения с длиной слова (когда слово разбивается по Compare Oper): ширина первой строки формулы не должна быть меньше WrapIndent
this.bFirstCompareOper = true;
this.bCompareWrapIndent = false;
// у "крайних" в строке операторов/мат объектов сооответствующий Gap равен нулю
this.OperGapRight = 0;
......@@ -2217,6 +2218,7 @@ CParagraphRecalculateStateWrap.prototype =
this.bFirstCompareOper = true;
this.bInsideOper = false;
this.bFastRecalculate = false;
this.bCompareWrapIndent = false;
},
// Обнуляем некоторые параметры перед новым отрезком
......@@ -2250,6 +2252,7 @@ CParagraphRecalculateStateWrap.prototype =
this.bFirstCompareOper = true;
this.bInsideOper = false;
this.bFastRecalculate = false;
this.bCompareWrapIndent = false;
},
Reset_PrevLineRecalcInfo : function()
......
......@@ -2301,7 +2301,7 @@ ParaRun.prototype.Recalculate_Range = function(PRS, ParaPr, Depth)
var bOverXEnd;
if(bCompareOper && PRS.bFirstCompareOper == true && WorLenCompareOper > PRS.WrapIndent && !(Word == false && FirstItemOnLine == true)) // (Word == true && FirstItemOnLine == true) - не первый элемент в строке
if(bCompareOper && PRS.bFirstCompareOper == true && PRS.bCompareWrapIndent == true && WorLenCompareOper > PRS.WrapIndent && !(Word == false && FirstItemOnLine == true)) // (Word == true && FirstItemOnLine == true) - не первый элемент в строке
PRS.bFirstCompareOper = false;
if(bOperBefore) // оператор "до"
......@@ -5315,7 +5315,6 @@ ParaRun.prototype.Recalc_CompiledPr = function(RecalcMeasure)
this.RecalcInfo.Measure = true;
// Если мы в формуле, тогда ее надо пересчитывать
this.private_UpdateMathResize();
this.private_RecalcCtrPrp();
};
......@@ -6371,7 +6370,6 @@ ParaRun.prototype.Undo = function(Data)
this.RecalcInfo.Measure = true;
this.protected_UpdateSpellChecking();
this.private_UpdateMathResize();
break;
}
......@@ -6387,7 +6385,6 @@ ParaRun.prototype.Undo = function(Data)
this.RecalcInfo.Measure = true;
this.protected_UpdateSpellChecking();
this.private_UpdateMathResize();
break;
}
......@@ -6758,7 +6755,6 @@ ParaRun.prototype.Redo = function(Data)
this.RecalcInfo.Measure = true;
this.protected_UpdateSpellChecking();
this.private_UpdateMathResize();
break;
......@@ -6770,7 +6766,6 @@ ParaRun.prototype.Redo = function(Data)
this.RecalcInfo.Measure = true;
this.protected_UpdateSpellChecking();
this.private_UpdateMathResize();
break;
}
......@@ -7614,7 +7609,6 @@ ParaRun.prototype.Load_Changes = function(Reader, Reader2, Color)
this.RecalcInfo.Measure = true;
this.protected_UpdateSpellChecking();
this.private_UpdateMathResize();
break;
}
......@@ -7640,7 +7634,6 @@ ParaRun.prototype.Load_Changes = function(Reader, Reader2, Color)
this.RecalcInfo.Measure = true;
this.protected_UpdateSpellChecking();
this.private_UpdateMathResize();
break;
}
......@@ -8233,11 +8226,6 @@ ParaRun.prototype.Clear_CollaborativeMarks = function()
{
this.CollaborativeMarks.Clear();
};
ParaRun.prototype.private_UpdateMathResize = function()
{
if (para_Math_Run === this.Type && undefined !== this.Parent && null !== this.Parent && null !== this.Parent.ParaMath)
this.Parent.ParaMath.SetNeedResize();
};
ParaRun.prototype.private_RecalcCtrPrp = function()
{
if (para_Math_Run === this.Type && undefined !== this.Parent && null !== this.Parent && null !== this.Parent.ParaMath)
......@@ -8817,6 +8805,35 @@ ParaRun.prototype.Math_PreRecalc = function(Parent, ParaMath, ArgSize, RPI, Gaps
if(RPI.bChangeInline)
this.RecalcInfo.Measure = true; // нужно сделать пересчет элементов, например для дроби, т.к. ArgSize у внутренних контентов будет другой => размер
if(RPI.bCorrect_FontSize)
{
var ArgSize = this.Parent.Compiled_ArgSz.value;
var FontKoef;
if(ArgSize == -1 || ArgSize == -2)
{
var Pr = new CTextPr();
if(this.Pr.FontSize !== null && this.Pr.FontSize !== undefined)
{
FontKoef = MatGetKoeffArgSize(this.Pr.FontSize, ArgSize);
Pr.FontSize = MatReverseFontSize(this.Pr.FontSize, FontKoef);
this.RecalcInfo.TextPr = true;
this.RecalcInfo.Measure = true;
}
if(this.Pr.FontSizeCS !== null && this.Pr.FontSizeCS !== undefined)
{
FontKoef = MatGetKoeffArgSize( this.Pr.FontSizeCS, ArgSize);
Pr.FontSizeCS = MatReverseFontSize(this.Pr.FontSizeCS, FontKoef);
this.RecalcInfo.TextPr = true;
this.RecalcInfo.Measure = true;
}
this.Apply_Pr(Pr);
}
}
for (var Pos = 0 ; Pos < this.Content.length; Pos++ )
{
if( !this.Content[Pos].IsAlignPoint() )
......
......@@ -1052,9 +1052,6 @@ CMathBase.prototype.raw_SetRFontsHint = function(Value)
CMathBase.prototype.NeedUpdate_CtrPrp = function()
{
this.RecalcInfo.bCtrPrp = true;
if(null !== this.ParaMath)
this.ParaMath.SetNeedResize();
};
CMathBase.prototype.SelectToParent = function(bCorrect)
{
......@@ -1113,7 +1110,23 @@ CMathBase.prototype.Save_RecalculateObject = function(Copy)
}
else
{
RecalcObj = CMathBase.superclass.Save_RecalculateObject.call(this, Copy);
var Num = this.NumBreakContent;
RecalcObj = new CRunRecalculateObject(this.StartLine, this.StartRange);
RecalcObj.Save_Lines( this, Copy );
for(var Pos = 0; Pos < this.Content.length; Pos++)
{
if(Pos == Num)
{
RecalcObj.Content[Pos] = this.Content[Pos].Save_RecalculateObject(Copy);
}
else
{
RecalcObj.Content[Pos] = new CEmptyRunRecalculateObject(this.StartLine, this.StartRange);
}
}
}
return RecalcObj;
......@@ -1721,14 +1734,12 @@ CMathBase.prototype.raw_AddToContent = function(Pos, Items, bUpdatePosition)
}
this.fillContent();
this.private_SetNeedResize();
};
CMathBase.prototype.raw_RemoveFromContent = function(Pos, Count)
{
this.Content.splice(Pos, Count);
this.fillContent();
this.private_SetNeedResize();
};
CMathBase.prototype.Recalc_RunsCompiledPr = function()
{
......@@ -2079,7 +2090,6 @@ CMathBase.prototype.private_UpdatePosOnAdd = CMathContent.prototype.private
CMathBase.prototype.private_UpdatePosOnRemove = CMathContent.prototype.private_UpdateOnRemove;
CMathBase.prototype.private_CorrectSelectionPos = CMathContent.prototype.private_CorrectSelectionPos;
CMathBase.prototype.private_CorrectSelectionPos = CMathContent.prototype.private_CorrectSelectionPos;
CMathBase.prototype.private_SetNeedResize = CMathContent.prototype.private_SetNeedResize;
CMathBase.prototype.Shift_Range = CMathContent.prototype.Shift_Range;
CMathBase.prototype.private_CorrectCurPos = function()
{
......
......@@ -2,39 +2,40 @@
function CRPI()
{
this.NeedResize = true;
this.bDecreasedComp = false;
this.bInline = false;
this.bChangeInline = false;
this.bNaryInline = false; /*для CDegreeSupSub внутри N-арного оператора, этот флаг необходим, чтобы итераторы максимально близко друг к другу расположить*/
this.bEqArray = false; /*для амперсанда*/
this.bMathFunc = false;
this.bRecalcCtrPrp = false; // пересчет ctrPrp нужен, когда на Undo и тп изменился размер первого Run, а ctrPrp уже для мат объектов пересчитались
this.PRS = null;
this.bDecreasedComp = false;
this.bInline = false;
this.bChangeInline = false;
this.bNaryInline = false; /*для CDegreeSupSub внутри N-арного оператора, этот флаг необходим, чтобы итераторы максимально близко друг к другу расположить*/
this.bEqArray = false; /*для амперсанда*/
this.bMathFunc = false;
this.bRecalcCtrPrp = false; // пересчет ctrPrp нужен, когда на Undo и тп изменился размер первого Run, а ctrPrp уже для мат объектов пересчитались
this.PRS = null;
this.bCorrect_FontSize = false;
}
CRPI.prototype.Copy = function()
{
var RPI = new CRPI();
RPI.NeedResize = this.NeedResize;
RPI.bInline = this.bInline;
RPI.bDecreasedComp = this.bDecreasedComp;
RPI.bChangeInline = this.bChangeInline;
RPI.bNaryInline = this.bNaryInline;
RPI.bEqArray = this.bEqArray;
RPI.bMathFunc = this.bMathFunc;
RPI.bRecalcCtrPrp = this.bRecalcCtrPrp;
RPI.PRS = this.PRS;
RPI.bInline = this.bInline;
RPI.bDecreasedComp = this.bDecreasedComp;
RPI.bChangeInline = this.bChangeInline;
RPI.bNaryInline = this.bNaryInline;
RPI.bEqArray = this.bEqArray;
RPI.bMathFunc = this.bMathFunc;
RPI.bRecalcCtrPrp = this.bRecalcCtrPrp;
RPI.PRS = this.PRS;
RPI.bCorrect_FontSize = this.bCorrect_FontSize;
return RPI;
};
CRPI.prototype.MergeMathInfo = function(MathInfo)
{
this.bInline = MathInfo.bInline;
this.bInline = MathInfo.bInline;
this.NeedResize = MathInfo.NeedResize;
this.bRecalcCtrPrp = MathInfo.bRecalcCtrPrp;
this.bChangeInline = MathInfo.bChangeInline;
this.bRecalcCtrPrp = MathInfo.bRecalcCtrPrp;
this.bChangeInline = MathInfo.bChangeInline;
this.bCorrect_FontSize = MathInfo.bCorrect_FontSize;
};
function CMathPointInfo()
......@@ -1675,7 +1676,6 @@ CMathContent.prototype.SplitContent = function(NewContent, ContentPos, Depth)
}
}
this.private_SetNeedResize();
};
CMathContent.prototype.Add_ToContent = function(Pos, Item)
{
......@@ -1855,9 +1855,6 @@ CMathContent.prototype.Undo = function(Data)
{
this.Content.splice(Data.Pos, Data.EndPos - Data.Pos + 1);
if (null !== this.ParaMath)
this.ParaMath.SetNeedResize();
break;
}
case historyitem_Math_RemoveItem:
......@@ -1869,9 +1866,6 @@ CMathContent.prototype.Undo = function(Data)
this.Content = Array_start.concat(Data.Items, Array_end);
if (null !== this.ParaMath)
this.ParaMath.SetNeedResize();
break;
}
}
......@@ -1891,18 +1885,12 @@ CMathContent.prototype.Redo = function(Data)
this.Content = Array_start.concat(Data.Items, Array_end);
if (null !== this.ParaMath)
this.ParaMath.SetNeedResize();
break;
}
case historyitem_Math_RemoveItem:
{
this.Content.splice(Data.Pos, Data.EndPos - Data.Pos + 1);
if (null !== this.ParaMath)
this.ParaMath.SetNeedResize();
break;
}
}
......@@ -1989,8 +1977,6 @@ CMathContent.prototype.Load_Changes = function(Reader)
this.Content.splice(Pos, 0, Element);
}
this.private_SetNeedResize();
break;
}
case historyitem_Math_RemoveItem:
......@@ -2006,8 +1992,6 @@ CMathContent.prototype.Load_Changes = function(Reader)
this.Content.splice(ChangesPos, 1);
}
this.private_SetNeedResize();
break;
}
}
......@@ -2048,9 +2032,6 @@ CMathContent.prototype.Insert_MathContent = function(oMathContent, Pos, bSelect)
}
}
if (null !== this.ParaMath)
this.ParaMath.SetNeedResize();
this.CurPos = Pos + nCount;
if (true === bSelect)
......@@ -3879,11 +3860,6 @@ CMathContent.prototype.Check_NearestPos = function(ParaNearPos, Depth)
var CurPos = ParaNearPos.NearPos.ContentPos.Get(Depth);
this.Content[CurPos].Check_NearestPos(ParaNearPos, Depth + 1);
};
CMathContent.prototype.private_SetNeedResize = function()
{
if (null !== this.ParaMath)
this.ParaMath.SetNeedResize();
};
CMathContent.prototype.Recalculate_Range = function(PRS, ParaPr, Depth)
{
this.bOneLine = PRS.bMath_OneLine;
......
......@@ -977,6 +977,14 @@ CMathAmp.prototype =
{
return ( (this.size.width + this.GapLeft + this.GapRight)* TEXTWIDTH_DIVIDER ) | 0;
},
Update_GapLeft: function(Gap)
{
this.GapLeft = Gap;
},
Update_GapRight: function(Gap)
{
this.GapRight = Gap;
},
relate: function(parent)
{
this.Parent = parent;
......
......@@ -717,7 +717,6 @@ CEqArray.prototype.setPr = function(NewPr)
CEqArray.prototype.raw_SetPr = function(NewPr)
{
this.Pr = NewPr;
this.private_SetNeedResize();
};
CEqArray.prototype.fillContent = function()
{
......
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