{
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) {
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));
}
return out;
}
+void RrAppearanceRemoveTextures(RrAppearance *a)
+{
+ g_free(a->texture);
+ a->textures = 0;
+}
+
void RrAppearanceAddTextures(RrAppearance *a, gint numtex)
{
g_assert(a->textures == 0);
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;
gint l, t, r, b;
gint w = 0;
+ RrMargins(a, &l, &t, &r, &b);
+
for (i = 0; i < a->textures; ++i) {
switch (a->texture[i].type) {
case RR_TEXTURE_NONE:
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;
w += MAX(w, a->texture[i].data.rgba.width);
break;
case RR_TEXTURE_LINE_ART:
- w += MAX(w, MAX(a->texture[i].data.lineart.x1,
- a->texture[i].data.lineart.x2));
+ w = MAX(w, MAX(a->texture[i].data.lineart.x1 - l - r,
+ a->texture[i].data.lineart.x2 - l - r));
break;
}
}
- RrMargins(a, &l, &t, &r, &b);
-
w += l + r;
if (w < 1) w = 1;
{
gint i;
gint l, t, r, b;
+ RrSize *m;
gint h = 0;
+ RrMargins(a, &l, &t, &r, &b);
+
for (i = 0; i < a->textures; ++i) {
switch (a->texture[i].type) {
case RR_TEXTURE_NONE:
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);
break;
case RR_TEXTURE_LINE_ART:
- h += MAX(h, MAX(a->texture[i].data.lineart.y1,
- a->texture[i].data.lineart.y2));
+ h = MAX(h, MAX(a->texture[i].data.lineart.y1 - t - b,
+ a->texture[i].data.lineart.y2 - t - b));
break;
}
}
- RrMargins(a, &l, &t, &r, &b);
-
h += t + b;
if (h < 1) h = 1;