From cd75b454eba706f89e82041c3f62ab08998d0397 Mon Sep 17 00:00:00 2001 From: Dana Jansens Date: Sun, 31 Aug 2003 17:02:49 +0000 Subject: [PATCH] add RrColorGC add a LineArt texture type for drawing a line, this is used for drawing the menu separators --- render/render.c | 32 +++++++++++++++++++++++++++----- render/render.h | 12 ++++++++++++ 2 files changed, 39 insertions(+), 5 deletions(-) diff --git a/render/render.c b/render/render.c index 4735ec51..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); @@ -288,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; } } diff --git a/render/render.h b/render/render.h index 3ddde716..19f0989e 100644 --- a/render/render.h +++ b/render/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 @@ struct _RrTextureRGBA { 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); -- 2.44.0