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

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

Сделано, чтобы рамка вокрус ссылки на сноску рисовалась как в Word. Сделано, чтобы ссылка на сноску рассчитывалась и рисовалась с любым значением.
parent 1c81a2c1
......@@ -1947,6 +1947,7 @@ Paragraph.prototype =
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 );
var StartPos = Range.StartPos;
......@@ -14574,6 +14575,10 @@ function CParagraphDrawStateElements()
this.X = 0;
this.Y = 0;
this.LineTop = 0;
this.LineBottom = 0;
this.BaseLine = 0;
}
CParagraphDrawStateElements.prototype =
......@@ -14599,6 +14604,13 @@ CParagraphDrawStateElements.prototype =
this.X = X;
this.Y = Y;
},
Set_LineMetrics : function(BaseLine, Top, Bottom)
{
this.LineTop = Top;
this.LineBottom = Bottom;
this.BaseLine = BaseLine;
}
};
......
......@@ -7445,34 +7445,44 @@ ParaPresentationNumbering.prototype =
/**
* Класс представляющий ссылку на сноску.
* @param {string} sId - Идентификатор сноски.
* @param {CFootEndnote} Footnote - Ссылка на сноску.
* @constructor
*/
function ParaFootnoteReference(sId)
function ParaFootnoteReference(Footnote)
{
this.FootnoteId = sId;
this.Footnote = Footnote;
this.Width = 0;
this.WidthVisible = 0;
this.Height = 0;
this.Number = 1;
}
ParaFootnoteReference.prototype.Type = para_FootnoteReference;
ParaFootnoteReference.prototype.Get_Type = function()
{
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.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: Надо переделать в отдельную функцию отрисовщика
if (editor && editor.ShowParaMarks)
{
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.drawVerLine(c_oAscLineDrawingRule.Right, l, t, b, 0);
Context.drawVerLine(c_oAscLineDrawingRule.Left, r, t, b, 0);
......@@ -7485,11 +7495,19 @@ ParaFootnoteReference.prototype.Draw = function(X, Y, Context)
ParaFootnoteReference.prototype.Measure = function(Context, TextPr)
{
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.WidthVisible = ResultWidth;
this.Height = Temp.Height;
};
ParaFootnoteReference.prototype.Get_Width = function()
{
......@@ -7527,6 +7545,10 @@ ParaFootnoteReference.prototype.Read_FromBinary = function(Reader)
// String : FootnoteId
this.FootnoteId = Reader.GetString2();
};
ParaFootnoteReference.prototype.Get_Footnote = function()
{
return this.Footnote;
};
function ParagraphContent_Read_FromBinary(Reader)
......
......@@ -2792,6 +2792,11 @@ CParagraphRecalculateStateWrap.prototype =
NumberingItem.LineAscent = LineAscent;
return X;
},
Add_FootnoteReference : function(sId, oPos)
{
}
};
......
......@@ -2257,6 +2257,9 @@ ParaRun.prototype.Recalculate_Range = function(PRS, ParaPr, Depth)
// При проверке, убирается ли слово, мы должны учитывать ширину предшествующих пробелов.
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)
{
// Слово только началось. Делаем следующее:
......@@ -4436,7 +4439,7 @@ ParaRun.prototype.Draw_Elements = function(PDSE)
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();
}
......
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