From c214cff55ce539d004d069a484dac3988953cb11 Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Sun, 14 Aug 2011 15:17:16 +0200 Subject: [PATCH] Start adding gobject-introspection support --- configure.ac | 13 ++++++++++- src/Makefile.am | 43 ++++++++++++++++------------------- src/hb-common.h | 1 + src/hb-glib.cc | 3 --- src/hb-gobject.cc | 63 +++++++++++++++++++++++++++++++++++++++++++++++++++ src/hb-gobject.h | 68 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 6 files changed, 163 insertions(+), 28 deletions(-) create mode 100644 src/hb-gobject.cc create mode 100644 src/hb-gobject.h diff --git a/configure.ac b/configure.ac index d960856..6cd1018 100644 --- a/configure.ac +++ b/configure.ac @@ -74,12 +74,23 @@ fi dnl ========================================================================== PKG_CHECK_MODULES(GLIB, glib-2.0 >= 2.16, have_glib=true, have_glib=false) -PKG_CHECK_MODULES(GTHREAD, gthread-2.0, , have_glib=false) if $have_glib; then AC_DEFINE(HAVE_GLIB, 1, [Have glib2 library]) fi AM_CONDITIONAL(HAVE_GLIB, $have_glib) +PKG_CHECK_MODULES(GTHREAD, gthread-2.0, have_gthread=true, have_gthread=false) +if $have_gthread; then + AC_DEFINE(HAVE_GTHREAD, 1, [Have gthread2 library]) +fi +AM_CONDITIONAL(HAVE_GTHREAD, $have_gthread) + +PKG_CHECK_MODULES(GOBJECT, gobject-2.0, have_gobject=true, have_gobject=false) +if $have_gobject; then + AC_DEFINE(HAVE_GOBJECT, 1, [Have gobject2 library]) +fi +AM_CONDITIONAL(HAVE_GOBJECT, $have_gobject) + dnl ========================================================================== PKG_CHECK_MODULES(CAIRO, cairo >= 1.8.0, have_cairo=true, have_cairo=false) diff --git a/src/Makefile.am b/src/Makefile.am index 62a5b39..0e21466 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -83,45 +83,36 @@ endif if HAVE_GLIB HBCFLAGS += $(GLIB_CFLAGS) HBLIBS += $(GLIB_LIBS) -HBSOURCES += \ - hb-glib.cc \ - $(NULL) -HBHEADERS += \ - hb-glib.h \ - $(NULL) +HBSOURCES += hb-glib.cc +HBHEADERS += hb-glib.h +endif + +if HAVE_GOBJECT +HBCFLAGS += $(GOBJECT_CFLAGS) +HBLIBS += $(GOBJECT_LIBS) +HBSOURCES += hb-gobject.cc +HBHEADERS += hb-gobject.h endif if HAVE_ICU HBCFLAGS += $(ICU_CFLAGS) HBLIBS += $(ICU_LIBS) -HBSOURCES += \ - hb-icu.cc \ - $(NULL) -HBHEADERS += \ - hb-icu.h \ - $(NULL) +HBSOURCES += hb-icu.cc +HBHEADERS += hb-icu.h endif if HAVE_FREETYPE HBCFLAGS += $(FREETYPE_CFLAGS) HBLIBS += $(FREETYPE_LIBS) -HBSOURCES += \ - hb-ft.cc \ - $(NULL) -HBHEADERS += \ - hb-ft.h \ - $(NULL) +HBSOURCES += hb-ft.cc +HBHEADERS += hb-ft.h endif if HAVE_UNISCRIBE HBCFLAGS += $(UNISCRIBE_CFLAGS) HBLIBS += $(UNISCRIBE_LIBS) -HBSOURCES += \ - hb-uniscribe-shape.cc \ - $(NULL) -HBHEADERS += \ - hb-uniscribe.h \ - $(NULL) +HBSOURCES += hb-uniscribe-shape.cc +HBHEADERS += hb-uniscribe.h endif CXXLINK = $(LINK) @@ -177,4 +168,8 @@ TESTS_ENVIRONMENT = \ HBHEADERS="$(HBHEADERS)" \ $(NULL) +scan: + g-ir-scanner $(HBCFLAGS) $(HBHEADERS) -n hb --strip-prefix=hb --library libharfbuzz.la + + -include $(top_srcdir)/git.mk diff --git a/src/hb-common.h b/src/hb-common.h index 4687809..e4f1991 100644 --- a/src/hb-common.h +++ b/src/hb-common.h @@ -306,6 +306,7 @@ hb_script_get_horizontal_direction (hb_script_t script); /* User data */ typedef struct _hb_user_data_key_t { + /*< private >*/ char unused; } hb_user_data_key_t; diff --git a/src/hb-glib.cc b/src/hb-glib.cc index 1fd54e5..f990988 100644 --- a/src/hb-glib.cc +++ b/src/hb-glib.cc @@ -32,8 +32,6 @@ #include "hb-unicode-private.hh" -#include - #if !GLIB_CHECK_VERSION(2,29,14) static const hb_script_t @@ -349,4 +347,3 @@ hb_glib_get_unicode_funcs (void) return &_hb_glib_unicode_funcs; } - diff --git a/src/hb-gobject.cc b/src/hb-gobject.cc new file mode 100644 index 0000000..cec4854 --- /dev/null +++ b/src/hb-gobject.cc @@ -0,0 +1,63 @@ +/* + * Copyright © 2011 Google, Inc. + * + * This is part of HarfBuzz, a text shaping library. + * + * Permission is hereby granted, without written agreement and without + * license or royalty fees, to use, copy, modify, and distribute this + * software and its documentation for any purpose, provided that the + * above copyright notice and the following two paragraphs appear in + * all copies of this software. + * + * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, + * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. + * + * Google Author(s): Behdad Esfahbod + */ + +#include "hb-private.hh" + +/* g++ didn't like older gtype.h gcc-only code path. */ +#include +#if !GLIB_CHECK_VERSION(2,29,16) +#undef __GNUC__ +#undef __GNUC_MINOR__ +#define __GNUC__ 2 +#define __GNUC_MINOR__ 6 +#endif + +#include "hb-gobject.h" + +#define _HB_DEFINE_BOXED_TYPE(Name,underscore_name,copy_func,free_func) \ +GType \ +underscore_name##_get_type (void) \ +{ \ + static volatile gsize type = 0; \ + if (g_once_init_enter (&type)) { \ + GType t = g_boxed_type_register_static (g_intern_static_string (#Name), \ + (GBoxedCopyFunc) copy_func, \ + (GBoxedFreeFunc) free_func); \ + g_once_init_leave (&type, t); \ + } \ + return type; \ +} + +#define HB_DEFINE_BOXED_TYPE(name) \ + _HB_DEFINE_BOXED_TYPE (hb_##name, hb_gobject_##name, hb_##name##_reference, hb_##name##_destroy); + +HB_DEFINE_BOXED_TYPE (buffer) +HB_DEFINE_BOXED_TYPE (blob) +HB_DEFINE_BOXED_TYPE (face) +HB_DEFINE_BOXED_TYPE (font) +HB_DEFINE_BOXED_TYPE (font_funcs) +HB_DEFINE_BOXED_TYPE (unicode_funcs) + diff --git a/src/hb-gobject.h b/src/hb-gobject.h new file mode 100644 index 0000000..25fc941 --- /dev/null +++ b/src/hb-gobject.h @@ -0,0 +1,68 @@ +/* + * Copyright © 2011 Google, Inc. + * + * This is part of HarfBuzz, a text shaping library. + * + * Permission is hereby granted, without written agreement and without + * license or royalty fees, to use, copy, modify, and distribute this + * software and its documentation for any purpose, provided that the + * above copyright notice and the following two paragraphs appear in + * all copies of this software. + * + * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, + * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. + * + * Google Author(s): Behdad Esfahbod + */ + +#ifndef HB_GOBJECT_H +#define HB_GOBJECT_H + +#include "hb.h" +#include + +HB_BEGIN_DECLS + + +/* Objects */ + +#define HB_GOBJECT_TYPE_BLOB hb_gobject_blob_get_type () +GType +hb_gobject_blob_get_type (void); + +#define HB_GOBJECT_TYPE_BUFFER hb_gobject_buffer_get_type () +GType +hb_gobject_buffer_get_type (void); + +#define HB_GOBJECT_TYPE_FACE hb_gobject_face_get_type () +GType +hb_gobject_face_get_type (void); + +#define HB_GOBJECT_TYPE_FONT hb_gobject_font_get_type () +GType +hb_gobject_font_get_type (void); + +#define HB_GOBJECT_TYPE_FONT_FUNCS hb_gobject_font_funcs_get_type () +GType +hb_gobject_font_funcs_get_type (void); + +#define HB_GOBJECT_TYPE_UNICODE_FUNCS hb_gobject_unicode_funcs_get_type () +GType +hb_gobject_unicode_funcs_get_type (void); + + +/* Enums */ + + +HB_END_DECLS + +#endif /* HB_GOBJECT_H */ -- 2.7.4