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