[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

gEDA-cvs: branch: master updated (1.1.1.20070708-25-g852786d)



The branch, master has been updated
       via  852786d7dc90eebdc677e5d2af916d577d5f3aaa (commit)
       via  41ce0eb61b4b91d407d788a7ae1eb823d60fbdfd (commit)
      from  42034b5e81a0a4d40254aa2ef557083531d38291 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.


=========
 Summary
=========

 gschem/src/a_pan.c     |   51 +++++++++++++++++++++++++++---------------
 gschem/src/x_preview.c |   58 +++++++++++++++++++++++++++++------------------
 2 files changed, 69 insertions(+), 40 deletions(-)


=================
 Commit Messages
=================

commit 852786d7dc90eebdc677e5d2af916d577d5f3aaa
Author: Peter Clifton <pcjc2@xxxxxxxxx>
Date:   Sun Jul 22 17:12:12 2007 +0100

    Clamp page canvas size in the preview to the size of the page contents
    
    Ensures the user can't zoom way off the page contents being previewed.

:100644 100644 d00e716... a2da96a... M	gschem/src/x_preview.c

commit 41ce0eb61b4b91d407d788a7ae1eb823d60fbdfd
Author: Peter Clifton <pcjc2@xxxxxxxxx>
Date:   Sun Jul 22 17:12:08 2007 +0100

    Alter panning code to center the page in the viewport if under-zoomed
    
    Centering is independant in the X and Y directions. When the viewport is
    larger than the page canvas in a particular direction the page is
    re-centered in that direction. This is necessary for a nice preview.
    Also change preview widget code to remove the A_PAN_IGNORE_BORDERS flag
    from zoom operations, which is no-longer needed with the above changes.

:100644 100644 d86fd12... 4519e46... M	gschem/src/a_pan.c
:100644 100644 844bdd0... d00e716... M	gschem/src/x_preview.c

=========
 Changes
=========

commit 852786d7dc90eebdc677e5d2af916d577d5f3aaa
Author: Peter Clifton <pcjc2@xxxxxxxxx>
Date:   Sun Jul 22 17:12:12 2007 +0100

    Clamp page canvas size in the preview to the size of the page contents
    
    Ensures the user can't zoom way off the page contents being previewed.

diff --git a/gschem/src/x_preview.c b/gschem/src/x_preview.c
index d00e716..a2da96a 100644
--- a/gschem/src/x_preview.c
+++ b/gschem/src/x_preview.c
@@ -41,6 +41,7 @@
 
 #include "../include/x_preview.h"
 
+#define OVER_ZOOM_FACTOR 0.1
 
 extern int mouse_x, mouse_y;
 
@@ -103,18 +104,6 @@ preview_callback_realize (GtkWidget *widget,
   preview_page = s_page_new (preview_toplevel, "unknown");
   s_page_goto (preview_toplevel, preview_page);
 
-  i_vars_set (preview_toplevel);
-
-  /* be sure to turn off scrollbars */
-  preview_toplevel->scrollbars_flag = FALSE;
-
-  /* be sure to turn off the grid */
-  preview_toplevel->grid = FALSE;
-
-  /* preview_toplevel windows don't have toolbars */
-  preview_toplevel->handleboxes = FALSE; 
-  preview_toplevel->toolbars    = FALSE;
-
   x_repaint_background(preview_toplevel);
 
   preview_toplevel->DONT_RECALC = 0;
@@ -240,6 +229,8 @@ static void
 preview_update (Preview *preview)
 {
   TOPLEVEL *preview_toplevel = preview->preview_toplevel;
+  int left, top, right, bottom;
+  int width, height;
 
   if (preview_toplevel->page_current == NULL) {
     return;
@@ -275,6 +266,20 @@ preview_update (Preview *preview)
       }
     }
   }
+
+  if (world_get_object_list_bounds (preview_toplevel,
+                                    preview_toplevel->page_current->object_head,
+                                    &left, &top,
+                                    &right, &bottom)) {
+    /* Clamp the canvas size to the extents of the page being previewed */
+    width = right - left;
+    height = bottom - top;
+    preview_toplevel->init_left   = left  - ((double)width * OVER_ZOOM_FACTOR);
+    preview_toplevel->init_right  = right + ((double)width * OVER_ZOOM_FACTOR);
+    preview_toplevel->init_top    = top    - ((double)height * OVER_ZOOM_FACTOR);
+    preview_toplevel->init_bottom = bottom + ((double)height * OVER_ZOOM_FACTOR);
+  }
+
   /* display current page (possibly empty) */
   a_zoom_extents (preview_toplevel,
                   preview_toplevel->page_current->object_head,
@@ -396,13 +401,20 @@ preview_init (Preview *preview)
     { NULL,                   NULL                                        }
   }, *tmp;
   TOPLEVEL *preview_toplevel;
-  
+
   preview_toplevel = s_toplevel_new ();
 
-  preview_toplevel->init_left   = 0;
-  preview_toplevel->init_top    = 0;
-  preview_toplevel->init_right  = WIDTH_C;
-  preview_toplevel->init_bottom = HEIGHT_C;
+  i_vars_set (preview_toplevel);
+
+  /* be sure to turn off scrollbars */
+  preview_toplevel->scrollbars_flag = FALSE;
+
+  /* be sure to turn off the grid */
+  preview_toplevel->grid = FALSE;
+
+  /* preview_toplevel windows don't have toolbars */
+  preview_toplevel->handleboxes = FALSE;
+  preview_toplevel->toolbars    = FALSE;
 
   preview_toplevel->width  = 160;
   preview_toplevel->height = 120;

commit 41ce0eb61b4b91d407d788a7ae1eb823d60fbdfd
Author: Peter Clifton <pcjc2@xxxxxxxxx>
Date:   Sun Jul 22 17:12:08 2007 +0100

    Alter panning code to center the page in the viewport if under-zoomed
    
    Centering is independant in the X and Y directions. When the viewport is
    larger than the page canvas in a particular direction the page is
    re-centered in that direction. This is necessary for a nice preview.
    Also change preview widget code to remove the A_PAN_IGNORE_BORDERS flag
    from zoom operations, which is no-longer needed with the above changes.

diff --git a/gschem/src/a_pan.c b/gschem/src/a_pan.c
index d86fd12..4519e46 100644
--- a/gschem/src/a_pan.c
+++ b/gschem/src/a_pan.c
@@ -71,6 +71,7 @@ void a_pan_general(TOPLEVEL *w_current, double world_cx, double world_cy,
      this will be the same as w_current->page_current->to_screen_x/y_constant*/
   int zoom_max = 5;	
   int start_x, start_y;
+  int diff;
   double zx, zy, zoom_old, zoom_new, zoom_min;
 
 #if DEBUG
@@ -130,34 +131,48 @@ void a_pan_general(TOPLEVEL *w_current, double world_cx, double world_cy,
   if (!(flags & A_PAN_IGNORE_BORDERS)) {
     /* check right border */
     if (w_current->page_current->right > w_current->init_right) {
-      w_current->page_current->left +=
-        w_current->init_right -
-        w_current->page_current->right;
-      w_current->page_current->right =
-        w_current->init_right;
+      w_current->page_current->left += w_current->init_right -
+                                       w_current->page_current->right;
+      w_current->page_current->right = w_current->init_right;
     }
-    /* check left border; this have to be done after the right border */
+    /* check left border */
     if (w_current->page_current->left < w_current->init_left) {
-      w_current->page_current->right +=
-        w_current->init_left -
-        w_current->page_current->left;
-      w_current->page_current->left =
-        w_current->init_left;
+      w_current->page_current->right += w_current->init_left -
+                                        w_current->page_current->left;
+      w_current->page_current->left = w_current->init_left;
     }
+
+    /* If there is any slack, center the view */
+    diff = (w_current->page_current->right -
+            w_current->page_current->left) -
+           (w_current->init_right - w_current->init_left);
+    if (diff > 0) {
+      w_current->page_current->left -= diff / 2;
+      w_current->page_current->right -= diff / 2;
+    }
+
     /* check bottom border */
     if (w_current->page_current->bottom > w_current->init_bottom) {
-      w_current->page_current->top +=
-        w_current->init_bottom -
-        w_current->page_current->bottom;
+      w_current->page_current->top += w_current->init_bottom -
+                                      w_current->page_current->bottom;
       w_current->page_current->bottom = w_current->init_bottom;
     }
-    /* check top border this have to be done after the bottom border*/
+    /* check top border */
     if (w_current->page_current->top < w_current->init_top) {
-      w_current->page_current->bottom +=
-        w_current->init_top -
-        w_current->page_current->top;
+      w_current->page_current->bottom += w_current->init_top -
+                                         w_current->page_current->top;
       w_current->page_current->top = w_current->init_top;
     }
+
+    /* If there is any slack, center the view */
+    diff = (w_current->page_current->bottom -
+            w_current->page_current->top) -
+           (w_current->init_bottom - w_current->init_top);
+    if (diff > 0) {
+      w_current->page_current->top -= diff / 2;
+      w_current->page_current->bottom -= diff / 2;
+    }
+
   }
 	
 #if DEBUG
diff --git a/gschem/src/x_preview.c b/gschem/src/x_preview.c
index 844bdd0..d00e716 100644
--- a/gschem/src/x_preview.c
+++ b/gschem/src/x_preview.c
@@ -123,7 +123,7 @@ preview_callback_realize (GtkWidget *widget,
 
   a_zoom_extents(preview_toplevel,
                  preview_page->object_head,
-                 A_PAN_DONT_REDRAW | A_PAN_IGNORE_BORDERS);
+                 A_PAN_DONT_REDRAW);
 
   o_redraw_all(preview_toplevel);
 
@@ -181,14 +181,16 @@ preview_callback_button_press (GtkWidget *widget,
 
   switch (event->button) {
       case 1: /* left mouse button: zoom in */
-        a_zoom (preview_toplevel, ZOOM_IN, HOTKEY, 0);
+        a_zoom (preview_toplevel, ZOOM_IN, HOTKEY,
+                A_PAN_DONT_REDRAW);
         o_redraw_all_fast (preview_toplevel);
         break;
       case 2: /* middle mouse button: pan */
         a_pan (preview_toplevel, mouse_x, mouse_y);
         break;
       case 3: /* right mouse button: zoom out */
-        a_zoom (preview_toplevel, ZOOM_OUT, HOTKEY, 0);
+        a_zoom (preview_toplevel, ZOOM_OUT, HOTKEY,
+                A_PAN_DONT_REDRAW);
         o_redraw_all_fast (preview_toplevel);
         break;
   }
@@ -276,7 +278,7 @@ preview_update (Preview *preview)
   /* display current page (possibly empty) */
   a_zoom_extents (preview_toplevel,
                   preview_toplevel->page_current->object_head,
-                  A_PAN_DONT_REDRAW | A_PAN_IGNORE_BORDERS);
+                  A_PAN_DONT_REDRAW);
   o_redraw_all (preview_toplevel);
   
 }
@@ -360,7 +362,7 @@ preview_event_configure (GtkWidget         *widget,
   if (preview_page != NULL) {
     a_zoom_extents(preview_toplevel,
                    preview_page->object_head,
-                   A_PAN_DONT_REDRAW | A_PAN_IGNORE_BORDERS);
+                   A_PAN_DONT_REDRAW);
     o_redraw_all_fast(preview_toplevel);
   }
   return retval;




_______________________________________________
geda-cvs mailing list
geda-cvs@xxxxxxxxxxxxxx
http://www.seul.org/cgi-bin/mailman/listinfo/geda-cvs