Example #1
0
        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));
        }
Example #2
0
        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));
        }
Example #3
0
        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);
        }
Example #4
0
 public abstract Vector2 DrawText(string text, Font font, RectangleF target, TextAlign align, Color color, FontMeasure fontMeasure = FontMeasure.Extended);
Example #5
0
 public abstract SizeF MeasureText(string text, FontMeasure measure);