hb-gobject-structs.cc 3.5 KB

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