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

Исправлен баг с рассчетом высоты строки с инлайн-автофигурой(баг 26687)....

Исправлен баг с рассчетом высоты строки с инлайн-автофигурой(баг 26687). Исправлен баг с определением когда надо рисовать нижнюю границу параграфа (баг 26695). Исправлен баг с быстрым рассчетом текста добавленного после PageBreak. 

git-svn-id: svn://192.168.3.15/activex/AVS/Sources/TeamlabOffice/trunk/OfficeWeb@58510 954022d7-b5bf-4e40-9824-e11837661b57
parent c51cd598
...@@ -2130,7 +2130,7 @@ Paragraph.prototype = ...@@ -2130,7 +2130,7 @@ Paragraph.prototype =
} }
var CurLine = this.Pages[CurPage].EndLine; var CurLine = this.Pages[CurPage].EndLine;
var bEnd = ( this.Content.length - 2 <= this.Lines[CurLine].EndPos ? true : false ); var bEnd = (this.Lines[CurLine].Info & paralineinfo_End ? true : false);
// Рисуем линию после параграфа // Рисуем линию после параграфа
if ( true === bEnd && true === Pr.ParaPr.Brd.Last && border_Single === Pr.ParaPr.Brd.Bottom.Value ) if ( true === bEnd && true === Pr.ParaPr.Brd.Last && border_Single === Pr.ParaPr.Brd.Bottom.Value )
...@@ -5710,12 +5710,12 @@ Paragraph.prototype = ...@@ -5710,12 +5710,12 @@ Paragraph.prototype =
var _StartLine = this.Pages[CurPage].StartLine; var _StartLine = this.Pages[CurPage].StartLine;
var _EndLine = this.Pages[CurPage].EndLine; var _EndLine = this.Pages[CurPage].EndLine;
if ( StartPos > this.Lines[_EndLine].EndPos || EndPos < this.Lines[_StartLine].StartPos ) if ( StartPos > this.Lines[_EndLine].Get_EndPos() || EndPos < this.Lines[_StartLine].Get_StartPos() )
return; return;
else else
{ {
StartPos = Math.max( StartPos, this.Lines[_StartLine].StartPos ); StartPos = Math.max( StartPos, this.Lines[_StartLine].Get_StartPos() );
EndPos = Math.min( EndPos, ( _EndLine != this.Lines.length - 1 ? this.Lines[_EndLine].EndPos : this.Content.length - 1 ) ); EndPos = Math.min( EndPos, ( _EndLine != this.Lines.length - 1 ? this.Lines[_EndLine].Get_EndPos() : this.Content.length - 1 ) );
} }
var DrawSelection = new CParagraphDrawSelectionRange(); var DrawSelection = new CParagraphDrawSelectionRange();
...@@ -6022,10 +6022,10 @@ Paragraph.prototype = ...@@ -6022,10 +6022,10 @@ Paragraph.prototype =
for (var CurLine = 0; CurLine < LinesCount; CurLine++ ) for (var CurLine = 0; CurLine < LinesCount; CurLine++ )
{ {
if ( -1 === StartLine && StartPos >= this.Lines[CurLine].StartPos && StartPos <= this.Lines[CurLine].EndPos ) if ( -1 === StartLine && StartPos >= this.Lines[CurLine].Get_StartPos() && StartPos <= this.Lines[CurLine].Get_EndPos() )
StartLine = CurLine; StartLine = CurLine;
if ( EndPos >= this.Lines[CurLine].StartPos && EndPos <= this.Lines[CurLine].EndPos ) if ( EndPos >= this.Lines[CurLine].Get_StartPos() && EndPos <= this.Lines[CurLine].Get_EndPos() )
EndLine = CurLine; EndLine = CurLine;
} }
...@@ -10097,7 +10097,7 @@ Paragraph.prototype = ...@@ -10097,7 +10097,7 @@ Paragraph.prototype =
{ {
for ( CurPage = this.Pages.length - 1; CurPage > 0; CurPage-- ) for ( CurPage = this.Pages.length - 1; CurPage > 0; CurPage-- )
{ {
if ( Data.Pos > this.Lines[this.Pages[CurPage].StartLine].StartPos ) if ( Data.Pos > this.Lines[this.Pages[CurPage].StartLine].Get_StartPos() )
break; break;
} }
......
...@@ -727,14 +727,14 @@ Paragraph.prototype.private_RecalculateLine = function(CurLine, CurPa ...@@ -727,14 +727,14 @@ Paragraph.prototype.private_RecalculateLine = function(CurLine, CurPa
return; return;
//------------------------------------------------------------------------------------------------------------- //-------------------------------------------------------------------------------------------------------------
// 10. Пересчитываем сдвиги элементов внутри параграфа и видимые ширины пробелов, в зависимости от align. // 10. Выставляем вертикальное смещение данной строки
//------------------------------------------------------------------------------------------------------------- //-------------------------------------------------------------------------------------------------------------
this.private_RecalculateLineAlign(CurLine, CurPage, PRS, ParaPr, false); this.private_RecalculateLineBaseLine(CurLine, CurPage, PRS, ParaPr);
//------------------------------------------------------------------------------------------------------------- //-------------------------------------------------------------------------------------------------------------
// 11. Выставляем вертикальное смещение данной строки // 11. Пересчитываем сдвиги элементов внутри параграфа и видимые ширины пробелов, в зависимости от align.
//------------------------------------------------------------------------------------------------------------- //-------------------------------------------------------------------------------------------------------------
if (false === this.private_RecalculateLineBaseLine(CurLine, CurPage, PRS, ParaPr)) if (recalcresult_NextElement !== this.private_RecalculateLineAlign(CurLine, CurPage, PRS, ParaPr, false))
return; return;
//------------------------------------------------------------------------------------------------------------- //-------------------------------------------------------------------------------------------------------------
...@@ -838,7 +838,7 @@ Paragraph.prototype.private_RecalculateLineRanges = function(CurLine, CurPa ...@@ -838,7 +838,7 @@ Paragraph.prototype.private_RecalculateLineRanges = function(CurLine, CurPa
Paragraph.prototype.private_RecalculateLineInfo = function(CurLine, CurPage, PRS, ParaPr) Paragraph.prototype.private_RecalculateLineInfo = function(CurLine, CurPage, PRS, ParaPr)
{ {
if ( true === PRS.BreakPageLine ) if ( true === PRS.BreakPageLine || true === PRS.SkipPageBreak )
this.Lines[CurLine].Info |= paralineinfo_BreakPage; this.Lines[CurLine].Info |= paralineinfo_BreakPage;
if ( true === PRS.EmptyLine ) if ( true === PRS.EmptyLine )
...@@ -1163,25 +1163,6 @@ Paragraph.prototype.private_RecalculateLineCheckRanges = function(CurLine, CurPa ...@@ -1163,25 +1163,6 @@ Paragraph.prototype.private_RecalculateLineCheckRanges = function(CurLine, CurPa
Paragraph.prototype.private_RecalculateLineBaseLine = function(CurLine, CurPage, PRS, ParaPr) Paragraph.prototype.private_RecalculateLineBaseLine = function(CurLine, CurPage, PRS, ParaPr)
{ {
if ( true === PRS.NewPage )
{
// Если это последний элемент параграфа, тогда нам не надо переносить текущий параграф
// на новую страницу. Нам надо выставить границы так, чтобы следующий параграф начинался
// с новой страницы.
// Здесь проверяем специальный случай, когда у нас после PageBreak в параграфе ничего не идет кроме
// плавающих объектов. В такой ситуации мы располагаем эти объекты на текущей странице (см. DemoHyden v2).
if ( true === this.Check_BreakPageEnd( PRS.PageBreak ) )
{
PRS.PageBreak.Flags.NewLine = false;
PRS.ExtendBoundToBottom = true;
PRS.SkipPageBreak = true;
PRS.RecalcResult = recalcresult_CurLine;
return false;
}
if (this.Lines[CurLine].Info & paralineinfo_RangeY) if (this.Lines[CurLine].Info & paralineinfo_RangeY)
{ {
this.Lines[CurLine].Y = PRS.Y - this.Pages[CurPage].Y; this.Lines[CurLine].Y = PRS.Y - this.Pages[CurPage].Y;
...@@ -1191,7 +1172,7 @@ Paragraph.prototype.private_RecalculateLineBaseLine = function(CurLine, CurPa ...@@ -1191,7 +1172,7 @@ Paragraph.prototype.private_RecalculateLineBaseLine = function(CurLine, CurPa
if ( CurLine > 0 ) if ( CurLine > 0 )
{ {
// Первая линия на странице не должна двигаться // Первая линия на странице не должна двигаться
if ( CurLine != this.Pages[CurPage].FirstLine ) if ( CurLine != this.Pages[CurPage].FirstLine && ( true === PRS.End || true !== PRS.EmptyLine || PRS.RangesCount <= 0 || true === PRS.NewPage ) )
PRS.Y += this.Lines[CurLine - 1].Metrics.Descent + this.Lines[CurLine - 1].Metrics.LineGap + this.Lines[CurLine].Metrics.Ascent; PRS.Y += this.Lines[CurLine - 1].Metrics.Descent + this.Lines[CurLine - 1].Metrics.LineGap + this.Lines[CurLine].Metrics.Ascent;
this.Lines[CurLine].Y = PRS.Y - this.Pages[CurPage].Y; this.Lines[CurLine].Y = PRS.Y - this.Pages[CurPage].Y;
...@@ -1203,41 +1184,34 @@ Paragraph.prototype.private_RecalculateLineBaseLine = function(CurLine, CurPa ...@@ -1203,41 +1184,34 @@ Paragraph.prototype.private_RecalculateLineBaseLine = function(CurLine, CurPa
this.Lines[CurLine].Y += PRS.BaseLineOffset; this.Lines[CurLine].Y += PRS.BaseLineOffset;
if (this.Lines[CurLine].Metrics.LineGap < 0) if (this.Lines[CurLine].Metrics.LineGap < 0)
this.Lines[CurLine].Y += this.Lines[CurLine].Metrics.LineGap; this.Lines[CurLine].Y += this.Lines[CurLine].Metrics.LineGap;
};
this.Pages[CurPage].Set_EndLine( CurLine ); Paragraph.prototype.private_RecalculateLineEnd = function(CurLine, CurPage, PRS, ParaPr)
PRS.RecalcResult = recalcresult_NextPage; {
return false; if ( true === PRS.NewPage )
}
else
{
if (this.Lines[CurLine].Info & paralineinfo_RangeY)
{
this.Lines[CurLine].Y = PRS.Y - this.Pages[CurPage].Y;
}
else
{
if ( CurLine > 0 )
{ {
// Первая линия на странице не должна двигаться // Если это последний элемент параграфа, тогда нам не надо переносить текущий параграф
if ( CurLine != this.Pages[CurPage].FirstLine && ( true === PRS.End || true !== PRS.EmptyLine || PRS.RangesCount <= 0 ) ) // на новую страницу. Нам надо выставить границы так, чтобы следующий параграф начинался
PRS.Y += this.Lines[CurLine - 1].Metrics.Descent + this.Lines[CurLine - 1].Metrics.LineGap + this.Lines[CurLine].Metrics.Ascent; // с новой страницы.
this.Lines[CurLine].Y = PRS.Y - this.Pages[CurPage].Y;
}
else
this.Lines[0].Y = 0;
}
this.Lines[CurLine].Y += PRS.BaseLineOffset; // Здесь проверяем специальный случай, когда у нас после PageBreak в параграфе ничего не идет кроме
if (this.Lines[CurLine].Metrics.LineGap < 0) // плавающих объектов. В такой ситуации мы располагаем эти объекты на текущей странице (см. DemoHyden v2).
this.Lines[CurLine].Y += this.Lines[CurLine].Metrics.LineGap;
return true; if ( true === this.Check_BreakPageEnd( PRS.PageBreak ) )
{
PRS.PageBreak.Flags.NewLine = false;
PRS.ExtendBoundToBottom = true;
PRS.SkipPageBreak = true;
PRS.RecalcResult = recalcresult_CurLine;
return false;
}
this.Pages[CurPage].Set_EndLine( CurLine );
PRS.RecalcResult = recalcresult_NextPage;
return false;
} }
};
Paragraph.prototype.private_RecalculateLineEnd = function(CurLine, CurPage, PRS, ParaPr)
{
// Такое случается, когда у нас после пересчета Flow картинки, место к которому она была привязана перешло на // Такое случается, когда у нас после пересчета Flow картинки, место к которому она была привязана перешло на
// следующую страницу. // следующую страницу.
if (recalcresult_NextPage === PRS.RecalcResult) if (recalcresult_NextPage === PRS.RecalcResult)
...@@ -1666,6 +1640,16 @@ CParaLine.prototype = ...@@ -1666,6 +1640,16 @@ CParaLine.prototype =
} }
}, },
Get_StartPos : function()
{
return this.Ranges[0].StartPos;
},
Get_EndPos : function()
{
return this.Ranges[this.Ranges.length - 1].EndPos;
},
Set_RangeStartPos : function(CurRange, StartPos) Set_RangeStartPos : function(CurRange, StartPos)
{ {
this.Ranges[CurRange].StartPos = StartPos; this.Ranges[CurRange].StartPos = StartPos;
......
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