aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--e-util/ChangeLog6
-rw-r--r--e-util/e-canvas-utils.c31
-rw-r--r--e-util/e-canvas-utils.h1
-rw-r--r--widgets/misc/e-canvas-utils.c31
-rw-r--r--widgets/misc/e-canvas-utils.h1
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__ */