[dia] Bug #583561 - avoid crashing with zero zoom



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]