From 908418cb4d43e387d06698a43626ac9a663d6c2a Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Fri, 20 Apr 2007 02:25:55 -0400 Subject: [PATCH] [cairo-surface] Move cairo_surface_t struct in cairo-surface-private.h --- src/Makefile.am | 2 + src/cairo-surface-private.h | 96 ++++++++++++++++++++++++++++++++ src/cairo-types-private.h | 65 +++++++++++++++++++++ src/cairo-xlib-private.h | 1 - src/cairo-xlib-surface-private.h | 2 + src/cairoint.h | 74 +----------------------- 6 files changed, 167 insertions(+), 73 deletions(-) create mode 100644 src/cairo-surface-private.h create mode 100644 src/cairo-types-private.h diff --git a/src/Makefile.am b/src/Makefile.am index 2c19b835b..eb8edbd94 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -213,7 +213,9 @@ libcairo_la_SOURCES = \ cairo-surface.c \ cairo-surface-fallback.c \ cairo-surface-fallback-private.h \ + cairo-surface-private.h \ cairo-traps.c \ + cairo-types-private.h \ cairo-pattern.c \ cairo-unicode.c \ cairo-output-stream.c \ diff --git a/src/cairo-surface-private.h b/src/cairo-surface-private.h new file mode 100644 index 000000000..6193cf805 --- /dev/null +++ b/src/cairo-surface-private.h @@ -0,0 +1,96 @@ +/* cairo - a vector graphics library with display and print output + * + * Copyright © 2002 University of Southern California + * Copyright © 2005 Red Hat, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it either under the terms of the GNU Lesser General Public + * License version 2.1 as published by the Free Software Foundation + * (the "LGPL") or, at your option, under the terms of the Mozilla + * Public License Version 1.1 (the "MPL"). If you do not alter this + * notice, a recipient may use your version of this file under either + * the MPL or the LGPL. + * + * You should have received a copy of the LGPL along with this library + * in the file COPYING-LGPL-2.1; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * You should have received a copy of the MPL along with this library + * in the file COPYING-MPL-1.1 + * + * The contents of this file are subject to the Mozilla Public License + * Version 1.1 (the "License"); you may not use this file except in + * compliance with the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY + * OF ANY KIND, either express or implied. See the LGPL or the MPL for + * the specific language governing rights and limitations. + * + * The Original Code is the cairo graphics library. + * + * The Initial Developer of the Original Code is University of Southern + * California. + * + * Contributor(s): + * Carl D. Worth + */ + +#ifndef CAIRO_SURFACE_PRIVATE_H +#define CAIRO_SURFACE_PRIVATE_H + +#include "cairo.h" + +#include "cairo-types-private.h" + +struct _cairo_surface { + const cairo_surface_backend_t *backend; + + /* We allow surfaces to override the backend->type by shoving something + * else into surface->type. This is for "wrapper" surfaces that want to + * hide their internal type from the user-level API. */ + cairo_surface_type_t type; + + cairo_content_t content; + + unsigned int ref_count; + cairo_status_t status; + cairo_bool_t finished; + cairo_user_data_array_t user_data; + + cairo_matrix_t device_transform; + cairo_matrix_t device_transform_inverse; + + double x_fallback_resolution; + double y_fallback_resolution; + + cairo_clip_t *clip; + + /* + * Each time a clip region is modified, it gets the next value in this + * sequence. This means that clip regions for this surface are uniquely + * identified and updates to the clip can be readily identified + */ + unsigned int next_clip_serial; + /* + * The serial number of the current clip. This is set when + * the surface clipping is set. The gstate can then cheaply + * check whether the surface clipping is already correct before + * performing a rendering operation. + * + * The special value '0' is reserved for the unclipped case. + */ + unsigned int current_clip_serial; + + /* A "snapshot" surface is immutable. See _cairo_surface_snapshot. */ + cairo_bool_t is_snapshot; + + /* + * Surface font options, falling back to backend's default options, + * and set using _cairo_surface_set_font_options(), and propagated by + * cairo_surface_create_similar(). + */ + cairo_bool_t has_font_options; + cairo_font_options_t font_options; +}; + +#endif /* CAIRO_SURFACE_PRIVATE_H */ diff --git a/src/cairo-types-private.h b/src/cairo-types-private.h new file mode 100644 index 000000000..93b6fb6eb --- /dev/null +++ b/src/cairo-types-private.h @@ -0,0 +1,65 @@ +/* cairo - a vector graphics library with display and print output + * + * Copyright © 2002 University of Southern California + * Copyright © 2005 Red Hat, Inc. + * + * This library is free software; you can redistribute it and/or + * modify it either under the terms of the GNU Lesser General Public + * License version 2.1 as published by the Free Software Foundation + * (the "LGPL") or, at your option, under the terms of the Mozilla + * Public License Version 1.1 (the "MPL"). If you do not alter this + * notice, a recipient may use your version of this file under either + * the MPL or the LGPL. + * + * You should have received a copy of the LGPL along with this library + * in the file COPYING-LGPL-2.1; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * You should have received a copy of the MPL along with this library + * in the file COPYING-MPL-1.1 + * + * The contents of this file are subject to the Mozilla Public License + * Version 1.1 (the "License"); you may not use this file except in + * compliance with the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY + * OF ANY KIND, either express or implied. See the LGPL or the MPL for + * the specific language governing rights and limitations. + * + * The Original Code is the cairo graphics library. + * + * The Initial Developer of the Original Code is University of Southern + * California. + * + * Contributor(s): + * Carl D. Worth + */ + +#ifndef CAIRO_TYPES_PRIVATE_H +#define CAIRO_TYPES_PRIVATE_H + +typedef struct _cairo_array cairo_array_t; +struct _cairo_array { + unsigned int size; + unsigned int num_elements; + unsigned int element_size; + char **elements; + + cairo_bool_t is_snapshot; +}; + +typedef cairo_array_t cairo_user_data_array_t; + +struct _cairo_font_options { + cairo_antialias_t antialias; + cairo_subpixel_order_t subpixel_order; + cairo_hint_style_t hint_style; + cairo_hint_metrics_t hint_metrics; +}; + +typedef struct _cairo_surface_backend cairo_surface_backend_t; +typedef struct _cairo_clip cairo_clip_t; + +typedef struct _cairo_xlib_screen_info cairo_xlib_screen_info_t; + +#endif /* CAIRO_TYPES_PRIVATE_H */ diff --git a/src/cairo-xlib-private.h b/src/cairo-xlib-private.h index e71534380..1fd47fa71 100644 --- a/src/cairo-xlib-private.h +++ b/src/cairo-xlib-private.h @@ -36,7 +36,6 @@ #include "cairoint.h" #include "cairo-xlib.h" -typedef struct _cairo_xlib_screen_info cairo_xlib_screen_info_t; typedef struct _cairo_xlib_hook cairo_xlib_hook_t; struct _cairo_xlib_hook { diff --git a/src/cairo-xlib-surface-private.h b/src/cairo-xlib-surface-private.h index 7038d85e3..15724d347 100644 --- a/src/cairo-xlib-surface-private.h +++ b/src/cairo-xlib-surface-private.h @@ -35,6 +35,8 @@ #include "cairo-xlib.h" +#include "cairo-surface-private.h" + typedef struct _cairo_xlib_surface cairo_xlib_surface_t; struct _cairo_xlib_surface { diff --git a/src/cairoint.h b/src/cairoint.h index 549cc5113..49949e591 100644 --- a/src/cairoint.h +++ b/src/cairoint.h @@ -244,6 +244,7 @@ be32_to_cpu(uint32_t v) #endif +#include "cairo-types-private.h" #include "cairo-hash-private.h" #include "cairo-cache-private.h" @@ -348,7 +349,6 @@ typedef enum _cairo_clip_mode { CAIRO_CLIP_MODE_MASK } cairo_clip_mode_t; typedef struct _cairo_clip_path cairo_clip_path_t; -typedef struct _cairo_clip cairo_clip_t; typedef struct _cairo_edge { cairo_line_t edge; @@ -400,8 +400,6 @@ typedef struct _cairo_pen { typedef struct _cairo_color cairo_color_t; typedef struct _cairo_image_surface cairo_image_surface_t; -typedef struct _cairo_surface_backend cairo_surface_backend_t; - cairo_private void _cairo_box_round_to_rectangle (cairo_box_t *box, cairo_rectangle_int16_t *rectangle); @@ -410,16 +408,6 @@ _cairo_rectangle_intersect (cairo_rectangle_int16_t *dest, cairo_rectangle_int16 /* cairo_array.c structures and functions */ -typedef struct _cairo_array cairo_array_t; -struct _cairo_array { - unsigned int size; - unsigned int num_elements; - unsigned int element_size; - char **elements; - - cairo_bool_t is_snapshot; -}; - cairo_private void _cairo_array_init (cairo_array_t *array, int element_size); @@ -461,8 +449,6 @@ _cairo_array_num_elements (cairo_array_t *array); cairo_private int _cairo_array_size (cairo_array_t *array); -typedef cairo_array_t cairo_user_data_array_t; - cairo_private void _cairo_user_data_array_init (cairo_user_data_array_t *array); @@ -496,13 +482,6 @@ typedef struct _cairo_unscaled_font { const cairo_unscaled_font_backend_t *backend; } cairo_unscaled_font_t; -struct _cairo_font_options { - cairo_antialias_t antialias; - cairo_subpixel_order_t subpixel_order; - cairo_hint_style_t hint_style; - cairo_hint_metrics_t hint_metrics; -}; - typedef struct _cairo_scaled_glyph { cairo_cache_entry_t cache_entry; /* hash is glyph index */ cairo_scaled_font_t *scaled_font; /* font the glyph lives in */ @@ -993,56 +972,7 @@ typedef struct _cairo_format_masks { unsigned long blue_mask; } cairo_format_masks_t; -struct _cairo_surface { - const cairo_surface_backend_t *backend; - - /* We allow surfaces to override the backend->type by shoving something - * else into surface->type. This is for "wrapper" surfaces that want to - * hide their internal type from the user-level API. */ - cairo_surface_type_t type; - - cairo_content_t content; - - unsigned int ref_count; - cairo_status_t status; - cairo_bool_t finished; - cairo_user_data_array_t user_data; - - cairo_matrix_t device_transform; - cairo_matrix_t device_transform_inverse; - - double x_fallback_resolution; - double y_fallback_resolution; - - cairo_clip_t *clip; - - /* - * Each time a clip region is modified, it gets the next value in this - * sequence. This means that clip regions for this surface are uniquely - * identified and updates to the clip can be readily identified - */ - unsigned int next_clip_serial; - /* - * The serial number of the current clip. This is set when - * the surface clipping is set. The gstate can then cheaply - * check whether the surface clipping is already correct before - * performing a rendering operation. - * - * The special value '0' is reserved for the unclipped case. - */ - unsigned int current_clip_serial; - - /* A "snapshot" surface is immutable. See _cairo_surface_snapshot. */ - cairo_bool_t is_snapshot; - - /* - * Surface font options, falling back to backend's default options, - * and set using _cairo_surface_set_font_options(), and propagated by - * cairo_surface_create_similar(). - */ - cairo_bool_t has_font_options; - cairo_font_options_t font_options; -}; +#include "cairo-surface-private.h" struct _cairo_image_surface { cairo_surface_t base;