Home | History | Annotate | Line # | Download | only in extensions
      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  */
     57 typedef 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  */
     87 typedef 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  */
    135 typedef 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  */
    173 typedef 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  */
    190 typedef 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  */
    217 typedef 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  */
    235 typedef 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  */
    253 typedef 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  */
    277 typedef double XDouble;
    278 
    279 /**
    280  * Fixed-point number.
    281  */
    282 typedef 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  */
    293 typedef struct _XPointDouble {
    294     XDouble x, y;
    295 } XPointDouble;
    296 
    297 /**
    298  * Point coordinates as integers.
    299  */
    300 typedef struct _XPointFixed {
    301     XFixed x, y;
    302 } XPointFixed;
    303 
    304 /**
    305  * Line described by two points.
    306  */
    307 typedef struct _XLineFixed {
    308     XPointFixed p1, p2;
    309 } XLineFixed;
    310 
    311 /**
    312  * Triangle described by it's vertices.
    313  * @see XTrap
    314  */
    315 typedef struct _XTriangle {
    316     XPointFixed p1, p2, p3;
    317 } XTriangle;
    318 
    319 /**
    320  * Circle described by it's center point and a radius.
    321  */
    322 typedef 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  */
    335 typedef struct _XTrapezoid {
    336     XFixed top, bottom;
    337     XLineFixed left, right;
    338 } XTrapezoid;
    339 
    340 /**
    341  * A transform matrix.
    342  */
    343 typedef struct _XTransform {
    344     XFixed matrix[3][3];
    345 } XTransform;
    346 
    347 /**
    348  * Group filters and filter aliases.
    349  */
    350 typedef 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  */
    364 typedef 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  */
    374 typedef struct _XAnimCursor {
    375     /** Existing cursor. */
    376     Cursor cursor;
    377     /** Animation delay. */
    378     unsigned long delay;
    379 } XAnimCursor;
    380 
    381 /**
    382  * An horizontal line.
    383  */
    384 typedef struct _XSpanFix {
    385     XFixed left, right, y;
    386 } XSpanFix;
    387 
    388 /**
    389  * A trapezoid defined by two lines.
    390  * @see XTriangle
    391  */
    392 typedef struct _XTrap {
    393     XSpanFix top, bottom;
    394 } XTrap;
    395 
    396 /**
    397  * Linear gradient shape.
    398  */
    399 typedef struct _XLinearGradient {
    400     XPointFixed p1;
    401     XPointFixed p2;
    402 } XLinearGradient;
    403 
    404 /**
    405  * Radial gradient shape.
    406  */
    407 typedef struct _XRadialGradient {
    408     XCircle inner;
    409     XCircle outer;
    410 } XRadialGradient;
    411 
    412 /**
    413  * Conical gradient shape.
    414  */
    415 typedef 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  */
    434 Bool 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  */
    444 Status 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  */
    453 Status 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  */
    462 int 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  */
    472 Bool 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  */
    482 XRenderPictFormat *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  */
    494 XRenderPictFormat *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  */
    524 XRenderPictFormat *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  */
    534 XIndexValue *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  */
    548 Picture 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  */
    561 void 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  */
    571 void 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  */
    585 void 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  */
    596 void 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  */
    605 void 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  */
    625 void 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  */
    637 GlyphSet 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  */
    646 GlyphSet 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  */
    659 void 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  */
    672 void 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  */
    684 void 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  */
    703 void 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  */
    724 void 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  */
    746 void 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  */
    767 void 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  */
    787 void 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  */
    807 void 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  */
    824 void 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  */
    838 void 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  */
    855 void 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  */
    872 void 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  */
    890 void 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  */
    908 void 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  */
    928 void 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  */
    942 Status 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  */
    953 Cursor 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  */
    963 XFilters *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  */
    976 void 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  */
    987 Cursor 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  */
    999 void 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  */
   1009 Picture 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  */
   1021 Picture 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  */
   1036 Picture 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  */
   1051 Picture 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_ */
   1059