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