Hi,
I changed the zoom indicator label to a combo_entry so zoom in the
integrated UI is at parity with the distributed UI.
Pat.
Index: app/commands.c
===================================================================
--- app/commands.c (revision 3781)
+++ app/commands.c (working copy)
@@ -726,28 +726,13 @@
ddisplay_zoom(ddisp, &middle, M_SQRT1_2);
}
-void
+void
view_zoom_set_callback (GtkAction *action)
{
- DDisplay *ddisp;
- real scale;
- Point middle;
- Rectangle *visible;
int factor;
-
- ddisp = ddisplay_active();
- if (!ddisp) return;
-
/* HACK the actual factor is a suffix to the action name */
factor = atoi (gtk_action_get_name (action) + strlen ("ViewZoom"));
-
- visible = &ddisp->visible;
- middle.x = visible->left*0.5 + visible->right*0.5;
- middle.y = visible->top*0.5 + visible->bottom*0.5;
-
- scale = ((real) factor)/1000.0 * DDISPLAY_NORMAL_ZOOM;
-
- ddisplay_zoom(ddisp, &middle, scale / ddisp->zoom_factor);
+ view_zoom_set (factor);
}
void
Index: app/interface.c
===================================================================
--- app/interface.c (revision 3781)
+++ app/interface.c (working copy)
@@ -292,6 +292,26 @@
return FALSE;
}
+void
+view_zoom_set (float factor)
+{
+ DDisplay *ddisp;
+ real scale;
+ Point middle;
+ Rectangle *visible;
+
+ ddisp = ddisplay_active();
+ if (!ddisp) return;
+
+ visible = &ddisp->visible;
+ middle.x = visible->left*0.5 + visible->right*0.5;
+ middle.y = visible->top*0.5 + visible->bottom*0.5;
+
+ scale = ((real) factor)/1000.0 * DDISPLAY_NORMAL_ZOOM;
+
+ ddisplay_zoom(ddisp, &middle, scale / ddisp->zoom_factor);
+}
+
static void
zoom_activate_callback(GtkWidget *item, gpointer user_data) {
DDisplay *ddisp = (DDisplay *)user_data;
Index: app/interface.h
===================================================================
--- app/interface.h (revision 3781)
+++ app/interface.h (working copy)
@@ -74,6 +74,8 @@
void create_sheets(GtkWidget *parent);
extern GtkWidget *modify_tool_button;
+void view_zoom_set (float zoom_factor); /* zoom_factor is 10 * percentage */
+
typedef struct _ToolButton ToolButton;
typedef struct _ToolButtonData ToolButtonData;
Index: app/menus.c
===================================================================
--- app/menus.c (revision 3781)
+++ app/menus.c (working copy)
@@ -49,10 +49,12 @@
#define DIA_SHOW_TEAROFFS TRUE
/* Integrated UI Toolbar Constants */
-#define DIA_INTEGRATED_TOOLBAR_ZOOM_TEXT "dia-integrated-toolbar-zoom_text"
+#define DIA_INTEGRATED_TOOLBAR_ZOOM_COMBO "dia-integrated-toolbar-zoom-combo_entry"
#define DIA_INTEGRATED_TOOLBAR_SNAP_GRID "dia-integrated-toolbar-snap-grid"
#define DIA_INTEGRATED_TOOLBAR_OBJECT_SNAP "dia-integrated-toolbar-object-snap"
+#define ZOOM_FIT _("Fit")
+
static void plugin_callback (GtkWidget *widget, gpointer data);
static GtkWidget *
@@ -342,16 +344,6 @@
return TRUE;
}
-static void
-integrated_ui_toolbar_grid_snap_set_state(int state)
-{
- DDisplay *ddisp = ddisplay_active ();
- if (ddisp)
- {
- ;/* Get the current state */
- }
-}
-
/**
* Synchronized the Object snap property button with the display.
* @param param Display to synchronize to.
@@ -425,23 +417,89 @@
{
if (toolbar)
{
- GtkLabel *label = g_object_get_data (G_OBJECT (toolbar),
- DIA_INTEGRATED_TOOLBAR_ZOOM_TEXT);
- gtk_label_set_text (label, text);
+ GtkComboBoxEntry *combo_entry = g_object_get_data (G_OBJECT (toolbar),
+ DIA_INTEGRATED_TOOLBAR_ZOOM_COMBO);
+
+ if (combo_entry)
+ {
+ GtkWidget * entry = gtk_bin_get_child (GTK_BIN (combo_entry));
+
+ gtk_entry_set_text (GTK_ENTRY (entry), text);
+ }
}
}
-/* Create the toolbar for the integrated UI */
+/**
+ * Adds a widget to the toolbar making sure that it doesn't take any excess space, and
+ * vertically centers it.
+ * @param toolbar The toolbar to add the widget to.
+ * @param w The widget to add to the toolbar.
+ */
+static void integrated_ui_toolbar_add_custom_item (GtkToolbar *toolbar, GtkWidget *w)
+{
+ GtkToolItem *tool_item;
+ GtkWidget *c; /* container */
+
+ tool_item = gtk_tool_item_new ();
+ c = gtk_vbox_new (FALSE, 0);
+ gtk_container_add (GTK_CONTAINER (tool_item), c);
+ gtk_box_set_homogeneous (GTK_BOX (c), TRUE); /* Centers the button */
+ gtk_box_pack_start (GTK_BOX (c), w, FALSE, FALSE, 0);
+ gtk_toolbar_insert (toolbar, tool_item, -1);
+ gtk_widget_show (GTK_WIDGET (tool_item));
+ gtk_widget_show (c);
+ gtk_widget_show (w);
+}
+
+static void
+integrated_ui_toolbar_zoom_activate (GtkWidget *item,
+ gpointer user_data)
+{
+ const gchar *text = gtk_entry_get_text (GTK_ENTRY (item));
+ float zoom_percent;
+
+ if (sscanf (text, "%f", &zoom_percent) == 1)
+ {
+ view_zoom_set (10.0 * zoom_percent);
+ }
+}
+
+static void
+integrated_ui_toolbar_zoom_combo_selection_changed (GtkComboBox *combo,
+ gpointer user_data)
+{
+ /*
+ * We call gtk_combo_get_get_active() so that typing in the combo entry
+ * doesn't get handled as a selection change
+ */
+ if (gtk_combo_box_get_active (combo) != -1)
+ {
+ float zoom_percent;
+ gchar * text = gtk_combo_box_get_active_text (combo);
+
+ if (sscanf (text, "%f", &zoom_percent) == 1)
+ {
+ view_zoom_set (zoom_percent * 10.0);
+ }
+ else if (g_strcasecmp (text, ZOOM_FIT) == 0)
+ {
+ view_show_all_callback (NULL);
+ }
+
+ g_free (text);
+ }
+}
+
+/**
+ * Create the toolbar for the integrated UI
+ * @return Main toolbar (GtkToolbar*) for the integrated UI main window
+ */
static GtkWidget *
create_integrated_ui_toolbar (void)
{
GtkToolbar *toolbar;
- /* GtkToolItem *button; */
GtkToolItem *sep;
- GtkToolItem *tool_item;
GtkWidget *w;
- /* GtkAction *action;
- int i; */
GError *error = NULL;
gchar *uifile;
@@ -457,53 +515,67 @@
}
g_free (uifile);
- tool_item = gtk_tool_item_new ();
- w = gtk_label_new ("100%");
- gtk_container_add (GTK_CONTAINER (tool_item), w);
- gtk_toolbar_insert (toolbar, tool_item, -1);
- gtk_widget_show (GTK_WIDGET (tool_item));
- gtk_widget_show (w);
+ /* Zoom Combo Box Entry */
+ w = gtk_combo_box_entry_new_text ();
+
g_object_set_data (G_OBJECT (toolbar),
- DIA_INTEGRATED_TOOLBAR_ZOOM_TEXT,
+ DIA_INTEGRATED_TOOLBAR_ZOOM_COMBO,
w);
+ integrated_ui_toolbar_add_custom_item (toolbar, w);
+
+ gtk_combo_box_append_text (GTK_COMBO_BOX (w), ZOOM_FIT);
+ gtk_combo_box_append_text (GTK_COMBO_BOX (w), _("800%"));
+ gtk_combo_box_append_text (GTK_COMBO_BOX (w), _("400%"));
+ gtk_combo_box_append_text (GTK_COMBO_BOX (w), _("300%"));
+ gtk_combo_box_append_text (GTK_COMBO_BOX (w), _("200%"));
+ gtk_combo_box_append_text (GTK_COMBO_BOX (w), _("150%"));
+ gtk_combo_box_append_text (GTK_COMBO_BOX (w), _("100%"));
+ gtk_combo_box_append_text (GTK_COMBO_BOX (w), _("75%"));
+ gtk_combo_box_append_text (GTK_COMBO_BOX (w), _("50%"));
+ gtk_combo_box_append_text (GTK_COMBO_BOX (w), _("25%"));
+ gtk_combo_box_append_text (GTK_COMBO_BOX (w), _("10%"));
+ g_signal_connect (G_OBJECT (w),
+ "changed",
+ G_CALLBACK (integrated_ui_toolbar_zoom_combo_selection_changed),
+ NULL);
+
+ /* Get the combo's GtkEntry child to set the width for the widget */
+ w = gtk_bin_get_child (GTK_BIN (w));
+ gtk_entry_set_width_chars (GTK_ENTRY (w), 6);
+
+ g_signal_connect (GTK_OBJECT (w), "activate",
+ G_CALLBACK(integrated_ui_toolbar_zoom_activate),
+ NULL);
+
+ /* Seperator */
sep = gtk_separator_tool_item_new ();
gtk_toolbar_insert (toolbar, sep, -1);
gtk_widget_show (GTK_WIDGET (sep));
/* Snap to grid */
- /*action = menus_get_action ("ViewSnaptogrid");
- tool_item = gtk_action_create_tool_item (action);*/
- tool_item = gtk_tool_item_new ();
w = dia_toggle_button_new_with_icons (dia_on_grid_icon,
dia_off_grid_icon);
g_signal_connect (G_OBJECT (w), "toggled",
G_CALLBACK (integrated_ui_toolbar_grid_snap_toggle), toolbar);
gtk_tooltips_set_tip (tool_tips, w,
_("Toggles snap-to-grid."), NULL);
- gtk_container_add (GTK_CONTAINER (tool_item), w);
- gtk_toolbar_insert (toolbar, tool_item, -1);
- gtk_widget_show (GTK_WIDGET (tool_item));
- gtk_widget_show (w);
g_object_set_data (G_OBJECT (toolbar),
DIA_INTEGRATED_TOOLBAR_SNAP_GRID,
w);
+ integrated_ui_toolbar_add_custom_item (toolbar, w);
/* Object Snapping */
- tool_item = gtk_tool_item_new ();
w = dia_toggle_button_new_with_icons (dia_mainpoints_on_icon,
dia_mainpoints_off_icon);
g_signal_connect (G_OBJECT (w), "toggled",
G_CALLBACK (integrated_ui_toolbar_object_snap_toggle), toolbar);
gtk_tooltips_set_tip (tool_tips, w,
_("Toggles object snapping."), NULL);
- gtk_container_add (GTK_CONTAINER (tool_item), w);
- gtk_toolbar_insert (toolbar, tool_item, -1);
- gtk_widget_show (GTK_WIDGET (tool_item));
- gtk_widget_show (w);
g_object_set_data (G_OBJECT (toolbar),
DIA_INTEGRATED_TOOLBAR_OBJECT_SNAP,
w);
+ integrated_ui_toolbar_add_custom_item (toolbar, w);
sep = gtk_separator_tool_item_new ();
gtk_toolbar_insert (toolbar, sep, -1);
_______________________________________________
Dia-list mailing list
[email protected]
http://mail.gnome.org/mailman/listinfo/dia-list
FAQ at http://live.gnome.org/Dia/Faq
Main page at http://live.gnome.org/Dia