/binding/pango/font.d

http://github.com/wilkie/djehuty · D · 381 lines · 229 code · 88 blank · 64 comment · 0 complexity · d884a41192ea784a12ef15130670619b MD5 · raw file

  1. /*
  2. * font.d
  3. *
  4. * This file holds bindings to pango's pango-font.h.
  5. *
  6. * Author: Dave Wilkinson
  7. *
  8. */
  9. module binding.pango.font;
  10. //extern(C) struct _PangoFontDescription;
  11. //extern(C) struct _PangoFontMetrics;
  12. enum PangoStyle {
  13. PANGO_STYLE_NORMAL,
  14. PANGO_STYLE_OBLIQUE,
  15. PANGO_STYLE_ITALIC
  16. }
  17. enum PangoVariant {
  18. PANGO_VARIANT_NORMAL,
  19. PANGO_VARIANT_SMALL_CAPS
  20. }
  21. enum PangoWeight {
  22. PANGO_WEIGHT_ULTRALIGHT = 200,
  23. PANGO_WEIGHT_LIGHT = 300,
  24. PANGO_WEIGHT_NORMAL = 400,
  25. PANGO_WEIGHT_SEMIBOLD = 600,
  26. PANGO_WEIGHT_BOLD = 700,
  27. PANGO_WEIGHT_ULTRABOLD = 800,
  28. PANGO_WEIGHT_HEAVY = 900
  29. }
  30. enum PangoStretch {
  31. PANGO_STRETCH_ULTRA_CONDENSED,
  32. PANGO_STRETCH_EXTRA_CONDENSED,
  33. PANGO_STRETCH_CONDENSED,
  34. PANGO_STRETCH_SEMI_CONDENSED,
  35. PANGO_STRETCH_NORMAL,
  36. PANGO_STRETCH_SEMI_EXPANDED,
  37. PANGO_STRETCH_EXPANDED,
  38. PANGO_STRETCH_EXTRA_EXPANDED,
  39. PANGO_STRETCH_ULTRA_EXPANDED
  40. }
  41. enum PangoFontMask {
  42. PANGO_FONT_MASK_FAMILY = (1 << 0),
  43. PANGO_FONT_MASK_STYLE = (1 << 1),
  44. PANGO_FONT_MASK_VARIANT = (1 << 2),
  45. PANGO_FONT_MASK_WEIGHT = (1 << 3),
  46. PANGO_FONT_MASK_STRETCH = (1 << 4),
  47. PANGO_FONT_MASK_SIZE = (1 << 5),
  48. PANGO_FONT_MASK_GRAVITY = (1 << 6)
  49. }
  50. import binding.pango.types;
  51. import binding.pango.gravity;
  52. import binding.pango.types;
  53. import binding.pango.coverage;
  54. extern(C) struct _PangoFontDescription;
  55. alias _PangoFontDescription PangoFontDescription;
  56. alias _PangoFontMetrics PangoFontMetrics;
  57. /**
  58. * PangoStyle:
  59. * @PANGO_STYLE_NORMAL: the font is upright.
  60. * @PANGO_STYLE_OBLIQUE: the font is slanted, but in a roman style.
  61. * @PANGO_STYLE_ITALIC: the font is slanted in an italic style.
  62. *
  63. * An enumeration specifying the various slant styles possible for a font.
  64. **/
  65. /* CSS scale factors (1.2 factor between each size) */
  66. const auto PANGO_SCALE_XX_SMALL = (cast(double)0.5787037037037);
  67. const auto PANGO_SCALE_X_SMALL = (cast(double)0.6444444444444);
  68. const auto PANGO_SCALE_SMALL = (cast(double)0.8333333333333);
  69. const auto PANGO_SCALE_MEDIUM = (cast(double)1.0);
  70. const auto PANGO_SCALE_LARGE = (cast(double)1.2);
  71. const auto PANGO_SCALE_X_LARGE = (cast(double)1.4399999999999);
  72. const auto PANGO_SCALE_XX_LARGE = (cast(double)1.728);
  73. /*
  74. * PangoFontDescription
  75. */
  76. GType PANGO_TYPE_FONT_DESCRIPTION()
  77. {
  78. return pango_font_description_get_type();
  79. }
  80. extern(C):
  81. GType pango_font_description_get_type ();
  82. PangoFontDescription *pango_font_description_new ();
  83. PangoFontDescription *pango_font_description_copy (PangoFontDescription *desc);
  84. PangoFontDescription *pango_font_description_copy_static (PangoFontDescription *desc);
  85. guint pango_font_description_hash (PangoFontDescription *desc);
  86. gboolean pango_font_description_equal (PangoFontDescription *desc1,
  87. PangoFontDescription *desc2);
  88. void pango_font_description_free (PangoFontDescription *desc);
  89. void pango_font_descriptions_free (PangoFontDescription **descs,
  90. int n_descs);
  91. void pango_font_description_set_family (PangoFontDescription *desc,
  92. char *family);
  93. void pango_font_description_set_family_static (PangoFontDescription *desc,
  94. char *family);
  95. char* pango_font_description_get_family (PangoFontDescription *desc);
  96. void pango_font_description_set_style (PangoFontDescription *desc,
  97. PangoStyle style);
  98. PangoStyle pango_font_description_get_style (PangoFontDescription *desc);
  99. void pango_font_description_set_variant (PangoFontDescription *desc,
  100. PangoVariant variant);
  101. PangoVariant pango_font_description_get_variant (PangoFontDescription *desc);
  102. void pango_font_description_set_weight (PangoFontDescription *desc,
  103. PangoWeight weight);
  104. PangoWeight pango_font_description_get_weight (PangoFontDescription *desc);
  105. void pango_font_description_set_stretch (PangoFontDescription *desc,
  106. PangoStretch stretch);
  107. PangoStretch pango_font_description_get_stretch (PangoFontDescription *desc);
  108. void pango_font_description_set_size (PangoFontDescription *desc,
  109. gint size);
  110. gint pango_font_description_get_size (PangoFontDescription *desc);
  111. void pango_font_description_set_absolute_size (PangoFontDescription *desc,
  112. double size);
  113. gboolean pango_font_description_get_size_is_absolute (PangoFontDescription *desc);
  114. void pango_font_description_set_gravity (PangoFontDescription *desc,
  115. PangoGravity gravity);
  116. PangoGravity pango_font_description_get_gravity (PangoFontDescription *desc);
  117. PangoFontMask pango_font_description_get_set_fields (PangoFontDescription *desc);
  118. void pango_font_description_unset_fields (PangoFontDescription *desc,
  119. PangoFontMask to_unset);
  120. void pango_font_description_merge (PangoFontDescription *desc,
  121. PangoFontDescription *desc_to_merge,
  122. gboolean replace_existing);
  123. void pango_font_description_merge_static (PangoFontDescription *desc,
  124. PangoFontDescription *desc_to_merge,
  125. gboolean replace_existing);
  126. gboolean pango_font_description_better_match (PangoFontDescription *desc,
  127. PangoFontDescription *old_match,
  128. PangoFontDescription *new_match);
  129. PangoFontDescription *pango_font_description_from_string (char *str);
  130. char * pango_font_description_to_string (PangoFontDescription *desc);
  131. char * pango_font_description_to_filename (PangoFontDescription *desc);
  132. /*
  133. * PangoFontMetrics
  134. */
  135. GType PANGO_TYPE_FONT_METRICS()
  136. {
  137. return pango_font_metrics_get_type();
  138. }
  139. GType pango_font_metrics_get_type ();
  140. PangoFontMetrics *pango_font_metrics_ref (PangoFontMetrics *metrics);
  141. void pango_font_metrics_unref (PangoFontMetrics *metrics);
  142. int pango_font_metrics_get_ascent (PangoFontMetrics *metrics);
  143. int pango_font_metrics_get_descent (PangoFontMetrics *metrics);
  144. int pango_font_metrics_get_approximate_char_width (PangoFontMetrics *metrics);
  145. int pango_font_metrics_get_approximate_digit_width (PangoFontMetrics *metrics);
  146. int pango_font_metrics_get_underline_position (PangoFontMetrics *metrics);
  147. int pango_font_metrics_get_underline_thickness (PangoFontMetrics *metrics);
  148. int pango_font_metrics_get_strikethrough_position (PangoFontMetrics *metrics);
  149. int pango_font_metrics_get_strikethrough_thickness (PangoFontMetrics *metrics);
  150. PangoFontMetrics *pango_font_metrics_new ();
  151. struct _PangoFontMetrics
  152. {
  153. guint ref_count;
  154. int ascent;
  155. int descent;
  156. int approximate_char_width;
  157. int approximate_digit_width;
  158. int underline_position;
  159. int underline_thickness;
  160. int strikethrough_position;
  161. int strikethrough_thickness;
  162. };
  163. /*
  164. * PangoFontFamily
  165. */
  166. //#define PANGO_FONT_FAMILY(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), PANGO_TYPE_FONT_FAMILY, PangoFontFamily))
  167. //#define PANGO_IS_FONT_FAMILY(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), PANGO_TYPE_FONT_FAMILY))
  168. GType PANGO_TYPE_FONT_FAMILY ()
  169. {
  170. return pango_font_family_get_type();
  171. }
  172. alias _PangoFontFamily PangoFontFamily;
  173. alias _PangoFontFace PangoFontFace;
  174. GType pango_font_family_get_type();
  175. void pango_font_family_list_faces (PangoFontFamily *family,
  176. PangoFontFace ***faces,
  177. int *n_faces);
  178. char *pango_font_family_get_name (PangoFontFamily *family);
  179. gboolean pango_font_family_is_monospace (PangoFontFamily *family);
  180. //#define PANGO_FONT_FAMILY_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), PANGO_TYPE_FONT_FAMILY, PangoFontFamilyClass))
  181. //#define PANGO_IS_FONT_FAMILY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), PANGO_TYPE_FONT_FAMILY))
  182. //#define PANGO_FONT_FAMILY_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), PANGO_TYPE_FONT_FAMILY, PangoFontFamilyClass))
  183. alias _PangoFontFamilyClass PangoFontFamilyClass;
  184. struct _PangoFontFamily
  185. {
  186. GObject parent_instance;
  187. };
  188. struct _PangoFontFamilyClass
  189. {
  190. GObjectClass parent_class;
  191. /*< public >*/
  192. void function(PangoFontFamily *family, PangoFontFace*** faces, int* n_faces) list_faces;
  193. const char* function(PangoFontFamily* family) get_name;
  194. gboolean function(PangoFontFamily* family) is_monospace;
  195. /*< private >*/
  196. /* Padding for future expansion */
  197. void function() _pango_reserved2;
  198. void function() _pango_reserved3;
  199. void function() _pango_reserved4;
  200. };
  201. /*
  202. * PangoFontFace
  203. */
  204. //#define PANGO_TYPE_FONT_FACE (pango_font_face_get_type ())
  205. //#define PANGO_FONT_FACE(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), PANGO_TYPE_FONT_FACE, PangoFontFace))
  206. //#define PANGO_IS_FONT_FACE(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), PANGO_TYPE_FONT_FACE))
  207. GType pango_font_face_get_type();
  208. PangoFontDescription* pango_font_face_describe (PangoFontFace *face);
  209. char* pango_font_face_get_face_name (PangoFontFace* face);
  210. void pango_font_face_list_sizes (PangoFontFace *face,
  211. int **sizes,
  212. int *n_sizes);
  213. //#define PANGO_FONT_FACE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), PANGO_TYPE_FONT_FACE, PangoFontFaceClass))
  214. //#define PANGO_IS_FONT_FACE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), PANGO_TYPE_FONT_FACE))
  215. //#define PANGO_FONT_FACE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), PANGO_TYPE_FONT_FACE, PangoFontFaceClass))
  216. alias _PangoFontFaceClass PangoFontFaceClass;
  217. struct _PangoFontFace
  218. {
  219. GObject parent_instance;
  220. };
  221. struct _PangoFontFaceClass
  222. {
  223. GObjectClass parent_class;
  224. /*< public >*/
  225. const char* function(PangoFontFace* face) get_face_name;
  226. PangoFontDescription* function(PangoFontFace* face) describe;
  227. void function(PangoFontFace* face, int** sizes, int* n_sizes) list_sizes;
  228. /*< private >*/
  229. /* Padding for future expansion */
  230. void function() _pango_reserved2;
  231. void function() _pango_reserved3;
  232. void function() _pango_reserved4;
  233. };
  234. /*
  235. * PangoFont
  236. */
  237. //#define PANGO_TYPE_FONT (pango_font_get_type ())
  238. //#define PANGO_FONT(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), PANGO_TYPE_FONT, PangoFont))
  239. //#define PANGO_IS_FONT(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), PANGO_TYPE_FONT))
  240. GType pango_font_get_type ();
  241. PangoFontDescription *pango_font_describe (PangoFont *font);
  242. PangoFontDescription *pango_font_describe_with_absolute_size (PangoFont *font);
  243. PangoCoverage * pango_font_get_coverage (PangoFont *font,
  244. PangoLanguage *language);
  245. PangoEngineShape * pango_font_find_shaper (PangoFont *font,
  246. PangoLanguage *language,
  247. guint32 ch);
  248. PangoFontMetrics * pango_font_get_metrics (PangoFont *font,
  249. PangoLanguage *language);
  250. void pango_font_get_glyph_extents (PangoFont *font,
  251. PangoGlyph glyph,
  252. PangoRectangle *ink_rect,
  253. PangoRectangle *logical_rect);
  254. PangoFontMap *pango_font_get_font_map (PangoFont *font);
  255. //#define PANGO_FONT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), PANGO_TYPE_FONT, PangoFontClass))
  256. //#define PANGO_IS_FONT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), PANGO_TYPE_FONT))
  257. //#define PANGO_FONT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), PANGO_TYPE_FONT, PangoFontClass))
  258. alias _PangoFontClass PangoFontClass;
  259. struct _PangoFont
  260. {
  261. GObject parent_instance;
  262. }
  263. struct _PangoFontClass
  264. {
  265. GObjectClass parent_class;
  266. /*< public >*/
  267. PangoFontDescription *(*describe) (PangoFont *font);
  268. PangoCoverage * (*get_coverage) (PangoFont *font,
  269. PangoLanguage *lang);
  270. PangoEngineShape * (*find_shaper) (PangoFont *font,
  271. PangoLanguage *lang,
  272. guint32 ch);
  273. void (*get_glyph_extents) (PangoFont *font,
  274. PangoGlyph glyph,
  275. PangoRectangle *ink_rect,
  276. PangoRectangle *logical_rect);
  277. PangoFontMetrics * (*get_metrics) (PangoFont *font,
  278. PangoLanguage *language);
  279. PangoFontMap * (*get_font_map) (PangoFont *font);
  280. PangoFontDescription *(*describe_absolute) (PangoFont *font);
  281. /*< private >*/
  282. /* Padding for future expansion */
  283. void (*_pango_reserved1) ();
  284. void (*_pango_reserved2) ();
  285. }
  286. /* used for very rare and miserable situtations that we cannot even
  287. * draw a hexbox
  288. */
  289. const auto PANGO_UNKNOWN_GLYPH_WIDTH = 10;
  290. const auto PANGO_UNKNOWN_GLYPH_HEIGHT = 14;
  291. const auto PANGO_GLYPH_EMPTY = (cast(PangoGlyph)0x0FFFFFFF);
  292. const auto PANGO_GLYPH_UNKNOWN_FLAG = (cast(PangoGlyph)0x10000000);
  293. //const auto PANGO_GET_UNKNOWN_GLYPH(wc) = (cast(PangoGlyph)(wc)|PANGO_GLYPH_UNKNOWN_FLAG);