Commit 6a014bfc authored by Ilya.Kirillov's avatar Ilya.Kirillov

Ускорение отрисовки параграфа.

git-svn-id: svn://192.168.3.15/activex/AVS/Sources/TeamlabOffice/trunk/OfficeWeb@48942 954022d7-b5bf-4e40-9824-e11837661b57
parent d5525aaa
...@@ -824,6 +824,7 @@ Paragraph.prototype = ...@@ -824,6 +824,7 @@ Paragraph.prototype =
case para_TextPr: case para_TextPr:
{ {
CurTextPr = this.Internal_CalculateTextPr( Pos ); CurTextPr = this.Internal_CalculateTextPr( Pos );
Item.CalcValue = CurTextPr; // копировать не надо, т.к. CurTextPr здесь дальше не меняется, а в функции он создается изначально
g_oTextMeasurer.SetTextPr( CurTextPr ); g_oTextMeasurer.SetTextPr( CurTextPr );
g_oTextMeasurer.SetFontSlot( fontslot_ASCII ); g_oTextMeasurer.SetFontSlot( fontslot_ASCII );
TextDescent = Math.abs( g_oTextMeasurer.GetDescender() ); TextDescent = Math.abs( g_oTextMeasurer.GetDescender() );
...@@ -841,6 +842,7 @@ Paragraph.prototype = ...@@ -841,6 +842,7 @@ Paragraph.prototype =
var EndTextPr = this.Get_CompiledPr2(false).TextPr.Copy(); var EndTextPr = this.Get_CompiledPr2(false).TextPr.Copy();
EndTextPr.Merge( this.TextPr.Value ); EndTextPr.Merge( this.TextPr.Value );
Item.TextPr = EndTextPr;
g_oTextMeasurer.SetTextPr( EndTextPr ); g_oTextMeasurer.SetTextPr( EndTextPr );
Item.Measure( g_oTextMeasurer, bEndCell ); Item.Measure( g_oTextMeasurer, bEndCell );
g_oTextMeasurer.SetTextPr( CurTextPr ); g_oTextMeasurer.SetTextPr( CurTextPr );
...@@ -895,6 +897,7 @@ Paragraph.prototype = ...@@ -895,6 +897,7 @@ Paragraph.prototype =
// рассчитанных переносов строк в промежутке StartPos и EndPos. // рассчитанных переносов строк в промежутке StartPos и EndPos.
this.Pages.length = CurPage + 1; this.Pages.length = CurPage + 1;
this.Pages[CurPage] = new CParaPage( _X, Y, _XLimit, YLimit, CurLine ); this.Pages[CurPage] = new CParaPage( _X, Y, _XLimit, YLimit, CurLine );
this.Pages[CurPage].TextPr = this.Internal_CalculateTextPr( StartPos, Pr );
var LineStart_Pos = StartPos; var LineStart_Pos = StartPos;
...@@ -3872,15 +3875,15 @@ Paragraph.prototype = ...@@ -3872,15 +3875,15 @@ Paragraph.prototype =
// 3 часть отрисовки : // 3 часть отрисовки :
// Рисуем заливку параграфа и различные выделения текста (highlight, поиск, совместное редактирование). // Рисуем заливку параграфа и различные выделения текста (highlight, поиск, совместное редактирование).
// Кроме этого рисуем боковые линии обводки параграфа. // Кроме этого рисуем боковые линии обводки параграфа.
this.Internal_Draw_3( CurPage, pGraphics ); this.Internal_Draw_3( CurPage, pGraphics, Pr );
// 4 часть отрисовки : // 4 часть отрисовки :
// Рисуем сами элементы параграфа // Рисуем сами элементы параграфа
this.Internal_Draw_4( CurPage, pGraphics ); this.Internal_Draw_4( CurPage, pGraphics, Pr );
// 5 часть отрисовки : // 5 часть отрисовки :
// Рисуем различные подчеркивания и зачеркивания. // Рисуем различные подчеркивания и зачеркивания.
this.Internal_Draw_5( CurPage, pGraphics ); this.Internal_Draw_5( CurPage, pGraphics, Pr );
// 6 часть отрисовки : // 6 часть отрисовки :
// Рисуем верхнюю, нижнюю и промежуточную границы // Рисуем верхнюю, нижнюю и промежуточную границы
...@@ -3930,14 +3933,16 @@ Paragraph.prototype = ...@@ -3930,14 +3933,16 @@ Paragraph.prototype =
} }
}, },
Internal_Draw_3 : function(CurPage, pGraphics) Internal_Draw_3 : function(CurPage, pGraphics, Pr)
{ {
var _Page = this.Pages[CurPage];
var DocumentComments = editor.WordControl.m_oLogicDocument.Comments; var DocumentComments = editor.WordControl.m_oLogicDocument.Comments;
var bDrawComments = DocumentComments.Is_Use(); var bDrawComments = DocumentComments.Is_Use();
var CommentsFlag = DocumentComments.Check_CurrentDraw(); var CommentsFlag = DocumentComments.Check_CurrentDraw();
var CollaborativeChanges = 0; var CollaborativeChanges = 0;
var StartPagePos = this.Lines[this.Pages[CurPage].StartLine].StartPos; var StartPagePos = this.Lines[_Page.StartLine].StartPos;
// в PDF не рисуем метки совместного редактирования // в PDF не рисуем метки совместного редактирования
if ( undefined === pGraphics.RENDERER_PDF_FLAG ) if ( undefined === pGraphics.RENDERER_PDF_FLAG )
...@@ -3955,37 +3960,46 @@ Paragraph.prototype = ...@@ -3955,37 +3960,46 @@ Paragraph.prototype =
} }
} }
var Pr = { TextPr : null, ParaPr : null }; var CurTextPr = _Page.TextPr;
var CurTextPr = this.Internal_CalculateTextPr( StartPagePos, Pr );
var StartLine = this.Pages[CurPage].StartLine; var StartLine = _Page.StartLine;
var EndLine = this.Pages[CurPage].EndLine; var EndLine = _Page.EndLine;
var aHigh = new CParaDrawingRangeLines();
var aColl = new CParaDrawingRangeLines();
var aFind = new CParaDrawingRangeLines();
var aComm = new CParaDrawingRangeLines();
for ( var CurLine = StartLine; CurLine <= EndLine; CurLine++ ) for ( var CurLine = StartLine; CurLine <= EndLine; CurLine++ )
{ {
var EndLinePos = this.Lines[CurLine].EndPos; var _Line = this.Lines[CurLine];
var _LineMetrics = _Line.Metrics;
var Y0 = (this.Pages[CurPage].Y + this.Lines[CurLine].Y - this.Lines[CurLine].Metrics.Ascent); var EndLinePos = _Line.EndPos;
var Y1 = (this.Pages[CurPage].Y + this.Lines[CurLine].Y + this.Lines[CurLine].Metrics.Descent);
if ( this.Lines[CurLine].Metrics.LineGap < 0 )
Y1 += this.Lines[CurLine].Metrics.LineGap;
var RangesCount = this.Lines[CurLine].Ranges.length; var Y0 = (_Page.Y + _Line.Y - _LineMetrics.Ascent);
var Y1 = (_Page.Y + _Line.Y + _LineMetrics.Descent);
if ( _LineMetrics.LineGap < 0 )
Y1 += _LineMetrics.LineGap;
var RangesCount = _Line.Ranges.length;
for ( var CurRange = 0; CurRange < RangesCount; CurRange++ ) for ( var CurRange = 0; CurRange < RangesCount; CurRange++ )
{ {
var aHigh = new CParaDrawingRangeLines(); var _Range = _Line.Ranges[CurRange];
var aColl = new CParaDrawingRangeLines();
var aFind = new CParaDrawingRangeLines(); aHigh.Clear();
var aComm = new CParaDrawingRangeLines(); aColl.Clear();
aFind.Clear();
aComm.Clear();
// Сначала проанализируем данную строку: в массивы aHigh, aColl, aFind // Сначала проанализируем данную строку: в массивы aHigh, aColl, aFind
// сохраним позиции начала и конца продолжительных одинаковых настроек // сохраним позиции начала и конца продолжительных одинаковых настроек
// выделения, совместного редатирования и поиска соответственно. // выделения, совместного редатирования и поиска соответственно.
var X = this.Lines[CurLine].Ranges[CurRange].XVisible; var X = _Range.XVisible;
var StartPos = this.Lines[CurLine].Ranges[CurRange].StartPos; var StartPos = _Range.StartPos;
var EndPos = ( CurRange === RangesCount - 1 ? EndLinePos : this.Lines[CurLine].Ranges[CurRange + 1].StartPos - 1 ); var EndPos = ( CurRange === RangesCount - 1 ? EndLinePos : _Line.Ranges[CurRange + 1].StartPos - 1 );
for ( var Pos = StartPos; Pos <= EndPos; Pos++ ) for ( var Pos = StartPos; Pos <= EndPos; Pos++ )
{ {
...@@ -4069,7 +4083,7 @@ Paragraph.prototype = ...@@ -4069,7 +4083,7 @@ Paragraph.prototype =
case para_Space: case para_Space:
{ {
// Пробелы в конце строки (и строку состоящую из пробелов) не подчеркиваем, не зачеркиваем и не выделяем // Пробелы в конце строки (и строку состоящую из пробелов) не подчеркиваем, не зачеркиваем и не выделяем
if ( Pos >= this.Lines[CurLine].Ranges[CurRange].StartPos2 && Pos <= this.Lines[CurLine].Ranges[CurRange].EndPos2 ) if ( Pos >= _Range.StartPos2 && Pos <= _Range.EndPos2 )
{ {
if ( CommentsFlag != comments_NoComment && bDrawComments ) if ( CommentsFlag != comments_NoComment && bDrawComments )
aComm.Add( Y0, Y1, X, X + Item.WidthVisible, 0, 0, 0, 0, { Active : CommentsFlag === comments_ActiveComment ? true : false } ); aComm.Add( Y0, Y1, X, X + Item.WidthVisible, 0, 0, 0, 0, { Active : CommentsFlag === comments_ActiveComment ? true : false } );
...@@ -4088,7 +4102,7 @@ Paragraph.prototype = ...@@ -4088,7 +4102,7 @@ Paragraph.prototype =
} }
case para_TextPr: case para_TextPr:
{ {
CurTextPr = this.Internal_CalculateTextPr( Pos ); CurTextPr = Item.CalcValue;
break; break;
} }
case para_End: case para_End:
...@@ -4151,7 +4165,7 @@ Paragraph.prototype = ...@@ -4151,7 +4165,7 @@ Paragraph.prototype =
//---------------------------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------------------------
// Заливка параграфа // Заливка параграфа
//---------------------------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------------------------
if ( (this.Lines[CurLine].Ranges[CurRange].W > 0.001 || true === this.IsEmpty() ) && ( ( this.Pages.length - 1 === CurPage ) || ( CurLine < this.Pages[CurPage + 1].FirstLine ) ) && shd_Clear === Pr.ParaPr.Shd.Value ) if ( (_Range.W > 0.001 || true === this.IsEmpty() ) && ( ( this.Pages.length - 1 === CurPage ) || ( CurLine < this.Pages[CurPage + 1].FirstLine ) ) && shd_Clear === Pr.ParaPr.Shd.Value )
{ {
var TempX0 = this.Lines[CurLine].Ranges[CurRange].X; var TempX0 = this.Lines[CurLine].Ranges[CurRange].X;
if ( 0 === CurRange ) if ( 0 === CurRange )
...@@ -4345,7 +4359,7 @@ Paragraph.prototype = ...@@ -4345,7 +4359,7 @@ Paragraph.prototype =
} }
}, },
Internal_Draw_4 : function(CurPage, pGraphics) Internal_Draw_4 : function(CurPage, pGraphics, Pr)
{ {
var StartPagePos = this.Lines[this.Pages[CurPage].StartLine].StartPos; var StartPagePos = this.Lines[this.Pages[CurPage].StartLine].StartPos;
...@@ -4355,8 +4369,7 @@ Paragraph.prototype = ...@@ -4355,8 +4369,7 @@ Paragraph.prototype =
if ( true === HyperPos.Found && para_HyperlinkStart === HyperPos.Type ) if ( true === HyperPos.Found && para_HyperlinkStart === HyperPos.Type )
bVisitedHyperlink = this.Content[HyperPos.LetterPos].Get_Visited(); bVisitedHyperlink = this.Content[HyperPos.LetterPos].Get_Visited();
var Pr = { TextPr : null, ParaPr : null }; var CurTextPr = this.Pages[CurPage].TextPr;
var CurTextPr = this.Internal_CalculateTextPr( StartPagePos, Pr );
// Выставляем шрифт и заливку текста // Выставляем шрифт и заливку текста
pGraphics.SetTextPr( CurTextPr ); pGraphics.SetTextPr( CurTextPr );
...@@ -4570,7 +4583,7 @@ Paragraph.prototype = ...@@ -4570,7 +4583,7 @@ Paragraph.prototype =
} }
case para_TextPr: case para_TextPr:
{ {
CurTextPr = this.Internal_CalculateTextPr( Pos ); CurTextPr = Item.CalcValue;//this.Internal_CalculateTextPr( Pos );
pGraphics.SetTextPr( CurTextPr ); pGraphics.SetTextPr( CurTextPr );
if ( true === bVisitedHyperlink ) if ( true === bVisitedHyperlink )
...@@ -4583,8 +4596,7 @@ Paragraph.prototype = ...@@ -4583,8 +4596,7 @@ Paragraph.prototype =
case para_End: case para_End:
{ {
// Выставляем настройки для символа параграфа // Выставляем настройки для символа параграфа
var EndTextPr = this.Get_CompiledPr2(false).TextPr.Copy(); var EndTextPr = Item.TextPr;
EndTextPr.Merge( this.TextPr.Value );
pGraphics.SetTextPr( EndTextPr ); pGraphics.SetTextPr( EndTextPr );
pGraphics.b_color1( EndTextPr.Color.r, EndTextPr.Color.g, EndTextPr.Color.b, 255); pGraphics.b_color1( EndTextPr.Color.r, EndTextPr.Color.g, EndTextPr.Color.b, 255);
...@@ -4629,9 +4641,10 @@ Paragraph.prototype = ...@@ -4629,9 +4641,10 @@ Paragraph.prototype =
} }
}, },
Internal_Draw_5 : function(CurPage, pGraphics) Internal_Draw_5 : function(CurPage, pGraphics, Pr)
{ {
var StartPagePos = this.Lines[this.Pages[CurPage].StartLine].StartPos; var _Page = this.Pages[CurPage];
var StartPagePos = this.Lines[_Page.StartLine].StartPos;
var HyperPos = this.Internal_FindBackward( StartPagePos, [para_HyperlinkStart, para_HyperlinkEnd] ); var HyperPos = this.Internal_FindBackward( StartPagePos, [para_HyperlinkStart, para_HyperlinkEnd] );
var bVisitedHyperlink = false; var bVisitedHyperlink = false;
...@@ -4639,8 +4652,7 @@ Paragraph.prototype = ...@@ -4639,8 +4652,7 @@ Paragraph.prototype =
if ( true === HyperPos.Found && para_HyperlinkStart === HyperPos.Type ) if ( true === HyperPos.Found && para_HyperlinkStart === HyperPos.Type )
bVisitedHyperlink = this.Content[HyperPos.LetterPos].Get_Visited(); bVisitedHyperlink = this.Content[HyperPos.LetterPos].Get_Visited();
var Pr = { TextPr : null, ParaPr : null }; var CurTextPr = _Page.TextPr;
var CurTextPr = this.Internal_CalculateTextPr( StartPagePos, Pr );
// Выставляем цвет обводки // Выставляем цвет обводки
var CurColor; var CurColor;
...@@ -4649,31 +4661,44 @@ Paragraph.prototype = ...@@ -4649,31 +4661,44 @@ Paragraph.prototype =
else else
CurColor = new CDocumentColor( CurTextPr.Color.r, CurTextPr.Color.g, CurTextPr.Color.b ); CurColor = new CDocumentColor( CurTextPr.Color.r, CurTextPr.Color.g, CurTextPr.Color.b );
var StartLine = this.Pages[CurPage].StartLine; var StartLine = _Page.StartLine;
var EndLine = this.Pages[CurPage].EndLine; var EndLine = _Page.EndLine;
var CheckSpelling = this.SpellChecker.Get_DrawingInfo();
var aStrikeout = new CParaDrawingRangeLines();
var aDStrikeout = new CParaDrawingRangeLines();
var aUnderline = new CParaDrawingRangeLines();
var aSpelling = new CParaDrawingRangeLines();
for ( var CurLine = StartLine; CurLine <= EndLine; CurLine++ ) for ( var CurLine = StartLine; CurLine <= EndLine; CurLine++ )
{ {
var EndLinePos = this.Lines[CurLine].EndPos; var _Line = this.Lines[CurLine];
var LineY = this.Pages[CurPage].Y + this.Lines[CurLine].Y; var EndLinePos = _Line.EndPos;
var LineY = _Page.Y + _Line.Y;
var Y = LineY; var Y = LineY;
var RangesCount = this.Lines[CurLine].Ranges.length; var LineM = _Line.Metrics;
var LineM_D_04 = LineM.TextDescent * 0.4;
var RangesCount = _Line.Ranges.length;
aStrikeout.Clear();
aDStrikeout.Clear();
aUnderline.Clear();
aSpelling.Clear();
for ( var CurRange = 0; CurRange < RangesCount; CurRange++ ) for ( var CurRange = 0; CurRange < RangesCount; CurRange++ )
{ {
var aStrikeout = new CParaDrawingRangeLines(); var _Range = _Line.Ranges[CurRange];
var aDStrikeout = new CParaDrawingRangeLines();
var aUnderline = new CParaDrawingRangeLines();
var aSpelling = new CParaDrawingRangeLines();
// Сначала проанализируем данную строку: в массивы aStrikeout, aDStrikeout, aUnderline // Сначала проанализируем данную строку: в массивы aStrikeout, aDStrikeout, aUnderline
// aSpelling сохраним позиции начала и конца продолжительных одинаковых настроек зачеркивания, // aSpelling сохраним позиции начала и конца продолжительных одинаковых настроек зачеркивания,
// двойного зачеркивания, подчеркивания и подчеркивания орфографии. // двойного зачеркивания, подчеркивания и подчеркивания орфографии.
var X = this.Lines[CurLine].Ranges[CurRange].XVisible; var X = _Range.XVisible;
var StartPos = this.Lines[CurLine].Ranges[CurRange].StartPos; var StartPos = _Range.StartPos;
var EndPos = ( CurRange === RangesCount - 1 ? EndLinePos : this.Lines[CurLine].Ranges[CurRange + 1].StartPos - 1 ); var EndPos = ( CurRange === RangesCount - 1 ? EndLinePos : _Line.Ranges[CurRange + 1].StartPos - 1 );
for ( var Pos = StartPos; Pos <= EndPos; Pos++ ) for ( var Pos = StartPos; Pos <= EndPos; Pos++ )
{ {
...@@ -4708,8 +4733,8 @@ Paragraph.prototype = ...@@ -4708,8 +4733,8 @@ Paragraph.prototype =
if ( true === CurTextPr.Underline ) if ( true === CurTextPr.Underline )
aUnderline.Add( Y + this.Lines[CurLine].Metrics.TextDescent * 0.4, Y + this.Lines[CurLine].Metrics.TextDescent * 0.4, X, X + Item.WidthVisible, (CurTextPr.FontSize / 18) * g_dKoef_pt_to_mm, CurColor.r, CurColor.g, CurColor.b ); aUnderline.Add( Y + this.Lines[CurLine].Metrics.TextDescent * 0.4, Y + this.Lines[CurLine].Metrics.TextDescent * 0.4, X, X + Item.WidthVisible, (CurTextPr.FontSize / 18) * g_dKoef_pt_to_mm, CurColor.r, CurColor.g, CurColor.b );
if ( true != this.SpellChecker.Check_Spelling(Pos) ) if ( true === CheckSpelling[Pos] )
aSpelling.Add( Y + this.Lines[CurLine].Metrics.TextDescent * 0.4, Y + this.Lines[CurLine].Metrics.TextDescent * 0.4, X, X + Item.WidthVisible, (CurTextPr.FontSize / 18) * g_dKoef_pt_to_mm, 0, 0, 0 ); aSpelling.Add( Y + LineM_D_04, Y + LineM_D_04, X, X + Item.WidthVisible, (CurTextPr.FontSize / 18) * g_dKoef_pt_to_mm, 0, 0, 0 );
X += Item.WidthVisible; X += Item.WidthVisible;
} }
...@@ -4719,7 +4744,7 @@ Paragraph.prototype = ...@@ -4719,7 +4744,7 @@ Paragraph.prototype =
case para_Space: case para_Space:
{ {
// Пробелы в конце строки (и строку состоящую из пробелов) не подчеркиваем, не зачеркиваем и не выделяем // Пробелы в конце строки (и строку состоящую из пробелов) не подчеркиваем, не зачеркиваем и не выделяем
if ( Pos >= this.Lines[CurLine].Ranges[CurRange].StartPos2 && Pos <= this.Lines[CurLine].Ranges[CurRange].EndPos2 ) if ( Pos >= _Range.StartPos2 && Pos <= _Range.EndPos2 )
{ {
if ( true === CurTextPr.DStrikeout ) if ( true === CurTextPr.DStrikeout )
aDStrikeout.Add( Y - CurTextPr.FontSize * g_dKoef_pt_to_mm * 0.27, Y - CurTextPr.FontSize * g_dKoef_pt_to_mm * 0.27, X, X + Item.WidthVisible, (CurTextPr.FontSize / 18) * g_dKoef_pt_to_mm, CurColor.r, CurColor.g, CurColor.b ); aDStrikeout.Add( Y - CurTextPr.FontSize * g_dKoef_pt_to_mm * 0.27, Y - CurTextPr.FontSize * g_dKoef_pt_to_mm * 0.27, X, X + Item.WidthVisible, (CurTextPr.FontSize / 18) * g_dKoef_pt_to_mm, CurColor.r, CurColor.g, CurColor.b );
...@@ -4727,7 +4752,7 @@ Paragraph.prototype = ...@@ -4727,7 +4752,7 @@ Paragraph.prototype =
aStrikeout.Add( Y - CurTextPr.FontSize * g_dKoef_pt_to_mm * 0.27, Y - CurTextPr.FontSize * g_dKoef_pt_to_mm * 0.27, X, X + Item.WidthVisible, (CurTextPr.FontSize / 18) * g_dKoef_pt_to_mm, CurColor.r, CurColor.g, CurColor.b ); aStrikeout.Add( Y - CurTextPr.FontSize * g_dKoef_pt_to_mm * 0.27, Y - CurTextPr.FontSize * g_dKoef_pt_to_mm * 0.27, X, X + Item.WidthVisible, (CurTextPr.FontSize / 18) * g_dKoef_pt_to_mm, CurColor.r, CurColor.g, CurColor.b );
if ( true === CurTextPr.Underline ) if ( true === CurTextPr.Underline )
aUnderline.Add( Y + this.Lines[CurLine].Metrics.TextDescent * 0.4, Y + this.Lines[CurLine].Metrics.TextDescent * 0.4, X, X + Item.WidthVisible, (CurTextPr.FontSize / 18) * g_dKoef_pt_to_mm, CurColor.r, CurColor.g, CurColor.b ); aUnderline.Add( Y + LineM_D_04, Y + LineM_D_04, X, X + Item.WidthVisible, (CurTextPr.FontSize / 18) * g_dKoef_pt_to_mm, CurColor.r, CurColor.g, CurColor.b );
} }
X += Item.WidthVisible; X += Item.WidthVisible;
...@@ -4736,7 +4761,7 @@ Paragraph.prototype = ...@@ -4736,7 +4761,7 @@ Paragraph.prototype =
} }
case para_TextPr: case para_TextPr:
{ {
CurTextPr = this.Internal_CalculateTextPr( Pos ); CurTextPr = Item.CalcValue;
// Выставляем цвет обводки // Выставляем цвет обводки
if ( true === bVisitedHyperlink ) if ( true === bVisitedHyperlink )
...@@ -4787,43 +4812,43 @@ Paragraph.prototype = ...@@ -4787,43 +4812,43 @@ Paragraph.prototype =
} }
} }
} }
}
// Рисуем зачеркивание // Рисуем зачеркивание
var Element = aStrikeout.Get_Next(); var Element = aStrikeout.Get_Next();
while ( null != Element ) while ( null != Element )
{ {
pGraphics.p_color( Element.r, Element.g, Element.b, 255 ); pGraphics.p_color( Element.r, Element.g, Element.b, 255 );
pGraphics.drawHorLine(c_oAscLineDrawingRule.Top, Element.y0, Element.x0, Element.x1, Element.w ); pGraphics.drawHorLine(c_oAscLineDrawingRule.Top, Element.y0, Element.x0, Element.x1, Element.w );
Element = aStrikeout.Get_Next(); Element = aStrikeout.Get_Next();
} }
// Рисуем двойное зачеркивание // Рисуем двойное зачеркивание
Element = aDStrikeout.Get_Next();
while ( null != Element )
{
pGraphics.p_color( Element.r, Element.g, Element.b, 255 );
pGraphics.drawHorLine2(c_oAscLineDrawingRule.Top, Element.y0, Element.x0, Element.x1, Element.w );
Element = aDStrikeout.Get_Next(); Element = aDStrikeout.Get_Next();
while ( null != Element ) }
{
pGraphics.p_color( Element.r, Element.g, Element.b, 255 );
pGraphics.drawHorLine2(c_oAscLineDrawingRule.Top, Element.y0, Element.x0, Element.x1, Element.w );
Element = aDStrikeout.Get_Next();
}
// Рисуем подчеркивание // Рисуем подчеркивание
aUnderline.Correct_w_ForUnderline(); aUnderline.Correct_w_ForUnderline();
Element = aUnderline.Get_Next();
while ( null != Element )
{
pGraphics.p_color( Element.r, Element.g, Element.b, 255 );
pGraphics.drawHorLine(0, Element.y0, Element.x0, Element.x1, Element.w );
Element = aUnderline.Get_Next(); Element = aUnderline.Get_Next();
while ( null != Element ) }
{
pGraphics.p_color( Element.r, Element.g, Element.b, 255 );
pGraphics.drawHorLine(0, Element.y0, Element.x0, Element.x1, Element.w );
Element = aUnderline.Get_Next();
}
// Рисуем подчеркивание орфографии // Рисуем подчеркивание орфографии
pGraphics.p_color( 255, 0, 0, 255 ); pGraphics.p_color( 255, 0, 0, 255 );
Element = aSpelling.Get_Next();
while ( null != Element )
{
pGraphics.drawHorLine(0, Element.y0, Element.x0, Element.x1, Element.w );
Element = aSpelling.Get_Next(); Element = aSpelling.Get_Next();
while ( null != Element )
{
pGraphics.drawHorLine(0, Element.y0, Element.x0, Element.x1, Element.w );
Element = aSpelling.Get_Next();
}
} }
} }
}, },
...@@ -13235,6 +13260,7 @@ function CParaPage(X, Y, XLimit, YLimit, FirstLine) ...@@ -13235,6 +13260,7 @@ function CParaPage(X, Y, XLimit, YLimit, FirstLine)
this.Bounds = new CDocumentBounds( X, Y, XLimit, Y ); this.Bounds = new CDocumentBounds( X, Y, XLimit, Y );
this.StartLine = FirstLine; // Номер строки, с которой начинается данная страница this.StartLine = FirstLine; // Номер строки, с которой начинается данная страница
this.EndLine = FirstLine; // Номер последней строки на данной странице this.EndLine = FirstLine; // Номер последней строки на данной странице
this.TextPr = null; // Расситанные текстовые настройки для начала страницы
} }
CParaPage.prototype = CParaPage.prototype =
...@@ -13297,6 +13323,11 @@ function CParaDrawingRangeLines() ...@@ -13297,6 +13323,11 @@ function CParaDrawingRangeLines()
CParaDrawingRangeLines.prototype = CParaDrawingRangeLines.prototype =
{ {
Clear : function()
{
this.Elements = new Array();
},
Add : function (y0, y1, x0, x1, w, r, g, b, Additional) Add : function (y0, y1, x0, x1, w, r, g, b, Additional)
{ {
this.Elements.push( new CParaDrawingRangeLinesElement(y0, y1, x0, x1, w, r, g, b, Additional) ); this.Elements.push( new CParaDrawingRangeLinesElement(y0, y1, x0, x1, w, r, g, b, Additional) );
......
...@@ -97,70 +97,55 @@ function ParaText(value) ...@@ -97,70 +97,55 @@ function ParaText(value)
this.Width = 0; this.Width = 0;
this.Height = 0; this.Height = 0;
this.WidthVisible = 0; this.WidthVisible = 0;
this.IsNBSP = (this.Value === nbsp_string ? true : false);
} }
ParaText.prototype = ParaText.prototype =
{ {
Draw : function(X,Y,Context) Draw : function(X,Y,Context)
{ {
try Context.SetFontSlot( this.FontSlot, this.FontKoef );
{
Context.SetFontSlot( this.FontSlot, this.FontKoef );
if ( true === this.Is_NBSP() && editor.ShowParaMarks )
Context.FillText( X, Y, String.fromCharCode( 0x00B0 ) );
else
Context.FillText( X, Y, this.CalcValue );
}
catch(e)
{
} if ( true === this.IsNBSP && editor.ShowParaMarks )
Context.FillText( X, Y, String.fromCharCode( 0x00B0 ) );
else
Context.FillText( X, Y, this.CalcValue );
}, },
Measure : function(Context, TextPr) Measure : function(Context, TextPr)
{ {
try this.FontKoef = TextPr.Get_FontKoef();
{
this.FontKoef = TextPr.Get_FontKoef();
var bCapitals = false; var bCapitals = false;
if ( true === TextPr.Caps || true === TextPr.SmallCaps ) if ( true === TextPr.Caps || true === TextPr.SmallCaps )
{ {
this.CalcValue = this.Value.toUpperCase(); this.CalcValue = this.Value.toUpperCase();
bCapitals = ( this.CalcValue === this.Value ? true : false ); bCapitals = ( this.CalcValue === this.Value ? true : false );
} }
else else
{ {
this.CalcValue = this.Value; this.CalcValue = this.Value;
bCapitals = false; bCapitals = false;
} }
if ( true != TextPr.Caps && true === TextPr.SmallCaps && false === bCapitals ) if ( true != TextPr.Caps && true === TextPr.SmallCaps && false === bCapitals )
this.FontKoef *= smallcaps_Koef; this.FontKoef *= smallcaps_Koef;
var Hint = TextPr.RFonts.Hint; var Hint = TextPr.RFonts.Hint;
var bCS = TextPr.CS; var bCS = TextPr.CS;
var bRTL = TextPr.RTL; var bRTL = TextPr.RTL;
var lcid = TextPr.Lang.EastAsia; var lcid = TextPr.Lang.EastAsia;
this.FontSlot = g_font_detector.Get_FontClass( this.CalcValue.charCodeAt(0), Hint, lcid, bCS, bRTL ); this.FontSlot = g_font_detector.Get_FontClass( this.CalcValue.charCodeAt(0), Hint, lcid, bCS, bRTL );
Context.SetFontSlot( this.FontSlot, this.FontKoef ); Context.SetFontSlot( this.FontSlot, this.FontKoef );
var Temp = Context.Measure( this.CalcValue ); var Temp = Context.Measure( this.CalcValue );
Temp.Width = Math.max( Temp.Width + TextPr.Spacing, 0 ); Temp.Width = Math.max( Temp.Width + TextPr.Spacing, 0 );
this.Width = Temp.Width; this.Width = Temp.Width;
this.Height = Temp.Height; this.Height = Temp.Height;
this.WidthVisible = Temp.Width; this.WidthVisible = Temp.Width;
}
catch(e)
{
this.CalcValue = this.Value;
this.Width = 0;
this.Height = 0;
this.WidthVisible = 0;
}
}, },
Is_RealContent : function() Is_RealContent : function()
...@@ -255,40 +240,10 @@ ParaSpace.prototype = ...@@ -255,40 +240,10 @@ ParaSpace.prototype =
} }
} }
try Context.SetFontSlot( fontslot_ASCII, this.FontKoef );
{
Context.SetFontSlot( fontslot_ASCII, this.FontKoef );
/*var OldFont;
if ( true === this.SmallCaps )
{
OldFont = Context.GetFont();
var TempFont =
{
FontFamily :
{
Index : OldFont.FontFamily.Index,
Name : OldFont.FontFamily.Name
},
FontSize : OldFont.FontSize * smallcaps_Koef,
Bold : OldFont.Bold,
Italic : OldFont.Italic
};
Context.SetFont( TempFont );
}*/
if ( editor.ShowParaMarks )
Context.FillText( X, Y, sString );
//if ( true === this.SmallCaps )
// Context.SetFont(OldFont);
}
catch(e)
{
} if ( editor.ShowParaMarks )
Context.FillText( X, Y, sString );
}, },
Measure : function(Context, TextPr) Measure : function(Context, TextPr)
...@@ -304,31 +259,20 @@ ParaSpace.prototype = ...@@ -304,31 +259,20 @@ ParaSpace.prototype =
} }
} }
try this.FontKoef = TextPr.Get_FontKoef();
{
this.FontKoef = TextPr.Get_FontKoef();
if ( true != TextPr.Caps && true === TextPr.SmallCaps ) if ( true != TextPr.Caps && true === TextPr.SmallCaps )
this.FontKoef *= smallcaps_Koef; this.FontKoef *= smallcaps_Koef;
Context.SetFontSlot( fontslot_ASCII, this.FontKoef ); Context.SetFontSlot( fontslot_ASCII, this.FontKoef );
var Temp = Context.Measure( sString ); var Temp = Context.Measure( sString );
Temp.Width = Math.max( Temp.Width + TextPr.Spacing, 0 ); Temp.Width = Math.max( Temp.Width + TextPr.Spacing, 0 );
this.Width = Temp.Width; this.Width = Temp.Width;
this.Height = Temp.Height; this.Height = Temp.Height;
this.WidthVisible = Temp.Width; this.WidthVisible = Temp.Width;
}
catch(e)
{
this.Width = 0;
this.Height = 0;
this.WidthVisible = 0;
}
//return { Width : this.Width, Height : this.Height, WidthVisible : this.WidthVisible };
}, },
Is_RealContent : function() Is_RealContent : function()
...@@ -369,6 +313,7 @@ function ParaTextPr(Props) ...@@ -369,6 +313,7 @@ function ParaTextPr(Props)
this.Type = para_TextPr; this.Type = para_TextPr;
this.Value = new CTextPr(); this.Value = new CTextPr();
this.Parent = null; this.Parent = null;
this.CalcValue = this.Value;
this.Width = 0; this.Width = 0;
this.Height = 0; this.Height = 0;
...@@ -2117,6 +2062,8 @@ ParaTextPr.prototype = ...@@ -2117,6 +2062,8 @@ ParaTextPr.prototype =
function ParaEnd() function ParaEnd()
{ {
this.Type = para_End; this.Type = para_End;
this.TextPr = null; // Рассчитанные настройки текста для символа конца параграфа
} }
ParaEnd.prototype = ParaEnd.prototype =
......
...@@ -213,6 +213,25 @@ CParaSpellChecker.prototype = ...@@ -213,6 +213,25 @@ CParaSpellChecker.prototype =
return true; return true;
}, },
Get_DrawingInfo : function()
{
var DrawingObject = new Object();
var Count = this.Elements.length;
for ( var Index = 0; Index < Count; Index++ )
{
var Element = this.Elements[Index];
if ( false === Element.Checked )
{
for ( var Pos = Element.StartPos; Pos <= Element.EndPos; Pos++ )
DrawingObject[Pos] = true;
}
}
return DrawingObject;
},
Document_UpdateInterfaceState : function(StartPos, EndPos) Document_UpdateInterfaceState : function(StartPos, EndPos)
{ {
// Надо определить, попадает ли какое-либо неверно набранное слово в заданный промежуток, и одно ли оно // Надо определить, попадает ли какое-либо неверно набранное слово в заданный промежуток, и одно ли оно
......
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