X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=render%2Frender.c;h=1351cb363e887cedf33d836d4c0e8b68db04d1c7;hb=5db556c5415c3dd926662c1fac6bd7a084ae206b;hp=3327effaac7a695eb6a42f7e98c523573c3932c7;hpb=8146cdb6eed75f69169a91348644f584243122c0;p=chaz%2Fopenbox diff --git a/render/render.c b/render/render.c index 3327effa..1351cb36 100644 --- a/render/render.c +++ b/render/render.c @@ -97,18 +97,35 @@ void RrPaint(RrAppearance *l, Window win, gint w, gint h) RrColormap(l->inst)); } RrFontDraw(l->xftdraw, &l->texture[i].data.text, &tarea); - break; + break; + case RR_TEXTURE_LINE_ART: + if (!transferred) { + transferred = 1; + if (l->surface.grad != RR_SURFACE_SOLID) + pixel_data_to_pixmap(l, 0, 0, w, h); + } + g_message("%d %d -> %d %d", + l->texture[i].data.lineart.x1, + l->texture[i].data.lineart.y1, + l->texture[i].data.lineart.x2, + l->texture[i].data.lineart.y2); + XDrawLine(RrDisplay(l->inst), l->pixmap, + RrColorGC(l->texture[i].data.lineart.color), + l->texture[i].data.lineart.x1, + l->texture[i].data.lineart.y1, + l->texture[i].data.lineart.x2, + l->texture[i].data.lineart.y2); + break; case RR_TEXTURE_MASK: if (!transferred) { transferred = 1; if (l->surface.grad != RR_SURFACE_SOLID) pixel_data_to_pixmap(l, 0, 0, w, h); } - if (l->texture[i].data.mask.color->gc == None) - RrColorAllocateGC(l->texture[i].data.mask.color); RrPixmapMaskDraw(l->pixmap, &l->texture[i].data.mask, &tarea); - break; + break; case RR_TEXTURE_RGBA: + g_assert(!transferred); RrImageDraw(l->surface.pixel_data, &l->texture[i].data.rgba, &tarea); break; @@ -121,7 +138,6 @@ void RrPaint(RrAppearance *l, Window win, gint w, gint h) pixel_data_to_pixmap(l, 0, 0, w, h); } - XSetWindowBackgroundPixmap(RrDisplay(l->inst), win, l->pixmap); XClearWindow(RrDisplay(l->inst), win); if (oldp) XFreePixmap(RrDisplay(l->inst), oldp); @@ -143,6 +159,7 @@ RrAppearance *RrAppearanceCopy(RrAppearance *orig) { RrSurface *spo, *spc; RrAppearance *copy = g_new(RrAppearance, 1); + gint i; copy->inst = orig->inst; @@ -195,6 +212,11 @@ RrAppearance *RrAppearanceCopy(RrAppearance *orig) copy->textures = orig->textures; copy->texture = g_memdup(orig->texture, orig->textures * sizeof(RrTexture)); + for (i = 0; i < copy->textures; ++i) + if (copy->texture[i].type == RR_TEXTURE_RGBA) { + g_free(copy->texture[i].data.rgba.cache); + copy->texture[i].data.rgba.cache = NULL; + } copy->pixmap = None; copy->xftdraw = NULL; copy->w = copy->h = 0; @@ -203,10 +225,17 @@ RrAppearance *RrAppearanceCopy(RrAppearance *orig) void RrAppearanceFree(RrAppearance *a) { + gint i; + if (a) { RrSurface *p; if (a->pixmap != None) XFreePixmap(RrDisplay(a->inst), a->pixmap); if (a->xftdraw != NULL) XftDrawDestroy(a->xftdraw); + for (i = 0; i < a->textures; ++i) + if (a->texture[i].type == RR_TEXTURE_RGBA) { + g_free(a->texture[i].data.rgba.cache); + a->texture[i].data.rgba.cache = NULL; + } if (a->textures) g_free(a->texture); p = &a->surface; @@ -275,6 +304,12 @@ void RrMinsize(RrAppearance *l, gint *w, gint *h) *w += MAX(*w, l->texture[i].data.rgba.width); *h += MAX(*h, l->texture[i].data.rgba.height); break; + case RR_TEXTURE_LINE_ART: + *w += MAX(*w, MAX(l->texture[i].data.lineart.x1, + l->texture[i].data.lineart.x2)); + *h += MAX(*h, MAX(l->texture[i].data.lineart.y1, + l->texture[i].data.lineart.y2)); + break; } }