Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | RSS feed

  1. /* cairo - a vector graphics library with display and print output
  2.  *
  3.  * Copyright © 2009 Intel Corporation
  4.  *
  5.  * This library is free software; you can redistribute it and/or
  6.  * modify it either under the terms of the GNU Lesser General Public
  7.  * License version 2.1 as published by the Free Software Foundation
  8.  * (the "LGPL") or, at your option, under the terms of the Mozilla
  9.  * Public License Version 1.1 (the "MPL"). If you do not alter this
  10.  * notice, a recipient may use your version of this file under either
  11.  * the MPL or the LGPL.
  12.  *
  13.  * You should have received a copy of the LGPL along with this library
  14.  * in the file COPYING-LGPL-2.1; if not, write to the Free Software
  15.  * Foundation, Inc., 51 Franklin Street, Suite 500, Boston, MA 02110-1335, USA
  16.  * You should have received a copy of the MPL along with this library
  17.  * in the file COPYING-MPL-1.1
  18.  *
  19.  * The contents of this file are subject to the Mozilla Public License
  20.  * Version 1.1 (the "License"); you may not use this file except in
  21.  * compliance with the License. You may obtain a copy of the License at
  22.  * http://www.mozilla.org/MPL/
  23.  *
  24.  * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY
  25.  * OF ANY KIND, either express or implied. See the LGPL or the MPL for
  26.  * the specific language governing rights and limitations.
  27.  *
  28.  * Contributor(s):
  29.  *      Chris Wilson <chris@chris-wilson.co.uk>
  30.  */
  31.  
  32. #include "cairoint.h"
  33.  
  34. #include "cairo-xcb-private.h"
  35.  
  36. #include <xcb/xcbext.h>
  37.  
  38. void
  39. _cairo_xcb_connection_render_create_picture (cairo_xcb_connection_t  *connection,
  40.                                              xcb_render_picture_t     picture,
  41.                                              xcb_drawable_t           drawable,
  42.                                              xcb_render_pictformat_t  format,
  43.                                              uint32_t                 value_mask,
  44.                                              uint32_t                *value_list)
  45. {
  46.     assert (connection->flags & CAIRO_XCB_HAS_RENDER);
  47.     xcb_render_create_picture (connection->xcb_connection, picture, drawable,
  48.                                format, value_mask, value_list);
  49. }
  50.  
  51. void
  52. _cairo_xcb_connection_render_change_picture (cairo_xcb_connection_t     *connection,
  53.                                              xcb_render_picture_t  picture,
  54.                                              uint32_t              value_mask,
  55.                                              uint32_t             *value_list)
  56. {
  57.     assert (connection->flags & CAIRO_XCB_HAS_RENDER);
  58.     xcb_render_change_picture (connection->xcb_connection, picture,
  59.                                value_mask, value_list);
  60. }
  61.  
  62. void
  63. _cairo_xcb_connection_render_set_picture_clip_rectangles (cairo_xcb_connection_t      *connection,
  64.                                                           xcb_render_picture_t   picture,
  65.                                                           int16_t                clip_x_origin,
  66.                                                           int16_t                clip_y_origin,
  67.                                                           uint32_t               rectangles_len,
  68.                                                           xcb_rectangle_t *rectangles)
  69. {
  70.     assert (connection->flags & CAIRO_XCB_HAS_RENDER);
  71.     xcb_render_set_picture_clip_rectangles (connection->xcb_connection, picture,
  72.                                             clip_x_origin, clip_y_origin,
  73.                                             rectangles_len, rectangles);
  74. }
  75.  
  76. void
  77. _cairo_xcb_connection_render_free_picture (cairo_xcb_connection_t *connection,
  78.                                            xcb_render_picture_t  picture)
  79. {
  80.     assert (connection->flags & CAIRO_XCB_HAS_RENDER);
  81.     xcb_render_free_picture (connection->xcb_connection, picture);
  82.     _cairo_xcb_connection_put_xid (connection, picture);
  83. }
  84.  
  85. void
  86. _cairo_xcb_connection_render_composite (cairo_xcb_connection_t     *connection,
  87.                                         uint8_t               op,
  88.                                         xcb_render_picture_t  src,
  89.                                         xcb_render_picture_t  mask,
  90.                                         xcb_render_picture_t  dst,
  91.                                         int16_t               src_x,
  92.                                         int16_t               src_y,
  93.                                         int16_t               mask_x,
  94.                                         int16_t               mask_y,
  95.                                         int16_t               dst_x,
  96.                                         int16_t               dst_y,
  97.                                         uint16_t              width,
  98.                                         uint16_t              height)
  99. {
  100.     assert (connection->flags & CAIRO_XCB_RENDER_HAS_COMPOSITE);
  101.     xcb_render_composite (connection->xcb_connection, op, src, mask, dst,
  102.                           src_x, src_y, mask_x, mask_y, dst_x, dst_y, width, height);
  103. }
  104.  
  105. void
  106. _cairo_xcb_connection_render_trapezoids (cairo_xcb_connection_t *connection,
  107.                                          uint8_t                       op,
  108.                                          xcb_render_picture_t          src,
  109.                                          xcb_render_picture_t          dst,
  110.                                          xcb_render_pictformat_t       mask_format,
  111.                                          int16_t                       src_x,
  112.                                          int16_t                       src_y,
  113.                                          uint32_t                      traps_len,
  114.                                          xcb_render_trapezoid_t *traps)
  115. {
  116.     assert (connection->flags & CAIRO_XCB_RENDER_HAS_COMPOSITE_TRAPEZOIDS);
  117.     xcb_render_trapezoids (connection->xcb_connection, op, src, dst,
  118.                            mask_format, src_x, src_y, traps_len, traps);
  119. }
  120.  
  121. void
  122. _cairo_xcb_connection_render_create_glyph_set (cairo_xcb_connection_t   *connection,
  123.                                                xcb_render_glyphset_t     id,
  124.                                                xcb_render_pictformat_t  format)
  125. {
  126.     assert (connection->flags & CAIRO_XCB_HAS_RENDER);
  127.     xcb_render_create_glyph_set (connection->xcb_connection, id, format);
  128. }
  129.  
  130. void
  131. _cairo_xcb_connection_render_free_glyph_set (cairo_xcb_connection_t      *connection,
  132.                                              xcb_render_glyphset_t  glyphset)
  133. {
  134.     assert (connection->flags & CAIRO_XCB_HAS_RENDER);
  135.     xcb_render_free_glyph_set (connection->xcb_connection, glyphset);
  136.     _cairo_xcb_connection_put_xid (connection, glyphset);
  137. }
  138.  
  139. void
  140. _cairo_xcb_connection_render_add_glyphs (cairo_xcb_connection_t             *connection,
  141.                                          xcb_render_glyphset_t         glyphset,
  142.                                          uint32_t                      num_glyphs,
  143.                                          uint32_t               *glyphs_id,
  144.                                          xcb_render_glyphinfo_t *glyphs,
  145.                                          uint32_t                      data_len,
  146.                                          uint8_t                *data)
  147. {
  148.     assert (connection->flags & CAIRO_XCB_HAS_RENDER);
  149.     xcb_render_add_glyphs (connection->xcb_connection, glyphset, num_glyphs,
  150.                                    glyphs_id, glyphs, data_len, data);
  151. }
  152.  
  153. void
  154. _cairo_xcb_connection_render_free_glyphs (cairo_xcb_connection_t         *connection,
  155.                                           xcb_render_glyphset_t     glyphset,
  156.                                           uint32_t                  num_glyphs,
  157.                                           xcb_render_glyph_t *glyphs)
  158. {
  159.     assert (connection->flags & CAIRO_XCB_HAS_RENDER);
  160.     xcb_render_free_glyphs (connection->xcb_connection, glyphset, num_glyphs, glyphs);
  161. }
  162.  
  163. void
  164. _cairo_xcb_connection_render_composite_glyphs_8 (cairo_xcb_connection_t        *connection,
  165.                                                  uint8_t                  op,
  166.                                                  xcb_render_picture_t     src,
  167.                                                  xcb_render_picture_t     dst,
  168.                                                  xcb_render_pictformat_t  mask_format,
  169.                                                  xcb_render_glyphset_t    glyphset,
  170.                                                  int16_t                  src_x,
  171.                                                  int16_t                  src_y,
  172.                                                  uint32_t                 glyphcmds_len,
  173.                                                  uint8_t           *glyphcmds)
  174. {
  175.     assert (connection->flags & CAIRO_XCB_HAS_RENDER);
  176.     xcb_render_composite_glyphs_8 (connection->xcb_connection, op, src, dst, mask_format,
  177.                                    glyphset, src_x, src_y, glyphcmds_len, glyphcmds);
  178. }
  179.  
  180. void
  181. _cairo_xcb_connection_render_composite_glyphs_16 (cairo_xcb_connection_t        *connection,
  182.                                                   uint8_t                  op,
  183.                                                   xcb_render_picture_t     src,
  184.                                                   xcb_render_picture_t     dst,
  185.                                                   xcb_render_pictformat_t  mask_format,
  186.                                                   xcb_render_glyphset_t    glyphset,
  187.                                                   int16_t                  src_x,
  188.                                                   int16_t                  src_y,
  189.                                                   uint32_t                 glyphcmds_len,
  190.                                                   uint8_t           *glyphcmds)
  191. {
  192.     assert (connection->flags & CAIRO_XCB_HAS_RENDER);
  193.     xcb_render_composite_glyphs_16 (connection->xcb_connection, op, src, dst, mask_format,
  194.                                     glyphset, src_x, src_y, glyphcmds_len, glyphcmds);
  195. }
  196.  
  197. void
  198. _cairo_xcb_connection_render_composite_glyphs_32 (cairo_xcb_connection_t        *connection,
  199.                                                   uint8_t                  op,
  200.                                                   xcb_render_picture_t     src,
  201.                                                   xcb_render_picture_t     dst,
  202.                                                   xcb_render_pictformat_t  mask_format,
  203.                                                   xcb_render_glyphset_t    glyphset,
  204.                                                   int16_t                  src_x,
  205.                                                   int16_t                  src_y,
  206.                                                   uint32_t                 glyphcmds_len,
  207.                                                   uint8_t           *glyphcmds)
  208. {
  209.     assert (connection->flags & CAIRO_XCB_HAS_RENDER);
  210.     xcb_render_composite_glyphs_32 (connection->xcb_connection, op, src, dst, mask_format,
  211.                                     glyphset, src_x, src_y, glyphcmds_len, glyphcmds);
  212. }
  213.  
  214. void
  215. _cairo_xcb_connection_render_fill_rectangles (cairo_xcb_connection_t      *connection,
  216.                                               uint8_t                op,
  217.                                               xcb_render_picture_t   dst,
  218.                                               xcb_render_color_t     color,
  219.                                               uint32_t               num_rects,
  220.                                               xcb_rectangle_t *rects)
  221. {
  222.     assert (connection->flags & CAIRO_XCB_RENDER_HAS_FILL_RECTANGLES);
  223.     xcb_render_fill_rectangles (connection->xcb_connection, op, dst, color,
  224.                                 num_rects, rects);
  225. }
  226.  
  227. void
  228. _cairo_xcb_connection_render_set_picture_transform (cairo_xcb_connection_t       *connection,
  229.                                                     xcb_render_picture_t    picture,
  230.                                                     xcb_render_transform_t  *transform)
  231. {
  232.     assert (connection->flags & CAIRO_XCB_RENDER_HAS_PICTURE_TRANSFORM);
  233.     xcb_render_set_picture_transform (connection->xcb_connection, picture, *transform);
  234. }
  235.  
  236. void
  237. _cairo_xcb_connection_render_set_picture_filter (cairo_xcb_connection_t         *connection,
  238.                                                  xcb_render_picture_t      picture,
  239.                                                  uint16_t                  filter_len,
  240.                                                  char               *filter)
  241. {
  242.     assert (connection->flags & CAIRO_XCB_RENDER_HAS_FILTERS);
  243.     xcb_render_set_picture_filter (connection->xcb_connection, picture,
  244.                                    filter_len, filter, 0, NULL);
  245. }
  246.  
  247. void
  248. _cairo_xcb_connection_render_create_solid_fill (cairo_xcb_connection_t     *connection,
  249.                                                 xcb_render_picture_t  picture,
  250.                                                 xcb_render_color_t    color)
  251. {
  252.     assert (connection->flags & CAIRO_XCB_RENDER_HAS_GRADIENTS);
  253.     xcb_render_create_solid_fill (connection->xcb_connection, picture, color);
  254. }
  255.  
  256. void
  257. _cairo_xcb_connection_render_create_linear_gradient (cairo_xcb_connection_t         *connection,
  258.                                                      xcb_render_picture_t      picture,
  259.                                                      xcb_render_pointfix_t     p1,
  260.                                                      xcb_render_pointfix_t     p2,
  261.                                                      uint32_t                  num_stops,
  262.                                                      xcb_render_fixed_t *stops,
  263.                                                      xcb_render_color_t *colors)
  264. {
  265.     assert (connection->flags & CAIRO_XCB_RENDER_HAS_GRADIENTS);
  266.     xcb_render_create_linear_gradient (connection->xcb_connection, picture,
  267.                                        p1, p2, num_stops, stops, colors);
  268. }
  269.  
  270. void
  271. _cairo_xcb_connection_render_create_radial_gradient (cairo_xcb_connection_t         *connection,
  272.                                                      xcb_render_picture_t      picture,
  273.                                                      xcb_render_pointfix_t     inner,
  274.                                                      xcb_render_pointfix_t     outer,
  275.                                                      xcb_render_fixed_t        inner_radius,
  276.                                                      xcb_render_fixed_t        outer_radius,
  277.                                                      uint32_t                  num_stops,
  278.                                                      xcb_render_fixed_t *stops,
  279.                                                      xcb_render_color_t *colors)
  280. {
  281.     assert (connection->flags & CAIRO_XCB_RENDER_HAS_GRADIENTS);
  282.     xcb_render_create_radial_gradient (connection->xcb_connection, picture,
  283.                                        inner, outer, inner_radius, outer_radius,
  284.                                        num_stops, stops, colors);
  285. }
  286.  
  287. void
  288. _cairo_xcb_connection_render_create_conical_gradient (cairo_xcb_connection_t         *connection,
  289.                                                       xcb_render_picture_t      picture,
  290.                                                       xcb_render_pointfix_t     center,
  291.                                                       xcb_render_fixed_t        angle,
  292.                                                       uint32_t                  num_stops,
  293.                                                       xcb_render_fixed_t *stops,
  294.                                                       xcb_render_color_t *colors)
  295. {
  296.     assert (connection->flags & CAIRO_XCB_RENDER_HAS_GRADIENTS);
  297.     xcb_render_create_conical_gradient (connection->xcb_connection, picture,
  298.                                        center, angle, num_stops, stops, colors);
  299. }
  300.