Commit e8a83226 authored by Keith Packard's avatar Keith Packard

XftDrawSrcPicture: Use XRenderCreateSolidFill when available

Instead of creating 1x1 pictures, use the solid pictures added in
Render version 0.10
Signed-off-by: Keith Packard's avatarKeith Packard <keithp@keithp.com>
Reviewed-by: Adam Jackson's avatarAdam Jackson <ajax@redhat.com>
parent 214f9b53
......@@ -106,6 +106,10 @@ _XftDisplayInfoGet (Display *dpy, FcBool createIfNecessary)
if (major < 0 || (major == 0 && minor <= 2))
info->use_free_glyphs = FcFalse;
info->hasSolid = FcFalse;
if (major > 0 || (major == 0 && minor >= 10))
info->hasSolid = FcTrue;
pf.type = PictTypeDirect;
pf.depth = 32;
pf.direct.redMask = 0xff;
......
......@@ -333,39 +333,52 @@ XftDrawSrcPicture (XftDraw *draw, _Xconst XftColor *color)
* Pick one to replace at random
*/
i = (unsigned int) rand () % XFT_NUM_SOLID_COLOR;
/*
* Recreate if it was for the wrong screen
*/
if (info->colors[i].screen != draw->screen && info->colors[i].pict)
{
XRenderFreePicture (dpy, info->colors[i].pict);
info->colors[i].pict = 0;
}
/*
* Create picture if necessary
*/
if (!info->colors[i].pict)
{
Pixmap pix;
XRenderPictureAttributes pa;
pix = XCreatePixmap (dpy, RootWindow (dpy, draw->screen), 1, 1,
info->solidFormat->depth);
pa.repeat = True;
info->colors[i].pict = XRenderCreatePicture (draw->dpy,
pix,
info->solidFormat,
CPRepeat, &pa);
XFreePixmap (dpy, pix);
if (info->hasSolid) {
/*
* Free any existing entry
*/
if (info->colors[i].pict)
XRenderFreePicture (dpy, info->colors[i].pict);
/*
* Create picture
*/
info->colors[i].pict = XRenderCreateSolidFill (draw->dpy, &color->color);
} else {
if (info->colors[i].screen != draw->screen && info->colors[i].pict)
{
XRenderFreePicture (dpy, info->colors[i].pict);
info->colors[i].pict = 0;
}
/*
* Create picture if necessary
*/
if (!info->colors[i].pict)
{
Pixmap pix;
XRenderPictureAttributes pa;
pix = XCreatePixmap (dpy, RootWindow (dpy, draw->screen), 1, 1,
info->solidFormat->depth);
pa.repeat = True;
info->colors[i].pict = XRenderCreatePicture (draw->dpy,
pix,
info->solidFormat,
CPRepeat, &pa);
XFreePixmap (dpy, pix);
}
/*
* Set to the new color
*/
info->colors[i].color = color->color;
info->colors[i].screen = draw->screen;
XRenderFillRectangle (dpy, PictOpSrc,
info->colors[i].pict,
&color->color, 0, 0, 1, 1);
}
/*
* Set to the new color
*/
info->colors[i].color = color->color;
info->colors[i].screen = draw->screen;
XRenderFillRectangle (dpy, PictOpSrc,
info->colors[i].pict,
&color->color, 0, 0, 1, 1);
return info->colors[i].pict;
}
......
......@@ -245,6 +245,7 @@ typedef struct _XftDisplayInfo {
XExtCodes *codes;
FcPattern *defaults;
FcBool hasRender;
FcBool hasSolid;
XftFont *fonts;
XRenderPictFormat *solidFormat;
unsigned long glyph_memory;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment