OLD | NEW |
1 /* | 1 /* |
2 * Copyright © 2011 Google, Inc. | 2 * Copyright © 2011 Google, Inc. |
3 * | 3 * |
4 * This is part of HarfBuzz, a text shaping library. | 4 * This is part of HarfBuzz, a text shaping library. |
5 * | 5 * |
6 * Permission is hereby granted, without written agreement and without | 6 * Permission is hereby granted, without written agreement and without |
7 * license or royalty fees, to use, copy, modify, and distribute this | 7 * license or royalty fees, to use, copy, modify, and distribute this |
8 * software and its documentation for any purpose, provided that the | 8 * software and its documentation for any purpose, provided that the |
9 * above copyright notice and the following two paragraphs appear in | 9 * above copyright notice and the following two paragraphs appear in |
10 * all copies of this software. | 10 * all copies of this software. |
(...skipping 19 matching lines...) Expand all Loading... |
30 #include <glib.h> | 30 #include <glib.h> |
31 #if !GLIB_CHECK_VERSION(2,29,16) | 31 #if !GLIB_CHECK_VERSION(2,29,16) |
32 #undef __GNUC__ | 32 #undef __GNUC__ |
33 #undef __GNUC_MINOR__ | 33 #undef __GNUC_MINOR__ |
34 #define __GNUC__ 2 | 34 #define __GNUC__ 2 |
35 #define __GNUC_MINOR__ 6 | 35 #define __GNUC_MINOR__ 6 |
36 #endif | 36 #endif |
37 | 37 |
38 #include "hb-gobject.h" | 38 #include "hb-gobject.h" |
39 | 39 |
40 #define _HB_DEFINE_BOXED_TYPE(Name,underscore_name,copy_func,free_func) \ | 40 #define HB_DEFINE_BOXED_TYPE(name,copy_func,free_func) \ |
41 GType \ | 41 GType \ |
42 underscore_name##_get_type (void) \ | 42 hb_gobject_##name##_get_type (void) \ |
43 { \ | 43 { \ |
44 static volatile gsize type = 0; \ | 44 static gsize type_id = 0; \ |
45 if (g_once_init_enter (&type)) { \ | 45 if (g_once_init_enter (&type_id)) { \ |
46 GType t = g_boxed_type_register_static (g_intern_static_string (#Name), \ | 46 GType id = g_boxed_type_register_static (g_intern_static_string ("hb_" #na
me "_t"), \ |
47 » » » » » (GBoxedCopyFunc) copy_func, \ | 47 » » » » » (GBoxedCopyFunc) copy_func, \ |
48 » » » » » (GBoxedFreeFunc) free_func); \ | 48 » » » » » (GBoxedFreeFunc) free_func); \ |
49 g_once_init_leave (&type, t); \ | 49 g_once_init_leave (&type_id, id); \ |
50 } \ | 50 } \ |
51 return type; \ | 51 return type_id; \ |
52 } | 52 } |
53 | 53 |
54 #define HB_DEFINE_BOXED_TYPE(name) \ | 54 #define HB_DEFINE_OBJECT_TYPE(name) \ |
55 » _HB_DEFINE_BOXED_TYPE (hb_##name, hb_gobject_##name, hb_##name##_referen
ce, hb_##name##_destroy); | 55 » HB_DEFINE_BOXED_TYPE (name, hb_##name##_reference, hb_##name##_destroy); |
56 | 56 |
57 HB_DEFINE_BOXED_TYPE (buffer) | 57 HB_DEFINE_OBJECT_TYPE (buffer) |
58 HB_DEFINE_BOXED_TYPE (blob) | 58 HB_DEFINE_OBJECT_TYPE (blob) |
59 HB_DEFINE_BOXED_TYPE (face) | 59 HB_DEFINE_OBJECT_TYPE (face) |
60 HB_DEFINE_BOXED_TYPE (font) | 60 HB_DEFINE_OBJECT_TYPE (font) |
61 HB_DEFINE_BOXED_TYPE (font_funcs) | 61 HB_DEFINE_OBJECT_TYPE (font_funcs) |
62 HB_DEFINE_BOXED_TYPE (unicode_funcs) | 62 HB_DEFINE_OBJECT_TYPE (set) |
| 63 HB_DEFINE_OBJECT_TYPE (shape_plan) |
| 64 HB_DEFINE_OBJECT_TYPE (unicode_funcs) |
63 | 65 |
| 66 |
| 67 static hb_feature_t *feature_reference (hb_feature_t *g) |
| 68 { |
| 69 hb_feature_t *c = (hb_feature_t *) calloc (1, sizeof (hb_feature_t)); |
| 70 if (unlikely (!c)) return NULL; |
| 71 *c = *g; |
| 72 return c; |
| 73 } |
| 74 static void feature_destroy (hb_feature_t *g) { free (g); } |
| 75 HB_DEFINE_BOXED_TYPE (feature, feature_reference, feature_destroy) |
| 76 |
| 77 static hb_glyph_info_t *glyph_info_reference (hb_glyph_info_t *g) |
| 78 { |
| 79 hb_glyph_info_t *c = (hb_glyph_info_t *) calloc (1, sizeof (hb_glyph_info_t)); |
| 80 if (unlikely (!c)) return NULL; |
| 81 *c = *g; |
| 82 return c; |
| 83 } |
| 84 static void glyph_info_destroy (hb_glyph_info_t *g) { free (g); } |
| 85 HB_DEFINE_BOXED_TYPE (glyph_info, glyph_info_reference, glyph_info_destroy) |
| 86 |
| 87 static hb_glyph_position_t *glyph_position_reference (hb_glyph_position_t *g) |
| 88 { |
| 89 hb_glyph_position_t *c = (hb_glyph_position_t *) calloc (1, sizeof (hb_glyph_p
osition_t)); |
| 90 if (unlikely (!c)) return NULL; |
| 91 *c = *g; |
| 92 return c; |
| 93 } |
| 94 static void glyph_position_destroy (hb_glyph_position_t *g) { free (g); } |
| 95 HB_DEFINE_BOXED_TYPE (glyph_position, glyph_position_reference, glyph_position_d
estroy) |
| 96 |
| 97 static hb_segment_properties_t *segment_properties_reference (hb_segment_propert
ies_t *g) |
| 98 { |
| 99 hb_segment_properties_t *c = (hb_segment_properties_t *) calloc (1, sizeof (hb
_segment_properties_t)); |
| 100 if (unlikely (!c)) return NULL; |
| 101 *c = *g; |
| 102 return c; |
| 103 } |
| 104 static void segment_properties_destroy (hb_segment_properties_t *g) { free (g);
} |
| 105 HB_DEFINE_BOXED_TYPE (segment_properties, segment_properties_reference, segment_
properties_destroy) |
| 106 |
| 107 static hb_user_data_key_t user_data_key_reference (hb_user_data_key_t l) { retur
n l; } |
| 108 static void user_data_key_destroy (hb_user_data_key_t l) { } |
| 109 HB_DEFINE_BOXED_TYPE (user_data_key, user_data_key_reference, user_data_key_dest
roy) |
| 110 |
| 111 |
| 112 static hb_language_t *language_reference (hb_language_t *l) |
| 113 { |
| 114 hb_language_t *c = (hb_language_t *) calloc (1, sizeof (hb_language_t)); |
| 115 if (unlikely (!c)) return NULL; |
| 116 *c = *l; |
| 117 return c; |
| 118 } |
| 119 static void language_destroy (hb_language_t *l) { free (l); } |
| 120 HB_DEFINE_BOXED_TYPE (language, language_reference, language_destroy) |
OLD | NEW |