1 /*
2 * Distributed under the Boost Software License, Version 1.0.
3 * (See accompanying file LICENSE_1_0.txt or copy at
4 * http://www.boost.org/LICENSE_1_0.txt)
5 */
6 module pango.c.layout;
7
8 import pango.c.attributes;
9 import pango.c.context;
10 import pango.c.glyph_item;
11 import pango.c.tabs;
12 import pango.c.font;
13 import pango.c.types;
14 import pango.c.break_;
15
16 import glib;
17 import gobject;
18
19 import std.bitmanip;
20
21 extern (C):
22
23 struct PangoLayout;
24 struct PangoLayoutClass;
25
26 /**
27 * PangoLayoutRun:
28 *
29 * The #PangoLayoutRun structure represents a single run within
30 * a #PangoLayoutLine; it is simply an alternate name for
31 * #PangoGlyphItem.
32 * See the #PangoGlyphItem docs for details on the fields.
33 */
34 alias PangoLayoutRun = PangoGlyphItem;
35
36 /**
37 * PangoAlignment:
38 * @PANGO_ALIGN_LEFT: Put all available space on the right
39 * @PANGO_ALIGN_CENTER: Center the line within the available space
40 * @PANGO_ALIGN_RIGHT: Put all available space on the left
41 *
42 * A #PangoAlignment describes how to align the lines of a #PangoLayout within the
43 * available space. If the #PangoLayout is set to justify
44 * using pango_layout_set_justify(), this only has effect for partial lines.
45 */
46 enum PangoAlignment {
47 PANGO_ALIGN_LEFT,
48 PANGO_ALIGN_CENTER,
49 PANGO_ALIGN_RIGHT
50 }
51
52 /**
53 * PangoWrapMode:
54 * @PANGO_WRAP_WORD: wrap lines at word boundaries.
55 * @PANGO_WRAP_CHAR: wrap lines at character boundaries.
56 * @PANGO_WRAP_WORD_CHAR: wrap lines at word boundaries, but fall back to character boundaries if there is not
57 * enough space for a full word.
58 *
59 * A #PangoWrapMode describes how to wrap the lines of a #PangoLayout to the desired width.
60 */
61 enum PangoWrapMode {
62 PANGO_WRAP_WORD,
63 PANGO_WRAP_CHAR,
64 PANGO_WRAP_WORD_CHAR
65 }
66
67 /**
68 * PangoEllipsizeMode:
69 * @PANGO_ELLIPSIZE_NONE: No ellipsization
70 * @PANGO_ELLIPSIZE_START: Omit characters at the start of the text
71 * @PANGO_ELLIPSIZE_MIDDLE: Omit characters in the middle of the text
72 * @PANGO_ELLIPSIZE_END: Omit characters at the end of the text
73 *
74 * The #PangoEllipsizeMode type describes what sort of (if any)
75 * ellipsization should be applied to a line of text. In
76 * the ellipsization process characters are removed from the
77 * text in order to make it fit to a given width and replaced
78 * with an ellipsis.
79 */
80 enum PangoEllipsizeMode {
81 PANGO_ELLIPSIZE_NONE,
82 PANGO_ELLIPSIZE_START,
83 PANGO_ELLIPSIZE_MIDDLE,
84 PANGO_ELLIPSIZE_END
85 }
86
87 /**
88 * PangoLayoutLine:
89 * @start_index: start of line as byte index into layout->text
90 * @length: length of line in bytes
91 * @is_paragraph_start: #TRUE if this is the first line of the paragraph
92 * @resolved_dir: #Resolved PangoDirection of line
93 *
94 * The #PangoLayoutLine structure represents one of the lines resulting
95 * from laying out a paragraph via #PangoLayout. #PangoLayoutLine
96 * structures are obtained by calling pango_layout_get_line() and
97 * are only valid until the text, attributes, or settings of the
98 * parent #PangoLayout are modified.
99 *
100 * Routines for rendering PangoLayout objects are provided in
101 * code specific to each rendering system.
102 */
103 struct PangoLayoutLine
104 {
105 PangoLayout *layout;
106 gint start_index; /* start of line as byte index into layout->text */
107 gint length; /* length of line in bytes */
108 GSList *runs;
109 mixin(bitfields!(
110 guint, "is_paragraph_start", 1, /* TRUE if this is the first line of the paragraph */
111 guint, "resolved_dir", 3, /* Resolved PangoDirection of line */
112 guint, "", 4));
113 };
114
115
116 /* The PangoLayout and PangoLayoutClass structs are private; if you
117 * need to create a subclass of these, file a bug.
118 */
119
120 pure GType pango_layout_get_type ();
121 PangoLayout *pango_layout_new (PangoContext *context);
122 PangoLayout *pango_layout_copy (PangoLayout *src);
123
124 PangoContext *pango_layout_get_context (PangoLayout *layout);
125
126 void pango_layout_set_attributes (PangoLayout *layout,
127 PangoAttrList *attrs);
128 PangoAttrList *pango_layout_get_attributes (PangoLayout *layout);
129
130 void pango_layout_set_text (PangoLayout *layout,
131 const(char) *text,
132 int length);
133 const(char) *pango_layout_get_text (PangoLayout *layout);
134
135 gint pango_layout_get_character_count (PangoLayout *layout);
136
137 void pango_layout_set_markup (PangoLayout *layout,
138 const(char) *markup,
139 int length);
140
141 void pango_layout_set_markup_with_accel (PangoLayout *layout,
142 const(char) *markup,
143 int length,
144 gunichar accel_marker,
145 gunichar *accel_char);
146
147 void pango_layout_set_font_description (PangoLayout *layout,
148 const(PangoFontDescription) *desc);
149
150 const(PangoFontDescription) *pango_layout_get_font_description (PangoLayout *layout);
151
152 void pango_layout_set_width (PangoLayout *layout,
153 int width);
154 int pango_layout_get_width (PangoLayout *layout);
155 void pango_layout_set_height (PangoLayout *layout,
156 int height);
157 int pango_layout_get_height (PangoLayout *layout);
158 void pango_layout_set_wrap (PangoLayout *layout,
159 PangoWrapMode wrap);
160 PangoWrapMode pango_layout_get_wrap (PangoLayout *layout);
161 gboolean pango_layout_is_wrapped (PangoLayout *layout);
162 void pango_layout_set_indent (PangoLayout *layout,
163 int indent);
164 int pango_layout_get_indent (PangoLayout *layout);
165 void pango_layout_set_spacing (PangoLayout *layout,
166 int spacing);
167 int pango_layout_get_spacing (PangoLayout *layout);
168 void pango_layout_set_justify (PangoLayout *layout,
169 gboolean justify);
170 gboolean pango_layout_get_justify (PangoLayout *layout);
171 void pango_layout_set_auto_dir (PangoLayout *layout,
172 gboolean auto_dir);
173 gboolean pango_layout_get_auto_dir (PangoLayout *layout);
174 void pango_layout_set_alignment (PangoLayout *layout,
175 PangoAlignment alignment);
176 PangoAlignment pango_layout_get_alignment (PangoLayout *layout);
177
178 void pango_layout_set_tabs (PangoLayout *layout,
179 PangoTabArray *tabs);
180
181 PangoTabArray* pango_layout_get_tabs (PangoLayout *layout);
182
183 void pango_layout_set_single_paragraph_mode (PangoLayout *layout,
184 gboolean setting);
185 gboolean pango_layout_get_single_paragraph_mode (PangoLayout *layout);
186
187 void pango_layout_set_ellipsize (PangoLayout *layout,
188 PangoEllipsizeMode ellipsize);
189 PangoEllipsizeMode pango_layout_get_ellipsize (PangoLayout *layout);
190 gboolean pango_layout_is_ellipsized (PangoLayout *layout);
191
192 int pango_layout_get_unknown_glyphs_count (PangoLayout *layout);
193
194 void pango_layout_context_changed (PangoLayout *layout);
195 guint pango_layout_get_serial (PangoLayout *layout);
196
197 void pango_layout_get_log_attrs (PangoLayout *layout,
198 PangoLogAttr **attrs,
199 gint *n_attrs);
200
201 const(PangoLogAttr) *pango_layout_get_log_attrs_readonly (PangoLayout *layout,
202 gint *n_attrs);
203
204 void pango_layout_index_to_pos (PangoLayout *layout,
205 int index_,
206 PangoRectangle *pos);
207 void pango_layout_index_to_line_x (PangoLayout *layout,
208 int index_,
209 gboolean trailing,
210 int *line,
211 int *x_pos);
212 void pango_layout_get_cursor_pos (PangoLayout *layout,
213 int index_,
214 PangoRectangle *strong_pos,
215 PangoRectangle *weak_pos);
216 void pango_layout_move_cursor_visually (PangoLayout *layout,
217 gboolean strong,
218 int old_index,
219 int old_trailing,
220 int direction,
221 int *new_index,
222 int *new_trailing);
223 gboolean pango_layout_xy_to_index (PangoLayout *layout,
224 int x,
225 int y,
226 int *index_,
227 int *trailing);
228 void pango_layout_get_extents (PangoLayout *layout,
229 PangoRectangle *ink_rect,
230 PangoRectangle *logical_rect);
231 void pango_layout_get_pixel_extents (PangoLayout *layout,
232 PangoRectangle *ink_rect,
233 PangoRectangle *logical_rect);
234 void pango_layout_get_size (PangoLayout *layout,
235 int *width,
236 int *height);
237 void pango_layout_get_pixel_size (PangoLayout *layout,
238 int *width,
239 int *height);
240 int pango_layout_get_baseline (PangoLayout *layout);
241
242 int pango_layout_get_line_count (PangoLayout *layout);
243 PangoLayoutLine *pango_layout_get_line (PangoLayout *layout,
244 int line);
245 PangoLayoutLine *pango_layout_get_line_readonly (PangoLayout *layout,
246 int line);
247 GSList * pango_layout_get_lines (PangoLayout *layout);
248 GSList * pango_layout_get_lines_readonly (PangoLayout *layout);
249
250
251
252 pure GType pango_layout_line_get_type ();
253
254 PangoLayoutLine *pango_layout_line_ref (PangoLayoutLine *line);
255 void pango_layout_line_unref (PangoLayoutLine *line);
256
257 gboolean pango_layout_line_x_to_index (PangoLayoutLine *line,
258 int x_pos,
259 int *index_,
260 int *trailing);
261 void pango_layout_line_index_to_x (PangoLayoutLine *line,
262 int index_,
263 gboolean trailing,
264 int *x_pos);
265 void pango_layout_line_get_x_ranges (PangoLayoutLine *line,
266 int start_index,
267 int end_index,
268 int **ranges,
269 int *n_ranges);
270 void pango_layout_line_get_extents (PangoLayoutLine *line,
271 PangoRectangle *ink_rect,
272 PangoRectangle *logical_rect);
273 void pango_layout_line_get_pixel_extents (PangoLayoutLine *layout_line,
274 PangoRectangle *ink_rect,
275 PangoRectangle *logical_rect);
276
277 struct PangoLayoutIter;
278
279
280 pure GType pango_layout_iter_get_type ();
281
282 PangoLayoutIter *pango_layout_get_iter (PangoLayout *layout);
283 PangoLayoutIter *pango_layout_iter_copy (PangoLayoutIter *iter);
284 void pango_layout_iter_free (PangoLayoutIter *iter);
285
286 int pango_layout_iter_get_index (PangoLayoutIter *iter);
287 PangoLayoutRun *pango_layout_iter_get_run (PangoLayoutIter *iter);
288 PangoLayoutRun *pango_layout_iter_get_run_readonly (PangoLayoutIter *iter);
289 PangoLayoutLine *pango_layout_iter_get_line (PangoLayoutIter *iter);
290 PangoLayoutLine *pango_layout_iter_get_line_readonly (PangoLayoutIter *iter);
291 gboolean pango_layout_iter_at_last_line (PangoLayoutIter *iter);
292 PangoLayout *pango_layout_iter_get_layout (PangoLayoutIter *iter);
293
294 gboolean pango_layout_iter_next_char (PangoLayoutIter *iter);
295 gboolean pango_layout_iter_next_cluster (PangoLayoutIter *iter);
296 gboolean pango_layout_iter_next_run (PangoLayoutIter *iter);
297 gboolean pango_layout_iter_next_line (PangoLayoutIter *iter);
298
299 void pango_layout_iter_get_char_extents (PangoLayoutIter *iter,
300 PangoRectangle *logical_rect);
301 void pango_layout_iter_get_cluster_extents (PangoLayoutIter *iter,
302 PangoRectangle *ink_rect,
303 PangoRectangle *logical_rect);
304 void pango_layout_iter_get_run_extents (PangoLayoutIter *iter,
305 PangoRectangle *ink_rect,
306 PangoRectangle *logical_rect);
307 void pango_layout_iter_get_line_extents (PangoLayoutIter *iter,
308 PangoRectangle *ink_rect,
309 PangoRectangle *logical_rect);
310 /* All the yranges meet, unlike the logical_rect's (i.e. the yranges
311 * assign between-line spacing to the nearest line)
312 */
313 void pango_layout_iter_get_line_yrange (PangoLayoutIter *iter,
314 int *y0_,
315 int *y1_);
316 void pango_layout_iter_get_layout_extents (PangoLayoutIter *iter,
317 PangoRectangle *ink_rect,
318 PangoRectangle *logical_rect);
319 int pango_layout_iter_get_baseline (PangoLayoutIter *iter);
320