Example #1
0
        public static void DrawMultilineText(SKCanvas canvas, string text, int size, int margin, ETextSide side, SKRect area, SKPaint paint, out int yPos)
        {
            float lineHeight = paint.TextSize * 1.2f;

            Line[] lines = SplitLines(text, paint, area.Width);
            if (lines == null)
            {
                yPos = (int)area.Top;
                return;
            }

            float y = area.Top;

            for (int i = 0; i < lines.Length; i++)
            {
                float x = side switch
                {
                    ETextSide.Center => area.MidX - lines[i].Width / 2,
                    ETextSide.Right => size - margin - lines[i].Width,
                    ETextSide.Left => area.Left,
                    _ => area.MidX - lines[i].Width / 2
                };
                canvas.DrawText(lines[i].Value.TrimEnd(), x, y, paint);
                y += lineHeight;
            }
            yPos = (int)area.Top + ((int)lineHeight * lines.Length);
        }
Example #2
0
 public static void DrawCenteredMultilineText(SKCanvas canvas, string text, int maxLineCount, BaseIcon icon, ETextSide side, SKRect area, SKPaint paint)
 => DrawCenteredMultilineText(canvas, text, maxLineCount, icon.Size, icon.Margin, side, area, paint);
Example #3
0
        public static void DrawCenteredMultilineText(SKCanvas canvas, string text, int maxLineCount, int size, int margin, ETextSide side, SKRect area, SKPaint paint)
        {
            float lineHeight = paint.TextSize * 1.2f;

            Line[] lines = SplitLines(text, paint, area.Width - margin);

            if (lines == null)
            {
                return;
            }
            if (lines.Length <= maxLineCount)
            {
                maxLineCount = lines.Length;
            }

            float height = maxLineCount * lineHeight;
            float y      = area.MidY - height / 2;

            for (int i = 0; i < maxLineCount; i++)
            {
                y += lineHeight;
                float x = side switch
                {
                    ETextSide.Center => area.MidX - lines[i].Width / 2,
                    ETextSide.Right => size - margin - lines[i].Width,
                    ETextSide.Left => margin,
                    _ => area.MidX - lines[i].Width / 2
                };
                canvas.DrawText(lines[i].Value.TrimEnd(), x, y, paint);
            }
        }
Example #4
0
        public static void DrawCenteredMultilineText(SKCanvas canvas, string text, int maxLineCount, int size, int margin, ETextSide side, SKRect area, SKPaint paint)
        {
            float       lineHeight = paint.TextSize * 1.2f;
            List <Line> lines      = SplitLines(text, paint, area.Width - margin);

            if (lines == null)
            {
                return;
            }
            if (lines.Count <= maxLineCount)
            {
                maxLineCount = lines.Count;
            }

            float    height = maxLineCount * lineHeight;
            float    y      = area.MidY - height / 2;
            SKShaper shaper = (ELanguage)Settings.Default.AssetsLanguage == ELanguage.Arabic ? new SKShaper(paint.Typeface) : null;

            for (int i = 0; i < maxLineCount; i++)
            {
                Line line = lines[i];

                y += lineHeight;
                float x = side switch
                {
                    ETextSide.Center => area.MidX - line.Width / 2,
                    ETextSide.Right => size - margin - line.Width,
                    ETextSide.Left => margin,
                    _ => area.MidX - line.Width / 2
                };

                string lineText = line.Value.TrimEnd();

                if (shaper == null)
                {
                    canvas.DrawText(lineText, x, y, paint);
                }
                else
                {
                    if (side == ETextSide.Center)
                    {
                        SKShaper.Result shapedText      = shaper.Shape(lineText, paint);
                        float           shapedTextWidth = shapedText.Points[^ 1].X + paint.TextSize / 2f;