summaryrefslogtreecommitdiff
path: root/pango/pango-layout.c
diff options
context:
space:
mode:
Diffstat (limited to 'pango/pango-layout.c')
-rw-r--r--pango/pango-layout.c55
1 files changed, 52 insertions, 3 deletions
diff --git a/pango/pango-layout.c b/pango/pango-layout.c
index 4a3315bc..aae3c4a3 100644
--- a/pango/pango-layout.c
+++ b/pango/pango-layout.c
@@ -120,6 +120,8 @@ struct _PangoLayout
PangoTabArray *tabs;
GSList *lines;
+
+ PangoWrapMode wrap;
};
struct _PangoLayoutClass
@@ -197,7 +199,9 @@ pango_layout_init (PangoLayout *layout)
layout->log_attrs = NULL;
layout->lines = NULL;
- layout->tab_width = -1;
+ layout->tab_width = -1;
+
+ layout->wrap = PANGO_WRAP_WORD;
}
static void
@@ -316,6 +320,44 @@ pango_layout_get_width (PangoLayout *layout)
}
/**
+ * pango_layout_set_wrap:
+ * @layout: a #PangoLayout
+ * @wrap: wrap mode
+ *
+ * Sets the wrap style; the wrap style only has an effect if a width
+ * is set on the layout with pango_layout_set_width(). To turn off wrapping,
+ * set the width to -1.
+ **/
+void
+pango_layout_set_wrap (PangoLayout *layout,
+ PangoWrapMode wrap)
+{
+ g_return_if_fail (PANGO_IS_LAYOUT (layout));
+
+ if (layout->wrap != wrap)
+ {
+ pango_layout_clear_lines (layout);
+ layout->wrap = wrap;
+ }
+}
+
+/**
+ * pango_layout_get_wrap:
+ * @layout: a #PangoLayout
+ *
+ * Get the wrap mode for the layout.
+ *
+ * Return value: Active wrap mode.
+ **/
+PangoWrapMode
+pango_layout_get_wrap (PangoLayout *layout)
+{
+ g_return_val_if_fail (PANGO_IS_LAYOUT (layout), 0);
+
+ return layout->wrap;
+}
+
+/**
* pango_layout_set_indent
* @layout: a #PangoLayout.
* @indent: the amount by which to indent
@@ -2183,13 +2225,20 @@ can_break_at (PangoLayout *layout,
gint offset)
{
/* We probably should have a mode where we treat all white-space as
- * of fungeable width - appropriate for typography but not for
+ * of fungible width - appropriate for typography but not for
* editing.
*/
if (offset == layout->n_chars)
return TRUE;
+ else if (layout->wrap == PANGO_WRAP_WORD)
+ return layout->log_attrs[offset].is_line_break;
+ else if (layout->wrap == PANGO_WRAP_CHAR)
+ return layout->log_attrs[offset].is_char_break;
else
- return layout->log_attrs[offset].is_break;
+ {
+ g_warning (G_STRLOC": broken PangoLayout");
+ return TRUE;
+ }
}
static inline gboolean