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 =
}
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 )
......@@ -5710,12 +5710,12 @@ Paragraph.prototype =
var _StartLine = this.Pages[CurPage].StartLine;
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;
else
{
StartPos = Math.max( StartPos, this.Lines[_StartLine].StartPos );
EndPos = Math.min( EndPos, ( _EndLine != this.Lines.length - 1 ? this.Lines[_EndLine].EndPos : this.Content.length - 1 ) );
StartPos = Math.max( StartPos, this.Lines[_StartLine].Get_StartPos() );
EndPos = Math.min( EndPos, ( _EndLine != this.Lines.length - 1 ? this.Lines[_EndLine].Get_EndPos() : this.Content.length - 1 ) );
}
var DrawSelection = new CParagraphDrawSelectionRange();
......@@ -6022,10 +6022,10 @@ Paragraph.prototype =
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;
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;
}
......@@ -10097,7 +10097,7 @@ Paragraph.prototype =
{
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;
}
......
......@@ -727,14 +727,14 @@ Paragraph.prototype.private_RecalculateLine = function(CurLine, CurPa
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;
//-------------------------------------------------------------------------------------------------------------
......@@ -838,7 +838,7 @@ Paragraph.prototype.private_RecalculateLineRanges = function(CurLine, CurPa
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;
if ( true === PRS.EmptyLine )
......@@ -1163,25 +1163,6 @@ Paragraph.prototype.private_RecalculateLineCheckRanges = function(CurLine, CurPa
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)
{
this.Lines[CurLine].Y = PRS.Y - this.Pages[CurPage].Y;
......@@ -1191,7 +1172,7 @@ Paragraph.prototype.private_RecalculateLineBaseLine = function(CurLine, CurPa
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;
this.Lines[CurLine].Y = PRS.Y - this.Pages[CurPage].Y;
......@@ -1203,41 +1184,34 @@ Paragraph.prototype.private_RecalculateLineBaseLine = function(CurLine, CurPa
this.Lines[CurLine].Y += PRS.BaseLineOffset;
if (this.Lines[CurLine].Metrics.LineGap < 0)
this.Lines[CurLine].Y += this.Lines[CurLine].Metrics.LineGap;
};
this.Pages[CurPage].Set_EndLine( CurLine );
PRS.RecalcResult = recalcresult_NextPage;
return false;
}
else
{
if (this.Lines[CurLine].Info & paralineinfo_RangeY)
{
this.Lines[CurLine].Y = PRS.Y - this.Pages[CurPage].Y;
}
else
{
if ( CurLine > 0 )
Paragraph.prototype.private_RecalculateLineEnd = function(CurLine, CurPage, PRS, ParaPr)
{
if ( true === PRS.NewPage )
{
// Первая линия на странице не должна двигаться
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;
if (this.Lines[CurLine].Metrics.LineGap < 0)
this.Lines[CurLine].Y += this.Lines[CurLine].Metrics.LineGap;
// Здесь проверяем специальный случай, когда у нас после PageBreak в параграфе ничего не идет кроме
// плавающих объектов. В такой ситуации мы располагаем эти объекты на текущей странице (см. DemoHyden v2).
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 картинки, место к которому она была привязана перешло на
// следующую страницу.
if (recalcresult_NextPage === PRS.RecalcResult)
......@@ -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)
{
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