diff options
| author | Timothy Pearson <kb9vqf@pearsoncomputing.net> | 2011-07-10 15:17:53 -0500 | 
|---|---|---|
| committer | Timothy Pearson <kb9vqf@pearsoncomputing.net> | 2011-07-10 15:17:53 -0500 | 
| commit | dda8474928bd7276e1fad8fb7a601e7c83ff2bc2 (patch) | |
| tree | 7f83910598b33b12730035f086df20b5a53ab99c /tqtinterface/qt4/src/kernel/tqtaddons_x11.cpp | |
| parent | 6260b6178868c03aab1644bf93b0ef043654bdb0 (diff) | |
| download | experimental-dda8474928bd7276e1fad8fb7a601e7c83ff2bc2.tar.gz experimental-dda8474928bd7276e1fad8fb7a601e7c83ff2bc2.zip | |
Added TQt4 HEAD
Diffstat (limited to 'tqtinterface/qt4/src/kernel/tqtaddons_x11.cpp')
| -rw-r--r-- | tqtinterface/qt4/src/kernel/tqtaddons_x11.cpp | 144 | 
1 files changed, 144 insertions, 0 deletions
| diff --git a/tqtinterface/qt4/src/kernel/tqtaddons_x11.cpp b/tqtinterface/qt4/src/kernel/tqtaddons_x11.cpp new file mode 100644 index 0000000..4ad2199 --- /dev/null +++ b/tqtinterface/qt4/src/kernel/tqtaddons_x11.cpp @@ -0,0 +1,144 @@ +/* + * $XFree86: xc/lib/Xft/xftname.c,v 1.10 2001/03/30 18:50:18 keithp Exp $ + * + * Copyright © 2000 Keith Packard, member of The XFree86 Project, Inc. + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of Keith Packard not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission.  Keith Packard makes no + * representations about the suitability of this software for any purpose.  It + * is provided "as is" without express or implied warranty. + * + * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR + * CONSETQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + +#include "tqt_x11_p.h" + +#if !defined(TQT_NO_XFTFREETYPE) && !defined(TQT_XFT2) + +#include <X11/Xft/Xft.h> + +#include <stdio.h> +#include <string.h> +#include <stdlib.h> + +extern bool qt_use_xrender; // defined in qapplication_x11.cpp + +extern "C" { + +#define XFT_DRAW_N_SRC 2 + +struct _XftDraw { +    Display *dpy; +    Drawable drawable; +    Visual *visual; +    Colormap colormap; +    Region clip; +    Bool core_set; +    Bool render_set; +    Bool render_able; +    struct { +	Picture pict; +	struct { +	    Picture pict; +	    XRenderColor color; +	} src[XFT_DRAW_N_SRC]; +    } render; +    struct { +	GC draw_gc; +	unsigned long fg; +	Font font; +    } core; +}; + +Picture XftDrawPicture( XftDraw *draw ) +{ +    if ( ! draw ) return 0; +    if ( ! draw->render_set ) { +	// force the RENDER Picture to be created... +	XftColor color; +	color.color.red = color.color.green = color.color.blue = color.color.alpha = +	    color.pixel = 0; +	XftDrawRect( draw, &color, -100, -100, 1, 1 ); +    } +    return draw->render.pict; +} + +XftDraw *XftDrawCreateAlpha( Display *display, +			     Pixmap pixmap, +			     int depth ) +{ +    // taken from Xft 1 sources, see copyright above +    XftDraw     *draw; + +    draw = (XftDraw *) malloc (sizeof (XftDraw)); +    if (!draw) +	return 0; +    draw->dpy = display; +    draw->drawable = pixmap; +    draw->visual = 0; +    draw->colormap = 0; +    draw->core_set = False; +    draw->clip = 0; + +    // TQt addition - go ahead and create the render picture now +    draw->render_set = True; +    draw->render_able = False; + +    if ( qt_use_xrender ) { +	draw->render_able = True; + +	XRenderPictFormat *format = 0; +	XRenderPictFormat req; +	unsigned long tqmask = PictFormatType | PictFormatDepth | PictFormatAlphaMask; +	req.type = PictTypeDirect; +	req.depth = depth; +	req.direct.alphaMask = 0xff; +	format = XRenderFindFormat(draw->dpy, tqmask, &req, 0); +	if (format) { +	    draw->render.pict = +		XRenderCreatePicture(draw->dpy, draw->drawable, format, 0, 0); +	} + +	// to keep Xft from trying to free zero pixmaps/pictures, we need to create +	// 2 more pictures (that are identical to draw->render.pict) :/ +	draw->render.src[0].pict = +	    XRenderCreatePicture( draw->dpy, draw->drawable, format, 0, 0 ); +	draw->render.src[1].pict = +	    XRenderCreatePicture( draw->dpy, draw->drawable, format, 0, 0 ); +    } + +    return draw; +} + +void XftDrawSetClipRectangles(XftDraw *draw, int xoff, int yoff, XRectangle *rects, int count) +{ +    if (!draw) return; + +    Picture pict = XftDrawPicture(draw); +    XRenderSetPictureClipRectangles(draw->dpy, pict, xoff, yoff, rects, count); +} + +void XftDrawSetSubwindowMode(XftDraw *draw, int mode) +{ +    if (!draw) return; + +    Picture pict = XftDrawPicture(draw); +    XRenderPictureAttributes pattr; +    pattr.subwindow_mode = mode; +    XRenderChangePicture(draw->dpy, pict, CPSubwindowMode, &pattr); +} + +} // extern "C" + +#endif // !TQT_NO_XFTFREETYPE && !TQT_XFT2 | 
