From f533402ce6a9dfda06bffeaf07dc406f6403d677 Mon Sep 17 00:00:00 2001 From: JP Rosevear Date: Tue, 10 Sep 2002 17:24:50 +0000 Subject: take a clip_height and use it to set the maximum number of lines if 2002-09-10 JP Rosevear * gal/e-text/e-text.c (line_splitter): take a clip_height and use it to set the maximum number of lines if necessary (split_into_lines): pass clip_height arg svn path=/trunk/; revision=18032 --- widgets/text/e-text.c | 35 +++++++++++++++-------------------- 1 file changed, 15 insertions(+), 20 deletions(-) (limited to 'widgets/text/e-text.c') diff --git a/widgets/text/e-text.c b/widgets/text/e-text.c index 836c7ffa2a..6275235c11 100644 --- a/widgets/text/e-text.c +++ b/widgets/text/e-text.c @@ -687,8 +687,8 @@ typedef void (*LineSplitterFn) (int line_num, const char *start, int length, gpo static gint line_splitter (ETextModel *model, EFont *font, EFontStyle style, const char *break_characters, - gboolean wrap_lines, double clip_width, gint max_lines, - LineSplitterFn split_cb, gpointer user_data) + gboolean wrap_lines, double clip_width, double clip_height, + gint max_lines, LineSplitterFn split_cb, gpointer user_data) { const char *curr; const char *text; @@ -700,7 +700,9 @@ line_splitter (ETextModel *model, EFont *font, EFontStyle style, if (max_lines < 1) max_lines = G_MAXINT; - + if (clip_height != -1) + max_lines = CLAMP (max_lines, 1, clip_height / e_font_height (font)); + text = e_text_model_get_text (model); linestart = NULL; last_breakpoint = text; @@ -723,9 +725,13 @@ line_splitter (ETextModel *model, EFont *font, EFontStyle style, if (clip_width < text_width_with_objects (model, font, style, linestart, curr - linestart) && last_breakpoint > linestart) { - - if (split_cb) + + /* Don't use break point if we are on the last usable line */ + if (split_cb && line_count < max_lines - 1) split_cb (line_count, linestart, last_breakpoint - linestart, user_data); + else if (split_cb) + split_cb (line_count, linestart, strlen (linestart), user_data); + ++line_count; linestart = NULL; curr = last_breakpoint; @@ -739,17 +745,6 @@ line_splitter (ETextModel *model, EFont *font, EFontStyle style, /* Handle any leftover text. */ if (linestart) { - - if (clip_width < text_width_with_objects (model, font, style, linestart, strlen (linestart)) - && last_breakpoint > linestart) { - - if (split_cb) - split_cb (line_count, linestart, last_breakpoint - linestart, user_data); - - ++line_count; - linestart = g_utf8_next_char (last_breakpoint); - } - if (split_cb) split_cb (line_count, linestart, strlen (linestart), user_data); ++line_count; @@ -796,16 +791,16 @@ split_into_lines (EText *text) /* First, count the number of lines */ text->num_lines = line_splitter (text->model, text->font, text->style, text->break_characters, - text->line_wrap, text->clip_width, -1, - NULL, NULL); + text->line_wrap, text->clip_width, text->clip_height, + -1, NULL, NULL); /* Allocate our array of lines */ text->lines = g_new0 (struct line, text->num_lines); text->num_lines = line_splitter (text->model, text->font, text->style, text->break_characters, - text->line_wrap, text->clip_width, text->num_lines, - line_split_cb, text); + text->line_wrap, text->clip_width, text->clip_height, + text->num_lines, line_split_cb, text); } /* Convenience function to set the text's GC's foreground color */ -- cgit