Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | Download | RSS feed

  1. /* Cairo - a vector graphics library with display and print output
  2.  *
  3.  * Copyright © 2005 Red Hat, Inc.
  4.  * Copyright © 2009 Intel Corporation
  5.  *
  6.  * This library is free software; you can redistribute it and/or
  7.  * modify it either under the terms of the GNU Lesser General Public
  8.  * License version 2.1 as published by the Free Software Foundation
  9.  * (the "LGPL") or, at your option, under the terms of the Mozilla
  10.  * Public License Version 1.1 (the "MPL"). If you do not alter this
  11.  * notice, a recipient may use your version of this file under either
  12.  * the MPL or the LGPL.
  13.  *
  14.  * You should have received a copy of the LGPL along with this library
  15.  * in the file COPYING-LGPL-2.1; if not, write to the Free Software
  16.  * Foundation, Inc., 51 Franklin Street, Suite 500, Boston, MA 02110-1335, USA
  17.  * You should have received a copy of the MPL along with this library
  18.  * in the file COPYING-MPL-1.1
  19.  *
  20.  * The contents of this file are subject to the Mozilla Public License
  21.  * Version 1.1 (the "License"); you may not use this file except in
  22.  * compliance with the License. You may obtain a copy of the License at
  23.  * http://www.mozilla.org/MPL/
  24.  *
  25.  * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY
  26.  * OF ANY KIND, either express or implied. See the LGPL or the MPL for
  27.  * the specific language governing rights and limitations.
  28.  *
  29.  * The Original Code is the cairo graphics library.
  30.  *
  31.  * The Initial Developer of the Original Code is Red Hat, Inc.
  32.  *
  33.  * Contributors(s):
  34.  *      Chris Wilson <chris@chris-wilson.co.uk>
  35.  */
  36.  
  37. #ifndef CAIRO_XCB_PRIVATE_H
  38. #define CAIRO_XCB_PRIVATE_H
  39.  
  40. #include "cairo-xcb.h"
  41.  
  42. #include "cairo-cache-private.h"
  43. #include "cairo-compiler-private.h"
  44. #include "cairo-device-private.h"
  45. #include "cairo-error-private.h"
  46. #include "cairo-freelist-private.h"
  47. #include "cairo-list-private.h"
  48. #include "cairo-mutex-private.h"
  49. #include "cairo-reference-count-private.h"
  50. #include "cairo-spans-private.h"
  51. #include "cairo-surface-private.h"
  52.  
  53. #include <xcb/xcb.h>
  54. #include <xcb/render.h>
  55. #include <xcb/xcbext.h>
  56. #include <pixman.h>
  57.  
  58. typedef struct _cairo_xcb_connection cairo_xcb_connection_t;
  59. typedef struct _cairo_xcb_font cairo_xcb_font_t;
  60. typedef struct _cairo_xcb_screen cairo_xcb_screen_t;
  61. typedef struct _cairo_xcb_surface cairo_xcb_surface_t;
  62. typedef struct _cairo_xcb_shm_mem_pool cairo_xcb_shm_mem_pool_t;
  63. typedef struct _cairo_xcb_shm_info cairo_xcb_shm_info_t;
  64.  
  65. struct _cairo_xcb_shm_info {
  66.     cairo_xcb_connection_t *connection;
  67.     uint32_t shm;
  68.     uint32_t offset;
  69.     uint64_t seqno;
  70.     void *mem;
  71.     cairo_xcb_shm_mem_pool_t *pool;
  72. };
  73.  
  74. struct _cairo_xcb_surface {
  75.     cairo_surface_t base;
  76.     cairo_surface_t *fallback;
  77.  
  78.     cairo_xcb_connection_t *connection;
  79.     cairo_xcb_screen_t *screen;
  80.  
  81.     cairo_surface_t *drm;
  82.     cairo_bool_t marked_dirty;
  83.  
  84.     xcb_drawable_t drawable;
  85.     cairo_bool_t owns_pixmap;
  86.     int use_pixmap;
  87.  
  88.     cairo_bool_t deferred_clear;
  89.  
  90.     int width;
  91.     int height;
  92.     int depth;
  93.  
  94.     unsigned int flags;
  95.     xcb_render_picture_t picture;
  96.     xcb_render_pictformat_t xrender_format;
  97.     pixman_format_code_t pixman_format;
  98.  
  99.     cairo_list_t link;
  100. };
  101.  
  102. #if CAIRO_HAS_XLIB_XCB_FUNCTIONS
  103. typedef struct _cairo_xlib_xcb_surface {
  104.     cairo_surface_t base;
  105.  
  106.     cairo_xcb_surface_t *xcb;
  107.  
  108.     /* original settings for query */
  109.     void *display;
  110.     void *screen;
  111.     void *visual;
  112.     void *format;
  113. } cairo_xlib_xcb_surface_t;
  114. #endif
  115.  
  116.  
  117. enum {
  118.     GLYPHSET_INDEX_ARGB32,
  119.     GLYPHSET_INDEX_A8,
  120.     GLYPHSET_INDEX_A1,
  121.     NUM_GLYPHSETS
  122. };
  123.  
  124. typedef struct _cairo_xcb_font_glyphset_free_glyphs {
  125.     xcb_render_glyphset_t   glyphset;
  126.     int                     glyph_count;
  127.     xcb_render_glyph_t      glyph_indices[128];
  128. } cairo_xcb_font_glyphset_free_glyphs_t;
  129.  
  130. typedef struct _cairo_xcb_font_glyphset_info {
  131.     xcb_render_glyphset_t   glyphset;
  132.     cairo_format_t          format;
  133.     xcb_render_pictformat_t xrender_format;
  134.     cairo_xcb_font_glyphset_free_glyphs_t *pending_free_glyphs;
  135. } cairo_xcb_font_glyphset_info_t;
  136.  
  137. struct _cairo_xcb_font {
  138.     cairo_scaled_font_t             *scaled_font;
  139.     cairo_xcb_connection_t          *connection;
  140.     cairo_xcb_font_glyphset_info_t  glyphset_info[NUM_GLYPHSETS];
  141.     cairo_list_t link;
  142. };
  143.  
  144. struct _cairo_xcb_screen {
  145.     cairo_xcb_connection_t *connection;
  146.  
  147.     xcb_screen_t            *xcb_screen;
  148.     cairo_device_t          *device;
  149.  
  150.     xcb_gcontext_t gc[4];
  151.     int gc_depths; /* 4 x uint8_t */
  152.  
  153.     cairo_surface_t *stock_colors[CAIRO_STOCK_NUM_COLORS];
  154.     struct {
  155.         cairo_surface_t *picture;
  156.         cairo_color_t color;
  157.     } solid_cache[16];
  158.     int solid_cache_size;
  159.  
  160.     cairo_cache_t surface_pattern_cache;
  161.     cairo_cache_t linear_pattern_cache;
  162.     cairo_cache_t radial_pattern_cache;
  163.     cairo_freelist_t pattern_cache_entry_freelist;
  164.  
  165.     cairo_list_t link;
  166.     cairo_list_t surfaces;
  167. };
  168.  
  169. struct _cairo_xcb_connection {
  170.     cairo_device_t device;
  171.  
  172.     xcb_connection_t *xcb_connection;
  173.     cairo_bool_t has_socket;
  174.  
  175.     xcb_render_pictformat_t standard_formats[5];
  176.     cairo_hash_table_t *xrender_formats;
  177.     cairo_hash_table_t *visual_to_xrender_format;
  178.  
  179.     unsigned int maximum_request_length;
  180.     unsigned int flags;
  181.  
  182.     const xcb_setup_t *root;
  183.     const xcb_query_extension_reply_t *render;
  184.     const xcb_query_extension_reply_t *shm;
  185.     const xcb_query_extension_reply_t *dri2;
  186.     uint64_t seqno;
  187.  
  188.     cairo_list_t free_xids;
  189.     cairo_freepool_t xid_pool;
  190.  
  191.     cairo_mutex_t shm_mutex;
  192.     cairo_list_t shm_pools;
  193.     cairo_freepool_t shm_info_freelist;
  194.  
  195.     cairo_mutex_t screens_mutex;
  196.     cairo_list_t screens;
  197.  
  198.     cairo_list_t fonts;
  199.  
  200.     cairo_list_t link;
  201. };
  202.  
  203. enum {
  204.     CAIRO_XCB_HAS_RENDER                        = 0x0001,
  205.     CAIRO_XCB_RENDER_HAS_FILL_RECTANGLES        = 0x0002,
  206.     CAIRO_XCB_RENDER_HAS_COMPOSITE              = 0x0004,
  207.     CAIRO_XCB_RENDER_HAS_COMPOSITE_TRAPEZOIDS   = 0x0008,
  208.     CAIRO_XCB_RENDER_HAS_COMPOSITE_SPANS        = 0x0010,
  209.     CAIRO_XCB_RENDER_HAS_COMPOSITE_GLYPHS       = 0x0020,
  210.     CAIRO_XCB_RENDER_HAS_PICTURE_TRANSFORM      = 0x0040,
  211.     CAIRO_XCB_RENDER_HAS_FILTERS                = 0x0080,
  212.     CAIRO_XCB_RENDER_HAS_PDF_OPERATORS          = 0x0100,
  213.     CAIRO_XCB_RENDER_HAS_EXTENDED_REPEAT        = 0x0200,
  214.     CAIRO_XCB_RENDER_HAS_GRADIENTS              = 0x0400,
  215.  
  216.     CAIRO_XCB_HAS_CAIRO                         = 0x10000,
  217.  
  218.     CAIRO_XCB_HAS_DRI2                          = 0x40000000,
  219.     CAIRO_XCB_HAS_SHM                           = 0x80000000
  220. };
  221.  
  222. #define CAIRO_XCB_SHM_SMALL_IMAGE 8192
  223.  
  224. cairo_private extern const cairo_surface_backend_t _cairo_xcb_surface_backend;
  225.  
  226. cairo_private cairo_xcb_connection_t *
  227. _cairo_xcb_connection_get (xcb_connection_t *connection);
  228.  
  229. static inline cairo_xcb_connection_t *
  230. _cairo_xcb_connection_reference (cairo_xcb_connection_t *connection)
  231. {
  232.     return (cairo_xcb_connection_t *) cairo_device_reference (&connection->device);
  233. }
  234.  
  235. cairo_private xcb_render_pictformat_t
  236. _cairo_xcb_connection_get_xrender_format (cairo_xcb_connection_t *connection,
  237.                                           pixman_format_code_t pixman_format);
  238.  
  239. cairo_private xcb_render_pictformat_t
  240. _cairo_xcb_connection_get_xrender_format_for_visual (cairo_xcb_connection_t *connection,
  241.                                                      const xcb_visualid_t visual);
  242.  
  243. static inline cairo_status_t cairo_warn
  244. _cairo_xcb_connection_acquire (cairo_xcb_connection_t *connection)
  245. {
  246.     return cairo_device_acquire (&connection->device);
  247. }
  248.  
  249. cairo_private cairo_status_t
  250. _cairo_xcb_connection_take_socket (cairo_xcb_connection_t *connection);
  251.  
  252. cairo_private uint32_t
  253. _cairo_xcb_connection_get_xid (cairo_xcb_connection_t *connection);
  254.  
  255. cairo_private void
  256. _cairo_xcb_connection_put_xid (cairo_xcb_connection_t *connection,
  257.                                uint32_t xid);
  258.  
  259. static inline void
  260. _cairo_xcb_connection_release (cairo_xcb_connection_t *connection)
  261. {
  262.     cairo_device_release (&connection->device);
  263. }
  264.  
  265. static inline void
  266. _cairo_xcb_connection_destroy (cairo_xcb_connection_t *connection)
  267. {
  268.     cairo_device_destroy (&connection->device);
  269. }
  270.  
  271. cairo_private cairo_int_status_t
  272. _cairo_xcb_connection_allocate_shm_info (cairo_xcb_connection_t *display,
  273.                                          size_t size,
  274.                                          cairo_xcb_shm_info_t **shm_info_out);
  275.  
  276. cairo_private void
  277. _cairo_xcb_shm_info_destroy (cairo_xcb_shm_info_t *shm_info);
  278.  
  279. cairo_private void
  280. _cairo_xcb_connection_shm_mem_pools_fini (cairo_xcb_connection_t *connection);
  281.  
  282. cairo_private void
  283. _cairo_xcb_font_finish (cairo_xcb_font_t *font);
  284.  
  285. cairo_private cairo_xcb_screen_t *
  286. _cairo_xcb_screen_get (xcb_connection_t *connection,
  287.                        xcb_screen_t *screen);
  288.  
  289. cairo_private void
  290. _cairo_xcb_screen_finish (cairo_xcb_screen_t *screen);
  291.  
  292. cairo_private xcb_gcontext_t
  293. _cairo_xcb_screen_get_gc (cairo_xcb_screen_t *screen,
  294.                           xcb_drawable_t drawable,
  295.                           int depth);
  296.  
  297. cairo_private void
  298. _cairo_xcb_screen_put_gc (cairo_xcb_screen_t *screen, int depth, xcb_gcontext_t gc);
  299.  
  300. cairo_private cairo_status_t
  301. _cairo_xcb_screen_store_surface_picture (cairo_xcb_screen_t *screen,
  302.                                          cairo_surface_t *picture,
  303.                                          unsigned int size);
  304. cairo_private void
  305. _cairo_xcb_screen_remove_surface_picture (cairo_xcb_screen_t *screen,
  306.                                           cairo_surface_t *picture);
  307.  
  308. cairo_private cairo_status_t
  309. _cairo_xcb_screen_store_linear_picture (cairo_xcb_screen_t *screen,
  310.                                         const cairo_linear_pattern_t *linear,
  311.                                         cairo_surface_t *picture);
  312.  
  313. cairo_private cairo_surface_t *
  314. _cairo_xcb_screen_lookup_linear_picture (cairo_xcb_screen_t *screen,
  315.                                          const cairo_linear_pattern_t *linear);
  316.  
  317. cairo_private cairo_status_t
  318. _cairo_xcb_screen_store_radial_picture (cairo_xcb_screen_t *screen,
  319.                                         const cairo_radial_pattern_t *radial,
  320.                                         cairo_surface_t *picture);
  321.  
  322. cairo_private cairo_surface_t *
  323. _cairo_xcb_screen_lookup_radial_picture (cairo_xcb_screen_t *screen,
  324.                                          const cairo_radial_pattern_t *radial);
  325.  
  326. cairo_private cairo_surface_t *
  327. _cairo_xcb_surface_create_similar_image (cairo_xcb_surface_t *other,
  328.                                          cairo_content_t content,
  329.                                          int width, int height);
  330.  
  331. cairo_private cairo_surface_t *
  332. _cairo_xcb_surface_create_similar (void                 *abstract_other,
  333.                                    cairo_content_t       content,
  334.                                    int                   width,
  335.                                    int                   height);
  336.  
  337. cairo_private cairo_surface_t *
  338. _cairo_xcb_surface_create_internal (cairo_xcb_screen_t          *screen,
  339.                                     xcb_drawable_t               drawable,
  340.                                     cairo_bool_t                 owns_pixmap,
  341.                                     pixman_format_code_t         pixman_format,
  342.                                     xcb_render_pictformat_t      xrender_format,
  343.                                     int                          width,
  344.                                     int                          height);
  345.  
  346. cairo_private cairo_int_status_t
  347. _cairo_xcb_surface_cairo_paint (cairo_xcb_surface_t     *surface,
  348.                                 cairo_operator_t         op,
  349.                                 const cairo_pattern_t   *source,
  350.                                 cairo_clip_t            *clip);
  351.  
  352. cairo_private cairo_int_status_t
  353. _cairo_xcb_surface_cairo_mask (cairo_xcb_surface_t      *surface,
  354.                                cairo_operator_t          op,
  355.                                const cairo_pattern_t    *source,
  356.                                const cairo_pattern_t    *mask,
  357.                                cairo_clip_t             *clip);
  358.  
  359. cairo_private cairo_int_status_t
  360. _cairo_xcb_surface_cairo_stroke (cairo_xcb_surface_t    *surface,
  361.                                  cairo_operator_t        op,
  362.                                  const cairo_pattern_t  *source,
  363.                                  cairo_path_fixed_t     *path,
  364.                                  const cairo_stroke_style_t     *style,
  365.                                  const cairo_matrix_t           *ctm,
  366.                                  const cairo_matrix_t           *ctm_inverse,
  367.                                  double                  tolerance,
  368.                                  cairo_antialias_t       antialias,
  369.                                  cairo_clip_t           *clip);
  370.  
  371. cairo_private cairo_int_status_t
  372. _cairo_xcb_surface_cairo_fill (cairo_xcb_surface_t      *surface,
  373.                                cairo_operator_t          op,
  374.                                const cairo_pattern_t    *source,
  375.                                cairo_path_fixed_t       *path,
  376.                                cairo_fill_rule_t         fill_rule,
  377.                                double                    tolerance,
  378.                                cairo_antialias_t         antialias,
  379.                                cairo_clip_t             *clip);
  380.  
  381. cairo_private cairo_int_status_t
  382. _cairo_xcb_surface_cairo_glyphs (cairo_xcb_surface_t    *surface,
  383.                                  cairo_operator_t                op,
  384.                                  const cairo_pattern_t  *source,
  385.                                  cairo_scaled_font_t    *scaled_font,
  386.                                  cairo_glyph_t          *glyphs,
  387.                                  int                     num_glyphs,
  388.                                  cairo_clip_t           *clip);
  389.  
  390. cairo_private cairo_int_status_t
  391. _cairo_xcb_surface_render_paint (cairo_xcb_surface_t    *surface,
  392.                                  cairo_operator_t        op,
  393.                                  const cairo_pattern_t  *source,
  394.                                  cairo_clip_t           *clip);
  395.  
  396. cairo_private cairo_int_status_t
  397. _cairo_xcb_surface_render_mask (cairo_xcb_surface_t     *surface,
  398.                                 cairo_operator_t                 op,
  399.                                 const cairo_pattern_t   *source,
  400.                                 const cairo_pattern_t   *mask,
  401.                                 cairo_clip_t            *clip);
  402.  
  403. cairo_private cairo_int_status_t
  404. _cairo_xcb_surface_render_stroke (cairo_xcb_surface_t   *surface,
  405.                                   cairo_operator_t       op,
  406.                                   const cairo_pattern_t *source,
  407.                                   cairo_path_fixed_t    *path,
  408.                                   const cairo_stroke_style_t    *style,
  409.                                   const cairo_matrix_t          *ctm,
  410.                                   const cairo_matrix_t          *ctm_inverse,
  411.                                   double                         tolerance,
  412.                                   cairo_antialias_t      antialias,
  413.                                   cairo_clip_t          *clip);
  414.  
  415. cairo_private cairo_int_status_t
  416. _cairo_xcb_surface_render_fill (cairo_xcb_surface_t     *surface,
  417.                                 cairo_operator_t                 op,
  418.                                 const cairo_pattern_t   *source,
  419.                                 cairo_path_fixed_t      *path,
  420.                                 cairo_fill_rule_t        fill_rule,
  421.                                 double                   tolerance,
  422.                                 cairo_antialias_t        antialias,
  423.                                 cairo_clip_t            *clip);
  424.  
  425. cairo_private cairo_int_status_t
  426. _cairo_xcb_surface_render_glyphs (cairo_xcb_surface_t   *surface,
  427.                                   cairo_operator_t               op,
  428.                                   const cairo_pattern_t *source,
  429.                                   cairo_scaled_font_t   *scaled_font,
  430.                                   cairo_glyph_t         *glyphs,
  431.                                   int                    num_glyphs,
  432.                                   cairo_clip_t          *clip);
  433. cairo_private void
  434. _cairo_xcb_surface_scaled_font_fini (cairo_scaled_font_t *scaled_font);
  435.  
  436. cairo_private void
  437. _cairo_xcb_surface_scaled_glyph_fini (cairo_scaled_glyph_t *scaled_glyph,
  438.                                       cairo_scaled_font_t  *scaled_font);
  439.  
  440. cairo_private cairo_status_t
  441. _cairo_xcb_surface_clear (cairo_xcb_surface_t *dst);
  442.  
  443. cairo_private cairo_status_t
  444. _cairo_xcb_surface_core_copy_boxes (cairo_xcb_surface_t         *dst,
  445.                                    const cairo_pattern_t        *src_pattern,
  446.                                    const cairo_rectangle_int_t  *extents,
  447.                                    const cairo_boxes_t          *boxes);
  448.  
  449. cairo_private cairo_status_t
  450. _cairo_xcb_surface_core_fill_boxes (cairo_xcb_surface_t *dst,
  451.                                     const cairo_color_t *color,
  452.                                     cairo_boxes_t *boxes);
  453.  
  454. static inline void
  455. _cairo_xcb_connection_write (cairo_xcb_connection_t *connection,
  456.                              struct iovec *vec,
  457.                              int count)
  458. {
  459.     if (unlikely (connection->device.status))
  460.         return;
  461.  
  462.     connection->seqno++;
  463.     if (unlikely (! xcb_writev (connection->xcb_connection, vec, count, 1)))
  464.         connection->device.status = _cairo_error (CAIRO_STATUS_WRITE_ERROR);
  465. }
  466.  
  467. cairo_private xcb_pixmap_t
  468. _cairo_xcb_connection_create_pixmap (cairo_xcb_connection_t *connection,
  469.                                      uint8_t depth,
  470.                                      xcb_drawable_t drawable,
  471.                                      uint16_t width,
  472.                                      uint16_t height);
  473.  
  474. cairo_private void
  475. _cairo_xcb_connection_free_pixmap (cairo_xcb_connection_t *connection,
  476.                                    xcb_pixmap_t pixmap);
  477.  
  478. cairo_private xcb_gcontext_t
  479. _cairo_xcb_connection_create_gc (cairo_xcb_connection_t *connection,
  480.                                  xcb_drawable_t drawable,
  481.                                  uint32_t value_mask,
  482.                                  uint32_t *values);
  483.  
  484. cairo_private void
  485. _cairo_xcb_connection_free_gc (cairo_xcb_connection_t *connection,
  486.                                xcb_gcontext_t gc);
  487.  
  488. cairo_private void
  489. _cairo_xcb_connection_change_gc (cairo_xcb_connection_t *connection,
  490.                                  xcb_gcontext_t gc,
  491.                                  uint32_t value_mask,
  492.                                  uint32_t *values);
  493.  
  494. cairo_private void
  495. _cairo_xcb_connection_copy_area (cairo_xcb_connection_t *connection,
  496.                                  xcb_drawable_t src,
  497.                                  xcb_drawable_t dst,
  498.                                  xcb_gcontext_t gc,
  499.                                  int16_t src_x,
  500.                                  int16_t src_y,
  501.                                  int16_t dst_x,
  502.                                  int16_t dst_y,
  503.                                  uint16_t width,
  504.                                  uint16_t height);
  505.  
  506. cairo_private void
  507. _cairo_xcb_connection_put_image (cairo_xcb_connection_t *connection,
  508.                                  xcb_drawable_t dst,
  509.                                  xcb_gcontext_t gc,
  510.                                  uint16_t width,
  511.                                  uint16_t height,
  512.                                  int16_t dst_x,
  513.                                  int16_t dst_y,
  514.                                  uint8_t depth,
  515.                                  uint32_t length,
  516.                                  void *data);
  517.  
  518. cairo_private void
  519. _cairo_xcb_connection_put_subimage (cairo_xcb_connection_t *connection,
  520.                                     xcb_drawable_t dst,
  521.                                     xcb_gcontext_t gc,
  522.                                     int16_t src_x,
  523.                                     int16_t src_y,
  524.                                     uint16_t width,
  525.                                     uint16_t height,
  526.                                     uint16_t cpp,
  527.                                     uint16_t stride,
  528.                                     int16_t dst_x,
  529.                                     int16_t dst_y,
  530.                                     uint8_t depth,
  531.                                     void *data);
  532.  
  533. cairo_private cairo_status_t
  534. _cairo_xcb_connection_get_image (cairo_xcb_connection_t *connection,
  535.                                  xcb_drawable_t src,
  536.                                  int16_t src_x,
  537.                                  int16_t src_y,
  538.                                  uint16_t width,
  539.                                  uint16_t height,
  540.                                  xcb_get_image_reply_t **reply);
  541.  
  542. cairo_private void
  543. _cairo_xcb_connection_poly_fill_rectangle (cairo_xcb_connection_t *connection,
  544.                                            xcb_drawable_t dst,
  545.                                            xcb_gcontext_t gc,
  546.                                            uint32_t num_rectangles,
  547.                                            xcb_rectangle_t *rectangles);
  548.  
  549. #if CAIRO_HAS_XCB_SHM_FUNCTIONS
  550. cairo_private uint32_t
  551. _cairo_xcb_connection_shm_attach (cairo_xcb_connection_t *connection,
  552.                                   uint32_t id,
  553.                                   cairo_bool_t readonly);
  554.  
  555. cairo_private uint64_t
  556. _cairo_xcb_connection_shm_put_image (cairo_xcb_connection_t *connection,
  557.                                      xcb_drawable_t dst,
  558.                                      xcb_gcontext_t gc,
  559.                                      uint16_t total_width,
  560.                                      uint16_t total_height,
  561.                                      int16_t src_x,
  562.                                      int16_t src_y,
  563.                                      uint16_t width,
  564.                                      uint16_t height,
  565.                                      int16_t dst_x,
  566.                                      int16_t dst_y,
  567.                                      uint8_t depth,
  568.                                      uint32_t shm,
  569.                                      uint32_t offset);
  570.  
  571. cairo_private cairo_status_t
  572. _cairo_xcb_connection_shm_get_image (cairo_xcb_connection_t *connection,
  573.                                      xcb_drawable_t src,
  574.                                      int16_t src_x,
  575.                                      int16_t src_y,
  576.                                      uint16_t width,
  577.                                      uint16_t height,
  578.                                      uint32_t shmseg,
  579.                                      uint32_t offset);
  580.  
  581. cairo_private void
  582. _cairo_xcb_connection_shm_detach (cairo_xcb_connection_t *connection,
  583.                                   uint32_t segment);
  584. #else
  585. static inline uint64_t
  586. _cairo_xcb_connection_shm_put_image (cairo_xcb_connection_t *connection,
  587.                                      xcb_drawable_t dst,
  588.                                      xcb_gcontext_t gc,
  589.                                      uint16_t total_width,
  590.                                      uint16_t total_height,
  591.                                      int16_t src_x,
  592.                                      int16_t src_y,
  593.                                      uint16_t width,
  594.                                      uint16_t height,
  595.                                      int16_t dst_x,
  596.                                      int16_t dst_y,
  597.                                      uint8_t depth,
  598.                                      uint32_t shm,
  599.                                      uint32_t offset)
  600. {
  601.     return 0;
  602. }
  603. #endif
  604.  
  605. cairo_private void
  606. _cairo_xcb_connection_render_spans (cairo_xcb_connection_t *connection,
  607.                                     xcb_render_picture_t dst,
  608.                                     int op,
  609.                                     xcb_render_picture_t src,
  610.                                     int16_t src_x, int16_t src_y,
  611.                                     int16_t dst_x, int16_t dst_y,
  612.                                     int16_t width, int16_t height,
  613.                                     unsigned int length,
  614.                                     uint16_t *spans);
  615. cairo_private void
  616. _cairo_xcb_connection_render_create_picture (cairo_xcb_connection_t  *connection,
  617.                                              xcb_render_picture_t     picture,
  618.                                              xcb_drawable_t           drawable,
  619.                                              xcb_render_pictformat_t  format,
  620.                                              uint32_t                 value_mask,
  621.                                              uint32_t                *value_list);
  622.  
  623. cairo_private void
  624. _cairo_xcb_connection_render_change_picture (cairo_xcb_connection_t     *connection,
  625.                                              xcb_render_picture_t  picture,
  626.                                              uint32_t              value_mask,
  627.                                              uint32_t             *value_list);
  628.  
  629. cairo_private void
  630. _cairo_xcb_connection_render_set_picture_clip_rectangles (cairo_xcb_connection_t      *connection,
  631.                                                           xcb_render_picture_t   picture,
  632.                                                           int16_t                clip_x_origin,
  633.                                                           int16_t                clip_y_origin,
  634.                                                           uint32_t               rectangles_len,
  635.                                                           xcb_rectangle_t       *rectangles);
  636.  
  637. cairo_private void
  638. _cairo_xcb_connection_render_free_picture (cairo_xcb_connection_t *connection,
  639.                                            xcb_render_picture_t  picture);
  640.  
  641. cairo_private void
  642. _cairo_xcb_connection_render_composite (cairo_xcb_connection_t     *connection,
  643.                                         uint8_t               op,
  644.                                         xcb_render_picture_t  src,
  645.                                         xcb_render_picture_t  mask,
  646.                                         xcb_render_picture_t  dst,
  647.                                         int16_t               src_x,
  648.                                         int16_t               src_y,
  649.                                         int16_t               mask_x,
  650.                                         int16_t               mask_y,
  651.                                         int16_t               dst_x,
  652.                                         int16_t               dst_y,
  653.                                         uint16_t              width,
  654.                                         uint16_t              height);
  655.  
  656. cairo_private void
  657. _cairo_xcb_connection_render_trapezoids (cairo_xcb_connection_t *connection,
  658.                                          uint8_t                       op,
  659.                                          xcb_render_picture_t          src,
  660.                                          xcb_render_picture_t          dst,
  661.                                          xcb_render_pictformat_t       mask_format,
  662.                                          int16_t                       src_x,
  663.                                          int16_t                       src_y,
  664.                                          uint32_t                      traps_len,
  665.                                          xcb_render_trapezoid_t       *traps);
  666.  
  667. cairo_private void
  668. _cairo_xcb_connection_render_create_glyph_set (cairo_xcb_connection_t   *connection,
  669.                                                xcb_render_glyphset_t     id,
  670.                                                xcb_render_pictformat_t  format);
  671.  
  672. cairo_private void
  673. _cairo_xcb_connection_render_free_glyph_set (cairo_xcb_connection_t      *connection,
  674.                                              xcb_render_glyphset_t  glyphset);
  675.  
  676. cairo_private void
  677. _cairo_xcb_connection_render_add_glyphs (cairo_xcb_connection_t             *connection,
  678.                                          xcb_render_glyphset_t         glyphset,
  679.                                          uint32_t                      num_glyphs,
  680.                                          uint32_t                     *glyphs_id,
  681.                                          xcb_render_glyphinfo_t       *glyphs,
  682.                                          uint32_t                      data_len,
  683.                                          uint8_t                      *data);
  684.  
  685. cairo_private void
  686. _cairo_xcb_connection_render_free_glyphs (cairo_xcb_connection_t         *connection,
  687.                                           xcb_render_glyphset_t     glyphset,
  688.                                           uint32_t                  num_glyphs,
  689.                                           xcb_render_glyph_t       *glyphs);
  690.  
  691. cairo_private void
  692. _cairo_xcb_connection_render_composite_glyphs_8 (cairo_xcb_connection_t        *connection,
  693.                                                  uint8_t                  op,
  694.                                                  xcb_render_picture_t     src,
  695.                                                  xcb_render_picture_t     dst,
  696.                                                  xcb_render_pictformat_t  mask_format,
  697.                                                  xcb_render_glyphset_t    glyphset,
  698.                                                  int16_t                  src_x,
  699.                                                  int16_t                  src_y,
  700.                                                  uint32_t                 glyphcmds_len,
  701.                                                  uint8_t                 *glyphcmds);
  702.  
  703. cairo_private void
  704. _cairo_xcb_connection_render_composite_glyphs_16 (cairo_xcb_connection_t        *connection,
  705.                                                   uint8_t                  op,
  706.                                                   xcb_render_picture_t     src,
  707.                                                   xcb_render_picture_t     dst,
  708.                                                   xcb_render_pictformat_t  mask_format,
  709.                                                   xcb_render_glyphset_t    glyphset,
  710.                                                   int16_t                  src_x,
  711.                                                   int16_t                  src_y,
  712.                                                   uint32_t                 glyphcmds_len,
  713.                                                   uint8_t                 *glyphcmds);
  714.  
  715. cairo_private void
  716. _cairo_xcb_connection_render_composite_glyphs_32 (cairo_xcb_connection_t        *connection,
  717.                                                   uint8_t                  op,
  718.                                                   xcb_render_picture_t     src,
  719.                                                   xcb_render_picture_t     dst,
  720.                                                   xcb_render_pictformat_t  mask_format,
  721.                                                   xcb_render_glyphset_t    glyphset,
  722.                                                   int16_t                  src_x,
  723.                                                   int16_t                  src_y,
  724.                                                   uint32_t                 glyphcmds_len,
  725.                                                   uint8_t                 *glyphcmds);
  726.  
  727. cairo_private void
  728. _cairo_xcb_connection_render_fill_rectangles (cairo_xcb_connection_t      *connection,
  729.                                               uint8_t                op,
  730.                                               xcb_render_picture_t   dst,
  731.                                               xcb_render_color_t     color,
  732.                                               uint32_t               num_rects,
  733.                                               xcb_rectangle_t       *rects);
  734.  
  735. cairo_private void
  736. _cairo_xcb_connection_render_set_picture_transform (cairo_xcb_connection_t       *connection,
  737.                                                     xcb_render_picture_t    picture,
  738.                                                     xcb_render_transform_t  *transform);
  739.  
  740. cairo_private void
  741. _cairo_xcb_connection_render_set_picture_filter (cairo_xcb_connection_t         *connection,
  742.                                                  xcb_render_picture_t      picture,
  743.                                                  uint16_t                  filter_len,
  744.                                                  char                     *filter);
  745.  
  746. cairo_private void
  747. _cairo_xcb_connection_render_create_solid_fill (cairo_xcb_connection_t     *connection,
  748.                                                 xcb_render_picture_t  picture,
  749.                                                 xcb_render_color_t    color);
  750.  
  751. cairo_private void
  752. _cairo_xcb_connection_render_create_linear_gradient (cairo_xcb_connection_t         *connection,
  753.                                                      xcb_render_picture_t      picture,
  754.                                                      xcb_render_pointfix_t     p1,
  755.                                                      xcb_render_pointfix_t     p2,
  756.                                                      uint32_t                  num_stops,
  757.                                                      xcb_render_fixed_t *stops,
  758.                                                      xcb_render_color_t *colors);
  759.  
  760. cairo_private void
  761. _cairo_xcb_connection_render_create_radial_gradient (cairo_xcb_connection_t         *connection,
  762.                                                      xcb_render_picture_t      picture,
  763.                                                      xcb_render_pointfix_t     inner,
  764.                                                      xcb_render_pointfix_t     outer,
  765.                                                      xcb_render_fixed_t        inner_radius,
  766.                                                      xcb_render_fixed_t        outer_radius,
  767.                                                      uint32_t                  num_stops,
  768.                                                      xcb_render_fixed_t *stops,
  769.                                                      xcb_render_color_t *colors);
  770.  
  771. cairo_private void
  772. _cairo_xcb_connection_render_create_conical_gradient (cairo_xcb_connection_t         *c,
  773.                                                       xcb_render_picture_t      picture,
  774.                                                       xcb_render_pointfix_t     center,
  775.                                                       xcb_render_fixed_t        angle,
  776.                                                       uint32_t                  num_stops,
  777.                                                       xcb_render_fixed_t *stops,
  778.                                                       xcb_render_color_t *colors);
  779. #if CAIRO_HAS_XLIB_XCB_FUNCTIONS
  780. slim_hidden_proto (cairo_xcb_surface_create);
  781. slim_hidden_proto (cairo_xcb_surface_create_for_bitmap);
  782. slim_hidden_proto (cairo_xcb_surface_create_with_xrender_format);
  783. slim_hidden_proto (cairo_xcb_surface_set_size);
  784. #endif
  785.  
  786. #endif /* CAIRO_XCB_PRIVATE_H */
  787.