master
ブランチ master
ShaderPlayground / deps / xlibre / include / X11 / extensions / Xrender.h
33 KB、1058行 生 Blame 履歴
1/*
2 *
3 * Copyright © 2000 SuSE, Inc.
4 *
5 * Permission to use, copy, modify, distribute, and sell this software and its
6 * documentation for any purpose is hereby granted without fee, provided that
7 * the above copyright notice appear in all copies and that both that
8 * copyright notice and this permission notice appear in supporting
9 * documentation, and that the name of SuSE not be used in advertising or
10 * publicity pertaining to distribution of the software without specific,
11 * written prior permission. SuSE makes no representations about the
12 * suitability of this software for any purpose. It is provided "as is"
13 * without express or implied warranty.
14 *
15 * SuSE DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL
16 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL SuSE
17 * BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
18 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
19 * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
20 * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
21 *
22 * Author: Keith Packard, SuSE, Inc.
23 */
24
25/**
26 * @file Xrender.h
27 * @brief XRender library API.
28 */
29
30#ifndef _XRENDER_H_
31#define _XRENDER_H_
32
33#include <X11/Xfuncproto.h>
34#include <X11/Xlib.h>
35#include <X11/Xosdefs.h>
36#include <X11/Xutil.h>
37
38#include <X11/extensions/render.h>
39
40/**
41 * @mainpage libXrender API Documentation.
42 *
43 * Dummy text down here.
44 */
45
46/**
47 * The direct component of a PictFormat.
48 *
49 * It contains a binary description of the color format used by the Picture.
50 *
51 * * A Zero bit alphaMask is declared to have an opaque alpha everywhere.
52 * * A Zero bit redMask, greenMask and blueMask is declared to have red, green,
53 * blue == 0 everywhere.
54 * * If any of redMask, greenMask or blueMask are zero, all other masks are
55 * zero.
56 */
57typedef struct {
58 /** Red component binary displacement. */
59 short red;
60 /** Red component bit mask. */
61 short redMask;
62 /** Green component binary displacement. */
63 short green;
64 /** Green component bit mask. */
65 short greenMask;
66 /** Blue component binary displacement. */
67 short blue;
68 /** Blue component bit mask. */
69 short blueMask;
70 /** Alpha component binary displacement. */
71 short alpha;
72 /** Alpha component bit mask. */
73 short alphaMask;
74} XRenderDirectFormat;
75
76/**
77 * A Picture pixel format description.
78 *
79 * It describes the format used by the server to display colors.
80 *
81 * There are two types:
82 * * Direct: Doesn't have a Colormap and the DirectFormat structure describes
83 * the pixel format.
84 * * Indexed: Has a Colormap and it's DirectFormat structure is filled with
85 * zeros.
86 */
87typedef struct {
88 /** XID of this structure server instance. */
89 PictFormat id;
90 /** Color management type. */
91 int type;
92 /** Pixel bit depth. */
93 int depth;
94 /** Color component description. */
95 XRenderDirectFormat direct;
96 /** XID of the map of indexed colors on the server. */
97 Colormap colormap;
98} XRenderPictFormat;
99
100/*< XRenderPictFormat template field masks.
101 * @{
102 */
103/** Include ID field. @hideinitializer */
104#define PictFormatID (1 << 0)
105/** Include Type field. @hideinitializer */
106#define PictFormatType (1 << 1)
107/** Include Depth field. @hideinitializer */
108#define PictFormatDepth (1 << 2)
109
110/*<--- XRenderPictFormat->direct fields. */
111/** Include Direct->Red field. @hideinitializer */
112#define PictFormatRed (1 << 3)
113/** Include Direct->RedMask field. @hideinitializer */
114#define PictFormatRedMask (1 << 4)
115/** Include Direct->Green field. @hideinitializer */
116#define PictFormatGreen (1 << 5)
117/** Include Direct->GreenMask field. @hideinitializer */
118#define PictFormatGreenMask (1 << 6)
119/** Include Direct->Blue field. @hideinitializer */
120#define PictFormatBlue (1 << 7)
121/** Include Direct->BlueMask field. @hideinitializer */
122#define PictFormatBlueMask (1 << 8)
123/** Include Direct->Alpha field. @hideinitializer */
124#define PictFormatAlpha (1 << 9)
125/** Include Direct->AlphaMask field. @hideinitializer */
126#define PictFormatAlphaMask (1 << 10)
127
128/** Include Colormap field. @hideinitializer */
129#define PictFormatColormap (1 << 11)
130/** @} */
131
132/**
133 * Picture rendering attributes.
134 */
135typedef struct _XRenderPictureAttributes {
136 /** How to repeat the picture. */
137 int repeat;
138
139 /** A replacement alpha-map. Must be a pixmap-containing Picture. */
140 Picture alpha_map;
141 /** Horizontal displacement of the replacement alpha-map. */
142 int alpha_x_origin;
143 /** Vertical displacement of the replacement alpha-map. */
144 int alpha_y_origin;
145
146 /** Horizontal displacement of the clip mask. */
147 int clip_x_origin;
148 /** Vertical displacement of the clip mask. */
149 int clip_y_origin;
150 /** A r/w restriction to the drawable. */
151 Pixmap clip_mask;
152
153 /** Whether to receive GraphicsExpose events. @note Ignored field. */
154 Bool graphics_exposures;
155 /** How to clip pixels on subwindow overlap. */
156 int subwindow_mode;
157 /** Alpha mask generation mode. */
158 int poly_edge;
159 /** Alpha value rasterization mode. */
160 int poly_mode;
161 /** Dithering mode. @note Ignored field. */
162 Atom dither;
163 /** Treat alpha channels independently. */
164 Bool component_alpha;
165} XRenderPictureAttributes;
166
167/** An alpha-blended color with premultiplied components.
168 *
169 * Values are in the range from 0 to 65535 inclusive, scaled down to the right
170 * hardware values by the server. Colors must be premultiplied by alpha by the
171 * client in all cases but gradient operations.
172 */
173typedef struct {
174 /** Red color channel. */
175 unsigned short red;
176 /** Green color channel. */
177 unsigned short green;
178 /** Blue color channel. */
179 unsigned short blue;
180 /** Alpha color channel. */
181 unsigned short alpha;
182} XRenderColor;
183
184/**
185 * Glyph positioning and sizing information.
186 *
187 * A glyph is positioned by taking the requested position and substracting the
188 * center offset.
189 */
190typedef struct _XGlyphInfo {
191 /** Glyph width. */
192 unsigned short width;
193 /** Glyph height. */
194 unsigned short height;
195
196 /** Horizontal Glyph center offset relative to the upper-left corner. */
197 short x;
198 /** Vertical Glyph center offset relative to the upper-left corner. */
199 short y;
200
201 /** Horizontal margin to the next Glyph. */
202 short xOff;
203 /** Vertical margin to the next Glyph. */
204 short yOff;
205} XGlyphInfo;
206
207/*< Glyph Elements.
208 * Group of glyphs to be rendered.
209 * While selecting the right element type, you should use as a reference the
210 * largest identifier in Elt->glyphset.
211 */
212/** @{ */
213
214/**
215 * 8-bit Glyph Element.
216 */
217typedef struct _XGlyphElt8 {
218 /** Set of available glyphs. */
219 GlyphSet glyphset;
220
221 /** 8-bit glyph id array. */
222 _Xconst char *chars;
223 /** Glyph array size. */
224 int nchars;
225
226 /** Horizontal offset. */
227 int xOff;
228 /** Vertical offset. */
229 int yOff;
230} XGlyphElt8;
231
232/**
233 * 16-bit Glyph Element.
234 */
235typedef struct _XGlyphElt16 {
236 /** Set of available glyphs. */
237 GlyphSet glyphset;
238
239 /** 16-bit glyph id array. */
240 _Xconst unsigned short *chars;
241 /** Glyph array size. */
242 int nchars;
243
244 /** Horizontal offset. */
245 int xOff;
246 /** Vertical offset. */
247 int yOff;
248} XGlyphElt16;
249
250/**
251 * 32-bit Glyph Element.
252 */
253typedef struct _XGlyphElt32 {
254 /** Set of available glyphs. */
255 GlyphSet glyphset;
256
257 /** 32-bit glyph id array. */
258 _Xconst unsigned int *chars;
259 /** Glyph array size. */
260 int nchars;
261
262 /** Horizontal offset. */
263 int xOff;
264 /** Vertical offset. */
265 int yOff;
266} XGlyphElt32;
267/**@} */
268
269/*< Utility number types.
270 *
271 */
272/**@{ */
273
274/**
275 * Floating-point number.
276 */
277typedef double XDouble;
278
279/**
280 * Fixed-point number.
281 */
282typedef int XFixed;
283
284/** Turn XDouble into XFixed. @hideinitializer */
285#define XDoubleToFixed(f) ((XFixed)((f)*65536))
286/** Turn XFixed into XDouble. @hideinitializer */
287#define XFixedToDouble(f) (((XDouble)(f)) / 65536)
288/** @} */
289
290/**
291 * Point coordinates stored as floats.
292 */
293typedef struct _XPointDouble {
294 XDouble x, y;
295} XPointDouble;
296
297/**
298 * Point coordinates as integers.
299 */
300typedef struct _XPointFixed {
301 XFixed x, y;
302} XPointFixed;
303
304/**
305 * Line described by two points.
306 */
307typedef struct _XLineFixed {
308 XPointFixed p1, p2;
309} XLineFixed;
310
311/**
312 * Triangle described by it's vertices.
313 * @see XTrap
314 */
315typedef struct _XTriangle {
316 XPointFixed p1, p2, p3;
317} XTriangle;
318
319/**
320 * Circle described by it's center point and a radius.
321 */
322typedef struct _XCircle {
323 XFixed x;
324 XFixed y;
325 XFixed radius;
326} XCircle;
327
328/** A trapezoid.
329 *
330 * @deprecated Use XTrap instead
331 * @see
332 * * XTriangle
333 * * XTrap
334 */
335typedef struct _XTrapezoid {
336 XFixed top, bottom;
337 XLineFixed left, right;
338} XTrapezoid;
339
340/**
341 * A transform matrix.
342 */
343typedef struct _XTransform {
344 XFixed matrix[3][3];
345} XTransform;
346
347/**
348 * Group filters and filter aliases.
349 */
350typedef struct _XFilters {
351 /** Filter names count. */
352 int nfilter;
353 /** Filter names array. */
354 char **filter;
355 /** Aliases array count. */
356 int nalias;
357 /** Array of «Index in .filter of the aliased filter or 0xffff». */
358 short *alias;
359} XFilters;
360
361/**
362 * The value of an indexed color.
363 */
364typedef struct _XIndexValue {
365 /** Index ID. */
366 unsigned long pixel;
367 /** Color components. */
368 unsigned short red, green, blue, alpha;
369} XIndexValue;
370
371/**
372 * A single cursor frame.
373 */
374typedef struct _XAnimCursor {
375 /** Existing cursor. */
376 Cursor cursor;
377 /** Animation delay. */
378 unsigned long delay;
379} XAnimCursor;
380
381/**
382 * An horizontal line.
383 */
384typedef struct _XSpanFix {
385 XFixed left, right, y;
386} XSpanFix;
387
388/**
389 * A trapezoid defined by two lines.
390 * @see XTriangle
391 */
392typedef struct _XTrap {
393 XSpanFix top, bottom;
394} XTrap;
395
396/**
397 * Linear gradient shape.
398 */
399typedef struct _XLinearGradient {
400 XPointFixed p1;
401 XPointFixed p2;
402} XLinearGradient;
403
404/**
405 * Radial gradient shape.
406 */
407typedef struct _XRadialGradient {
408 XCircle inner;
409 XCircle outer;
410} XRadialGradient;
411
412/**
413 * Conical gradient shape.
414 */
415typedef struct _XConicalGradient {
416 XPointFixed center;
417 XFixed angle; /* in degrees */
418} XConicalGradient;
419
420_XFUNCPROTOBEGIN
421
422/** @defgroup queries Early check queries.
423 * @{
424 */
425
426/**
427 * Ask for the Render extension presence and its base numbers.
428 *
429 * @param dpy Connection to the X server.
430 * @param[out] event_basep first event number for the extension.
431 * @param[out] error_basep first error number for the extension.
432 * @return True if Render is present.
433 */
434Bool XRenderQueryExtension(Display *dpy, int *event_basep, int *error_basep);
435
436/**
437 * Ask for the extension version.
438 *
439 * @param dpy Connection to the X server.
440 * @param[out] major_versionp Extension's major version.
441 * @param[out] minor_versionp Extension's major version.
442 * @return Status «1» on success.
443 */
444Status XRenderQueryVersion(Display *dpy, int *major_versionp,
445 int *minor_versionp);
446
447/**
448 * Check for and cache compatible picture formats.
449 *
450 * @param dpy Connection to the X server.
451 * @return Status «1» on success.
452 */
453Status XRenderQueryFormats(Display *dpy);
454
455/**
456 * Ask for the current subpixel order of a screen.
457 *
458 * @param dpy Connection to the X server.
459 * @param[in] screen Target screen number.
460 * @return SubPixelUnknown on error, else a subpixel order.
461 */
462int XRenderQuerySubpixelOrder(Display *dpy, int screen);
463
464/**
465 * Change the subpixel order of a screen.
466 *
467 * @param dpy Connection to the X server
468 * @param[in] screen Target screen number.
469 * @param[in] subpixel Requested subpixel order.
470 * @return True if the operation was successful.
471 */
472Bool XRenderSetSubpixelOrder(Display *dpy, int screen, int subpixel);
473/** @} */
474
475/**
476 * Ask for the Picture format for a Visual.
477 *
478 * @param dpy Connection to the X server.
479 * @param[in] visual Reference Visual object.
480 * @return The requested Picture format.
481 */
482XRenderPictFormat *XRenderFindVisualFormat(Display *dpy,
483 _Xconst Visual *visual);
484
485/**
486 * Ask for matching Picture formats from a template.
487 *
488 * @param dpy Connection to the X server.
489 * @param[in] mask `templ` fields mask to use.
490 * @param[in] templ Requested Picture format template.
491 * @param[in] count Skip `count` formats.
492 * @return NULL if no matching format found, else a Picture format.
493 */
494XRenderPictFormat *XRenderFindFormat(Display *dpy, unsigned long mask,
495 _Xconst XRenderPictFormat *templ,
496 int count);
497
498/** Standard format specifiers.
499 * @{
500 */
501/** 8-bit RGB with Alpha. @hideinitializer */
502#define PictStandardARGB32 0
503/** 8-bit RGB. @hideinitializer */
504#define PictStandardRGB24 1
505/** 8-bit Alpha map. @hideinitializer */
506#define PictStandardA8 2
507/** 4-bit Alpha map. @hideinitializer */
508#define PictStandardA4 3
509/** 1-bit Alpha map. @hideinitializer */
510#define PictStandardA1 4
511/** Supported standard formats count. @hideinitializer */
512#define PictStandardNUM 5
513/** @} */
514
515/**
516 * Ask for a predefined standard picture format.
517 *
518 * This is a shorthand to XRenderFindFormat for finding common formats.
519 *
520 * @param dpy Connection to the X server.
521 * @param[in] format Desired format specifier.
522 * @return NULL if no matching format found, else a Picture format.
523 */
524XRenderPictFormat *XRenderFindStandardFormat(Display *dpy, int format);
525
526/**
527 * Ask for the indexed colors of a Picture format.
528 *
529 * @param dpy Connection to the X server.
530 * @param[in] format Queried picture format.
531 * @param[out] num Size of the output array.
532 * @return An array of XIndexValue.
533 */
534XIndexValue *XRenderQueryPictIndexValues(Display *dpy,
535 _Xconst XRenderPictFormat *format,
536 int *num);
537
538/**
539 * Creates a Picture for a drawable.
540 *
541 * @param dpy Connection to the X server.
542 * @param[in] drawable Target Drawable.
543 * @param[in] format Format for the Picture.
544 * @param[in] valuemask `attributes` fields mask to use.
545 * @param[in] attributes Desired attributes for the Picture.
546 * @return A Picture tied to the drawable.
547 */
548Picture XRenderCreatePicture(Display *dpy, Drawable drawable,
549 _Xconst XRenderPictFormat *format,
550 unsigned long valuemask,
551 _Xconst XRenderPictureAttributes *attributes);
552
553/**
554 * Free allocated structures for a Picture.
555 *
556 * @warning A freed Picture shouldn't be used again.
557 *
558 * @param dpy Connection to the X server.
559 * @param[in] picture Target Picture.
560 */
561void XRenderFreePicture(Display *dpy, Picture picture);
562
563/**
564 * Change a Picture's attributes structure.
565 *
566 * @param dpy Connection to the X server.
567 * @param[in] picture Target Picture.
568 * @param[in] valuemask `attributes` fields mask to use.
569 * @param[in] attributes Desired attributes for the Picture.
570 */
571void XRenderChangePicture(Display *dpy, Picture picture,
572 unsigned long valuemask,
573 _Xconst XRenderPictureAttributes *attributes);
574
575/**
576 * Change a Picture's clip mask to the specified rectangles.
577 *
578 * @param dpy Connection to the X server.
579 * @param[in] picture Target Picture.
580 * @param[in] xOrigin Horizontal mask origin.
581 * @param[in] yOrigin Vertical mask origin.
582 * @param[in] rects Array of rectangles to clip with.
583 * @param[in] n `rects` array size.
584 */
585void XRenderSetPictureClipRectangles(Display *dpy, Picture picture, int xOrigin,
586 int yOrigin, _Xconst XRectangle *rects,
587 int n);
588
589/**
590 * Change a Picture's clip mask to the specified Region.
591 *
592 * @param dpy Connection to the X server.
593 * @param[in] picture Target Picture.
594 * @param[in] r Region to clip with.
595 */
596void XRenderSetPictureClipRegion(Display *dpy, Picture picture, Region r);
597
598/**
599 * Change a Picture's Transform matrix.
600 *
601 * @param dpy Connection to the X server
602 * @param[in] picture Target Picture.
603 * @param[in] transform Transform matrix to use.
604 */
605void XRenderSetPictureTransform(Display *dpy, Picture picture,
606 XTransform *transform);
607
608/**
609 * Combines two Pictures with the specified compositing operation.
610 *
611 * @param dpy Connection to the X server.
612 * @param[in] op Compositing operation to perform.
613 * @param[in] src Picture to combine with.
614 * @param[in] mask Composition mask.
615 * @param[in] dst Picture to combine into.
616 * @param[in] src_x Horizontal `src` origin offset.
617 * @param[in] src_y Vertical `src` origin offset
618 * @param[in] mask_x Horizontal `mask` origin offset.
619 * @param[in] mask_y Vertical `mask` origin offset.
620 * @param[in] dst_x Horizontal `dst` origin offset.
621 * @param[in] dst_y Vertical `dst` origin offset.
622 * @param[in] width Maximum composition width.
623 * @param[in] height Maximum composition height.
624 */
625void XRenderComposite(Display *dpy, int op, Picture src, Picture mask,
626 Picture dst, int src_x, int src_y, int mask_x, int mask_y,
627 int dst_x, int dst_y, unsigned int width,
628 unsigned int height);
629
630/**
631 * Create a Glyph Set.
632 *
633 * @param dpy Connection to the X server.
634 * @param[in] format Desired format for the Glyphs Picture.
635 * @return A GlyphSet.
636 */
637GlyphSet XRenderCreateGlyphSet(Display *dpy, _Xconst XRenderPictFormat *format);
638
639/**
640 * Generate a new reference for an existing Glyph Set.
641 *
642 * @param dpy Connection to the X server.
643 * @param[in] existing Target Glyph Set.
644 * @return A GlyphSet identical to `existing`.
645 */
646GlyphSet XRenderReferenceGlyphSet(Display *dpy, GlyphSet existing);
647
648/**
649 * Free allocated structures for a GlyphSet.
650 *
651 * If there's more references to the underlying GlyphSet structures, this will
652 * remove only the specified GlyphSet reference.
653 *
654 * @warning A freed GlyphSet shouldn't be used again.
655 *
656 * @param dpy Connection to the X server.
657 * @param[in] glyphset Target GlyphSet.
658 */
659void XRenderFreeGlyphSet(Display *dpy, GlyphSet glyphset);
660
661/**
662 * Add new Glyphs to a GlyphSet.
663 *
664 * @param dpy Connection to the X server.
665 * @param[in] glyphset Glyph storage destination.
666 * @param[in] gids Array of ids for the new Glyphs.
667 * @param[in] glyphs Array of new Glyphs info.
668 * @param[in] nglyphs Number of Glyphs to add.
669 * @param[in] images Byte array containing the Glyphs graphics.
670 * @param[in] nbyte_images Size of the `images` byte array.
671 */
672void XRenderAddGlyphs(Display *dpy, GlyphSet glyphset, _Xconst Glyph *gids,
673 _Xconst XGlyphInfo *glyphs, int nglyphs,
674 _Xconst char *images, int nbyte_images);
675
676/**
677 * Free allocated Glyphs.
678 *
679 * @param dpy Connection to the X server.
680 * @param[in] glyphset GlyphSet storing the Glyphs.
681 * @param[in] gids Identifier array of the Glyphs to dellocate.
682 * @param[in] nglyphs Glyph count.
683 */
684void XRenderFreeGlyphs(Display *dpy, GlyphSet glyphset, _Xconst Glyph *gids,
685 int nglyphs);
686
687/**
688 * Draw a 8-bit character string into a Picture.
689 *
690 * @param dpy Connection to the X server.
691 * @param[in] op Compositing operation to perform.
692 * @param[in] src Picture to combine with.
693 * @param[in] dst Picture to combine into.
694 * @param[in] maskFormat Picture format of the generated Picture mask.
695 * @param[in] glyphset Glyph Source.
696 * @param[in] xSrc Horizontal `src` origin offset.
697 * @param[in] ySrc Vertical `src` origin offset.
698 * @param[in] xDst Horizontal `dst` origin offset.
699 * @param[in] yDst Vertical `dst` origin offset.
700 * @param[in] string String to clip to.
701 * @param[in] nchar String length.
702 */
703void XRenderCompositeString8(Display *dpy, int op, Picture src, Picture dst,
704 _Xconst XRenderPictFormat *maskFormat,
705 GlyphSet glyphset, int xSrc, int ySrc, int xDst,
706 int yDst, _Xconst char *string, int nchar);
707
708/**
709 * Draw a 16-bit character string into a Picture.
710 *
711 * @param dpy Connection to the X server.
712 * @param[in] op Compositing operation to perform.
713 * @param[in] src Picture to combine with.
714 * @param[in] dst Picture to combine into.
715 * @param[in] maskFormat Picture format of the generated Picture mask.
716 * @param[in] glyphset Glyph Source.
717 * @param[in] xSrc Horizontal `src` origin offset.
718 * @param[in] ySrc Vertical `src` origin offset.
719 * @param[in] xDst Horizontal `dst` origin offset.
720 * @param[in] yDst Vertical `dst` origin offset.
721 * @param[in] string String to clip to.
722 * @param[in] nchar String length.
723 */
724void XRenderCompositeString16(Display *dpy, int op, Picture src, Picture dst,
725 _Xconst XRenderPictFormat *maskFormat,
726 GlyphSet glyphset, int xSrc, int ySrc, int xDst,
727 int yDst, _Xconst unsigned short *string,
728 int nchar);
729
730/**
731 * Draw a 32-bit character string into a Picture.
732 *
733 * @param dpy Connection to the X server.
734 * @param[in] op Compositing operation to perform.
735 * @param[in] src Picture to combine with.
736 * @param[in] dst Picture to combine into.
737 * @param[in] maskFormat Picture format of the generated Picture mask.
738 * @param[in] glyphset Glyph Source.
739 * @param[in] xSrc Horizontal `src` origin offset.
740 * @param[in] ySrc Vertical `src` origin offset.
741 * @param[in] xDst Horizontal `dst` origin offset.
742 * @param[in] yDst Vertical `dst` origin offset.
743 * @param[in] string String to clip to.
744 * @param[in] nchar String length.
745 */
746void XRenderCompositeString32(Display *dpy, int op, Picture src, Picture dst,
747 _Xconst XRenderPictFormat *maskFormat,
748 GlyphSet glyphset, int xSrc, int ySrc, int xDst,
749 int yDst, _Xconst unsigned int *string,
750 int nchar);
751
752/**
753 * Draw several 8-bit Glyph Elements into a Picture.
754 *
755 * @param dpy Connection to the X server.
756 * @param[in] op Compositing operation to perform.
757 * @param[in] src Picture to combine with.
758 * @param[in] dst Picture to combine into.
759 * @param[in] maskFormat Picture format of the generated Picture mask.
760 * @param[in] xSrc Horizontal `src` origin offset.
761 * @param[in] ySrc Vertical `src` origin offset.
762 * @param[in] xDst Horizontal `dst` origin offset.
763 * @param[in] yDst Vertical `dst` origin offset.
764 * @param[in] elts Glyph Elements array to clip with.
765 * @param[in] nelt Glyph Elements array size.
766 */
767void XRenderCompositeText8(Display *dpy, int op, Picture src, Picture dst,
768 _Xconst XRenderPictFormat *maskFormat, int xSrc,
769 int ySrc, int xDst, int yDst,
770 _Xconst XGlyphElt8 *elts, int nelt);
771
772/**
773 * Draw several 16-bit Glyph Elements into a Picture.
774 *
775 * @param dpy Connection to the X server.
776 * @param[in] op Compositing operation to perform.
777 * @param[in] src Picture to combine with.
778 * @param[in] dst Picture to combine into.
779 * @param[in] maskFormat Picture format of the generated Picture mask.
780 * @param[in] xSrc Horizontal `src` origin offset.
781 * @param[in] ySrc Vertical `src` origin offset.
782 * @param[in] xDst Horizontal `dst` origin offset.
783 * @param[in] yDst Vertical `dst` origin offset.
784 * @param[in] elts Glyph Elements array to clip with.
785 * @param[in] nelt Glyph Elements array size.
786 */
787void XRenderCompositeText16(Display *dpy, int op, Picture src, Picture dst,
788 _Xconst XRenderPictFormat *maskFormat, int xSrc,
789 int ySrc, int xDst, int yDst,
790 _Xconst XGlyphElt16 *elts, int nelt);
791
792/**
793 * Draw several 32-bit Glyph Elements into a Picture.
794 *
795 * @param dpy Connection to the X server.
796 * @param[in] op Compositing operation to perform.
797 * @param[in] src Picture to combine with.
798 * @param[in] dst Picture to combine into.
799 * @param[in] maskFormat Picture format of the generated Picture mask.
800 * @param[in] xSrc Horizontal `src` origin offset.
801 * @param[in] ySrc Vertical `src` origin offset.
802 * @param[in] xDst Horizontal `dst` origin offset.
803 * @param[in] yDst Vertical `dst` origin offset.
804 * @param[in] elts Glyph Elements to clip with.
805 * @param[in] nelt Glyph Elements array size.
806 */
807void XRenderCompositeText32(Display *dpy, int op, Picture src, Picture dst,
808 _Xconst XRenderPictFormat *maskFormat, int xSrc,
809 int ySrc, int xDst, int yDst,
810 _Xconst XGlyphElt32 *elts, int nelt);
811
812/**
813 * Fill a Rectangle with the given color.
814 *
815 * @param dpy Connection to the X server.
816 * @param[in] op Compositing operation to perform.
817 * @param[in] dst Picture to draw into.
818 * @param[in] color Color to fill with.
819 * @param[in] x Horizontal offset.
820 * @param[in] y Vertical offset.
821 * @param[in] width Rectangle width.
822 * @param[in] height Rectangle height.
823 */
824void XRenderFillRectangle(Display *dpy, int op, Picture dst,
825 _Xconst XRenderColor *color, int x, int y,
826 unsigned int width, unsigned int height);
827
828/**
829 * Fill a bunch of Rectangle with the given color.
830 *
831 * @param dpy Connection to the X server.
832 * @param[in] op Compositing operation to perform.
833 * @param[in] dst Picture to draw into.
834 * @param[in] color Color to fill with.
835 * @param[in] rectangles Array of Rectangles to fill.
836 * @param[in] n_rects `rectangles` array size.
837 */
838void XRenderFillRectangles(Display *dpy, int op, Picture dst,
839 _Xconst XRenderColor *color,
840 _Xconst XRectangle *rectangles, int n_rects);
841
842/**
843 * Combine two Pictures using a bunch of Trapezoids as the mask.
844 *
845 * @param dpy Connection to the X server.
846 * @param[in] op Compositing operation to perform.
847 * @param[in] src Picture to combine with.
848 * @param[in] dst Picture to combine into.
849 * @param[in] maskFormat Picture format of the generated Picture mask.
850 * @param[in] xSrc Horizontal `src` origin offset.
851 * @param[in] ySrc Vertical `src` origin offset.
852 * @param[in] traps Array of Trapezoids to clip with.
853 * @param[in] ntrap `traps` Array size.
854 */
855void XRenderCompositeTrapezoids(Display *dpy, int op, Picture src, Picture dst,
856 _Xconst XRenderPictFormat *maskFormat, int xSrc,
857 int ySrc, _Xconst XTrapezoid *traps, int ntrap);
858
859/**
860 * Combine two Pictures using a bunch of Triangles as the mask.
861 *
862 * @param dpy Connection to the X server.
863 * @param[in] op Compositing operation to perform.
864 * @param[in] src Picture to combine with.
865 * @param[in] dst Picture to combine into.
866 * @param[in] maskFormat Picture format of the generated Picture mask.
867 * @param[in] xSrc Horizontal `src` origin offset.
868 * @param[in] ySrc Vertical `src` origin offset.
869 * @param[in] triangles Array of Triangles to clip with.
870 * @param[in] ntriangle `triangles` array size.
871 */
872void XRenderCompositeTriangles(Display *dpy, int op, Picture src, Picture dst,
873 _Xconst XRenderPictFormat *maskFormat, int xSrc,
874 int ySrc, _Xconst XTriangle *triangles,
875 int ntriangle);
876
877/**
878 * Combine two Pictures using a Triangle Strip as the mask.
879 *
880 * @param dpy Connection to the X server.
881 * @param[in] op Compositing operation to perform.
882 * @param[in] src Picture to combine with.
883 * @param[in] dst Picture to combine into.
884 * @param[in] maskFormat Picture format of the generated Picture mask.
885 * @param[in] xSrc Horizontal `src` origin offset.
886 * @param[in] ySrc Vertical `src` origin offset.
887 * @param[in] points Array of Points to create Triangles with.
888 * @param[in] npoint `points` array size.
889 */
890void XRenderCompositeTriStrip(Display *dpy, int op, Picture src, Picture dst,
891 _Xconst XRenderPictFormat *maskFormat, int xSrc,
892 int ySrc, _Xconst XPointFixed *points,
893 int npoint);
894
895/**
896 * Combine two Pictures using a Triangle Fan as the mask.
897 *
898 * @param dpy Connection to the X server.
899 * @param[in] op Compositing operation to perform.
900 * @param[in] src Picture to combine with.
901 * @param[in] dst Picture to combine into.
902 * @param[in] maskFormat Picture format of the generated Picture mask.
903 * @param[in] xSrc Horizontal `src` origin offset.
904 * @param[in] ySrc Vertical `src` origin offset.
905 * @param[in] points Array of Points to create Triangles with.
906 * @param[in] npoint `points` array size.
907 */
908void XRenderCompositeTriFan(Display *dpy, int op, Picture src, Picture dst,
909 _Xconst XRenderPictFormat *maskFormat, int xSrc,
910 int ySrc, _Xconst XPointFixed *points, int npoint);
911
912/**
913 * Combine two Pictures using a Polygon as the mask.
914 *
915 * @param dpy Connection to the X server.
916 * @param[in] op Compositing operation to perform.
917 * @param[in] src Picture to combine with.
918 * @param[in] dst Picture to combine into.
919 * @param[in] maskFormat Picture format of the generated Picture mask.
920 * @param[in] xSrc Horizontal `src` origin offset.
921 * @param[in] ySrc Vertical `src` origin offset.
922 * @param[in] xDst Horizontal `dst` origin offset.
923 * @param[in] yDst Vertical `dst` origin offset.
924 * @param[in] fpoints Array of DoublePoints to create a Polygon with.
925 * @param[in] npoints `points` array size.
926 * @param winding Unused.
927 */
928void XRenderCompositeDoublePoly(Display *dpy, int op, Picture src, Picture dst,
929 _Xconst XRenderPictFormat *maskFormat, int xSrc,
930 int ySrc, int xDst, int yDst,
931 _Xconst XPointDouble *fpoints, int npoints,
932 int winding);
933
934/**
935 * Parse a color string.
936 *
937 * @param dpy Connection to the X server.
938 * @param[in] spec Null-terminated string.
939 * @param[out] def Parsing result.
940 * @return Status «1» on success.
941 */
942Status XRenderParseColor(Display *dpy, char *spec, XRenderColor *def);
943
944/**
945 * Creates a cursor looking like a Picture.
946 *
947 * @param dpy Connection to the X server.
948 * @param[in] source Picture defining the cursor look.
949 * @param[in] x Horizontal offset.
950 * @param[in] y Vertical offset.
951 * @return A Cursor.
952 */
953Cursor XRenderCreateCursor(Display *dpy, Picture source, unsigned int x,
954 unsigned int y);
955
956/**
957 * Ask for Filters applicable to some Drawable.
958 *
959 * @param dpy Connection to the X server.
960 * @param[in] drawable Target Drawable.
961 * @return Available Filters and Aliases.
962 */
963XFilters *XRenderQueryFilters(Display *dpy, Drawable drawable);
964
965/**
966 * Set the current filter of a Picture.
967 *
968 * @note On Picture creation, the «Nearest» filter is set by default.
969 *
970 * @param dpy Connection to the X server.
971 * @param[in] picture Target.
972 * @param[in] filter Filter name.
973 * @param[in] params Filter parameters array.
974 * @param[in] nparams `params` array size.
975 */
976void XRenderSetPictureFilter(Display *dpy, Picture picture, const char *filter,
977 XFixed *params, int nparams);
978
979/**
980 * Create an animated Cursor from the given Cursor frames.
981 *
982 * @param dpy Connection to the X server.
983 * @param[in] ncursor Cursor frames count.
984 * @param[in] cursors Cursor frames array.
985 * @return An animated Cursor.
986 */
987Cursor XRenderCreateAnimCursor(Display *dpy, int ncursor, XAnimCursor *cursors);
988
989/**
990 * Add the given Trapezoids to a single-channel Picture.
991 *
992 * @param dpy Connection to the X server.
993 * @param[in] picture An alpha-only Picture.
994 * @param[in] xOff Horizontal offset.
995 * @param[in] yOff Vertical offset.
996 * @param[in] traps Array of trapezoids.
997 * @param[in] ntrap `traps` array size.
998 */
999void XRenderAddTraps(Display *dpy, Picture picture, int xOff, int yOff,
1000 _Xconst XTrap *traps, int ntrap);
1001
1002/**
1003 * Create a Picture filled with a single Color.
1004 *
1005 * @param dpy Connection to the X server.
1006 * @param[in] color Desired filling.
1007 * @return A single Color Picture.
1008 */
1009Picture XRenderCreateSolidFill(Display *dpy, const XRenderColor *color);
1010
1011/**
1012 * Create a Picture filled with a Linear Gradient.
1013 *
1014 * @param dpy Connection to the X server.
1015 * @param[in] gradient Gradient geometry.
1016 * @param[in] stops Stop sections.
1017 * @param[in] colors Stop colors.
1018 * @param[in] nstops Stops count.
1019 * @return A Picture filled with a Linear Gradient.
1020 */
1021Picture XRenderCreateLinearGradient(Display *dpy,
1022 const XLinearGradient *gradient,
1023 const XFixed *stops,
1024 const XRenderColor *colors, int nstops);
1025
1026/**
1027 * Create a Picture filled with a Radial Gradient.
1028 *
1029 * @param dpy Connection to the X server.
1030 * @param[in] gradient Gradient geometry.
1031 * @param[in] stops Stop sections.
1032 * @param[in] colors Stop colors.
1033 * @param[in] nstops Stops count.
1034 * @return A Picture filled with a Radial Gradient.
1035 */
1036Picture XRenderCreateRadialGradient(Display *dpy,
1037 const XRadialGradient *gradient,
1038 const XFixed *stops,
1039 const XRenderColor *colors, int nstops);
1040
1041/**
1042 * Create a Picture filled with a Conical Gradient.
1043 *
1044 * @param dpy Connection to the X server.
1045 * @param[in] gradient Gradient geometry.
1046 * @param[in] stops Stop sections.
1047 * @param[in] colors Stop colors.
1048 * @param[in] nstops Stops count.
1049 * @return A Picture filled with a Conical Gradient.
1050 */
1051Picture XRenderCreateConicalGradient(Display *dpy,
1052 const XConicalGradient *gradient,
1053 const XFixed *stops,
1054 const XRenderColor *colors, int nstops);
1055
1056_XFUNCPROTOEND
1057
1058#endif /* _XRENDER_H_ */