dia r4356 - in trunk: . app
- From: hans svn gnome org
- To: svn-commits-list gnome org
- Subject: dia r4356 - in trunk: . app
- Date: Mon, 30 Mar 2009 10:03:16 +0000 (UTC)
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]