public override SizeF MeasureText(string text, FontMeasure measure) { var rect = new SKRect(); var width = SKPaint.MeasureText(text, ref rect); var height = SKFont.Size; switch (measure) { case FontMeasure.Strict: SKPaint.MeasureText("X", ref rect); height = rect.Height; break; case FontMeasure.Extended: height = SKFont.Size + SKFont.Metrics.Descent; break; } return(new SizeF(width, height)); }
private Vector2 CalculateTargetPosition(Font font, string line, RectangleF target, TextAlign textAlign, FontMeasure fontMeasure, out SizeF size) { var skiaFont = (SkiaFont)font; var skPaint = skiaFont.SKPaint; skPaint.IsStroke = false; size = font.MeasureText(line, fontMeasure); float positionX = target.X; switch (textAlign & (TextAlign.Left | TextAlign.Center | TextAlign.Right)) { case TextAlign.Right: positionX = target.Right - size.Width; break; case TextAlign.Center: positionX = target.Center.X - size.Width / 2; break; } float positionY = target.Top; switch (textAlign & (TextAlign.Top | TextAlign.Middle | TextAlign.Bottom)) { case TextAlign.Bottom: positionY = target.Bottom - size.Height; break; case TextAlign.Middle: positionY = target.Center.Y - size.Height / 2; break; } var offsetY = size.Height; if (fontMeasure == FontMeasure.Extended) { offsetY = skiaFont.SKFont.Size; } return(new Vector2(positionX, positionY + offsetY)); }
public override Vector2 DrawText(string line, Font font, RectangleF target, TextAlign textAlign, Color color, FontMeasure fontMeasure = FontMeasure.Extended) { if (font == null) { return(Vector2.Zero); } if (line == null) { return(Vector2.Zero); } var skiaFont = (SkiaFont)font; var position = CalculateTargetPosition(font, line, target, textAlign, fontMeasure, out var size); var skPaint = skiaFont.SKPaint; PreparePaint(skPaint); skPaint.IsStroke = false; skPaint.IsAntialias = true; skPaint.FilterQuality = SKFilterQuality.Low; skPaint.Color = color.ToSkia(); skCanvas.DrawText(line, position.X, position.Y, skPaint); return(size); }
public abstract Vector2 DrawText(string text, Font font, RectangleF target, TextAlign align, Color color, FontMeasure fontMeasure = FontMeasure.Extended);
public abstract SizeF MeasureText(string text, FontMeasure measure);