Quantcast
Channel: Recent Threads — Xamarin Community Forums
Viewing all articles
Browse latest Browse all 204402

BreakText returns incorrect number of characters if text contains cyrillic characters

$
0
0

Hello, Hello!

Try execute this code:
private void C_PaintSurface(object sender, SKPaintGLSurfaceEventArgs e)
{
var canvas = e.Surface.Canvas;
var textPaint = new SKPaint() { Color = SKColors.White };
var linePaint = new SKPaint() { Color = SKColors.Red };

        var lat = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
        var cyr = "АБВГДEЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЯЭЮЯ";

        var x = 10f;
        var y = 0f;
        var xx = 120f;
        foreach (var ch in lat)
        {
            var t = ch.ToString();
            var lw = textPaint.MeasureText(t);
            float mw;
            textPaint.BreakText(t, 1000f, out mw);
            canvas.DrawText($"{ch} ({lw} = {mw})", x, y += textPaint.FontSpacing, textPaint);
        }

        y = 0f; x += xx;
        foreach (var ch in lat.ToLower())
        {
            var t = ch.ToString();
            var lw = textPaint.MeasureText(t);
            float mw;
            textPaint.BreakText(t, 1000f, out mw);
            canvas.DrawText($"{ch} ({lw} = {mw})", x, y += textPaint.FontSpacing, textPaint);
        }

        y = 0f; x += xx;
        foreach (var ch in cyr)
        {
            var t = ch.ToString();
            var lw = textPaint.MeasureText(t);
            float mw;
            textPaint.BreakText(t, 1000f, out mw);
            canvas.DrawText($"{ch} ({lw} = {mw})", x, y += textPaint.FontSpacing, textPaint);
        }

        y = 0f; x += xx;
        foreach (var ch in cyr.ToLower())
        {
            var t = ch.ToString();
            var lw = textPaint.MeasureText(t);
            float mw;
            textPaint.BreakText(t, 1000f, out mw);
            canvas.DrawText($"{ch} ({lw} = {mw})", x, y += textPaint.FontSpacing, textPaint);
        }

        y = 0f; x += xx;

        for (var maxw = 50f; maxw <= 150f; maxw += 50f)
        {
            canvas.DrawText($"maxWidth = {maxw}", x, y += textPaint.FontSpacing, textPaint);

            {
                var t = lat;
                float mw;
                var l = textPaint.BreakText(t, maxw, out mw);
                if (l < t.Length) t = t.Remove((int)l);
                var lw = textPaint.MeasureText(t);
                canvas.DrawText($"{t} ({lw} = {mw})", x, y += textPaint.FontSpacing, textPaint);
            }

            {
                var t = cyr;
                float mw;
                var l = textPaint.BreakText(t, maxw, out mw);
                if (l < t.Length) t = t.Remove((int)l);
                var lw = textPaint.MeasureText(t);
                canvas.DrawText($"{t} ({lw} = {mw})", x, y += textPaint.FontSpacing, textPaint);
            }

            canvas.DrawLine(x, y + 5, x + maxw, y +5, linePaint);
            y += textPaint.FontSpacing;
        }
    }

Viewing all articles
Browse latest Browse all 204402

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>