Browse Source

WIP: more precise Line Height in Skia FormattedTextImpl

pull/559/head
donandren 10 years ago
parent
commit
fc266209a4
  1. 9
      src/Skia/Avalonia.Skia/FormattedTextImpl.cs

9
src/Skia/Avalonia.Skia/FormattedTextImpl.cs

@ -14,7 +14,7 @@ namespace Avalonia.Skia
public FormattedTextImpl(string text, TextWrapping wrapping = TextWrapping.NoWrap) public FormattedTextImpl(string text, TextWrapping wrapping = TextWrapping.NoWrap)
{ {
_text = text; _text = text ?? string.Empty;
_wrapping = wrapping; _wrapping = wrapping;
_paint = new SKPaint(); _paint = new SKPaint();
@ -174,8 +174,9 @@ namespace Avalonia.Skia
var mBottom = metrics.Bottom; // The greatest distance below the baseline for any glyph (will be >= 0). var mBottom = metrics.Bottom; // The greatest distance below the baseline for any glyph (will be >= 0).
var mLeading = metrics.Leading; // The recommended distance to add between lines of text (will be >= 0). var mLeading = metrics.Leading; // The recommended distance to add between lines of text (will be >= 0).
var mDescent = metrics.Descent; var mDescent = metrics.Descent;
var mAscent = metrics.Ascent;
// This seems like the best measure of full vertical extent // This seems like the best measure of full vertical extent
LineHeight = mBottom - mTop; LineHeight = mDescent - mAscent;
// Rendering is relative to baseline // Rendering is relative to baseline
LineOffset = -metrics.Top; LineOffset = -metrics.Top;
@ -220,7 +221,7 @@ namespace Avalonia.Skia
_skiaLines.Add(line); _skiaLines.Add(line);
curY += LineHeight - mDescent; curY += LineHeight;
// TODO: We may want to consider adding Leading to the vertical line spacing but for now // TODO: We may want to consider adding Leading to the vertical line spacing but for now
// it appears to make no difference. Revisit as part of FormattedText improvements. // it appears to make no difference. Revisit as part of FormattedText improvements.
@ -250,7 +251,7 @@ namespace Avalonia.Skia
else else
{ {
var lastLine = _skiaLines[_skiaLines.Count - 1]; var lastLine = _skiaLines[_skiaLines.Count - 1];
_size = new Size(maxX, lastLine.Top + lastLine.Height); _size = new Size(maxX, lastLine.Top + lastLine.Height + mBottom - mDescent);
} }
BuildRects(); BuildRects();

Loading…
Cancel
Save