diff options
-rw-r--r-- | e-util/ChangeLog | 6 | ||||
-rw-r--r-- | e-util/e-canvas-utils.c | 31 | ||||
-rw-r--r-- | e-util/e-canvas-utils.h | 1 | ||||
-rw-r--r-- | widgets/misc/e-canvas-utils.c | 31 | ||||
-rw-r--r-- | widgets/misc/e-canvas-utils.h | 1 |
5 files changed, 70 insertions, 0 deletions
diff --git a/e-util/ChangeLog b/e-util/ChangeLog index 9c0a9deb65..29aace5994 100644 --- a/e-util/ChangeLog +++ b/e-util/ChangeLog @@ -1,3 +1,9 @@ +2000-05-30 Christopher James Lahey <clahey@helixcode.com> + + * e-canvas-utils.c, e-canvas-utils.h: Added + e_canvas_item_show_area which makes sure that a particular area of + a given item is in the scroll area. + 2000-05-30 Federico Mena Quintero <federico@helixcode.com> * e-dialog-widgets.c (hook_radio): Use the exported function to diff --git a/e-util/e-canvas-utils.c b/e-util/e-canvas-utils.c index 2b50248124..ac61545b5f 100644 --- a/e-util/e-canvas-utils.c +++ b/e-util/e-canvas-utils.c @@ -34,3 +34,34 @@ e_canvas_item_move_absolute (GnomeCanvasItem *item, double dx, double dy) gnome_canvas_item_affine_absolute (item, translate); } + +void +e_canvas_item_show_area (GnomeCanvasItem *item, double x1, double y1, double x2, double y2) +{ + GtkAdjustment *h, *v; + double dx = 0, dy = 0; + + g_return_if_fail (item != NULL); + g_return_if_fail (GNOME_IS_CANVAS_ITEM (item)); + + gnome_canvas_item_i2w(item, &x1, &y1); + gnome_canvas_item_i2w(item, &x2, &y2); + + h = gtk_layout_get_hadjustment(GTK_LAYOUT(item->canvas)); + v = gtk_layout_get_vadjustment(GTK_LAYOUT(item->canvas)); + + if (x2 > h->value + h->page_size) + dx = (x2 - (h->value + h->page_size)); + if (y2 > v->value + v->page_size) + dy = (y2 - (v->value + v->page_size)); + + if (x1 < h->value + dx) + dx = (x1 - h->value); + if (y1 < v->value + dy) + dy = (y1 - v->value); + + if (dx) + gtk_adjustment_set_value(h, h->value + dx); + if (dy) + gtk_adjustment_set_value(v, v->value + dy); +} diff --git a/e-util/e-canvas-utils.h b/e-util/e-canvas-utils.h index 9580f64f96..a940ea393c 100644 --- a/e-util/e-canvas-utils.h +++ b/e-util/e-canvas-utils.h @@ -25,5 +25,6 @@ #include <gnome.h> void e_canvas_item_move_absolute (GnomeCanvasItem *item, double dx, double dy); +void e_canvas_item_show_area (GnomeCanvasItem *item, double x1, double y1, double x2, double y2); #endif /* __E_CANVAS_UTILS__ */ diff --git a/widgets/misc/e-canvas-utils.c b/widgets/misc/e-canvas-utils.c index 2b50248124..ac61545b5f 100644 --- a/widgets/misc/e-canvas-utils.c +++ b/widgets/misc/e-canvas-utils.c @@ -34,3 +34,34 @@ e_canvas_item_move_absolute (GnomeCanvasItem *item, double dx, double dy) gnome_canvas_item_affine_absolute (item, translate); } + +void +e_canvas_item_show_area (GnomeCanvasItem *item, double x1, double y1, double x2, double y2) +{ + GtkAdjustment *h, *v; + double dx = 0, dy = 0; + + g_return_if_fail (item != NULL); + g_return_if_fail (GNOME_IS_CANVAS_ITEM (item)); + + gnome_canvas_item_i2w(item, &x1, &y1); + gnome_canvas_item_i2w(item, &x2, &y2); + + h = gtk_layout_get_hadjustment(GTK_LAYOUT(item->canvas)); + v = gtk_layout_get_vadjustment(GTK_LAYOUT(item->canvas)); + + if (x2 > h->value + h->page_size) + dx = (x2 - (h->value + h->page_size)); + if (y2 > v->value + v->page_size) + dy = (y2 - (v->value + v->page_size)); + + if (x1 < h->value + dx) + dx = (x1 - h->value); + if (y1 < v->value + dy) + dy = (y1 - v->value); + + if (dx) + gtk_adjustment_set_value(h, h->value + dx); + if (dy) + gtk_adjustment_set_value(v, v->value + dy); +} diff --git a/widgets/misc/e-canvas-utils.h b/widgets/misc/e-canvas-utils.h index 9580f64f96..a940ea393c 100644 --- a/widgets/misc/e-canvas-utils.h +++ b/widgets/misc/e-canvas-utils.h @@ -25,5 +25,6 @@ #include <gnome.h> void e_canvas_item_move_absolute (GnomeCanvasItem *item, double dx, double dy); +void e_canvas_item_show_area (GnomeCanvasItem *item, double x1, double y1, double x2, double y2); #endif /* __E_CANVAS_UTILS__ */ |