From 7a7faba61aa79b695b85561721c73f5ac773cbbc Mon Sep 17 00:00:00 2001 From: Owen Taylor Date: Wed, 10 May 2000 03:58:57 +0000 Subject: [PATCH] Add a size_only flag, so when we only need the size, we don't create Tue May 9 21:29:06 2000 Owen Taylor * gtk/gtktextlayout.[ch] gtk/gtktextdisplay.c (gtk_text_layout_get_line_display): Add a size_only flag, so when we only need the size, we don't create useless appearance attributes. * gtk/gtktextview.c (gtk_text_view_ensure_layout): Remove duplicate setting of font description. * gtk/gtkscale.c: Use PANGO_SCALE instead of 1000 --- ChangeLog | 11 +++++++++++ ChangeLog.pre-2-0 | 11 +++++++++++ ChangeLog.pre-2-10 | 11 +++++++++++ ChangeLog.pre-2-2 | 11 +++++++++++ ChangeLog.pre-2-4 | 11 +++++++++++ ChangeLog.pre-2-6 | 11 +++++++++++ ChangeLog.pre-2-8 | 11 +++++++++++ gtk/gtkscale.c | 8 ++++---- gtk/gtktextdisplay.c | 2 +- gtk/gtktextlayout.c | 43 ++++++++++++++++++++++++------------------- gtk/gtktextlayout.h | 3 ++- gtk/gtktextview.c | 2 -- 12 files changed, 108 insertions(+), 27 deletions(-) diff --git a/ChangeLog b/ChangeLog index e28eb9b265..47a4c0b507 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,14 @@ +Tue May 9 21:29:06 2000 Owen Taylor + + * gtk/gtktextlayout.[ch] gtk/gtktextdisplay.c (gtk_text_layout_get_line_display): + Add a size_only flag, so when we only need the size, we don't create + useless appearance attributes. + + * gtk/gtktextview.c (gtk_text_view_ensure_layout): Remove + duplicate setting of font description. + + * gtk/gtkscale.c: Use PANGO_SCALE instead of 1000 + Fri May 5 11:18:47 2000 Owen Taylor * gdk/gdkwindow.c gdk/x11/gdkwindow-x11.c (gdk_window_clear): Move diff --git a/ChangeLog.pre-2-0 b/ChangeLog.pre-2-0 index e28eb9b265..47a4c0b507 100644 --- a/ChangeLog.pre-2-0 +++ b/ChangeLog.pre-2-0 @@ -1,3 +1,14 @@ +Tue May 9 21:29:06 2000 Owen Taylor + + * gtk/gtktextlayout.[ch] gtk/gtktextdisplay.c (gtk_text_layout_get_line_display): + Add a size_only flag, so when we only need the size, we don't create + useless appearance attributes. + + * gtk/gtktextview.c (gtk_text_view_ensure_layout): Remove + duplicate setting of font description. + + * gtk/gtkscale.c: Use PANGO_SCALE instead of 1000 + Fri May 5 11:18:47 2000 Owen Taylor * gdk/gdkwindow.c gdk/x11/gdkwindow-x11.c (gdk_window_clear): Move diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index e28eb9b265..47a4c0b507 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,3 +1,14 @@ +Tue May 9 21:29:06 2000 Owen Taylor + + * gtk/gtktextlayout.[ch] gtk/gtktextdisplay.c (gtk_text_layout_get_line_display): + Add a size_only flag, so when we only need the size, we don't create + useless appearance attributes. + + * gtk/gtktextview.c (gtk_text_view_ensure_layout): Remove + duplicate setting of font description. + + * gtk/gtkscale.c: Use PANGO_SCALE instead of 1000 + Fri May 5 11:18:47 2000 Owen Taylor * gdk/gdkwindow.c gdk/x11/gdkwindow-x11.c (gdk_window_clear): Move diff --git a/ChangeLog.pre-2-2 b/ChangeLog.pre-2-2 index e28eb9b265..47a4c0b507 100644 --- a/ChangeLog.pre-2-2 +++ b/ChangeLog.pre-2-2 @@ -1,3 +1,14 @@ +Tue May 9 21:29:06 2000 Owen Taylor + + * gtk/gtktextlayout.[ch] gtk/gtktextdisplay.c (gtk_text_layout_get_line_display): + Add a size_only flag, so when we only need the size, we don't create + useless appearance attributes. + + * gtk/gtktextview.c (gtk_text_view_ensure_layout): Remove + duplicate setting of font description. + + * gtk/gtkscale.c: Use PANGO_SCALE instead of 1000 + Fri May 5 11:18:47 2000 Owen Taylor * gdk/gdkwindow.c gdk/x11/gdkwindow-x11.c (gdk_window_clear): Move diff --git a/ChangeLog.pre-2-4 b/ChangeLog.pre-2-4 index e28eb9b265..47a4c0b507 100644 --- a/ChangeLog.pre-2-4 +++ b/ChangeLog.pre-2-4 @@ -1,3 +1,14 @@ +Tue May 9 21:29:06 2000 Owen Taylor + + * gtk/gtktextlayout.[ch] gtk/gtktextdisplay.c (gtk_text_layout_get_line_display): + Add a size_only flag, so when we only need the size, we don't create + useless appearance attributes. + + * gtk/gtktextview.c (gtk_text_view_ensure_layout): Remove + duplicate setting of font description. + + * gtk/gtkscale.c: Use PANGO_SCALE instead of 1000 + Fri May 5 11:18:47 2000 Owen Taylor * gdk/gdkwindow.c gdk/x11/gdkwindow-x11.c (gdk_window_clear): Move diff --git a/ChangeLog.pre-2-6 b/ChangeLog.pre-2-6 index e28eb9b265..47a4c0b507 100644 --- a/ChangeLog.pre-2-6 +++ b/ChangeLog.pre-2-6 @@ -1,3 +1,14 @@ +Tue May 9 21:29:06 2000 Owen Taylor + + * gtk/gtktextlayout.[ch] gtk/gtktextdisplay.c (gtk_text_layout_get_line_display): + Add a size_only flag, so when we only need the size, we don't create + useless appearance attributes. + + * gtk/gtktextview.c (gtk_text_view_ensure_layout): Remove + duplicate setting of font description. + + * gtk/gtkscale.c: Use PANGO_SCALE instead of 1000 + Fri May 5 11:18:47 2000 Owen Taylor * gdk/gdkwindow.c gdk/x11/gdkwindow-x11.c (gdk_window_clear): Move diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8 index e28eb9b265..47a4c0b507 100644 --- a/ChangeLog.pre-2-8 +++ b/ChangeLog.pre-2-8 @@ -1,3 +1,14 @@ +Tue May 9 21:29:06 2000 Owen Taylor + + * gtk/gtktextlayout.[ch] gtk/gtktextdisplay.c (gtk_text_layout_get_line_display): + Add a size_only flag, so when we only need the size, we don't create + useless appearance attributes. + + * gtk/gtktextview.c (gtk_text_view_ensure_layout): Remove + duplicate setting of font description. + + * gtk/gtkscale.c: Use PANGO_SCALE instead of 1000 + Fri May 5 11:18:47 2000 Owen Taylor * gdk/gdkwindow.c gdk/x11/gdkwindow-x11.c (gdk_window_clear): Move diff --git a/gtk/gtkscale.c b/gtk/gtkscale.c index 14002ad64b..4864812618 100644 --- a/gtk/gtkscale.c +++ b/gtk/gtkscale.c @@ -305,9 +305,9 @@ gtk_scale_get_value_size (GtkScale *scale, pango_layout_get_extents (layout, NULL, &logical_rect); if (width) - *width = logical_rect.width / 1000; + *width = logical_rect.width / PANGO_SCALE; if (height) - *height = logical_rect.width / 1000; + *height = logical_rect.width / PANGO_SCALE; value = ABS (range->adjustment->upper); if (value == 0) value = 1; @@ -330,9 +330,9 @@ gtk_scale_get_value_size (GtkScale *scale, pango_layout_get_extents (layout, NULL, &logical_rect); if (width) - *width = MAX (*width, logical_rect.width / 1000); + *width = MAX (*width, logical_rect.width / PANGO_SCALE); if (height) - *height = MAX (*height, logical_rect.height / 1000); + *height = MAX (*height, logical_rect.height / PANGO_SCALE); pango_layout_unref (layout); } diff --git a/gtk/gtktextdisplay.c b/gtk/gtktextdisplay.c index 1575a73dd6..b12a198e10 100644 --- a/gtk/gtktextdisplay.c +++ b/gtk/gtktextdisplay.c @@ -555,7 +555,7 @@ gtk_text_layout_draw (GtkTextLayout *layout, GtkTextLine *line = tmp_list->data; - line_display = gtk_text_layout_get_line_display (layout, line); + line_display = gtk_text_layout_get_line_display (layout, line, FALSE); if (have_selection) { diff --git a/gtk/gtktextlayout.c b/gtk/gtktextlayout.c index a9d3a09f62..a85d9fc568 100644 --- a/gtk/gtktextlayout.c +++ b/gtk/gtktextlayout.c @@ -526,7 +526,7 @@ gtk_text_layout_real_wrap (GtkTextLayout *layout, gtk_text_line_add_data (line, line_data); } - display = gtk_text_layout_get_line_display (layout, line); + display = gtk_text_layout_get_line_display (layout, line, TRUE); line_data->width = display->width; line_data->height = display->height; gtk_text_layout_free_line_display (layout, line, display); @@ -751,7 +751,7 @@ set_para_values (GtkTextLayout *layout, /* FIXME: Handle this; for now, fall-through */ case GTK_WRAPMODE_WORD: display->total_width = -1; - layout_width = MAX (layout->width, layout->screen_width) - display->x_offset - style->right_margin; + layout_width = layout->screen_width - display->x_offset - style->right_margin; pango_layout_set_width (display->layout, layout_width * PANGO_SCALE); break; case GTK_WRAPMODE_NONE: @@ -842,7 +842,8 @@ add_text_attrs (GtkTextLayout *layout, GtkTextStyleValues *style, gint byte_count, PangoAttrList *attrs, - gint start) + gint start, + gboolean size_only) { PangoAttribute *attr; @@ -852,12 +853,15 @@ add_text_attrs (GtkTextLayout *layout, pango_attr_list_insert (attrs, attr); - attr = gtk_text_attr_appearance_new (&style->appearance); + if (!size_only) + { + attr = gtk_text_attr_appearance_new (&style->appearance); - attr->start_index = start; - attr->end_index = start + byte_count; + attr->start_index = start; + attr->end_index = start + byte_count; - pango_attr_list_insert (attrs, attr); + pango_attr_list_insert (attrs, attr); + } } static void @@ -915,7 +919,8 @@ add_cursor (GtkTextLayout *layout, GtkTextLineDisplay * gtk_text_layout_get_line_display (GtkTextLayout *layout, - GtkTextLine *line) + GtkTextLine *line, + gboolean size_only) { GtkTextLineDisplay *display; GtkTextLineSegment *seg; @@ -1016,7 +1021,7 @@ gtk_text_layout_get_line_display (GtkTextLayout *layout, seg = seg->next; } - add_text_attrs (layout, style, byte_count, attrs, byte_offset - byte_count); + add_text_attrs (layout, style, byte_count, attrs, byte_offset - byte_count, size_only); } else { @@ -1169,7 +1174,7 @@ gtk_text_layout_get_iter_at_pixel (GtkTextLayout *layout, line = gtk_text_btree_get_line (layout->buffer->tree, gtk_text_btree_line_count (layout->buffer->tree) - 1, NULL); - display = gtk_text_layout_get_line_display (layout, line); + display = gtk_text_layout_get_line_display (layout, line, TRUE); x -= display->x_offset; y -= line_top + display->top_margin; @@ -1231,7 +1236,7 @@ gtk_text_layout_get_cursor_locations (GtkTextLayout *layout, line = gtk_text_iter_get_line (iter); line_top = gtk_text_btree_find_line_top (layout->buffer->tree, line, layout); - display = gtk_text_layout_get_line_display (layout, line); + display = gtk_text_layout_get_line_display (layout, line, TRUE); pango_layout_get_cursor_pos (display->layout, gtk_text_iter_get_line_byte (iter), strong_pos ? &pango_strong_pos : NULL, @@ -1274,7 +1279,7 @@ gtk_text_layout_get_iter_location (GtkTextLayout *layout, tree = gtk_text_iter_get_btree (iter); line = gtk_text_iter_get_line (iter); - display = gtk_text_layout_get_line_display (layout, line); + display = gtk_text_layout_get_line_display (layout, line, TRUE); rect->y = gtk_text_btree_find_line_top (tree, line, layout); @@ -1332,7 +1337,7 @@ find_display_line_below (GtkTextLayout *layout, while (line && !found_line) { - GtkTextLineDisplay *display = gtk_text_layout_get_line_display (layout, line); + GtkTextLineDisplay *display = gtk_text_layout_get_line_display (layout, line, TRUE); gint byte_index = 0; GSList *tmp_list = pango_layout_get_lines (display->layout); @@ -1394,7 +1399,7 @@ find_display_line_above (GtkTextLayout *layout, while (line && !found_line) { - GtkTextLineDisplay *display = gtk_text_layout_get_line_display (layout, line); + GtkTextLineDisplay *display = gtk_text_layout_get_line_display (layout, line, TRUE); gint byte_index = 0; GSList *tmp_list = pango_layout_get_lines (display->layout); @@ -1503,7 +1508,7 @@ gtk_text_layout_move_iter_to_previous_line (GtkTextLayout *layout, line = gtk_text_iter_get_line (iter); line_byte = gtk_text_iter_get_line_byte (iter); - display = gtk_text_layout_get_line_display (layout, line); + display = gtk_text_layout_get_line_display (layout, line, TRUE); tmp_list = pango_layout_get_lines (display->layout); layout_line = tmp_list->data; @@ -1517,7 +1522,7 @@ gtk_text_layout_move_iter_to_previous_line (GtkTextLayout *layout, gint byte_offset = 0; gtk_text_layout_free_line_display (layout, line, display); - display = gtk_text_layout_get_line_display (layout, prev_line); + display = gtk_text_layout_get_line_display (layout, prev_line, TRUE); tmp_list = pango_layout_get_lines (display->layout); @@ -1594,7 +1599,7 @@ gtk_text_layout_move_iter_to_next_line (GtkTextLayout *layout, gint byte_offset = 0; GSList *tmp_list; - display = gtk_text_layout_get_line_display (layout, line); + display = gtk_text_layout_get_line_display (layout, line, TRUE); tmp_list = pango_layout_get_lines (display->layout); while (tmp_list && !found_after) @@ -1649,7 +1654,7 @@ gtk_text_layout_move_iter_to_x (GtkTextLayout *layout, line = gtk_text_iter_get_line (iter); line_byte = gtk_text_iter_get_line_byte (iter); - display = gtk_text_layout_get_line_display (layout, line); + display = gtk_text_layout_get_line_display (layout, line, TRUE); tmp_list = pango_layout_get_lines (display->layout); while (tmp_list) @@ -1733,7 +1738,7 @@ gtk_text_layout_move_iter_visually (GtkTextLayout *layout, { GtkTextLine *line = gtk_text_iter_get_line (iter); gint line_byte = gtk_text_iter_get_line_byte (iter); - GtkTextLineDisplay *display = gtk_text_layout_get_line_display (layout, line); + GtkTextLineDisplay *display = gtk_text_layout_get_line_display (layout, line, TRUE); int byte_count = gtk_text_line_byte_count (line); int new_index; diff --git a/gtk/gtktextlayout.h b/gtk/gtktextlayout.h index b21f61c2a1..96a7a761ce 100644 --- a/gtk/gtktextlayout.h +++ b/gtk/gtktextlayout.h @@ -146,7 +146,8 @@ void gtk_text_layout_wrap_loop_start (GtkTextLayout *layout); void gtk_text_layout_wrap_loop_end (GtkTextLayout *layout); GtkTextLineDisplay *gtk_text_layout_get_line_display (GtkTextLayout *layout, - GtkTextLine *line); + GtkTextLine *line, + gboolean size_only); void gtk_text_layout_free_line_display (GtkTextLayout *layout, GtkTextLine *line, GtkTextLineDisplay *display); diff --git a/gtk/gtktextview.c b/gtk/gtktextview.c index b0ecd2dadd..197427af4d 100644 --- a/gtk/gtktextview.c +++ b/gtk/gtktextview.c @@ -2154,8 +2154,6 @@ gtk_text_view_ensure_layout (GtkTextView *text_view) gtk_widget_ensure_style (widget); gtk_text_view_set_values_from_style (text_view, style, widget->style); - style->font_desc = pango_font_description_copy (widget->style->font_desc); - style->pixels_above_lines = 2; style->pixels_below_lines = 2; style->pixels_inside_wrap = 1;