diff options
author | Soeren Sandmann <sandmann@daimi.au.dk> | 2003-10-31 02:10:03 +0000 |
---|---|---|
committer | Søren Sandmann Pedersen <ssp@src.gnome.org> | 2003-10-31 02:10:03 +0000 |
commit | eb3f5776ac4badddd59ef9d710394e97a7550f75 (patch) | |
tree | f5af86cc386cc40426a7985640ac6f59703bb73d | |
parent | 53f23a989aa640889d6726c834eec5745bddb808 (diff) | |
download | gtk+-eb3f5776ac4badddd59ef9d710394e97a7550f75.tar.gz |
delete this function (toolbar_item_is_homogeneous): cache
Fri Oct 31 02:43:34 2003 Soeren Sandmann <sandmann@daimi.au.dk>
* gtk/gtktoolbar.c (get_item_requisition): delete this function
(toolbar_item_is_homogeneous): cache max_homogeneous_pixels
instead of re-calculating for each item.
(gtk_toolbar_size_allocate): Update comments
-rw-r--r-- | ChangeLog | 7 | ||||
-rw-r--r-- | ChangeLog.pre-2-10 | 7 | ||||
-rw-r--r-- | ChangeLog.pre-2-4 | 7 | ||||
-rw-r--r-- | ChangeLog.pre-2-6 | 7 | ||||
-rw-r--r-- | ChangeLog.pre-2-8 | 7 | ||||
-rw-r--r-- | gtk/gtktoolbar.c | 93 | ||||
-rw-r--r-- | tests/testtoolbar.c | 6 |
7 files changed, 85 insertions, 49 deletions
@@ -1,3 +1,10 @@ +Fri Oct 31 02:43:34 2003 Soeren Sandmann <sandmann@daimi.au.dk> + + * gtk/gtktoolbar.c (get_item_requisition): delete this function + (toolbar_item_is_homogeneous): cache max_homogeneous_pixels + instead of re-calculating for each item. + (gtk_toolbar_size_allocate): Update comments + Thu Oct 30 22:04:31 2003 Soeren Sandmann <sandmann@daimi.au.dk> * gtk/gtktoolbar.c (gtk_toolbar_forall): Only include diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index fe45ca0a18..48c74f9fa0 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,3 +1,10 @@ +Fri Oct 31 02:43:34 2003 Soeren Sandmann <sandmann@daimi.au.dk> + + * gtk/gtktoolbar.c (get_item_requisition): delete this function + (toolbar_item_is_homogeneous): cache max_homogeneous_pixels + instead of re-calculating for each item. + (gtk_toolbar_size_allocate): Update comments + Thu Oct 30 22:04:31 2003 Soeren Sandmann <sandmann@daimi.au.dk> * gtk/gtktoolbar.c (gtk_toolbar_forall): Only include diff --git a/ChangeLog.pre-2-4 b/ChangeLog.pre-2-4 index fe45ca0a18..48c74f9fa0 100644 --- a/ChangeLog.pre-2-4 +++ b/ChangeLog.pre-2-4 @@ -1,3 +1,10 @@ +Fri Oct 31 02:43:34 2003 Soeren Sandmann <sandmann@daimi.au.dk> + + * gtk/gtktoolbar.c (get_item_requisition): delete this function + (toolbar_item_is_homogeneous): cache max_homogeneous_pixels + instead of re-calculating for each item. + (gtk_toolbar_size_allocate): Update comments + Thu Oct 30 22:04:31 2003 Soeren Sandmann <sandmann@daimi.au.dk> * gtk/gtktoolbar.c (gtk_toolbar_forall): Only include diff --git a/ChangeLog.pre-2-6 b/ChangeLog.pre-2-6 index fe45ca0a18..48c74f9fa0 100644 --- a/ChangeLog.pre-2-6 +++ b/ChangeLog.pre-2-6 @@ -1,3 +1,10 @@ +Fri Oct 31 02:43:34 2003 Soeren Sandmann <sandmann@daimi.au.dk> + + * gtk/gtktoolbar.c (get_item_requisition): delete this function + (toolbar_item_is_homogeneous): cache max_homogeneous_pixels + instead of re-calculating for each item. + (gtk_toolbar_size_allocate): Update comments + Thu Oct 30 22:04:31 2003 Soeren Sandmann <sandmann@daimi.au.dk> * gtk/gtktoolbar.c (gtk_toolbar_forall): Only include diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8 index fe45ca0a18..48c74f9fa0 100644 --- a/ChangeLog.pre-2-8 +++ b/ChangeLog.pre-2-8 @@ -1,3 +1,10 @@ +Fri Oct 31 02:43:34 2003 Soeren Sandmann <sandmann@daimi.au.dk> + + * gtk/gtktoolbar.c (get_item_requisition): delete this function + (toolbar_item_is_homogeneous): cache max_homogeneous_pixels + instead of re-calculating for each item. + (gtk_toolbar_size_allocate): Update comments + Thu Oct 30 22:04:31 2003 Soeren Sandmann <sandmann@daimi.au.dk> * gtk/gtktoolbar.c (gtk_toolbar_forall): Only include diff --git a/gtk/gtktoolbar.c b/gtk/gtktoolbar.c index f595963be8..d30b62cb41 100644 --- a/gtk/gtktoolbar.c +++ b/gtk/gtktoolbar.c @@ -174,10 +174,13 @@ static GtkWidget *gtk_toolbar_internal_insert_element (GtkToolbar *tool gpointer user_data, gint position, gboolean use_stock); -static void gtk_toolbar_insert_tool_item (GtkToolbar *toolbar, - GtkToolItem *item, - gint pos, - gboolean is_placeholder); + +typedef struct _ToolbarContent ToolbarContent; + +static ToolbarContent *gtk_toolbar_insert_tool_item (GtkToolbar *toolbar, + GtkToolItem *item, + gint pos, + gboolean is_placeholder); typedef enum { @@ -187,7 +190,7 @@ typedef enum { } ApiMode; #define GTK_TOOLBAR_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GTK_TYPE_TOOLBAR, GtkToolbarPrivate)) -typedef struct _ToolbarContent ToolbarContent; + struct _ToolbarContent { GtkToolItem *item; @@ -220,6 +223,7 @@ struct _GtkToolbarPrivate gboolean in_dnd; gint n_overflow_items_when_dnd_started; GtkToolItem *highlight_tool_item; + gint max_homogeneous_pixels; }; static GtkContainerClass *parent_class = NULL; @@ -590,6 +594,8 @@ gtk_toolbar_init (GtkToolbar *toolbar) priv->show_arrow = TRUE; priv->settings = NULL; + priv->max_homogeneous_pixels = -1; + priv->timer = g_timer_new (); } @@ -623,17 +629,12 @@ toolbar_item_visible (GtkToolbar *toolbar, return FALSE; } -static gboolean -toolbar_item_is_homogeneous (GtkToolbar *toolbar, - GtkToolItem *item) +static gint +calculate_max_homogeneous_pixels (GtkWidget *widget) { - gboolean result; - GtkWidget *widget = GTK_WIDGET (item); - GtkRequisition requisition; PangoContext *context; PangoFontMetrics *metrics; - int char_width; - gint max_homogeneous_pixels; + gint char_width; context = gtk_widget_get_pango_context (widget); metrics = pango_context_get_metrics (context, @@ -642,16 +643,32 @@ toolbar_item_is_homogeneous (GtkToolbar *toolbar, char_width = pango_font_metrics_get_approximate_char_width (metrics); pango_font_metrics_unref (metrics); - max_homogeneous_pixels = PANGO_PIXELS (MAX_HOMOGENEOUS_N_CHARS * char_width); - - result = gtk_tool_item_get_homogeneous (item) && !GTK_IS_SEPARATOR_TOOL_ITEM (item); + return PANGO_PIXELS (MAX_HOMOGENEOUS_N_CHARS * char_width); +} + +static gboolean +toolbar_item_is_homogeneous (GtkToolbar *toolbar, + GtkToolItem *item) +{ + gboolean result; + GtkRequisition requisition; + GtkToolbarPrivate *priv = GTK_TOOLBAR_GET_PRIVATE (toolbar); + + if (priv->max_homogeneous_pixels < 0) + { + priv->max_homogeneous_pixels = + calculate_max_homogeneous_pixels (GTK_WIDGET (toolbar)); + } + + result = gtk_tool_item_get_homogeneous (item) && + !GTK_IS_SEPARATOR_TOOL_ITEM (item); gtk_widget_size_request (GTK_WIDGET (item), &requisition); if ((gtk_tool_item_get_is_important (item) && toolbar->style == GTK_TOOLBAR_BOTH_HORIZ && toolbar->orientation == GTK_ORIENTATION_HORIZONTAL) || - requisition.width > max_homogeneous_pixels) + requisition.width > priv->max_homogeneous_pixels) { result = FALSE; } @@ -1086,7 +1103,7 @@ gtk_toolbar_size_allocate (GtkWidget *widget, n_overflowed = 0; - /* calculate widths of pack front items */ + /* calculate widths of items */ overflowing = FALSE; for (list = priv->content, i = 0; list != NULL; list = list->next, ++i) { @@ -1112,6 +1129,7 @@ gtk_toolbar_size_allocate (GtkWidget *widget, } } + /* calculate width of arrow */ if (need_arrow) { arrow_allocation.width = arrow_size; @@ -1163,7 +1181,7 @@ gtk_toolbar_size_allocate (GtkWidget *widget, g_assert (n_expand_items == 0); } - /* position regular items */ + /* position items */ pos = border_width; for (list = priv->content, i = 0; list != NULL; list = list->next, ++i) { @@ -1265,6 +1283,10 @@ static void gtk_toolbar_style_set (GtkWidget *widget, GtkStyle *prev_style) { + GtkToolbarPrivate *priv = GTK_TOOLBAR_GET_PRIVATE (widget); + + priv->max_homogeneous_pixels = -1; + if (GTK_WIDGET_REALIZED (widget)) gtk_style_set_background (widget->style, widget->window, widget->state); @@ -1816,25 +1838,6 @@ logical_to_physical (GtkToolbar *toolbar, gint logical) return physical; } -static void -get_item_requisition (GtkToolbar *toolbar, - GtkToolItem *tool_item, - gint *width, - gint *height) -{ - GtkRequisition requisition; - - g_object_ref (G_OBJECT (tool_item)); - gtk_widget_set_parent (GTK_WIDGET (tool_item), GTK_WIDGET (toolbar)); - - gtk_widget_size_request (GTK_WIDGET (tool_item), &requisition); - *width = requisition.width; - *height = requisition.height; - - gtk_widget_unparent (GTK_WIDGET (tool_item)); - g_object_unref (G_OBJECT (tool_item)); -} - /** * gtk_toolbar_set_drop_highlight_item: * @toolbar: a #GtkToolbar @@ -1939,12 +1942,13 @@ gtk_toolbar_set_drop_highlight_item (GtkToolbar *toolbar, if (!content || !content->is_placeholder) { - GtkWidget *placeholder = GTK_WIDGET (gtk_separator_tool_item_new ()); + GtkWidget *placeholder; + + placeholder = GTK_WIDGET (gtk_separator_tool_item_new ()); gtk_widget_set_size_request (placeholder, 0, 0); - gtk_toolbar_insert_tool_item (toolbar, GTK_TOOL_ITEM (placeholder), - index, TRUE); - content = g_list_nth_data (priv->content, index); - g_assert (content->is_placeholder); + content = gtk_toolbar_insert_tool_item (toolbar, + GTK_TOOL_ITEM (placeholder), + index, TRUE); start_width = start_height = 0; } else @@ -2402,7 +2406,7 @@ gtk_toolbar_check_new_api (GtkToolbar *toolbar) return TRUE; } -static void +static ToolbarContent * gtk_toolbar_insert_tool_item (GtkToolbar *toolbar, GtkToolItem *item, gint pos, @@ -2419,6 +2423,7 @@ gtk_toolbar_insert_tool_item (GtkToolbar *toolbar, priv->content = g_list_insert (priv->content, content, pos); gtk_widget_set_parent (GTK_WIDGET (item), GTK_WIDGET (toolbar)); + return content; } static void diff --git a/tests/testtoolbar.c b/tests/testtoolbar.c index 0388ee4be7..3602448d01 100644 --- a/tests/testtoolbar.c +++ b/tests/testtoolbar.c @@ -625,7 +625,7 @@ main (gint argc, gchar **argv) gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, -1); gtk_tool_item_set_expand (item, TRUE); gtk_separator_tool_item_set_draw (GTK_SEPARATOR_TOOL_ITEM (item), FALSE); - g_assert (gtk_toolbar_get_nth_item (toolbar, 0) != 0); + g_assert (gtk_toolbar_get_nth_item (GTK_TOOLBAR (toolbar), 0) != 0); item = gtk_radio_tool_button_new_from_stock (NULL, GTK_STOCK_JUSTIFY_LEFT); group = gtk_radio_tool_button_get_group (GTK_RADIO_TOOL_BUTTON (item)); @@ -634,9 +634,7 @@ main (gint argc, gchar **argv) item = gtk_radio_tool_button_new_from_stock (group, GTK_STOCK_JUSTIFY_CENTER); -#if 0 make_prop_editor (G_OBJECT (item)); -#endif group = gtk_radio_tool_button_get_group (GTK_RADIO_TOOL_BUTTON (item)); add_item_to_list (store, item, "Center"); @@ -689,9 +687,7 @@ main (gint argc, gchar **argv) gtk_widget_show_all (window); -#if 0 make_prop_editor (G_OBJECT (toolbar)); -#endif g_signal_connect (window, "delete_event", G_CALLBACK (gtk_main_quit), NULL); |