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); }
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);
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); } }
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;