[Date Prev][Date Next] [Thread Prev][Thread Next]
[Thread Index]
[Date Index]
[Author Index]
Re: Zoom combo for integrated UI toolbar
- From: "Patrick Hallinan" <patrick j hallinan gmail com>
- To: "discussions about usage and development of dia" <dia-list gnome org>
- Subject: Re: Zoom combo for integrated UI toolbar
- Date: Sun, 30 Sep 2007 15:47:50 -0500
On 9/22/07, Lars Clausen <lars raeder dk> wrote:
On Sat, 2007-09-22 at 08:49 -0500, Patrick Hallinan wrote:
> Yours does look better than the existing one, so I'm
> all for replacing it and reducing the duplicate code.
>
> Thanks! If you want I can try to make the change.
Please do. I've committed your patch, so you can work off of that.
Here's the patch.
Index: app/display.c
===================================================================
--- app/display.c (revision 3796)
+++ app/display.c (working copy)
@@ -68,25 +68,21 @@
static void
update_zoom_status(DDisplay *ddisp)
{
+ GtkWidget *combo_entry;
+ GtkWidget *entry;
gchar* zoom_text;
+
+ gchar *format = is_integrated_ui ()? "%.0f%%" : "%.1f%%";
- if (is_integrated_ui ())
- {
- zoom_text = g_strdup_printf("%.0f%%",
- ddisp->zoom_factor * 100.0 / DDISPLAY_NORMAL_ZOOM);
+ zoom_text = g_strdup_printf (format, ddisp->zoom_factor * 100.0 / DDISPLAY_NORMAL_ZOOM);
- integrated_ui_toolbar_set_zoom_text (ddisp->common_toolbar, zoom_text);
- }
- else
- {
- GtkWidget *zoomcombo;
- zoom_text = g_strdup_printf("%.1f%%",
- ddisp->zoom_factor * 100.0 / DDISPLAY_NORMAL_ZOOM);
- zoomcombo = ddisp->zoom_status;
- gtk_entry_set_text(GTK_ENTRY(gtk_object_get_user_data(GTK_OBJECT(zoomcombo))),
- zoom_text);
- }
+ /* Just for clarity */
+ combo_entry = ddisp->zoom_status;
+ entry = gtk_bin_get_child (GTK_BIN (combo_entry));
+
+ gtk_entry_set_text (GTK_ENTRY (entry), zoom_text);
+
g_free(zoom_text); /* Copied by gtk_entry_set_text */
}
@@ -785,6 +781,8 @@
Rectangle *visible;
real width, height;
+ if (ddisp == NULL) return;
+
visible = &ddisp->visible;
width = (visible->right - visible->left)/magnify;
Index: app/interface.c
===================================================================
--- app/interface.c (revision 3796)
+++ app/interface.c (working copy)
@@ -47,6 +47,9 @@
#include "pixmaps/missing.xpm"
+/* Zoom Constants */
+#define DIA_ZOOM_FIT _("Fit")
+
/* HB: file dnd stuff lent by The Gimp, not fully understood but working ...
*/
enum
@@ -292,117 +295,114 @@
return FALSE;
}
-void
-view_zoom_set (float factor)
+/**
+ * Sets zoom for text entered in the zoom combo entry
+ * @param Zoom combo's GtkEntry.
+ * @param user_data Unused optional data.
+ */
+static void
+dia_zoom_combo_activate (GtkWidget *entry,
+ gpointer user_data)
{
- DDisplay *ddisp;
- real scale;
- Point middle;
- Rectangle *visible;
+ const gchar *text = gtk_entry_get_text (GTK_ENTRY (entry));
+ float zoom_percent;
- ddisp = ddisplay_active();
- if (!ddisp) return;
+ if (sscanf (text, "%f", &zoom_percent) == 1)
+ {
+ view_zoom_set (10.0 * zoom_percent);
- 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);
+ /* TODO Decide if the focus should be put back on the canvas after a manual zoom entry */
+ }
}
static void
-zoom_activate_callback(GtkWidget *item, gpointer user_data) {
- DDisplay *ddisp = (DDisplay *)user_data;
- const gchar *zoom_text =
- gtk_entry_get_text(GTK_ENTRY(gtk_object_get_user_data(GTK_OBJECT(ddisp->zoom_status))));
- float zoom_amount, magnify;
- gchar *zoomamount = g_object_get_data(G_OBJECT(item), "zoomamount");
- if (zoomamount != NULL) {
- zoom_text = zoomamount;
- }
+dia_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)
+ {
+ DDisplay *ddisp;
+ float zoom_percent;
+ gchar * text = gtk_combo_box_get_active_text (combo);
- if (sscanf(zoom_text, "%f", &zoom_amount) == 1) {
- Point middle;
- Rectangle *visible;
+ if (sscanf (text, "%f", &zoom_percent) == 1)
+ {
+ view_zoom_set (zoom_percent * 10.0);
+ }
+ else if (g_strcasecmp (text, DIA_ZOOM_FIT) == 0)
+ {
+ view_show_all_callback (NULL);
+ }
+
+ g_free (text);
- magnify = (zoom_amount*DDISPLAY_NORMAL_ZOOM/100.0)/ddisp->zoom_factor;
- if (fabs(magnify - 1.0) > 0.000001) {
- visible = &ddisp->visible;
- middle.x = visible->left*0.5 + visible->right*0.5;
- middle.y = visible->top*0.5 + visible->bottom*0.5;
- ddisplay_zoom(ddisp, &middle, magnify);
+ /* Force focus back to the canvas */
+ ddisp = ddisplay_active ();
+ if (ddisp)
+ {
+ gtk_widget_grab_focus (ddisp->canvas);
+ }
}
- }
}
-static void
-zoom_add_zoom_amount(GtkWidget *menu, gchar *text, DDisplay *ddisp) {
- GtkWidget *menuitem = gtk_menu_item_new_with_label(text);
- gtk_menu_shell_append(GTK_MENU_SHELL(menu), menuitem);
- g_signal_connect(GTK_OBJECT(menuitem),
- "activate", G_CALLBACK(zoom_activate_callback),
- ddisp);
- g_object_set_data(G_OBJECT(menuitem), "zoomamount", text);
-}
+GtkWidget *create_zoom_combo (void)
+{
+ GtkWidget *combo_entry;
+ GtkWidget *entry;
-static void
-zoom_popup_menu(GtkWidget *button, GdkEventButton *event, gpointer user_data) {
- /* display_set_active(ddisp); */
- /* ddisplay_popup_menu(ddisp, event); */
+ combo_entry = GTK_WIDGET (gtk_combo_box_entry_new_text ());
- GtkMenu *menu = GTK_MENU(user_data);
+ gtk_combo_box_append_text (GTK_COMBO_BOX (combo_entry), DIA_ZOOM_FIT);
+ gtk_combo_box_append_text (GTK_COMBO_BOX (combo_entry), _("800%"));
+ gtk_combo_box_append_text (GTK_COMBO_BOX (combo_entry), _("400%"));
+ gtk_combo_box_append_text (GTK_COMBO_BOX (combo_entry), _("300%"));
+ gtk_combo_box_append_text (GTK_COMBO_BOX (combo_entry), _("200%"));
+ gtk_combo_box_append_text (GTK_COMBO_BOX (combo_entry), _("150%"));
+ gtk_combo_box_append_text (GTK_COMBO_BOX (combo_entry), _("100%"));
+ gtk_combo_box_append_text (GTK_COMBO_BOX (combo_entry), _("75%"));
+ gtk_combo_box_append_text (GTK_COMBO_BOX (combo_entry), _("50%"));
+ gtk_combo_box_append_text (GTK_COMBO_BOX (combo_entry), _("25%"));
+ gtk_combo_box_append_text (GTK_COMBO_BOX (combo_entry), _("10%"));
- gtk_menu_popup(menu, NULL, NULL, NULL, NULL,
- event->button, event->time);
- /* stop the signal emission so the button doesn't grab the
- * pointer from us */
- gtk_signal_emit_stop_by_name(GTK_OBJECT(button), "button_press_event");
-}
+ GTK_WIDGET_UNSET_FLAGS(combo_entry, GTK_CAN_FOCUS);
-static GtkWidget*
-create_zoom_widget(DDisplay *ddisp) {
- GtkWidget *combo;
- GtkWidget *entry;
- GtkWidget *menu;
- GtkWidget *button;
- GtkWidget *arrow;
+ g_signal_connect (G_OBJECT (combo_entry),
+ "changed",
+ G_CALLBACK (dia_zoom_combo_selection_changed),
+ NULL);
- combo = gtk_hbox_new(FALSE, 0);
- entry = gtk_entry_new();
+ /* Get the combo_entry's GtkEntry child to set the width for the widget */
+ entry = gtk_bin_get_child (GTK_BIN (combo_entry));
+ gtk_entry_set_width_chars (GTK_ENTRY (entry), 6);
+
g_signal_connect (GTK_OBJECT (entry), "activate",
- G_CALLBACK(zoom_activate_callback),
- ddisp);
- gtk_box_pack_start_defaults(GTK_BOX(combo), entry);
- gtk_object_set_user_data(GTK_OBJECT(combo), entry);
- gtk_entry_set_width_chars(GTK_ENTRY(entry), 8);
- gtk_widget_show(entry);
+ G_CALLBACK(dia_zoom_combo_activate),
+ NULL);
+ return combo_entry;
+}
- button = gtk_button_new();
- GTK_WIDGET_UNSET_FLAGS(button, GTK_CAN_FOCUS);
- arrow = gtk_arrow_new(GTK_ARROW_DOWN, GTK_SHADOW_OUT);
- gtk_container_add(GTK_CONTAINER(button), arrow);
- gtk_box_pack_start_defaults(GTK_BOX(combo), button);
- gtk_object_set_user_data(GTK_OBJECT(combo), entry);
- gtk_widget_show_all(button);
+void
+view_zoom_set (float factor)
+{
+ DDisplay *ddisp;
+ real scale;
+ Point middle;
+ Rectangle *visible;
- menu = gtk_menu_new();
- zoom_add_zoom_amount(menu, "800%", ddisp);
- zoom_add_zoom_amount(menu, "400%", ddisp);
- zoom_add_zoom_amount(menu, "200%", ddisp);
- zoom_add_zoom_amount(menu, "100%", ddisp);
- zoom_add_zoom_amount(menu, "50%", ddisp);
- zoom_add_zoom_amount(menu, "25%", ddisp);
- zoom_add_zoom_amount(menu, "12%", ddisp);
+ ddisp = ddisplay_active();
+ if (!ddisp) return;
- gtk_widget_show_all(menu);
+ visible = &ddisp->visible;
+ middle.x = visible->left*0.5 + visible->right*0.5;
+ middle.y = visible->top*0.5 + visible->bottom*0.5;
- g_signal_connect (GTK_OBJECT (button), "button_press_event",
- G_CALLBACK(zoom_popup_menu),
- menu);
+ scale = ((real) factor)/1000.0 * DDISPLAY_NORMAL_ZOOM;
- return combo;
+ ddisplay_zoom(ddisp, &middle, scale / ddisp->zoom_factor);
}
static gboolean
@@ -655,7 +655,8 @@
ddisp->menu_bar = NULL;
/* Stand-alone window Zoom status/menu */
- ddisp->zoom_status = NULL;
+ ddisp->zoom_status = g_object_get_data (G_OBJECT (ui.toolbar),
+ DIA_INTEGRATED_UI_MAIN_TOOLBAR_ZOOM_COMBO);
/* Stand-alone window Grid on/off button */
ddisp->grid_status = NULL;
@@ -908,7 +909,8 @@
*/
/* Zoom status pseudo-optionmenu */
- ddisp->zoom_status = create_zoom_widget(ddisp);
+ ddisp->zoom_status = create_zoom_combo ();
+
zoom_hbox = gtk_hbox_new(FALSE, 0);
zoom_label = gtk_label_new(_("Zoom"));
gtk_box_pack_start (GTK_BOX(zoom_hbox), zoom_label,
Index: app/interface.h
===================================================================
--- app/interface.h (revision 3796)
+++ app/interface.h (working copy)
@@ -67,6 +67,8 @@
GtkWidget *interface_get_toolbox_shell(void);
+GtkWidget *create_zoom_combo (void);
+
void tool_select_callback(GtkWidget *widget, gpointer data);
void create_integrated_ui (void);
void create_tree_window(void);
Index: app/menus.c
===================================================================
--- app/menus.c (revision 3796)
+++ app/menus.c (working copy)
@@ -49,12 +49,9 @@
#define DIA_SHOW_TEAROFFS TRUE
/* Integrated UI Toolbar Constants */
-#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 *
@@ -408,27 +405,6 @@
}
}
-/**
- * Sets the zoom text for the toolbar
- * @param toolbar Integrated UI toolbar.
- * @param text Current zoom percentage for the active window
- */
-void integrated_ui_toolbar_set_zoom_text (GtkToolbar *toolbar, const gchar * text)
-{
- if (toolbar)
- {
- 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);
- }
- }
-}
-
/**
* Adds a widget to the toolbar making sure that it doesn't take any excess space, and
* vertically centers it.
@@ -451,45 +427,6 @@
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
@@ -516,38 +453,12 @@
g_free (uifile);
/* Zoom Combo Box Entry */
- w = gtk_combo_box_entry_new_text ();
-
+ w = create_zoom_combo ();
+ integrated_ui_toolbar_add_custom_item (toolbar, w);
g_object_set_data (G_OBJECT (toolbar),
- DIA_INTEGRATED_TOOLBAR_ZOOM_COMBO,
+ DIA_INTEGRATED_UI_MAIN_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);
Index: app/menus.h
===================================================================
--- app/menus.h (revision 3796)
+++ app/menus.h (working copy)
@@ -97,5 +97,11 @@
#define VIEW_MAIN_TOOLBAR_ACTION "ViewMainToolbar"
#define VIEW_MAIN_STATUSBAR_ACTION "ViewMainStatusbar"
+/*
+ * Used for retrieving the zoom combo widget from the integrated UI's toolbar.
+ * This is not applicable to the distributed UI.
+ */
+#define DIA_INTEGRATED_UI_MAIN_TOOLBAR_ZOOM_COMBO "main-toolbar-zoom-combo"
+
#endif /* MENUS_H */
Index: autogen.sh
===================================================================
--- autogen.sh (revision 3796)
+++ autogen.sh (working copy)
@@ -88,7 +88,7 @@
echo "$@" >&2
}
-conf_flags="--enable-maintainer-mode --enable-db2html"
+conf_flags="--enable-maintainer-mode --enable-debug=yes"
if test x$NOCONFIGURE = x; then
if [ "$#" = 0 ]; then
printerr "**Warning**: I am going to run \`configure' with no arguments."
[Date Prev][Date Next] [Thread Prev][Thread Next]
[Thread Index]
[Date Index]
[Author Index]