From 621e0b8d35348741038bae20e7773fcefcf3f8ab Mon Sep 17 00:00:00 2001 From: Nat! Date: Sun, 20 Dec 2020 12:45:20 +0100 Subject: [PATCH] Fixed text vanishing when the transform is vertically flipped --- src/nanovg.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/nanovg.c b/src/nanovg.c index f42426a..53bd06b 100644 --- a/src/nanovg.c +++ b/src/nanovg.c @@ -2454,6 +2454,12 @@ static void nvg__renderText(NVGcontext* ctx, NVGvertex* verts, int nverts) ctx->textTriCount += nverts/3; } +static int nvg__isTransformFlipped( const float *xform) +{ + float det = xform[0] * xform[3] - xform[2] * xform[1]; + return( det < 0); +} + float nvgText(NVGcontext* ctx, float x, float y, const char* string, const char* end) { NVGstate* state = nvg__getState(ctx); @@ -2464,6 +2470,8 @@ float nvgText(NVGcontext* ctx, float x, float y, const char* string, const char* float invscale = 1.0f / scale; int cverts = 0; int nverts = 0; + int isFlipped; + float tmp; if (end == NULL) end = string + strlen(string); @@ -2480,6 +2488,7 @@ float nvgText(NVGcontext* ctx, float x, float y, const char* string, const char* verts = nvg__allocTempVerts(ctx, cverts); if (verts == NULL) return x; + isFlipped = nvg__isTransformFlipped( state->xform); fonsTextIterInit(ctx->fs, &iter, x*scale, y*scale, string, end, FONS_GLYPH_BITMAP_REQUIRED); prevIter = iter; while (fonsTextIterNext(ctx->fs, &iter, &q)) { @@ -2497,6 +2506,11 @@ float nvgText(NVGcontext* ctx, float x, float y, const char* string, const char* break; } prevIter = iter; + if( isFlipped) + { + tmp = q.y0; q.y0 = q.y1; q.y1 = tmp; + tmp = q.t0; q.t0 = q.t1; q.t1 = tmp; + } // Transform corners. nvgTransformPoint(&c[0],&c[1], state->xform, q.x0*invscale, q.y0*invscale); nvgTransformPoint(&c[2],&c[3], state->xform, q.x1*invscale, q.y0*invscale);