1*2d1272b8SAndroid Build Coastguard Worker /* 2*2d1272b8SAndroid Build Coastguard Worker * Copyright © 2011 Google, Inc. 3*2d1272b8SAndroid Build Coastguard Worker * 4*2d1272b8SAndroid Build Coastguard Worker * This is part of HarfBuzz, a text shaping library. 5*2d1272b8SAndroid Build Coastguard Worker * 6*2d1272b8SAndroid Build Coastguard Worker * Permission is hereby granted, without written agreement and without 7*2d1272b8SAndroid Build Coastguard Worker * license or royalty fees, to use, copy, modify, and distribute this 8*2d1272b8SAndroid Build Coastguard Worker * software and its documentation for any purpose, provided that the 9*2d1272b8SAndroid Build Coastguard Worker * above copyright notice and the following two paragraphs appear in 10*2d1272b8SAndroid Build Coastguard Worker * all copies of this software. 11*2d1272b8SAndroid Build Coastguard Worker * 12*2d1272b8SAndroid Build Coastguard Worker * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR 13*2d1272b8SAndroid Build Coastguard Worker * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES 14*2d1272b8SAndroid Build Coastguard Worker * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN 15*2d1272b8SAndroid Build Coastguard Worker * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH 16*2d1272b8SAndroid Build Coastguard Worker * DAMAGE. 17*2d1272b8SAndroid Build Coastguard Worker * 18*2d1272b8SAndroid Build Coastguard Worker * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, 19*2d1272b8SAndroid Build Coastguard Worker * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND 20*2d1272b8SAndroid Build Coastguard Worker * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS 21*2d1272b8SAndroid Build Coastguard Worker * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO 22*2d1272b8SAndroid Build Coastguard Worker * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. 23*2d1272b8SAndroid Build Coastguard Worker * 24*2d1272b8SAndroid Build Coastguard Worker * Google Author(s): Behdad Esfahbod 25*2d1272b8SAndroid Build Coastguard Worker */ 26*2d1272b8SAndroid Build Coastguard Worker 27*2d1272b8SAndroid Build Coastguard Worker #include "hb.hh" 28*2d1272b8SAndroid Build Coastguard Worker 29*2d1272b8SAndroid Build Coastguard Worker #ifdef HAVE_GOBJECT 30*2d1272b8SAndroid Build Coastguard Worker 31*2d1272b8SAndroid Build Coastguard Worker 32*2d1272b8SAndroid Build Coastguard Worker /* 33*2d1272b8SAndroid Build Coastguard Worker * SECTION:hb-gobject 34*2d1272b8SAndroid Build Coastguard Worker * @title: hb-gobject 35*2d1272b8SAndroid Build Coastguard Worker * @short_description: GObject integration support 36*2d1272b8SAndroid Build Coastguard Worker * @include: hb-gobject.h 37*2d1272b8SAndroid Build Coastguard Worker * 38*2d1272b8SAndroid Build Coastguard Worker * Support for using HarfBuzz with the GObject library to provide 39*2d1272b8SAndroid Build Coastguard Worker * type data. 40*2d1272b8SAndroid Build Coastguard Worker * 41*2d1272b8SAndroid Build Coastguard Worker * The types and functions listed here are solely a linkage between 42*2d1272b8SAndroid Build Coastguard Worker * HarfBuzz's public data types and the GTypes used by the GObject framework. 43*2d1272b8SAndroid Build Coastguard Worker * HarfBuzz uses GObject introspection to generate its Python bindings 44*2d1272b8SAndroid Build Coastguard Worker * (and potentially other language bindings); client programs should never need 45*2d1272b8SAndroid Build Coastguard Worker * to access the GObject-integration mechanics. 46*2d1272b8SAndroid Build Coastguard Worker * 47*2d1272b8SAndroid Build Coastguard Worker * For client programs using the GNOME and GTK software stack, please see the 48*2d1272b8SAndroid Build Coastguard Worker * GLib and FreeType integration pages. 49*2d1272b8SAndroid Build Coastguard Worker **/ 50*2d1272b8SAndroid Build Coastguard Worker 51*2d1272b8SAndroid Build Coastguard Worker 52*2d1272b8SAndroid Build Coastguard Worker /* g++ didn't like older gtype.h gcc-only code path. */ 53*2d1272b8SAndroid Build Coastguard Worker #include <glib.h> 54*2d1272b8SAndroid Build Coastguard Worker #if !GLIB_CHECK_VERSION(2,29,16) 55*2d1272b8SAndroid Build Coastguard Worker #undef __GNUC__ 56*2d1272b8SAndroid Build Coastguard Worker #undef __GNUC_MINOR__ 57*2d1272b8SAndroid Build Coastguard Worker #define __GNUC__ 2 58*2d1272b8SAndroid Build Coastguard Worker #define __GNUC_MINOR__ 6 59*2d1272b8SAndroid Build Coastguard Worker #endif 60*2d1272b8SAndroid Build Coastguard Worker 61*2d1272b8SAndroid Build Coastguard Worker #include "hb-gobject.h" 62*2d1272b8SAndroid Build Coastguard Worker 63*2d1272b8SAndroid Build Coastguard Worker #define HB_DEFINE_BOXED_TYPE(name,copy_func,free_func) \ 64*2d1272b8SAndroid Build Coastguard Worker GType \ 65*2d1272b8SAndroid Build Coastguard Worker hb_gobject_##name##_get_type () \ 66*2d1272b8SAndroid Build Coastguard Worker { \ 67*2d1272b8SAndroid Build Coastguard Worker static gsize type_id = 0; \ 68*2d1272b8SAndroid Build Coastguard Worker if (g_once_init_enter (&type_id)) { \ 69*2d1272b8SAndroid Build Coastguard Worker GType id = g_boxed_type_register_static (g_intern_static_string ("hb_" #name "_t"), \ 70*2d1272b8SAndroid Build Coastguard Worker (GBoxedCopyFunc) copy_func, \ 71*2d1272b8SAndroid Build Coastguard Worker (GBoxedFreeFunc) free_func); \ 72*2d1272b8SAndroid Build Coastguard Worker g_once_init_leave (&type_id, id); \ 73*2d1272b8SAndroid Build Coastguard Worker } \ 74*2d1272b8SAndroid Build Coastguard Worker return type_id; \ 75*2d1272b8SAndroid Build Coastguard Worker } 76*2d1272b8SAndroid Build Coastguard Worker 77*2d1272b8SAndroid Build Coastguard Worker #define HB_DEFINE_OBJECT_TYPE(name) \ 78*2d1272b8SAndroid Build Coastguard Worker HB_DEFINE_BOXED_TYPE (name, hb_##name##_reference, hb_##name##_destroy) 79*2d1272b8SAndroid Build Coastguard Worker 80*2d1272b8SAndroid Build Coastguard Worker #define HB_DEFINE_VALUE_TYPE(name) \ 81*2d1272b8SAndroid Build Coastguard Worker static hb_##name##_t *_hb_##name##_reference (const hb_##name##_t *l) \ 82*2d1272b8SAndroid Build Coastguard Worker { \ 83*2d1272b8SAndroid Build Coastguard Worker hb_##name##_t *c = (hb_##name##_t *) hb_calloc (1, sizeof (hb_##name##_t)); \ 84*2d1272b8SAndroid Build Coastguard Worker if (unlikely (!c)) return nullptr; \ 85*2d1272b8SAndroid Build Coastguard Worker *c = *l; \ 86*2d1272b8SAndroid Build Coastguard Worker return c; \ 87*2d1272b8SAndroid Build Coastguard Worker } \ 88*2d1272b8SAndroid Build Coastguard Worker static void _hb_##name##_destroy (hb_##name##_t *l) { hb_free (l); } \ 89*2d1272b8SAndroid Build Coastguard Worker HB_DEFINE_BOXED_TYPE (name, _hb_##name##_reference, _hb_##name##_destroy) 90*2d1272b8SAndroid Build Coastguard Worker 91*2d1272b8SAndroid Build Coastguard Worker HB_DEFINE_OBJECT_TYPE (buffer) 92*2d1272b8SAndroid Build Coastguard Worker HB_DEFINE_OBJECT_TYPE (blob) 93*2d1272b8SAndroid Build Coastguard Worker HB_DEFINE_OBJECT_TYPE (draw_funcs) 94*2d1272b8SAndroid Build Coastguard Worker HB_DEFINE_OBJECT_TYPE (paint_funcs) 95*2d1272b8SAndroid Build Coastguard Worker HB_DEFINE_OBJECT_TYPE (face) 96*2d1272b8SAndroid Build Coastguard Worker HB_DEFINE_OBJECT_TYPE (font) 97*2d1272b8SAndroid Build Coastguard Worker HB_DEFINE_OBJECT_TYPE (font_funcs) 98*2d1272b8SAndroid Build Coastguard Worker HB_DEFINE_OBJECT_TYPE (set) 99*2d1272b8SAndroid Build Coastguard Worker HB_DEFINE_OBJECT_TYPE (map) 100*2d1272b8SAndroid Build Coastguard Worker HB_DEFINE_OBJECT_TYPE (shape_plan) 101*2d1272b8SAndroid Build Coastguard Worker HB_DEFINE_OBJECT_TYPE (unicode_funcs) 102*2d1272b8SAndroid Build Coastguard Worker HB_DEFINE_VALUE_TYPE (feature) 103*2d1272b8SAndroid Build Coastguard Worker HB_DEFINE_VALUE_TYPE (glyph_info) 104*2d1272b8SAndroid Build Coastguard Worker HB_DEFINE_VALUE_TYPE (glyph_position) 105*2d1272b8SAndroid Build Coastguard Worker HB_DEFINE_VALUE_TYPE (segment_properties) 106*2d1272b8SAndroid Build Coastguard Worker HB_DEFINE_VALUE_TYPE (draw_state) 107*2d1272b8SAndroid Build Coastguard Worker HB_DEFINE_VALUE_TYPE (color_stop) 108*2d1272b8SAndroid Build Coastguard Worker HB_DEFINE_VALUE_TYPE (color_line) 109*2d1272b8SAndroid Build Coastguard Worker HB_DEFINE_VALUE_TYPE (user_data_key) 110*2d1272b8SAndroid Build Coastguard Worker 111*2d1272b8SAndroid Build Coastguard Worker HB_DEFINE_VALUE_TYPE (ot_var_axis_info) 112*2d1272b8SAndroid Build Coastguard Worker HB_DEFINE_VALUE_TYPE (ot_math_glyph_variant) 113*2d1272b8SAndroid Build Coastguard Worker HB_DEFINE_VALUE_TYPE (ot_math_glyph_part) 114*2d1272b8SAndroid Build Coastguard Worker 115*2d1272b8SAndroid Build Coastguard Worker 116*2d1272b8SAndroid Build Coastguard Worker #endif 117