Commit d5714f87 authored by Ilya Kirillov's avatar Ilya Kirillov

Fixed bug #33949. Now if run have empty selection it doesn't split on apply text properties.

parent 069e762f
...@@ -6323,112 +6323,121 @@ ParaRun.prototype.Apply_TextPr = function(TextPr, IncFontSize, ApplyToAll) ...@@ -6323,112 +6323,121 @@ ParaRun.prototype.Apply_TextPr = function(TextPr, IncFontSize, ApplyToAll)
var StartPos = this.State.Selection.StartPos; var StartPos = this.State.Selection.StartPos;
var EndPos = this.State.Selection.EndPos; var EndPos = this.State.Selection.EndPos;
var Direction = 1; if (StartPos === EndPos)
if ( StartPos > EndPos ) {
{ CRun = this;
var Temp = StartPos; LRun = null;
StartPos = EndPos; RRun = null;
EndPos = Temp; }
Direction = -1; else
} {
var Direction = 1;
if (StartPos > EndPos)
{
var Temp = StartPos;
StartPos = EndPos;
EndPos = Temp;
Direction = -1;
}
// Если выделено не до конца, тогда разделяем по последней точке // Если выделено не до конца, тогда разделяем по последней точке
if ( EndPos < this.Content.length ) if (EndPos < this.Content.length)
{ {
RRun = LRun.Split_Run(EndPos); RRun = LRun.Split_Run(EndPos);
RRun.Set_ReviewType(ReviewType); RRun.Set_ReviewType(ReviewType);
if (IsPrChange) if (IsPrChange)
RRun.Add_PrChange(); RRun.Add_PrChange();
} }
// Если выделено не с начала, тогда делим по начальной точке // Если выделено не с начала, тогда делим по начальной точке
if ( StartPos > 0 ) if (StartPos > 0)
{ {
CRun = LRun.Split_Run(StartPos); CRun = LRun.Split_Run(StartPos);
CRun.Set_ReviewType(ReviewType); CRun.Set_ReviewType(ReviewType);
if (IsPrChange) if (IsPrChange)
CRun.Add_PrChange(); CRun.Add_PrChange();
} }
else else
{ {
CRun = LRun; CRun = LRun;
LRun = null; LRun = null;
} }
if ( null !== LRun ) if (null !== LRun)
{ {
LRun.Selection.Use = true; LRun.Selection.Use = true;
LRun.Selection.StartPos = LRun.Content.length; LRun.Selection.StartPos = LRun.Content.length;
LRun.Selection.EndPos = LRun.Content.length; LRun.Selection.EndPos = LRun.Content.length;
} }
CRun.Select_All(Direction); CRun.Select_All(Direction);
if (true === bReview && true !== CRun.Have_PrChange()) if (true === bReview && true !== CRun.Have_PrChange())
CRun.Add_PrChange(); CRun.Add_PrChange();
if ( undefined === IncFontSize ) if (undefined === IncFontSize)
CRun.Apply_Pr( TextPr ); CRun.Apply_Pr(TextPr);
else else
{ {
var _TextPr = new CTextPr(); var _TextPr = new CTextPr();
var CurTextPr = this.Get_CompiledPr( false ); var CurTextPr = this.Get_CompiledPr(false);
CRun.private_AddCollPrChangeMine(); CRun.private_AddCollPrChangeMine();
CRun.Set_FontSize( FontSize_IncreaseDecreaseValue( IncFontSize, CurTextPr.FontSize ) ); CRun.Set_FontSize(FontSize_IncreaseDecreaseValue(IncFontSize, CurTextPr.FontSize));
} }
if ( null !== RRun ) if (null !== RRun)
{ {
RRun.Selection.Use = true; RRun.Selection.Use = true;
RRun.Selection.StartPos = 0; RRun.Selection.StartPos = 0;
RRun.Selection.EndPos = 0; RRun.Selection.EndPos = 0;
} }
// Дополнительно проверим, если у нас para_End лежит в данном ране и попадает в выделение, тогда // Дополнительно проверим, если у нас para_End лежит в данном ране и попадает в выделение, тогда
// применим заданные настроки к символу конца параграфа // применим заданные настроки к символу конца параграфа
// TODO: Возможно, стоит на этапе пересчета запонимать, лежит ли para_End в данном ране. Чтобы в каждом // TODO: Возможно, стоит на этапе пересчета запонимать, лежит ли para_End в данном ране. Чтобы в каждом
// ране потом не бегать каждый раз по всему массиву в поисках para_End. // ране потом не бегать каждый раз по всему массиву в поисках para_End.
if ( true === this.Selection_CheckParaEnd() ) if (true === this.Selection_CheckParaEnd())
{ {
if ( undefined === IncFontSize ) if (undefined === IncFontSize)
{ {
if(!TextPr.AscFill && !TextPr.AscLine && !TextPr.AscUnifill) if (!TextPr.AscFill && !TextPr.AscLine && !TextPr.AscUnifill)
{ {
this.Paragraph.TextPr.Apply_TextPr( TextPr ); this.Paragraph.TextPr.Apply_TextPr(TextPr);
} }
else else
{ {
var EndTextPr = this.Paragraph.Get_CompiledPr2(false).TextPr.Copy(); var EndTextPr = this.Paragraph.Get_CompiledPr2(false).TextPr.Copy();
EndTextPr.Merge( this.Paragraph.TextPr.Value ); EndTextPr.Merge(this.Paragraph.TextPr.Value);
if(TextPr.AscFill) if (TextPr.AscFill)
{ {
this.Paragraph.TextPr.Set_TextFill(AscFormat.CorrectUniFill(TextPr.AscFill, EndTextPr.TextFill, 0)); this.Paragraph.TextPr.Set_TextFill(AscFormat.CorrectUniFill(TextPr.AscFill, EndTextPr.TextFill, 0));
} }
if(TextPr.AscUnifill) if (TextPr.AscUnifill)
{ {
this.Paragraph.TextPr.Set_Unifill(AscFormat.CorrectUniFill(TextPr.AscUnifill, EndTextPr.Unifill, 0)); this.Paragraph.TextPr.Set_Unifill(AscFormat.CorrectUniFill(TextPr.AscUnifill, EndTextPr.Unifill, 0));
} }
if(TextPr.AscLine) if (TextPr.AscLine)
{ {
this.Paragraph.TextPr.Set_TextOutline(AscFormat.CorrectUniStroke(TextPr.AscLine, EndTextPr.TextOutline, 0)); this.Paragraph.TextPr.Set_TextOutline(AscFormat.CorrectUniStroke(TextPr.AscLine, EndTextPr.TextOutline, 0));
} }
} }
} }
else else
{ {
var Para = this.Paragraph; var Para = this.Paragraph;
// Выставляем настройки для символа параграфа // Выставляем настройки для символа параграфа
var EndTextPr = Para.Get_CompiledPr2(false).TextPr.Copy(); var EndTextPr = Para.Get_CompiledPr2(false).TextPr.Copy();
EndTextPr.Merge( Para.TextPr.Value ); EndTextPr.Merge(Para.TextPr.Value);
// TODO: Как только перенесем историю изменений TextPr в сам класс CTextPr, переделать тут // TODO: Как только перенесем историю изменений TextPr в сам класс CTextPr, переделать тут
Para.TextPr.Set_FontSize( FontSize_IncreaseDecreaseValue( IncFontSize, EndTextPr.FontSize ) ); Para.TextPr.Set_FontSize(FontSize_IncreaseDecreaseValue(IncFontSize, EndTextPr.FontSize));
} }
} }
}
} }
else else
{ {
......
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