summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDana Jansens <danakj@orodu.net>2003-08-31 17:02:49 +0000
committerDana Jansens <danakj@orodu.net>2003-08-31 17:02:49 +0000
commitcd75b454eba706f89e82041c3f62ab08998d0397 (patch)
tree9e10bf822cc940bf2dbe0b505ad63614cb48c079
parent6e86a42c4b468c6c58cf1acf6b288a250543db98 (diff)
add RrColorGC
add a LineArt texture type for drawing a line, this is used for drawing the menu separators
-rw-r--r--render/render.c32
-rw-r--r--render/render.h12
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);