|
|
@@ -96,7 +96,7 @@ namespace Avalonia.Media.TextFormatting
|
|
|
{
|
|
|
case DrawableTextRun drawableTextRun:
|
|
|
{
|
|
|
- var offsetY = GetBaselineOffset(this, drawableTextRun);
|
|
|
+ var offsetY = GetBaselineOffset(drawableTextRun);
|
|
|
|
|
|
drawableTextRun.Draw(drawingContext, new Point(currentX, currentY + offsetY));
|
|
|
|
|
|
@@ -108,29 +108,38 @@ namespace Avalonia.Media.TextFormatting
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- private static double GetBaselineOffset(TextLine textLine, DrawableTextRun textRun)
|
|
|
+ private double GetBaselineOffset(DrawableTextRun textRun)
|
|
|
{
|
|
|
var baseline = textRun.Baseline;
|
|
|
var baselineAlignment = textRun.Properties?.BaselineAlignment;
|
|
|
|
|
|
+ var baselineOffset = -baseline;
|
|
|
+
|
|
|
switch (baselineAlignment)
|
|
|
{
|
|
|
case BaselineAlignment.Baseline:
|
|
|
- return textLine.Baseline;
|
|
|
+ baselineOffset += Baseline;
|
|
|
+ break;
|
|
|
case BaselineAlignment.Top:
|
|
|
case BaselineAlignment.TextTop:
|
|
|
- return textLine.Baseline - textLine.Extent + textRun.Size.Height / 2;
|
|
|
+ baselineOffset += Height - Extent + textRun.Size.Height / 2;
|
|
|
+ break;
|
|
|
case BaselineAlignment.Center:
|
|
|
- return textLine.Height / 2 + baseline - textRun.Size.Height / 2;
|
|
|
+ baselineOffset += Height / 2 + baseline - textRun.Size.Height / 2;
|
|
|
+ break;
|
|
|
case BaselineAlignment.Subscript:
|
|
|
case BaselineAlignment.Bottom:
|
|
|
case BaselineAlignment.TextBottom:
|
|
|
- return textLine.Height - textRun.Size.Height + baseline;
|
|
|
+ baselineOffset += Height - textRun.Size.Height + baseline;
|
|
|
+ break;
|
|
|
case BaselineAlignment.Superscript:
|
|
|
- return baseline;
|
|
|
+ baselineOffset += baseline;
|
|
|
+ break;
|
|
|
default:
|
|
|
throw new ArgumentOutOfRangeException(nameof(baselineAlignment), baselineAlignment, null);
|
|
|
}
|
|
|
+
|
|
|
+ return baselineOffset;
|
|
|
}
|
|
|
|
|
|
/// <inheritdoc/>
|