summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Merry <alex.merry@cs.ox.ac.uk>2012-12-17 15:56:29 +0000
committerAlex Merry <alex.merry@cs.ox.ac.uk>2012-12-17 15:56:29 +0000
commit352d217c8805ba3f7de6d4e710a0b4bb3e2a307b (patch)
treedfda05afc811c1f8894cac05467e3edf935252aa
parent477b865da18f6004a5180d924997d9283c20250f (diff)
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.
-rw-r--r--tikzit/src/gtk/ToolBox.m26
-rw-r--r--tikzit/src/gtk/tztoolpalette.h4
-rw-r--r--tikzit/src/gtk/tztoolpalette.m51
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)