1 /* Cairo - a vector graphics library with display and print output
3 * Copyright © 2007 Red Hat, Inc.
5 * This library is free software; you can redistribute it and/or
6 * modify it either under the terms of the GNU Lesser General Public
7 * License version 2.1 as published by the Free Software Foundation
8 * (the "LGPL") or, at your option, under the terms of the Mozilla
9 * Public License Version 1.1 (the "MPL"). If you do not alter this
10 * notice, a recipient may use your version of this file under either
11 * the MPL or the LGPL.
13 * You should have received a copy of the LGPL along with this library
14 * in the file COPYING-LGPL-2.1; if not, write to the Free Software
15 * Foundation, Inc., 51 Franklin Street, Suite 500, Boston, MA 02110-1335, USA
16 * You should have received a copy of the MPL along with this library
17 * in the file COPYING-MPL-1.1
19 * The contents of this file are subject to the Mozilla Public License
20 * Version 1.1 (the "License"); you may not use this file except in
21 * compliance with the License. You may obtain a copy of the License at
22 * http://www.mozilla.org/MPL/
24 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY
25 * OF ANY KIND, either express or implied. See the LGPL or the MPL for
26 * the specific language governing rights and limitations.
28 * The Original Code is the cairo graphics library.
30 * The Initial Developer of the Original Code is Red Hat, Inc.
33 #ifndef CAIRO_XLIB_XRENDER_PRIVATE_H
34 #define CAIRO_XLIB_XRENDER_PRIVATE_H
36 #include "cairo-features.h"
37 #include "cairo-compiler-private.h"
41 /* These prototypes are used when defining interfaces missing from the
42 * render headers. As it happens, it is the case that all libxrender
43 * functions take a pointer as first argument. */
45 __attribute__((__unused__)) static void _void_consume (void *p, ...) { }
46 __attribute__((__unused__)) static void * _voidp_consume (void *p, ...) { return (void *)0; }
47 __attribute__((__unused__)) static int _int_consume (void *p, ...) { return 0; }
48 __attribute__((__unused__)) static void _void_consume_free (Display *p, XID n) { }
51 #if CAIRO_HAS_XLIB_XRENDER_SURFACE
53 #include "cairo-xlib-xrender.h"
55 #include <X11/extensions/Xrender.h>
56 #include <X11/extensions/renderproto.h>
58 /* We require Render >= 0.6. The following defines were only added in
59 * 0.10. Make sure they are defined.
62 /* Filters included in 0.10 */
63 #ifndef FilterConvolution
64 #define FilterConvolution "convolution"
67 /* Extended repeat attributes included in 0.10 */
70 #define RepeatNormal 1
72 #define RepeatReflect 3
76 #ifndef PictOptBlendMinimum
78 * Operators only available in version 0.11
80 #define PictOpBlendMinimum 0x30
81 #define PictOpMultiply 0x30
82 #define PictOpScreen 0x31
83 #define PictOpOverlay 0x32
84 #define PictOpDarken 0x33
85 #define PictOpLighten 0x34
86 #define PictOpColorDodge 0x35
87 #define PictOpColorBurn 0x36
88 #define PictOpHardLight 0x37
89 #define PictOpSoftLight 0x38
90 #define PictOpDifference 0x39
91 #define PictOpExclusion 0x3a
92 #define PictOpHSLHue 0x3b
93 #define PictOpHSLSaturation 0x3c
94 #define PictOpHSLColor 0x3d
95 #define PictOpHSLLuminosity 0x3e
96 #define PictOpBlendMaximum 0x3e
99 #if !HAVE_XRENDERCREATELINEARGRADIENT
100 #define XRenderCreateLinearGradient _int_consume
102 typedef struct _XLinearGradient {
108 #if !HAVE_XRENDERCREATERADIALGRADIENT
109 #define XRenderCreateRadialGradient _int_consume
111 typedef struct _XCircle {
116 typedef struct _XRadialGradient {
122 #if !HAVE_XRENDERCREATECONICALGRADIENT
123 #define XRenderCreateConicalGradient _int_consume
125 typedef struct _XConicalGradient {
127 XFixed angle; /* in degrees */
132 #else /* !CAIRO_HAS_XLIB_XRENDER_SURFACE */
134 /* Provide dummy symbols and macros to get it compile and take the fallback
135 * route, just like as if Xrender is not available in the server at run-time. */
140 #define XRenderQueryExtension _int_consume
141 #define XRenderQueryVersion _int_consume
142 #define XRenderQueryFormats _int_consume
143 #define XRenderQuerySubpixelOrder _int_consume
144 #define XRenderSetSubpixelOrder _int_consume
145 #define XRenderFindVisualFormat _voidp_consume
146 #define XRenderFindFormat _voidp_consume
147 #define XRenderFindStandardFormat _voidp_consume
148 #define XRenderQueryPictIndexValues _voidp_consume
149 #define XRenderCreatePicture _int_consume
150 #define XRenderChangePicture _void_consume
151 #define XRenderSetPictureClipRectangles _void_consume
152 #define XRenderSetPictureClipRegion _void_consume
153 #define XRenderSetPictureTransform _void_consume
154 #define XRenderFreePicture _void_consume_free
155 #define XRenderComposite _void_consume
156 #define XRenderCreateGlyphSet _int_consume
157 #define XRenderReferenceGlyphSet _int_consume
158 #define XRenderFreeGlyphSet _void_consume_free
159 #define XRenderAddGlyphs _void_consume
160 #define XRenderFreeGlyphs _void_consume
161 #define XRenderCompositeString8 _void_consume
162 #define XRenderCompositeString16 _void_consume
163 #define XRenderCompositeString32 _void_consume
164 #define XRenderCompositeText8 (cairo_xrender_composite_text_func_t) _void_consume
165 #define XRenderCompositeText16 _void_consume
166 #define XRenderCompositeText32 _void_consume
167 #define XRenderFillRectangle _void_consume
168 #define XRenderFillRectangles _void_consume
169 #define XRenderCompositeTrapezoids _void_consume
170 #define XRenderCompositeTriangles _void_consume
171 #define XRenderCompositeTriStrip _void_consume
172 #define XRenderCompositeTriFan _void_consume
173 #define XRenderCompositeDoublePoly _void_consume
174 #define XRenderParseColor _int_consume
175 #define XRenderCreateCursor _int_consume
176 #define XRenderQueryFilters _voidp_consume
177 #define XRenderSetPictureFilter _void_consume
178 #define XRenderCreateAnimCursor _int_consume
179 #define XRenderAddTraps _void_consume
180 #define XRenderCreateSolidFill _int_consume
181 #define XRenderCreateLinearGradient _int_consume
182 #define XRenderCreateRadialGradient _int_consume
183 #define XRenderCreateConicalGradient _int_consume
185 #define cairo_xlib_surface_create_with_xrender_format _voidp_consume
189 /* The rest of this file is copied from various Xrender header files, with
190 * the following copyright/license information:
192 * Copyright © 2000 SuSE, Inc.
194 * Permission to use, copy, modify, distribute, and sell this software and its
195 * documentation for any purpose is hereby granted without fee, provided that
196 * the above copyright notice appear in all copies and that both that
197 * copyright notice and this permission notice appear in supporting
198 * documentation, and that the name of SuSE not be used in advertising or
199 * publicity pertaining to distribution of the software without specific,
200 * written prior permission. SuSE makes no representations about the
201 * suitability of this software for any purpose. It is provided "as is"
202 * without express or implied warranty.
204 * SuSE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL
205 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL SuSE
206 * BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
207 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
208 * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
209 * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
211 * Author: Keith Packard, SuSE, Inc.
215 /* Copied from X11/extensions/render.h */
217 typedef unsigned long Glyph;
218 typedef unsigned long GlyphSet;
219 typedef unsigned long Picture;
220 typedef unsigned long PictFormat;
222 #define BadPictFormat 0
225 #define BadGlyphSet 3
227 #define RenderNumberErrors (BadGlyph+1)
229 #define PictTypeIndexed 0
230 #define PictTypeDirect 1
232 #define PictOpMinimum 0
233 #define PictOpClear 0
237 #define PictOpOverReverse 4
239 #define PictOpInReverse 6
241 #define PictOpOutReverse 8
243 #define PictOpAtopReverse 10
246 #define PictOpSaturate 13
247 #define PictOpMaximum 13
250 * Operators only available in version 0.2
252 #define PictOpDisjointMinimum 0x10
253 #define PictOpDisjointClear 0x10
254 #define PictOpDisjointSrc 0x11
255 #define PictOpDisjointDst 0x12
256 #define PictOpDisjointOver 0x13
257 #define PictOpDisjointOverReverse 0x14
258 #define PictOpDisjointIn 0x15
259 #define PictOpDisjointInReverse 0x16
260 #define PictOpDisjointOut 0x17
261 #define PictOpDisjointOutReverse 0x18
262 #define PictOpDisjointAtop 0x19
263 #define PictOpDisjointAtopReverse 0x1a
264 #define PictOpDisjointXor 0x1b
265 #define PictOpDisjointMaximum 0x1b
267 #define PictOpConjointMinimum 0x20
268 #define PictOpConjointClear 0x20
269 #define PictOpConjointSrc 0x21
270 #define PictOpConjointDst 0x22
271 #define PictOpConjointOver 0x23
272 #define PictOpConjointOverReverse 0x24
273 #define PictOpConjointIn 0x25
274 #define PictOpConjointInReverse 0x26
275 #define PictOpConjointOut 0x27
276 #define PictOpConjointOutReverse 0x28
277 #define PictOpConjointAtop 0x29
278 #define PictOpConjointAtopReverse 0x2a
279 #define PictOpConjointXor 0x2b
280 #define PictOpConjointMaximum 0x2b
283 * Operators only available in version 0.11
285 #define PictOpBlendMinimum 0x30
286 #define PictOpMultiply 0x30
287 #define PictOpScreen 0x31
288 #define PictOpOverlay 0x32
289 #define PictOpDarken 0x33
290 #define PictOpLighten 0x34
291 #define PictOpColorDodge 0x35
292 #define PictOpColorBurn 0x36
293 #define PictOpHardLight 0x37
294 #define PictOpSoftLight 0x38
295 #define PictOpDifference 0x39
296 #define PictOpExclusion 0x3a
297 #define PictOpHSLHue 0x3b
298 #define PictOpHSLSaturation 0x3c
299 #define PictOpHSLColor 0x3d
300 #define PictOpHSLLuminosity 0x3e
301 #define PictOpBlendMaximum 0x3e
303 #define PolyEdgeSharp 0
304 #define PolyEdgeSmooth 1
306 #define PolyModePrecise 0
307 #define PolyModeImprecise 1
309 #define CPRepeat (1 << 0)
310 #define CPAlphaMap (1 << 1)
311 #define CPAlphaXOrigin (1 << 2)
312 #define CPAlphaYOrigin (1 << 3)
313 #define CPClipXOrigin (1 << 4)
314 #define CPClipYOrigin (1 << 5)
315 #define CPClipMask (1 << 6)
316 #define CPGraphicsExposure (1 << 7)
317 #define CPSubwindowMode (1 << 8)
318 #define CPPolyEdge (1 << 9)
319 #define CPPolyMode (1 << 10)
320 #define CPDither (1 << 11)
321 #define CPComponentAlpha (1 << 12)
324 /* Filters included in 0.6 */
325 #define FilterNearest "nearest"
326 #define FilterBilinear "bilinear"
327 /* Filters included in 0.10 */
328 #define FilterConvolution "convolution"
330 #define FilterFast "fast"
331 #define FilterGood "good"
332 #define FilterBest "best"
334 #define FilterAliasNone -1
336 /* Subpixel orders included in 0.6 */
337 #define SubPixelUnknown 0
338 #define SubPixelHorizontalRGB 1
339 #define SubPixelHorizontalBGR 2
340 #define SubPixelVerticalRGB 3
341 #define SubPixelVerticalBGR 4
342 #define SubPixelNone 5
344 /* Extended repeat attributes included in 0.10 */
346 #define RepeatNormal 1
348 #define RepeatReflect 3
352 /* Copied from X11/extensions/Xrender.h */
363 } XRenderDirectFormat;
369 XRenderDirectFormat direct;
373 #define PictFormatID (1 << 0)
374 #define PictFormatType (1 << 1)
375 #define PictFormatDepth (1 << 2)
376 #define PictFormatRed (1 << 3)
377 #define PictFormatRedMask (1 << 4)
378 #define PictFormatGreen (1 << 5)
379 #define PictFormatGreenMask (1 << 6)
380 #define PictFormatBlue (1 << 7)
381 #define PictFormatBlueMask (1 << 8)
382 #define PictFormatAlpha (1 << 9)
383 #define PictFormatAlphaMask (1 << 10)
384 #define PictFormatColormap (1 << 11)
386 typedef struct _XRenderPictureAttributes {
394 Bool graphics_exposures;
399 Bool component_alpha;
400 } XRenderPictureAttributes;
404 unsigned short green;
406 unsigned short alpha;
409 typedef struct _XGlyphInfo {
410 unsigned short width;
411 unsigned short height;
418 typedef struct _XGlyphElt8 {
426 typedef struct _XGlyphElt16 {
428 _Xconst unsigned short *chars;
434 typedef struct _XGlyphElt32 {
436 _Xconst unsigned int *chars;
442 typedef double XDouble;
444 typedef struct _XPointDouble {
448 #define XDoubleToFixed(f) ((XFixed) ((f) * 65536))
449 #define XFixedToDouble(f) (((XDouble) (f)) / 65536)
453 typedef struct _XPointFixed {
457 typedef struct _XLineFixed {
461 typedef struct _XTriangle {
462 XPointFixed p1, p2, p3;
465 typedef struct _XCircle {
471 typedef struct _XTrapezoid {
473 XLineFixed left, right;
476 typedef struct _XTransform {
480 typedef struct _XFilters {
487 typedef struct _XIndexValue {
489 unsigned short red, green, blue, alpha;
492 typedef struct _XAnimCursor {
497 typedef struct _XSpanFix {
498 XFixed left, right, y;
501 typedef struct _XTrap {
502 XSpanFix top, bottom;
505 typedef struct _XLinearGradient {
510 typedef struct _XRadialGradient {
515 typedef struct _XConicalGradient {
517 XFixed angle; /* in degrees */
520 #define PictStandardARGB32 0
521 #define PictStandardRGB24 1
522 #define PictStandardA8 2
523 #define PictStandardA4 3
524 #define PictStandardA1 4
525 #define PictStandardNUM 5
529 /* Copied from X11/extensions/renderproto.h */
533 #define Window CARD32
534 #define Drawable CARD32
536 #define Pixmap CARD32
537 #define Cursor CARD32
538 #define Colormap CARD32
539 #define GContext CARD32
541 #define VisualID CARD32
543 #define KeyCode CARD8
544 #define KeySym CARD32
546 #define Picture CARD32
547 #define PictFormat CARD32
549 #define Glyphset CARD32
560 CARD16 greenMask B16;
564 CARD16 alphaMask B16;
567 #define sz_xDirectFormat 16
574 xDirectFormat direct;
578 #define sz_xPictFormInfo 28
585 #define sz_xPictVisual 8
590 CARD16 nPictVisuals B16;
594 #define sz_xPictDepth 8
598 PictFormat fallback B32;
601 #define sz_xPictScreen 8
611 #define sz_xIndexValue 12
620 #define sz_xRenderColor 8
627 #define sz_xPointFixed 8
634 #define sz_xLineFixed 16
637 xPointFixed p1, p2, p3;
640 #define sz_xTriangle 24
649 #define sz_xTrapezoid 40
660 #define sz_xGlyphInfo 12
670 #define sz_xGlyphElt 8
676 #define sz_xSpanFix 12
685 * requests and replies
691 CARD32 majorVersion B32;
692 CARD32 minorVersion B32;
693 } xRenderQueryVersionReq;
695 #define sz_xRenderQueryVersionReq 12
698 BYTE type; /* X_Reply */
700 CARD16 sequenceNumber B16;
702 CARD32 majorVersion B32;
703 CARD32 minorVersion B32;
708 } xRenderQueryVersionReply;
710 #define sz_xRenderQueryVersionReply 32
716 } xRenderQueryPictFormatsReq;
718 #define sz_xRenderQueryPictFormatsReq 4
721 BYTE type; /* X_Reply */
723 CARD16 sequenceNumber B16;
725 CARD32 numFormats B32;
726 CARD32 numScreens B32;
727 CARD32 numDepths B32;
728 CARD32 numVisuals B32;
729 CARD32 numSubpixel B32; /* Version 0.6 */
731 } xRenderQueryPictFormatsReply;
733 #define sz_xRenderQueryPictFormatsReply 32
739 PictFormat format B32;
740 } xRenderQueryPictIndexValuesReq;
742 #define sz_xRenderQueryPictIndexValuesReq 8
745 BYTE type; /* X_Reply */
747 CARD16 sequenceNumber B16;
749 CARD32 numIndexValues;
755 } xRenderQueryPictIndexValuesReply;
757 #define sz_xRenderQueryPictIndexValuesReply 32
764 Drawable drawable B32;
765 PictFormat format B32;
767 } xRenderCreatePictureReq;
769 #define sz_xRenderCreatePictureReq 20
777 } xRenderChangePictureReq;
779 #define sz_xRenderChangePictureReq 12
788 } xRenderSetPictureClipRectanglesReq;
790 #define sz_xRenderSetPictureClipRectanglesReq 12
797 } xRenderFreePictureReq;
799 #define sz_xRenderFreePictureReq 8
819 } xRenderCompositeReq;
821 #define sz_xRenderCompositeReq 36
829 CARD32 colorScale B32;
830 CARD32 alphaScale B32;
839 #define sz_xRenderScaleReq 32
850 PictFormat maskFormat B32;
853 } xRenderTrapezoidsReq;
855 #define sz_xRenderTrapezoidsReq 24
866 PictFormat maskFormat B32;
869 } xRenderTrianglesReq;
871 #define sz_xRenderTrianglesReq 24
882 PictFormat maskFormat B32;
885 } xRenderTriStripReq;
887 #define sz_xRenderTriStripReq 24
898 PictFormat maskFormat B32;
903 #define sz_xRenderTriFanReq 24
910 PictFormat format B32;
911 } xRenderCreateGlyphSetReq;
913 #define sz_xRenderCreateGlyphSetReq 12
920 Glyphset existing B32;
921 } xRenderReferenceGlyphSetReq;
923 #define sz_xRenderReferenceGlyphSetReq 24
929 Glyphset glyphset B32;
930 } xRenderFreeGlyphSetReq;
932 #define sz_xRenderFreeGlyphSetReq 8
938 Glyphset glyphset B32;
940 } xRenderAddGlyphsReq;
942 #define sz_xRenderAddGlyphsReq 12
948 Glyphset glyphset B32;
949 } xRenderFreeGlyphsReq;
951 #define sz_xRenderFreeGlyphsReq 8
962 PictFormat maskFormat B32;
963 Glyphset glyphset B32;
966 } xRenderCompositeGlyphsReq, xRenderCompositeGlyphs8Req,
967 xRenderCompositeGlyphs16Req, xRenderCompositeGlyphs32Req;
969 #define sz_xRenderCompositeGlyphs8Req 28
970 #define sz_xRenderCompositeGlyphs16Req 28
971 #define sz_xRenderCompositeGlyphs32Req 28
984 } xRenderFillRectanglesReq;
986 #define sz_xRenderFillRectanglesReq 20
998 } xRenderCreateCursorReq;
1000 #define sz_xRenderCreateCursorReq 16
1002 /* 0.6 and higher */
1005 * This can't use an array because 32-bit values may be in bitfields
1019 #define sz_xRenderTransform 36
1023 CARD8 renderReqType;
1025 Picture picture B32;
1026 xRenderTransform transform;
1027 } xRenderSetPictureTransformReq;
1029 #define sz_xRenderSetPictureTransformReq 44
1033 CARD8 renderReqType;
1035 Drawable drawable B32;
1036 } xRenderQueryFiltersReq;
1038 #define sz_xRenderQueryFiltersReq 8
1041 BYTE type; /* X_Reply */
1043 CARD16 sequenceNumber B16;
1045 CARD32 numAliases B32; /* LISTofCARD16 */
1046 CARD32 numFilters B32; /* LISTofSTRING8 */
1051 } xRenderQueryFiltersReply;
1053 #define sz_xRenderQueryFiltersReply 32
1057 CARD8 renderReqType;
1059 Picture picture B32;
1060 CARD16 nbytes B16; /* number of bytes in name */
1062 } xRenderSetPictureFilterReq;
1064 #define sz_xRenderSetPictureFilterReq 12
1066 /* 0.8 and higher */
1073 #define sz_xAnimCursorElt 8
1077 CARD8 renderReqType;
1080 } xRenderCreateAnimCursorReq;
1082 #define sz_xRenderCreateAnimCursorReq 8
1084 /* 0.9 and higher */
1088 CARD8 renderReqType;
1093 } xRenderAddTrapsReq;
1095 #define sz_xRenderAddTrapsReq 12
1097 /* 0.10 and higher */
1101 CARD8 renderReqType;
1105 } xRenderCreateSolidFillReq;
1107 #define sz_xRenderCreateSolidFillReq 16
1111 CARD8 renderReqType;
1117 } xRenderCreateLinearGradientReq;
1119 #define sz_xRenderCreateLinearGradientReq 28
1123 CARD8 renderReqType;
1131 } xRenderCreateRadialGradientReq;
1133 #define sz_xRenderCreateRadialGradientReq 36
1137 CARD8 renderReqType;
1141 Fixed angle; /* in degrees */
1143 } xRenderCreateConicalGradientReq;
1145 #define sz_xRenderCreateConicalGradientReq 24
1167 #endif /* CAIRO_HAS_XLIB_XRENDER_SURFACE */
1169 #endif /* CAIRO_XLIB_XRENDER_PRIVATE_H */