tizen 2.3.1 release
[framework/graphics/cairo.git] / src / cairo-compositor-private.h
1 /* -*- Mode: c; tab-width: 8; c-basic-offset: 4; indent-tabs-mode: t; -*- */
2 /* cairo - a vector graphics library with display and print output
3  *
4  * Copyright © 2011 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 University of Southern
32  * California.
33  *
34  * Contributor(s):
35  *      Chris Wilson <chris@chris-wilson.co.uk>
36  */
37
38 #ifndef CAIRO_COMPOSITOR_PRIVATE_H
39 #define CAIRO_COMPOSITOR_PRIVATE_H
40
41 #include "cairo-composite-rectangles-private.h"
42
43 CAIRO_BEGIN_DECLS
44
45 typedef struct {
46     cairo_scaled_font_t *font;
47     cairo_glyph_t *glyphs;
48     int num_glyphs;
49     cairo_bool_t use_mask;
50     cairo_rectangle_int_t extents;
51 } cairo_composite_glyphs_info_t;
52
53 struct cairo_compositor {
54     const cairo_compositor_t *delegate;
55
56     cairo_warn cairo_int_status_t
57     (*paint)                    (const cairo_compositor_t       *compositor,
58                                  cairo_composite_rectangles_t   *extents);
59
60     cairo_warn cairo_int_status_t
61     (*mask)                     (const cairo_compositor_t       *compositor,
62                                  cairo_composite_rectangles_t   *extents);
63
64     cairo_warn cairo_int_status_t
65     (*stroke)                   (const cairo_compositor_t       *compositor,
66                                  cairo_composite_rectangles_t   *extents,
67                                  const cairo_path_fixed_t       *path,
68                                  const cairo_stroke_style_t     *style,
69                                  const cairo_matrix_t           *ctm,
70                                  const cairo_matrix_t           *ctm_inverse,
71                                  double                          tolerance,
72                                  cairo_antialias_t               antialias);
73
74     cairo_warn cairo_int_status_t
75     (*fill)                     (const cairo_compositor_t       *compositor,
76                                  cairo_composite_rectangles_t   *extents,
77                                  const cairo_path_fixed_t       *path,
78                                  cairo_fill_rule_t               fill_rule,
79                                  double                          tolerance,
80                                  cairo_antialias_t               antialias);
81
82     cairo_warn cairo_int_status_t
83     (*glyphs)                   (const cairo_compositor_t        *compositor,
84                                  cairo_composite_rectangles_t   *extents,
85                                  cairo_scaled_font_t            *scaled_font,
86                                  cairo_glyph_t                  *glyphs,
87                                  int                             num_glyphs,
88                                  cairo_bool_t                    overlap);
89     cairo_bool_t lazy_init;
90 };
91
92 struct cairo_mask_compositor {
93     cairo_compositor_t base;
94
95     cairo_int_status_t (*acquire) (void *surface);
96     cairo_int_status_t (*release) (void *surface);
97
98     cairo_int_status_t (*set_clip_region) (void          *surface,
99                                            cairo_region_t       *clip_region);
100
101     cairo_surface_t * (*pattern_to_surface) (cairo_surface_t *dst,
102                                              const cairo_pattern_t *pattern,
103                                              cairo_bool_t is_mask,
104                                              const cairo_rectangle_int_t *extents,
105                                              const cairo_rectangle_int_t *sample,
106                                              int *src_x, int *src_y);
107
108     cairo_int_status_t (*draw_image_boxes) (void *surface,
109                                             cairo_image_surface_t *image,
110                                             cairo_boxes_t *boxes,
111                                             int dx, int dy);
112
113     cairo_int_status_t (*copy_boxes) (void *surface,
114                                       cairo_surface_t *src,
115                                       cairo_boxes_t *boxes,
116                                       const cairo_rectangle_int_t *extents,
117                                       int dx, int dy);
118
119     cairo_int_status_t
120         (*fill_rectangles)      (void                    *surface,
121                                  cairo_operator_t         op,
122                                  const cairo_color_t     *color,
123                                  cairo_rectangle_int_t   *rectangles,
124                                  int                      num_rects);
125
126     cairo_int_status_t
127         (*fill_boxes)           (void                   *surface,
128                                  cairo_operator_t        op,
129                                  const cairo_color_t    *color,
130                                  cairo_boxes_t          *boxes);
131
132     cairo_int_status_t
133         (*check_composite) (const cairo_composite_rectangles_t *extents);
134
135     cairo_int_status_t
136         (*composite)            (void                   *dst,
137                                  cairo_operator_t        op,
138                                  cairo_surface_t        *src,
139                                  cairo_surface_t        *mask,
140                                  int                     src_x,
141                                  int                     src_y,
142                                  int                     mask_x,
143                                  int                     mask_y,
144                                  int                     dst_x,
145                                  int                     dst_y,
146                                  unsigned int            width,
147                                  unsigned int            height);
148
149     cairo_int_status_t
150         (*composite_boxes)      (void                   *surface,
151                                  cairo_operator_t        op,
152                                  cairo_surface_t        *source,
153                                  cairo_surface_t        *mask,
154                                  int                     src_x,
155                                  int                     src_y,
156                                  int                     mask_x,
157                                  int                     mask_y,
158                                  int                     dst_x,
159                                  int                     dst_y,
160                                  cairo_boxes_t          *boxes,
161                                  const cairo_rectangle_int_t  *extents);
162
163     cairo_int_status_t
164         (*check_composite_glyphs) (const cairo_composite_rectangles_t *extents,
165                                    cairo_scaled_font_t *scaled_font,
166                                    cairo_glyph_t *glyphs,
167                                    int *num_glyphs);
168     cairo_int_status_t
169         (*composite_glyphs)     (void                           *surface,
170                                  cairo_operator_t                op,
171                                  cairo_surface_t                *src,
172                                  int                             src_x,
173                                  int                             src_y,
174                                  int                             dst_x,
175                                  int                             dst_y,
176                                  cairo_composite_glyphs_info_t  *info);
177 };
178
179 struct cairo_traps_compositor {
180     cairo_compositor_t base;
181
182     cairo_int_status_t
183         (*acquire) (void *surface);
184
185     cairo_int_status_t
186         (*release) (void *surface);
187
188     cairo_int_status_t
189         (*set_clip_region) (void                 *surface,
190                             cairo_region_t      *clip_region);
191
192     cairo_surface_t *
193         (*pattern_to_surface) (cairo_surface_t *dst,
194                                const cairo_pattern_t *pattern,
195                                cairo_bool_t is_mask,
196                                const cairo_rectangle_int_t *extents,
197                                const cairo_rectangle_int_t *sample,
198                                int *src_x, int *src_y);
199
200     cairo_int_status_t (*draw_image_boxes) (void *surface,
201                                             cairo_image_surface_t *image,
202                                             cairo_boxes_t *boxes,
203                                             int dx, int dy);
204
205     cairo_int_status_t (*copy_boxes) (void *surface,
206                                       cairo_surface_t *src,
207                                       cairo_boxes_t *boxes,
208                                       const cairo_rectangle_int_t *extents,
209                                       int dx, int dy);
210
211     cairo_int_status_t
212         (*fill_boxes)           (void                   *surface,
213                                  cairo_operator_t        op,
214                                  const cairo_color_t    *color,
215                                  cairo_boxes_t          *boxes);
216
217     cairo_int_status_t
218         (*check_composite) (const cairo_composite_rectangles_t *extents);
219
220     cairo_int_status_t
221         (*composite)            (void                   *dst,
222                                  cairo_operator_t        op,
223                                  cairo_surface_t        *src,
224                                  cairo_surface_t        *mask,
225                                  int                     src_x,
226                                  int                     src_y,
227                                  int                     mask_x,
228                                  int                     mask_y,
229                                  int                     dst_x,
230                                  int                     dst_y,
231                                  unsigned int            width,
232                                  unsigned int            height);
233     cairo_int_status_t
234             (*lerp)             (void                   *_dst,
235                                  cairo_surface_t        *abstract_src,
236                                  cairo_surface_t        *abstract_mask,
237                                  int                    src_x,
238                                  int                    src_y,
239                                  int                    mask_x,
240                                  int                    mask_y,
241                                  int                    dst_x,
242                                  int                    dst_y,
243                                  unsigned int           width,
244                                  unsigned int           height);
245         cairo_int_status_t
246                 (*lerp_color_glyph)     (void                   *_dst,
247                                 cairo_surface_t *abstract_src,
248                                 cairo_surface_t *abstract_mask,
249                                 int                     src_x,
250                                 int                     src_y,
251                                 int                     mask_x,
252                                 int                     mask_y,
253                                 int                     dst_x,
254                                 int                     dst_y,
255                                 unsigned int            width,
256                                 unsigned int            height);
257
258     cairo_int_status_t
259         (*composite_boxes)      (void                   *surface,
260                                  cairo_operator_t        op,
261                                  cairo_surface_t        *source,
262                                  cairo_surface_t        *mask,
263                                  int                     src_x,
264                                  int                     src_y,
265                                  int                     mask_x,
266                                  int                     mask_y,
267                                  int                     dst_x,
268                                  int                     dst_y,
269                                  cairo_boxes_t          *boxes,
270                                  const cairo_rectangle_int_t  *extents);
271
272     cairo_int_status_t
273         (*composite_traps)      (void                   *dst,
274                                  cairo_operator_t        op,
275                                  cairo_surface_t        *source,
276                                  int                     src_x,
277                                  int                     src_y,
278                                  int                     dst_x,
279                                  int                     dst_y,
280                                  const cairo_rectangle_int_t *extents,
281                                  cairo_antialias_t       antialias,
282                                  cairo_traps_t          *traps);
283
284     cairo_int_status_t
285         (*composite_tristrip)   (void                   *dst,
286                                  cairo_operator_t        op,
287                                  cairo_surface_t        *source,
288                                  int                     src_x,
289                                  int                     src_y,
290                                  int                     dst_x,
291                                  int                     dst_y,
292                                  const cairo_rectangle_int_t *extents,
293                                  cairo_antialias_t       antialias,
294                                  cairo_tristrip_t       *tristrip);
295
296     cairo_int_status_t
297         (*check_composite_glyphs) (const cairo_composite_rectangles_t *extents,
298                                    cairo_scaled_font_t *scaled_font,
299                                    cairo_glyph_t *glyphs,
300                                    int *num_glyphs);
301     cairo_int_status_t
302         (*composite_glyphs)     (void                           *surface,
303                                  cairo_operator_t                op,
304                                  cairo_surface_t                *src,
305                                  int                             src_x,
306                                  int                             src_y,
307                                  int                             dst_x,
308                                  int                             dst_y,
309                                  cairo_composite_glyphs_info_t  *info);
310 };
311
312 cairo_private extern const cairo_compositor_t __cairo_no_compositor;
313 cairo_private extern const cairo_compositor_t _cairo_fallback_compositor;
314
315 cairo_private void
316 _cairo_mask_compositor_init (cairo_mask_compositor_t *compositor,
317                              const cairo_compositor_t *delegate);
318
319 cairo_private void
320 _cairo_shape_mask_compositor_init (cairo_compositor_t *compositor,
321                                    const cairo_compositor_t  *delegate);
322
323 cairo_private void
324 _cairo_traps_compositor_init (cairo_traps_compositor_t *compositor,
325                               const cairo_compositor_t *delegate);
326
327 cairo_private cairo_int_status_t
328 _cairo_compositor_paint (const cairo_compositor_t       *compositor,
329                          cairo_surface_t                *surface,
330                          cairo_operator_t                op,
331                          const cairo_pattern_t          *source,
332                          const cairo_clip_t             *clip);
333
334 cairo_private cairo_int_status_t
335 _cairo_compositor_mask (const cairo_compositor_t        *compositor,
336                         cairo_surface_t                 *surface,
337                         cairo_operator_t                 op,
338                         const cairo_pattern_t           *source,
339                         const cairo_pattern_t           *mask,
340                         const cairo_clip_t              *clip);
341
342 cairo_private cairo_int_status_t
343 _cairo_compositor_stroke (const cairo_compositor_t      *compositor,
344                           cairo_surface_t               *surface,
345                           cairo_operator_t               op,
346                           const cairo_pattern_t         *source,
347                           const cairo_path_fixed_t      *path,
348                           const cairo_stroke_style_t    *style,
349                           const cairo_matrix_t          *ctm,
350                           const cairo_matrix_t          *ctm_inverse,
351                           double                         tolerance,
352                           cairo_antialias_t              antialias,
353                           const cairo_clip_t            *clip);
354
355 cairo_private cairo_int_status_t
356 _cairo_compositor_fill (const cairo_compositor_t        *compositor,
357                         cairo_surface_t                 *surface,
358                         cairo_operator_t                 op,
359                         const cairo_pattern_t           *source,
360                         const cairo_path_fixed_t        *path,
361                         cairo_fill_rule_t                fill_rule,
362                         double                           tolerance,
363                         cairo_antialias_t                antialias,
364                         const cairo_clip_t              *clip);
365
366 cairo_private cairo_int_status_t
367 _cairo_compositor_glyphs (const cairo_compositor_t              *compositor,
368                           cairo_surface_t                       *surface,
369                           cairo_operator_t                       op,
370                           const cairo_pattern_t                 *source,
371                           cairo_glyph_t                         *glyphs,
372                           int                                    num_glyphs,
373                           cairo_scaled_font_t                   *scaled_font,
374                           const cairo_clip_t                    *clip);
375
376 CAIRO_END_DECLS
377
378 #endif /* CAIRO_COMPOSITOR_PRIVATE_H */