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