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

Исправлен баг с пересчитывением BaseLine для параграфов с точным расстоянием...

Исправлен баг с пересчитывением BaseLine для параграфов с точным расстоянием между строк. Исправлен баг с расположением курсора после добавления буквицы.

git-svn-id: svn://192.168.3.15/activex/AVS/Sources/TeamlabOffice/trunk/OfficeWeb@49633 954022d7-b5bf-4e40-9824-e11837661b57
parent a7bbe013
...@@ -1835,8 +1835,11 @@ CDocument.prototype = ...@@ -1835,8 +1835,11 @@ CDocument.prototype =
NewParagraph.Update_DropCapByLines( TextPr, NewParagraph.Pr.FramePr.Lines, LineH, LineTA, LineTD ); NewParagraph.Update_DropCapByLines( TextPr, NewParagraph.Pr.FramePr.Lines, LineH, LineTA, LineTD );
this.Internal_Content_Add( Pos, NewParagraph ); this.Internal_Content_Add( Pos, NewParagraph );
NewParagraph.Cursor_MoveToStartPos(); OldParagraph.Cursor_MoveToStartPos();
NewParagraph.Document_SetThisElementCurrent();
this.Selection_Remove();
this.CurPos.ContentPos = Pos + 1;
this.CurPos.Type = docpostype_Content;
this.Recalculate(); this.Recalculate();
} }
...@@ -5941,6 +5944,16 @@ CDocument.prototype = ...@@ -5941,6 +5944,16 @@ CDocument.prototype =
// Если мы находимся в рамке, тогда дополняем ее свойства настройками границы и настройкой текста (если это буквица) // Если мы находимся в рамке, тогда дополняем ее свойства настройками границы и настройкой текста (если это буквица)
if ( undefined != Result_ParaPr.FramePr ) if ( undefined != Result_ParaPr.FramePr )
this.Content[StartPos].Supplement_FramePr( Result_ParaPr.FramePr ); this.Content[StartPos].Supplement_FramePr( Result_ParaPr.FramePr );
else if ( StartPos === EndPos && StartPos > 0 && type_Paragraph === this.Content[StartPos - 1].GetType() )
{
var PrevFrame = this.Content[StartPos - 1].Get_FramePr();
if ( undefined != PrevFrame && undefined != PrevFrame.DropCap )
{
Result_ParaPr.FramePr = PrevFrame.Copy();
this.Content[this.CurPos.ContentPos - 1].Supplement_FramePr( Result_ParaPr.FramePr );
}
}
} }
else else
{ {
...@@ -5957,6 +5970,16 @@ CDocument.prototype = ...@@ -5957,6 +5970,16 @@ CDocument.prototype =
// Если мы находимся в рамке, тогда дополняем ее свойства настройками границы и настройкой текста (если это буквица) // Если мы находимся в рамке, тогда дополняем ее свойства настройками границы и настройкой текста (если это буквица)
if ( undefined != Result_ParaPr.FramePr ) if ( undefined != Result_ParaPr.FramePr )
Item.Supplement_FramePr( Result_ParaPr.FramePr ); Item.Supplement_FramePr( Result_ParaPr.FramePr );
else if ( this.CurPos.ContentPos > 0 && type_Paragraph === this.Content[this.CurPos.ContentPos - 1].GetType() )
{
var PrevFrame = this.Content[this.CurPos.ContentPos - 1].Get_FramePr();
if ( undefined != PrevFrame && undefined != PrevFrame.DropCap )
{
Result_ParaPr.FramePr = PrevFrame.Copy();
this.Content[this.CurPos.ContentPos - 1].Supplement_FramePr( Result_ParaPr.FramePr );
}
}
} }
else if ( type_Table == Item.GetType() ) else if ( type_Table == Item.GetType() )
{ {
......
...@@ -10847,6 +10847,9 @@ Paragraph.prototype = ...@@ -10847,6 +10847,9 @@ Paragraph.prototype =
if ( Pos >= Count ) if ( Pos >= Count )
return null; return null;
var ParaPr = this.Get_CompiledPr2(false).ParaPr;
//NewParagraph.Set_Ind( { FirstLine : ParaPr. } );
var TextPr = this.Internal_CalculateTextPr(Pos); var TextPr = this.Internal_CalculateTextPr(Pos);
var DropCap = this.Content[Pos]; var DropCap = this.Content[Pos];
...@@ -10932,8 +10935,9 @@ Paragraph.prototype = ...@@ -10932,8 +10935,9 @@ Paragraph.prototype =
TNewHeight = -TNewDescent + TNewAscent; TNewHeight = -TNewDescent + TNewAscent;
var Descent = g_oTextMeasurer.GetDescender(); var Descent = g_oTextMeasurer.GetDescender();
var Ascent = g_oTextMeasurer.GetAscender();
var Dy = Descent + TNewHeight - TNewAscent + LineTD; var Dy = Descent * (LineH * Count) / ( Ascent - Descent ) + TNewHeight - TNewAscent + LineTD;
var PTextPr = new ParaTextPr( { RFonts : { Ascii : { Name : TextPr.RFonts.Ascii.Name, Index : -1 } }, FontSize : FontSize * Koef, Position : Dy } ); var PTextPr = new ParaTextPr( { RFonts : { Ascii : { Name : TextPr.RFonts.Ascii.Name, Index : -1 } }, FontSize : FontSize * Koef, Position : Dy } );
...@@ -11021,7 +11025,7 @@ Paragraph.prototype = ...@@ -11021,7 +11025,7 @@ Paragraph.prototype =
var Descent = g_oTextMeasurer.GetDescender(); var Descent = g_oTextMeasurer.GetDescender();
var Dy = Descent + TNewHeight - TNewAscent + LineTD; var Dy = Descent * (LineH * Count) / ( Ascent - Descent ) + TNewHeight - TNewAscent + LineTD;
var PTextPr = new ParaTextPr( { RFonts : { Ascii : { Name : TextPr.RFonts.Ascii.Name, Index : -1 } }, FontSize : TextPr.FontSize, Position : Dy } ); var PTextPr = new ParaTextPr( { RFonts : { Ascii : { Name : TextPr.RFonts.Ascii.Name, Index : -1 } }, FontSize : TextPr.FontSize, Position : Dy } );
this.Select_All(); this.Select_All();
...@@ -13549,51 +13553,61 @@ CParaLineMetrics.prototype = ...@@ -13549,51 +13553,61 @@ CParaLineMetrics.prototype =
var ExactValue = Math.max( 1, ParaPr.Spacing.Line ); var ExactValue = Math.max( 1, ParaPr.Spacing.Line );
LineGap = ExactValue - ( TextAscent + TextDescent ); LineGap = ExactValue - ( TextAscent + TextDescent );
// TODO: пересмотреть тут var Gap = this.Ascent + this.Descent - ExactValue;
// if ( LineGap < 0 )
// {
// var Ascent_old = this.Ascent;
// var Descent_old = this.Descent;
// var TextDescent_old = this.TextDescent;
// var TextAscent_old = this.TextAscent;
//
// var DiffAsc = Ascent_old - TextAscent_old;
// var DiffDes = Descent_old - TextDescent_old;
//
// LineGap += DiffAsc + DiffDes;
//
// Ascent_old = TextAscent_old;
// Descent_old = TextDescent_old;
//
// this.Ascent = ExactValue * Ascent_old / ( Ascent_old + Descent_old );
// this.Descent = ExactValue * Descent_old / ( Ascent_old + Descent_old );
//
// LineGap = 0;
// }
// else
// {
var Gap = this.Ascent + this.Descent - ExactValue;
if ( Gap > 0 ) if ( Gap > 0 )
{
var DescentDiff = this.Descent - this.TextDescent;
if ( DescentDiff > 0 )
{ {
if ( this.Ascent < Gap ) if ( DescentDiff < Gap )
{ {
this.Ascent = 0; this.Descent = this.TextDescent;
this.Descent = ExactValue; Gap -= DescentDiff;
} }
else else
{ {
this.Ascent -= Gap; // уменьшаем Ascent this.Descent -= Gap;
Gap = 0;
} }
} }
else
var AscentDiff = this.Ascent - this.TextAscent;
if ( AscentDiff > 0 )
{
if ( AscentDiff < Gap )
{
this.Ascent = this.TextAscent;
Gap -= AscentDiff;
}
else
{
this.Ascent -= Gap;
Gap = 0;
}
}
if ( Gap > 0 )
{ {
this.Ascent -= Gap; // все в Ascent // Уменьшаем пропорционально TextAscent и TextDescent
var OldTA = this.TextAscent;
var OldTD = this.TextDescent;
var Sum = OldTA + OldTD;
this.Ascent = OldTA * (Sum - Gap) / Sum;
this.Descent = OldTD * (Sum - Gap) / Sum;
} }
}
else
{
this.Ascent -= Gap; // все в Ascent
}
LineGap = 0;
LineGap = 0;
// }
break; break;
} }
......
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