Index: trunk/src/obj_text.c =================================================================== --- trunk/src/obj_text.c (revision 706) +++ trunk/src/obj_text.c (revision 707) @@ -37,7 +37,7 @@ #include #include #include - +#include #include static rnd_font_t embf_, *embf = &embf_, *font = &embf_; @@ -74,7 +74,7 @@ static void camv_text_draw(camv_any_obj_t *obj, rnd_hid_gc_t gc, rnd_xform_mx_t *mx) { - rnd_font_draw_string(font, (unsigned char *)obj->text.s, obj->text.x, obj->text.y, font_scale, font_scale, obj->text.rot, RND_FONT_MIRROR_Y, 0, 0, 0, RND_FONT_TINY_HIDE, camv_text_draw_atom_cb, gc); + rnd_font_draw_string(font, (unsigned char *)obj->text.s, obj->text.x + obj->text.dx, obj->text.y + obj->text.dy, font_scale, font_scale, obj->text.rot, RND_FONT_MIRROR_Y, 0, 0, 0, RND_FONT_TINY_HIDE, camv_text_draw_atom_cb, gc); } static void camv_text_bbox(camv_any_obj_t *obj) @@ -93,7 +93,24 @@ void camv_text_update(rnd_design_t *hidlib, camv_text_t *text, camv_layer_t *ly) { - rnd_font_string_bbox(text->cx, text->cy, font, (unsigned char *)text->s, text->x, text->y, font_scale, font_scale, text->rot, RND_FONT_MIRROR_Y, 0, 0); + rnd_coord_t cx[4], cy[4], w, h; + + /* measure width and height */ + rnd_font_string_bbox(cx, cy, font, (unsigned char *)text->s, 0, 0, font_scale, font_scale, 0, RND_FONT_MIRROR_Y, 0, 0); + w = cx[1] - cx[0]; + h = cy[0] - cy[3]; + + text->dx = -w/2; + text->dy = h*1.5; + +rnd_trace("rot1 %mm %mm\n", text->dx, text->dy); + if (text->rot != 0) { + double rad = -text->rot / RND_RAD_TO_DEG; + rnd_rotate(&text->dx, &text->dy, 0, 0, cos(rad), sin(rad)); +rnd_trace(" %mm %mm\n", text->dx, text->dy); + } + + rnd_font_string_bbox(text->cx, text->cy, font, (unsigned char *)text->s, text->x + text->dx, text->y + text->dy, font_scale, font_scale, text->rot, RND_FONT_MIRROR_Y, 0, 0); camv_text_bbox((camv_any_obj_t *)text); } Index: trunk/src/obj_text.h =================================================================== --- trunk/src/obj_text.h (revision 706) +++ trunk/src/obj_text.h (revision 707) @@ -32,13 +32,14 @@ typedef struct camv_text_s { CAMV_ANY_PRIMITIVE_FIELDS; - rnd_coord_t x, y; + rnd_coord_t x, y; /* placement: specify center bottom point of text */ int size; - double rot; /* in degrees */ + double rot; /* in degrees */ char *s; /* internal/cache */ rnd_coord_t cx[4], cy[4]; /* 4 corners of the rotated bbox */ + rnd_coord_t dx, dy; /* offsets from x,y to librnd font renderer */ } camv_text_t; void camv_text_init(camv_text_t *text);