use unicode ellipsis char for breaking lines. Use g_utf8_find_prev_char
2003-04-21 Mike Kestner <mkestner@ximian.com> * e-cell-text.c (build_layout): use unicode ellipsis char for breaking lines. Use g_utf8_find_prev_char and check for failure so that we don't tight loop for small cells that can't display any chars. svn path=/trunk/; revision=20924
This commit is contained in:

committed by
Mike Kestner

parent
42a22586d2
commit
1f8aee1ac6
@ -486,18 +486,23 @@ build_layout (ECellTextView *text_view, int row, const char *text, gint width)
|
|||||||
pango_layout_set_width (layout, width * PANGO_SCALE);
|
pango_layout_set_width (layout, width * PANGO_SCALE);
|
||||||
pango_layout_set_wrap (layout, PANGO_WRAP_CHAR);
|
pango_layout_set_wrap (layout, PANGO_WRAP_CHAR);
|
||||||
|
|
||||||
while (pango_layout_get_line_count (layout) > 1) {
|
if (pango_layout_get_line_count (layout) > 1) {
|
||||||
PangoLayoutLine *line = pango_layout_get_line (layout, 0);
|
PangoLayoutLine *line = pango_layout_get_line (layout, 0);
|
||||||
gchar *line_text = g_strdup (pango_layout_get_text (layout));
|
gchar *line_text = g_strdup (pango_layout_get_text (layout));
|
||||||
gchar *last_char = g_utf8_prev_char (line_text + line->length - 1);
|
gchar *last_char = g_utf8_find_prev_char (line_text, line_text + line->length - 1);
|
||||||
gchar *new_text;
|
gchar ellipsis[7];
|
||||||
while (*last_char == '.')
|
int len = g_unichar_to_utf8 (8230, ellipsis);
|
||||||
last_char = g_utf8_prev_char (last_char);
|
ellipsis[len] = '\0';
|
||||||
*last_char = '\0';
|
while (last_char && pango_layout_get_line_count (layout) > 1) {
|
||||||
new_text = g_strconcat (line_text, " ...", NULL);
|
gchar *new_text;
|
||||||
pango_layout_set_text (layout, new_text, g_utf8_strlen (new_text, -1));
|
last_char = g_utf8_find_prev_char (line_text, last_char);
|
||||||
|
if (last_char)
|
||||||
|
*last_char = '\0';
|
||||||
|
new_text = g_strconcat (line_text, ellipsis, NULL);
|
||||||
|
pango_layout_set_text (layout, new_text, -1);
|
||||||
|
g_free (new_text);
|
||||||
|
}
|
||||||
g_free (line_text);
|
g_free (line_text);
|
||||||
g_free (new_text);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (ect->justify) {
|
switch (ect->justify) {
|
||||||
|
Reference in New Issue
Block a user