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 | |