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

Сделано, чтобы рамка вокрус ссылки на сноску рисовалась как в Word. Сделано,...

Сделано, чтобы рамка вокрус ссылки на сноску рисовалась как в Word. Сделано, чтобы ссылка на сноску рассчитывалась и рисовалась с любым значением.
parent 1c81a2c1
...@@ -1947,6 +1947,7 @@ Paragraph.prototype = ...@@ -1947,6 +1947,7 @@ Paragraph.prototype =
var Range = Line.Ranges[CurRange]; var Range = Line.Ranges[CurRange];
PDSE.Set_LineMetrics(Y, Y - Line.Metrics.Ascent, Y + Line.Metrics.Descent);
PDSE.Reset_Range( CurPage, CurLine, CurRange, X, Y ); PDSE.Reset_Range( CurPage, CurLine, CurRange, X, Y );
var StartPos = Range.StartPos; var StartPos = Range.StartPos;
...@@ -14574,6 +14575,10 @@ function CParagraphDrawStateElements() ...@@ -14574,6 +14575,10 @@ function CParagraphDrawStateElements()
this.X = 0; this.X = 0;
this.Y = 0; this.Y = 0;
this.LineTop = 0;
this.LineBottom = 0;
this.BaseLine = 0;
} }
CParagraphDrawStateElements.prototype = CParagraphDrawStateElements.prototype =
...@@ -14599,6 +14604,13 @@ CParagraphDrawStateElements.prototype = ...@@ -14599,6 +14604,13 @@ CParagraphDrawStateElements.prototype =
this.X = X; this.X = X;
this.Y = Y; this.Y = Y;
},
Set_LineMetrics : function(BaseLine, Top, Bottom)
{
this.LineTop = Top;
this.LineBottom = Bottom;
this.BaseLine = BaseLine;
} }
}; };
......
...@@ -7445,34 +7445,44 @@ ParaPresentationNumbering.prototype = ...@@ -7445,34 +7445,44 @@ ParaPresentationNumbering.prototype =
/** /**
* Класс представляющий ссылку на сноску. * Класс представляющий ссылку на сноску.
* @param {string} sId - Идентификатор сноски. * @param {CFootEndnote} Footnote - Ссылка на сноску.
* @constructor * @constructor
*/ */
function ParaFootnoteReference(sId) function ParaFootnoteReference(Footnote)
{ {
this.FootnoteId = sId; this.Footnote = Footnote;
this.Width = 0; this.Width = 0;
this.WidthVisible = 0; this.WidthVisible = 0;
this.Height = 0; this.Number = 1;
} }
ParaFootnoteReference.prototype.Type = para_FootnoteReference; ParaFootnoteReference.prototype.Type = para_FootnoteReference;
ParaFootnoteReference.prototype.Get_Type = function() ParaFootnoteReference.prototype.Get_Type = function()
{ {
return para_FootnoteReference; return para_FootnoteReference;
}; };
ParaFootnoteReference.prototype.Draw = function(X, Y, Context) ParaFootnoteReference.prototype.Draw = function(X, Y, Context, PDSE)
{ {
Context.SetFontSlot(fontslot_ASCII, vertalign_Koef_Size); Context.SetFontSlot(fontslot_ASCII, vertalign_Koef_Size);
Context.FillTextCode(X, Y, "1".charCodeAt(0)); g_oTextMeasurer.SetFontSlot(fontslot_ASCII, vertalign_Koef_Size);
// TODO: Пока делаем обычный вариант с типом Decimal
var _X = X;
var T = Numbering_Number_To_String(this.Number);
for (var nPos = 0; nPos < T.length; ++nPos)
{
var Char = T.charAt(nPos);
Context.FillText(_X, Y, Char);
_X += g_oTextMeasurer.Measure(Char).Width;
}
// TODO: Надо переделать в отдельную функцию отрисовщика // TODO: Надо переделать в отдельную функцию отрисовщика
if (editor && editor.ShowParaMarks) if (editor && editor.ShowParaMarks)
{ {
if (Context.m_oContext && Context.m_oContext.setLineDash) if (Context.m_oContext && Context.m_oContext.setLineDash)
Context.m_oContext.setLineDash([1,1]); Context.m_oContext.setLineDash([1, 1]);
var l = X, t = Y - this.Height, r = X + this.Get_Width(), b = Y; var l = X, t = PDSE.LineTop, r = X + this.Get_Width(), b = PDSE.BaseLine;
Context.drawHorLineExt(c_oAscLineDrawingRule.Top, t, l, r, 0, 0, 0); Context.drawHorLineExt(c_oAscLineDrawingRule.Top, t, l, r, 0, 0, 0);
Context.drawVerLine(c_oAscLineDrawingRule.Right, l, t, b, 0); Context.drawVerLine(c_oAscLineDrawingRule.Right, l, t, b, 0);
Context.drawVerLine(c_oAscLineDrawingRule.Left, r, t, b, 0); Context.drawVerLine(c_oAscLineDrawingRule.Left, r, t, b, 0);
...@@ -7482,16 +7492,24 @@ ParaFootnoteReference.prototype.Draw = function(X, Y, Context) ...@@ -7482,16 +7492,24 @@ ParaFootnoteReference.prototype.Draw = function(X, Y, Context)
Context.m_oContext.setLineDash([]); Context.m_oContext.setLineDash([]);
} }
}; };
ParaFootnoteReference.prototype.Measure = function(Context, TextPr) ParaFootnoteReference.prototype.Measure = function(Context, TextPr)
{ {
Context.SetFontSlot(fontslot_ASCII, vertalign_Koef_Size); Context.SetFontSlot(fontslot_ASCII, vertalign_Koef_Size);
var Temp = Context.MeasureCode("1".charCodeAt(0));
var ResultWidth = (Math.max((Temp.Width + TextPr.Spacing), 0) * TEXTWIDTH_DIVIDER) | 0; // TODO: Пока делаем обычный вариант с типом Decimal
var X = 0;
var T = Numbering_Number_To_String(this.Number);
for (var nPos = 0; nPos < T.length; ++nPos)
{
var Char = T.charAt(nPos);
X += Context.Measure(Char).Width;
}
var ResultWidth = (Math.max((X + TextPr.Spacing), 0) * TEXTWIDTH_DIVIDER) | 0;
this.Width = ResultWidth; this.Width = ResultWidth;
this.WidthVisible = ResultWidth; this.WidthVisible = ResultWidth;
this.Height = Temp.Height;
}; };
ParaFootnoteReference.prototype.Get_Width = function() ParaFootnoteReference.prototype.Get_Width = function()
{ {
return (this.Width / TEXTWIDTH_DIVIDER); return (this.Width / TEXTWIDTH_DIVIDER);
}; };
...@@ -7503,7 +7521,7 @@ ParaFootnoteReference.prototype.Set_WidthVisible = function(WidthVisible) ...@@ -7503,7 +7521,7 @@ ParaFootnoteReference.prototype.Set_WidthVisible = function(WidthVisible)
{ {
this.WidthVisible = (WidthVisible * TEXTWIDTH_DIVIDER) | 0; this.WidthVisible = (WidthVisible * TEXTWIDTH_DIVIDER) | 0;
}; };
ParaFootnoteReference.prototype.Is_RealContent = function() ParaFootnoteReference.prototype.Is_RealContent = function()
{ {
return true; return true;
}; };
...@@ -7511,22 +7529,26 @@ ParaFootnoteReference.prototype.Can_AddNumbering = function() ...@@ -7511,22 +7529,26 @@ ParaFootnoteReference.prototype.Can_AddNumbering = function()
{ {
return true; return true;
}; };
ParaFootnoteReference.prototype.Copy = function() ParaFootnoteReference.prototype.Copy = function()
{ {
return new ParaFootnoteReference(sId); return new ParaFootnoteReference(sId);
}; };
ParaFootnoteReference.prototype.Write_ToBinary = function(Writer) ParaFootnoteReference.prototype.Write_ToBinary = function(Writer)
{ {
// Long : Type // Long : Type
// String : FootnoteId // String : FootnoteId
Writer.WriteLong(this.Type); Writer.WriteLong(this.Type);
Writer.WriteString2(this.FootnoteId); Writer.WriteString2(this.FootnoteId);
}; };
ParaFootnoteReference.prototype.Read_FromBinary = function(Reader) ParaFootnoteReference.prototype.Read_FromBinary = function(Reader)
{ {
// String : FootnoteId // String : FootnoteId
this.FootnoteId = Reader.GetString2(); this.FootnoteId = Reader.GetString2();
}; };
ParaFootnoteReference.prototype.Get_Footnote = function()
{
return this.Footnote;
};
function ParagraphContent_Read_FromBinary(Reader) function ParagraphContent_Read_FromBinary(Reader)
......
...@@ -2792,6 +2792,11 @@ CParagraphRecalculateStateWrap.prototype = ...@@ -2792,6 +2792,11 @@ CParagraphRecalculateStateWrap.prototype =
NumberingItem.LineAscent = LineAscent; NumberingItem.LineAscent = LineAscent;
return X; return X;
},
Add_FootnoteReference : function(sId, oPos)
{
} }
}; };
......
...@@ -2256,6 +2256,9 @@ ParaRun.prototype.Recalculate_Range = function(PRS, ParaPr, Depth) ...@@ -2256,6 +2256,9 @@ ParaRun.prototype.Recalculate_Range = function(PRS, ParaPr, Depth)
// При проверке, убирается ли слово, мы должны учитывать ширину предшествующих пробелов. // При проверке, убирается ли слово, мы должны учитывать ширину предшествующих пробелов.
var LetterLen = Item.Width / TEXTWIDTH_DIVIDER;//var LetterLen = Item.Get_Width(); var LetterLen = Item.Width / TEXTWIDTH_DIVIDER;//var LetterLen = Item.Get_Width();
if (para_FootnoteReference === ItemType)
PRS.Add_FootnoteReference(Item.Get_Footnote(), Pos);
if (true !== Word) if (true !== Word)
{ {
...@@ -4436,7 +4439,7 @@ ParaRun.prototype.Draw_Elements = function(PDSE) ...@@ -4436,7 +4439,7 @@ ParaRun.prototype.Draw_Elements = function(PDSE)
if (para_Drawing != ItemType || Item.Is_Inline()) if (para_Drawing != ItemType || Item.Is_Inline())
{ {
Item.Draw(X, Y - this.YOffset, pGraphics); Item.Draw(X, Y - this.YOffset, pGraphics, PDSE);
X += Item.Get_WidthVisible(); X += Item.Get_WidthVisible();
} }
......
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