[dia] Bug #583561 - avoid crashing with zero zoom
- From: Hans Breuer <hans src gnome org>
- To: svn-commits-list gnome org
- Subject: [dia] Bug #583561 - avoid crashing with zero zoom
- Date: Sat, 23 May 2009 04:28:16 -0400 (EDT)
commit 7a14849c5e037a16e4bfd57c0ddafcf73dd0dd7b
Author: Hans Breuer <hans breuer org>
Date: Sat May 23 10:21:03 2009 +0200
Bug #583561 - avoid crashing with zero zoom
---
app/display.c | 20 +++++++++++++++-----
app/interface.c | 6 ++++--
2 files changed, 19 insertions(+), 7 deletions(-)
diff --git a/app/display.c b/app/display.c
index a60cc16..bafd3a9 100644
--- a/app/display.c
+++ b/app/display.c
@@ -758,19 +758,29 @@ void
ddisplay_zoom(DDisplay *ddisp, Point *point, real magnify)
{
Rectangle *visible;
- real width, height;
+ real width, height, old_zoom;
visible = &ddisp->visible;
- width = (visible->right - visible->left)/magnify;
- height = (visible->bottom - visible->top)/magnify;
-
if ((ddisp->zoom_factor <= DDISPLAY_MIN_ZOOM) && (magnify<=1.0))
return;
if ((ddisp->zoom_factor >= DDISPLAY_MAX_ZOOM) && (magnify>=1.0))
return;
- ddisp->zoom_factor *= magnify;
+ old_zoom = ddisp->zoom_factor;
+ ddisp->zoom_factor = old_zoom * magnify;
+
+ /* clip once more */
+ if (ddisp->zoom_factor < DDISPLAY_MIN_ZOOM)
+ ddisp->zoom_factor = DDISPLAY_MIN_ZOOM;
+ else if (ddisp->zoom_factor > DDISPLAY_MAX_ZOOM)
+ ddisp->zoom_factor = DDISPLAY_MAX_ZOOM;
+
+ /* the real one used - after clipping */
+ magnify = ddisp->zoom_factor / old_zoom;
+ width = (visible->right - visible->left)/magnify;
+ height = (visible->bottom - visible->top)/magnify;
+
ddisplay_set_origo(ddisp, point->x - width/2.0, point->y - height/2.0);
diff --git a/app/interface.c b/app/interface.c
index 56589e2..dc0bb63 100644
--- a/app/interface.c
+++ b/app/interface.c
@@ -337,7 +337,8 @@ view_zoom_set (float factor)
}
static void
-zoom_activate_callback(GtkWidget *item, gpointer user_data) {
+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))));
@@ -371,7 +372,8 @@ zoom_activate_callback(GtkWidget *item, gpointer user_data) {
}
static void
-zoom_add_zoom_amount(GtkWidget *menu, gchar *text, DDisplay *ddisp) {
+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),
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]