From 352d217c8805ba3f7de6d4e710a0b4bb3e2a307b Mon Sep 17 00:00:00 2001 From: Alex Merry Date: Mon, 17 Dec 2012 15:56:29 +0000 Subject: Snap toolbox width to tool button width The toolbox width is forced to always be a multiple of the width of one of the tool buttons. --- tikzit/src/gtk/ToolBox.m | 26 ++++++++++++++++++++- tikzit/src/gtk/tztoolpalette.h | 4 ++++ tikzit/src/gtk/tztoolpalette.m | 51 ++++++++++++++++++++++++++++++++++++------ 3 files changed, 73 insertions(+), 8 deletions(-) diff --git a/tikzit/src/gtk/ToolBox.m b/tikzit/src/gtk/ToolBox.m index cf512e0..c92311e 100644 --- a/tikzit/src/gtk/ToolBox.m +++ b/tikzit/src/gtk/ToolBox.m @@ -46,7 +46,6 @@ static void unretain (gpointer data); gtk_window_set_role (GTK_WINDOW (window), "toolbox"); gtk_window_set_type_hint (GTK_WINDOW (window), GDK_WINDOW_TYPE_HINT_UTILITY); - gtk_window_set_default_size (GTK_WINDOW (window), 170, 500); gtk_window_set_deletable (GTK_WINDOW (window), FALSE); GtkWidget *mainLayout = gtk_vbox_new (FALSE, 5); @@ -131,6 +130,31 @@ static void unretain (gpointer data); gtk_alignment_set_padding (GTK_ALIGNMENT (configWidgetContainer), 5, 5, 5, 5); + gint button_width; + gint button_height; + + if (tz_tool_palette_get_button_size (TZ_TOOL_PALETTE (toolPalette), + &button_width, &button_height)) + { + GdkGeometry geometry; + + geometry.min_width = 2 * button_width; + geometry.min_height = -1; + geometry.base_width = button_width; + geometry.base_height = 0; + geometry.width_inc = button_width; + geometry.height_inc = 1; + + gtk_window_set_geometry_hints (GTK_WINDOW (window), + NULL, + &geometry, + GDK_HINT_MIN_SIZE | + GDK_HINT_BASE_SIZE | + GDK_HINT_RESIZE_INC | + GDK_HINT_USER_POS); + } + gtk_window_set_default_size (GTK_WINDOW (window), button_width * 5, 500); + // hack to position the toolbox window somewhere sensible // (upper left) gtk_window_parse_geometry (GTK_WINDOW (window), "+0+0"); diff --git a/tikzit/src/gtk/tztoolpalette.h b/tikzit/src/gtk/tztoolpalette.h index 70a4156..45ec2ac 100644 --- a/tikzit/src/gtk/tztoolpalette.h +++ b/tikzit/src/gtk/tztoolpalette.h @@ -48,5 +48,9 @@ GType tz_tool_palette_get_type (void) G_GNUC_CONST; GtkWidget * tz_tool_palette_new (void); +gboolean tz_tool_palette_get_button_size (TzToolPalette *widget, + gint *width, + gint *height); + #endif /* __TZ_TOOL_PALETTE_H__ */ diff --git a/tikzit/src/gtk/tztoolpalette.m b/tikzit/src/gtk/tztoolpalette.m index 1a6ab9a..a948127 100644 --- a/tikzit/src/gtk/tztoolpalette.m +++ b/tikzit/src/gtk/tztoolpalette.m @@ -68,20 +68,57 @@ tz_tool_palette_init (TzToolPalette *palette) { } +static GtkToolItemGroup * +tz_tool_palette_tool_group (TzToolPalette *palette) +{ + GList *children; + GtkToolItemGroup *group; + + children = gtk_container_get_children (GTK_CONTAINER (palette)); + g_return_val_if_fail (children, NULL); + group = GTK_TOOL_ITEM_GROUP (children->data); + g_list_free (children); + + return group; +} + +gboolean +tz_tool_palette_get_button_size (TzToolPalette *palette, + gint *width, + gint *height) +{ + g_return_val_if_fail (width || height, FALSE); + + GtkToolItemGroup *group = tz_tool_palette_tool_group (palette); + g_return_val_if_fail (group, FALSE); + + guint tool_count = gtk_tool_item_group_get_n_items (group); + if (tool_count > 0) + { + GtkWidget *tool_button; + GtkRequisition button_requisition; + + tool_button = GTK_WIDGET (gtk_tool_item_group_get_nth_item (group, 0)); + gtk_widget_size_request (tool_button, &button_requisition); + if (width) + *width = button_requisition.width; + if (height) + *height = button_requisition.height; + return TRUE; + } + return FALSE; +} + static void tz_tool_palette_size_allocate (GtkWidget *widget, GtkAllocation *allocation) { TzToolPalettePrivate *private = GET_PRIVATE (widget); - GList *children; - GtkToolItemGroup *group; + GtkToolItemGroup *group = tz_tool_palette_tool_group (TZ_TOOL_PALETTE (widget)); - GTK_WIDGET_CLASS (parent_class)->size_allocate (widget, allocation); + g_return_if_fail (group); - children = gtk_container_get_children (GTK_CONTAINER (widget)); - g_return_if_fail (children); - group = GTK_TOOL_ITEM_GROUP (children->data); - g_list_free (children); + GTK_WIDGET_CLASS (parent_class)->size_allocate (widget, allocation); guint tool_count = gtk_tool_item_group_get_n_items (group); if (tool_count > 0) -- cgit v1.2.3