| 1 | /* Pango |
| 2 | * pango-layout.h: High-level layout driver |
| 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_LAYOUT_H__ |
| 23 | #define __PANGO_LAYOUT_H__ |
| 24 | |
| 25 | #include <pango/pango-attributes.h> |
| 26 | #include <pango/pango-context.h> |
| 27 | #include <pango/pango-glyph-item.h> |
| 28 | #include <pango/pango-tabs.h> |
| 29 | |
| 30 | G_BEGIN_DECLS |
| 31 | |
| 32 | typedef struct _PangoLayout PangoLayout; |
| 33 | typedef struct _PangoLayoutClass PangoLayoutClass; |
| 34 | typedef struct _PangoLayoutLine PangoLayoutLine; |
| 35 | |
| 36 | /** |
| 37 | * PangoLayoutRun: |
| 38 | * |
| 39 | * A `PangoLayoutRun` represents a single run within a `PangoLayoutLine`. |
| 40 | * |
| 41 | * It is simply an alternate name for [struct@Pango.GlyphItem]. |
| 42 | * See the [struct@Pango.GlyphItem] docs for details on the fields. |
| 43 | */ |
| 44 | typedef PangoGlyphItem PangoLayoutRun; |
| 45 | |
| 46 | /** |
| 47 | * PangoAlignment: |
| 48 | * @PANGO_ALIGN_LEFT: Put all available space on the right |
| 49 | * @PANGO_ALIGN_CENTER: Center the line within the available space |
| 50 | * @PANGO_ALIGN_RIGHT: Put all available space on the left |
| 51 | * |
| 52 | * `PangoAlignment` describes how to align the lines of a `PangoLayout` |
| 53 | * within the available space. |
| 54 | * |
| 55 | * If the `PangoLayout` is set to justify using [method@Pango.Layout.set_justify], |
| 56 | * this only affects partial lines. |
| 57 | * |
| 58 | * See [method@Pango.Layout.set_auto_dir] for how text direction affects |
| 59 | * the interpretation of `PangoAlignment` values. |
| 60 | */ |
| 61 | typedef enum { |
| 62 | PANGO_ALIGN_LEFT, |
| 63 | PANGO_ALIGN_CENTER, |
| 64 | PANGO_ALIGN_RIGHT |
| 65 | } PangoAlignment; |
| 66 | |
| 67 | /** |
| 68 | * PangoWrapMode: |
| 69 | * @PANGO_WRAP_WORD: wrap lines at word boundaries. |
| 70 | * @PANGO_WRAP_CHAR: wrap lines at character boundaries. |
| 71 | * @PANGO_WRAP_WORD_CHAR: wrap lines at word boundaries, but fall back to |
| 72 | * character boundaries if there is not enough space for a full word. |
| 73 | * |
| 74 | * `PangoWrapMode` describes how to wrap the lines of a `PangoLayout` |
| 75 | * to the desired width. |
| 76 | * |
| 77 | * For @PANGO_WRAP_WORD, Pango uses break opportunities that are determined |
| 78 | * by the Unicode line breaking algorithm. For @PANGO_WRAP_CHAR, Pango allows |
| 79 | * breaking at grapheme boundaries that are determined by the Unicode text |
| 80 | * segmentation algorithm. |
| 81 | */ |
| 82 | typedef enum { |
| 83 | PANGO_WRAP_WORD, |
| 84 | PANGO_WRAP_CHAR, |
| 85 | PANGO_WRAP_WORD_CHAR |
| 86 | } PangoWrapMode; |
| 87 | |
| 88 | /** |
| 89 | * PangoEllipsizeMode: |
| 90 | * @PANGO_ELLIPSIZE_NONE: No ellipsization |
| 91 | * @PANGO_ELLIPSIZE_START: Omit characters at the start of the text |
| 92 | * @PANGO_ELLIPSIZE_MIDDLE: Omit characters in the middle of the text |
| 93 | * @PANGO_ELLIPSIZE_END: Omit characters at the end of the text |
| 94 | * |
| 95 | * `PangoEllipsizeMode` describes what sort of ellipsization |
| 96 | * should be applied to text. |
| 97 | * |
| 98 | * In the ellipsization process characters are removed from the |
| 99 | * text in order to make it fit to a given width and replaced |
| 100 | * with an ellipsis. |
| 101 | */ |
| 102 | typedef enum { |
| 103 | PANGO_ELLIPSIZE_NONE, |
| 104 | PANGO_ELLIPSIZE_START, |
| 105 | PANGO_ELLIPSIZE_MIDDLE, |
| 106 | PANGO_ELLIPSIZE_END |
| 107 | } PangoEllipsizeMode; |
| 108 | |
| 109 | /** |
| 110 | * PangoLayoutLine: |
| 111 | * @layout: (nullable): the layout this line belongs to, might be %NULL |
| 112 | * @start_index: start of line as byte index into layout->text |
| 113 | * @length: length of line in bytes |
| 114 | * @runs: (nullable) (element-type Pango.LayoutRun): list of runs in the |
| 115 | * line, from left to right |
| 116 | * @is_paragraph_start: #TRUE if this is the first line of the paragraph |
| 117 | * @resolved_dir: #Resolved PangoDirection of line |
| 118 | * |
| 119 | * A `PangoLayoutLine` represents one of the lines resulting from laying |
| 120 | * out a paragraph via `PangoLayout`. |
| 121 | * |
| 122 | * `PangoLayoutLine` structures are obtained by calling |
| 123 | * [method@Pango.Layout.get_line] and are only valid until the text, |
| 124 | * attributes, or settings of the parent `PangoLayout` are modified. |
| 125 | */ |
| 126 | struct _PangoLayoutLine |
| 127 | { |
| 128 | PangoLayout *layout; |
| 129 | gint start_index; /* start of line as byte index into layout->text */ |
| 130 | gint length; /* length of line in bytes */ |
| 131 | GSList *runs; |
| 132 | guint is_paragraph_start : 1; /* TRUE if this is the first line of the paragraph */ |
| 133 | guint resolved_dir : 3; /* Resolved PangoDirection of line */ |
| 134 | }; |
| 135 | |
| 136 | #define PANGO_TYPE_LAYOUT (pango_layout_get_type ()) |
| 137 | #define PANGO_LAYOUT(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), PANGO_TYPE_LAYOUT, PangoLayout)) |
| 138 | #define PANGO_LAYOUT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), PANGO_TYPE_LAYOUT, PangoLayoutClass)) |
| 139 | #define PANGO_IS_LAYOUT(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), PANGO_TYPE_LAYOUT)) |
| 140 | #define PANGO_IS_LAYOUT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), PANGO_TYPE_LAYOUT)) |
| 141 | #define PANGO_LAYOUT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), PANGO_TYPE_LAYOUT, PangoLayoutClass)) |
| 142 | |
| 143 | /* The PangoLayout and PangoLayoutClass structs are private; if you |
| 144 | * need to create a subclass of these, file a bug. |
| 145 | */ |
| 146 | |
| 147 | PANGO_AVAILABLE_IN_ALL |
| 148 | GType pango_layout_get_type (void) G_GNUC_CONST; |
| 149 | PANGO_AVAILABLE_IN_ALL |
| 150 | PangoLayout *pango_layout_new (PangoContext *context); |
| 151 | PANGO_AVAILABLE_IN_ALL |
| 152 | PangoLayout *pango_layout_copy (PangoLayout *src); |
| 153 | |
| 154 | PANGO_AVAILABLE_IN_ALL |
| 155 | PangoContext *pango_layout_get_context (PangoLayout *layout); |
| 156 | |
| 157 | PANGO_AVAILABLE_IN_ALL |
| 158 | void pango_layout_set_attributes (PangoLayout *layout, |
| 159 | PangoAttrList *attrs); |
| 160 | PANGO_AVAILABLE_IN_ALL |
| 161 | PangoAttrList *pango_layout_get_attributes (PangoLayout *layout); |
| 162 | |
| 163 | PANGO_AVAILABLE_IN_ALL |
| 164 | void pango_layout_set_text (PangoLayout *layout, |
| 165 | const char *text, |
| 166 | int length); |
| 167 | PANGO_AVAILABLE_IN_ALL |
| 168 | const char *pango_layout_get_text (PangoLayout *layout); |
| 169 | |
| 170 | PANGO_AVAILABLE_IN_1_30 |
| 171 | gint pango_layout_get_character_count (PangoLayout *layout); |
| 172 | |
| 173 | PANGO_AVAILABLE_IN_ALL |
| 174 | void pango_layout_set_markup (PangoLayout *layout, |
| 175 | const char *markup, |
| 176 | int length); |
| 177 | |
| 178 | PANGO_AVAILABLE_IN_ALL |
| 179 | void pango_layout_set_markup_with_accel (PangoLayout *layout, |
| 180 | const char *markup, |
| 181 | int length, |
| 182 | gunichar accel_marker, |
| 183 | gunichar *accel_char); |
| 184 | |
| 185 | PANGO_AVAILABLE_IN_ALL |
| 186 | void pango_layout_set_font_description (PangoLayout *layout, |
| 187 | const PangoFontDescription *desc); |
| 188 | |
| 189 | PANGO_AVAILABLE_IN_1_8 |
| 190 | const PangoFontDescription *pango_layout_get_font_description (PangoLayout *layout); |
| 191 | |
| 192 | PANGO_AVAILABLE_IN_ALL |
| 193 | void pango_layout_set_width (PangoLayout *layout, |
| 194 | int width); |
| 195 | PANGO_AVAILABLE_IN_ALL |
| 196 | int pango_layout_get_width (PangoLayout *layout); |
| 197 | PANGO_AVAILABLE_IN_1_20 |
| 198 | void pango_layout_set_height (PangoLayout *layout, |
| 199 | int height); |
| 200 | PANGO_AVAILABLE_IN_1_20 |
| 201 | int pango_layout_get_height (PangoLayout *layout); |
| 202 | PANGO_AVAILABLE_IN_ALL |
| 203 | void pango_layout_set_wrap (PangoLayout *layout, |
| 204 | PangoWrapMode wrap); |
| 205 | PANGO_AVAILABLE_IN_ALL |
| 206 | PangoWrapMode pango_layout_get_wrap (PangoLayout *layout); |
| 207 | PANGO_AVAILABLE_IN_1_16 |
| 208 | gboolean pango_layout_is_wrapped (PangoLayout *layout); |
| 209 | PANGO_AVAILABLE_IN_ALL |
| 210 | void pango_layout_set_indent (PangoLayout *layout, |
| 211 | int indent); |
| 212 | PANGO_AVAILABLE_IN_ALL |
| 213 | int pango_layout_get_indent (PangoLayout *layout); |
| 214 | PANGO_AVAILABLE_IN_ALL |
| 215 | void pango_layout_set_spacing (PangoLayout *layout, |
| 216 | int spacing); |
| 217 | PANGO_AVAILABLE_IN_ALL |
| 218 | int pango_layout_get_spacing (PangoLayout *layout); |
| 219 | PANGO_AVAILABLE_IN_1_44 |
| 220 | void pango_layout_set_line_spacing (PangoLayout *layout, |
| 221 | float factor); |
| 222 | PANGO_AVAILABLE_IN_1_44 |
| 223 | float pango_layout_get_line_spacing (PangoLayout *layout); |
| 224 | PANGO_AVAILABLE_IN_ALL |
| 225 | void pango_layout_set_justify (PangoLayout *layout, |
| 226 | gboolean justify); |
| 227 | PANGO_AVAILABLE_IN_ALL |
| 228 | gboolean pango_layout_get_justify (PangoLayout *layout); |
| 229 | PANGO_AVAILABLE_IN_1_50 |
| 230 | void pango_layout_set_justify_last_line (PangoLayout *layout, |
| 231 | gboolean justify); |
| 232 | PANGO_AVAILABLE_IN_1_50 |
| 233 | gboolean pango_layout_get_justify_last_line (PangoLayout *layout); |
| 234 | PANGO_AVAILABLE_IN_1_4 |
| 235 | void pango_layout_set_auto_dir (PangoLayout *layout, |
| 236 | gboolean auto_dir); |
| 237 | PANGO_AVAILABLE_IN_1_4 |
| 238 | gboolean pango_layout_get_auto_dir (PangoLayout *layout); |
| 239 | PANGO_AVAILABLE_IN_ALL |
| 240 | void pango_layout_set_alignment (PangoLayout *layout, |
| 241 | PangoAlignment alignment); |
| 242 | PANGO_AVAILABLE_IN_ALL |
| 243 | PangoAlignment pango_layout_get_alignment (PangoLayout *layout); |
| 244 | |
| 245 | PANGO_AVAILABLE_IN_ALL |
| 246 | void pango_layout_set_tabs (PangoLayout *layout, |
| 247 | PangoTabArray *tabs); |
| 248 | PANGO_AVAILABLE_IN_ALL |
| 249 | PangoTabArray* pango_layout_get_tabs (PangoLayout *layout); |
| 250 | |
| 251 | PANGO_AVAILABLE_IN_ALL |
| 252 | void pango_layout_set_single_paragraph_mode (PangoLayout *layout, |
| 253 | gboolean setting); |
| 254 | PANGO_AVAILABLE_IN_ALL |
| 255 | gboolean pango_layout_get_single_paragraph_mode (PangoLayout *layout); |
| 256 | |
| 257 | PANGO_AVAILABLE_IN_1_6 |
| 258 | void pango_layout_set_ellipsize (PangoLayout *layout, |
| 259 | PangoEllipsizeMode ellipsize); |
| 260 | PANGO_AVAILABLE_IN_1_6 |
| 261 | PangoEllipsizeMode pango_layout_get_ellipsize (PangoLayout *layout); |
| 262 | PANGO_AVAILABLE_IN_1_16 |
| 263 | gboolean pango_layout_is_ellipsized (PangoLayout *layout); |
| 264 | |
| 265 | PANGO_AVAILABLE_IN_1_16 |
| 266 | int pango_layout_get_unknown_glyphs_count (PangoLayout *layout); |
| 267 | |
| 268 | PANGO_AVAILABLE_IN_1_46 |
| 269 | PangoDirection pango_layout_get_direction (PangoLayout *layout, |
| 270 | int index); |
| 271 | |
| 272 | PANGO_AVAILABLE_IN_ALL |
| 273 | void pango_layout_context_changed (PangoLayout *layout); |
| 274 | PANGO_AVAILABLE_IN_1_32 |
| 275 | guint pango_layout_get_serial (PangoLayout *layout); |
| 276 | |
| 277 | PANGO_AVAILABLE_IN_ALL |
| 278 | void pango_layout_get_log_attrs (PangoLayout *layout, |
| 279 | PangoLogAttr **attrs, |
| 280 | gint *n_attrs); |
| 281 | |
| 282 | PANGO_AVAILABLE_IN_1_30 |
| 283 | const PangoLogAttr *pango_layout_get_log_attrs_readonly (PangoLayout *layout, |
| 284 | gint *n_attrs); |
| 285 | |
| 286 | PANGO_AVAILABLE_IN_ALL |
| 287 | void pango_layout_index_to_pos (PangoLayout *layout, |
| 288 | int index_, |
| 289 | PangoRectangle *pos); |
| 290 | PANGO_AVAILABLE_IN_ALL |
| 291 | void pango_layout_index_to_line_x (PangoLayout *layout, |
| 292 | int index_, |
| 293 | gboolean trailing, |
| 294 | int *line, |
| 295 | int *x_pos); |
| 296 | PANGO_AVAILABLE_IN_ALL |
| 297 | void pango_layout_get_cursor_pos (PangoLayout *layout, |
| 298 | int index_, |
| 299 | PangoRectangle *strong_pos, |
| 300 | PangoRectangle *weak_pos); |
| 301 | |
| 302 | PANGO_AVAILABLE_IN_1_50 |
| 303 | void pango_layout_get_caret_pos (PangoLayout *layout, |
| 304 | int index_, |
| 305 | PangoRectangle *strong_pos, |
| 306 | PangoRectangle *weak_pos); |
| 307 | |
| 308 | PANGO_AVAILABLE_IN_ALL |
| 309 | void pango_layout_move_cursor_visually (PangoLayout *layout, |
| 310 | gboolean strong, |
| 311 | int old_index, |
| 312 | int old_trailing, |
| 313 | int direction, |
| 314 | int *new_index, |
| 315 | int *new_trailing); |
| 316 | PANGO_AVAILABLE_IN_ALL |
| 317 | gboolean pango_layout_xy_to_index (PangoLayout *layout, |
| 318 | int x, |
| 319 | int y, |
| 320 | int *index_, |
| 321 | int *trailing); |
| 322 | PANGO_AVAILABLE_IN_ALL |
| 323 | void pango_layout_get_extents (PangoLayout *layout, |
| 324 | PangoRectangle *ink_rect, |
| 325 | PangoRectangle *logical_rect); |
| 326 | PANGO_AVAILABLE_IN_ALL |
| 327 | void pango_layout_get_pixel_extents (PangoLayout *layout, |
| 328 | PangoRectangle *ink_rect, |
| 329 | PangoRectangle *logical_rect); |
| 330 | PANGO_AVAILABLE_IN_ALL |
| 331 | void pango_layout_get_size (PangoLayout *layout, |
| 332 | int *width, |
| 333 | int *height); |
| 334 | PANGO_AVAILABLE_IN_ALL |
| 335 | void pango_layout_get_pixel_size (PangoLayout *layout, |
| 336 | int *width, |
| 337 | int *height); |
| 338 | PANGO_AVAILABLE_IN_1_22 |
| 339 | int pango_layout_get_baseline (PangoLayout *layout); |
| 340 | |
| 341 | PANGO_AVAILABLE_IN_ALL |
| 342 | int pango_layout_get_line_count (PangoLayout *layout); |
| 343 | PANGO_AVAILABLE_IN_ALL |
| 344 | PangoLayoutLine *pango_layout_get_line (PangoLayout *layout, |
| 345 | int line); |
| 346 | PANGO_AVAILABLE_IN_1_16 |
| 347 | PangoLayoutLine *pango_layout_get_line_readonly (PangoLayout *layout, |
| 348 | int line); |
| 349 | PANGO_AVAILABLE_IN_ALL |
| 350 | GSList * pango_layout_get_lines (PangoLayout *layout); |
| 351 | PANGO_AVAILABLE_IN_1_16 |
| 352 | GSList * pango_layout_get_lines_readonly (PangoLayout *layout); |
| 353 | |
| 354 | /** |
| 355 | * PangoLayoutSerializeFlags: |
| 356 | * @PANGO_LAYOUT_SERIALIZE_DEFAULT: Default behavior |
| 357 | * @PANGO_LAYOUT_SERIALIZE_CONTEXT: Include context information |
| 358 | * @PANGO_LAYOUT_SERIALIZE_OUTPUT: Include information about the formatted output |
| 359 | * |
| 360 | * Flags that influence the behavior of [method@Pango.Layout.serialize]. |
| 361 | * |
| 362 | * New members may be added to this enumeration over time. |
| 363 | * |
| 364 | * Since: 1.50 |
| 365 | */ |
| 366 | typedef enum { |
| 367 | PANGO_LAYOUT_SERIALIZE_DEFAULT = 0, |
| 368 | PANGO_LAYOUT_SERIALIZE_CONTEXT = 1 << 0, |
| 369 | PANGO_LAYOUT_SERIALIZE_OUTPUT = 1 << 1, |
| 370 | } PangoLayoutSerializeFlags; |
| 371 | |
| 372 | PANGO_AVAILABLE_IN_1_50 |
| 373 | GBytes * pango_layout_serialize (PangoLayout *layout, |
| 374 | PangoLayoutSerializeFlags flags); |
| 375 | |
| 376 | PANGO_AVAILABLE_IN_1_50 |
| 377 | gboolean pango_layout_write_to_file (PangoLayout *layout, |
| 378 | PangoLayoutSerializeFlags flags, |
| 379 | |
| 380 | const char *filename, |
| 381 | GError **error); |
| 382 | |
| 383 | #define PANGO_LAYOUT_DESERIALIZE_ERROR (pango_layout_deserialize_error_quark ()) |
| 384 | |
| 385 | /** |
| 386 | * PangoLayoutDeserializeError: |
| 387 | * @PANGO_LAYOUT_DESERIALIZE_INVALID: Unspecified error |
| 388 | * @PANGO_LAYOUT_DESERIALIZE_INVALID_VALUE: A JSon value could not be |
| 389 | * interpreted |
| 390 | * @PANGO_LAYOUT_DESERIALIZE_MISSING_VALUE: A required JSon member was |
| 391 | * not found |
| 392 | * |
| 393 | * Errors that can be returned by [func@Pango.Layout.deserialize]. |
| 394 | * |
| 395 | * Since: 1.50 |
| 396 | */ |
| 397 | typedef enum { |
| 398 | PANGO_LAYOUT_DESERIALIZE_INVALID, |
| 399 | PANGO_LAYOUT_DESERIALIZE_INVALID_VALUE, |
| 400 | PANGO_LAYOUT_DESERIALIZE_MISSING_VALUE, |
| 401 | } PangoLayoutDeserializeError; |
| 402 | |
| 403 | PANGO_AVAILABLE_IN_1_50 |
| 404 | GQuark pango_layout_deserialize_error_quark (void); |
| 405 | |
| 406 | /** |
| 407 | * PangoLayoutDeserializeFlags: |
| 408 | * @PANGO_LAYOUT_DESERIALIZE_DEFAULT: Default behavior |
| 409 | * @PANGO_LAYOUT_DESERIALIZE_CONTEXT: Apply context information |
| 410 | * from the serialization to the `PangoContext` |
| 411 | * |
| 412 | * Flags that influence the behavior of [func@Pango.Layout.deserialize]. |
| 413 | * |
| 414 | * New members may be added to this enumeration over time. |
| 415 | * |
| 416 | * Since: 1.50 |
| 417 | */ |
| 418 | typedef enum { |
| 419 | PANGO_LAYOUT_DESERIALIZE_DEFAULT = 0, |
| 420 | PANGO_LAYOUT_DESERIALIZE_CONTEXT = 1 << 0, |
| 421 | } PangoLayoutDeserializeFlags; |
| 422 | |
| 423 | PANGO_AVAILABLE_IN_1_50 |
| 424 | PangoLayout * pango_layout_deserialize (PangoContext *context, |
| 425 | GBytes *bytes, |
| 426 | PangoLayoutDeserializeFlags flags, |
| 427 | GError **error); |
| 428 | |
| 429 | |
| 430 | #define PANGO_TYPE_LAYOUT_LINE (pango_layout_line_get_type ()) |
| 431 | |
| 432 | PANGO_AVAILABLE_IN_ALL |
| 433 | GType pango_layout_line_get_type (void) G_GNUC_CONST; |
| 434 | |
| 435 | PANGO_AVAILABLE_IN_1_10 |
| 436 | PangoLayoutLine *pango_layout_line_ref (PangoLayoutLine *line); |
| 437 | PANGO_AVAILABLE_IN_ALL |
| 438 | void pango_layout_line_unref (PangoLayoutLine *line); |
| 439 | |
| 440 | PANGO_AVAILABLE_IN_1_50 |
| 441 | int pango_layout_line_get_start_index (PangoLayoutLine *line); |
| 442 | PANGO_AVAILABLE_IN_1_50 |
| 443 | int pango_layout_line_get_length (PangoLayoutLine *line); |
| 444 | PANGO_AVAILABLE_IN_1_50 |
| 445 | gboolean pango_layout_line_is_paragraph_start (PangoLayoutLine *line); |
| 446 | PANGO_AVAILABLE_IN_1_50 |
| 447 | PangoDirection pango_layout_line_get_resolved_direction (PangoLayoutLine *line); |
| 448 | |
| 449 | PANGO_AVAILABLE_IN_ALL |
| 450 | gboolean pango_layout_line_x_to_index (PangoLayoutLine *line, |
| 451 | int x_pos, |
| 452 | int *index_, |
| 453 | int *trailing); |
| 454 | PANGO_AVAILABLE_IN_ALL |
| 455 | void pango_layout_line_index_to_x (PangoLayoutLine *line, |
| 456 | int index_, |
| 457 | gboolean trailing, |
| 458 | int *x_pos); |
| 459 | PANGO_AVAILABLE_IN_ALL |
| 460 | void pango_layout_line_get_x_ranges (PangoLayoutLine *line, |
| 461 | int start_index, |
| 462 | int end_index, |
| 463 | int **ranges, |
| 464 | int *n_ranges); |
| 465 | PANGO_AVAILABLE_IN_ALL |
| 466 | void pango_layout_line_get_extents (PangoLayoutLine *line, |
| 467 | PangoRectangle *ink_rect, |
| 468 | PangoRectangle *logical_rect); |
| 469 | PANGO_AVAILABLE_IN_1_44 |
| 470 | void pango_layout_line_get_height (PangoLayoutLine *line, |
| 471 | int *height); |
| 472 | |
| 473 | PANGO_AVAILABLE_IN_ALL |
| 474 | void pango_layout_line_get_pixel_extents (PangoLayoutLine *layout_line, |
| 475 | PangoRectangle *ink_rect, |
| 476 | PangoRectangle *logical_rect); |
| 477 | |
| 478 | typedef struct _PangoLayoutIter PangoLayoutIter; |
| 479 | |
| 480 | #define PANGO_TYPE_LAYOUT_ITER (pango_layout_iter_get_type ()) |
| 481 | |
| 482 | PANGO_AVAILABLE_IN_ALL |
| 483 | GType pango_layout_iter_get_type (void) G_GNUC_CONST; |
| 484 | |
| 485 | PANGO_AVAILABLE_IN_ALL |
| 486 | PangoLayoutIter *pango_layout_get_iter (PangoLayout *layout); |
| 487 | PANGO_AVAILABLE_IN_1_20 |
| 488 | PangoLayoutIter *pango_layout_iter_copy (PangoLayoutIter *iter); |
| 489 | PANGO_AVAILABLE_IN_ALL |
| 490 | void pango_layout_iter_free (PangoLayoutIter *iter); |
| 491 | |
| 492 | PANGO_AVAILABLE_IN_ALL |
| 493 | int pango_layout_iter_get_index (PangoLayoutIter *iter); |
| 494 | PANGO_AVAILABLE_IN_ALL |
| 495 | PangoLayoutRun *pango_layout_iter_get_run (PangoLayoutIter *iter); |
| 496 | PANGO_AVAILABLE_IN_1_16 |
| 497 | PangoLayoutRun *pango_layout_iter_get_run_readonly (PangoLayoutIter *iter); |
| 498 | PANGO_AVAILABLE_IN_ALL |
| 499 | PangoLayoutLine *pango_layout_iter_get_line (PangoLayoutIter *iter); |
| 500 | PANGO_AVAILABLE_IN_1_16 |
| 501 | PangoLayoutLine *pango_layout_iter_get_line_readonly (PangoLayoutIter *iter); |
| 502 | PANGO_AVAILABLE_IN_ALL |
| 503 | gboolean pango_layout_iter_at_last_line (PangoLayoutIter *iter); |
| 504 | PANGO_AVAILABLE_IN_1_20 |
| 505 | PangoLayout *pango_layout_iter_get_layout (PangoLayoutIter *iter); |
| 506 | |
| 507 | PANGO_AVAILABLE_IN_ALL |
| 508 | gboolean pango_layout_iter_next_char (PangoLayoutIter *iter); |
| 509 | PANGO_AVAILABLE_IN_ALL |
| 510 | gboolean pango_layout_iter_next_cluster (PangoLayoutIter *iter); |
| 511 | PANGO_AVAILABLE_IN_ALL |
| 512 | gboolean pango_layout_iter_next_run (PangoLayoutIter *iter); |
| 513 | PANGO_AVAILABLE_IN_ALL |
| 514 | gboolean pango_layout_iter_next_line (PangoLayoutIter *iter); |
| 515 | |
| 516 | PANGO_AVAILABLE_IN_ALL |
| 517 | void pango_layout_iter_get_char_extents (PangoLayoutIter *iter, |
| 518 | PangoRectangle *logical_rect); |
| 519 | PANGO_AVAILABLE_IN_ALL |
| 520 | void pango_layout_iter_get_cluster_extents (PangoLayoutIter *iter, |
| 521 | PangoRectangle *ink_rect, |
| 522 | PangoRectangle *logical_rect); |
| 523 | PANGO_AVAILABLE_IN_ALL |
| 524 | void pango_layout_iter_get_run_extents (PangoLayoutIter *iter, |
| 525 | PangoRectangle *ink_rect, |
| 526 | PangoRectangle *logical_rect); |
| 527 | PANGO_AVAILABLE_IN_ALL |
| 528 | void pango_layout_iter_get_line_extents (PangoLayoutIter *iter, |
| 529 | PangoRectangle *ink_rect, |
| 530 | PangoRectangle *logical_rect); |
| 531 | /* All the yranges meet, unlike the logical_rect's (i.e. the yranges |
| 532 | * assign between-line spacing to the nearest line) |
| 533 | */ |
| 534 | PANGO_AVAILABLE_IN_ALL |
| 535 | void pango_layout_iter_get_line_yrange (PangoLayoutIter *iter, |
| 536 | int *y0_, |
| 537 | int *y1_); |
| 538 | PANGO_AVAILABLE_IN_ALL |
| 539 | void pango_layout_iter_get_layout_extents (PangoLayoutIter *iter, |
| 540 | PangoRectangle *ink_rect, |
| 541 | PangoRectangle *logical_rect); |
| 542 | PANGO_AVAILABLE_IN_ALL |
| 543 | int pango_layout_iter_get_baseline (PangoLayoutIter *iter); |
| 544 | PANGO_AVAILABLE_IN_1_50 |
| 545 | int pango_layout_iter_get_run_baseline (PangoLayoutIter *iter); |
| 546 | |
| 547 | |
| 548 | G_DEFINE_AUTOPTR_CLEANUP_FUNC(PangoLayout, g_object_unref) |
| 549 | G_DEFINE_AUTOPTR_CLEANUP_FUNC(PangoLayoutIter, pango_layout_iter_free) |
| 550 | |
| 551 | G_END_DECLS |
| 552 | |
| 553 | #endif /* __PANGO_LAYOUT_H__ */ |
| 554 | |
| 555 | |