Browse Source

Merge pull request #1580 from Karnah/fixes-line-measure

Skia: Fixed line width
pull/1579/merge
Jeremy Koritzinsky 8 years ago
committed by GitHub
parent
commit
2c846f09db
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 24
      src/Skia/Avalonia.Skia/FormattedTextImpl.cs

24
src/Skia/Avalonia.Skia/FormattedTextImpl.cs

@ -250,7 +250,26 @@ namespace Avalonia.Skia
{ {
float currX = x; float currX = x;
string subStr; string subStr;
float measure;
int len; int len;
float factor;
switch (paint.TextAlign)
{
case SKTextAlign.Left:
factor = 0;
break;
case SKTextAlign.Center:
factor = 0.5f;
break;
case SKTextAlign.Right:
factor = 1;
break;
default:
throw new ArgumentOutOfRangeException();
}
var textLine = Text.Substring(line.Start, line.Length);
currX -= paint.MeasureText(textLine) * factor;
for (int i = line.Start; i < line.Start + line.Length;) for (int i = line.Start; i < line.Start + line.Length;)
{ {
@ -268,13 +287,15 @@ namespace Avalonia.Skia
} }
subStr = Text.Substring(i, len); subStr = Text.Substring(i, len);
measure = paint.MeasureText(subStr);
currX += measure * factor;
ApplyWrapperTo(ref currentPaint, currentWrapper, ref currd, paint, canUseLcdRendering); ApplyWrapperTo(ref currentPaint, currentWrapper, ref currd, paint, canUseLcdRendering);
canvas.DrawText(subStr, currX, origin.Y + line.Top + _lineOffset, paint); canvas.DrawText(subStr, currX, origin.Y + line.Top + _lineOffset, paint);
i += len; i += len;
currX += paint.MeasureText(subStr); currX += measure * (1 - factor);
} }
} }
} }
@ -561,6 +582,7 @@ namespace Avalonia.Skia
measured = LineBreak(Text, curOff, length, _paint, constraint, out trailingnumber); measured = LineBreak(Text, curOff, length, _paint, constraint, out trailingnumber);
AvaloniaFormattedTextLine line = new AvaloniaFormattedTextLine(); AvaloniaFormattedTextLine line = new AvaloniaFormattedTextLine();
line.Start = curOff;
line.TextLength = measured; line.TextLength = measured;
line.Start = curOff; line.Start = curOff;
subString = Text.Substring(line.Start, line.TextLength); subString = Text.Substring(line.Start, line.TextLength);

Loading…
Cancel
Save