From b9bfad5a8a20e6548ffbaee1afaae0a907b96f00 Mon Sep 17 00:00:00 2001 From: Nicola Fontana Date: Fri, 5 Apr 2013 01:17:34 +0200 Subject: [PATCH] adg: provided cairo-gobject fallbacks Consider cairo-gobject entirely optional and implement fallbacks for every GObject wrapper provided by it, i.e. only for cairo_pattern_t. --- configure.ac | 1 - docs/adg/adg-docs.xml | 1 + src/adg/Makefile.am | 3 +- src/adg/adg-cairo-fallback.c | 81 ++++++++++++++++++++++ ...{adg-matrix-fallback.h => adg-cairo-fallback.h} | 23 ++++-- src/adg/adg-entity.c | 2 +- src/adg/adg-fill-style.c | 1 + src/adg/adg-gtk-area-gtk2.c | 2 +- src/adg/adg-gtk-area.c | 2 +- src/adg/adg-matrix.c | 31 +-------- 10 files changed, 109 insertions(+), 38 deletions(-) create mode 100644 src/adg/adg-cairo-fallback.c rename src/adg/{adg-matrix-fallback.h => adg-cairo-fallback.h} (66%) diff --git a/configure.ac b/configure.ac index 1e4e56c5..d88c8f17 100644 --- a/configure.ac +++ b/configure.ac @@ -9,7 +9,6 @@ m4_define([cpml_lt_version],[2:0:0]) m4_define([gtkdoc_prereq],[1.12])dnl Support introspection annotations m4_define([gobject_prereq],[2.10.1]) m4_define([cairo_prereq],[1.7.4]) -m4_define([cairo_gobject_prereq],cairo_prereq) m4_define([gtk2_prereq],[2.12.0]) m4_define([gtk3_prereq],[3.0.0]) m4_define([pangocairo_prereq],[1.18.0]) diff --git a/docs/adg/adg-docs.xml b/docs/adg/adg-docs.xml index b0656164..53b6a778 100644 --- a/docs/adg/adg-docs.xml +++ b/docs/adg/adg-docs.xml @@ -24,6 +24,7 @@ GBoxed types + diff --git a/src/adg/Makefile.am b/src/adg/Makefile.am index 583ef17e..7fb51173 100644 --- a/src/adg/Makefile.am +++ b/src/adg/Makefile.am @@ -53,6 +53,7 @@ built_h_sources= adg-type-builtins.h private_h_sources= adg-adim-private.h \ adg-alignment-private.h \ adg-arrow-private.h \ + adg-cairo-fallback.h \ adg-canvas-private.h \ adg-color-style-private.h \ adg-container-private.h \ @@ -70,7 +71,6 @@ private_h_sources= adg-adim-private.h \ adg-line-style-private.h \ adg-logo-private.h \ adg-marker-private.h \ - adg-matrix-fallback.h \ adg-model-private.h \ adg-path-private.h \ adg-projection-private.h \ @@ -87,6 +87,7 @@ built_private_h_sources= adg-marshal.h c_sources= adg-adim.c \ adg-alignment.c \ adg-arrow.c \ + adg-cairo-fallback.c \ adg-canvas.c \ adg-color-style.c \ adg-container.c \ diff --git a/src/adg/adg-cairo-fallback.c b/src/adg/adg-cairo-fallback.c new file mode 100644 index 00000000..eb20a6f5 --- /dev/null +++ b/src/adg/adg-cairo-fallback.c @@ -0,0 +1,81 @@ +/* ADG - Automatic Drawing Generation + * Copyright (C) 2007,2008,2009,2010,2011,2012,2013 Nicola Fontana + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ + + +/** + * SECTION:adg-cairo-fallback + * @title: Cairo wrappers + * @short_description: GObject wrappers for cairo structs. + * + * If GObject support has not been compiled in cairo, either by + * explicitely disabling it or because the installed cairo version + * does not provide them, a compatible selection of wrappers used + * by ADG is provided anyway. + * + * Since: 1.0 + **/ + + +#include "adg-internal.h" +#include +#include + +#include "adg-cairo-fallback.h" + + +#ifdef ADG_MISSING_GBOXED_MATRIX + +GType +cairo_gobject_matrix_get_type(void) +{ + static GType matrix_type = 0; + + if (G_UNLIKELY(matrix_type == 0)) + matrix_type = g_boxed_type_register_static("CairoMatrix", + (GBoxedCopyFunc) cairo_gobject_cairo_matrix_copy, + g_free); + + return matrix_type; +} + +cairo_matrix_t * +cairo_gobject_cairo_matrix_copy(const cairo_matrix_t *matrix) +{ + return g_memdup(matrix, sizeof(cairo_matrix_t)); +} + +#endif /* ADG_MISSING_GBOXED_MATRIX */ + + +#ifdef ADG_MISSING_GBOXED_PATTERN + +GType +cairo_gobject_pattern_get_type(void) +{ + static GType pattern_type = 0; + + if (G_UNLIKELY(pattern_type == 0)) + pattern_type = g_boxed_type_register_static("CairoPattern", + (GBoxedCopyFunc) cairo_pattern_reference, + (GBoxedFreeFunc) cairo_pattern_destroy); + + return pattern_type; +} + +#endif /* ADG_MISSING_GBOXED_PATTERN */ diff --git a/src/adg/adg-matrix-fallback.h b/src/adg/adg-cairo-fallback.h similarity index 66% rename from src/adg/adg-matrix-fallback.h rename to src/adg/adg-cairo-fallback.h index a598c86a..821d0837 100644 --- a/src/adg/adg-matrix-fallback.h +++ b/src/adg/adg-cairo-fallback.h @@ -18,14 +18,17 @@ */ -#ifndef __ADG_MATRIX_FALLBACK_H__ -#define __ADG_MATRIX_FALLBACK_H__ +#ifndef __ADG_CAIRO_FALLBACK_H__ +#define __ADG_CAIRO_FALLBACK_H__ G_BEGIN_DECLS -/* Backward compatibility: old cairo releases did not wrap cairo_matrix_t */ +/* Provide some GObject wrappers around cairo_matrix_t and cairo_pattern_t + * if cairo-gobject support has not been provided by cairo itself or + * if the cairo version is too old to provide them. */ + #ifndef CAIRO_GOBJECT_TYPE_MATRIX @@ -40,7 +43,19 @@ cairo_matrix_t *cairo_gobject_cairo_matrix_copy #endif /* CAIRO_GOBJECT_TYPE_MATRIX */ +#ifndef CAIRO_GOBJECT_TYPE_PATTERN + +#define ADG_MISSING_GBOXED_PATTERN 1 +#define CAIRO_GOBJECT_TYPE_PATTERN (cairo_gobject_pattern_get_type()) + +GType cairo_gobject_pattern_get_type (void) G_GNUC_CONST; +cairo_pattern_t * + cairo_gobject_cairo_pattern_copy (const cairo_pattern_t *pattern); + +#endif /* CAIRO_GOBJECT_TYPE_PATTERN */ + + G_END_DECLS -#endif /* __ADG_MATRIX_FALLBACK_H__ */ +#endif /* __ADG_CAIRO_FALLBACK_H__ */ diff --git a/src/adg/adg-entity.c b/src/adg/adg-entity.c index c2c872f1..669c9cb3 100644 --- a/src/adg/adg-entity.c +++ b/src/adg/adg-entity.c @@ -84,7 +84,7 @@ #include "adg-style.h" #include "adg-model.h" #include "adg-point.h" -#include "adg-matrix-fallback.h" +#include "adg-cairo-fallback.h" #include "adg-entity-private.h" diff --git a/src/adg/adg-fill-style.c b/src/adg/adg-fill-style.c index 9903afb7..8e8b0dd4 100644 --- a/src/adg/adg-fill-style.c +++ b/src/adg/adg-fill-style.c @@ -53,6 +53,7 @@ #include "adg-internal.h" #include "adg-style.h" +#include "adg-cairo-fallback.h" #include "adg-fill-style.h" #include "adg-fill-style-private.h" diff --git a/src/adg/adg-gtk-area-gtk2.c b/src/adg/adg-gtk-area-gtk2.c index 1855bb25..57eced55 100644 --- a/src/adg/adg-gtk-area-gtk2.c +++ b/src/adg/adg-gtk-area-gtk2.c @@ -68,7 +68,7 @@ #include "adg-title-block.h" #include #include "adg-gtk-utils.h" -#include "adg-matrix-fallback.h" +#include "adg-cairo-fallback.h" #include "adg-gtk-area.h" #include "adg-gtk-area-private.h" diff --git a/src/adg/adg-gtk-area.c b/src/adg/adg-gtk-area.c index 464cffe3..6921dc40 100644 --- a/src/adg/adg-gtk-area.c +++ b/src/adg/adg-gtk-area.c @@ -84,7 +84,7 @@ #include "adg-title-block.h" #include #include "adg-gtk-utils.h" -#include "adg-matrix-fallback.h" +#include "adg-cairo-fallback.h" #include "adg-gtk-area.h" #include "adg-gtk-area-private.h" diff --git a/src/adg/adg-matrix.c b/src/adg/adg-matrix.c index 469e1553..059f086d 100644 --- a/src/adg/adg-matrix.c +++ b/src/adg/adg-matrix.c @@ -24,9 +24,8 @@ * @title: Matrix * @short_description: #cairo_matrix_t enhancements and utilities. * - * This API provides a #GBoxed wrapper around #cairo_matrix_t - * (if not yet provided by cairo-gobject) * and augments its methods - * with some useful addition. + * The following functions augment the cairo_matrix_t available methods + * providing some useful addition. * * Since: 1.0 **/ @@ -36,32 +35,6 @@ #include #include -#include "adg-matrix-fallback.h" - - -#ifdef ADG_MISSING_GBOXED_MATRIX - -GType -cairo_gobject_matrix_get_type(void) -{ - static GType matrix_type = 0; - - if (G_UNLIKELY(matrix_type == 0)) - matrix_type = g_boxed_type_register_static("CairoMatrix", - (GBoxedCopyFunc) cairo_gobject_cairo_matrix_copy, - g_free); - - return matrix_type; -} - -cairo_matrix_t * -cairo_gobject_cairo_matrix_copy(const cairo_matrix_t *matrix) -{ - return g_memdup(matrix, sizeof(cairo_matrix_t)); -} - -#endif /* ADG_MISSING_GBOXED_MATRIX */ - /** * adg_matrix_identity: -- 2.11.4.GIT