From f658209d25477c490bf1892e68a0fd1384c1dded Mon Sep 17 00:00:00 2001 From: scuri Date: Tue, 23 Jun 2009 20:55:28 +0000 Subject: *** empty log message *** --- src/sim/sim_text.c | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) (limited to 'src/sim/sim_text.c') diff --git a/src/sim/sim_text.c b/src/sim/sim_text.c index 86821ce..afc7cde 100644 --- a/src/sim/sim_text.c +++ b/src/sim/sim_text.c @@ -141,11 +141,11 @@ void cdgetfontdimSIM(cdCtxCanvas* ctxcanvas, int *max_width, int *height, int *a if(height) *height= simulation->tt_text->max_height; } -void cdgettextsizeSIM(cdCtxCanvas* ctxcanvas, const char *s, int *width, int *height) +void cdgettextsizeSIM(cdCtxCanvas* ctxcanvas, const char *s, int len, int *width, int *height) { cdCanvas* canvas = ((cdCtxCanvasBase*)ctxcanvas)->canvas; cdSimulation* simulation = canvas->simulation; - int w = 0; + int i = 0, w = 0; FT_Face face; FT_GlyphSlot slot; FT_Error error; @@ -159,15 +159,15 @@ void cdgettextsizeSIM(cdCtxCanvas* ctxcanvas, const char *s, int *width, int *he /* set transformation */ FT_Set_Transform( face, NULL, NULL ); - while(*s) + while(i < len) { /* load glyph image into the slot (erase previous one) */ - error = FT_Load_Char( face, *(unsigned char*)s, FT_LOAD_DEFAULT ); - if (error) {s++; continue;} /* ignore errors */ + error = FT_Load_Char( face, (unsigned char)s[i], FT_LOAD_DEFAULT ); + if (error) {i++; continue;} /* ignore errors */ w += slot->advance.x; - s++; + i++; } if (height) *height = simulation->tt_text->max_height; @@ -299,13 +299,13 @@ static void simDrawTextBitmap(cdSimulation* simulation, FT_Bitmap* bitmap, int x simulation->canvas->use_matrix = olduse_matrix; } -void simGetPenPos(cdCanvas* canvas, int x, int y, const char* s, FT_Matrix *matrix, FT_Vector *pen) +void simGetPenPos(cdCanvas* canvas, int x, int y, const char* s, int len, FT_Matrix *matrix, FT_Vector *pen) { int ox = x, oy = y; int old_invert_yaxis = canvas->invert_yaxis; int w, h, ascent, height, baseline; - cdgettextsizeSIM(canvas->ctxcanvas, s, &w, &h); + cdgettextsizeSIM(canvas->ctxcanvas, s, len, &w, &h); cdgetfontdimSIM(canvas->ctxcanvas, NULL, &height, &ascent, NULL); baseline = height - ascent; @@ -364,7 +364,7 @@ void simGetPenPos(cdCanvas* canvas, int x, int y, const char* s, FT_Matrix *matr } -void cdtextSIM(cdCtxCanvas* ctxcanvas, int x, int y, const char * s) +void cdtextSIM(cdCtxCanvas* ctxcanvas, int x, int y, const char* s, int len) { cdCanvas* canvas = ((cdCtxCanvasBase*)ctxcanvas)->canvas; cdSimulation* simulation = canvas->simulation; @@ -373,6 +373,7 @@ void cdtextSIM(cdCtxCanvas* ctxcanvas, int x, int y, const char * s) FT_Matrix matrix; /* transformation matrix */ FT_Vector pen; /* untransformed origin */ FT_Error error; + int i = 0; if (!simulation->tt_text->face) return; @@ -385,16 +386,16 @@ void cdtextSIM(cdCtxCanvas* ctxcanvas, int x, int y, const char * s) y = _cdInvertYAxis(canvas, y); /* y is already inverted, invert back to cartesian space */ /* move the reference point to the baseline-left */ - simGetPenPos(simulation->canvas, x, y, s, &matrix, &pen); + simGetPenPos(simulation->canvas, x, y, s, strlen(s), &matrix, &pen); - while(*s) + while(ibitmap_left; y = slot->bitmap_top-slot->bitmap.rows; /* CD image reference point is at bottom-left */ @@ -409,6 +410,6 @@ void cdtextSIM(cdCtxCanvas* ctxcanvas, int x, int y, const char * s) pen.x += slot->advance.x; pen.y += slot->advance.y; - s++; + i++; } } -- cgit v1.2.3