dia r4356 - in trunk: . app



Author: hans
Date: Mon Mar 30 10:03:15 2009
New Revision: 4356
URL: http://svn.gnome.org/viewvc/dia?rev=4356&view=rev

Log:
2009-03-30  Hans Breuer  <hans breuer org>

	* app/find.and-replace.c : ensure visibility of the object found
	* app/display.[ch](ddisp_present_object) : new function to move
	an object into view with minimum scrolling




Modified:
   trunk/ChangeLog
   trunk/app/display.c
   trunk/app/display.h
   trunk/app/find-and-replace.c

Modified: trunk/app/display.c
==============================================================================
--- trunk/app/display.c	(original)
+++ trunk/app/display.c	Mon Mar 30 10:03:15 2009
@@ -1005,6 +1005,38 @@
   return ddisplay_scroll_center_point(ddisp, &p);
 }
 
+/** Ensure the object is visible but minimize scrolling
+ */
+gboolean
+ddisplay_present_object(DDisplay *ddisp, DiaObject *obj)
+{
+  const Rectangle *r = dia_object_get_enclosing_box(obj);
+  const Rectangle *v = &ddisp->visible;
+
+  display_set_active(ddisp);
+  if  (!rectangle_in_rectangle(v, r)) {
+    Point delta = { 0, 0 };
+
+    if ((r->right - r->left) > (v->right - v->left)) /* object bigger than visible area */
+      delta.x = (r->left - v->left + r->right - v->right) / 2;
+    else if (r->left < v->left)
+      delta.x = r->left - v->left;
+    else if  (r->right > v->right)
+      delta.x = r->right - v->right;
+
+    if ((r->bottom - r->top) > (v->bottom - v->top)) /* object bigger than visible area */
+      delta.y = (r->top - v->top + r->bottom - v->bottom) / 2;
+    else if (r->top < v->top)
+      delta.y = r->top - v->top;
+    else if  (r->bottom > v->bottom)
+      delta.y = r->bottom - v->bottom;
+
+    ddisplay_scroll(ddisp, &delta);
+    return TRUE;
+  }
+  return FALSE;
+}
+
 /**
  * Kind of dirty way to init an antialiased renderer, there should be some plug-in interface to do this.
  * Now with the Libart renderer being a plug-in and the cairo renderer having issues with highlighting

Modified: trunk/app/display.h
==============================================================================
--- trunk/app/display.h	(original)
+++ trunk/app/display.h	Mon Mar 30 10:03:15 2009
@@ -171,6 +171,7 @@
 void ddisplay_scroll_right(DDisplay *ddisp);
 gboolean ddisplay_scroll_center_point(DDisplay *ddisp, Point *p);
 gboolean ddisplay_scroll_to_object(DDisplay *ddisp, DiaObject *obj);
+gboolean ddisplay_present_object(DDisplay *ddisp, DiaObject *obj);
 
 void ddisplay_show_all (DDisplay *ddisp);
 

Modified: trunk/app/find-and-replace.c
==============================================================================
--- trunk/app/find-and-replace.c	(original)
+++ trunk/app/find-and-replace.c	Mon Mar 30 10:03:15 2009
@@ -384,6 +384,7 @@
         diagram_flush(ddisp->diagram);
       }
       diagram_select (ddisp->diagram, sd.last);
+      ddisplay_present_object (ddisp, sd.last);
     }
     break;
   case RESPONSE_REPLACE :



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