| 1 | /* Pango |
| 2 | * pango-font.h: Font handling |
| 3 | * |
| 4 | * Copyright (C) 2000 Red Hat Software |
| 5 | * |
| 6 | * This library is free software; you can redistribute it and/or |
| 7 | * modify it under the terms of the GNU Library General Public |
| 8 | * License as published by the Free Software Foundation; either |
| 9 | * version 2 of the License, or (at your option) any later version. |
| 10 | * |
| 11 | * This library is distributed in the hope that it will be useful, |
| 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| 14 | * Library General Public License for more details. |
| 15 | * |
| 16 | * You should have received a copy of the GNU Library General Public |
| 17 | * License along with this library; if not, write to the |
| 18 | * Free Software Foundation, Inc., 59 Temple Place - Suite 330, |
| 19 | * Boston, MA 02111-1307, USA. |
| 20 | */ |
| 21 | |
| 22 | #ifndef __PANGO_FONT_H__ |
| 23 | #define __PANGO_FONT_H__ |
| 24 | |
| 25 | #include <pango/pango-coverage.h> |
| 26 | #include <pango/pango-types.h> |
| 27 | |
| 28 | #include <glib-object.h> |
| 29 | #include <hb.h> |
| 30 | |
| 31 | G_BEGIN_DECLS |
| 32 | |
| 33 | /** |
| 34 | * PangoFontDescription: |
| 35 | * |
| 36 | * A `PangoFontDescription` describes a font in an implementation-independent |
| 37 | * manner. |
| 38 | * |
| 39 | * `PangoFontDescription` structures are used both to list what fonts are |
| 40 | * available on the system and also for specifying the characteristics of |
| 41 | * a font to load. |
| 42 | */ |
| 43 | typedef struct _PangoFontDescription PangoFontDescription; |
| 44 | |
| 45 | /** |
| 46 | * PangoFontMetrics: |
| 47 | * |
| 48 | * A `PangoFontMetrics` structure holds the overall metric information |
| 49 | * for a font. |
| 50 | * |
| 51 | * The information in a `PangoFontMetrics` structure may be restricted |
| 52 | * to a script. The fields of this structure are private to implementations |
| 53 | * of a font backend. See the documentation of the corresponding getters |
| 54 | * for documentation of their meaning. |
| 55 | * |
| 56 | * For an overview of the most important metrics, see: |
| 57 | * |
| 58 | * <picture> |
| 59 | * <source srcset="fontmetrics-dark.png" media="(prefers-color-scheme: dark)"> |
| 60 | * <img alt="Font metrics" src="fontmetrics-light.png"> |
| 61 | * </picture> |
| 62 | |
| 63 | */ |
| 64 | typedef struct _PangoFontMetrics PangoFontMetrics; |
| 65 | |
| 66 | /** |
| 67 | * PangoStyle: |
| 68 | * @PANGO_STYLE_NORMAL: the font is upright. |
| 69 | * @PANGO_STYLE_OBLIQUE: the font is slanted, but in a roman style. |
| 70 | * @PANGO_STYLE_ITALIC: the font is slanted in an italic style. |
| 71 | * |
| 72 | * An enumeration specifying the various slant styles possible for a font. |
| 73 | **/ |
| 74 | typedef enum { |
| 75 | PANGO_STYLE_NORMAL, |
| 76 | PANGO_STYLE_OBLIQUE, |
| 77 | PANGO_STYLE_ITALIC |
| 78 | } PangoStyle; |
| 79 | |
| 80 | /** |
| 81 | * PangoVariant: |
| 82 | * @PANGO_VARIANT_NORMAL: A normal font. |
| 83 | * @PANGO_VARIANT_SMALL_CAPS: A font with the lower case characters |
| 84 | * replaced by smaller variants of the capital characters. |
| 85 | * @PANGO_VARIANT_ALL_SMALL_CAPS: A font with all characters |
| 86 | * replaced by smaller variants of the capital characters. Since: 1.50 |
| 87 | * @PANGO_VARIANT_PETITE_CAPS: A font with the lower case characters |
| 88 | * replaced by smaller variants of the capital characters. |
| 89 | * Petite Caps can be even smaller than Small Caps. Since: 1.50 |
| 90 | * @PANGO_VARIANT_ALL_PETITE_CAPS: A font with all characters |
| 91 | * replaced by smaller variants of the capital characters. |
| 92 | * Petite Caps can be even smaller than Small Caps. Since: 1.50 |
| 93 | * @PANGO_VARIANT_UNICASE: A font with the upper case characters |
| 94 | * replaced by smaller variants of the capital letters. Since: 1.50 |
| 95 | * @PANGO_VARIANT_TITLE_CAPS: A font with capital letters that |
| 96 | * are more suitable for all-uppercase titles. Since: 1.50 |
| 97 | * |
| 98 | * An enumeration specifying capitalization variant of the font. |
| 99 | */ |
| 100 | typedef enum { |
| 101 | PANGO_VARIANT_NORMAL, |
| 102 | PANGO_VARIANT_SMALL_CAPS, |
| 103 | PANGO_VARIANT_ALL_SMALL_CAPS, |
| 104 | PANGO_VARIANT_PETITE_CAPS, |
| 105 | PANGO_VARIANT_ALL_PETITE_CAPS, |
| 106 | PANGO_VARIANT_UNICASE, |
| 107 | PANGO_VARIANT_TITLE_CAPS |
| 108 | } PangoVariant; |
| 109 | |
| 110 | /** |
| 111 | * PangoWeight: |
| 112 | * @PANGO_WEIGHT_THIN: the thin weight (= 100) Since: 1.24 |
| 113 | * @PANGO_WEIGHT_ULTRALIGHT: the ultralight weight (= 200) |
| 114 | * @PANGO_WEIGHT_LIGHT: the light weight (= 300) |
| 115 | * @PANGO_WEIGHT_SEMILIGHT: the semilight weight (= 350) Since: 1.36.7 |
| 116 | * @PANGO_WEIGHT_BOOK: the book weight (= 380) Since: 1.24) |
| 117 | * @PANGO_WEIGHT_NORMAL: the default weight (= 400) |
| 118 | * @PANGO_WEIGHT_MEDIUM: the normal weight (= 500) Since: 1.24 |
| 119 | * @PANGO_WEIGHT_SEMIBOLD: the semibold weight (= 600) |
| 120 | * @PANGO_WEIGHT_BOLD: the bold weight (= 700) |
| 121 | * @PANGO_WEIGHT_ULTRABOLD: the ultrabold weight (= 800) |
| 122 | * @PANGO_WEIGHT_HEAVY: the heavy weight (= 900) |
| 123 | * @PANGO_WEIGHT_ULTRAHEAVY: the ultraheavy weight (= 1000) Since: 1.24 |
| 124 | * |
| 125 | * An enumeration specifying the weight (boldness) of a font. |
| 126 | * |
| 127 | * Weight is specified as a numeric value ranging from 100 to 1000. |
| 128 | * This enumeration simply provides some common, predefined values. |
| 129 | */ |
| 130 | typedef enum { |
| 131 | PANGO_WEIGHT_THIN = 100, |
| 132 | PANGO_WEIGHT_ULTRALIGHT = 200, |
| 133 | PANGO_WEIGHT_LIGHT = 300, |
| 134 | PANGO_WEIGHT_SEMILIGHT = 350, |
| 135 | PANGO_WEIGHT_BOOK = 380, |
| 136 | PANGO_WEIGHT_NORMAL = 400, |
| 137 | PANGO_WEIGHT_MEDIUM = 500, |
| 138 | PANGO_WEIGHT_SEMIBOLD = 600, |
| 139 | PANGO_WEIGHT_BOLD = 700, |
| 140 | PANGO_WEIGHT_ULTRABOLD = 800, |
| 141 | PANGO_WEIGHT_HEAVY = 900, |
| 142 | PANGO_WEIGHT_ULTRAHEAVY = 1000 |
| 143 | } PangoWeight; |
| 144 | |
| 145 | /** |
| 146 | * PangoStretch: |
| 147 | * @PANGO_STRETCH_ULTRA_CONDENSED: ultra condensed width |
| 148 | * @PANGO_STRETCH_EXTRA_CONDENSED: extra condensed width |
| 149 | * @PANGO_STRETCH_CONDENSED: condensed width |
| 150 | * @PANGO_STRETCH_SEMI_CONDENSED: semi condensed width |
| 151 | * @PANGO_STRETCH_NORMAL: the normal width |
| 152 | * @PANGO_STRETCH_SEMI_EXPANDED: semi expanded width |
| 153 | * @PANGO_STRETCH_EXPANDED: expanded width |
| 154 | * @PANGO_STRETCH_EXTRA_EXPANDED: extra expanded width |
| 155 | * @PANGO_STRETCH_ULTRA_EXPANDED: ultra expanded width |
| 156 | * |
| 157 | * An enumeration specifying the width of the font relative to other designs |
| 158 | * within a family. |
| 159 | */ |
| 160 | typedef enum { |
| 161 | PANGO_STRETCH_ULTRA_CONDENSED, |
| 162 | , |
| 163 | PANGO_STRETCH_CONDENSED, |
| 164 | PANGO_STRETCH_SEMI_CONDENSED, |
| 165 | PANGO_STRETCH_NORMAL, |
| 166 | PANGO_STRETCH_SEMI_EXPANDED, |
| 167 | PANGO_STRETCH_EXPANDED, |
| 168 | PANGO_STRETCH_EXTRA_EXPANDED, |
| 169 | PANGO_STRETCH_ULTRA_EXPANDED |
| 170 | } PangoStretch; |
| 171 | |
| 172 | /** |
| 173 | * PangoFontMask: |
| 174 | * @PANGO_FONT_MASK_FAMILY: the font family is specified. |
| 175 | * @PANGO_FONT_MASK_STYLE: the font style is specified. |
| 176 | * @PANGO_FONT_MASK_VARIANT: the font variant is specified. |
| 177 | * @PANGO_FONT_MASK_WEIGHT: the font weight is specified. |
| 178 | * @PANGO_FONT_MASK_STRETCH: the font stretch is specified. |
| 179 | * @PANGO_FONT_MASK_SIZE: the font size is specified. |
| 180 | * @PANGO_FONT_MASK_GRAVITY: the font gravity is specified (Since: 1.16.) |
| 181 | * @PANGO_FONT_MASK_VARIATIONS: OpenType font variations are specified (Since: 1.42) |
| 182 | * |
| 183 | * The bits in a `PangoFontMask` correspond to the set fields in a |
| 184 | * `PangoFontDescription`. |
| 185 | */ |
| 186 | typedef enum { |
| 187 | PANGO_FONT_MASK_FAMILY = 1 << 0, |
| 188 | PANGO_FONT_MASK_STYLE = 1 << 1, |
| 189 | PANGO_FONT_MASK_VARIANT = 1 << 2, |
| 190 | PANGO_FONT_MASK_WEIGHT = 1 << 3, |
| 191 | PANGO_FONT_MASK_STRETCH = 1 << 4, |
| 192 | PANGO_FONT_MASK_SIZE = 1 << 5, |
| 193 | PANGO_FONT_MASK_GRAVITY = 1 << 6, |
| 194 | PANGO_FONT_MASK_VARIATIONS = 1 << 7, |
| 195 | } PangoFontMask; |
| 196 | |
| 197 | /* CSS scale factors (1.2 factor between each size) */ |
| 198 | /** |
| 199 | * PANGO_SCALE_XX_SMALL: |
| 200 | * |
| 201 | * The scale factor for three shrinking steps (1 / (1.2 * 1.2 * 1.2)). |
| 202 | */ |
| 203 | /** |
| 204 | * PANGO_SCALE_X_SMALL: |
| 205 | * |
| 206 | * The scale factor for two shrinking steps (1 / (1.2 * 1.2)). |
| 207 | */ |
| 208 | /** |
| 209 | * PANGO_SCALE_SMALL: |
| 210 | * |
| 211 | * The scale factor for one shrinking step (1 / 1.2). |
| 212 | */ |
| 213 | /** |
| 214 | * PANGO_SCALE_MEDIUM: |
| 215 | * |
| 216 | * The scale factor for normal size (1.0). |
| 217 | */ |
| 218 | /** |
| 219 | * PANGO_SCALE_LARGE: |
| 220 | * |
| 221 | * The scale factor for one magnification step (1.2). |
| 222 | */ |
| 223 | /** |
| 224 | * PANGO_SCALE_X_LARGE: |
| 225 | * |
| 226 | * The scale factor for two magnification steps (1.2 * 1.2). |
| 227 | */ |
| 228 | /** |
| 229 | * PANGO_SCALE_XX_LARGE: |
| 230 | * |
| 231 | * The scale factor for three magnification steps (1.2 * 1.2 * 1.2). |
| 232 | */ |
| 233 | #define PANGO_SCALE_XX_SMALL ((double)0.5787037037037) |
| 234 | #define PANGO_SCALE_X_SMALL ((double)0.6944444444444) |
| 235 | #define PANGO_SCALE_SMALL ((double)0.8333333333333) |
| 236 | #define PANGO_SCALE_MEDIUM ((double)1.0) |
| 237 | #define PANGO_SCALE_LARGE ((double)1.2) |
| 238 | #define PANGO_SCALE_X_LARGE ((double)1.44) |
| 239 | #define PANGO_SCALE_XX_LARGE ((double)1.728) |
| 240 | |
| 241 | /* |
| 242 | * PangoFontDescription |
| 243 | */ |
| 244 | |
| 245 | #define PANGO_TYPE_FONT_DESCRIPTION (pango_font_description_get_type ()) |
| 246 | |
| 247 | PANGO_AVAILABLE_IN_ALL |
| 248 | GType pango_font_description_get_type (void) G_GNUC_CONST; |
| 249 | PANGO_AVAILABLE_IN_ALL |
| 250 | PangoFontDescription *pango_font_description_new (void); |
| 251 | PANGO_AVAILABLE_IN_ALL |
| 252 | PangoFontDescription *pango_font_description_copy (const PangoFontDescription *desc); |
| 253 | PANGO_AVAILABLE_IN_ALL |
| 254 | PangoFontDescription *pango_font_description_copy_static (const PangoFontDescription *desc); |
| 255 | PANGO_AVAILABLE_IN_ALL |
| 256 | guint pango_font_description_hash (const PangoFontDescription *desc) G_GNUC_PURE; |
| 257 | PANGO_AVAILABLE_IN_ALL |
| 258 | gboolean pango_font_description_equal (const PangoFontDescription *desc1, |
| 259 | const PangoFontDescription *desc2) G_GNUC_PURE; |
| 260 | PANGO_AVAILABLE_IN_ALL |
| 261 | void pango_font_description_free (PangoFontDescription *desc); |
| 262 | PANGO_AVAILABLE_IN_ALL |
| 263 | void pango_font_descriptions_free (PangoFontDescription **descs, |
| 264 | int n_descs); |
| 265 | |
| 266 | PANGO_AVAILABLE_IN_ALL |
| 267 | void pango_font_description_set_family (PangoFontDescription *desc, |
| 268 | const char *family); |
| 269 | PANGO_AVAILABLE_IN_ALL |
| 270 | void pango_font_description_set_family_static (PangoFontDescription *desc, |
| 271 | const char *family); |
| 272 | PANGO_AVAILABLE_IN_ALL |
| 273 | const char *pango_font_description_get_family (const PangoFontDescription *desc) G_GNUC_PURE; |
| 274 | PANGO_AVAILABLE_IN_ALL |
| 275 | void pango_font_description_set_style (PangoFontDescription *desc, |
| 276 | PangoStyle style); |
| 277 | PANGO_AVAILABLE_IN_ALL |
| 278 | PangoStyle pango_font_description_get_style (const PangoFontDescription *desc) G_GNUC_PURE; |
| 279 | PANGO_AVAILABLE_IN_ALL |
| 280 | void pango_font_description_set_variant (PangoFontDescription *desc, |
| 281 | PangoVariant variant); |
| 282 | PANGO_AVAILABLE_IN_ALL |
| 283 | PangoVariant pango_font_description_get_variant (const PangoFontDescription *desc) G_GNUC_PURE; |
| 284 | PANGO_AVAILABLE_IN_ALL |
| 285 | void pango_font_description_set_weight (PangoFontDescription *desc, |
| 286 | PangoWeight weight); |
| 287 | PANGO_AVAILABLE_IN_ALL |
| 288 | PangoWeight pango_font_description_get_weight (const PangoFontDescription *desc) G_GNUC_PURE; |
| 289 | PANGO_AVAILABLE_IN_ALL |
| 290 | void pango_font_description_set_stretch (PangoFontDescription *desc, |
| 291 | PangoStretch stretch); |
| 292 | PANGO_AVAILABLE_IN_ALL |
| 293 | PangoStretch pango_font_description_get_stretch (const PangoFontDescription *desc) G_GNUC_PURE; |
| 294 | PANGO_AVAILABLE_IN_ALL |
| 295 | void pango_font_description_set_size (PangoFontDescription *desc, |
| 296 | gint size); |
| 297 | PANGO_AVAILABLE_IN_ALL |
| 298 | gint pango_font_description_get_size (const PangoFontDescription *desc) G_GNUC_PURE; |
| 299 | PANGO_AVAILABLE_IN_1_8 |
| 300 | void pango_font_description_set_absolute_size (PangoFontDescription *desc, |
| 301 | double size); |
| 302 | PANGO_AVAILABLE_IN_1_8 |
| 303 | gboolean pango_font_description_get_size_is_absolute (const PangoFontDescription *desc) G_GNUC_PURE; |
| 304 | PANGO_AVAILABLE_IN_1_16 |
| 305 | void pango_font_description_set_gravity (PangoFontDescription *desc, |
| 306 | PangoGravity gravity); |
| 307 | PANGO_AVAILABLE_IN_1_16 |
| 308 | PangoGravity pango_font_description_get_gravity (const PangoFontDescription *desc) G_GNUC_PURE; |
| 309 | |
| 310 | PANGO_AVAILABLE_IN_1_42 |
| 311 | void pango_font_description_set_variations_static (PangoFontDescription *desc, |
| 312 | const char *variations); |
| 313 | PANGO_AVAILABLE_IN_1_42 |
| 314 | void pango_font_description_set_variations (PangoFontDescription *desc, |
| 315 | const char *variations); |
| 316 | PANGO_AVAILABLE_IN_1_42 |
| 317 | const char *pango_font_description_get_variations (const PangoFontDescription *desc) G_GNUC_PURE; |
| 318 | |
| 319 | PANGO_AVAILABLE_IN_ALL |
| 320 | PangoFontMask pango_font_description_get_set_fields (const PangoFontDescription *desc) G_GNUC_PURE; |
| 321 | PANGO_AVAILABLE_IN_ALL |
| 322 | void pango_font_description_unset_fields (PangoFontDescription *desc, |
| 323 | PangoFontMask to_unset); |
| 324 | |
| 325 | PANGO_AVAILABLE_IN_ALL |
| 326 | void pango_font_description_merge (PangoFontDescription *desc, |
| 327 | const PangoFontDescription *desc_to_merge, |
| 328 | gboolean replace_existing); |
| 329 | PANGO_AVAILABLE_IN_ALL |
| 330 | void pango_font_description_merge_static (PangoFontDescription *desc, |
| 331 | const PangoFontDescription *desc_to_merge, |
| 332 | gboolean replace_existing); |
| 333 | |
| 334 | PANGO_AVAILABLE_IN_ALL |
| 335 | gboolean pango_font_description_better_match (const PangoFontDescription *desc, |
| 336 | const PangoFontDescription *old_match, |
| 337 | const PangoFontDescription *new_match) G_GNUC_PURE; |
| 338 | |
| 339 | PANGO_AVAILABLE_IN_ALL |
| 340 | PangoFontDescription *pango_font_description_from_string (const char *str); |
| 341 | PANGO_AVAILABLE_IN_ALL |
| 342 | char * pango_font_description_to_string (const PangoFontDescription *desc); |
| 343 | PANGO_AVAILABLE_IN_ALL |
| 344 | char * pango_font_description_to_filename (const PangoFontDescription *desc); |
| 345 | |
| 346 | /* |
| 347 | * PangoFontMetrics |
| 348 | */ |
| 349 | |
| 350 | #define PANGO_TYPE_FONT_METRICS (pango_font_metrics_get_type ()) |
| 351 | |
| 352 | struct _PangoFontMetrics |
| 353 | { |
| 354 | /* <private> */ |
| 355 | guint ref_count; |
| 356 | |
| 357 | int ascent; |
| 358 | int descent; |
| 359 | int height; |
| 360 | int approximate_char_width; |
| 361 | int approximate_digit_width; |
| 362 | int underline_position; |
| 363 | int underline_thickness; |
| 364 | int strikethrough_position; |
| 365 | int strikethrough_thickness; |
| 366 | }; |
| 367 | |
| 368 | PANGO_AVAILABLE_IN_ALL |
| 369 | GType pango_font_metrics_get_type (void) G_GNUC_CONST; |
| 370 | PANGO_AVAILABLE_IN_ALL |
| 371 | PangoFontMetrics *pango_font_metrics_ref (PangoFontMetrics *metrics); |
| 372 | PANGO_AVAILABLE_IN_ALL |
| 373 | void pango_font_metrics_unref (PangoFontMetrics *metrics); |
| 374 | PANGO_AVAILABLE_IN_ALL |
| 375 | int pango_font_metrics_get_ascent (PangoFontMetrics *metrics) G_GNUC_PURE; |
| 376 | PANGO_AVAILABLE_IN_ALL |
| 377 | int pango_font_metrics_get_descent (PangoFontMetrics *metrics) G_GNUC_PURE; |
| 378 | PANGO_AVAILABLE_IN_1_44 |
| 379 | int pango_font_metrics_get_height (PangoFontMetrics *metrics) G_GNUC_PURE; |
| 380 | PANGO_AVAILABLE_IN_ALL |
| 381 | int pango_font_metrics_get_approximate_char_width (PangoFontMetrics *metrics) G_GNUC_PURE; |
| 382 | PANGO_AVAILABLE_IN_ALL |
| 383 | int pango_font_metrics_get_approximate_digit_width (PangoFontMetrics *metrics) G_GNUC_PURE; |
| 384 | PANGO_AVAILABLE_IN_1_6 |
| 385 | int pango_font_metrics_get_underline_position (PangoFontMetrics *metrics) G_GNUC_PURE; |
| 386 | PANGO_AVAILABLE_IN_1_6 |
| 387 | int pango_font_metrics_get_underline_thickness (PangoFontMetrics *metrics) G_GNUC_PURE; |
| 388 | PANGO_AVAILABLE_IN_1_6 |
| 389 | int pango_font_metrics_get_strikethrough_position (PangoFontMetrics *metrics) G_GNUC_PURE; |
| 390 | PANGO_AVAILABLE_IN_1_6 |
| 391 | int pango_font_metrics_get_strikethrough_thickness (PangoFontMetrics *metrics) G_GNUC_PURE; |
| 392 | |
| 393 | |
| 394 | /* |
| 395 | * PangoFontFamily |
| 396 | */ |
| 397 | |
| 398 | #define PANGO_TYPE_FONT_FAMILY (pango_font_family_get_type ()) |
| 399 | #define PANGO_FONT_FAMILY(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), PANGO_TYPE_FONT_FAMILY, PangoFontFamily)) |
| 400 | #define PANGO_IS_FONT_FAMILY(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), PANGO_TYPE_FONT_FAMILY)) |
| 401 | #define PANGO_FONT_FAMILY_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), PANGO_TYPE_FONT_FAMILY, PangoFontFamilyClass)) |
| 402 | #define PANGO_IS_FONT_FAMILY_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), PANGO_TYPE_FONT_FAMILY)) |
| 403 | #define PANGO_FONT_FAMILY_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), PANGO_TYPE_FONT_FAMILY, PangoFontFamilyClass)) |
| 404 | |
| 405 | typedef struct _PangoFontFace PangoFontFace; |
| 406 | typedef struct _PangoFontFamily PangoFontFamily; |
| 407 | typedef struct _PangoFontFamilyClass PangoFontFamilyClass; |
| 408 | |
| 409 | #ifndef PANGO_DISABLE_DEPRECATED |
| 410 | |
| 411 | /** |
| 412 | * PangoFontFamily: |
| 413 | * |
| 414 | * A `PangoFontFamily` is used to represent a family of related |
| 415 | * font faces. |
| 416 | * |
| 417 | * The font faces in a family share a common design, but differ in |
| 418 | * slant, weight, width or other aspects. |
| 419 | */ |
| 420 | struct _PangoFontFamily |
| 421 | { |
| 422 | GObject parent_instance; |
| 423 | }; |
| 424 | |
| 425 | struct _PangoFontFamilyClass |
| 426 | { |
| 427 | GObjectClass parent_class; |
| 428 | |
| 429 | /*< public >*/ |
| 430 | |
| 431 | void (*list_faces) (PangoFontFamily *family, |
| 432 | PangoFontFace ***faces, |
| 433 | int *n_faces); |
| 434 | const char * (*get_name) (PangoFontFamily *family); |
| 435 | gboolean (*is_monospace) (PangoFontFamily *family); |
| 436 | gboolean (*is_variable) (PangoFontFamily *family); |
| 437 | |
| 438 | PangoFontFace * (*get_face) (PangoFontFamily *family, |
| 439 | const char *name); |
| 440 | |
| 441 | |
| 442 | /*< private >*/ |
| 443 | |
| 444 | /* Padding for future expansion */ |
| 445 | void (*_pango_reserved2) (void); |
| 446 | }; |
| 447 | |
| 448 | #endif /* PANGO_DISABLE_DEPRECATED */ |
| 449 | |
| 450 | PANGO_AVAILABLE_IN_ALL |
| 451 | GType pango_font_family_get_type (void) G_GNUC_CONST; |
| 452 | |
| 453 | PANGO_AVAILABLE_IN_ALL |
| 454 | void pango_font_family_list_faces (PangoFontFamily *family, |
| 455 | PangoFontFace ***faces, |
| 456 | int *n_faces); |
| 457 | PANGO_AVAILABLE_IN_ALL |
| 458 | const char *pango_font_family_get_name (PangoFontFamily *family) G_GNUC_PURE; |
| 459 | PANGO_AVAILABLE_IN_1_4 |
| 460 | gboolean pango_font_family_is_monospace (PangoFontFamily *family) G_GNUC_PURE; |
| 461 | PANGO_AVAILABLE_IN_1_44 |
| 462 | gboolean pango_font_family_is_variable (PangoFontFamily *family) G_GNUC_PURE; |
| 463 | |
| 464 | PANGO_AVAILABLE_IN_1_46 |
| 465 | PangoFontFace *pango_font_family_get_face (PangoFontFamily *family, |
| 466 | const char *name); |
| 467 | |
| 468 | |
| 469 | /* |
| 470 | * PangoFontFace |
| 471 | */ |
| 472 | |
| 473 | #define PANGO_TYPE_FONT_FACE (pango_font_face_get_type ()) |
| 474 | #define PANGO_FONT_FACE(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), PANGO_TYPE_FONT_FACE, PangoFontFace)) |
| 475 | #define PANGO_IS_FONT_FACE(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), PANGO_TYPE_FONT_FACE)) |
| 476 | #define PANGO_FONT_FACE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), PANGO_TYPE_FONT_FACE, PangoFontFaceClass)) |
| 477 | #define PANGO_IS_FONT_FACE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), PANGO_TYPE_FONT_FACE)) |
| 478 | #define PANGO_FONT_FACE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), PANGO_TYPE_FONT_FACE, PangoFontFaceClass)) |
| 479 | |
| 480 | typedef struct _PangoFontFaceClass PangoFontFaceClass; |
| 481 | |
| 482 | #ifndef PANGO_DISABLE_DEPRECATED |
| 483 | |
| 484 | /** |
| 485 | * PangoFontFace: |
| 486 | * |
| 487 | * A `PangoFontFace` is used to represent a group of fonts with |
| 488 | * the same family, slant, weight, and width, but varying sizes. |
| 489 | */ |
| 490 | struct _PangoFontFace |
| 491 | { |
| 492 | GObject parent_instance; |
| 493 | }; |
| 494 | |
| 495 | struct _PangoFontFaceClass |
| 496 | { |
| 497 | GObjectClass parent_class; |
| 498 | |
| 499 | /*< public >*/ |
| 500 | |
| 501 | const char * (*get_face_name) (PangoFontFace *face); |
| 502 | PangoFontDescription * (*describe) (PangoFontFace *face); |
| 503 | void (*list_sizes) (PangoFontFace *face, |
| 504 | int **sizes, |
| 505 | int *n_sizes); |
| 506 | gboolean (*is_synthesized) (PangoFontFace *face); |
| 507 | PangoFontFamily * (*get_family) (PangoFontFace *face); |
| 508 | |
| 509 | /*< private >*/ |
| 510 | |
| 511 | /* Padding for future expansion */ |
| 512 | void (*_pango_reserved3) (void); |
| 513 | void (*_pango_reserved4) (void); |
| 514 | }; |
| 515 | |
| 516 | #endif /* PANGO_DISABLE_DEPRECATED */ |
| 517 | |
| 518 | PANGO_AVAILABLE_IN_ALL |
| 519 | GType pango_font_face_get_type (void) G_GNUC_CONST; |
| 520 | |
| 521 | PANGO_AVAILABLE_IN_ALL |
| 522 | PangoFontDescription *pango_font_face_describe (PangoFontFace *face); |
| 523 | PANGO_AVAILABLE_IN_ALL |
| 524 | const char *pango_font_face_get_face_name (PangoFontFace *face) G_GNUC_PURE; |
| 525 | PANGO_AVAILABLE_IN_1_4 |
| 526 | void pango_font_face_list_sizes (PangoFontFace *face, |
| 527 | int **sizes, |
| 528 | int *n_sizes); |
| 529 | PANGO_AVAILABLE_IN_1_18 |
| 530 | gboolean pango_font_face_is_synthesized (PangoFontFace *face) G_GNUC_PURE; |
| 531 | |
| 532 | PANGO_AVAILABLE_IN_1_46 |
| 533 | PangoFontFamily * pango_font_face_get_family (PangoFontFace *face); |
| 534 | |
| 535 | |
| 536 | /* |
| 537 | * PangoFont |
| 538 | */ |
| 539 | |
| 540 | #define PANGO_TYPE_FONT (pango_font_get_type ()) |
| 541 | #define PANGO_FONT(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), PANGO_TYPE_FONT, PangoFont)) |
| 542 | #define PANGO_IS_FONT(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), PANGO_TYPE_FONT)) |
| 543 | #define PANGO_FONT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), PANGO_TYPE_FONT, PangoFontClass)) |
| 544 | #define PANGO_IS_FONT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), PANGO_TYPE_FONT)) |
| 545 | #define PANGO_FONT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), PANGO_TYPE_FONT, PangoFontClass)) |
| 546 | |
| 547 | |
| 548 | #ifndef PANGO_DISABLE_DEPRECATED |
| 549 | |
| 550 | /** |
| 551 | * PangoFont: |
| 552 | * |
| 553 | * A `PangoFont` is used to represent a font in a |
| 554 | * rendering-system-independent manner. |
| 555 | */ |
| 556 | struct _PangoFont |
| 557 | { |
| 558 | GObject parent_instance; |
| 559 | }; |
| 560 | |
| 561 | typedef struct _PangoFontClass PangoFontClass; |
| 562 | struct _PangoFontClass |
| 563 | { |
| 564 | GObjectClass parent_class; |
| 565 | |
| 566 | /*< public >*/ |
| 567 | |
| 568 | PangoFontDescription *(*describe) (PangoFont *font); |
| 569 | PangoCoverage * (*get_coverage) (PangoFont *font, |
| 570 | PangoLanguage *language); |
| 571 | void (*get_glyph_extents) (PangoFont *font, |
| 572 | PangoGlyph glyph, |
| 573 | PangoRectangle *ink_rect, |
| 574 | PangoRectangle *logical_rect); |
| 575 | PangoFontMetrics * (*get_metrics) (PangoFont *font, |
| 576 | PangoLanguage *language); |
| 577 | PangoFontMap * (*get_font_map) (PangoFont *font); |
| 578 | PangoFontDescription *(*describe_absolute) (PangoFont *font); |
| 579 | void (*get_features) (PangoFont *font, |
| 580 | hb_feature_t *features, |
| 581 | guint len, |
| 582 | guint *num_features); |
| 583 | hb_font_t * (*create_hb_font) (PangoFont *font); |
| 584 | }; |
| 585 | |
| 586 | #endif /* PANGO_DISABLE_DEPRECATED */ |
| 587 | |
| 588 | PANGO_AVAILABLE_IN_ALL |
| 589 | GType pango_font_get_type (void) G_GNUC_CONST; |
| 590 | |
| 591 | PANGO_AVAILABLE_IN_ALL |
| 592 | PangoFontDescription *pango_font_describe (PangoFont *font); |
| 593 | PANGO_AVAILABLE_IN_1_14 |
| 594 | PangoFontDescription *pango_font_describe_with_absolute_size (PangoFont *font); |
| 595 | PANGO_AVAILABLE_IN_ALL |
| 596 | PangoCoverage * pango_font_get_coverage (PangoFont *font, |
| 597 | PangoLanguage *language); |
| 598 | #ifndef __GI_SCANNER__ |
| 599 | PANGO_DEPRECATED_IN_1_44 |
| 600 | PangoEngineShape * pango_font_find_shaper (PangoFont *font, |
| 601 | PangoLanguage *language, |
| 602 | guint32 ch); |
| 603 | #endif |
| 604 | PANGO_AVAILABLE_IN_ALL |
| 605 | PangoFontMetrics * pango_font_get_metrics (PangoFont *font, |
| 606 | PangoLanguage *language); |
| 607 | PANGO_AVAILABLE_IN_ALL |
| 608 | void pango_font_get_glyph_extents (PangoFont *font, |
| 609 | PangoGlyph glyph, |
| 610 | PangoRectangle *ink_rect, |
| 611 | PangoRectangle *logical_rect); |
| 612 | PANGO_AVAILABLE_IN_1_10 |
| 613 | PangoFontMap *pango_font_get_font_map (PangoFont *font); |
| 614 | |
| 615 | PANGO_AVAILABLE_IN_1_46 |
| 616 | PangoFontFace * pango_font_get_face (PangoFont *font); |
| 617 | |
| 618 | PANGO_AVAILABLE_IN_1_44 |
| 619 | gboolean pango_font_has_char (PangoFont *font, |
| 620 | gunichar wc); |
| 621 | PANGO_AVAILABLE_IN_1_44 |
| 622 | void pango_font_get_features (PangoFont *font, |
| 623 | hb_feature_t *features, |
| 624 | guint len, |
| 625 | guint *num_features); |
| 626 | PANGO_AVAILABLE_IN_1_44 |
| 627 | hb_font_t * pango_font_get_hb_font (PangoFont *font); |
| 628 | |
| 629 | PANGO_AVAILABLE_IN_1_50 |
| 630 | PangoLanguage ** pango_font_get_languages (PangoFont *font); |
| 631 | |
| 632 | PANGO_AVAILABLE_IN_1_50 |
| 633 | GBytes * pango_font_serialize (PangoFont *font); |
| 634 | |
| 635 | PANGO_AVAILABLE_IN_1_50 |
| 636 | PangoFont * pango_font_deserialize (PangoContext *context, |
| 637 | GBytes *bytes, |
| 638 | GError **error); |
| 639 | |
| 640 | /** |
| 641 | * PANGO_GLYPH_EMPTY: |
| 642 | * |
| 643 | * A `PangoGlyph` value that indicates a zero-width empty glpyh. |
| 644 | * |
| 645 | * This is useful for example in shaper modules, to use as the glyph for |
| 646 | * various zero-width Unicode characters (those passing [func@is_zero_width]). |
| 647 | */ |
| 648 | |
| 649 | /** |
| 650 | * PANGO_GLYPH_INVALID_INPUT: |
| 651 | * |
| 652 | * A `PangoGlyph` value for invalid input. |
| 653 | * |
| 654 | * `PangoLayout` produces one such glyph per invalid input UTF-8 byte and such |
| 655 | * a glyph is rendered as a crossed box. |
| 656 | * |
| 657 | * Note that this value is defined such that it has the %PANGO_GLYPH_UNKNOWN_FLAG |
| 658 | * set. |
| 659 | * |
| 660 | * Since: 1.20 |
| 661 | */ |
| 662 | /** |
| 663 | * PANGO_GLYPH_UNKNOWN_FLAG: |
| 664 | * |
| 665 | * Flag used in `PangoGlyph` to turn a `gunichar` value of a valid Unicode |
| 666 | * character into an unknown-character glyph for that `gunichar`. |
| 667 | * |
| 668 | * Such unknown-character glyphs may be rendered as a 'hex box'. |
| 669 | */ |
| 670 | /** |
| 671 | * PANGO_GET_UNKNOWN_GLYPH: |
| 672 | * @wc: a Unicode character |
| 673 | * |
| 674 | * The way this unknown glyphs are rendered is backend specific. For example, |
| 675 | * a box with the hexadecimal Unicode code-point of the character written in it |
| 676 | * is what is done in the most common backends. |
| 677 | * |
| 678 | * Returns: a `PangoGlyph` value that means no glyph was found for @wc. |
| 679 | */ |
| 680 | #define PANGO_GLYPH_EMPTY ((PangoGlyph)0x0FFFFFFF) |
| 681 | #define PANGO_GLYPH_INVALID_INPUT ((PangoGlyph)0xFFFFFFFF) |
| 682 | #define PANGO_GLYPH_UNKNOWN_FLAG ((PangoGlyph)0x10000000) |
| 683 | #define PANGO_GET_UNKNOWN_GLYPH(wc) ((PangoGlyph)(wc)|PANGO_GLYPH_UNKNOWN_FLAG) |
| 684 | |
| 685 | #ifndef __GI_SCANNER__ |
| 686 | #ifndef PANGO_DISABLE_DEPRECATED |
| 687 | #define PANGO_UNKNOWN_GLYPH_WIDTH 10 |
| 688 | #define PANGO_UNKNOWN_GLYPH_HEIGHT 14 |
| 689 | #endif |
| 690 | #endif |
| 691 | |
| 692 | G_DEFINE_AUTOPTR_CLEANUP_FUNC(PangoFontFamily, g_object_unref) |
| 693 | G_DEFINE_AUTOPTR_CLEANUP_FUNC(PangoFontFace, g_object_unref) |
| 694 | G_DEFINE_AUTOPTR_CLEANUP_FUNC(PangoFont, g_object_unref) |
| 695 | G_DEFINE_AUTOPTR_CLEANUP_FUNC(PangoFontDescription, pango_font_description_free) |
| 696 | |
| 697 | G_END_DECLS |
| 698 | |
| 699 | #endif /* __PANGO_FONT_H__ */ |
| 700 | |