all repos — openbox @ cd75b454eba706f89e82041c3f62ab08998d0397

openbox fork - make it a bit more like ryudo

add RrColorGC
add a LineArt texture type for drawing a line, this is used for drawing the menu separators
Dana Jansens danakj@orodu.net
commit

cd75b454eba706f89e82041c3f62ab08998d0397

parent

6e86a42c4b468c6c58cf1acf6b288a250543db98

2 files changed, 39 insertions(+), 5 deletions(-)

jump to
M render/render.crender/render.c

@@ -97,18 +97,35 @@ RrVisual(l->inst),

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;

@@ -120,7 +137,6 @@ transferred = 1;

if (l->surface.grad != RR_SURFACE_SOLID) pixel_data_to_pixmap(l, 0, 0, w, h); } - XSetWindowBackgroundPixmap(RrDisplay(l->inst), win, l->pixmap); XClearWindow(RrDisplay(l->inst), win);

@@ -287,6 +303,12 @@ break;

case RR_TEXTURE_RGBA: *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; } }
M render/render.hrender/render.h

@@ -14,6 +14,7 @@ typedef struct _RrTexture RrTexture;

typedef struct _RrTextureMask RrTextureMask; typedef struct _RrTextureRGBA RrTextureRGBA; typedef struct _RrTextureText RrTextureText; +typedef struct _RrTextureLineArt RrTextureLineArt; typedef struct _RrPixmapMask RrPixmapMask; typedef struct _RrInstance RrInstance; typedef struct _RrColor RrColor;

@@ -47,6 +48,7 @@ typedef enum {

RR_TEXTURE_NONE, RR_TEXTURE_MASK, RR_TEXTURE_TEXT, + RR_TEXTURE_LINE_ART, RR_TEXTURE_RGBA } RrTextureType;

@@ -103,10 +105,19 @@ gint cheight;

RrPixel32 *cache; }; +struct _RrTextureLineArt { + RrColor *color; + gint x1; + gint y1; + gint x2; + gint y2; +}; + union _RrTextureData { RrTextureRGBA rgba; RrTextureText text; RrTextureMask mask; + RrTextureLineArt lineart; }; struct _RrTexture {

@@ -163,6 +174,7 @@ gint RrColorRed (const RrColor *c);

gint RrColorGreen (const RrColor *c); gint RrColorBlue (const RrColor *c); gulong RrColorPixel (const RrColor *c); +GC RrColorGC (RrColor *c); RrAppearance *RrAppearanceNew (const RrInstance *inst, gint numtex); RrAppearance *RrAppearanceCopy (RrAppearance *a);