Commit 0cfc7a5a authored by Ilya.Kirillov's avatar Ilya.Kirillov Committed by Alexander.Trofimov

Доработана функция Increase/Decrease FontSize в новом варианте параграфа.

git-svn-id: svn://192.168.3.15/activex/AVS/Sources/TeamlabOffice/trunk/OfficeWeb@54337 954022d7-b5bf-4e40-9824-e11837661b57
parent 76afe519
...@@ -8716,187 +8716,274 @@ Paragraph.prototype = ...@@ -8716,187 +8716,274 @@ Paragraph.prototype =
IncDec_FontSize : function(bIncrease) IncDec_FontSize : function(bIncrease)
{ {
this.RecalcInfo.Set_Type_0(pararecalc_0_All); if ( true !== Debug_ParaRunMode )
var StartTextPr = this.Get_CompiledPr().TextPr;
if ( true === this.ApplyToAll )
{ {
var StartFontSize = this.Internal_IncDecFontSize( bIncrease, StartTextPr.FontSize ); this.RecalcInfo.Set_Type_0(pararecalc_0_All);
this.Internal_Content_Add( 0, new ParaTextPr( { FontSize : StartFontSize } ) ); var StartTextPr = this.Get_CompiledPr().TextPr;
for ( var Index = 1; Index < this.Content.length; Index++ ) if ( true === this.ApplyToAll )
{ {
var Item = this.Content[Index]; var StartFontSize = this.Internal_IncDecFontSize( bIncrease, StartTextPr.FontSize );
if ( para_TextPr === Item.Type ) this.Internal_Content_Add( 0, new ParaTextPr( { FontSize : StartFontSize } ) );
for ( var Index = 1; Index < this.Content.length; Index++ )
{ {
if ( undefined != Item.Value.FontSize ) var Item = this.Content[Index];
Item.Set_FontSize( this.Internal_IncDecFontSize( bIncrease, Item.Value.FontSize ) ); if ( para_TextPr === Item.Type )
else {
Item.Set_FontSize( this.Internal_IncDecFontSize( bIncrease, StartTextPr.FontSize ) ); if ( undefined != Item.Value.FontSize )
Item.Set_FontSize( this.Internal_IncDecFontSize( bIncrease, Item.Value.FontSize ) );
else
Item.Set_FontSize( this.Internal_IncDecFontSize( bIncrease, StartTextPr.FontSize ) );
}
} }
// Выставляем настройки для символа параграфа
if ( undefined != this.TextPr.Value.FontSize )
this.TextPr.Set_FontSize( this.Internal_IncDecFontSize( bIncrease, this.TextPr.Value.FontSize ) );
else
this.TextPr.Set_FontSize( this.Internal_IncDecFontSize( bIncrease, StartTextPr.FontSize ) );
return true;
} }
// Выставляем настройки для символа параграфа // найдем текущую позицию
if ( undefined != this.TextPr.Value.FontSize ) var Line = this.Content;
this.TextPr.Set_FontSize( this.Internal_IncDecFontSize( bIncrease, this.TextPr.Value.FontSize ) ); var CurPos = this.CurPos.ContentPos;
else if ( true === this.Selection.Use )
this.TextPr.Set_FontSize( this.Internal_IncDecFontSize( bIncrease, StartTextPr.FontSize ) ); {
var StartPos = this.Selection.StartPos;
var EndPos = this.Selection.EndPos;
return true; if ( StartPos > EndPos )
} {
var Temp = EndPos;
EndPos = StartPos;
StartPos = Temp;
}
// найдем текущую позицию // Если селект продолжается до конца параграфа, не ставим отметку в конце
var Line = this.Content; var LastPos = this.Internal_GetEndPos();
var CurPos = this.CurPos.ContentPos; var bEnd = false;
if ( true === this.Selection.Use ) if ( EndPos > LastPos )
{ {
var StartPos = this.Selection.StartPos; EndPos = LastPos;
var EndPos = this.Selection.EndPos; bEnd = true;
}
if ( StartPos > EndPos ) // Рассчитываем настройки, которые используются после селекта
{ var TextPr_end = this.Internal_GetTextPr( EndPos );
var Temp = EndPos; var TextPr_start = this.Internal_GetTextPr( StartPos );
EndPos = StartPos;
StartPos = Temp;
}
// Если селект продолжается до конца параграфа, не ставим отметку в конце if ( undefined != TextPr_start.FontSize )
var LastPos = this.Internal_GetEndPos(); TextPr_start.FontSize = this.Internal_IncDecFontSize( bIncrease, TextPr_start.FontSize );
var bEnd = false; else
if ( EndPos > LastPos ) TextPr_start.FontSize = this.Internal_IncDecFontSize( bIncrease, StartTextPr.FontSize );
{
EndPos = LastPos; this.Internal_Content_Add( StartPos, new ParaTextPr( TextPr_start ) );
bEnd = true; if ( false === bEnd )
this.Internal_Content_Add( EndPos + 1, new ParaTextPr( TextPr_end ) );
else
{
// Выставляем настройки для символа параграфа
if ( undefined != this.TextPr.Value.FontSize )
this.TextPr.Set_FontSize( this.Internal_IncDecFontSize( bIncrease, this.TextPr.Value.FontSize ) );
else
this.TextPr.Set_FontSize( this.Internal_IncDecFontSize( bIncrease, StartTextPr.FontSize ) );
}
for ( var Pos = StartPos + 1; Pos < EndPos; Pos++ )
{
Item = this.Content[Pos];
if ( para_TextPr === Item.Type )
{
if ( undefined != Item.Value.FontSize )
Item.Set_FontSize( this.Internal_IncDecFontSize( bIncrease, Item.Value.FontSize ) );
else
Item.Set_FontSize( this.Internal_IncDecFontSize( bIncrease, StartTextPr.FontSize ) );
}
}
return true;
} }
// Рассчитываем настройки, которые используются после селекта // 1. Если мы в конце параграфа, тогда добавляем запись о шрифте (применимо к знаку конца параграфа)
var TextPr_end = this.Internal_GetTextPr( EndPos ); // 2. Если справа или слева стоит пробел (начало параграфа или перенос строки(командный)), тогда ставим метку со шрифтом и фокусим канву.
var TextPr_start = this.Internal_GetTextPr( StartPos ); // 3. Если мы посередине слова, тогда меняем шрифт для данного слова
if ( undefined != TextPr_start.FontSize ) var oEnd = this.Internal_FindForward ( CurPos, [para_PageNum, para_Drawing, para_Tab, para_Text, para_Space, para_End, para_NewLine] );
TextPr_start.FontSize = this.Internal_IncDecFontSize( bIncrease, TextPr_start.FontSize ); var oStart = this.Internal_FindBackward( CurPos - 1, [para_PageNum, para_Drawing, para_Tab, para_Text, para_Space, para_NewLine] );
else var CurType = this.Content[CurPos].Type;
TextPr_start.FontSize = this.Internal_IncDecFontSize( bIncrease, StartTextPr.FontSize );
this.Internal_Content_Add( StartPos, new ParaTextPr( TextPr_start ) ); if ( !oEnd.Found )
if ( false === bEnd ) return false;
this.Internal_Content_Add( EndPos + 1, new ParaTextPr( TextPr_end ) );
else if ( para_End == oEnd.Type )
{ {
// Вставляем запись о новых настройках перед концом параграфа, а текущую позицию выставляем на конец параграфа
var Pos = oEnd.LetterPos;
var TextPr_start = this.Internal_GetTextPr( Pos );
if ( undefined != TextPr_start.FontSize )
TextPr_start.FontSize = this.Internal_IncDecFontSize( bIncrease, TextPr_start.FontSize );
else
TextPr_start.FontSize = this.Internal_IncDecFontSize( bIncrease, StartTextPr.FontSize );
this.Internal_Content_Add( Pos, new ParaTextPr( TextPr_start ) );
this.Set_ContentPos( Pos + 1, true, -1 );
// Выставляем настройки для символа параграфа // Выставляем настройки для символа параграфа
if ( undefined != this.TextPr.Value.FontSize ) if ( undefined != this.TextPr.Value.FontSize )
this.TextPr.Set_FontSize( this.Internal_IncDecFontSize( bIncrease, this.TextPr.Value.FontSize ) ); this.TextPr.Set_FontSize( this.Internal_IncDecFontSize( bIncrease, this.TextPr.Value.FontSize ) );
else else
this.TextPr.Set_FontSize( this.Internal_IncDecFontSize( bIncrease, StartTextPr.FontSize ) ); this.TextPr.Set_FontSize( this.Internal_IncDecFontSize( bIncrease, StartTextPr.FontSize ) );
}
for ( var Pos = StartPos + 1; Pos < EndPos; Pos++ ) return true;
{
Item = this.Content[Pos];
if ( para_TextPr === Item.Type )
{
if ( undefined != Item.Value.FontSize )
Item.Set_FontSize( this.Internal_IncDecFontSize( bIncrease, Item.Value.FontSize ) );
else
Item.Set_FontSize( this.Internal_IncDecFontSize( bIncrease, StartTextPr.FontSize ) );
}
} }
else if ( para_PageNum === CurType || para_Drawing === CurType || para_Tab == CurType || para_Space == CurType || para_NewLine == CurType || !oStart.Found || para_NewLine == oEnd.Type || para_Space == oEnd.Type || para_NewLine == oStart.Type || para_Space == oStart.Type || para_Tab == oEnd.Type || para_Tab == oStart.Type || para_Drawing == oEnd.Type || para_Drawing == oStart.Type || para_PageNum == oEnd.Type || para_PageNum == oStart.Type )
{
var TextPr_old = this.Internal_GetTextPr( CurPos );
var TextPr_new = TextPr_old.Copy();
return true; if ( undefined != TextPr_new.FontSize )
} TextPr_new.FontSize = this.Internal_IncDecFontSize( bIncrease, TextPr_new.FontSize );
else
TextPr_new.FontSize = this.Internal_IncDecFontSize( bIncrease, StartTextPr.FontSize );
// 1. Если мы в конце параграфа, тогда добавляем запись о шрифте (применимо к знаку конца параграфа) this.Internal_Content_Add( CurPos, new ParaTextPr( TextPr_old ) );
// 2. Если справа или слева стоит пробел (начало параграфа или перенос строки(командный)), тогда ставим метку со шрифтом и фокусим канву. this.Internal_Content_Add( CurPos, new ParaEmpty(true) );
// 3. Если мы посередине слова, тогда меняем шрифт для данного слова this.Internal_Content_Add( CurPos, new ParaTextPr( TextPr_new ) );
var oEnd = this.Internal_FindForward ( CurPos, [para_PageNum, para_Drawing, para_Tab, para_Text, para_Space, para_End, para_NewLine] ); this.Set_ContentPos( CurPos + 1, true, -1 );
var oStart = this.Internal_FindBackward( CurPos - 1, [para_PageNum, para_Drawing, para_Tab, para_Text, para_Space, para_NewLine] ); this.RecalculateCurPos();
var CurType = this.Content[CurPos].Type; return false;
}
else
{
// Мы находимся посередине слова. В начале слова ставим запись о новом размере шрифта,
// а в конце слова старый размер шрифта. Кроме этого, надо заменить все записи о размерах шрифте внутри слова.
if ( !oEnd.Found ) // Найдем начало слова
return false; var oWordStart = this.Internal_FindBackward( CurPos, [para_PageNum, para_Drawing, para_Tab, para_Space, para_NewLine] );
if ( !oWordStart.Found )
oWordStart = this.Internal_FindForward( 0, [para_Text] );
else
oWordStart.LetterPos++;
if ( para_End == oEnd.Type ) var oWordEnd = this.Internal_FindForward( CurPos, [para_PageNum, para_Drawing, para_Tab, para_Space, para_End, para_NewLine] );
{
// Вставляем запись о новых настройках перед концом параграфа, а текущую позицию выставляем на конец параграфа
var Pos = oEnd.LetterPos;
var TextPr_start = this.Internal_GetTextPr( Pos );
if ( undefined != TextPr_start.FontSize ) if ( !oWordStart.Found || !oWordEnd.Found )
TextPr_start.FontSize = this.Internal_IncDecFontSize( bIncrease, TextPr_start.FontSize ); return;
else
TextPr_start.FontSize = this.Internal_IncDecFontSize( bIncrease, StartTextPr.FontSize );
this.Internal_Content_Add( Pos, new ParaTextPr( TextPr_start ) ); // Рассчитываем настройки, которые используются после слова
this.Set_ContentPos( Pos + 1, true, -1 ); var TextPr_end = this.Internal_GetTextPr( oWordEnd.LetterPos );
var TextPr_start = this.Internal_GetTextPr( oWordStart.LetterPos );
// Выставляем настройки для символа параграфа if ( undefined != TextPr_start.FontSize )
if ( undefined != this.TextPr.Value.FontSize ) TextPr_start.FontSize = this.Internal_IncDecFontSize( bIncrease, TextPr_start.FontSize );
this.TextPr.Set_FontSize( this.Internal_IncDecFontSize( bIncrease, this.TextPr.Value.FontSize ) ); else
else TextPr_start.FontSize = this.Internal_IncDecFontSize( bIncrease, StartTextPr.FontSize );
this.TextPr.Set_FontSize( this.Internal_IncDecFontSize( bIncrease, StartTextPr.FontSize ) );
return true; this.Internal_Content_Add( oWordStart.LetterPos, new ParaTextPr( TextPr_start ) );
} this.Internal_Content_Add( oWordEnd.LetterPos + 1 /* из-за предыдущего Internal_Content_Add */, new ParaTextPr( TextPr_end ) );
else if ( para_PageNum === CurType || para_Drawing === CurType || para_Tab == CurType || para_Space == CurType || para_NewLine == CurType || !oStart.Found || para_NewLine == oEnd.Type || para_Space == oEnd.Type || para_NewLine == oStart.Type || para_Space == oStart.Type || para_Tab == oEnd.Type || para_Tab == oStart.Type || para_Drawing == oEnd.Type || para_Drawing == oStart.Type || para_PageNum == oEnd.Type || para_PageNum == oStart.Type )
{
var TextPr_old = this.Internal_GetTextPr( CurPos );
var TextPr_new = TextPr_old.Copy();
if ( undefined != TextPr_new.FontSize ) this.Set_ContentPos( CurPos + 1, true, -1 );
TextPr_new.FontSize = this.Internal_IncDecFontSize( bIncrease, TextPr_new.FontSize );
else
TextPr_new.FontSize = this.Internal_IncDecFontSize( bIncrease, StartTextPr.FontSize );
this.Internal_Content_Add( CurPos, new ParaTextPr( TextPr_old ) ); // Если внутри слова были изменения размера шрифта, тогда заменяем их.
this.Internal_Content_Add( CurPos, new ParaEmpty(true) ); for ( var Pos = oWordStart.LetterPos + 1; Pos < oWordEnd.LetterPos; Pos++ )
this.Internal_Content_Add( CurPos, new ParaTextPr( TextPr_new ) ); {
Item = this.Content[Pos];
if ( para_TextPr === Item.Type )
{
if ( undefined != Item.Value.FontSize )
Item.Set_FontSize( this.Internal_IncDecFontSize( bIncrease, Item.Value.FontSize ) );
else
Item.Set_FontSize( this.Internal_IncDecFontSize( bIncrease, StartTextPr.FontSize ) );
}
}
this.Set_ContentPos( CurPos + 1, true, -1 ); return true;
this.RecalculateCurPos(); }
return false;
} }
else else
{ {
// Мы находимся посередине слова. В начале слова ставим запись о новом размере шрифта, // Удалим все лишние пустые раны из параграфа
// а в конце слова старый размер шрифта. Кроме этого, надо заменить все записи о размерах шрифте внутри слова. this.Remove_EmptyRuns();
// Найдем начало слова if ( true === this.ApplyToAll )
var oWordStart = this.Internal_FindBackward( CurPos, [para_PageNum, para_Drawing, para_Tab, para_Space, para_NewLine] ); {
if ( !oWordStart.Found ) // Применяем настройки ко всем элементам параграфа
oWordStart = this.Internal_FindForward( 0, [para_Text] ); var ContentLen = this.Content.length;
for ( var CurPos = 0; CurPos < ContentLen; CurPos++ )
{
this.Content[CurPos].Apply_TextPr( undefined, bIncrease );
}
// Выставляем настройки для символа параграфа
this.TextPr.Apply_TextPr( TextPr );
}
else else
oWordStart.LetterPos++; {
if ( true === this.Selection.Use )
{
this.Apply_TextPr( undefined, bIncrease );
}
else
{
var CurParaPos = this.Get_ParaContentPos( false, false );
var CurPos = CurParaPos.Get(0);
var oWordEnd = this.Internal_FindForward( CurPos, [para_PageNum, para_Drawing, para_Tab, para_Space, para_End, para_NewLine] ); // Сначала посмотрим на элемент слева и справа(текущий)
var SearchLPos = new CParagraphSearchPos();
this.Get_LeftPos( SearchLPos, CurParaPos );
if ( !oWordStart.Found || !oWordEnd.Found ) var RItem = this.Get_RunElementByPos( CurParaPos );
return; var LItem = ( false === SearchLPos.Found ? null : this.Get_RunElementByPos( SearchLPos.Pos ) );
// Рассчитываем настройки, которые используются после слова // 1. Если мы находимся в конце параграфа, тогда применяем заданную настройку к знаку параграфа
var TextPr_end = this.Internal_GetTextPr( oWordEnd.LetterPos ); // и добавляем пустой ран с заданными настройками.
var TextPr_start = this.Internal_GetTextPr( oWordStart.LetterPos ); // 2. Если мы находимся в середине слова (справа и слева текстовый элемент, причем оба не пунктуация),
// тогда меняем настройки для данного слова.
// 3. Во всех остальных случаях вставляем пустой ран с заданными настройкми и переносим курсор в этот
// ран, чтобы при последующем наборе текст отрисовывался с нужными настройками.
if ( undefined != TextPr_start.FontSize ) if ( null === RItem || para_End === RItem.Type )
TextPr_start.FontSize = this.Internal_IncDecFontSize( bIncrease, TextPr_start.FontSize ); {
else this.Apply_TextPr( undefined, bIncrease );
TextPr_start.FontSize = this.Internal_IncDecFontSize( bIncrease, StartTextPr.FontSize );
this.Internal_Content_Add( oWordStart.LetterPos, new ParaTextPr( TextPr_start ) ); // Выставляем настройки для символа параграфа
this.Internal_Content_Add( oWordEnd.LetterPos + 1 /* из-за предыдущего Internal_Content_Add */, new ParaTextPr( TextPr_end ) ); var EndTextPr = this.Get_CompiledPr2( false).TextPr.Copy();
EndTextPr.Merge( this.TextPr.Value );
this.Set_ContentPos( CurPos + 1, true, -1 ); // TODO: Как только перенесем историю изменений TextPr в сам класс CTextPr, переделать тут
this.TextPr.Set_FontSize( FontSize_IncreaseDecreaseValue( bIncrease, EndTextPr.FontSize ) );
}
else if ( null !== RItem && null !== LItem && para_Text === RItem.Type && para_Text === LItem.Type && false === RItem.Is_Punctuation() && false === LItem.Is_Punctuation() )
{
var SearchSPos = new CParagraphSearchPos();
var SearchEPos = new CParagraphSearchPos();
// Если внутри слова были изменения размера шрифта, тогда заменяем их. this.Get_WordStartPos( SearchSPos, CurParaPos );
for ( var Pos = oWordStart.LetterPos + 1; Pos < oWordEnd.LetterPos; Pos++ ) this.Get_WordEndPos( SearchEPos, CurParaPos );
{
Item = this.Content[Pos]; // Такого быть не должно, т.к. мы уже проверили, что справа и слева точно есть текст
if ( para_TextPr === Item.Type ) if ( true !== SearchSPos.Found || true !== SearchEPos.Found )
{ return;
if ( undefined != Item.Value.FontSize )
Item.Set_FontSize( this.Internal_IncDecFontSize( bIncrease, Item.Value.FontSize ) ); // Выставим временно селект от начала и до конца слова
this.Selection.Use = true;
this.Set_SelectionContentPos( SearchSPos.Pos, SearchEPos.Pos );
this.Apply_TextPr( undefined, bIncrease );
// Убираем селект
this.Selection_Remove();
}
else else
Item.Set_FontSize( this.Internal_IncDecFontSize( bIncrease, StartTextPr.FontSize ) ); {
this.Apply_TextPr( undefined, bIncrease );
}
} }
} }
...@@ -11593,7 +11680,7 @@ Paragraph.prototype = ...@@ -11593,7 +11680,7 @@ Paragraph.prototype =
} }
}, },
Apply_TextPr : function(TextPr) Apply_TextPr : function(TextPr, IncFontSize)
{ {
// Данная функция работает по следующему принципу: если задано выделение, тогда применяем настройки к // Данная функция работает по следующему принципу: если задано выделение, тогда применяем настройки к
// выделенной части, а если выделения нет, тогда в текущее положение вставляем пустой ран с заданными настройками // выделенной части, а если выделения нет, тогда в текущее положение вставляем пустой ран с заданными настройками
...@@ -11606,7 +11693,7 @@ Paragraph.prototype = ...@@ -11606,7 +11693,7 @@ Paragraph.prototype =
if ( StartPos === EndPos ) if ( StartPos === EndPos )
{ {
var NewElements = this.Content[EndPos].Apply_TextPr( TextPr ); var NewElements = this.Content[EndPos].Apply_TextPr( TextPr, IncFontSize );
if ( para_Run === this.Content[EndPos].Type ) if ( para_Run === this.Content[EndPos].Type )
{ {
...@@ -11636,15 +11723,15 @@ Paragraph.prototype = ...@@ -11636,15 +11723,15 @@ Paragraph.prototype =
for ( var CurPos = StartPos + 1; CurPos < EndPos; CurPos++ ) for ( var CurPos = StartPos + 1; CurPos < EndPos; CurPos++ )
{ {
this.Content[CurPos].Apply_TextPr( TextPr ); this.Content[CurPos].Apply_TextPr( TextPr, IncFontSize );
} }
var NewElements = this.Content[EndPos].Apply_TextPr( TextPr ); var NewElements = this.Content[EndPos].Apply_TextPr( TextPr, IncFontSize );
if ( para_Run === this.Content[EndPos].Type ) if ( para_Run === this.Content[EndPos].Type )
this.Internal_ReplaceRun( EndPos, NewElements ); this.Internal_ReplaceRun( EndPos, NewElements );
var NewElements = this.Content[StartPos].Apply_TextPr( TextPr ); var NewElements = this.Content[StartPos].Apply_TextPr( TextPr, IncFontSize );
if ( para_Run === this.Content[StartPos].Type ) if ( para_Run === this.Content[StartPos].Type )
this.Internal_ReplaceRun( StartPos, NewElements ); this.Internal_ReplaceRun( StartPos, NewElements );
...@@ -11656,7 +11743,7 @@ Paragraph.prototype = ...@@ -11656,7 +11743,7 @@ Paragraph.prototype =
{ {
var Pos = this.CurPos.ContentPos; var Pos = this.CurPos.ContentPos;
var Element = this.Content[Pos]; var Element = this.Content[Pos];
var NewElements = Element.Apply_TextPr( TextPr ); var NewElements = Element.Apply_TextPr( TextPr, IncFontSize );
if ( para_Run === Element.Type ) if ( para_Run === Element.Type )
{ {
......
...@@ -3105,7 +3105,7 @@ ParaRun.prototype = ...@@ -3105,7 +3105,7 @@ ParaRun.prototype =
this.Recalc_CompiledPr(true); this.Recalc_CompiledPr(true);
}, },
Apply_TextPr : function(TextPr) Apply_TextPr : function(TextPr, IncFontSize)
{ {
var Result = []; var Result = [];
var LRun = this, CRun = null, RRun = null; var LRun = this, CRun = null, RRun = null;
...@@ -3143,7 +3143,16 @@ ParaRun.prototype = ...@@ -3143,7 +3143,16 @@ ParaRun.prototype =
LRun.Selection_Remove(); LRun.Selection_Remove();
CRun.Select_All(); CRun.Select_All();
CRun.Apply_Pr( TextPr );
if ( undefined === IncFontSize )
CRun.Apply_Pr( TextPr );
else
{
var _TextPr = new CTextPr();
var CurTextPr = this.Get_CompiledPr( false );
CRun.Set_FontSize( FontSize_IncreaseDecreaseValue( IncFontSize, CurTextPr.FontSize ) );
}
if ( null !== RRun ) if ( null !== RRun )
RRun.Selection_Remove(); RRun.Selection_Remove();
...@@ -3184,7 +3193,19 @@ ParaRun.prototype = ...@@ -3184,7 +3193,19 @@ ParaRun.prototype =
CRun.Selection_Remove(); CRun.Selection_Remove();
CRun.Cursor_MoveToStartPos(); CRun.Cursor_MoveToStartPos();
CRun.Apply_Pr( TextPr );
if ( undefined === IncFontSize )
{
CRun.Apply_Pr( TextPr );
}
else
{
var _TextPr = new CTextPr();
var CurTextPr = this.Get_CompiledPr( false );
CRun.Set_FontSize( FontSize_IncreaseDecreaseValue( IncFontSize, CurTextPr.FontSize ) );
}
if ( null !== RRun ) if ( null !== RRun )
RRun.Selection_Remove(); RRun.Selection_Remove();
...@@ -3877,3 +3898,68 @@ function CParaRunCollaborativeMark(Pos, Type) ...@@ -3877,3 +3898,68 @@ function CParaRunCollaborativeMark(Pos, Type)
this.Pos = Pos; this.Pos = Pos;
this.Type = Type; this.Type = Type;
} }
function FontSize_IncreaseDecreaseValue(bIncrease, Value)
{
// Закон изменения размеров :
// 1. Если значение меньше 8, тогда мы увеличиваем/уменьшаем по 1 (от 1 до 8)
// 2. Если значение больше 72, тогда мы увеличиваем/уменьшаем по 10 (от 80 до бесконечности
// 3. Если значение в отрезке [8,72], тогда мы переходим по следующим числам 8,9,10,11,12,14,16,18,20,22,24,26,28,36,48,72
var Sizes = [8,9,10,11,12,14,16,18,20,22,24,26,28,36,48,72];
var NewValue = Value;
if ( true === bIncrease )
{
if ( Value < Sizes[0] )
{
if ( Value >= Sizes[0] - 1 )
NewValue = Sizes[0];
else
NewValue = Math.floor(Value + 1);
}
else if ( Value >= Sizes[Sizes.length - 1] )
{
NewValue = Math.min( 300, Math.floor( Value / 10 + 1 ) * 10 );
}
else
{
for ( var Index = 0; Index < Sizes.length; Index++ )
{
if ( Value < Sizes[Index] )
{
NewValue = Sizes[Index];
break;
}
}
}
}
else
{
if ( Value <= Sizes[0] )
{
NewValue = Math.max( Math.floor( Value - 1 ), 1 );
}
else if ( Value > Sizes[Sizes.length - 1] )
{
if ( Value <= Math.floor( Sizes[Sizes.length - 1] / 10 + 1 ) * 10 )
NewValue = Sizes[Sizes.length - 1];
else
NewValue = Math.floor( Math.ceil(Value / 10) - 1 ) * 10;
}
else
{
for ( var Index = Sizes.length - 1; Index >= 0; Index-- )
{
if ( Value > Sizes[Index] )
{
NewValue = Sizes[Index];
break;
}
}
}
}
return NewValue;
}
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