2007-01-16 Behdad Esfahbod <behdad@gnome.org>
+ Part of Bug 326693 – PangoLayouts should be query-able about their
+ effective properties (width / wrapped / ellipsized / etc)
+
+ * pango/pango-layout-private.h:
+ * pango/pango-layout.c (pango_layout_init), (pango_layout_copy),
+ (pango_layout_is_wrapped), (pango_layout_clear_lines),
+ (process_line):
+ * pango/pango-layout.h:
+ New public function:
+
+ pango_layout_is_wrapped()
+
+ * pango/pango.def:
+ * docs/tmpl/layout.sgml:
+ * docs/pango-sections.txt:
+ Update.
+
+2007-01-16 Behdad Esfahbod <behdad@gnome.org>
+
Bug 397327 – pango-layout.c: 'pango_layout_is_ellipsized' must return
a value
layout->tab_width = -1;
layout->wrap = PANGO_WRAP_WORD;
+ layout->is_wrapped = FALSE;
layout->ellipsize = PANGO_ELLIPSIZE_NONE;
layout->is_ellipsized = FALSE;
}
layout->wrap = src->wrap;
layout->ellipsize = src->ellipsize;
- /* is_ellipsized, log_attrs, lines fields are updated by check_lines */
+ /* is_wrapped, is_ellipsized, log_attrs, lines
+ * fields are updated by check_lines */
return layout;
}
* @layout: a #PangoLayout
*
* Gets the wrap mode for the layout.
+ *
+ * Use pango_layout_is_wrapped() to query whether any paragraphs
+ * were actually wrapped.
*
* Return value: active wrap mode.
**/
}
/**
+ * pango_layout_is_wrapped:
+ * @layout: a #PangoLayout
+ *
+ * Queries whether the layout had to wrap any paragraphs.
+ *
+ * This returns %TRUE if a positive width is set on @layout,
+ * ellipsization mode of @layout is set to %PANGO_ELLIPSIZE_NONE,
+ * and there are paragraphs exceeding the layout width that have
+ * to be wrapped.
+ *
+ * Return value: %TRUE if any paragraphs had to be wrapped, %FALSE
+ * otherwise.
+ *
+ * Since: 1.16
+ */
+gboolean
+pango_layout_is_wrapped (PangoLayout *layout)
+{
+ g_return_val_if_fail (layout != NULL, FALSE);
+
+ pango_layout_check_lines (layout);
+
+ return layout->is_wrapped;
+}
+
+/**
* pango_layout_set_indent
* @layout: a #PangoLayout.
* @indent: the amount by which to indent.
*
* Return value: the current ellipsization mode for @layout.
*
+ * Use pango_layout_is_ellipsized() to query whether any paragraphs
+ * were actually ellipsized.
+ *
* Since: 1.6
**/
PangoEllipsizeMode
*
* Queries whether the layout had to ellipsize any paragraphs.
*
- * This can only return %TRUE if the ellipsization mode for @layout
+ * This returns %TRUE if the ellipsization mode for @layout
* is not %PANGO_ELLIPSIZE_NONE, a positive width is set on @layout,
- * and there were paragraphs exceeding that width that had to be
+ * and there are paragraphs exceeding that width that have to be
* ellipsized.
*
* Return value: %TRUE if any paragraphs had to be ellipsized, %FALSE
static void
pango_layout_clear_lines (PangoLayout *layout)
{
- layout->is_ellipsized = FALSE;
-
if (layout->lines)
{
GSList *tmp_list = layout->lines;
}
layout->logical_rect_cached = FALSE;
layout->ink_rect_cached = FALSE;
+ layout->is_ellipsized = FALSE;
+ layout->is_wrapped = FALSE;
}
static void
case BREAK_SOME_FIT:
state->start_offset += old_num_chars - item->num_chars;
+ layout->is_wrapped = TRUE;
goto done;
case BREAK_NONE_FIT:
state->start_offset += old_num_chars - item->num_chars;
+ layout->is_wrapped = TRUE;
goto done;
case BREAK_LINE_SEPARATOR:
void pango_layout_set_wrap (PangoLayout *layout,
PangoWrapMode wrap);
PangoWrapMode pango_layout_get_wrap (PangoLayout *layout);
+gboolean pango_layout_is_wrapped (PangoLayout *layout);
void pango_layout_set_indent (PangoLayout *layout,
int indent);
int pango_layout_get_indent (PangoLayout *layout);
void pango_layout_set_ellipsize (PangoLayout *layout,
PangoEllipsizeMode ellipsize);
PangoEllipsizeMode pango_layout_get_ellipsize (PangoLayout *layout);
-gboolean pango_layout_is_ellipsized (PangoLayout *layout);
+gboolean pango_layout_is_ellipsized (PangoLayout *layout);
void pango_layout_context_changed (PangoLayout *layout);