summaryrefslogtreecommitdiff
path: root/xc/lib/Xft/xftdraw.c
diff options
context:
space:
mode:
authordawes <dawes>2001-04-09 21:55:45 +0000
committerdawes <dawes>2001-04-09 21:55:45 +0000
commitaa523996abb9535003c3f03ef4be253eeed26a43 (patch)
treebd81ea8c94a2baf5132aea721e277e78aaee1ebe /xc/lib/Xft/xftdraw.c
parentacda79cb882d0fd8b59b52d61ec88dde275017e2 (diff)
First pass of XFree86 4.0.99.2 merge.
Diffstat (limited to 'xc/lib/Xft/xftdraw.c')
-rw-r--r--xc/lib/Xft/xftdraw.c72
1 files changed, 48 insertions, 24 deletions
diff --git a/xc/lib/Xft/xftdraw.c b/xc/lib/Xft/xftdraw.c
index d8f2c9835..409a5c947 100644
--- a/xc/lib/Xft/xftdraw.c
+++ b/xc/lib/Xft/xftdraw.c
@@ -1,5 +1,5 @@
/*
- * $XFree86: xc/lib/Xft/xftdraw.c,v 1.12 2000/12/20 00:28:44 keithp Exp $
+ * $XFree86: xc/lib/Xft/xftdraw.c,v 1.14 2001/04/01 14:00:01 tsi Exp $
*
* Copyright © 2000 Keith Packard, member of The XFree86 Project, Inc.
*
@@ -24,6 +24,7 @@
#include <stdio.h>
#include <stdlib.h>
+#include <string.h>
#include "xftint.h"
#include <X11/Xutil.h>
@@ -150,11 +151,13 @@ XftDrawChange (XftDraw *draw,
void
XftDrawDestroy (XftDraw *draw)
{
+ int n;
+
if (draw->render_able)
{
XRenderFreePicture (draw->dpy, draw->render.pict);
- XFreePixmap (draw->dpy, draw->render.fg_pix);
- XRenderFreePicture (draw->dpy, draw->render.fg_pict);
+ for (n = 0; n < XFT_DRAW_N_SRC; n++)
+ XRenderFreePicture (draw->dpy, draw->render.src[n].pict);
}
if (draw->core_set)
XFreeGC (draw->dpy, draw->core.draw_gc);
@@ -166,13 +169,16 @@ XftDrawDestroy (XftDraw *draw)
Bool
XftDrawRenderPrepare (XftDraw *draw,
XftColor *color,
- XftFont *font)
+ XftFont *font,
+ int src)
{
if (!draw->render_set)
{
XRenderPictFormat *format;
XRenderPictFormat *pix_format;
XRenderPictureAttributes pa;
+ int n;
+ Pixmap pix;
draw->render_set = True;
draw->render_able = False;
@@ -184,14 +190,22 @@ XftDrawRenderPrepare (XftDraw *draw,
draw->render.pict = XRenderCreatePicture (draw->dpy, draw->drawable,
format, 0, 0);
- draw->render.fg_pix = XCreatePixmap (draw->dpy, draw->drawable,
- 1, 1, pix_format->depth);
- pa.repeat = True;
- draw->render.fg_pict = XRenderCreatePicture (draw->dpy,
- draw->render.fg_pix,
- pix_format,
- CPRepeat, &pa);
- draw->render.fg_color.red = ~color->color.red;
+ for (n = 0; n < XFT_DRAW_N_SRC; n++)
+ {
+ pix = XCreatePixmap (draw->dpy, draw->drawable,
+ 1, 1, pix_format->depth);
+ pa.repeat = True;
+ draw->render.src[n].pict = XRenderCreatePicture (draw->dpy,
+ pix,
+ pix_format,
+ CPRepeat, &pa);
+ XFreePixmap (draw->dpy, pix);
+
+ draw->render.src[n].color = color->color;
+ XRenderFillRectangle (draw->dpy, PictOpSrc,
+ draw->render.src[n].pict,
+ &color->color, 0, 0, 1, 1);
+ }
if (draw->clip)
XRenderSetPictureClipRegion (draw->dpy, draw->render.pict,
draw->clip);
@@ -199,7 +213,8 @@ XftDrawRenderPrepare (XftDraw *draw,
}
if (!draw->render_able)
return False;
- if (memcmp (&color->color, &draw->render.fg_color, sizeof (XRenderColor)))
+ if (memcmp (&color->color, &draw->render.src[src].color,
+ sizeof (XRenderColor)))
{
if (_XftFontDebug () & XFT_DBG_DRAW)
{
@@ -209,9 +224,10 @@ XftDrawRenderPrepare (XftDraw *draw,
color->color.green,
color->color.blue);
}
- XRenderFillRectangle (draw->dpy, PictOpSrc, draw->render.fg_pict,
+ XRenderFillRectangle (draw->dpy, PictOpSrc,
+ draw->render.src[src].pict,
&color->color, 0, 0, 1, 1);
- draw->render.fg_color = color->color;
+ draw->render.src[src].color = color->color;
}
return True;
}
@@ -275,9 +291,11 @@ XftDrawString8 (XftDraw *draw,
(char *) string, len);
}
#ifdef FREETYPE2
- else if (XftDrawRenderPrepare (draw, color, font))
+ else if (XftDrawRenderPrepare (draw, color, font, XFT_DRAW_SRC_TEXT))
{
- XftRenderString8 (draw->dpy, draw->render.fg_pict, font->u.ft.font,
+ XftRenderString8 (draw->dpy,
+ draw->render.src[XFT_DRAW_SRC_TEXT].pict,
+ font->u.ft.font,
draw->render.pict, 0, 0, x, y, string, len);
}
#endif
@@ -307,9 +325,11 @@ XftDrawString16 (XftDraw *draw,
free (xc);
}
#ifdef FREETYPE2
- else if (XftDrawRenderPrepare (draw, color, font))
+ else if (XftDrawRenderPrepare (draw, color, font, XFT_DRAW_SRC_TEXT))
{
- XftRenderString16 (draw->dpy, draw->render.fg_pict, font->u.ft.font,
+ XftRenderString16 (draw->dpy,
+ draw->render.src[XFT_DRAW_SRC_TEXT].pict,
+ font->u.ft.font,
draw->render.pict, 0, 0, x, y, string, len);
}
#endif
@@ -337,9 +357,11 @@ XftDrawString32 (XftDraw *draw,
free (xc);
}
#ifdef FREETYPE2
- else if (XftDrawRenderPrepare (draw, color, font))
+ else if (XftDrawRenderPrepare (draw, color, font, XFT_DRAW_SRC_TEXT))
{
- XftRenderString32 (draw->dpy, draw->render.fg_pict, font->u.ft.font,
+ XftRenderString32 (draw->dpy,
+ draw->render.src[XFT_DRAW_SRC_TEXT].pict,
+ font->u.ft.font,
draw->render.pict, 0, 0, x, y, string, len);
}
#endif
@@ -371,9 +393,11 @@ XftDrawStringUtf8 (XftDraw *draw,
free (xc);
}
#ifdef FREETYPE2
- else if (XftDrawRenderPrepare (draw, color, font))
+ else if (XftDrawRenderPrepare (draw, color, font, XFT_DRAW_SRC_TEXT))
{
- XftRenderStringUtf8 (draw->dpy, draw->render.fg_pict, font->u.ft.font,
+ XftRenderStringUtf8 (draw->dpy,
+ draw->render.src[XFT_DRAW_SRC_TEXT].pict,
+ font->u.ft.font,
draw->render.pict, 0, 0, x, y, string, len);
}
#endif
@@ -388,7 +412,7 @@ XftDrawRect (XftDraw *draw,
unsigned int width,
unsigned int height)
{
- if (XftDrawRenderPrepare (draw, color, 0))
+ if (XftDrawRenderPrepare (draw, color, 0, XFT_DRAW_SRC_RECT))
{
XRenderFillRectangle (draw->dpy, PictOpSrc, draw->render.pict,
&color->color, x, y, width, height);