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

Сделано ускорение пересчета одного параграфа для случая, когда параграф разбит...

Сделано ускорение пересчета одного параграфа для случая, когда параграф разбит на 2 страницы. Исправлен баг с быстрым пересчетом параграфа, внутри которого есть flow-объекты с обтеканием.

git-svn-id: svn://192.168.3.15/activex/AVS/Sources/TeamlabOffice/trunk/OfficeWeb@58295 954022d7-b5bf-4e40-9824-e11837661b57
parent 7d1e4bee
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
......@@ -955,11 +955,9 @@ CDocument.prototype =
var Run = SimpleChanges[0].Class;
var Para = Run.Paragraph;
var Res = Para.Recalculate_Fast( SimpleChanges );
var Res = Para.Recalculate_Fast_Range( SimpleChanges );
if ( -1 !== Res )
{
//console.log( "Fast Range Recalc " + Res );
// Если изменения произошли на последней странице параграфа, и за данным параграфом следовал
// пустой параграф с новой секцией, тогда его тоже надо пересчитать.
if ( Res === Para.Get_StartPage_Absolute() + Para.Pages.length - 1 )
......@@ -988,35 +986,48 @@ CDocument.prototype =
}
}
// TODO: Тут надо вставить заглушку, что если у нас в долгом пересчете находится страница <= PageIndex + 1,
// по отношению к данной, тогда не надо делать быстрый пересчет.
if (SimpleChanges.length >= 1)
{
var Run = SimpleChanges[0].Class;
var Para = Run.Paragraph;
if (1 === Para.Pages.length)
{
var nPageNum = Para.Get_StartPage_Absolute();
var OldBounds = Para.Pages[0].Bounds;
var FastRecalcResult = Para.Recalculate_Page(nPageNum);
var FastPages = Para.Recalculate_Fast_WholeParagraph();
var FastPagesCount = FastPages.length;
if (FastRecalcResult === recalcresult_NextElement && 1 === Para.Pages.length && true === Para.Pages[0].Bounds.Compare(OldBounds))
if (FastPagesCount > 0)
{
// Если изменения произошли на последней странице параграфа, и за данным параграфом следовал
// пустой параграф с новой секцией, тогда его тоже надо пересчитать.
var NextElement = Para.Get_DocumentNext();
var LastFastPage = FastPages[FastPagesCount - 1];
if (null !== NextElement && true === this.Pages[LastFastPage].Check_EndSectionPara(NextElement))
{
//console.log( "Fast Paragraph Recalc " + Res );
var LastVisibleBounds = Para.Get_LastRangeVisibleBounds();
// Перерисуем страницу, на которой произошли изменения
this.DrawingDocument.OnRecalculatePage( nPageNum, this.Pages[nPageNum] );
this.DrawingDocument.OnEndRecalculate( false, true );
var ___X = LastVisibleBounds.X + LastVisibleBounds.W;
var ___Y = LastVisibleBounds.Y;
History.Reset_RecalcIndex();
// Делаем предел по X минимум 10 мм, чтобы всегда было видно элемент разрыва секции
NextElement.Reset(___X, ___Y, Math.max(___X + 10, NextElement.XLimit), 10000, LastFastPage);
NextElement.Recalculate_Page(LastFastPage);
}
return;
for (var Index = 0; Index < FastPagesCount; Index++)
{
var PageIndex = FastPages[Index];
this.DrawingDocument.OnRecalculatePage(PageIndex, this.Pages[PageIndex]);
}
this.DrawingDocument.OnEndRecalculate( false, true );
History.Reset_RecalcIndex();
return;
}
}
}
//console.log( "Long Recalc " + Res );
//console.log( "Long Recalc " );
// Очищаем данные пересчета
this.RecalcInfo.Reset();
......
This diff is collapsed.
This diff is collapsed.
......@@ -2339,6 +2339,7 @@ ParaRun.prototype.Recalculate_Range_Spaces = function(PRSA, _CurLine, _CurRange,
// Тут мы должны сравнить положение картинок
var oRecalcObj = Item.Save_RecalculateObject();
var Page_abs = Para.Get_StartPage_Absolute() + CurPage;
Item.Update_Position( new CParagraphLayout( PRSA.X, PRSA.Y , Page_abs, PRSA.LastW, ColumnStartX, ColumnEndX, X_Left_Margin, X_Right_Margin, Page_Width, Top_Margin, Bottom_Margin, Page_H, PageFields.X, PageFields.Y, Para.Pages[CurPage].Y + Para.Lines[CurLine].Y - Para.Lines[CurLine].Metrics.Ascent, Para.Pages[CurPage].Y), PageLimits);
if (Math.abs(Item.X - oRecalcObj.X) > 0.001 || Math.abs(Item.Y - oRecalcObj.Y) > 0.001 || Item.PageNum !== oRecalcObj.PageNum)
......
......@@ -148,6 +148,7 @@
<script type="text/javascript" src="Editor/Run.js"></script>
<script type="text/javascript" src="Editor/Math.js"></script>
<script type="text/javascript" src="Editor/Paragraph.js"></script>
<script type="text/javascript" src="Editor/Paragraph_Recalculate.js"></script>
<script type="text/javascript" src="Editor/Sections.js"></script>
<script type="text/javascript" src="Editor/Numbering.js"></script>
<script type="text/javascript" src="Editor/HeaderFooter.js"></script>
......
......@@ -164,6 +164,7 @@
<script type="text/javascript" src="../../../../OfficeWeb/Word/Editor/Run.js"></script>
<script type="text/javascript" src="../../../../OfficeWeb/Word/Editor/Math.js"></script>
<script type="text/javascript" src="../../../../OfficeWeb/Word/Editor/Paragraph.js"></script>
<script type="text/javascript" src="../../../../OfficeWeb/Word/Editor/Paragraph_Recalculate.js"></script>
<script type="text/javascript" src="../../../../OfficeWeb/Word/Editor/Sections.js"></script>
<script type="text/javascript" src="../../../../OfficeWeb/Word/Editor/Numbering.js"></script>
<script type="text/javascript" src="../../../../OfficeWeb/Word/Editor/HeaderFooter.js"></script>
......
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