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 © 2005 Red Hat, Inc.
  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.  * The Original Code is the cairo graphics library.
  29.  *
  30.  * The Initial Developer of the Original Code is Red Hat, Inc.
  31.  *
  32.  * Contributor(s):
  33.  *      Carl D. Worth <cworth@redhat.com>
  34.  */
  35.  
  36. #ifndef CAIRO_GSTATE_PRIVATE_H
  37. #define CAIRO_GSTATE_PRIVATE_H
  38.  
  39. #include "cairo-clip-private.h"
  40.  
  41. struct _cairo_gstate {
  42.     cairo_operator_t op;
  43.  
  44.     double opacity;
  45.     double tolerance;
  46.     cairo_antialias_t antialias;
  47.  
  48.     cairo_stroke_style_t stroke_style;
  49.  
  50.     cairo_fill_rule_t fill_rule;
  51.  
  52.     cairo_font_face_t *font_face;
  53.     cairo_scaled_font_t *scaled_font;   /* Specific to the current CTM */
  54.     cairo_scaled_font_t *previous_scaled_font;  /* holdover */
  55.     cairo_matrix_t font_matrix;
  56.     cairo_font_options_t font_options;
  57.  
  58.     cairo_clip_t *clip;
  59.  
  60.     cairo_surface_t *target;            /* The target to which all rendering is directed */
  61.     cairo_surface_t *parent_target;     /* The previous target which was receiving rendering */
  62.     cairo_surface_t *original_target;   /* The original target the initial gstate was created with */
  63.  
  64.     /* the user is allowed to update the device after we have cached the matrices... */
  65.     cairo_observer_t device_transform_observer;
  66.  
  67.     cairo_matrix_t ctm;
  68.     cairo_matrix_t ctm_inverse;
  69.     cairo_matrix_t source_ctm_inverse; /* At the time ->source was set */
  70.     cairo_bool_t is_identity;
  71.  
  72.     cairo_pattern_t *source;
  73.  
  74.     struct _cairo_gstate *next;
  75. };
  76.  
  77. /* cairo-gstate.c */
  78. cairo_private cairo_status_t
  79. _cairo_gstate_init (cairo_gstate_t  *gstate,
  80.                     cairo_surface_t *target);
  81.  
  82. cairo_private void
  83. _cairo_gstate_fini (cairo_gstate_t *gstate);
  84.  
  85. cairo_private cairo_status_t
  86. _cairo_gstate_save (cairo_gstate_t **gstate, cairo_gstate_t **freelist);
  87.  
  88. cairo_private cairo_status_t
  89. _cairo_gstate_restore (cairo_gstate_t **gstate, cairo_gstate_t **freelist);
  90.  
  91. cairo_private cairo_bool_t
  92. _cairo_gstate_is_group (cairo_gstate_t *gstate);
  93.  
  94. cairo_private cairo_status_t
  95. _cairo_gstate_redirect_target (cairo_gstate_t *gstate, cairo_surface_t *child);
  96.  
  97. cairo_private cairo_surface_t *
  98. _cairo_gstate_get_target (cairo_gstate_t *gstate);
  99.  
  100. cairo_private cairo_surface_t *
  101. _cairo_gstate_get_original_target (cairo_gstate_t *gstate);
  102.  
  103. cairo_private cairo_clip_t *
  104. _cairo_gstate_get_clip (cairo_gstate_t *gstate);
  105.  
  106. cairo_private cairo_status_t
  107. _cairo_gstate_set_source (cairo_gstate_t *gstate, cairo_pattern_t *source);
  108.  
  109. cairo_private cairo_pattern_t *
  110. _cairo_gstate_get_source (cairo_gstate_t *gstate);
  111.  
  112. cairo_private cairo_status_t
  113. _cairo_gstate_set_operator (cairo_gstate_t *gstate, cairo_operator_t op);
  114.  
  115. cairo_private cairo_operator_t
  116. _cairo_gstate_get_operator (cairo_gstate_t *gstate);
  117.  
  118. cairo_private cairo_status_t
  119. _cairo_gstate_set_opacity (cairo_gstate_t *gstate, double opacity);
  120.  
  121. cairo_private double
  122. _cairo_gstate_get_opacity (cairo_gstate_t *gstate);
  123.  
  124. cairo_private cairo_status_t
  125. _cairo_gstate_set_tolerance (cairo_gstate_t *gstate, double tolerance);
  126.  
  127. cairo_private double
  128. _cairo_gstate_get_tolerance (cairo_gstate_t *gstate);
  129.  
  130. cairo_private cairo_status_t
  131. _cairo_gstate_set_fill_rule (cairo_gstate_t *gstate, cairo_fill_rule_t fill_rule);
  132.  
  133. cairo_private cairo_fill_rule_t
  134. _cairo_gstate_get_fill_rule (cairo_gstate_t *gstate);
  135.  
  136. cairo_private cairo_status_t
  137. _cairo_gstate_set_line_width (cairo_gstate_t *gstate, double width);
  138.  
  139. cairo_private double
  140. _cairo_gstate_get_line_width (cairo_gstate_t *gstate);
  141.  
  142. cairo_private cairo_status_t
  143. _cairo_gstate_set_line_cap (cairo_gstate_t *gstate, cairo_line_cap_t line_cap);
  144.  
  145. cairo_private cairo_line_cap_t
  146. _cairo_gstate_get_line_cap (cairo_gstate_t *gstate);
  147.  
  148. cairo_private cairo_status_t
  149. _cairo_gstate_set_line_join (cairo_gstate_t *gstate, cairo_line_join_t line_join);
  150.  
  151. cairo_private cairo_line_join_t
  152. _cairo_gstate_get_line_join (cairo_gstate_t *gstate);
  153.  
  154. cairo_private cairo_status_t
  155. _cairo_gstate_set_dash (cairo_gstate_t *gstate, const double *dash, int num_dashes, double offset);
  156.  
  157. cairo_private void
  158. _cairo_gstate_get_dash (cairo_gstate_t *gstate, double *dash, int *num_dashes, double *offset);
  159.  
  160. cairo_private cairo_status_t
  161. _cairo_gstate_set_miter_limit (cairo_gstate_t *gstate, double limit);
  162.  
  163. cairo_private double
  164. _cairo_gstate_get_miter_limit (cairo_gstate_t *gstate);
  165.  
  166. cairo_private void
  167. _cairo_gstate_get_matrix (cairo_gstate_t *gstate, cairo_matrix_t *matrix);
  168.  
  169. cairo_private cairo_status_t
  170. _cairo_gstate_translate (cairo_gstate_t *gstate, double tx, double ty);
  171.  
  172. cairo_private cairo_status_t
  173. _cairo_gstate_scale (cairo_gstate_t *gstate, double sx, double sy);
  174.  
  175. cairo_private cairo_status_t
  176. _cairo_gstate_rotate (cairo_gstate_t *gstate, double angle);
  177.  
  178. cairo_private cairo_status_t
  179. _cairo_gstate_transform (cairo_gstate_t       *gstate,
  180.                          const cairo_matrix_t *matrix);
  181.  
  182. cairo_private cairo_status_t
  183. _cairo_gstate_set_matrix (cairo_gstate_t       *gstate,
  184.                           const cairo_matrix_t *matrix);
  185.  
  186. cairo_private void
  187. _cairo_gstate_identity_matrix (cairo_gstate_t *gstate);
  188.  
  189. cairo_private void
  190. _cairo_gstate_user_to_device (cairo_gstate_t *gstate, double *x, double *y);
  191.  
  192. cairo_private void
  193. _cairo_gstate_user_to_device_distance (cairo_gstate_t *gstate, double *dx, double *dy);
  194.  
  195. cairo_private void
  196. _cairo_gstate_device_to_user (cairo_gstate_t *gstate, double *x, double *y);
  197.  
  198. cairo_private void
  199. _cairo_gstate_device_to_user_distance (cairo_gstate_t *gstate, double *dx, double *dy);
  200.  
  201. cairo_private void
  202. _do_cairo_gstate_user_to_backend (cairo_gstate_t *gstate, double *x, double *y);
  203.  
  204. static inline void
  205. _cairo_gstate_user_to_backend (cairo_gstate_t *gstate, double *x, double *y)
  206. {
  207.     if (! gstate->is_identity)
  208.         _do_cairo_gstate_user_to_backend (gstate, x, y);
  209. }
  210.  
  211. cairo_private void
  212. _do_cairo_gstate_user_to_backend_distance (cairo_gstate_t *gstate, double *x, double *y);
  213.  
  214. static inline void
  215. _cairo_gstate_user_to_backend_distance (cairo_gstate_t *gstate, double *x, double *y)
  216. {
  217.     if (! gstate->is_identity)
  218.         _do_cairo_gstate_user_to_backend_distance (gstate, x, y);
  219. }
  220.  
  221. cairo_private void
  222. _do_cairo_gstate_backend_to_user (cairo_gstate_t *gstate, double *x, double *y);
  223.  
  224. static inline void
  225. _cairo_gstate_backend_to_user (cairo_gstate_t *gstate, double *x, double *y)
  226. {
  227.     if (! gstate->is_identity)
  228.         _do_cairo_gstate_backend_to_user (gstate, x, y);
  229. }
  230.  
  231. cairo_private void
  232. _do_cairo_gstate_backend_to_user_distance (cairo_gstate_t *gstate, double *x, double *y);
  233.  
  234. static inline void
  235. _cairo_gstate_backend_to_user_distance (cairo_gstate_t *gstate, double *x, double *y)
  236. {
  237.     if (! gstate->is_identity)
  238.         _do_cairo_gstate_backend_to_user_distance (gstate, x, y);
  239. }
  240.  
  241. cairo_private void
  242. _cairo_gstate_backend_to_user_rectangle (cairo_gstate_t *gstate,
  243.                                          double *x1, double *y1,
  244.                                          double *x2, double *y2,
  245.                                          cairo_bool_t *is_tight);
  246.  
  247. cairo_private void
  248. _cairo_gstate_path_extents (cairo_gstate_t     *gstate,
  249.                             cairo_path_fixed_t *path,
  250.                             double *x1, double *y1,
  251.                             double *x2, double *y2);
  252.  
  253. cairo_private cairo_status_t
  254. _cairo_gstate_paint (cairo_gstate_t *gstate);
  255.  
  256. cairo_private cairo_status_t
  257. _cairo_gstate_mask (cairo_gstate_t  *gstate,
  258.                     cairo_pattern_t *mask);
  259.  
  260. cairo_private cairo_status_t
  261. _cairo_gstate_stroke (cairo_gstate_t *gstate, cairo_path_fixed_t *path);
  262.  
  263. cairo_private cairo_status_t
  264. _cairo_gstate_fill (cairo_gstate_t *gstate, cairo_path_fixed_t *path);
  265.  
  266. cairo_private cairo_status_t
  267. _cairo_gstate_copy_page (cairo_gstate_t *gstate);
  268.  
  269. cairo_private cairo_status_t
  270. _cairo_gstate_show_page (cairo_gstate_t *gstate);
  271.  
  272. cairo_private cairo_status_t
  273. _cairo_gstate_stroke_extents (cairo_gstate_t     *gstate,
  274.                               cairo_path_fixed_t *path,
  275.                               double *x1, double *y1,
  276.                               double *x2, double *y2);
  277.  
  278. cairo_private cairo_status_t
  279. _cairo_gstate_fill_extents (cairo_gstate_t     *gstate,
  280.                             cairo_path_fixed_t *path,
  281.                             double *x1, double *y1,
  282.                             double *x2, double *y2);
  283.  
  284. cairo_private cairo_status_t
  285. _cairo_gstate_in_stroke (cairo_gstate_t     *gstate,
  286.                          cairo_path_fixed_t *path,
  287.                          double              x,
  288.                          double              y,
  289.                          cairo_bool_t       *inside_ret);
  290.  
  291. cairo_private cairo_bool_t
  292. _cairo_gstate_in_fill (cairo_gstate_t     *gstate,
  293.                        cairo_path_fixed_t *path,
  294.                        double              x,
  295.                        double              y);
  296.  
  297. cairo_private cairo_bool_t
  298. _cairo_gstate_in_clip (cairo_gstate_t     *gstate,
  299.                        double              x,
  300.                        double              y);
  301.  
  302. cairo_private cairo_status_t
  303. _cairo_gstate_clip (cairo_gstate_t *gstate, cairo_path_fixed_t *path);
  304.  
  305. cairo_private cairo_status_t
  306. _cairo_gstate_reset_clip (cairo_gstate_t *gstate);
  307.  
  308. cairo_private cairo_bool_t
  309. _cairo_gstate_clip_extents (cairo_gstate_t *gstate,
  310.                             double         *x1,
  311.                             double         *y1,
  312.                             double         *x2,
  313.                             double         *y2);
  314.  
  315. cairo_private cairo_rectangle_list_t*
  316. _cairo_gstate_copy_clip_rectangle_list (cairo_gstate_t *gstate);
  317.  
  318. cairo_private cairo_status_t
  319. _cairo_gstate_show_surface (cairo_gstate_t      *gstate,
  320.                             cairo_surface_t     *surface,
  321.                             double               x,
  322.                             double               y,
  323.                             double              width,
  324.                             double              height);
  325.  
  326. cairo_private cairo_status_t
  327. _cairo_gstate_set_font_size (cairo_gstate_t *gstate,
  328.                              double          size);
  329.  
  330. cairo_private void
  331. _cairo_gstate_get_font_matrix (cairo_gstate_t *gstate,
  332.                                cairo_matrix_t *matrix);
  333.  
  334. cairo_private cairo_status_t
  335. _cairo_gstate_set_font_matrix (cairo_gstate_t       *gstate,
  336.                                const cairo_matrix_t *matrix);
  337.  
  338. cairo_private void
  339. _cairo_gstate_get_font_options (cairo_gstate_t       *gstate,
  340.                                 cairo_font_options_t *options);
  341.  
  342. cairo_private void
  343. _cairo_gstate_set_font_options (cairo_gstate_t             *gstate,
  344.                                 const cairo_font_options_t *options);
  345.  
  346. cairo_private cairo_status_t
  347. _cairo_gstate_get_font_face (cairo_gstate_t     *gstate,
  348.                              cairo_font_face_t **font_face);
  349.  
  350. cairo_private cairo_status_t
  351. _cairo_gstate_get_scaled_font (cairo_gstate_t       *gstate,
  352.                                cairo_scaled_font_t **scaled_font);
  353.  
  354. cairo_private cairo_status_t
  355. _cairo_gstate_get_font_extents (cairo_gstate_t *gstate,
  356.                                 cairo_font_extents_t *extents);
  357.  
  358. cairo_private cairo_status_t
  359. _cairo_gstate_set_font_face (cairo_gstate_t    *gstate,
  360.                              cairo_font_face_t *font_face);
  361.  
  362. cairo_private cairo_status_t
  363. _cairo_gstate_glyph_extents (cairo_gstate_t *gstate,
  364.                              const cairo_glyph_t *glyphs,
  365.                              int num_glyphs,
  366.                              cairo_text_extents_t *extents);
  367.  
  368. cairo_private cairo_status_t
  369. _cairo_gstate_show_text_glyphs (cairo_gstate_t             *gstate,
  370.                                 const cairo_glyph_t        *glyphs,
  371.                                 int                         num_glyphs,
  372.                                 cairo_glyph_text_info_t    *info);
  373.  
  374. cairo_private cairo_status_t
  375. _cairo_gstate_glyph_path (cairo_gstate_t      *gstate,
  376.                           const cairo_glyph_t *glyphs,
  377.                           int                  num_glyphs,
  378.                           cairo_path_fixed_t  *path);
  379.  
  380. cairo_private cairo_status_t
  381. _cairo_gstate_set_antialias (cairo_gstate_t *gstate,
  382.                              cairo_antialias_t antialias);
  383.  
  384. cairo_private cairo_antialias_t
  385. _cairo_gstate_get_antialias (cairo_gstate_t *gstate);
  386.  
  387. #endif /* CAIRO_GSTATE_PRIVATE_H */
  388.