X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;ds=sidebyside;f=render%2Frender.c;h=75dead16b0cd2d0c4c0f3fd40a7af49520865fe9;hb=c7af49b5c564d6287a0293ae26fc713fb55b4dc8;hp=97ec7b520e149a784caceacdeaff4e585239723c;hpb=89ade7a8c1a5f825f61657cb185246cefbd4e96e;p=chaz%2Fopenbox diff --git a/render/render.c b/render/render.c index 97ec7b52..75dead16 100644 --- a/render/render.c +++ b/render/render.c @@ -86,8 +86,8 @@ Pixmap RrPaintPixmap(RrAppearance *a, gint w, gint h) { gint l, t, r, b; RrMargins(a, &l, &t, &r, &b); - RECT_SET(tarea, l, t, w - l - r, h - t - b); - } + RECT_SET(tarea, l, t, w - l - r, h - t - b); + } for (i = 0; i < a->textures; i++) { switch (a->texture[i].type) { @@ -101,7 +101,7 @@ Pixmap RrPaintPixmap(RrAppearance *a, gint w, gint h) pixel_data_to_pixmap(a, 0, 0, w, h); } if (a->xftdraw == NULL) { - a->xftdraw = XftDrawCreate(RrDisplay(a->inst), a->pixmap, + a->xftdraw = XftDrawCreate(RrDisplay(a->inst), a->pixmap, RrVisual(a->inst), RrColormap(a->inst)); } @@ -178,6 +178,12 @@ RrAppearance *RrAppearanceNew(const RrInstance *inst, gint numtex) return out; } +void RrAppearanceRemoveTextures(RrAppearance *a) +{ + g_free(a->texture); + a->textures = 0; +} + void RrAppearanceAddTextures(RrAppearance *a, gint numtex) { g_assert(a->textures == 0); @@ -202,7 +208,7 @@ RrAppearance *RrAppearanceCopy(RrAppearance *orig) if (spo->primary != NULL) spc->primary = RrColorNew(copy->inst, spo->primary->r, - spo->primary->g, + spo->primary->g, spo->primary->b); else spc->primary = NULL; @@ -376,9 +382,11 @@ gint RrMinWidth(RrAppearance *a) break; case RR_TEXTURE_TEXT: m = RrFontMeasureString(a->texture[i].data.text.font, - a->texture[i].data.text.string, + a->texture[i].data.text.string, a->texture[i].data.text.shadow_offset_x, - a->texture[i].data.text.shadow_offset_y); + a->texture[i].data.text.shadow_offset_y, + a->texture[i].data.text.flow, + a->texture[i].data.text.maxwidth); w = MAX(w, m->width); g_free(m); break; @@ -404,6 +412,7 @@ gint RrMinHeight(RrAppearance *a) { gint i; gint l, t, r, b; + RrSize *m; gint h = 0; for (i = 0; i < a->textures; ++i) { @@ -414,8 +423,24 @@ gint RrMinHeight(RrAppearance *a) h = MAX(h, a->texture[i].data.mask.mask->height); break; case RR_TEXTURE_TEXT: - h += MAX(h, RrFontHeight(a->texture[i].data.text.font, - a->texture[i].data.text.shadow_offset_y)); + if (a->texture[i].data.text.flow) { + g_assert(a->texture[i].data.text.string != NULL); + + m = RrFontMeasureString + (a->texture[i].data.text.font, + a->texture[i].data.text.string, + a->texture[i].data.text.shadow_offset_x, + a->texture[i].data.text.shadow_offset_y, + a->texture[i].data.text.flow, + a->texture[i].data.text.maxwidth); + h += MAX(h, m->height); + g_free(m); + } + else + h += MAX(h, + RrFontHeight + (a->texture[i].data.text.font, + a->texture[i].data.text.shadow_offset_y)); break; case RR_TEXTURE_RGBA: h += MAX(h, a->texture[i].data.rgba.height);