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