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

1. Поправила баг: при смене текстовых настроек всей формулы на Undo не пересчитывались ctrPrp.

Когда приходят изменения текстовых настроек (на Undo и тп), добавила проверку на изменение текст. настроек у первого рана, в этом случае должен произойти пересчет ctrPrp у всех мат объектов (так как может произойти так, что CtrPrp пересчитались на PreRecalc, а потом придут изменения на Undo первому рану)
2. Для минус-плюса добавила gaps

git-svn-id: svn://192.168.3.15/activex/AVS/Sources/TeamlabOffice/trunk/OfficeWeb@60004 954022d7-b5bf-4e40-9824-e11837661b57
parent 22e7b482
......@@ -29,16 +29,21 @@ function ParaMath()
this.Jc = undefined;
this.Root = new CMathContent();
this.Root.bRoot = true;
this.Root = new CMathContent();
this.Root.bRoot = true;
this.Root.ParentElement = this;
this.X = 0;
this.Y = 0;
this.bInline = false;
this.bChangeInline = true;
this.ParaMathRPI = new CMathRecalculateInfo();
/*this.bInline = false;
this.NeedResize = true;
this.RecalcCtrPrp = false;
this.bChangeInline = true;
*/
this.bSelectionUse = false;
//this.State = new CParaRunState(); // Положение курсора и селекта для данного run
......@@ -155,7 +160,7 @@ ParaMath.prototype.Get_CompiledTextPr = function(Copy)
ParaMath.prototype.Add = function(Item)
{
this.NeedResize = true;
this.ParaMathRPI.NeedResize = true;
var Type = Item.Type;
var oSelectedContent = this.GetSelectContent();
......@@ -244,7 +249,7 @@ ParaMath.prototype.Add = function(Item)
ParaMath.prototype.Remove = function(Direction, bOnAddText)
{
this.NeedResize = true;
this.ParaMathRPI.NeedResize = true;
var oSelectedContent = this.GetSelectContent();
var nStartPos = oSelectedContent.Start;
......@@ -409,7 +414,7 @@ ParaMath.prototype.Apply_TextPr = function(TextPr, IncFontSize, ApplyToAll)
{
// TODO: ParaMath.Apply_TextPr
this.NeedResize = true;
this.ParaMathRPI.NeedResize = true;
if(ApplyToAll == true) // для ситуации, когда ApplyToAll = true, в Root формулы при этом позиции селекта не проставлены
......@@ -590,12 +595,14 @@ ParaMath.prototype.Recalculate_Range = function(PRS, ParaPr, Depth)
var ParaLine = PRS.Line;
var ParaRange = PRS.Range;
var RPI = new CRPI();
/*var RPI = new CRPI();
RPI.bInline = this.bInline;
RPI.bChangeInline = this.bChangeInline;
RPI.NeedResize = this.NeedResize;
RPI.PRS = PRS;
RPI.NeedResize = this.NeedResize;*/
var RPI = new CRPI();
RPI.MergeMathInfo(this.ParaMathRPI);
RPI.PRS = PRS;
var ArgSize = new CMathArgSize();
......@@ -618,7 +625,7 @@ ParaMath.prototype.Recalculate_Range = function(PRS, ParaPr, Depth)
else
this.Root.Resize_2(g_oTextMeasurer, null, this, RPI/*recalculate properties info*/, ArgSize);
this.NeedResize = false;
this.ParaMathRPI.ClearRecalculate();
var OldLineTextAscent = PRS.LineTextAscent;
var OldLineTextAscent2 = PRS.LineTextAscent2;
......@@ -932,9 +939,14 @@ ParaMath.prototype.Recalculate_MinMaxContentWidth = function(MinMax)
if (true === this.NeedResize)
{
var RPI = new CRPI();
RPI.bInline = this.bInline;
RPI.bChangeInline = this.bChangeInline;
RPI.PRS = this.Paragraph.m_oPRSW;
RPI.MergeMathInfo(this.ParaMathRPI);
RPI.NeedResize = true;
RPI.PRS = this.Paragraph.m_oPRSW;
//RPI.bInline = this.bInline;
//RPI.bChangeInline = this.bChangeInline;
this.Root.PreRecalc(null, this, new CMathArgSize(), RPI);
this.Root.Resize(g_oTextMeasurer, RPI);
......@@ -995,21 +1007,21 @@ ParaMath.prototype.Shift_Range = function(Dx, Dy, _CurLine, _CurRange)
//-----------------------------------------------------------------------------------
ParaMath.prototype.Set_Inline = function(value)
{
if(value !== this.bInline)
if(value !== this.ParaMathRPI.bInline)
{
this.bChangeInline = true;
this.NeedResize = true;
}
this.ParaMathRPI.bChangeInline = true;
this.ParaMathRPI.NeedResize = true;
this.bInline = value;
this.ParaMathRPI.bInline = value;
}
};
ParaMath.prototype.Get_Inline = function()
{
return this.bInline;
return this.ParaMathRPI.bInline;
};
ParaMath.prototype.Is_Inline = function()
{
return this.bInline;
return this.ParaMathRPI.bInline;
};
ParaMath.prototype.Get_Align = function()
{
......@@ -1036,7 +1048,14 @@ ParaMath.prototype.raw_SetAlign = function(Align)
};
ParaMath.prototype.SetNeedResize = function()
{
this.NeedResize = true;
this.ParaMathRPI.NeedResize = true;
};
ParaMath.prototype.SetRecalcCtrPrp = function(Class)
{
if(this.Root.Content.length > 0)
{
this.ParaMathRPI.RecalcCtrPrp = this.Root.Content[0] == Class;
}
};
ParaMath.prototype.NeedCompiledCtrPr = function()
{
......@@ -2778,4 +2797,19 @@ function MathApplyArgSize(FontSize, argSize)
}
return ResultFontSize;
}
function CMathRecalculateInfo()
{
this.NeedResize = true;
this.bChangeInline = true;
this.bRecalcCtrPrp = false;
this.bInline = false;
}
CMathRecalculateInfo.prototype.ClearRecalculate = function()
{
this.NeedResize = false;
this.bRecalcCtrPrp = false;
this.bChangeInline = false;
};
\ No newline at end of file
......@@ -4651,6 +4651,7 @@ ParaRun.prototype.Recalc_CompiledPr = function(RecalcMeasure)
// Если мы в формуле, тогда ее надо пересчитывать
this.private_UpdateMathResize();
this.private_RecalcCtrPrp();
};
ParaRun.prototype.Recalc_RunsCompiledPr = function()
......@@ -7451,7 +7452,11 @@ 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)
this.Parent.ParaMath.SetRecalcCtrPrp(this);
}
function CParaRunSelection()
{
this.Use = false;
......
......@@ -366,7 +366,7 @@ CMathBase.prototype =
this.Parent = Parent;
this.ParaMath = ParaMath;
this.Set_CompiledCtrPrp(Parent, ParaMath);
this.Set_CompiledCtrPrp(Parent, ParaMath, RPI);
this.ApplyProperties(RPI);
......@@ -438,9 +438,9 @@ CMathBase.prototype =
if(!this.elements[i][j].IsJustDraw())
this.elements[i][j].Resize_2(oMeasure, this, ParaMath, RPI, ArgSize);
},
Set_CompiledCtrPrp: function(Parent, ParaMath)
Set_CompiledCtrPrp: function(Parent, ParaMath, RPI)
{
if(this.RecalcInfo.bCtrPrp == true)
if(this.RecalcInfo.bCtrPrp == true || (RPI !== null && RPI !== undefined && RPI.bRecalcCtrPrp == true))
{
if (undefined === ParaMath || null === ParaMath)
{
......@@ -478,7 +478,7 @@ CMathBase.prototype =
if(this.bInside == true)
{
var TxtPr = Parent.Get_TxtPrControlLetter();
var TxtPr = Parent.Get_TxtPrControlLetter(RPI);
FontSize = TxtPr.FontSize;
FontSize = MathApplyArgSize(FontSize, this.ArgSize.value);
}
......@@ -499,9 +499,9 @@ CMathBase.prototype =
this.RecalcInfo.bCtrPrp = false;
}
},
Get_TxtPrControlLetter: function() // TextPrControlLetter не копируются !
Get_TxtPrControlLetter: function(RPI) // TextPrControlLetter не копируются !
{
this.Set_CompiledCtrPrp(this.Parent, this.ParaMath);
this.Set_CompiledCtrPrp(this.Parent, this.ParaMath, RPI);
return this.TextPrControlLetter;
},
......
......@@ -65,7 +65,7 @@ CDegreeBase.prototype.PreRecalc = function(Parent, ParaMath, ArgSize, RPI, GapsI
this.Parent = Parent;
this.ParaMath = ParaMath;
this.Set_CompiledCtrPrp(Parent, ParaMath);
this.Set_CompiledCtrPrp(Parent, ParaMath, RPI);
this.ApplyProperties(RPI);
......@@ -310,7 +310,7 @@ CIterators.prototype.PreRecalc = function(Parent, ParaMath, ArgSize, RPI, GapsIn
var ArgSzIters = ArgSize.Copy();
ArgSzIters.Merge(this.ArgSize);
this.Set_CompiledCtrPrp(Parent, ParaMath);
this.Set_CompiledCtrPrp(Parent, ParaMath, RPI);
var RPI_ITER = RPI.Copy();
RPI_ITER.bDecreasedComp = true;
......
......@@ -268,7 +268,7 @@ CFraction.prototype.PreRecalc = function(Parent, ParaMath, ArgSize, RPI, GapsInf
this.RecalcInfo.bCtrPrp = true;
this.Set_CompiledCtrPrp(Parent, ParaMath);
this.Set_CompiledCtrPrp(Parent, ParaMath, RPI);
this.ApplyProperties(RPI);
......
......@@ -67,7 +67,7 @@ CLimitPrimary.prototype.PreRecalc = function(Parent, ParaMath, ArgSize, RPI, Gap
this.Parent = Parent;
this.ParaMath = ParaMath;
this.Set_CompiledCtrPrp(Parent, ParaMath);
this.Set_CompiledCtrPrp(Parent, ParaMath, RPI);
if(this.bInside == false)
GapsInfo.setGaps(this, this.TextPrControlLetter.FontSize);
......
......@@ -28,7 +28,7 @@
// 1. Посмотреть стрелки и прочее для delimiters (которые используются для accent), при необходимости привести к одному типу
// 3. Проверить что будет, если какие-то настройки убрать/добавить из ctrPrp, влияют ли они на отрисовку управляющих элементов (например, Italic, Bold)
// 4. Протестировать n-арные операторы, когда добавляется текст вместо оператора (mouseDown не работает, выравнено как alignTop)
// 4. Протестировать n-арные операторы, когда добавляется текст вместо оператора
function CRPI()
{
......@@ -39,6 +39,7 @@ function CRPI()
this.bNaryInline = false; /*для CDegreeSupSub внутри N-арного оператора, этот флаг необходим, чтобы итераторы максимально близко друг к другу расположить*/
this.bEqqArray = false; /*для амперсанда*/
this.bMathFunc = false;
this.bRecalcCtrPrp = false; // пересчет ctrPrp нужен, когда на Undo и тп изменился размер первого Run, а ctrPrp уже для мат объектов пересчитались
this.PRS = null;
}
CRPI.prototype.Copy = function()
......@@ -52,9 +53,18 @@ CRPI.prototype.Copy = function()
RPI.bNaryInline = this.bNaryInline;
RPI.bEqqArray = this.bEqqArray;
RPI.bMathFunc = this.bMathFunc;
RPI.RecalcCtrPrp = this.bRecalcCtrPrp;
RPI.PRS = this.PRS;
return RPI;
};
CRPI.prototype.MergeMathInfo = function(MathInfo)
{
this.bInline = MathInfo.bInline;
this.NeedResize = MathInfo.NeedResize;
this.bRecalcCtrPrp = MathInfo.bRecalcCtrPrp;
this.bChangeInline = MathInfo.bChangeInline;
}
function CMathPointInfo()
......@@ -275,13 +285,14 @@ CCoeffGaps.prototype =
return coeff;
},
checkOperSign: function(code) // "+", "-", "±"
checkOperSign: function(code) // "+", "-", "±", "∓"
{
var PLUS = 0x2B,
MINUS = 0x2D,
PLUS_MINUS = 0xB1;
PLUS_MINUS = 0xB1,
MINUS_PLUS = 0x2213;
return code == PLUS || code == MINUS || code == PLUS_MINUS;
return code == PLUS || code == MINUS || code == PLUS_MINUS || code == MINUS_PLUS;
},
checkEqualSign: function(code)
{
......
......@@ -667,8 +667,6 @@ function CEqArray(props)
this.setDefaultSpace();
this.bDecreaseRow = false;
// for ampersand in Run
this.WidthsPoints = [];
this.Points = [];
......
......@@ -485,7 +485,7 @@ CNaryUnd.prototype.PreRecalc = function(Parent, ParaMath, ArgSize, RPI)
this.Parent = Parent;
this.ParaMath = ParaMath;
this.Set_CompiledCtrPrp(Parent, ParaMath);
this.Set_CompiledCtrPrp(Parent, ParaMath, RPI);
var ArgSzUnd = ArgSize.Copy();
ArgSzUnd.decrease();
......@@ -523,7 +523,7 @@ CNaryOvr.prototype.PreRecalc = function(Parent, ParaMath, ArgSize, RPI)
this.Parent = Parent;
this.ParaMath = ParaMath;
this.Set_CompiledCtrPrp(Parent, ParaMath);
this.Set_CompiledCtrPrp(Parent, ParaMath, RPI);
var ArgSzOvr = ArgSize.Copy();
ArgSzOvr.decrease();
......@@ -586,7 +586,7 @@ CNaryUndOvr.prototype.PreRecalc = function(Parent, ParaMath, ArgSize, RPI)
this.Parent = Parent;
this.ParaMath = ParaMath;
this.Set_CompiledCtrPrp(Parent, ParaMath);
this.Set_CompiledCtrPrp(Parent, ParaMath, RPI);
var ArgSzIter = ArgSize.Copy();
ArgSzIter.decrease();
......
......@@ -430,7 +430,7 @@ CRadical.prototype.PreRecalc = function(Parent, ParaMath, ArgSize, RPI, GapsInfo
this.Parent = Parent;
this.ParaMath = ParaMath;
this.Set_CompiledCtrPrp(Parent, ParaMath);
this.Set_CompiledCtrPrp(Parent, ParaMath, RPI);
this.ApplyProperties(RPI);
......
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