diff --git a/foocanvas/support/DEV_NOTES b/foocanvas/support/DEV_NOTES
deleted file mode 100755
index f48fed14f90d34ea3bc570de0472db697f5444db..0000000000000000000000000000000000000000
--- a/foocanvas/support/DEV_NOTES
+++ /dev/null
@@ -1,107 +0,0 @@
-
-
-Keeping up to date 
-------------------
-
-Run through the following for developing changes to foocanvas:
-
-check out the current foocanvas.
-
-$ alias gcvs='cvs -z3 -d:pserver:anonymous@anoncvs.gnome.org:2401/cvs/gnome'
-$ gcvs co foocanvas
- 
-
-modify files in foocanvas/libfoocanvas
- 
-
-create the patch which we'll store in cvs
-
-$ cd foocanvas/libfoocanvas
-$ gcvs diff -u > ZMap/foocanvas/support/libfoocanvas-VERSION.patch
-
-
-store in ZMap cvs. Make sure '-ko' is used to STOP keyword substitution ($Id: DEV_NOTES,v 1.5 2006-10-18 20:14:35 rds Exp $).
-
-$ cd ZMap/foocanvas/support/
-$ cvs add -ko -m'message' libfoocanvas-VERSION.patch
-
-
-should test the patch by
-$ gcvs export -rHEAD foocanvas
-$ cd foocanvas/libfoocanvas
-$ patch -p0 < ZMap/foocanvas/support/libfoocanvas-VERSION.patch
-
-
-
-Creating the tar.gz
--------------------
-
-$ gcvs co -d libfoocanvas-VERSION foocanvas
-
-*** additional files fix ***
-
-now we have additional files this step is a little more difficult and makes me
-think we should just distribute a fully patched tar.gz.
-
-$ cd libfoocanvas-VERSION/libfoocanvas/
-$ patch -p0 -u < ../path/to/additional_files/Makefile.am.patch
-$ cp ../path/to/additional_files/*.{c,h} .
-****************************
-
-now make all the autoconf stuff.  I had to do this first.
-NOT $ export AUTOMAKE=~/bin/automake
-try this...
-$ export AUTOMAKE=/nfs/team71/acedb/zmap/prefix/LINUX/bin/automake
-
-aclocal needs to be told where it's m4 files are.
-~zmap/prefix/LINUX/share/aclocal
-~zmap/prefix/LINUX/share/aclocal-1.9
-are good bets at the moment. glib-gettext.m4 seems to be a dependancy 
-which breaks everything silently....
-
-NOT $ export ACLOCAL_FLAGS="-I ~/share/aclocal -I ~/share/aclocal-1.9"
-try this...
-$ export ACLOCAL_FLAGS='-I /nfs/team71/acedb/zmap/prefix/LINUX/share/aclocal -I /nfs/team71/acedb/zmap/prefix/LINUX/share/aclocal-1.9'
-autogen.sh also requires gnome-common 
-
-$ gcvs co gnome-common; ./configure; make; make install
-
-For  the  last  build  (20060326)  I  had  to  modify  autogen.sh  and
-configure.in as per  build.patch. Unsure as to why,  possibly a broken
-autotools setup. 
-
-$ ./autogen.sh
-
-$ make dist-gzip
-  this uses VERSION from configure.in (currently 0.1), I was using YYYYMMDD, who knows what's best.
-  to change this edit the Makefile
--distdir = $(PACKAGE)-$(VERSION)
-+distdir = $(PACKAGE)-YYYYMMDD
-
-
-$ mv libfoocanvas-VERSION.tar.gz ZMap/foocanvas/support/
-$ cvs add -ko -m'message' libfoocanvas-VERSION.tar.gz
-$ cvs commit -m'message' libfoocanvas-VERSION.tar.gz
-
-Should alter untar_patch.sh to set the version variable to VERSION and
-tag the files as libfoocanvas-VERSION.
-Test by running ./untar_patch.sh and seeing no errors in patch and a complete build
-
-
-
-
-ALPHA builds
-------------
-
-...NO LONGER SUPPORTED...
--------------------------
-
-Now auto{conf,make}, m4 and libtool are installed
-
-Use gtar and gpatch as the OSF ones don't do gnu options.
-
-export AUTOMAKE=~acedb/prefix/ALPHA/bin/automake-1.9
-make sure /usr/local/gtk2/bin is in $PATH
-
-gnome-common & gtk-doc are now installed so just do the following
-./autogen.sh; ./configure; make; make install
diff --git a/foocanvas/support/README b/foocanvas/support/README
deleted file mode 100755
index d3821580bd2ad6fbad7b6024bcb7fbc95a99957b..0000000000000000000000000000000000000000
--- a/foocanvas/support/README
+++ /dev/null
@@ -1,12 +0,0 @@
-
-Zmap's version of foocanvas
----------------------------
-You will need to install this altered version of foocanvas in order
-to build and use zmap.
-
-To do this run
-
-./untar_patch.sh
-
-This should untar and patch the source.
-Follow instruction to run ./configure, make and make install.
diff --git a/foocanvas/support/libfoocanvas-0.1.patch b/foocanvas/support/libfoocanvas-0.1.patch
deleted file mode 100755
index 166b558dd18123d9a394da89ca5eab9eba06f7ff..0000000000000000000000000000000000000000
--- a/foocanvas/support/libfoocanvas-0.1.patch
+++ /dev/null
@@ -1,667 +0,0 @@
-Only in /nfs/team71/analysis/rds/workspace/ZMap/foocanvas/: CVS
-Only in .: Makefile.am
-Only in .: Makefile.in
-Only in .: foo-canvas-i18n.h
-diff -u ./foo-canvas-line.c /nfs/team71/analysis/rds/workspace/ZMap/foocanvas/foo-canvas-line.c
---- ./foo-canvas-line.c	Wed Jan  7 03:57:13 2004
-+++ /nfs/team71/analysis/rds/workspace/ZMap/foocanvas/foo-canvas-line.c	Thu May 13 15:36:19 2004
-@@ -1,3 +1,4 @@
-+/*  Last edited: May 11 10:57 2004 (rnc) */
- /*
-  * Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation
-  * All rights reserved.
-@@ -338,7 +339,7 @@
- 	/* Add possible over-estimate for wide lines */
- 
- 	if (line->width_pixels)
--		width = line->width / line->item.canvas->pixels_per_unit;
-+		width = line->width / line->item.canvas->pixels_per_unit_x;
- 	else
- 		width = line->width;
- 
-@@ -466,7 +467,7 @@
- 		return;
- 
- 	if (line->width_pixels)
--		width = line->width / line->item.canvas->pixels_per_unit;
-+		width = line->width / line->item.canvas->pixels_per_unit_x;
- 	else
- 		width = line->width;
- 
-@@ -477,9 +478,9 @@
- 	shape_c = line->shape_c + width / 2.0;
- 
- 	if (line->width_pixels) {
--		shape_a /= line->item.canvas->pixels_per_unit;
--		shape_b /= line->item.canvas->pixels_per_unit;
--		shape_c /= line->item.canvas->pixels_per_unit;
-+		shape_a /= line->item.canvas->pixels_per_unit_x;
-+		shape_b /= line->item.canvas->pixels_per_unit_x;
-+		shape_c /= line->item.canvas->pixels_per_unit_x;
- 	}
- 
- 	shape_a += 0.001;
-@@ -600,7 +601,7 @@
- 	if (line->width_pixels)
- 		width = (int) line->width;
- 	else
--		width = (int) (line->width * line->item.canvas->pixels_per_unit + 0.5);
-+		width = (int) (line->width * line->item.canvas->pixels_per_unit_x + 0.5);
- 
- 	gdk_gc_set_line_attributes (line->gc,
- 				    width,
-@@ -867,11 +868,11 @@
- 		break;
- 
- 	case PROP_FILL_COLOR:
--		g_value_take_string (value,
--				     g_strdup_printf ("#%02x%02x%02x",
--						      line->fill_rgba >> 24,
--						      (line->fill_rgba >> 16) & 0xff,
--						      (line->fill_rgba >> 8) & 0xff));
-+		//g_value_take_string (value,
-+		//		     g_strdup_printf ("#%02x%02x%02x",
-+		//				      line->fill_rgba >> 24,
-+		//				      (line->fill_rgba >> 16) & 0xff,
-+		//				      (line->fill_rgba >> 8) & 0xff));
- 		break;
- 
- 	case PROP_FILL_COLOR_GDK: {
-@@ -1126,12 +1127,12 @@
- 	 */
- 
- 	if (line->width_pixels)
--		width = line->width / item->canvas->pixels_per_unit;
-+		width = line->width / item->canvas->pixels_per_unit_x;
- 	else
- 		width = line->width;
- 
--	if (width < (1.0 / item->canvas->pixels_per_unit))
--		width = 1.0 / item->canvas->pixels_per_unit;
-+	if (width < (1.0 / item->canvas->pixels_per_unit_x))
-+		width = 1.0 / item->canvas->pixels_per_unit_x;
- 
- 	changed_miter_to_bevel = 0;
- 
-Only in .: foo-canvas-line.h
-Only in .: foo-canvas-marshal.list
-diff -u ./foo-canvas-pixbuf.c /nfs/team71/analysis/rds/workspace/ZMap/foocanvas/foo-canvas-pixbuf.c
---- ./foo-canvas-pixbuf.c	Fri Apr 23 06:29:26 2004
-+++ /nfs/team71/analysis/rds/workspace/ZMap/foocanvas/foo-canvas-pixbuf.c	Thu May 13 15:36:21 2004
-@@ -1,3 +1,4 @@
-+/*  Last edited: May 11 11:33 2004 (rnc) */
- /* GNOME libraries - GdkPixbuf item for the GNOME canvas
-  *
-  * Copyright (C) 1999 The Free Software Foundation
-@@ -564,13 +565,13 @@
- 	}
- 
- 	if (priv->x_in_pixels) {
--		x = i2w_dx + priv->x / item->canvas->pixels_per_unit;
-+		x = i2w_dx + priv->x / item->canvas->pixels_per_unit_x;
- 	} else {
- 		x = i2w_dx + priv->x;
- 	}
- 
- 	if (priv->y_in_pixels) {
--		y = i2w_dy + priv->y / item->canvas->pixels_per_unit;
-+		y = i2w_dy + priv->y / item->canvas->pixels_per_unit_y;
- 	} else {
- 		y = i2w_dy + priv->y;
- 	}
-@@ -582,7 +583,7 @@
- 	}
- 
- 	if (priv->width_in_pixels)
--		width /= item->canvas->pixels_per_unit;
-+		width /= item->canvas->pixels_per_unit_x;
- 
- 	if (priv->height_set) {
- 		height = priv->height;
-@@ -591,7 +592,7 @@
- 	}
- 
- 	if (priv->height_in_pixels)
--		height /= item->canvas->pixels_per_unit;
-+		height /= item->canvas->pixels_per_unit_y;
- 
- 
- 	switch (priv->anchor) {
-@@ -781,8 +782,8 @@
- 	pixbuf = priv->pixbuf;
- 
- 	*actual_item = item;
--
--	no_hit = item->canvas->pixels_per_unit * 2 + 10;
-+	/* guessing that the x factor is OK here. RNGC */
-+	no_hit = item->canvas->pixels_per_unit_x * 2 + 10;
- 
- 	if (!priv->pixbuf)
- 		return no_hit;
-@@ -823,13 +824,13 @@
- 	priv = gcp->priv;
- 
- 	if (priv->x_in_pixels) {
--		priv->x += dx * item->canvas->pixels_per_unit;
-+		priv->x += dx * item->canvas->pixels_per_unit_x;
- 	} else {
- 		priv->x += dx;
- 	}
- 
- 	if (priv->y_in_pixels) {
--		priv->y += dy * item->canvas->pixels_per_unit;
-+		priv->y += dy * item->canvas->pixels_per_unit_y;
- 	} else {
- 		priv->y += dy;
- 	}
-Only in .: foo-canvas-pixbuf.h
-diff -u ./foo-canvas-polygon.c /nfs/team71/analysis/rds/workspace/ZMap/foocanvas/foo-canvas-polygon.c
---- ./foo-canvas-polygon.c	Fri Jun 13 14:22:58 2003
-+++ /nfs/team71/analysis/rds/workspace/ZMap/foocanvas/foo-canvas-polygon.c	Thu May 13 15:36:22 2004
-@@ -1,3 +1,4 @@
-+/*  Last edited: May 11 11:35 2004 (rnc) */
- /*
-  * Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation
-  * All rights reserved.
-@@ -273,7 +274,7 @@
- 	/* Add outline width */
- 
- 	if (poly->width_pixels)
--		width = poly->width / poly->item.canvas->pixels_per_unit;
-+		width = poly->width / poly->item.canvas->pixels_per_unit_x;
- 	else
- 		width = poly->width;
- 
-@@ -394,7 +395,7 @@
- 	if (poly->width_pixels)
- 		width = (int) poly->width;
- 	else
--		width = (int) (poly->width * poly->item.canvas->pixels_per_unit + 0.5);
-+		width = (int) (poly->width * poly->item.canvas->pixels_per_unit_x + 0.5);
- 
- 	gdk_gc_set_line_attributes (poly->outline_gc, width,
- 				    GDK_LINE_SOLID, GDK_CAP_ROUND, GDK_JOIN_ROUND);
-@@ -795,7 +796,7 @@
- 
- 	if (poly->outline_set) {
- 		if (poly->width_pixels)
--			width = poly->width / item->canvas->pixels_per_unit;
-+			width = poly->width / item->canvas->pixels_per_unit_x;
- 		else
- 			width = poly->width;
- 
-Only in .: foo-canvas-polygon.h
-diff -u ./foo-canvas-rect-ellipse.c /nfs/team71/analysis/rds/workspace/ZMap/foocanvas/foo-canvas-rect-ellipse.c
---- ./foo-canvas-rect-ellipse.c	Wed Jul 16 18:29:04 2003
-+++ /nfs/team71/analysis/rds/workspace/ZMap/foocanvas/foo-canvas-rect-ellipse.c	Thu May 13 15:36:23 2004
-@@ -1,3 +1,4 @@
-+/*  Last edited: May 13 13:51 2004 (rnc) */
- /*
-  * Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation
-  * All rights reserved.
-@@ -281,7 +282,7 @@
- 	item = FOO_CANVAS_ITEM (re);
- 
- 	if (re->width_pixels)
--		hwidth = (re->width / item->canvas->pixels_per_unit) / 2.0;
-+		hwidth = (re->width / item->canvas->pixels_per_unit_x) / 2.0;
- 	else
- 		hwidth = re->width / 2.0;
- 
-@@ -300,7 +301,7 @@
- 	*py2 = cy2;
- 
- 	/* Some safety fudging */
--
-+	
- 	*px1 -= 2;
- 	*py1 -= 2;
- 	*px2 += 2;
-@@ -352,7 +353,7 @@
- 	if (re->width_pixels)
- 		width = (int) re->width;
- 	else
--		width = (int) (re->width * re->item.canvas->pixels_per_unit + 0.5);
-+		width = (int) (re->width * re->item.canvas->pixels_per_unit_x + 0.5);
- 
- 	gdk_gc_set_line_attributes (re->outline_gc, width,
- 				    GDK_LINE_SOLID, GDK_CAP_PROJECTING, GDK_JOIN_MITER);
-@@ -734,7 +735,7 @@
- 	re = FOO_CANVAS_RE (item);
- 
- 	if (re->width_pixels)
--		hwidth = (re->width / item->canvas->pixels_per_unit) / 2.0;
-+		hwidth = (re->width / item->canvas->pixels_per_unit_x) / 2.0;
- 	else
- 		hwidth = re->width / 2.0;
- 
-@@ -981,7 +982,7 @@
- 
- 	foo_canvas_w2c (item->canvas, x1, y1, &cx1, &cy1);
- 	foo_canvas_w2c (item->canvas, x2, y2, &cx2, &cy2);
--	
-+
- 	if (re->fill_set) {
- 		if ((re->fill_color & 0xff) != 255) {
- 			GdkRectangle *rectangles;
-@@ -1065,7 +1066,7 @@
- 
- 	if (re->outline_set) {
- 		if (re->width_pixels)
--			hwidth = (re->width / item->canvas->pixels_per_unit) / 2.0;
-+			hwidth = (re->width / item->canvas->pixels_per_unit_x) / 2.0;
- 		else
- 			hwidth = re->width / 2.0;
- 
-@@ -1167,6 +1168,9 @@
- 	foo_canvas_w2c (item->canvas, x1, y1, &cx1, &cy1);
- 	foo_canvas_w2c (item->canvas, x2, y2, &cx2, &cy2);
- 
-+	if (cy1 >= cy2) foo_canvas_item_hide(item); 
-+	else foo_canvas_item_show(item);
-+
- 	update_rect = make_rect (cx1, cy1, cx2+1, cy2+1);
- #if 0
- 	foo_canvas_request_redraw (item->canvas,
-@@ -1191,7 +1195,7 @@
- 		if (re->width_pixels)
- 			width_pixels = (int) re->width;
- 		else
--			width_pixels = (int) floor (re->width * re->item.canvas->pixels_per_unit + 0.5);
-+			width_pixels = (int) floor (re->width * re->item.canvas->pixels_per_unit_x + 0.5);
- 
- 		width_lt = width_pixels / 2;
- 		width_rb = (width_pixels + 1) / 2;
-@@ -1344,7 +1348,7 @@
- 
- 	if (re->outline_set) {
- 		if (re->width_pixels)
--			width = re->width / item->canvas->pixels_per_unit;
-+			width = re->width / item->canvas->pixels_per_unit_x;
- 		else
- 			width = re->width;
- 	} else
-Only in .: foo-canvas-rect-ellipse.h
-diff -u ./foo-canvas-text.c /nfs/team71/analysis/rds/workspace/ZMap/foocanvas/foo-canvas-text.c
---- ./foo-canvas-text.c	Fri Apr 23 06:36:54 2004
-+++ /nfs/team71/analysis/rds/workspace/ZMap/foocanvas/foo-canvas-text.c	Thu May 13 15:36:25 2004
-@@ -1,6 +1,7 @@
-+/*  Last edited: May 11 11:41 2004 (rnc) */
- /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
- /*
-- * $Id: foo-canvas-text.c,v 1.7 2004/04/23 05:36:54 jody Exp $
-+ * $Id: foo-canvas-text.c,v 1.1 2004/05/13 14:36:25 rnc Exp $
-  * Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation
-  * All rights reserved.
-  *
-@@ -615,8 +616,8 @@
- 	/* Get canvas pixel coordinates for clip rectangle position */
- 
- 	foo_canvas_w2c (item->canvas, wx, wy, &text->clip_cx, &text->clip_cy);
--	text->clip_cwidth = text->clip_width * item->canvas->pixels_per_unit;
--	text->clip_cheight = text->clip_height * item->canvas->pixels_per_unit;
-+	text->clip_cwidth = text->clip_width * item->canvas->pixels_per_unit_x;
-+	text->clip_cheight = text->clip_height * item->canvas->pixels_per_unit_y;
- 
- 	/* Anchor text */
- 
-@@ -976,7 +977,7 @@
- 	case PROP_WRAP_WIDTH: {
- 		double w = fabs (g_value_get_double (value));
- 		pango_layout_set_width (text->layout,
--			w * text->item.canvas->pixels_per_unit * PANGO_SCALE);
-+			w * text->item.canvas->pixels_per_unit_x * PANGO_SCALE);
- 
- 		break;
- 	}
-@@ -1227,11 +1228,11 @@
- 		break;
- 
- 	case PROP_FILL_COLOR:
--                g_value_take_string (value,
--				     g_strdup_printf ("#%02x%02x%02x",
--						      text->rgba >> 24,
--						      (text->rgba >> 16) & 0xff,
--						      (text->rgba >> 8) & 0xff));
-+                //g_value_take_string (value,
-+		//		     g_strdup_printf ("#%02x%02x%02x",
-+		//				      text->rgba >> 24,
-+		//				      (text->rgba >> 16) & 0xff,
-+		//				      (text->rgba >> 8) & 0xff));
- 		break;
- 
- 	case PROP_FILL_COLOR_GDK: {
-@@ -1252,11 +1253,11 @@
- 		break;
- 
- 	case PROP_TEXT_WIDTH:
--		g_value_set_double (value, text->max_width / text->item.canvas->pixels_per_unit);
-+		g_value_set_double (value, text->max_width / text->item.canvas->pixels_per_unit_x);
- 		break;
- 
- 	case PROP_TEXT_HEIGHT:
--		g_value_set_double (value, text->height / text->item.canvas->pixels_per_unit);
-+		g_value_set_double (value, text->height / text->item.canvas->pixels_per_unit_y);
- 		break;
- 
- 	default:
-@@ -1309,7 +1310,8 @@
- 	if (text->rise_set)
- 		add_attr (attr_list, pango_attr_rise_new (text->rise));
- 
--	zoom = text->item.canvas->pixels_per_unit;
-+	/* guessing that the x factor is OK here. RNGC */
-+	zoom = text->item.canvas->pixels_per_unit_x;
- 	if (fabs (zoom - 1.) > 1e-4) {
- 		PangoAttribute *attr = pango_attr_scale_new (zoom);
- 		attr->start_index = 0;
-@@ -1537,7 +1539,8 @@
- 
- 	pango_layout_iter_free(iter);
- 
--	return best / item->canvas->pixels_per_unit;
-+	/* guessing that the x factor is OK here. RNGC */
-+	return best / item->canvas->pixels_per_unit_x;
- }
- 
- static void
-@@ -1567,8 +1570,8 @@
- 		width = text->clip_width;
- 		height = text->clip_height;
- 	} else {
--		width = text->max_width / item->canvas->pixels_per_unit;
--		height = text->height / item->canvas->pixels_per_unit;
-+		width = text->max_width / item->canvas->pixels_per_unit_x;
-+		height = text->height / item->canvas->pixels_per_unit_y;
- 	}
- 
- 	switch (text->anchor) {
-Only in .: foo-canvas-text.h
-Only in .: foo-canvas-util.c
-Only in .: foo-canvas-util.h
-diff -u ./foo-canvas-widget.c /nfs/team71/analysis/rds/workspace/ZMap/foocanvas/foo-canvas-widget.c
---- ./foo-canvas-widget.c	Tue May 20 14:56:08 2003
-+++ /nfs/team71/analysis/rds/workspace/ZMap/foocanvas/foo-canvas-widget.c	Thu May 13 15:36:27 2004
-@@ -1,3 +1,4 @@
-+/*  Last edited: May 11 11:42 2004 (rnc) */
- /*
-  * Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation
-  * All rights reserved.
-@@ -452,8 +453,8 @@
- 			witem->cwidth = (int) (witem->width + 0.5);
- 			witem->cheight = (int) (witem->height + 0.5);
- 		} else {
--			witem->cwidth = (int) (witem->width * item->canvas->pixels_per_unit + 0.5);
--			witem->cheight = (int) (witem->height * item->canvas->pixels_per_unit + 0.5);
-+			witem->cwidth = (int) (witem->width * item->canvas->pixels_per_unit_x + 0.5);
-+			witem->cheight = (int) (witem->height * item->canvas->pixels_per_unit_y + 0.5);
- 		}
- 
- 		gtk_widget_set_usize (witem->widget, witem->cwidth, witem->cheight);
-@@ -494,8 +495,8 @@
- 
- 	foo_canvas_c2w (item->canvas, witem->cx, witem->cy, &x1, &y1);
- 
--	x2 = x1 + (witem->cwidth - 1) / item->canvas->pixels_per_unit;
--	y2 = y1 + (witem->cheight - 1) / item->canvas->pixels_per_unit;
-+	x2 = x1 + (witem->cwidth - 1) / item->canvas->pixels_per_unit_x;
-+	y2 = y1 + (witem->cheight - 1) / item->canvas->pixels_per_unit_y;
- 
- 	/* Is point inside widget bounds? */
- 
-Only in .: foo-canvas-widget.h
-diff -u ./foo-canvas.c /nfs/team71/analysis/rds/workspace/ZMap/foocanvas/foo-canvas.c
---- ./foo-canvas.c	Thu Mar 11 21:51:42 2004
-+++ /nfs/team71/analysis/rds/workspace/ZMap/foocanvas/foo-canvas.c	Thu May 13 15:36:17 2004
-@@ -1,3 +1,4 @@
-+/*  Last edited: May 12 15:39 2004 (rnc) */
- /* -*- Mode: C; tab-width: 8; indent-tabs-mode: 8; c-basic-offset: 8 -*- */
- /*
-  * Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation
-@@ -290,7 +291,7 @@
- redraw_and_repick_if_mapped (FooCanvasItem *item)
- {
- 	if (item->object.flags & FOO_CANVAS_ITEM_MAPPED) {
--		foo_canvas_item_request_redraw (item);
-+	        foo_canvas_item_request_redraw (item);
- 		item->canvas->need_repick = TRUE;
- 	}
- }
-@@ -1535,10 +1536,10 @@
- 			has_point = TRUE;
- 		} else
- 			has_point = FALSE;
--
-+		/* guessing that the x factor is OK here. RNGC */
- 		if (has_point
- 		    && point_item
--		    && ((int) (dist * item->canvas->pixels_per_unit + 0.5)
-+		    && ((int) (dist * item->canvas->pixels_per_unit_x + 0.5)
- 			<= item->canvas->close_enough)) {
- 			best = dist;
- 			*actual_item = point_item;
-@@ -2074,7 +2075,8 @@
- 	canvas->scroll_x2 = canvas->layout.width;
- 	canvas->scroll_y2 = canvas->layout.height;
- 
--	canvas->pixels_per_unit = 1.0;
-+	canvas->pixels_per_unit_x = 1.0;
-+	canvas->pixels_per_unit_y = 1.0;
- 
- 	canvas->pick_event.type = GDK_LEAVE_NOTIFY;
- 	canvas->pick_event.crossing.x = 0;
-@@ -2294,8 +2296,8 @@
- 	canvas_width = GTK_WIDGET (canvas)->allocation.width;
- 	canvas_height = GTK_WIDGET (canvas)->allocation.height;
- 
--	scroll_width = floor ((canvas->scroll_x2 - canvas->scroll_x1) * canvas->pixels_per_unit + 0.5);
--	scroll_height = floor ((canvas->scroll_y2 - canvas->scroll_y1) * canvas->pixels_per_unit + 0.5);
-+	scroll_width = floor ((canvas->scroll_x2 - canvas->scroll_x1) * canvas->pixels_per_unit_x + 0.5);
-+	scroll_height = floor ((canvas->scroll_y2 - canvas->scroll_y1) * canvas->pixels_per_unit_y + 0.5);
- 
- 	right_limit = scroll_width - canvas_width;
- 	bottom_limit = scroll_height - canvas_height;
-@@ -3082,15 +3084,35 @@
- 
- /**
-  * foo_canvas_set_pixels_per_unit:
-- * @canvas: A canvas.
-+ * @canvas: A canvas
-  * @n: The number of pixels that correspond to one canvas unit.
-  *
-  * Sets the zooming factor of a canvas by specifying the number of pixels that
-  * correspond to one canvas unit.
-+ * This is retained for backwards compatibility and just calls
-+ * foo_canvas_set_pixels_per_unit_xy, passing the number of pixels/unit twice.
-  **/
- void
- foo_canvas_set_pixels_per_unit (FooCanvas *canvas, double n)
- {
-+  foo_canvas_set_pixels_per_unit_xy(canvas, n, n);
-+  return;
-+}
-+
-+
-+/**
-+ * foo_canvas_set_pixels_per_unit_xy:
-+ * @canvas: A canvas.
-+ * @x: The number of pixels that correspond to one canvas unit on the x axis.
-+ * @y: The number of pixels that correspond to one canvas unit on the y axis.
-+ *
-+ * Sets the zooming factor of a canvas by specifying the number of pixels that
-+ * correspond to one canvas unit.
-+ * Having two zooming factors enables asymmetric zooming.
-+ **/
-+void
-+foo_canvas_set_pixels_per_unit_xy (FooCanvas *canvas, double x, double y)
-+{
- 	GtkWidget *widget;
- 	double cx, cy;
- 	int x1, y1;
-@@ -3100,7 +3122,8 @@
- 	gint attributes_mask;
- 
- 	g_return_if_fail (FOO_IS_CANVAS (canvas));
--	g_return_if_fail (n > FOO_CANVAS_EPSILON);
-+	/* guessing that the x factor is OK here.  RNCG */
-+	g_return_if_fail (x > FOO_CANVAS_EPSILON);
- 
- 	widget = GTK_WIDGET (canvas);
- 
-@@ -3108,14 +3131,15 @@
- 	center_y = widget->allocation.height / 2;
- 
- 	/* Find the coordinates of the screen center in units. */
--	cx = (canvas->layout.hadjustment->value + center_x) / canvas->pixels_per_unit + canvas->scroll_x1 + canvas->zoom_xofs;
--	cy = (canvas->layout.vadjustment->value + center_y) / canvas->pixels_per_unit + canvas->scroll_y1 + canvas->zoom_yofs;
-+	cx = (canvas->layout.hadjustment->value + center_x) / canvas->pixels_per_unit_x + canvas->scroll_x1 + canvas->zoom_xofs;
-+	cy = (canvas->layout.vadjustment->value + center_y) / canvas->pixels_per_unit_y + canvas->scroll_y1 + canvas->zoom_yofs;
- 
- 	/* Now calculate the new offset of the upper left corner. (round not truncate) */
--	x1 = ((cx - canvas->scroll_x1) * n) - center_x + .5;
--	y1 = ((cy - canvas->scroll_y1) * n) - center_y + .5;
-+	x1 = ((cx - canvas->scroll_x1) * x) - center_x + .5;
-+	y1 = ((cy - canvas->scroll_y1) * y) - center_y + .5;
- 
--	canvas->pixels_per_unit = n;
-+	canvas->pixels_per_unit_x = x;
-+	canvas->pixels_per_unit_y = y;
- 
- 	if (!(canvas->root->object.flags & FOO_CANVAS_ITEM_NEED_DEEP_UPDATE)) {
- 		canvas->root->object.flags |= FOO_CANVAS_ITEM_NEED_DEEP_UPDATE;
-@@ -3249,7 +3273,8 @@
- 	foo_canvas_w2c (canvas, x, y, &cx, &cy);
- 
- 	dist = foo_canvas_item_invoke_point (canvas->root, x, y, cx, cy, &item);
--	if ((int) (dist * canvas->pixels_per_unit + 0.5) <= canvas->close_enough)
-+	/* guessing the x factor is OK here.  RNGC */
-+	if ((int) (dist * canvas->pixels_per_unit_x + 0.5) <= canvas->close_enough)
- 		return item;
- 	else
- 		return NULL;
-@@ -3312,16 +3337,17 @@
- void
- foo_canvas_w2c (FooCanvas *canvas, double wx, double wy, int *cx, int *cy)
- {
--	double zoom;
-+	double zoom_x, zoom_y;
- 
- 	g_return_if_fail (FOO_IS_CANVAS (canvas));
- 	
--	zoom = canvas->pixels_per_unit;
-+	zoom_x = canvas->pixels_per_unit_x;
-+	zoom_y = canvas->pixels_per_unit_y;
- 	
- 	if (cx)
--		*cx = floor ((wx - canvas->scroll_x1)*zoom + canvas->zoom_xofs + 0.5);
-+		*cx = floor ((wx - canvas->scroll_x1)*zoom_x + canvas->zoom_xofs + 0.5);
- 	if (cy)
--		*cy = floor ((wy - canvas->scroll_y1)*zoom + canvas->zoom_yofs + 0.5);
-+		*cy = floor ((wy - canvas->scroll_y1)*zoom_y + canvas->zoom_yofs + 0.5);
- }
- 
- /**
-@@ -3361,16 +3387,17 @@
- void
- foo_canvas_w2c_d (FooCanvas *canvas, double wx, double wy, double *cx, double *cy)
- {
--	double zoom;
-+	double zoom_x, zoom_y;
- 
- 	g_return_if_fail (FOO_IS_CANVAS (canvas));
- 
--	zoom = canvas->pixels_per_unit;
-+	zoom_x = canvas->pixels_per_unit_x;
-+	zoom_y = canvas->pixels_per_unit_y;
- 	
- 	if (cx)
--		*cx = (wx - canvas->scroll_x1)*zoom + canvas->zoom_xofs;
-+		*cx = (wx - canvas->scroll_x1)*zoom_x + canvas->zoom_xofs;
- 	if (cy)
--		*cy = (wy - canvas->scroll_y1)*zoom + canvas->zoom_yofs;
-+		*cy = (wy - canvas->scroll_y1)*zoom_y + canvas->zoom_yofs;
- }
- 
- 
-@@ -3387,16 +3414,17 @@
- void
- foo_canvas_c2w (FooCanvas *canvas, int cx, int cy, double *wx, double *wy)
- {
--	double zoom;
-+	double zoom_x, zoom_y;
- 
- 	g_return_if_fail (FOO_IS_CANVAS (canvas));
- 
--	zoom = canvas->pixels_per_unit;
-+	zoom_x = canvas->pixels_per_unit_x;
-+	zoom_y = canvas->pixels_per_unit_y;
- 	
- 	if (wx)
--		*wx = (cx - canvas->zoom_xofs)/zoom + canvas->scroll_x1;
-+		*wx = (cx - canvas->zoom_xofs)/zoom_x + canvas->scroll_x1;
- 	if (wy)
--		*wy = (cy - canvas->zoom_yofs)/zoom + canvas->scroll_y1;
-+		*wy = (cy - canvas->zoom_yofs)/zoom_y + canvas->scroll_y1;
- }
- 
- 
-@@ -3422,11 +3450,11 @@
- 
- 	if (worldx)
- 		*worldx = canvas->scroll_x1 + ((winx - canvas->zoom_xofs)
--					       / canvas->pixels_per_unit);
-+					       / canvas->pixels_per_unit_x);
- 
- 	if (worldy)
- 		*worldy = canvas->scroll_y1 + ((winy - canvas->zoom_yofs)
--					       / canvas->pixels_per_unit);
-+					       / canvas->pixels_per_unit_y);
- }
- 
- 
-@@ -3449,10 +3477,10 @@
- 	g_return_if_fail (FOO_IS_CANVAS (canvas));
- 
- 	if (winx)
--		*winx = (canvas->pixels_per_unit)*(worldx - canvas->scroll_x1) + canvas->zoom_xofs;
-+		*winx = (canvas->pixels_per_unit_x)*(worldx - canvas->scroll_x1) + canvas->zoom_xofs;
- 
- 	if (winy)
--		*winy = (canvas->pixels_per_unit)*(worldy - canvas->scroll_y1) + canvas->zoom_yofs;
-+		*winy = (canvas->pixels_per_unit_y)*(worldy - canvas->scroll_y1) + canvas->zoom_yofs;
- }
- 
- 
-diff -u ./foo-canvas.h /nfs/team71/analysis/rds/workspace/ZMap/foocanvas/foo-canvas.h
---- ./foo-canvas.h	Thu Mar 11 21:51:43 2004
-+++ /nfs/team71/analysis/rds/workspace/ZMap/foocanvas/foo-canvas.h	Thu May 13 15:36:18 2004
-@@ -1,3 +1,4 @@
-+/*  Last edited: May 12 08:36 2004 (rnc) */
- /* -*- Mode: C; tab-width: 8; indent-tabs-mode: 8; c-basic-offset: 8 -*- */
- /*
-  * Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation
-@@ -371,7 +372,8 @@
- 	double scroll_x2, scroll_y2;
- 
- 	/* Scaling factor to be used for display */
--	double pixels_per_unit;
-+	double pixels_per_unit_x;
-+	double pixels_per_unit_y;
- 
- 	/* Idle handler ID */
- 	guint idle_id;
-@@ -456,6 +458,10 @@
- /* Sets the number of pixels that correspond to one unit in world coordinates */
- void foo_canvas_set_pixels_per_unit (FooCanvas *canvas, double n);
- 
-+/* Sets the number of  pixels corresponding to one unit in world coordinates
-+ * separately on x and y axes, allowing asymmetric zooming. */
-+void foo_canvas_set_pixels_per_unit_xy (FooCanvas *canvas, double x, double y);
-+
- /* Wether the canvas centers the scroll region if it is smaller than the window  */
- void foo_canvas_set_center_scroll_region (FooCanvas *canvas, gboolean center_scroll_region);
- 
-Only in .: libfoocanvas.h
-Only in .: libfoocanvas.pc.in
-Only in .: libfoocanvastypes.c
-Only in /nfs/team71/analysis/rds/workspace/ZMap/foocanvas/: support
diff --git a/foocanvas/support/libfoocanvas-0.1.tar.gz b/foocanvas/support/libfoocanvas-0.1.tar.gz
deleted file mode 100755
index a6a663999fe63b68ae066d4aa62c04608df21922..0000000000000000000000000000000000000000
Binary files a/foocanvas/support/libfoocanvas-0.1.tar.gz and /dev/null differ
diff --git a/foocanvas/support/libfoocanvas-20050211.patch b/foocanvas/support/libfoocanvas-20050211.patch
deleted file mode 100755
index 3b23c4908acf50c367d2872bb03edbbd2a3cf7f2..0000000000000000000000000000000000000000
--- a/foocanvas/support/libfoocanvas-20050211.patch
+++ /dev/null
@@ -1,758 +0,0 @@
-Only in .: .cvsignore
-Only in /nfs/team71/analysis/rds/workspace/ZMap/foocanvas/: CVS
-Only in .: Makefile.am
-Only in .: foo-canvas-i18n.h
-diff -u ./foo-canvas-line.c /nfs/team71/analysis/rds/workspace/ZMap/foocanvas/foo-canvas-line.c
---- ./foo-canvas-line.c	Fri Mar 12 16:30:49 2004
-+++ /nfs/team71/analysis/rds/workspace/ZMap/foocanvas/foo-canvas-line.c	Thu May 13 15:36:19 2004
-@@ -1,3 +1,4 @@
-+/*  Last edited: May 11 10:57 2004 (rnc) */
- /*
-  * Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation
-  * All rights reserved.
-@@ -338,7 +339,7 @@
- 	/* Add possible over-estimate for wide lines */
- 
- 	if (line->width_pixels)
--		width = line->width / line->item.canvas->pixels_per_unit;
-+		width = line->width / line->item.canvas->pixels_per_unit_x;
- 	else
- 		width = line->width;
- 
-@@ -466,7 +467,7 @@
- 		return;
- 
- 	if (line->width_pixels)
--		width = line->width / line->item.canvas->pixels_per_unit;
-+		width = line->width / line->item.canvas->pixels_per_unit_x;
- 	else
- 		width = line->width;
- 
-@@ -477,9 +478,9 @@
- 	shape_c = line->shape_c + width / 2.0;
- 
- 	if (line->width_pixels) {
--		shape_a /= line->item.canvas->pixels_per_unit;
--		shape_b /= line->item.canvas->pixels_per_unit;
--		shape_c /= line->item.canvas->pixels_per_unit;
-+		shape_a /= line->item.canvas->pixels_per_unit_x;
-+		shape_b /= line->item.canvas->pixels_per_unit_x;
-+		shape_c /= line->item.canvas->pixels_per_unit_x;
- 	}
- 
- 	shape_a += 0.001;
-@@ -600,7 +601,7 @@
- 	if (line->width_pixels)
- 		width = (int) line->width;
- 	else
--		width = (int) (line->width * line->item.canvas->pixels_per_unit + 0.5);
-+		width = (int) (line->width * line->item.canvas->pixels_per_unit_x + 0.5);
- 
- 	gdk_gc_set_line_attributes (line->gc,
- 				    width,
-@@ -867,11 +868,11 @@
- 		break;
- 
- 	case PROP_FILL_COLOR:
--		g_value_take_string (value,
--				     g_strdup_printf ("#%02x%02x%02x",
--						      line->fill_rgba >> 24,
--						      (line->fill_rgba >> 16) & 0xff,
--						      (line->fill_rgba >> 8) & 0xff));
-+		//g_value_take_string (value,
-+		//		     g_strdup_printf ("#%02x%02x%02x",
-+		//				      line->fill_rgba >> 24,
-+		//				      (line->fill_rgba >> 16) & 0xff,
-+		//				      (line->fill_rgba >> 8) & 0xff));
- 		break;
- 
- 	case PROP_FILL_COLOR_GDK: {
-@@ -1126,12 +1127,12 @@
- 	 */
- 
- 	if (line->width_pixels)
--		width = line->width / item->canvas->pixels_per_unit;
-+		width = line->width / item->canvas->pixels_per_unit_x;
- 	else
- 		width = line->width;
- 
--	if (width < (1.0 / item->canvas->pixels_per_unit))
--		width = 1.0 / item->canvas->pixels_per_unit;
-+	if (width < (1.0 / item->canvas->pixels_per_unit_x))
-+		width = 1.0 / item->canvas->pixels_per_unit_x;
- 
- 	changed_miter_to_bevel = 0;
- 
-Only in .: foo-canvas-line.h
-Only in .: foo-canvas-marshal.list
-diff -u ./foo-canvas-pixbuf.c /nfs/team71/analysis/rds/workspace/ZMap/foocanvas/foo-canvas-pixbuf.c
---- ./foo-canvas-pixbuf.c	Fri Apr 23 06:31:12 2004
-+++ /nfs/team71/analysis/rds/workspace/ZMap/foocanvas/foo-canvas-pixbuf.c	Thu May 13 15:36:21 2004
-@@ -1,3 +1,4 @@
-+/*  Last edited: May 11 11:33 2004 (rnc) */
- /* GNOME libraries - GdkPixbuf item for the GNOME canvas
-  *
-  * Copyright (C) 1999 The Free Software Foundation
-@@ -564,13 +565,13 @@
- 	}
- 
- 	if (priv->x_in_pixels) {
--		x = i2w_dx + priv->x / item->canvas->pixels_per_unit;
-+		x = i2w_dx + priv->x / item->canvas->pixels_per_unit_x;
- 	} else {
- 		x = i2w_dx + priv->x;
- 	}
- 
- 	if (priv->y_in_pixels) {
--		y = i2w_dy + priv->y / item->canvas->pixels_per_unit;
-+		y = i2w_dy + priv->y / item->canvas->pixels_per_unit_y;
- 	} else {
- 		y = i2w_dy + priv->y;
- 	}
-@@ -582,7 +583,7 @@
- 	}
- 
- 	if (priv->width_in_pixels)
--		width /= item->canvas->pixels_per_unit;
-+		width /= item->canvas->pixels_per_unit_x;
- 
- 	if (priv->height_set) {
- 		height = priv->height;
-@@ -591,7 +592,7 @@
- 	}
- 
- 	if (priv->height_in_pixels)
--		height /= item->canvas->pixels_per_unit;
-+		height /= item->canvas->pixels_per_unit_y;
- 
- 
- 	switch (priv->anchor) {
-@@ -781,8 +782,8 @@
- 	pixbuf = priv->pixbuf;
- 
- 	*actual_item = item;
--
--	no_hit = item->canvas->pixels_per_unit * 2 + 10;
-+	/* guessing that the x factor is OK here. RNGC */
-+	no_hit = item->canvas->pixels_per_unit_x * 2 + 10;
- 
- 	if (!priv->pixbuf)
- 		return no_hit;
-@@ -823,13 +824,13 @@
- 	priv = gcp->priv;
- 
- 	if (priv->x_in_pixels) {
--		priv->x += dx * item->canvas->pixels_per_unit;
-+		priv->x += dx * item->canvas->pixels_per_unit_x;
- 	} else {
- 		priv->x += dx;
- 	}
- 
- 	if (priv->y_in_pixels) {
--		priv->y += dy * item->canvas->pixels_per_unit;
-+		priv->y += dy * item->canvas->pixels_per_unit_y;
- 	} else {
- 		priv->y += dy;
- 	}
-Only in .: foo-canvas-pixbuf.h
-diff -u ./foo-canvas-polygon.c /nfs/team71/analysis/rds/workspace/ZMap/foocanvas/foo-canvas-polygon.c
---- ./foo-canvas-polygon.c	Sat Dec  4 05:01:22 2004
-+++ /nfs/team71/analysis/rds/workspace/ZMap/foocanvas/foo-canvas-polygon.c	Fri Feb 11 16:45:52 2005
-@@ -1,3 +1,4 @@
-+/*  Last edited: Feb 11 16:45 2005 (rds) */
- /*
-  * Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation
-  * All rights reserved.
-@@ -261,9 +262,9 @@
- 	double width;
- 	int i;
- 
--	if (poly->num_points == 0)
--		return FALSE;
--
-+ 	if (poly->num_points == 0)
-+ 		return FALSE;
-+        
- 	/* Compute bounds of vertices */
- 
- 	x1 = x2 = poly->coords[0];
-@@ -276,7 +277,7 @@
- 	/* Add outline width */
- 
- 	if (poly->width_pixels)
--		width = poly->width / poly->item.canvas->pixels_per_unit;
-+		width = poly->width / poly->item.canvas->pixels_per_unit_x;
- 	else
- 		width = poly->width;
- 
-@@ -293,7 +294,7 @@
- 	*by1 = y1;
- 	*bx2 = x2;
- 	*by2 = y2;
--	return TRUE;
-+        return TRUE;
- }
- 
- /* Computes the bounding box of the polygon, in canvas coordinates.  Assumes that the number of points in the polygon is
-@@ -309,8 +310,8 @@
- 
- 	item = FOO_CANVAS_ITEM (poly);
- 
--	if (!get_bounds (poly, &bbox_x0, &bbox_y0, &bbox_x1, &bbox_y1))
--		return FALSE;
-+	if(!get_bounds (poly, &bbox_x0, &bbox_y0, &bbox_x1, &bbox_y1))
-+               return FALSE;
- 
- 	bbox_x0 += i2w_dx; 
- 	bbox_y0 += i2w_dy; 
-@@ -325,7 +326,7 @@
- 	*by1 = bbox_y0 - 1;
- 	*bx2 = bbox_x1 + 1;
- 	*by2 = bbox_y1 + 1;
--	return TRUE;
-+        return TRUE;
- }
- 
- /* Sets the points of the polygon item to the specified ones.  If needed, it will add a point to
-@@ -400,7 +401,7 @@
- 	if (poly->width_pixels)
- 		width = (int) poly->width;
- 	else
--		width = (int) (poly->width * poly->item.canvas->pixels_per_unit + 0.5);
-+		width = (int) (poly->width * poly->item.canvas->pixels_per_unit_x + 0.5);
- 
- 	gdk_gc_set_line_attributes (poly->outline_gc, width,
- 				    GDK_LINE_SOLID, GDK_CAP_ROUND, GDK_JOIN_ROUND);
-@@ -679,8 +680,8 @@
- 	set_stipple (poly->fill_gc, &poly->fill_stipple, poly->fill_stipple, TRUE);
- 	set_stipple (poly->outline_gc, &poly->outline_stipple, poly->outline_stipple, TRUE);
- 	
--	if (get_bounds_canvas (poly, &x1, &y1, &x2, &y2, i2w_dx, i2w_dy))
--		foo_canvas_update_bbox (item, x1, y1, x2, y2);
-+	if(get_bounds_canvas (poly, &x1, &y1, &x2, &y2, i2w_dx, i2w_dy))
-+               foo_canvas_update_bbox (item, x1, y1, x2, y2);
- }
- 
- static void
-@@ -801,7 +802,7 @@
- 
- 	if (poly->outline_set) {
- 		if (poly->width_pixels)
--			width = poly->width / item->canvas->pixels_per_unit;
-+			width = poly->width / item->canvas->pixels_per_unit_x;
- 		else
- 			width = poly->width;
- 
-Only in .: foo-canvas-polygon.h
-diff -u ./foo-canvas-rect-ellipse.c /nfs/team71/analysis/rds/workspace/ZMap/foocanvas/foo-canvas-rect-ellipse.c
---- ./foo-canvas-rect-ellipse.c	Wed Jul 14 12:04:02 2004
-+++ /nfs/team71/analysis/rds/workspace/ZMap/foocanvas/foo-canvas-rect-ellipse.c	Fri Feb 11 16:27:50 2005
-@@ -1,3 +1,4 @@
-+/*  Last edited: Feb 11 16:27 2005 (rds) */
- /*
-  * Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation
-  * All rights reserved.
-@@ -281,7 +282,7 @@
- 	item = FOO_CANVAS_ITEM (re);
- 
- 	if (re->width_pixels)
--		hwidth = (re->width / item->canvas->pixels_per_unit) / 2.0;
-+		hwidth = (re->width / item->canvas->pixels_per_unit_x) / 2.0;
- 	else
- 		hwidth = re->width / 2.0;
- 
-@@ -300,7 +301,7 @@
- 	*py2 = cy2;
- 
- 	/* Some safety fudging */
--
-+	
- 	*px1 -= 2;
- 	*py1 -= 2;
- 	*px2 += 2;
-@@ -352,7 +353,7 @@
- 	if (re->width_pixels)
- 		width = (int) re->width;
- 	else
--		width = (int) (re->width * re->item.canvas->pixels_per_unit + 0.5);
-+		width = (int) (re->width * re->item.canvas->pixels_per_unit_x + 0.5);
- 
- 	gdk_gc_set_line_attributes (re->outline_gc, width,
- 				    GDK_LINE_SOLID, GDK_CAP_PROJECTING, GDK_JOIN_MITER);
-@@ -734,7 +735,7 @@
- 	re = FOO_CANVAS_RE (item);
- 
- 	if (re->width_pixels)
--		hwidth = (re->width / item->canvas->pixels_per_unit) / 2.0;
-+		hwidth = (re->width / item->canvas->pixels_per_unit_x) / 2.0;
- 	else
- 		hwidth = re->width / 2.0;
- 
-@@ -981,7 +982,7 @@
- 
- 	foo_canvas_w2c (item->canvas, x1, y1, &cx1, &cy1);
- 	foo_canvas_w2c (item->canvas, x2, y2, &cx2, &cy2);
--	
-+
- 	if (re->fill_set) {
- 		if ((re->fill_color & 0xff) != 255) {
- 			GdkRectangle *rectangles;
-@@ -1065,7 +1066,7 @@
- 
- 	if (re->outline_set) {
- 		if (re->width_pixels)
--			hwidth = (re->width / item->canvas->pixels_per_unit) / 2.0;
-+			hwidth = (re->width / item->canvas->pixels_per_unit_x) / 2.0;
- 		else
- 			hwidth = re->width / 2.0;
- 
-@@ -1167,6 +1168,9 @@
- 	foo_canvas_w2c (item->canvas, x1, y1, &cx1, &cy1);
- 	foo_canvas_w2c (item->canvas, x2, y2, &cx2, &cy2);
- 
-+	if (cy1 >= cy2) foo_canvas_item_hide(item); 
-+	else foo_canvas_item_show(item);
-+
- 	update_rect = make_rect (cx1, cy1, cx2+1, cy2+1);
- #if 0
- 	foo_canvas_request_redraw (item->canvas,
-@@ -1191,7 +1195,7 @@
- 		if (re->width_pixels)
- 			width_pixels = (int) re->width;
- 		else
--			width_pixels = (int) floor (re->width * re->item.canvas->pixels_per_unit + 0.5);
-+			width_pixels = (int) floor (re->width * re->item.canvas->pixels_per_unit_x + 0.5);
- 
- 		width_lt = width_pixels / 2;
- 		width_rb = (width_pixels + 1) / 2;
-@@ -1344,7 +1348,7 @@
- 
- 	if (re->outline_set) {
- 		if (re->width_pixels)
--			width = re->width / item->canvas->pixels_per_unit;
-+			width = re->width / item->canvas->pixels_per_unit_x;
- 		else
- 			width = re->width;
- 	} else
-Only in .: foo-canvas-rect-ellipse.h
-diff -u ./foo-canvas-text.c /nfs/team71/analysis/rds/workspace/ZMap/foocanvas/foo-canvas-text.c
---- ./foo-canvas-text.c	Fri Apr 23 06:36:54 2004
-+++ /nfs/team71/analysis/rds/workspace/ZMap/foocanvas/foo-canvas-text.c	Thu May 13 15:36:25 2004
-@@ -1,6 +1,7 @@
-+/*  Last edited: May 11 11:41 2004 (rnc) */
- /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
- /*
-- * $Id: foo-canvas-text.c,v 1.7 2004/04/23 05:36:54 jody Exp $
-+ * $Id: foo-canvas-text.c,v 1.1 2004/05/13 14:36:25 rnc Exp $
-  * Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation
-  * All rights reserved.
-  *
-@@ -615,8 +616,8 @@
- 	/* Get canvas pixel coordinates for clip rectangle position */
- 
- 	foo_canvas_w2c (item->canvas, wx, wy, &text->clip_cx, &text->clip_cy);
--	text->clip_cwidth = text->clip_width * item->canvas->pixels_per_unit;
--	text->clip_cheight = text->clip_height * item->canvas->pixels_per_unit;
-+	text->clip_cwidth = text->clip_width * item->canvas->pixels_per_unit_x;
-+	text->clip_cheight = text->clip_height * item->canvas->pixels_per_unit_y;
- 
- 	/* Anchor text */
- 
-@@ -976,7 +977,7 @@
- 	case PROP_WRAP_WIDTH: {
- 		double w = fabs (g_value_get_double (value));
- 		pango_layout_set_width (text->layout,
--			w * text->item.canvas->pixels_per_unit * PANGO_SCALE);
-+			w * text->item.canvas->pixels_per_unit_x * PANGO_SCALE);
- 
- 		break;
- 	}
-@@ -1227,11 +1228,11 @@
- 		break;
- 
- 	case PROP_FILL_COLOR:
--                g_value_take_string (value,
--				     g_strdup_printf ("#%02x%02x%02x",
--						      text->rgba >> 24,
--						      (text->rgba >> 16) & 0xff,
--						      (text->rgba >> 8) & 0xff));
-+                //g_value_take_string (value,
-+		//		     g_strdup_printf ("#%02x%02x%02x",
-+		//				      text->rgba >> 24,
-+		//				      (text->rgba >> 16) & 0xff,
-+		//				      (text->rgba >> 8) & 0xff));
- 		break;
- 
- 	case PROP_FILL_COLOR_GDK: {
-@@ -1252,11 +1253,11 @@
- 		break;
- 
- 	case PROP_TEXT_WIDTH:
--		g_value_set_double (value, text->max_width / text->item.canvas->pixels_per_unit);
-+		g_value_set_double (value, text->max_width / text->item.canvas->pixels_per_unit_x);
- 		break;
- 
- 	case PROP_TEXT_HEIGHT:
--		g_value_set_double (value, text->height / text->item.canvas->pixels_per_unit);
-+		g_value_set_double (value, text->height / text->item.canvas->pixels_per_unit_y);
- 		break;
- 
- 	default:
-@@ -1309,7 +1310,8 @@
- 	if (text->rise_set)
- 		add_attr (attr_list, pango_attr_rise_new (text->rise));
- 
--	zoom = text->item.canvas->pixels_per_unit;
-+	/* guessing that the x factor is OK here. RNGC */
-+	zoom = text->item.canvas->pixels_per_unit_x;
- 	if (fabs (zoom - 1.) > 1e-4) {
- 		PangoAttribute *attr = pango_attr_scale_new (zoom);
- 		attr->start_index = 0;
-@@ -1537,7 +1539,8 @@
- 
- 	pango_layout_iter_free(iter);
- 
--	return best / item->canvas->pixels_per_unit;
-+	/* guessing that the x factor is OK here. RNGC */
-+	return best / item->canvas->pixels_per_unit_x;
- }
- 
- static void
-@@ -1567,8 +1570,8 @@
- 		width = text->clip_width;
- 		height = text->clip_height;
- 	} else {
--		width = text->max_width / item->canvas->pixels_per_unit;
--		height = text->height / item->canvas->pixels_per_unit;
-+		width = text->max_width / item->canvas->pixels_per_unit_x;
-+		height = text->height / item->canvas->pixels_per_unit_y;
- 	}
- 
- 	switch (text->anchor) {
-Only in .: foo-canvas-text.h
-Only in .: foo-canvas-util.c
-Only in .: foo-canvas-util.h
-diff -u ./foo-canvas-widget.c /nfs/team71/analysis/rds/workspace/ZMap/foocanvas/foo-canvas-widget.c
---- ./foo-canvas-widget.c	Tue May 20 14:39:31 2003
-+++ /nfs/team71/analysis/rds/workspace/ZMap/foocanvas/foo-canvas-widget.c	Thu May 13 15:36:27 2004
-@@ -1,3 +1,4 @@
-+/*  Last edited: May 11 11:42 2004 (rnc) */
- /*
-  * Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation
-  * All rights reserved.
-@@ -452,8 +453,8 @@
- 			witem->cwidth = (int) (witem->width + 0.5);
- 			witem->cheight = (int) (witem->height + 0.5);
- 		} else {
--			witem->cwidth = (int) (witem->width * item->canvas->pixels_per_unit + 0.5);
--			witem->cheight = (int) (witem->height * item->canvas->pixels_per_unit + 0.5);
-+			witem->cwidth = (int) (witem->width * item->canvas->pixels_per_unit_x + 0.5);
-+			witem->cheight = (int) (witem->height * item->canvas->pixels_per_unit_y + 0.5);
- 		}
- 
- 		gtk_widget_set_usize (witem->widget, witem->cwidth, witem->cheight);
-@@ -494,8 +495,8 @@
- 
- 	foo_canvas_c2w (item->canvas, witem->cx, witem->cy, &x1, &y1);
- 
--	x2 = x1 + (witem->cwidth - 1) / item->canvas->pixels_per_unit;
--	y2 = y1 + (witem->cheight - 1) / item->canvas->pixels_per_unit;
-+	x2 = x1 + (witem->cwidth - 1) / item->canvas->pixels_per_unit_x;
-+	y2 = y1 + (witem->cheight - 1) / item->canvas->pixels_per_unit_y;
- 
- 	/* Is point inside widget bounds? */
- 
-Only in .: foo-canvas-widget.h
-diff -u ./foo-canvas.c /nfs/team71/analysis/rds/workspace/ZMap/foocanvas/foo-canvas.c
---- ./foo-canvas.c	Wed Oct 20 14:53:43 2004
-+++ /nfs/team71/analysis/rds/workspace/ZMap/foocanvas/foo-canvas.c	Fri Feb 11 16:31:03 2005
-@@ -1,3 +1,4 @@
-+/*  Last edited: Feb 11 16:31 2005 (rds) */
- /* -*- Mode: C; tab-width: 8; indent-tabs-mode: 8; c-basic-offset: 8 -*- */
- /*
-  * Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation
-@@ -290,7 +291,7 @@
- redraw_and_repick_if_mapped (FooCanvasItem *item)
- {
- 	if (item->object.flags & FOO_CANVAS_ITEM_MAPPED) {
--		foo_canvas_item_request_redraw (item);
-+	        foo_canvas_item_request_redraw (item);
- 		item->canvas->need_repick = TRUE;
- 	}
- }
-@@ -1535,10 +1536,10 @@
- 			has_point = TRUE;
- 		} else
- 			has_point = FALSE;
--
-+		/* guessing that the x factor is OK here. RNGC */
- 		if (has_point
- 		    && point_item
--		    && ((int) (dist * item->canvas->pixels_per_unit + 0.5)
-+		    && ((int) (dist * item->canvas->pixels_per_unit_x + 0.5)
- 			<= item->canvas->close_enough)) {
- 			best = dist;
- 			*actual_item = point_item;
-@@ -2074,7 +2075,8 @@
- 	canvas->scroll_x2 = canvas->layout.width;
- 	canvas->scroll_y2 = canvas->layout.height;
- 
--	canvas->pixels_per_unit = 1.0;
-+	canvas->pixels_per_unit_x = 1.0;
-+	canvas->pixels_per_unit_y = 1.0;
- 
- 	canvas->pick_event.type = GDK_LEAVE_NOTIFY;
- 	canvas->pick_event.crossing.x = 0;
-@@ -2294,8 +2296,8 @@
- 	canvas_width = GTK_WIDGET (canvas)->allocation.width;
- 	canvas_height = GTK_WIDGET (canvas)->allocation.height;
- 
--	scroll_width = floor ((canvas->scroll_x2 - canvas->scroll_x1) * canvas->pixels_per_unit + 0.5);
--	scroll_height = floor ((canvas->scroll_y2 - canvas->scroll_y1) * canvas->pixels_per_unit + 0.5);
-+	scroll_width = floor ((canvas->scroll_x2 - canvas->scroll_x1) * canvas->pixels_per_unit_x + 0.5);
-+	scroll_height = floor ((canvas->scroll_y2 - canvas->scroll_y1) * canvas->pixels_per_unit_y + 0.5);
- 
- 	right_limit = scroll_width - canvas_width;
- 	bottom_limit = scroll_height - canvas_height;
-@@ -2782,12 +2784,12 @@
- 
- 	canvas = FOO_CANVAS (widget);
- 	
--	if (emit_event (canvas, (GdkEvent *) event))
--		return TRUE;
--	if (event->type == GDK_KEY_RELEASE)
--		return GTK_WIDGET_CLASS (canvas_parent_class)->key_release_event (widget, event);
--	else
--		return GTK_WIDGET_CLASS (canvas_parent_class)->key_press_event (widget, event);
-+ 	if (emit_event (canvas, (GdkEvent *) event))
-+ 		return TRUE;
-+ 	if (event->type == GDK_KEY_RELEASE)
-+ 		return GTK_WIDGET_CLASS (canvas_parent_class)->key_release_event (widget, event);
-+ 	else
-+ 		return GTK_WIDGET_CLASS (canvas_parent_class)->key_press_event (widget, event);
- }
- 
- 
-@@ -2967,13 +2969,13 @@
- add_idle (FooCanvas *canvas)
- {
- 	if (!canvas->idle_id) {
--		/* We let the update idle handler have higher priority
--		 * than the redraw idle handler so the canvas state
--		 * will be updated during the expose event.  canvas in
--		 * expose_event.
-+ 		/* We let the update idle handler have higher priority
-+ 		 * than the redraw idle handler so the canvas state
-+ 		 * will be updated during the expose event.  canvas in
-+ 		 * expose_event.
- 		 */
- 		canvas->idle_id = g_idle_add_full (GDK_PRIORITY_REDRAW - 20,
--						   idle_handler, canvas, NULL);
-+ 						   idle_handler, canvas, NULL);
- 	}
- }
- 
-@@ -3093,15 +3095,35 @@
- 
- /**
-  * foo_canvas_set_pixels_per_unit:
-- * @canvas: A canvas.
-+ * @canvas: A canvas
-  * @n: The number of pixels that correspond to one canvas unit.
-  *
-  * Sets the zooming factor of a canvas by specifying the number of pixels that
-  * correspond to one canvas unit.
-+ * This is retained for backwards compatibility and just calls
-+ * foo_canvas_set_pixels_per_unit_xy, passing the number of pixels/unit twice.
-  **/
- void
- foo_canvas_set_pixels_per_unit (FooCanvas *canvas, double n)
- {
-+  foo_canvas_set_pixels_per_unit_xy(canvas, n, n);
-+  return;
-+}
-+
-+
-+/**
-+ * foo_canvas_set_pixels_per_unit_xy:
-+ * @canvas: A canvas.
-+ * @x: The number of pixels that correspond to one canvas unit on the x axis.
-+ * @y: The number of pixels that correspond to one canvas unit on the y axis.
-+ *
-+ * Sets the zooming factor of a canvas by specifying the number of pixels that
-+ * correspond to one canvas unit.
-+ * Having two zooming factors enables asymmetric zooming.
-+ **/
-+void
-+foo_canvas_set_pixels_per_unit_xy (FooCanvas *canvas, double x, double y)
-+{
- 	GtkWidget *widget;
- 	double cx, cy;
- 	int x1, y1;
-@@ -3111,7 +3133,8 @@
- 	gint attributes_mask;
- 
- 	g_return_if_fail (FOO_IS_CANVAS (canvas));
--	g_return_if_fail (n > FOO_CANVAS_EPSILON);
-+	/* guessing that the x factor is OK here.  RNCG */
-+	g_return_if_fail (x > FOO_CANVAS_EPSILON);
- 
- 	widget = GTK_WIDGET (canvas);
- 
-@@ -3119,14 +3142,15 @@
- 	center_y = widget->allocation.height / 2;
- 
- 	/* Find the coordinates of the screen center in units. */
--	cx = (canvas->layout.hadjustment->value + center_x) / canvas->pixels_per_unit + canvas->scroll_x1 + canvas->zoom_xofs;
--	cy = (canvas->layout.vadjustment->value + center_y) / canvas->pixels_per_unit + canvas->scroll_y1 + canvas->zoom_yofs;
-+	cx = (canvas->layout.hadjustment->value + center_x) / canvas->pixels_per_unit_x + canvas->scroll_x1 + canvas->zoom_xofs;
-+	cy = (canvas->layout.vadjustment->value + center_y) / canvas->pixels_per_unit_y + canvas->scroll_y1 + canvas->zoom_yofs;
- 
- 	/* Now calculate the new offset of the upper left corner. (round not truncate) */
--	x1 = ((cx - canvas->scroll_x1) * n) - center_x + .5;
--	y1 = ((cy - canvas->scroll_y1) * n) - center_y + .5;
-+	x1 = ((cx - canvas->scroll_x1) * x) - center_x + .5;
-+	y1 = ((cy - canvas->scroll_y1) * y) - center_y + .5;
- 
--	canvas->pixels_per_unit = n;
-+	canvas->pixels_per_unit_x = x;
-+	canvas->pixels_per_unit_y = y;
- 
- 	if (!(canvas->root->object.flags & FOO_CANVAS_ITEM_NEED_DEEP_UPDATE)) {
- 		canvas->root->object.flags |= FOO_CANVAS_ITEM_NEED_DEEP_UPDATE;
-@@ -3260,7 +3284,8 @@
- 	foo_canvas_w2c (canvas, x, y, &cx, &cy);
- 
- 	dist = foo_canvas_item_invoke_point (canvas->root, x, y, cx, cy, &item);
--	if ((int) (dist * canvas->pixels_per_unit + 0.5) <= canvas->close_enough)
-+	/* guessing the x factor is OK here.  RNGC */
-+	if ((int) (dist * canvas->pixels_per_unit_x + 0.5) <= canvas->close_enough)
- 		return item;
- 	else
- 		return NULL;
-@@ -3323,16 +3348,17 @@
- void
- foo_canvas_w2c (FooCanvas *canvas, double wx, double wy, int *cx, int *cy)
- {
--	double zoom;
-+	double zoom_x, zoom_y;
- 
- 	g_return_if_fail (FOO_IS_CANVAS (canvas));
- 	
--	zoom = canvas->pixels_per_unit;
-+	zoom_x = canvas->pixels_per_unit_x;
-+	zoom_y = canvas->pixels_per_unit_y;
- 	
- 	if (cx)
--		*cx = floor ((wx - canvas->scroll_x1)*zoom + canvas->zoom_xofs + 0.5);
-+		*cx = floor ((wx - canvas->scroll_x1)*zoom_x + canvas->zoom_xofs + 0.5);
- 	if (cy)
--		*cy = floor ((wy - canvas->scroll_y1)*zoom + canvas->zoom_yofs + 0.5);
-+		*cy = floor ((wy - canvas->scroll_y1)*zoom_y + canvas->zoom_yofs + 0.5);
- }
- 
- /**
-@@ -3372,16 +3398,17 @@
- void
- foo_canvas_w2c_d (FooCanvas *canvas, double wx, double wy, double *cx, double *cy)
- {
--	double zoom;
-+	double zoom_x, zoom_y;
- 
- 	g_return_if_fail (FOO_IS_CANVAS (canvas));
- 
--	zoom = canvas->pixels_per_unit;
-+	zoom_x = canvas->pixels_per_unit_x;
-+	zoom_y = canvas->pixels_per_unit_y;
- 	
- 	if (cx)
--		*cx = (wx - canvas->scroll_x1)*zoom + canvas->zoom_xofs;
-+		*cx = (wx - canvas->scroll_x1)*zoom_x + canvas->zoom_xofs;
- 	if (cy)
--		*cy = (wy - canvas->scroll_y1)*zoom + canvas->zoom_yofs;
-+		*cy = (wy - canvas->scroll_y1)*zoom_y + canvas->zoom_yofs;
- }
- 
- 
-@@ -3398,16 +3425,17 @@
- void
- foo_canvas_c2w (FooCanvas *canvas, int cx, int cy, double *wx, double *wy)
- {
--	double zoom;
-+	double zoom_x, zoom_y;
- 
- 	g_return_if_fail (FOO_IS_CANVAS (canvas));
- 
--	zoom = canvas->pixels_per_unit;
-+	zoom_x = canvas->pixels_per_unit_x;
-+	zoom_y = canvas->pixels_per_unit_y;
- 	
- 	if (wx)
--		*wx = (cx - canvas->zoom_xofs)/zoom + canvas->scroll_x1;
-+		*wx = (cx - canvas->zoom_xofs)/zoom_x + canvas->scroll_x1;
- 	if (wy)
--		*wy = (cy - canvas->zoom_yofs)/zoom + canvas->scroll_y1;
-+		*wy = (cy - canvas->zoom_yofs)/zoom_y + canvas->scroll_y1;
- }
- 
- 
-@@ -3433,11 +3461,11 @@
- 
- 	if (worldx)
- 		*worldx = canvas->scroll_x1 + ((winx - canvas->zoom_xofs)
--					       / canvas->pixels_per_unit);
-+					       / canvas->pixels_per_unit_x);
- 
- 	if (worldy)
- 		*worldy = canvas->scroll_y1 + ((winy - canvas->zoom_yofs)
--					       / canvas->pixels_per_unit);
-+					       / canvas->pixels_per_unit_y);
- }
- 
- 
-@@ -3460,10 +3488,10 @@
- 	g_return_if_fail (FOO_IS_CANVAS (canvas));
- 
- 	if (winx)
--		*winx = (canvas->pixels_per_unit)*(worldx - canvas->scroll_x1) + canvas->zoom_xofs;
-+		*winx = (canvas->pixels_per_unit_x)*(worldx - canvas->scroll_x1) + canvas->zoom_xofs;
- 
- 	if (winy)
--		*winy = (canvas->pixels_per_unit)*(worldy - canvas->scroll_y1) + canvas->zoom_yofs;
-+		*winy = (canvas->pixels_per_unit_y)*(worldy - canvas->scroll_y1) + canvas->zoom_yofs;
- }
- 
- 
-diff -u ./foo-canvas.h /nfs/team71/analysis/rds/workspace/ZMap/foocanvas/foo-canvas.h
---- ./foo-canvas.h	Tue Mar  2 14:32:55 2004
-+++ /nfs/team71/analysis/rds/workspace/ZMap/foocanvas/foo-canvas.h	Thu May 13 15:36:18 2004
-@@ -1,3 +1,4 @@
-+/*  Last edited: May 12 08:36 2004 (rnc) */
- /* -*- Mode: C; tab-width: 8; indent-tabs-mode: 8; c-basic-offset: 8 -*- */
- /*
-  * Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation
-@@ -371,7 +372,8 @@
- 	double scroll_x2, scroll_y2;
- 
- 	/* Scaling factor to be used for display */
--	double pixels_per_unit;
-+	double pixels_per_unit_x;
-+	double pixels_per_unit_y;
- 
- 	/* Idle handler ID */
- 	guint idle_id;
-@@ -456,6 +458,10 @@
- /* Sets the number of pixels that correspond to one unit in world coordinates */
- void foo_canvas_set_pixels_per_unit (FooCanvas *canvas, double n);
- 
-+/* Sets the number of  pixels corresponding to one unit in world coordinates
-+ * separately on x and y axes, allowing asymmetric zooming. */
-+void foo_canvas_set_pixels_per_unit_xy (FooCanvas *canvas, double x, double y);
-+
- /* Wether the canvas centers the scroll region if it is smaller than the window  */
- void foo_canvas_set_center_scroll_region (FooCanvas *canvas, gboolean center_scroll_region);
- 
-Only in .: libfoocanvas.h
-Only in .: libfoocanvas.pc.in
-Only in .: libfoocanvastypes.c
-Only in /nfs/team71/analysis/rds/workspace/ZMap/foocanvas/: support
diff --git a/foocanvas/support/libfoocanvas-20050211.tar.gz b/foocanvas/support/libfoocanvas-20050211.tar.gz
deleted file mode 100755
index 7dfd3fa58feebc6a96168a69aad2f5ca86e9fd6b..0000000000000000000000000000000000000000
Binary files a/foocanvas/support/libfoocanvas-20050211.tar.gz and /dev/null differ
diff --git a/foocanvas/support/libfoocanvas-20050225.patch b/foocanvas/support/libfoocanvas-20050225.patch
deleted file mode 100755
index 73ac01b75226309ca93830736a6533067436caa9..0000000000000000000000000000000000000000
--- a/foocanvas/support/libfoocanvas-20050225.patch
+++ /dev/null
@@ -1,786 +0,0 @@
-Index: foo-canvas-line.c
-===================================================================
-RCS file: /cvs/gnome/foocanvas/libfoocanvas/foo-canvas-line.c,v
-retrieving revision 1.6
-diff -u -r1.6 foo-canvas-line.c
---- foo-canvas-line.c	12 Mar 2004 16:30:49 -0000	1.6
-+++ foo-canvas-line.c	25 Feb 2005 16:12:35 -0000
-@@ -1,3 +1,4 @@
-+/*  Last edited: May 11 10:57 2004 (rnc) */
- /*
-  * Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation
-  * All rights reserved.
-@@ -338,7 +339,7 @@
- 	/* Add possible over-estimate for wide lines */
- 
- 	if (line->width_pixels)
--		width = line->width / line->item.canvas->pixels_per_unit;
-+		width = line->width / line->item.canvas->pixels_per_unit_x;
- 	else
- 		width = line->width;
- 
-@@ -466,7 +467,7 @@
- 		return;
- 
- 	if (line->width_pixels)
--		width = line->width / line->item.canvas->pixels_per_unit;
-+		width = line->width / line->item.canvas->pixels_per_unit_x;
- 	else
- 		width = line->width;
- 
-@@ -477,9 +478,9 @@
- 	shape_c = line->shape_c + width / 2.0;
- 
- 	if (line->width_pixels) {
--		shape_a /= line->item.canvas->pixels_per_unit;
--		shape_b /= line->item.canvas->pixels_per_unit;
--		shape_c /= line->item.canvas->pixels_per_unit;
-+		shape_a /= line->item.canvas->pixels_per_unit_x;
-+		shape_b /= line->item.canvas->pixels_per_unit_x;
-+		shape_c /= line->item.canvas->pixels_per_unit_x;
- 	}
- 
- 	shape_a += 0.001;
-@@ -600,7 +601,7 @@
- 	if (line->width_pixels)
- 		width = (int) line->width;
- 	else
--		width = (int) (line->width * line->item.canvas->pixels_per_unit + 0.5);
-+		width = (int) (line->width * line->item.canvas->pixels_per_unit_x + 0.5);
- 
- 	gdk_gc_set_line_attributes (line->gc,
- 				    width,
-@@ -867,11 +868,11 @@
- 		break;
- 
- 	case PROP_FILL_COLOR:
--		g_value_take_string (value,
--				     g_strdup_printf ("#%02x%02x%02x",
--						      line->fill_rgba >> 24,
--						      (line->fill_rgba >> 16) & 0xff,
--						      (line->fill_rgba >> 8) & 0xff));
-+		//g_value_take_string (value,
-+		//		     g_strdup_printf ("#%02x%02x%02x",
-+		//				      line->fill_rgba >> 24,
-+		//				      (line->fill_rgba >> 16) & 0xff,
-+		//				      (line->fill_rgba >> 8) & 0xff));
- 		break;
- 
- 	case PROP_FILL_COLOR_GDK: {
-@@ -1126,12 +1127,12 @@
- 	 */
- 
- 	if (line->width_pixels)
--		width = line->width / item->canvas->pixels_per_unit;
-+		width = line->width / item->canvas->pixels_per_unit_x;
- 	else
- 		width = line->width;
- 
--	if (width < (1.0 / item->canvas->pixels_per_unit))
--		width = 1.0 / item->canvas->pixels_per_unit;
-+	if (width < (1.0 / item->canvas->pixels_per_unit_x))
-+		width = 1.0 / item->canvas->pixels_per_unit_x;
- 
- 	changed_miter_to_bevel = 0;
- 
-Index: foo-canvas-pixbuf.c
-===================================================================
-RCS file: /cvs/gnome/foocanvas/libfoocanvas/foo-canvas-pixbuf.c,v
-retrieving revision 1.8
-diff -u -r1.8 foo-canvas-pixbuf.c
---- foo-canvas-pixbuf.c	23 Apr 2004 05:31:12 -0000	1.8
-+++ foo-canvas-pixbuf.c	25 Feb 2005 16:12:35 -0000
-@@ -1,3 +1,4 @@
-+/*  Last edited: May 11 11:33 2004 (rnc) */
- /* GNOME libraries - GdkPixbuf item for the GNOME canvas
-  *
-  * Copyright (C) 1999 The Free Software Foundation
-@@ -564,13 +565,13 @@
- 	}
- 
- 	if (priv->x_in_pixels) {
--		x = i2w_dx + priv->x / item->canvas->pixels_per_unit;
-+		x = i2w_dx + priv->x / item->canvas->pixels_per_unit_x;
- 	} else {
- 		x = i2w_dx + priv->x;
- 	}
- 
- 	if (priv->y_in_pixels) {
--		y = i2w_dy + priv->y / item->canvas->pixels_per_unit;
-+		y = i2w_dy + priv->y / item->canvas->pixels_per_unit_y;
- 	} else {
- 		y = i2w_dy + priv->y;
- 	}
-@@ -582,7 +583,7 @@
- 	}
- 
- 	if (priv->width_in_pixels)
--		width /= item->canvas->pixels_per_unit;
-+		width /= item->canvas->pixels_per_unit_x;
- 
- 	if (priv->height_set) {
- 		height = priv->height;
-@@ -591,7 +592,7 @@
- 	}
- 
- 	if (priv->height_in_pixels)
--		height /= item->canvas->pixels_per_unit;
-+		height /= item->canvas->pixels_per_unit_y;
- 
- 
- 	switch (priv->anchor) {
-@@ -781,8 +782,8 @@
- 	pixbuf = priv->pixbuf;
- 
- 	*actual_item = item;
--
--	no_hit = item->canvas->pixels_per_unit * 2 + 10;
-+	/* guessing that the x factor is OK here. RNGC */
-+	no_hit = item->canvas->pixels_per_unit_x * 2 + 10;
- 
- 	if (!priv->pixbuf)
- 		return no_hit;
-@@ -823,13 +824,13 @@
- 	priv = gcp->priv;
- 
- 	if (priv->x_in_pixels) {
--		priv->x += dx * item->canvas->pixels_per_unit;
-+		priv->x += dx * item->canvas->pixels_per_unit_x;
- 	} else {
- 		priv->x += dx;
- 	}
- 
- 	if (priv->y_in_pixels) {
--		priv->y += dy * item->canvas->pixels_per_unit;
-+		priv->y += dy * item->canvas->pixels_per_unit_y;
- 	} else {
- 		priv->y += dy;
- 	}
-Index: foo-canvas-polygon.c
-===================================================================
-RCS file: /cvs/gnome/foocanvas/libfoocanvas/foo-canvas-polygon.c,v
-retrieving revision 1.6
-diff -u -r1.6 foo-canvas-polygon.c
---- foo-canvas-polygon.c	4 Dec 2004 05:01:22 -0000	1.6
-+++ foo-canvas-polygon.c	25 Feb 2005 16:12:35 -0000
-@@ -1,3 +1,4 @@
-+/*  Last edited: Feb 11 16:45 2005 (rds) */
- /*
-  * Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation
-  * All rights reserved.
-@@ -261,9 +262,9 @@
- 	double width;
- 	int i;
- 
--	if (poly->num_points == 0)
--		return FALSE;
--
-+ 	if (poly->num_points == 0)
-+ 		return FALSE;
-+        
- 	/* Compute bounds of vertices */
- 
- 	x1 = x2 = poly->coords[0];
-@@ -276,7 +277,7 @@
- 	/* Add outline width */
- 
- 	if (poly->width_pixels)
--		width = poly->width / poly->item.canvas->pixels_per_unit;
-+		width = poly->width / poly->item.canvas->pixels_per_unit_x;
- 	else
- 		width = poly->width;
- 
-@@ -293,7 +294,7 @@
- 	*by1 = y1;
- 	*bx2 = x2;
- 	*by2 = y2;
--	return TRUE;
-+        return TRUE;
- }
- 
- /* Computes the bounding box of the polygon, in canvas coordinates.  Assumes that the number of points in the polygon is
-@@ -309,8 +310,8 @@
- 
- 	item = FOO_CANVAS_ITEM (poly);
- 
--	if (!get_bounds (poly, &bbox_x0, &bbox_y0, &bbox_x1, &bbox_y1))
--		return FALSE;
-+	if(!get_bounds (poly, &bbox_x0, &bbox_y0, &bbox_x1, &bbox_y1))
-+               return FALSE;
- 
- 	bbox_x0 += i2w_dx; 
- 	bbox_y0 += i2w_dy; 
-@@ -325,7 +326,7 @@
- 	*by1 = bbox_y0 - 1;
- 	*bx2 = bbox_x1 + 1;
- 	*by2 = bbox_y1 + 1;
--	return TRUE;
-+        return TRUE;
- }
- 
- /* Sets the points of the polygon item to the specified ones.  If needed, it will add a point to
-@@ -400,7 +401,7 @@
- 	if (poly->width_pixels)
- 		width = (int) poly->width;
- 	else
--		width = (int) (poly->width * poly->item.canvas->pixels_per_unit + 0.5);
-+		width = (int) (poly->width * poly->item.canvas->pixels_per_unit_x + 0.5);
- 
- 	gdk_gc_set_line_attributes (poly->outline_gc, width,
- 				    GDK_LINE_SOLID, GDK_CAP_ROUND, GDK_JOIN_ROUND);
-@@ -679,8 +680,8 @@
- 	set_stipple (poly->fill_gc, &poly->fill_stipple, poly->fill_stipple, TRUE);
- 	set_stipple (poly->outline_gc, &poly->outline_stipple, poly->outline_stipple, TRUE);
- 	
--	if (get_bounds_canvas (poly, &x1, &y1, &x2, &y2, i2w_dx, i2w_dy))
--		foo_canvas_update_bbox (item, x1, y1, x2, y2);
-+	if(get_bounds_canvas (poly, &x1, &y1, &x2, &y2, i2w_dx, i2w_dy))
-+               foo_canvas_update_bbox (item, x1, y1, x2, y2);
- }
- 
- static void
-@@ -801,7 +802,7 @@
- 
- 	if (poly->outline_set) {
- 		if (poly->width_pixels)
--			width = poly->width / item->canvas->pixels_per_unit;
-+			width = poly->width / item->canvas->pixels_per_unit_x;
- 		else
- 			width = poly->width;
- 
-Index: foo-canvas-rect-ellipse.c
-===================================================================
-RCS file: /cvs/gnome/foocanvas/libfoocanvas/foo-canvas-rect-ellipse.c,v
-retrieving revision 1.10
-diff -u -r1.10 foo-canvas-rect-ellipse.c
---- foo-canvas-rect-ellipse.c	14 Jul 2004 11:04:02 -0000	1.10
-+++ foo-canvas-rect-ellipse.c	25 Feb 2005 16:12:35 -0000
-@@ -1,3 +1,4 @@
-+/*  Last edited: Feb 25 11:09 2005 (rds) */
- /*
-  * Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation
-  * All rights reserved.
-@@ -281,7 +282,7 @@
- 	item = FOO_CANVAS_ITEM (re);
- 
- 	if (re->width_pixels)
--		hwidth = (re->width / item->canvas->pixels_per_unit) / 2.0;
-+		hwidth = (re->width / item->canvas->pixels_per_unit_x) / 2.0;
- 	else
- 		hwidth = re->width / 2.0;
- 
-@@ -300,7 +301,7 @@
- 	*py2 = cy2;
- 
- 	/* Some safety fudging */
--
-+	
- 	*px1 -= 2;
- 	*py1 -= 2;
- 	*px2 += 2;
-@@ -352,7 +353,7 @@
- 	if (re->width_pixels)
- 		width = (int) re->width;
- 	else
--		width = (int) (re->width * re->item.canvas->pixels_per_unit + 0.5);
-+		width = (int) (re->width * re->item.canvas->pixels_per_unit_x + 0.5);
- 
- 	gdk_gc_set_line_attributes (re->outline_gc, width,
- 				    GDK_LINE_SOLID, GDK_CAP_PROJECTING, GDK_JOIN_MITER);
-@@ -734,7 +735,7 @@
- 	re = FOO_CANVAS_RE (item);
- 
- 	if (re->width_pixels)
--		hwidth = (re->width / item->canvas->pixels_per_unit) / 2.0;
-+		hwidth = (re->width / item->canvas->pixels_per_unit_x) / 2.0;
- 	else
- 		hwidth = re->width / 2.0;
- 
-@@ -981,7 +982,7 @@
- 
- 	foo_canvas_w2c (item->canvas, x1, y1, &cx1, &cy1);
- 	foo_canvas_w2c (item->canvas, x2, y2, &cx2, &cy2);
--	
-+
- 	if (re->fill_set) {
- 		if ((re->fill_color & 0xff) != 255) {
- 			GdkRectangle *rectangles;
-@@ -1065,7 +1066,7 @@
- 
- 	if (re->outline_set) {
- 		if (re->width_pixels)
--			hwidth = (re->width / item->canvas->pixels_per_unit) / 2.0;
-+			hwidth = (re->width / item->canvas->pixels_per_unit_x) / 2.0;
- 		else
- 			hwidth = re->width / 2.0;
- 
-@@ -1191,7 +1192,7 @@
- 		if (re->width_pixels)
- 			width_pixels = (int) re->width;
- 		else
--			width_pixels = (int) floor (re->width * re->item.canvas->pixels_per_unit + 0.5);
-+			width_pixels = (int) floor (re->width * re->item.canvas->pixels_per_unit_x + 0.5);
- 
- 		width_lt = width_pixels / 2;
- 		width_rb = (width_pixels + 1) / 2;
-@@ -1344,7 +1345,7 @@
- 
- 	if (re->outline_set) {
- 		if (re->width_pixels)
--			width = re->width / item->canvas->pixels_per_unit;
-+			width = re->width / item->canvas->pixels_per_unit_x;
- 		else
- 			width = re->width;
- 	} else
-Index: foo-canvas-text.c
-===================================================================
-RCS file: /cvs/gnome/foocanvas/libfoocanvas/foo-canvas-text.c,v
-retrieving revision 1.7
-diff -u -r1.7 foo-canvas-text.c
---- foo-canvas-text.c	23 Apr 2004 05:36:54 -0000	1.7
-+++ foo-canvas-text.c	25 Feb 2005 16:12:35 -0000
-@@ -1,6 +1,7 @@
-+/*  Last edited: May 11 11:41 2004 (rnc) */
- /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
- /*
-- * $Id: foo-canvas-text.c,v 1.7 2004/04/23 05:36:54 jody Exp $
-+ * $Id: foo-canvas-text.c,v 1.1 2004/05/13 14:36:25 rnc Exp $
-  * Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation
-  * All rights reserved.
-  *
-@@ -615,8 +616,8 @@
- 	/* Get canvas pixel coordinates for clip rectangle position */
- 
- 	foo_canvas_w2c (item->canvas, wx, wy, &text->clip_cx, &text->clip_cy);
--	text->clip_cwidth = text->clip_width * item->canvas->pixels_per_unit;
--	text->clip_cheight = text->clip_height * item->canvas->pixels_per_unit;
-+	text->clip_cwidth = text->clip_width * item->canvas->pixels_per_unit_x;
-+	text->clip_cheight = text->clip_height * item->canvas->pixels_per_unit_y;
- 
- 	/* Anchor text */
- 
-@@ -976,7 +977,7 @@
- 	case PROP_WRAP_WIDTH: {
- 		double w = fabs (g_value_get_double (value));
- 		pango_layout_set_width (text->layout,
--			w * text->item.canvas->pixels_per_unit * PANGO_SCALE);
-+			w * text->item.canvas->pixels_per_unit_x * PANGO_SCALE);
- 
- 		break;
- 	}
-@@ -1227,11 +1228,11 @@
- 		break;
- 
- 	case PROP_FILL_COLOR:
--                g_value_take_string (value,
--				     g_strdup_printf ("#%02x%02x%02x",
--						      text->rgba >> 24,
--						      (text->rgba >> 16) & 0xff,
--						      (text->rgba >> 8) & 0xff));
-+                //g_value_take_string (value,
-+		//		     g_strdup_printf ("#%02x%02x%02x",
-+		//				      text->rgba >> 24,
-+		//				      (text->rgba >> 16) & 0xff,
-+		//				      (text->rgba >> 8) & 0xff));
- 		break;
- 
- 	case PROP_FILL_COLOR_GDK: {
-@@ -1252,11 +1253,11 @@
- 		break;
- 
- 	case PROP_TEXT_WIDTH:
--		g_value_set_double (value, text->max_width / text->item.canvas->pixels_per_unit);
-+		g_value_set_double (value, text->max_width / text->item.canvas->pixels_per_unit_x);
- 		break;
- 
- 	case PROP_TEXT_HEIGHT:
--		g_value_set_double (value, text->height / text->item.canvas->pixels_per_unit);
-+		g_value_set_double (value, text->height / text->item.canvas->pixels_per_unit_y);
- 		break;
- 
- 	default:
-@@ -1309,7 +1310,8 @@
- 	if (text->rise_set)
- 		add_attr (attr_list, pango_attr_rise_new (text->rise));
- 
--	zoom = text->item.canvas->pixels_per_unit;
-+	/* guessing that the x factor is OK here. RNGC */
-+	zoom = text->item.canvas->pixels_per_unit_x;
- 	if (fabs (zoom - 1.) > 1e-4) {
- 		PangoAttribute *attr = pango_attr_scale_new (zoom);
- 		attr->start_index = 0;
-@@ -1537,7 +1539,8 @@
- 
- 	pango_layout_iter_free(iter);
- 
--	return best / item->canvas->pixels_per_unit;
-+	/* guessing that the x factor is OK here. RNGC */
-+	return best / item->canvas->pixels_per_unit_x;
- }
- 
- static void
-@@ -1567,8 +1570,8 @@
- 		width = text->clip_width;
- 		height = text->clip_height;
- 	} else {
--		width = text->max_width / item->canvas->pixels_per_unit;
--		height = text->height / item->canvas->pixels_per_unit;
-+		width = text->max_width / item->canvas->pixels_per_unit_x;
-+		height = text->height / item->canvas->pixels_per_unit_y;
- 	}
- 
- 	switch (text->anchor) {
-Index: foo-canvas-widget.c
-===================================================================
-RCS file: /cvs/gnome/foocanvas/libfoocanvas/foo-canvas-widget.c,v
-retrieving revision 1.3
-diff -u -r1.3 foo-canvas-widget.c
---- foo-canvas-widget.c	20 May 2003 13:39:31 -0000	1.3
-+++ foo-canvas-widget.c	25 Feb 2005 16:12:35 -0000
-@@ -1,3 +1,4 @@
-+/*  Last edited: May 11 11:42 2004 (rnc) */
- /*
-  * Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation
-  * All rights reserved.
-@@ -452,8 +453,8 @@
- 			witem->cwidth = (int) (witem->width + 0.5);
- 			witem->cheight = (int) (witem->height + 0.5);
- 		} else {
--			witem->cwidth = (int) (witem->width * item->canvas->pixels_per_unit + 0.5);
--			witem->cheight = (int) (witem->height * item->canvas->pixels_per_unit + 0.5);
-+			witem->cwidth = (int) (witem->width * item->canvas->pixels_per_unit_x + 0.5);
-+			witem->cheight = (int) (witem->height * item->canvas->pixels_per_unit_y + 0.5);
- 		}
- 
- 		gtk_widget_set_usize (witem->widget, witem->cwidth, witem->cheight);
-@@ -494,8 +495,8 @@
- 
- 	foo_canvas_c2w (item->canvas, witem->cx, witem->cy, &x1, &y1);
- 
--	x2 = x1 + (witem->cwidth - 1) / item->canvas->pixels_per_unit;
--	y2 = y1 + (witem->cheight - 1) / item->canvas->pixels_per_unit;
-+	x2 = x1 + (witem->cwidth - 1) / item->canvas->pixels_per_unit_x;
-+	y2 = y1 + (witem->cheight - 1) / item->canvas->pixels_per_unit_y;
- 
- 	/* Is point inside widget bounds? */
- 
-Index: foo-canvas.c
-===================================================================
-RCS file: /cvs/gnome/foocanvas/libfoocanvas/foo-canvas.c,v
-retrieving revision 1.24
-diff -u -r1.24 foo-canvas.c
---- foo-canvas.c	20 Oct 2004 13:53:43 -0000	1.24
-+++ foo-canvas.c	25 Feb 2005 16:12:35 -0000
-@@ -1,3 +1,4 @@
-+/*  Last edited: Feb 14 15:23 2005 (rds) */
- /* -*- Mode: C; tab-width: 8; indent-tabs-mode: 8; c-basic-offset: 8 -*- */
- /*
-  * Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation
-@@ -290,7 +291,7 @@
- redraw_and_repick_if_mapped (FooCanvasItem *item)
- {
- 	if (item->object.flags & FOO_CANVAS_ITEM_MAPPED) {
--		foo_canvas_item_request_redraw (item);
-+	        foo_canvas_item_request_redraw (item);
- 		item->canvas->need_repick = TRUE;
- 	}
- }
-@@ -1535,10 +1536,10 @@
- 			has_point = TRUE;
- 		} else
- 			has_point = FALSE;
--
-+		/* guessing that the x factor is OK here. RNGC */
- 		if (has_point
- 		    && point_item
--		    && ((int) (dist * item->canvas->pixels_per_unit + 0.5)
-+		    && ((int) (dist * item->canvas->pixels_per_unit_x + 0.5)
- 			<= item->canvas->close_enough)) {
- 			best = dist;
- 			*actual_item = point_item;
-@@ -2074,7 +2075,8 @@
- 	canvas->scroll_x2 = canvas->layout.width;
- 	canvas->scroll_y2 = canvas->layout.height;
- 
--	canvas->pixels_per_unit = 1.0;
-+	canvas->pixels_per_unit_x = 1.0;
-+	canvas->pixels_per_unit_y = 1.0;
- 
- 	canvas->pick_event.type = GDK_LEAVE_NOTIFY;
- 	canvas->pick_event.crossing.x = 0;
-@@ -2294,8 +2296,8 @@
- 	canvas_width = GTK_WIDGET (canvas)->allocation.width;
- 	canvas_height = GTK_WIDGET (canvas)->allocation.height;
- 
--	scroll_width = floor ((canvas->scroll_x2 - canvas->scroll_x1) * canvas->pixels_per_unit + 0.5);
--	scroll_height = floor ((canvas->scroll_y2 - canvas->scroll_y1) * canvas->pixels_per_unit + 0.5);
-+	scroll_width = floor ((canvas->scroll_x2 - canvas->scroll_x1) * canvas->pixels_per_unit_x + 0.5);
-+	scroll_height = floor ((canvas->scroll_y2 - canvas->scroll_y1) * canvas->pixels_per_unit_y + 0.5);
- 
- 	right_limit = scroll_width - canvas_width;
- 	bottom_limit = scroll_height - canvas_height;
-@@ -2782,12 +2784,12 @@
- 
- 	canvas = FOO_CANVAS (widget);
- 	
--	if (emit_event (canvas, (GdkEvent *) event))
--		return TRUE;
--	if (event->type == GDK_KEY_RELEASE)
--		return GTK_WIDGET_CLASS (canvas_parent_class)->key_release_event (widget, event);
--	else
--		return GTK_WIDGET_CLASS (canvas_parent_class)->key_press_event (widget, event);
-+ 	if (emit_event (canvas, (GdkEvent *) event))
-+ 		return TRUE;
-+ 	if (event->type == GDK_KEY_RELEASE)
-+ 		return GTK_WIDGET_CLASS (canvas_parent_class)->key_release_event (widget, event);
-+ 	else
-+ 		return GTK_WIDGET_CLASS (canvas_parent_class)->key_press_event (widget, event);
- }
- 
- 
-@@ -2967,13 +2969,13 @@
- add_idle (FooCanvas *canvas)
- {
- 	if (!canvas->idle_id) {
--		/* We let the update idle handler have higher priority
--		 * than the redraw idle handler so the canvas state
--		 * will be updated during the expose event.  canvas in
--		 * expose_event.
-+ 		/* We let the update idle handler have higher priority
-+ 		 * than the redraw idle handler so the canvas state
-+ 		 * will be updated during the expose event.  canvas in
-+ 		 * expose_event.
- 		 */
- 		canvas->idle_id = g_idle_add_full (GDK_PRIORITY_REDRAW - 20,
--						   idle_handler, canvas, NULL);
-+ 						   idle_handler, canvas, NULL);
- 	}
- }
- 
-@@ -3093,15 +3095,35 @@
- 
- /**
-  * foo_canvas_set_pixels_per_unit:
-- * @canvas: A canvas.
-+ * @canvas: A canvas
-  * @n: The number of pixels that correspond to one canvas unit.
-  *
-  * Sets the zooming factor of a canvas by specifying the number of pixels that
-  * correspond to one canvas unit.
-+ * This is retained for backwards compatibility and just calls
-+ * foo_canvas_set_pixels_per_unit_xy, passing the number of pixels/unit twice.
-  **/
- void
- foo_canvas_set_pixels_per_unit (FooCanvas *canvas, double n)
- {
-+  foo_canvas_set_pixels_per_unit_xy(canvas, n, n);
-+  return;
-+}
-+
-+
-+/**
-+ * foo_canvas_set_pixels_per_unit_xy:
-+ * @canvas: A canvas.
-+ * @x: The number of pixels that correspond to one canvas unit on the x axis.
-+ * @y: The number of pixels that correspond to one canvas unit on the y axis.
-+ *
-+ * Sets the zooming factor of a canvas by specifying the number of pixels that
-+ * correspond to one canvas unit.
-+ * Having two zooming factors enables asymmetric zooming.
-+ **/
-+void
-+foo_canvas_set_pixels_per_unit_xy (FooCanvas *canvas, double x, double y)
-+{
- 	GtkWidget *widget;
- 	double cx, cy;
- 	int x1, y1;
-@@ -3111,7 +3133,8 @@
- 	gint attributes_mask;
- 
- 	g_return_if_fail (FOO_IS_CANVAS (canvas));
--	g_return_if_fail (n > FOO_CANVAS_EPSILON);
-+	/* guessing that the x factor is OK here.  RNCG */
-+	g_return_if_fail (x > FOO_CANVAS_EPSILON);
- 
- 	widget = GTK_WIDGET (canvas);
- 
-@@ -3119,14 +3142,15 @@
- 	center_y = widget->allocation.height / 2;
- 
- 	/* Find the coordinates of the screen center in units. */
--	cx = (canvas->layout.hadjustment->value + center_x) / canvas->pixels_per_unit + canvas->scroll_x1 + canvas->zoom_xofs;
--	cy = (canvas->layout.vadjustment->value + center_y) / canvas->pixels_per_unit + canvas->scroll_y1 + canvas->zoom_yofs;
-+	cx = (canvas->layout.hadjustment->value + center_x) / canvas->pixels_per_unit_x + canvas->scroll_x1 + canvas->zoom_xofs;
-+	cy = (canvas->layout.vadjustment->value + center_y) / canvas->pixels_per_unit_y + canvas->scroll_y1 + canvas->zoom_yofs;
- 
- 	/* Now calculate the new offset of the upper left corner. (round not truncate) */
--	x1 = ((cx - canvas->scroll_x1) * n) - center_x + .5;
--	y1 = ((cy - canvas->scroll_y1) * n) - center_y + .5;
-+	x1 = ((cx - canvas->scroll_x1) * x) - center_x + .5;
-+	y1 = ((cy - canvas->scroll_y1) * y) - center_y + .5;
- 
--	canvas->pixels_per_unit = n;
-+	canvas->pixels_per_unit_x = x;
-+	canvas->pixels_per_unit_y = y;
- 
- 	if (!(canvas->root->object.flags & FOO_CANVAS_ITEM_NEED_DEEP_UPDATE)) {
- 		canvas->root->object.flags |= FOO_CANVAS_ITEM_NEED_DEEP_UPDATE;
-@@ -3260,7 +3284,8 @@
- 	foo_canvas_w2c (canvas, x, y, &cx, &cy);
- 
- 	dist = foo_canvas_item_invoke_point (canvas->root, x, y, cx, cy, &item);
--	if ((int) (dist * canvas->pixels_per_unit + 0.5) <= canvas->close_enough)
-+	/* guessing the x factor is OK here.  RNGC */
-+	if ((int) (dist * canvas->pixels_per_unit_x + 0.5) <= canvas->close_enough)
- 		return item;
- 	else
- 		return NULL;
-@@ -3323,16 +3348,17 @@
- void
- foo_canvas_w2c (FooCanvas *canvas, double wx, double wy, int *cx, int *cy)
- {
--	double zoom;
-+	double zoom_x, zoom_y;
- 
- 	g_return_if_fail (FOO_IS_CANVAS (canvas));
- 	
--	zoom = canvas->pixels_per_unit;
-+	zoom_x = canvas->pixels_per_unit_x;
-+	zoom_y = canvas->pixels_per_unit_y;
- 	
- 	if (cx)
--		*cx = floor ((wx - canvas->scroll_x1)*zoom + canvas->zoom_xofs + 0.5);
-+		*cx = floor ((wx - canvas->scroll_x1)*zoom_x + canvas->zoom_xofs + 0.5);
- 	if (cy)
--		*cy = floor ((wy - canvas->scroll_y1)*zoom + canvas->zoom_yofs + 0.5);
-+		*cy = floor ((wy - canvas->scroll_y1)*zoom_y + canvas->zoom_yofs + 0.5);
- }
- 
- /**
-@@ -3372,16 +3398,17 @@
- void
- foo_canvas_w2c_d (FooCanvas *canvas, double wx, double wy, double *cx, double *cy)
- {
--	double zoom;
-+	double zoom_x, zoom_y;
- 
- 	g_return_if_fail (FOO_IS_CANVAS (canvas));
- 
--	zoom = canvas->pixels_per_unit;
-+	zoom_x = canvas->pixels_per_unit_x;
-+	zoom_y = canvas->pixels_per_unit_y;
- 	
- 	if (cx)
--		*cx = (wx - canvas->scroll_x1)*zoom + canvas->zoom_xofs;
-+		*cx = (wx - canvas->scroll_x1)*zoom_x + canvas->zoom_xofs;
- 	if (cy)
--		*cy = (wy - canvas->scroll_y1)*zoom + canvas->zoom_yofs;
-+		*cy = (wy - canvas->scroll_y1)*zoom_y + canvas->zoom_yofs;
- }
- 
- 
-@@ -3398,16 +3425,17 @@
- void
- foo_canvas_c2w (FooCanvas *canvas, int cx, int cy, double *wx, double *wy)
- {
--	double zoom;
-+	double zoom_x, zoom_y;
- 
- 	g_return_if_fail (FOO_IS_CANVAS (canvas));
- 
--	zoom = canvas->pixels_per_unit;
-+	zoom_x = canvas->pixels_per_unit_x;
-+	zoom_y = canvas->pixels_per_unit_y;
- 	
- 	if (wx)
--		*wx = (cx - canvas->zoom_xofs)/zoom + canvas->scroll_x1;
-+		*wx = (cx - canvas->zoom_xofs)/zoom_x + canvas->scroll_x1;
- 	if (wy)
--		*wy = (cy - canvas->zoom_yofs)/zoom + canvas->scroll_y1;
-+		*wy = (cy - canvas->zoom_yofs)/zoom_y + canvas->scroll_y1;
- }
- 
- 
-@@ -3433,11 +3461,11 @@
- 
- 	if (worldx)
- 		*worldx = canvas->scroll_x1 + ((winx - canvas->zoom_xofs)
--					       / canvas->pixels_per_unit);
-+					       / canvas->pixels_per_unit_x);
- 
- 	if (worldy)
- 		*worldy = canvas->scroll_y1 + ((winy - canvas->zoom_yofs)
--					       / canvas->pixels_per_unit);
-+					       / canvas->pixels_per_unit_y);
- }
- 
- 
-@@ -3460,10 +3488,10 @@
- 	g_return_if_fail (FOO_IS_CANVAS (canvas));
- 
- 	if (winx)
--		*winx = (canvas->pixels_per_unit)*(worldx - canvas->scroll_x1) + canvas->zoom_xofs;
-+		*winx = (canvas->pixels_per_unit_x)*(worldx - canvas->scroll_x1) + canvas->zoom_xofs;
- 
- 	if (winy)
--		*winy = (canvas->pixels_per_unit)*(worldy - canvas->scroll_y1) + canvas->zoom_yofs;
-+		*winy = (canvas->pixels_per_unit_y)*(worldy - canvas->scroll_y1) + canvas->zoom_yofs;
- }
- 
- 
-@@ -3989,3 +4017,11 @@
-                                        FOO_TYPE_CANVAS_ITEM,
-                                        foo_canvas_item_accessible_factory_get_type ());
- }
-+
-+void 
-+foo_canvas_zmap()
-+{
-+  // do nothing
-+}
-+
-+/*  Last edited: Feb 14 15:21 2005 (rds) */
-Index: foo-canvas.h
-===================================================================
-RCS file: /cvs/gnome/foocanvas/libfoocanvas/foo-canvas.h,v
-retrieving revision 1.4
-diff -u -r1.4 foo-canvas.h
---- foo-canvas.h	2 Mar 2004 14:32:55 -0000	1.4
-+++ foo-canvas.h	25 Feb 2005 16:12:35 -0000
-@@ -1,3 +1,4 @@
-+/*  Last edited: Feb 14 15:22 2005 (rds) */
- /* -*- Mode: C; tab-width: 8; indent-tabs-mode: 8; c-basic-offset: 8 -*- */
- /*
-  * Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation
-@@ -371,7 +372,8 @@
- 	double scroll_x2, scroll_y2;
- 
- 	/* Scaling factor to be used for display */
--	double pixels_per_unit;
-+	double pixels_per_unit_x;
-+	double pixels_per_unit_y;
- 
- 	/* Idle handler ID */
- 	guint idle_id;
-@@ -456,6 +458,10 @@
- /* Sets the number of pixels that correspond to one unit in world coordinates */
- void foo_canvas_set_pixels_per_unit (FooCanvas *canvas, double n);
- 
-+/* Sets the number of  pixels corresponding to one unit in world coordinates
-+ * separately on x and y axes, allowing asymmetric zooming. */
-+void foo_canvas_set_pixels_per_unit_xy (FooCanvas *canvas, double x, double y);
-+
- /* Wether the canvas centers the scroll region if it is smaller than the window  */
- void foo_canvas_set_center_scroll_region (FooCanvas *canvas, gboolean center_scroll_region);
- 
-@@ -525,6 +531,10 @@
-  */
- void foo_canvas_set_stipple_origin (FooCanvas *canvas, GdkGC *gc);
- 
-+void foo_canvas_zmap();
-+
- G_END_DECLS
- 
-+
- #endif
-+
diff --git a/foocanvas/support/libfoocanvas-20050225.tar.gz b/foocanvas/support/libfoocanvas-20050225.tar.gz
deleted file mode 100755
index c21a6f9a3ed37f8cace0f68f8734bf9b51a973aa..0000000000000000000000000000000000000000
Binary files a/foocanvas/support/libfoocanvas-20050225.tar.gz and /dev/null differ
diff --git a/foocanvas/support/libfoocanvas-20060104.patch b/foocanvas/support/libfoocanvas-20060104.patch
deleted file mode 100755
index bfd6484f3e575fb6c4c2a379968db626dc388632..0000000000000000000000000000000000000000
--- a/foocanvas/support/libfoocanvas-20060104.patch
+++ /dev/null
@@ -1,802 +0,0 @@
-Index: foo-canvas-line.c
-===================================================================
-RCS file: /cvs/gnome/foocanvas/libfoocanvas/foo-canvas-line.c,v
-retrieving revision 1.7
-diff -u -u -r1.7 foo-canvas-line.c
---- foo-canvas-line.c	4 Apr 2005 15:13:29 -0000	1.7
-+++ foo-canvas-line.c	4 Jan 2006 12:22:56 -0000
-@@ -1,3 +1,4 @@
-+/*  Last edited: May 11 10:57 2004 (rnc) */
- /*
-  * Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation
-  * All rights reserved.
-@@ -338,7 +339,7 @@
- 	/* Add possible over-estimate for wide lines */
- 
- 	if (line->width_pixels)
--		width = line->width / line->item.canvas->pixels_per_unit;
-+		width = line->width / line->item.canvas->pixels_per_unit_x;
- 	else
- 		width = line->width;
- 
-@@ -466,7 +467,7 @@
- 		return;
- 
- 	if (line->width_pixels)
--		width = line->width / line->item.canvas->pixels_per_unit;
-+		width = line->width / line->item.canvas->pixels_per_unit_x;
- 	else
- 		width = line->width;
- 
-@@ -477,9 +478,9 @@
- 	shape_c = line->shape_c + width / 2.0;
- 
- 	if (line->width_pixels) {
--		shape_a /= line->item.canvas->pixels_per_unit;
--		shape_b /= line->item.canvas->pixels_per_unit;
--		shape_c /= line->item.canvas->pixels_per_unit;
-+		shape_a /= line->item.canvas->pixels_per_unit_x;
-+		shape_b /= line->item.canvas->pixels_per_unit_x;
-+		shape_c /= line->item.canvas->pixels_per_unit_x;
- 	}
- 
- 	shape_a += 0.001;
-@@ -600,7 +601,7 @@
- 	if (line->width_pixels)
- 		width = (int) line->width;
- 	else
--		width = (int) (line->width * line->item.canvas->pixels_per_unit + 0.5);
-+		width = (int) (line->width * line->item.canvas->pixels_per_unit_x + 0.5);
- 
- 	gdk_gc_set_line_attributes (line->gc,
- 				    width,
-@@ -867,11 +868,11 @@
- 		break;
- 
- 	case PROP_FILL_COLOR:
--		g_value_take_string (value,
--				     g_strdup_printf ("#%02x%02x%02x",
--						      line->fill_rgba >> 24,
--						      (line->fill_rgba >> 16) & 0xff,
--						      (line->fill_rgba >> 8) & 0xff));
-+		//g_value_take_string (value,
-+		//		     g_strdup_printf ("#%02x%02x%02x",
-+		//				      line->fill_rgba >> 24,
-+		//				      (line->fill_rgba >> 16) & 0xff,
-+		//				      (line->fill_rgba >> 8) & 0xff));
- 		break;
- 
- 	case PROP_FILL_COLOR_GDK: {
-@@ -1126,12 +1127,12 @@
- 	 */
- 
- 	if (line->width_pixels)
--		width = line->width / item->canvas->pixels_per_unit;
-+		width = line->width / item->canvas->pixels_per_unit_x;
- 	else
- 		width = line->width;
- 
--	if (width < (1.0 / item->canvas->pixels_per_unit))
--		width = 1.0 / item->canvas->pixels_per_unit;
-+	if (width < (1.0 / item->canvas->pixels_per_unit_x))
-+		width = 1.0 / item->canvas->pixels_per_unit_x;
- 
- 	changed_miter_to_bevel = 0;
- 
-Index: foo-canvas-pixbuf.c
-===================================================================
-RCS file: /cvs/gnome/foocanvas/libfoocanvas/foo-canvas-pixbuf.c,v
-retrieving revision 1.9
-diff -u -u -r1.9 foo-canvas-pixbuf.c
---- foo-canvas-pixbuf.c	4 Apr 2005 15:13:29 -0000	1.9
-+++ foo-canvas-pixbuf.c	4 Jan 2006 12:22:56 -0000
-@@ -1,3 +1,4 @@
-+/*  Last edited: May 11 11:33 2004 (rnc) */
- /* GNOME libraries - GdkPixbuf item for the GNOME canvas
-  *
-  * Copyright (C) 1999 The Free Software Foundation
-@@ -564,13 +565,13 @@
- 	}
- 
- 	if (priv->x_in_pixels) {
--		x = i2w_dx + priv->x / item->canvas->pixels_per_unit;
-+		x = i2w_dx + priv->x / item->canvas->pixels_per_unit_x;
- 	} else {
- 		x = i2w_dx + priv->x;
- 	}
- 
- 	if (priv->y_in_pixels) {
--		y = i2w_dy + priv->y / item->canvas->pixels_per_unit;
-+		y = i2w_dy + priv->y / item->canvas->pixels_per_unit_y;
- 	} else {
- 		y = i2w_dy + priv->y;
- 	}
-@@ -582,7 +583,7 @@
- 	}
- 
- 	if (priv->width_in_pixels)
--		width /= item->canvas->pixels_per_unit;
-+		width /= item->canvas->pixels_per_unit_x;
- 
- 	if (priv->height_set) {
- 		height = priv->height;
-@@ -591,7 +592,7 @@
- 	}
- 
- 	if (priv->height_in_pixels)
--		height /= item->canvas->pixels_per_unit;
-+		height /= item->canvas->pixels_per_unit_y;
- 
- 
- 	switch (priv->anchor) {
-@@ -781,8 +782,8 @@
- 	pixbuf = priv->pixbuf;
- 
- 	*actual_item = item;
--
--	no_hit = item->canvas->pixels_per_unit * 2 + 10;
-+	/* guessing that the x factor is OK here. RNGC */
-+	no_hit = item->canvas->pixels_per_unit_x * 2 + 10;
- 
- 	if (!priv->pixbuf)
- 		return no_hit;
-@@ -823,13 +824,13 @@
- 	priv = gcp->priv;
- 
- 	if (priv->x_in_pixels) {
--		priv->x += dx * item->canvas->pixels_per_unit;
-+		priv->x += dx * item->canvas->pixels_per_unit_x;
- 	} else {
- 		priv->x += dx;
- 	}
- 
- 	if (priv->y_in_pixels) {
--		priv->y += dy * item->canvas->pixels_per_unit;
-+		priv->y += dy * item->canvas->pixels_per_unit_y;
- 	} else {
- 		priv->y += dy;
- 	}
-Index: foo-canvas-polygon.c
-===================================================================
-RCS file: /cvs/gnome/foocanvas/libfoocanvas/foo-canvas-polygon.c,v
-retrieving revision 1.7
-diff -u -u -r1.7 foo-canvas-polygon.c
---- foo-canvas-polygon.c	4 Apr 2005 15:13:29 -0000	1.7
-+++ foo-canvas-polygon.c	4 Jan 2006 12:22:56 -0000
-@@ -1,3 +1,4 @@
-+/*  Last edited: Jan  4 10:58 2006 (rds) */
- /*
-  * Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation
-  * All rights reserved.
-@@ -261,9 +262,9 @@
- 	double width;
- 	int i;
- 
--	if (poly->num_points == 0)
--		return FALSE;
--
-+ 	if (poly->num_points == 0)
-+ 		return FALSE;
-+        
- 	/* Compute bounds of vertices */
- 
- 	x1 = x2 = poly->coords[0];
-@@ -276,7 +277,7 @@
- 	/* Add outline width */
- 
- 	if (poly->width_pixels)
--		width = poly->width / poly->item.canvas->pixels_per_unit;
-+		width = poly->width / poly->item.canvas->pixels_per_unit_x;
- 	else
- 		width = poly->width;
- 
-@@ -293,7 +294,7 @@
- 	*by1 = y1;
- 	*bx2 = x2;
- 	*by2 = y2;
--	return TRUE;
-+        return TRUE;
- }
- 
- /* Computes the bounding box of the polygon, in canvas coordinates.  Assumes that the number of points in the polygon is
-@@ -309,8 +310,8 @@
- 
- 	item = FOO_CANVAS_ITEM (poly);
- 
--	if (!get_bounds (poly, &bbox_x0, &bbox_y0, &bbox_x1, &bbox_y1))
--		return FALSE;
-+	if(!get_bounds (poly, &bbox_x0, &bbox_y0, &bbox_x1, &bbox_y1))
-+               return FALSE;
- 
- 	bbox_x0 += i2w_dx; 
- 	bbox_y0 += i2w_dy; 
-@@ -325,7 +326,7 @@
- 	*by1 = bbox_y0 - 1;
- 	*bx2 = bbox_x1 + 1;
- 	*by2 = bbox_y1 + 1;
--	return TRUE;
-+        return TRUE;
- }
- 
- /* Sets the points of the polygon item to the specified ones.  If needed, it will add a point to
-@@ -400,7 +401,7 @@
- 	if (poly->width_pixels)
- 		width = (int) poly->width;
- 	else
--		width = (int) (poly->width * poly->item.canvas->pixels_per_unit + 0.5);
-+		width = (int) (poly->width * poly->item.canvas->pixels_per_unit_x + 0.5);
- 
- 	gdk_gc_set_line_attributes (poly->outline_gc, width,
- 				    GDK_LINE_SOLID, GDK_CAP_ROUND, GDK_JOIN_ROUND);
-@@ -595,15 +596,12 @@
- static void
- get_color_value (FooCanvasPolygon *poly, gulong pixel, GValue *value)
- {
--	GdkColor *color;
-+	GdkColor  color;
- 	GdkColormap *colormap;
- 
--	color = g_new (GdkColor, 1);
--	color->pixel = pixel;
--
--	colormap = gtk_widget_get_colormap (GTK_WIDGET (poly));
--	gdk_rgb_find_color (colormap, color);
--	g_value_set_boxed (value, color);
-+	colormap = gtk_widget_get_colormap (GTK_WIDGET (FOO_CANVAS_ITEM(poly)->canvas));
-+	gdk_colormap_query_color(colormap, pixel, &color);
-+	g_value_set_boxed (value, &color);
- }
- 
- static void
-@@ -679,8 +677,8 @@
- 	set_stipple (poly->fill_gc, &poly->fill_stipple, poly->fill_stipple, TRUE);
- 	set_stipple (poly->outline_gc, &poly->outline_stipple, poly->outline_stipple, TRUE);
- 	
--	if (get_bounds_canvas (poly, &x1, &y1, &x2, &y2, i2w_dx, i2w_dy))
--		foo_canvas_update_bbox (item, x1, y1, x2, y2);
-+	if(get_bounds_canvas (poly, &x1, &y1, &x2, &y2, i2w_dx, i2w_dy))
-+               foo_canvas_update_bbox (item, x1, y1, x2, y2);
- }
- 
- static void
-@@ -801,7 +799,7 @@
- 
- 	if (poly->outline_set) {
- 		if (poly->width_pixels)
--			width = poly->width / item->canvas->pixels_per_unit;
-+			width = poly->width / item->canvas->pixels_per_unit_x;
- 		else
- 			width = poly->width;
- 
-Index: foo-canvas-rect-ellipse.c
-===================================================================
-RCS file: /cvs/gnome/foocanvas/libfoocanvas/foo-canvas-rect-ellipse.c,v
-retrieving revision 1.12
-diff -u -u -r1.12 foo-canvas-rect-ellipse.c
---- foo-canvas-rect-ellipse.c	4 Apr 2005 15:13:29 -0000	1.12
-+++ foo-canvas-rect-ellipse.c	4 Jan 2006 12:22:56 -0000
-@@ -1,3 +1,4 @@
-+/*  Last edited: Feb 25 11:09 2005 (rds) */
- /*
-  * Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation
-  * All rights reserved.
-@@ -281,7 +282,7 @@
- 	item = FOO_CANVAS_ITEM (re);
- 
- 	if (re->width_pixels)
--		hwidth = (re->width / item->canvas->pixels_per_unit) / 2.0;
-+		hwidth = (re->width / item->canvas->pixels_per_unit_x) / 2.0;
- 	else
- 		hwidth = re->width / 2.0;
- 
-@@ -300,7 +301,7 @@
- 	*py2 = cy2;
- 
- 	/* Some safety fudging */
--
-+	
- 	*px1 -= 2;
- 	*py1 -= 2;
- 	*px2 += 2;
-@@ -352,7 +353,7 @@
- 	if (re->width_pixels)
- 		width = (int) re->width;
- 	else
--		width = (int) (re->width * re->item.canvas->pixels_per_unit + 0.5);
-+		width = (int) (re->width * re->item.canvas->pixels_per_unit_x + 0.5);
- 
- 	gdk_gc_set_line_attributes (re->outline_gc, width,
- 				    GDK_LINE_SOLID, GDK_CAP_PROJECTING, GDK_JOIN_MITER);
-@@ -734,7 +735,7 @@
- 	re = FOO_CANVAS_RE (item);
- 
- 	if (re->width_pixels)
--		hwidth = (re->width / item->canvas->pixels_per_unit) / 2.0;
-+		hwidth = (re->width / item->canvas->pixels_per_unit_x) / 2.0;
- 	else
- 		hwidth = re->width / 2.0;
- 
-@@ -981,7 +982,7 @@
- 
- 	foo_canvas_w2c (item->canvas, x1, y1, &cx1, &cy1);
- 	foo_canvas_w2c (item->canvas, x2, y2, &cx2, &cy2);
--	
-+
- 	if (re->fill_set) {
- 		if ((re->fill_color & 0xff) != 255) {
- 			GdkRectangle *rectangles;
-@@ -1065,7 +1066,7 @@
- 
- 	if (re->outline_set) {
- 		if (re->width_pixels)
--			hwidth = (re->width / item->canvas->pixels_per_unit) / 2.0;
-+			hwidth = (re->width / item->canvas->pixels_per_unit_x) / 2.0;
- 		else
- 			hwidth = re->width / 2.0;
- 
-@@ -1191,7 +1192,7 @@
- 		if (re->width_pixels)
- 			width_pixels = (int) re->width;
- 		else
--			width_pixels = (int) floor (re->width * re->item.canvas->pixels_per_unit + 0.5);
-+			width_pixels = (int) floor (re->width * re->item.canvas->pixels_per_unit_x + 0.5);
- 
- 		width_lt = width_pixels / 2;
- 		width_rb = (width_pixels + 1) / 2;
-@@ -1344,7 +1345,7 @@
- 
- 	if (re->outline_set) {
- 		if (re->width_pixels)
--			width = re->width / item->canvas->pixels_per_unit;
-+			width = re->width / item->canvas->pixels_per_unit_x;
- 		else
- 			width = re->width;
- 	} else
-Index: foo-canvas-text.c
-===================================================================
-RCS file: /cvs/gnome/foocanvas/libfoocanvas/foo-canvas-text.c,v
-retrieving revision 1.8
-diff -u -u -r1.8 foo-canvas-text.c
---- foo-canvas-text.c	4 Apr 2005 15:13:29 -0000	1.8
-+++ foo-canvas-text.c	4 Jan 2006 12:22:56 -0000
-@@ -1,3 +1,4 @@
-+/*  Last edited: Jan  4 12:21 2006 (rds) */
- /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
- /*
-  * $Id: foo-canvas-text.c,v 1.8 2005/04/04 15:13:29 mortenw Exp $
-@@ -615,8 +616,8 @@
- 	/* Get canvas pixel coordinates for clip rectangle position */
- 
- 	foo_canvas_w2c (item->canvas, wx, wy, &text->clip_cx, &text->clip_cy);
--	text->clip_cwidth = text->clip_width * item->canvas->pixels_per_unit;
--	text->clip_cheight = text->clip_height * item->canvas->pixels_per_unit;
-+	text->clip_cwidth = text->clip_width * item->canvas->pixels_per_unit_x;
-+	text->clip_cheight = text->clip_height * item->canvas->pixels_per_unit_y;
- 
- 	/* Anchor text */
- 
-@@ -976,7 +977,7 @@
- 	case PROP_WRAP_WIDTH: {
- 		double w = fabs (g_value_get_double (value));
- 		pango_layout_set_width (text->layout,
--			w * text->item.canvas->pixels_per_unit * PANGO_SCALE);
-+			w * text->item.canvas->pixels_per_unit_x * PANGO_SCALE);
- 
- 		break;
- 	}
-@@ -1227,11 +1228,11 @@
- 		break;
- 
- 	case PROP_FILL_COLOR:
--                g_value_take_string (value,
--				     g_strdup_printf ("#%02x%02x%02x",
--						      text->rgba >> 24,
--						      (text->rgba >> 16) & 0xff,
--						      (text->rgba >> 8) & 0xff));
-+                //g_value_take_string (value,
-+		//		     g_strdup_printf ("#%02x%02x%02x",
-+		//				      text->rgba >> 24,
-+		//				      (text->rgba >> 16) & 0xff,
-+		//				      (text->rgba >> 8) & 0xff));
- 		break;
- 
- 	case PROP_FILL_COLOR_GDK: {
-@@ -1252,11 +1253,11 @@
- 		break;
- 
- 	case PROP_TEXT_WIDTH:
--		g_value_set_double (value, text->max_width / text->item.canvas->pixels_per_unit);
-+		g_value_set_double (value, text->max_width / text->item.canvas->pixels_per_unit_x);
- 		break;
- 
- 	case PROP_TEXT_HEIGHT:
--		g_value_set_double (value, text->height / text->item.canvas->pixels_per_unit);
-+		g_value_set_double (value, text->height / text->item.canvas->pixels_per_unit_y);
- 		break;
- 
- 	default:
-@@ -1309,7 +1310,8 @@
- 	if (text->rise_set)
- 		add_attr (attr_list, pango_attr_rise_new (text->rise));
- 
--	zoom = text->item.canvas->pixels_per_unit;
-+	/* guessing that the x factor is OK here. RNGC */
-+	zoom = text->item.canvas->pixels_per_unit_x;
- 	if (fabs (zoom - 1.) > 1e-4) {
- 		PangoAttribute *attr = pango_attr_scale_new (zoom);
- 		attr->start_index = 0;
-@@ -1537,7 +1539,8 @@
- 
- 	pango_layout_iter_free(iter);
- 
--	return best / item->canvas->pixels_per_unit;
-+	/* guessing that the x factor is OK here. RNGC */
-+	return best / item->canvas->pixels_per_unit_x;
- }
- 
- static void
-@@ -1567,8 +1570,8 @@
- 		width = text->clip_width;
- 		height = text->clip_height;
- 	} else {
--		width = text->max_width / item->canvas->pixels_per_unit;
--		height = text->height / item->canvas->pixels_per_unit;
-+		width = text->max_width / item->canvas->pixels_per_unit_x;
-+		height = text->height / item->canvas->pixels_per_unit_y;
- 	}
- 
- 	switch (text->anchor) {
-Index: foo-canvas-widget.c
-===================================================================
-RCS file: /cvs/gnome/foocanvas/libfoocanvas/foo-canvas-widget.c,v
-retrieving revision 1.5
-diff -u -u -r1.5 foo-canvas-widget.c
---- foo-canvas-widget.c	13 May 2005 03:34:36 -0000	1.5
-+++ foo-canvas-widget.c	4 Jan 2006 12:22:56 -0000
-@@ -1,3 +1,4 @@
-+/*  Last edited: May 11 11:42 2004 (rnc) */
- /*
-  * Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation
-  * All rights reserved.
-@@ -456,8 +457,8 @@
- 			witem->cwidth = (int) (witem->width + 0.5);
- 			witem->cheight = (int) (witem->height + 0.5);
- 		} else {
--			witem->cwidth = (int) (witem->width * item->canvas->pixels_per_unit + 0.5);
--			witem->cheight = (int) (witem->height * item->canvas->pixels_per_unit + 0.5);
-+			witem->cwidth = (int) (witem->width * item->canvas->pixels_per_unit_x + 0.5);
-+			witem->cheight = (int) (witem->height * item->canvas->pixels_per_unit_y + 0.5);
- 		}
- 
- 		gtk_widget_set_usize (witem->widget, witem->cwidth, witem->cheight);
-@@ -516,8 +517,8 @@
- 
- 	foo_canvas_c2w (item->canvas, witem->cx, witem->cy, &x1, &y1);
- 
--	x2 = x1 + (witem->cwidth - 1) / item->canvas->pixels_per_unit;
--	y2 = y1 + (witem->cheight - 1) / item->canvas->pixels_per_unit;
-+	x2 = x1 + (witem->cwidth - 1) / item->canvas->pixels_per_unit_x;
-+	y2 = y1 + (witem->cheight - 1) / item->canvas->pixels_per_unit_y;
- 
- 	/* Is point inside widget bounds? */
- 
-Index: foo-canvas.c
-===================================================================
-RCS file: /cvs/gnome/foocanvas/libfoocanvas/foo-canvas.c,v
-retrieving revision 1.25
-diff -u -u -r1.25 foo-canvas.c
---- foo-canvas.c	4 Apr 2005 15:13:29 -0000	1.25
-+++ foo-canvas.c	4 Jan 2006 12:22:56 -0000
-@@ -1,3 +1,4 @@
-+/*  Last edited: Jun 15 08:19 2005 (edgrif) */
- /* -*- Mode: C; tab-width: 8; indent-tabs-mode: 8; c-basic-offset: 8 -*- */
- /*
-  * Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation
-@@ -290,7 +291,7 @@
- redraw_and_repick_if_mapped (FooCanvasItem *item)
- {
- 	if (item->object.flags & FOO_CANVAS_ITEM_MAPPED) {
--		foo_canvas_item_request_redraw (item);
-+	        foo_canvas_item_request_redraw (item);
- 		item->canvas->need_repick = TRUE;
- 	}
- }
-@@ -1535,10 +1536,10 @@
- 			has_point = TRUE;
- 		} else
- 			has_point = FALSE;
--
-+		/* guessing that the x factor is OK here. RNGC */
- 		if (has_point
- 		    && point_item
--		    && ((int) (dist * item->canvas->pixels_per_unit + 0.5)
-+		    && ((int) (dist * item->canvas->pixels_per_unit_x + 0.5)
- 			<= item->canvas->close_enough)) {
- 			best = dist;
- 			*actual_item = point_item;
-@@ -2074,7 +2075,8 @@
- 	canvas->scroll_x2 = canvas->layout.width;
- 	canvas->scroll_y2 = canvas->layout.height;
- 
--	canvas->pixels_per_unit = 1.0;
-+	canvas->pixels_per_unit_x = 1.0;
-+	canvas->pixels_per_unit_y = 1.0;
- 
- 	canvas->pick_event.type = GDK_LEAVE_NOTIFY;
- 	canvas->pick_event.crossing.x = 0;
-@@ -2294,8 +2296,8 @@
- 	canvas_width = GTK_WIDGET (canvas)->allocation.width;
- 	canvas_height = GTK_WIDGET (canvas)->allocation.height;
- 
--	scroll_width = floor ((canvas->scroll_x2 - canvas->scroll_x1) * canvas->pixels_per_unit + 0.5);
--	scroll_height = floor ((canvas->scroll_y2 - canvas->scroll_y1) * canvas->pixels_per_unit + 0.5);
-+	scroll_width = floor ((canvas->scroll_x2 - canvas->scroll_x1) * canvas->pixels_per_unit_x + 0.5);
-+	scroll_height = floor ((canvas->scroll_y2 - canvas->scroll_y1) * canvas->pixels_per_unit_y + 0.5);
- 
- 	right_limit = scroll_width - canvas_width;
- 	bottom_limit = scroll_height - canvas_height;
-@@ -2782,12 +2784,12 @@
- 
- 	canvas = FOO_CANVAS (widget);
- 	
--	if (emit_event (canvas, (GdkEvent *) event))
--		return TRUE;
--	if (event->type == GDK_KEY_RELEASE)
--		return GTK_WIDGET_CLASS (canvas_parent_class)->key_release_event (widget, event);
--	else
--		return GTK_WIDGET_CLASS (canvas_parent_class)->key_press_event (widget, event);
-+ 	if (emit_event (canvas, (GdkEvent *) event))
-+ 		return TRUE;
-+ 	if (event->type == GDK_KEY_RELEASE)
-+ 		return GTK_WIDGET_CLASS (canvas_parent_class)->key_release_event (widget, event);
-+ 	else
-+ 		return GTK_WIDGET_CLASS (canvas_parent_class)->key_press_event (widget, event);
- }
- 
- 
-@@ -2967,13 +2969,13 @@
- add_idle (FooCanvas *canvas)
- {
- 	if (!canvas->idle_id) {
--		/* We let the update idle handler have higher priority
--		 * than the redraw idle handler so the canvas state
--		 * will be updated during the expose event.  canvas in
--		 * expose_event.
-+ 		/* We let the update idle handler have higher priority
-+ 		 * than the redraw idle handler so the canvas state
-+ 		 * will be updated during the expose event.  canvas in
-+ 		 * expose_event.
- 		 */
- 		canvas->idle_id = g_idle_add_full (GDK_PRIORITY_REDRAW - 20,
--						   idle_handler, canvas, NULL);
-+ 						   idle_handler, canvas, NULL);
- 	}
- }
- 
-@@ -3093,15 +3095,35 @@
- 
- /**
-  * foo_canvas_set_pixels_per_unit:
-- * @canvas: A canvas.
-+ * @canvas: A canvas
-  * @n: The number of pixels that correspond to one canvas unit.
-  *
-  * Sets the zooming factor of a canvas by specifying the number of pixels that
-  * correspond to one canvas unit.
-+ * This is retained for backwards compatibility and just calls
-+ * foo_canvas_set_pixels_per_unit_xy, passing the number of pixels/unit twice.
-  **/
- void
- foo_canvas_set_pixels_per_unit (FooCanvas *canvas, double n)
- {
-+  foo_canvas_set_pixels_per_unit_xy(canvas, n, n);
-+  return;
-+}
-+
-+
-+/**
-+ * foo_canvas_set_pixels_per_unit_xy:
-+ * @canvas: A canvas.
-+ * @x: The number of pixels that correspond to one canvas unit on the x axis.
-+ * @y: The number of pixels that correspond to one canvas unit on the y axis.
-+ *
-+ * Sets the zooming factor of a canvas by specifying the number of pixels that
-+ * correspond to one canvas unit.
-+ * Having two zooming factors enables asymmetric zooming.
-+ **/
-+void
-+foo_canvas_set_pixels_per_unit_xy (FooCanvas *canvas, double x, double y)
-+{
- 	GtkWidget *widget;
- 	double cx, cy;
- 	int x1, y1;
-@@ -3111,7 +3133,8 @@
- 	gint attributes_mask;
- 
- 	g_return_if_fail (FOO_IS_CANVAS (canvas));
--	g_return_if_fail (n > FOO_CANVAS_EPSILON);
-+	/* guessing that the x factor is OK here.  RNCG */
-+	g_return_if_fail (x > FOO_CANVAS_EPSILON);
- 
- 	widget = GTK_WIDGET (canvas);
- 
-@@ -3119,14 +3142,15 @@
- 	center_y = widget->allocation.height / 2;
- 
- 	/* Find the coordinates of the screen center in units. */
--	cx = (canvas->layout.hadjustment->value + center_x) / canvas->pixels_per_unit + canvas->scroll_x1 + canvas->zoom_xofs;
--	cy = (canvas->layout.vadjustment->value + center_y) / canvas->pixels_per_unit + canvas->scroll_y1 + canvas->zoom_yofs;
-+	cx = (canvas->layout.hadjustment->value + center_x) / canvas->pixels_per_unit_x + canvas->scroll_x1 + canvas->zoom_xofs;
-+	cy = (canvas->layout.vadjustment->value + center_y) / canvas->pixels_per_unit_y + canvas->scroll_y1 + canvas->zoom_yofs;
- 
- 	/* Now calculate the new offset of the upper left corner. (round not truncate) */
--	x1 = ((cx - canvas->scroll_x1) * n) - center_x + .5;
--	y1 = ((cy - canvas->scroll_y1) * n) - center_y + .5;
-+	x1 = ((cx - canvas->scroll_x1) * x) - center_x + .5;
-+	y1 = ((cy - canvas->scroll_y1) * y) - center_y + .5;
- 
--	canvas->pixels_per_unit = n;
-+	canvas->pixels_per_unit_x = x;
-+	canvas->pixels_per_unit_y = y;
- 
- 	if (!(canvas->root->object.flags & FOO_CANVAS_ITEM_NEED_DEEP_UPDATE)) {
- 		canvas->root->object.flags |= FOO_CANVAS_ITEM_NEED_DEEP_UPDATE;
-@@ -3260,7 +3284,8 @@
- 	foo_canvas_w2c (canvas, x, y, &cx, &cy);
- 
- 	dist = foo_canvas_item_invoke_point (canvas->root, x, y, cx, cy, &item);
--	if ((int) (dist * canvas->pixels_per_unit + 0.5) <= canvas->close_enough)
-+	/* guessing the x factor is OK here.  RNGC */
-+	if ((int) (dist * canvas->pixels_per_unit_x + 0.5) <= canvas->close_enough)
- 		return item;
- 	else
- 		return NULL;
-@@ -3323,16 +3348,17 @@
- void
- foo_canvas_w2c (FooCanvas *canvas, double wx, double wy, int *cx, int *cy)
- {
--	double zoom;
-+	double zoom_x, zoom_y;
- 
- 	g_return_if_fail (FOO_IS_CANVAS (canvas));
- 	
--	zoom = canvas->pixels_per_unit;
-+	zoom_x = canvas->pixels_per_unit_x;
-+	zoom_y = canvas->pixels_per_unit_y;
- 	
- 	if (cx)
--		*cx = floor ((wx - canvas->scroll_x1)*zoom + canvas->zoom_xofs + 0.5);
-+		*cx = floor ((wx - canvas->scroll_x1)*zoom_x + canvas->zoom_xofs + 0.5);
- 	if (cy)
--		*cy = floor ((wy - canvas->scroll_y1)*zoom + canvas->zoom_yofs + 0.5);
-+		*cy = floor ((wy - canvas->scroll_y1)*zoom_y + canvas->zoom_yofs + 0.5);
- }
- 
- /**
-@@ -3372,16 +3398,17 @@
- void
- foo_canvas_w2c_d (FooCanvas *canvas, double wx, double wy, double *cx, double *cy)
- {
--	double zoom;
-+	double zoom_x, zoom_y;
- 
- 	g_return_if_fail (FOO_IS_CANVAS (canvas));
- 
--	zoom = canvas->pixels_per_unit;
-+	zoom_x = canvas->pixels_per_unit_x;
-+	zoom_y = canvas->pixels_per_unit_y;
- 	
- 	if (cx)
--		*cx = (wx - canvas->scroll_x1)*zoom + canvas->zoom_xofs;
-+		*cx = (wx - canvas->scroll_x1)*zoom_x + canvas->zoom_xofs;
- 	if (cy)
--		*cy = (wy - canvas->scroll_y1)*zoom + canvas->zoom_yofs;
-+		*cy = (wy - canvas->scroll_y1)*zoom_y + canvas->zoom_yofs;
- }
- 
- 
-@@ -3398,16 +3425,17 @@
- void
- foo_canvas_c2w (FooCanvas *canvas, int cx, int cy, double *wx, double *wy)
- {
--	double zoom;
-+	double zoom_x, zoom_y;
- 
- 	g_return_if_fail (FOO_IS_CANVAS (canvas));
- 
--	zoom = canvas->pixels_per_unit;
-+	zoom_x = canvas->pixels_per_unit_x;
-+	zoom_y = canvas->pixels_per_unit_y;
- 	
- 	if (wx)
--		*wx = (cx - canvas->zoom_xofs)/zoom + canvas->scroll_x1;
-+		*wx = (cx - canvas->zoom_xofs)/zoom_x + canvas->scroll_x1;
- 	if (wy)
--		*wy = (cy - canvas->zoom_yofs)/zoom + canvas->scroll_y1;
-+		*wy = (cy - canvas->zoom_yofs)/zoom_y + canvas->scroll_y1;
- }
- 
- 
-@@ -3433,11 +3461,11 @@
- 
- 	if (worldx)
- 		*worldx = canvas->scroll_x1 + ((winx - canvas->zoom_xofs)
--					       / canvas->pixels_per_unit);
-+					       / canvas->pixels_per_unit_x);
- 
- 	if (worldy)
- 		*worldy = canvas->scroll_y1 + ((winy - canvas->zoom_yofs)
--					       / canvas->pixels_per_unit);
-+					       / canvas->pixels_per_unit_y);
- }
- 
- 
-@@ -3460,10 +3488,10 @@
- 	g_return_if_fail (FOO_IS_CANVAS (canvas));
- 
- 	if (winx)
--		*winx = (canvas->pixels_per_unit)*(worldx - canvas->scroll_x1) + canvas->zoom_xofs;
-+		*winx = (canvas->pixels_per_unit_x)*(worldx - canvas->scroll_x1) + canvas->zoom_xofs;
- 
- 	if (winy)
--		*winy = (canvas->pixels_per_unit)*(worldy - canvas->scroll_y1) + canvas->zoom_yofs;
-+		*winy = (canvas->pixels_per_unit_y)*(worldy - canvas->scroll_y1) + canvas->zoom_yofs;
- }
- 
- 
-@@ -3989,3 +4017,11 @@
-                                        FOO_TYPE_CANVAS_ITEM,
-                                        foo_canvas_item_accessible_factory_get_type ());
- }
-+
-+void 
-+foo_canvas_zmap(void)
-+{
-+  /* do nothing */
-+}
-+
-+/*  Last edited: Feb 14 15:21 2005 (rds) */
-Index: foo-canvas.h
-===================================================================
-RCS file: /cvs/gnome/foocanvas/libfoocanvas/foo-canvas.h,v
-retrieving revision 1.4
-diff -u -u -r1.4 foo-canvas.h
---- foo-canvas.h	2 Mar 2004 14:32:55 -0000	1.4
-+++ foo-canvas.h	4 Jan 2006 12:22:57 -0000
-@@ -1,3 +1,4 @@
-+/*  Last edited: Jun 15 08:20 2005 (edgrif) */
- /* -*- Mode: C; tab-width: 8; indent-tabs-mode: 8; c-basic-offset: 8 -*- */
- /*
-  * Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation
-@@ -371,7 +372,8 @@
- 	double scroll_x2, scroll_y2;
- 
- 	/* Scaling factor to be used for display */
--	double pixels_per_unit;
-+	double pixels_per_unit_x;
-+	double pixels_per_unit_y;
- 
- 	/* Idle handler ID */
- 	guint idle_id;
-@@ -456,6 +458,10 @@
- /* Sets the number of pixels that correspond to one unit in world coordinates */
- void foo_canvas_set_pixels_per_unit (FooCanvas *canvas, double n);
- 
-+/* Sets the number of  pixels corresponding to one unit in world coordinates
-+ * separately on x and y axes, allowing asymmetric zooming. */
-+void foo_canvas_set_pixels_per_unit_xy (FooCanvas *canvas, double x, double y);
-+
- /* Wether the canvas centers the scroll region if it is smaller than the window  */
- void foo_canvas_set_center_scroll_region (FooCanvas *canvas, gboolean center_scroll_region);
- 
-@@ -525,6 +531,10 @@
-  */
- void foo_canvas_set_stipple_origin (FooCanvas *canvas, GdkGC *gc);
- 
-+void foo_canvas_zmap(void);
-+
- G_END_DECLS
- 
-+
- #endif
-+
diff --git a/foocanvas/support/libfoocanvas-20060104.tar.gz b/foocanvas/support/libfoocanvas-20060104.tar.gz
deleted file mode 100755
index d1c788cc58ab4969044a4f3576a71dea48a61874..0000000000000000000000000000000000000000
Binary files a/foocanvas/support/libfoocanvas-20060104.tar.gz and /dev/null differ
diff --git a/foocanvas/support/libfoocanvas-20061018.patch b/foocanvas/support/libfoocanvas-20061018.patch
deleted file mode 100755
index 3713c93452cb586ae58b95e67ee7c97933b23371..0000000000000000000000000000000000000000
--- a/foocanvas/support/libfoocanvas-20061018.patch
+++ /dev/null
@@ -1,742 +0,0 @@
-Index: foo-canvas-line.c
-===================================================================
-RCS file: /cvs/gnome/foocanvas/libfoocanvas/foo-canvas-line.c,v
-retrieving revision 1.7
-diff -u -w -r1.7 foo-canvas-line.c
---- foo-canvas-line.c	4 Apr 2005 15:13:29 -0000	1.7
-+++ foo-canvas-line.c	19 Oct 2006 08:48:55 -0000
-@@ -1,3 +1,4 @@
-+/*  Last edited: Oct 18 18:34 2006 (rds) */
- /*
-  * Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation
-  * All rights reserved.
-@@ -338,7 +339,7 @@
- 	/* Add possible over-estimate for wide lines */
- 
- 	if (line->width_pixels)
--		width = line->width / line->item.canvas->pixels_per_unit;
-+		width = line->width / line->item.canvas->pixels_per_unit_x;
- 	else
- 		width = line->width;
- 
-@@ -466,7 +467,7 @@
- 		return;
- 
- 	if (line->width_pixels)
--		width = line->width / line->item.canvas->pixels_per_unit;
-+		width = line->width / line->item.canvas->pixels_per_unit_x;
- 	else
- 		width = line->width;
- 
-@@ -477,9 +478,9 @@
- 	shape_c = line->shape_c + width / 2.0;
- 
- 	if (line->width_pixels) {
--		shape_a /= line->item.canvas->pixels_per_unit;
--		shape_b /= line->item.canvas->pixels_per_unit;
--		shape_c /= line->item.canvas->pixels_per_unit;
-+		shape_a /= line->item.canvas->pixels_per_unit_x;
-+		shape_b /= line->item.canvas->pixels_per_unit_x;
-+		shape_c /= line->item.canvas->pixels_per_unit_x;
- 	}
- 
- 	shape_a += 0.001;
-@@ -600,7 +601,7 @@
- 	if (line->width_pixels)
- 		width = (int) line->width;
- 	else
--		width = (int) (line->width * line->item.canvas->pixels_per_unit + 0.5);
-+		width = (int) (line->width * line->item.canvas->pixels_per_unit_x + 0.5);
- 
- 	gdk_gc_set_line_attributes (line->gc,
- 				    width,
-@@ -1126,12 +1127,12 @@
- 	 */
- 
- 	if (line->width_pixels)
--		width = line->width / item->canvas->pixels_per_unit;
-+		width = line->width / item->canvas->pixels_per_unit_x;
- 	else
- 		width = line->width;
- 
--	if (width < (1.0 / item->canvas->pixels_per_unit))
--		width = 1.0 / item->canvas->pixels_per_unit;
-+	if (width < (1.0 / item->canvas->pixels_per_unit_x))
-+		width = 1.0 / item->canvas->pixels_per_unit_x;
- 
- 	changed_miter_to_bevel = 0;
- 
-Index: foo-canvas-pixbuf.c
-===================================================================
-RCS file: /cvs/gnome/foocanvas/libfoocanvas/foo-canvas-pixbuf.c,v
-retrieving revision 1.9
-diff -u -w -r1.9 foo-canvas-pixbuf.c
---- foo-canvas-pixbuf.c	4 Apr 2005 15:13:29 -0000	1.9
-+++ foo-canvas-pixbuf.c	19 Oct 2006 08:48:55 -0000
-@@ -1,3 +1,4 @@
-+/*  Last edited: May 11 11:33 2004 (rnc) */
- /* GNOME libraries - GdkPixbuf item for the GNOME canvas
-  *
-  * Copyright (C) 1999 The Free Software Foundation
-@@ -564,13 +565,13 @@
- 	}
- 
- 	if (priv->x_in_pixels) {
--		x = i2w_dx + priv->x / item->canvas->pixels_per_unit;
-+		x = i2w_dx + priv->x / item->canvas->pixels_per_unit_x;
- 	} else {
- 		x = i2w_dx + priv->x;
- 	}
- 
- 	if (priv->y_in_pixels) {
--		y = i2w_dy + priv->y / item->canvas->pixels_per_unit;
-+		y = i2w_dy + priv->y / item->canvas->pixels_per_unit_y;
- 	} else {
- 		y = i2w_dy + priv->y;
- 	}
-@@ -582,7 +583,7 @@
- 	}
- 
- 	if (priv->width_in_pixels)
--		width /= item->canvas->pixels_per_unit;
-+		width /= item->canvas->pixels_per_unit_x;
- 
- 	if (priv->height_set) {
- 		height = priv->height;
-@@ -591,7 +592,7 @@
- 	}
- 
- 	if (priv->height_in_pixels)
--		height /= item->canvas->pixels_per_unit;
-+		height /= item->canvas->pixels_per_unit_y;
- 
- 
- 	switch (priv->anchor) {
-@@ -781,8 +782,8 @@
- 	pixbuf = priv->pixbuf;
- 
- 	*actual_item = item;
--
--	no_hit = item->canvas->pixels_per_unit * 2 + 10;
-+	/* guessing that the x factor is OK here. RNGC */
-+	no_hit = item->canvas->pixels_per_unit_x * 2 + 10;
- 
- 	if (!priv->pixbuf)
- 		return no_hit;
-@@ -823,13 +824,13 @@
- 	priv = gcp->priv;
- 
- 	if (priv->x_in_pixels) {
--		priv->x += dx * item->canvas->pixels_per_unit;
-+		priv->x += dx * item->canvas->pixels_per_unit_x;
- 	} else {
- 		priv->x += dx;
- 	}
- 
- 	if (priv->y_in_pixels) {
--		priv->y += dy * item->canvas->pixels_per_unit;
-+		priv->y += dy * item->canvas->pixels_per_unit_y;
- 	} else {
- 		priv->y += dy;
- 	}
-Index: foo-canvas-polygon.c
-===================================================================
-RCS file: /cvs/gnome/foocanvas/libfoocanvas/foo-canvas-polygon.c,v
-retrieving revision 1.7
-diff -u -w -r1.7 foo-canvas-polygon.c
---- foo-canvas-polygon.c	4 Apr 2005 15:13:29 -0000	1.7
-+++ foo-canvas-polygon.c	19 Oct 2006 08:48:55 -0000
-@@ -1,3 +1,4 @@
-+/*  Last edited: Oct 19 09:39 2006 (rds) */
- /*
-  * Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation
-  * All rights reserved.
-@@ -276,7 +277,7 @@
- 	/* Add outline width */
- 
- 	if (poly->width_pixels)
--		width = poly->width / poly->item.canvas->pixels_per_unit;
-+		width = poly->width / poly->item.canvas->pixels_per_unit_x;
- 	else
- 		width = poly->width;
- 
-@@ -400,7 +401,7 @@
- 	if (poly->width_pixels)
- 		width = (int) poly->width;
- 	else
--		width = (int) (poly->width * poly->item.canvas->pixels_per_unit + 0.5);
-+		width = (int) (poly->width * poly->item.canvas->pixels_per_unit_x + 0.5);
- 
- 	gdk_gc_set_line_attributes (poly->outline_gc, width,
- 				    GDK_LINE_SOLID, GDK_CAP_ROUND, GDK_JOIN_ROUND);
-@@ -595,15 +596,16 @@
- static void
- get_color_value (FooCanvasPolygon *poly, gulong pixel, GValue *value)
- {
--	GdkColor *color;
-+	GdkColor color;
- 	GdkColormap *colormap;
- 
--	color = g_new (GdkColor, 1);
--	color->pixel = pixel;
-+	//color = g_new (GdkColor, 1);
-+	//color->pixel = pixel;
- 
--	colormap = gtk_widget_get_colormap (GTK_WIDGET (poly));
--	gdk_rgb_find_color (colormap, color);
--	g_value_set_boxed (value, color);
-+	colormap = gtk_widget_get_colormap (GTK_WIDGET (FOO_CANVAS_ITEM(poly)->canvas));
-+	gdk_colormap_query_color(colormap, pixel, &color);
-+	//gdk_rgb_find_color (colormap, color);
-+	g_value_set_boxed (value, &color);
- }
- 
- static void
-@@ -801,7 +803,7 @@
- 
- 	if (poly->outline_set) {
- 		if (poly->width_pixels)
--			width = poly->width / item->canvas->pixels_per_unit;
-+			width = poly->width / item->canvas->pixels_per_unit_x;
- 		else
- 			width = poly->width;
- 
-Index: foo-canvas-rect-ellipse.c
-===================================================================
-RCS file: /cvs/gnome/foocanvas/libfoocanvas/foo-canvas-rect-ellipse.c,v
-retrieving revision 1.12
-diff -u -w -r1.12 foo-canvas-rect-ellipse.c
---- foo-canvas-rect-ellipse.c	4 Apr 2005 15:13:29 -0000	1.12
-+++ foo-canvas-rect-ellipse.c	19 Oct 2006 08:48:55 -0000
-@@ -1,3 +1,4 @@
-+/*  Last edited: Feb 25 11:09 2005 (rds) */
- /*
-  * Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation
-  * All rights reserved.
-@@ -281,7 +282,7 @@
- 	item = FOO_CANVAS_ITEM (re);
- 
- 	if (re->width_pixels)
--		hwidth = (re->width / item->canvas->pixels_per_unit) / 2.0;
-+		hwidth = (re->width / item->canvas->pixels_per_unit_x) / 2.0;
- 	else
- 		hwidth = re->width / 2.0;
- 
-@@ -352,7 +353,7 @@
- 	if (re->width_pixels)
- 		width = (int) re->width;
- 	else
--		width = (int) (re->width * re->item.canvas->pixels_per_unit + 0.5);
-+		width = (int) (re->width * re->item.canvas->pixels_per_unit_x + 0.5);
- 
- 	gdk_gc_set_line_attributes (re->outline_gc, width,
- 				    GDK_LINE_SOLID, GDK_CAP_PROJECTING, GDK_JOIN_MITER);
-@@ -734,7 +735,7 @@
- 	re = FOO_CANVAS_RE (item);
- 
- 	if (re->width_pixels)
--		hwidth = (re->width / item->canvas->pixels_per_unit) / 2.0;
-+		hwidth = (re->width / item->canvas->pixels_per_unit_x) / 2.0;
- 	else
- 		hwidth = re->width / 2.0;
- 
-@@ -1065,7 +1066,7 @@
- 
- 	if (re->outline_set) {
- 		if (re->width_pixels)
--			hwidth = (re->width / item->canvas->pixels_per_unit) / 2.0;
-+			hwidth = (re->width / item->canvas->pixels_per_unit_x) / 2.0;
- 		else
- 			hwidth = re->width / 2.0;
- 
-@@ -1191,7 +1192,7 @@
- 		if (re->width_pixels)
- 			width_pixels = (int) re->width;
- 		else
--			width_pixels = (int) floor (re->width * re->item.canvas->pixels_per_unit + 0.5);
-+			width_pixels = (int) floor (re->width * re->item.canvas->pixels_per_unit_x + 0.5);
- 
- 		width_lt = width_pixels / 2;
- 		width_rb = (width_pixels + 1) / 2;
-@@ -1344,7 +1345,7 @@
- 
- 	if (re->outline_set) {
- 		if (re->width_pixels)
--			width = re->width / item->canvas->pixels_per_unit;
-+			width = re->width / item->canvas->pixels_per_unit_x;
- 		else
- 			width = re->width;
- 	} else
-Index: foo-canvas-text.c
-===================================================================
-RCS file: /cvs/gnome/foocanvas/libfoocanvas/foo-canvas-text.c,v
-retrieving revision 1.8
-diff -u -w -r1.8 foo-canvas-text.c
---- foo-canvas-text.c	4 Apr 2005 15:13:29 -0000	1.8
-+++ foo-canvas-text.c	19 Oct 2006 08:48:55 -0000
-@@ -1,3 +1,4 @@
-+/*  Last edited: Oct 18 18:38 2006 (rds) */
- /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
- /*
-  * $Id: foo-canvas-text.c,v 1.8 2005/04/04 15:13:29 mortenw Exp $
-@@ -615,8 +616,8 @@
- 	/* Get canvas pixel coordinates for clip rectangle position */
- 
- 	foo_canvas_w2c (item->canvas, wx, wy, &text->clip_cx, &text->clip_cy);
--	text->clip_cwidth = text->clip_width * item->canvas->pixels_per_unit;
--	text->clip_cheight = text->clip_height * item->canvas->pixels_per_unit;
-+	text->clip_cwidth = text->clip_width * item->canvas->pixels_per_unit_x;
-+	text->clip_cheight = text->clip_height * item->canvas->pixels_per_unit_y;
- 
- 	/* Anchor text */
- 
-@@ -976,7 +977,7 @@
- 	case PROP_WRAP_WIDTH: {
- 		double w = fabs (g_value_get_double (value));
- 		pango_layout_set_width (text->layout,
--			w * text->item.canvas->pixels_per_unit * PANGO_SCALE);
-+			w * text->item.canvas->pixels_per_unit_x * PANGO_SCALE);
- 
- 		break;
- 	}
-@@ -1252,11 +1253,11 @@
- 		break;
- 
- 	case PROP_TEXT_WIDTH:
--		g_value_set_double (value, text->max_width / text->item.canvas->pixels_per_unit);
-+		g_value_set_double (value, text->max_width / text->item.canvas->pixels_per_unit_x);
- 		break;
- 
- 	case PROP_TEXT_HEIGHT:
--		g_value_set_double (value, text->height / text->item.canvas->pixels_per_unit);
-+		g_value_set_double (value, text->height / text->item.canvas->pixels_per_unit_y);
- 		break;
- 
- 	default:
-@@ -1309,7 +1310,8 @@
- 	if (text->rise_set)
- 		add_attr (attr_list, pango_attr_rise_new (text->rise));
- 
--	zoom = text->item.canvas->pixels_per_unit;
-+	/* guessing that the x factor is OK here. RNGC */
-+	zoom = text->item.canvas->pixels_per_unit_x;
- 	if (fabs (zoom - 1.) > 1e-4) {
- 		PangoAttribute *attr = pango_attr_scale_new (zoom);
- 		attr->start_index = 0;
-@@ -1479,14 +1481,14 @@
-  	        PangoRectangle log_rect;
- 
- 		pango_layout_iter_get_line_extents (iter, NULL, &log_rect);
--
--		if (text->clip) {
-+                /* if (text->clip) { // original */
-+		/* if (!text->clip) { // broken for clipped !!! ;) */
-+                if(1) {
- 			x1 = PANGO_PIXELS (log_rect.x);
- 			y1 = PANGO_PIXELS (log_rect.y);
- 			x2 = PANGO_PIXELS (log_rect.x+log_rect.width);
- 			y2 = PANGO_PIXELS (log_rect.y+log_rect.height);
- 
--
- 			if (x1 < text->clip_cx)
- 				x1 = text->clip_cx;
- 
-@@ -1529,7 +1531,9 @@
- 			return 0.0;
- 		}
- 
-+
- 		dist = sqrt (dx * dx + dy * dy);
-+
- 		if (dist < best)
- 			best = dist;
- 
-@@ -1537,7 +1541,10 @@
- 
- 	pango_layout_iter_free(iter);
- 
--	return best / item->canvas->pixels_per_unit;
-+
-+	/* guessing that the x factor is OK here. RNGC */
-+        /* using x factor here as that is what is used in foo-canvas.c ... */
-+	return best / item->canvas->pixels_per_unit_x;
- }
- 
- static void
-@@ -1567,8 +1574,8 @@
- 		width = text->clip_width;
- 		height = text->clip_height;
- 	} else {
--		width = text->max_width / item->canvas->pixels_per_unit;
--		height = text->height / item->canvas->pixels_per_unit;
-+		width = text->max_width / item->canvas->pixels_per_unit_x;
-+		height = text->height / item->canvas->pixels_per_unit_y;
- 	}
- 
- 	switch (text->anchor) {
-Index: foo-canvas-widget.c
-===================================================================
-RCS file: /cvs/gnome/foocanvas/libfoocanvas/foo-canvas-widget.c,v
-retrieving revision 1.5
-diff -u -w -r1.5 foo-canvas-widget.c
---- foo-canvas-widget.c	13 May 2005 03:34:36 -0000	1.5
-+++ foo-canvas-widget.c	19 Oct 2006 08:48:55 -0000
-@@ -1,3 +1,4 @@
-+/*  Last edited: May 11 11:42 2004 (rnc) */
- /*
-  * Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation
-  * All rights reserved.
-@@ -456,8 +457,8 @@
- 			witem->cwidth = (int) (witem->width + 0.5);
- 			witem->cheight = (int) (witem->height + 0.5);
- 		} else {
--			witem->cwidth = (int) (witem->width * item->canvas->pixels_per_unit + 0.5);
--			witem->cheight = (int) (witem->height * item->canvas->pixels_per_unit + 0.5);
-+			witem->cwidth = (int) (witem->width * item->canvas->pixels_per_unit_x + 0.5);
-+			witem->cheight = (int) (witem->height * item->canvas->pixels_per_unit_y + 0.5);
- 		}
- 
- 		gtk_widget_set_usize (witem->widget, witem->cwidth, witem->cheight);
-@@ -516,8 +517,8 @@
- 
- 	foo_canvas_c2w (item->canvas, witem->cx, witem->cy, &x1, &y1);
- 
--	x2 = x1 + (witem->cwidth - 1) / item->canvas->pixels_per_unit;
--	y2 = y1 + (witem->cheight - 1) / item->canvas->pixels_per_unit;
-+	x2 = x1 + (witem->cwidth - 1) / item->canvas->pixels_per_unit_x;
-+	y2 = y1 + (witem->cheight - 1) / item->canvas->pixels_per_unit_y;
- 
- 	/* Is point inside widget bounds? */
- 
-Index: foo-canvas.c
-===================================================================
-RCS file: /cvs/gnome/foocanvas/libfoocanvas/foo-canvas.c,v
-retrieving revision 1.26
-diff -u -w -r1.26 foo-canvas.c
---- foo-canvas.c	14 Mar 2006 00:13:44 -0000	1.26
-+++ foo-canvas.c	19 Oct 2006 08:48:55 -0000
-@@ -1,3 +1,4 @@
-+/*  Last edited: Oct 18 18:59 2006 (rds) */
- /* -*- Mode: C; tab-width: 8; indent-tabs-mode: 8; c-basic-offset: 8 -*- */
- /*
-  * Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation
-@@ -295,6 +296,7 @@
- 	}
- }
- 
-+
- /* Destroy handler for canvas items */
- static void
- foo_canvas_item_destroy (GtkObject *object)
-@@ -339,10 +341,8 @@
- 
- 		if (item->parent)
- 			group_remove (FOO_CANVAS_GROUP (item->parent), item);
--
- 		item->canvas = NULL;
- 	}
--
- 	GTK_OBJECT_CLASS (item_parent_class)->destroy (object);
- }
- 
-@@ -1370,7 +1370,7 @@
- 	group = FOO_CANVAS_GROUP (item);
- 
- 	(* group_parent_class->update) (item, i2w_dx, i2w_dy, flags);
--
-+        /* if(item->object.flags & FOO_CANVAS_ITEM_VISIBLE){ */
- 	bbox_x0 = 0;
- 	bbox_y0 = 0;
- 	bbox_x1 = 0;
-@@ -1398,6 +1398,8 @@
- 	item->y1 = bbox_y0;
- 	item->x2 = bbox_x1;
- 	item->y2 = bbox_y1;
-+        /* } */
-+        return ;
- }
- 
- /* Unrealize handler for canvas groups */
-@@ -1540,10 +1542,10 @@
- 			has_point = TRUE;
- 		} else
- 			has_point = FALSE;
--
-+		/* guessing that the x factor is OK here. RNGC */
- 		if (has_point
- 		    && point_item
--		    && ((int) (dist * item->canvas->pixels_per_unit + 0.5)
-+		    && ((int) (dist * item->canvas->pixels_per_unit_x + 0.5)
- 			<= item->canvas->close_enough)) {
- 			best = dist;
- 			*actual_item = point_item;
-@@ -2080,7 +2082,8 @@
- 	canvas->scroll_x2 = canvas->layout.width;
- 	canvas->scroll_y2 = canvas->layout.height;
- 
--	canvas->pixels_per_unit = 1.0;
-+	canvas->pixels_per_unit_x = 1.0;
-+	canvas->pixels_per_unit_y = 1.0;
- 
- 	canvas->pick_event.type = GDK_LEAVE_NOTIFY;
- 	canvas->pick_event.crossing.x = 0;
-@@ -2302,8 +2305,8 @@
- 	canvas_width = GTK_WIDGET (canvas)->allocation.width;
- 	canvas_height = GTK_WIDGET (canvas)->allocation.height;
- 
--	scroll_width = floor ((canvas->scroll_x2 - canvas->scroll_x1) * canvas->pixels_per_unit + 0.5);
--	scroll_height = floor ((canvas->scroll_y2 - canvas->scroll_y1) * canvas->pixels_per_unit + 0.5);
-+	scroll_width = floor ((canvas->scroll_x2 - canvas->scroll_x1) * canvas->pixels_per_unit_x + 0.5);
-+	scroll_height = floor ((canvas->scroll_y2 - canvas->scroll_y1) * canvas->pixels_per_unit_y + 0.5);
- 
- 	right_limit = scroll_width - canvas_width;
- 	bottom_limit = scroll_height - canvas_height;
-@@ -3101,15 +3104,35 @@
- 
- /**
-  * foo_canvas_set_pixels_per_unit:
-- * @canvas: A canvas.
-+ * @canvas: A canvas
-  * @n: The number of pixels that correspond to one canvas unit.
-  *
-  * Sets the zooming factor of a canvas by specifying the number of pixels that
-  * correspond to one canvas unit.
-+ * This is retained for backwards compatibility and just calls
-+ * foo_canvas_set_pixels_per_unit_xy, passing the number of pixels/unit twice.
-  **/
- void
- foo_canvas_set_pixels_per_unit (FooCanvas *canvas, double n)
- {
-+  foo_canvas_set_pixels_per_unit_xy(canvas, n, n);
-+  return;
-+}
-+
-+
-+/**
-+ * foo_canvas_set_pixels_per_unit_xy:
-+ * @canvas: A canvas.
-+ * @x: The number of pixels that correspond to one canvas unit on the x axis.
-+ * @y: The number of pixels that correspond to one canvas unit on the y axis.
-+ *
-+ * Sets the zooming factor of a canvas by specifying the number of pixels that
-+ * correspond to one canvas unit.
-+ * Having two zooming factors enables asymmetric zooming.
-+ **/
-+void
-+foo_canvas_set_pixels_per_unit_xy (FooCanvas *canvas, double x, double y)
-+{
- 	GtkWidget *widget;
- 	double cx, cy;
- 	int x1, y1;
-@@ -3119,7 +3142,8 @@
- 	gint attributes_mask;
- 
- 	g_return_if_fail (FOO_IS_CANVAS (canvas));
--	g_return_if_fail (n > FOO_CANVAS_EPSILON);
-+	/* guessing that the x factor is OK here.  RNCG */
-+	g_return_if_fail (x > FOO_CANVAS_EPSILON);
- 
- 	widget = GTK_WIDGET (canvas);
- 
-@@ -3127,14 +3151,15 @@
- 	center_y = widget->allocation.height / 2;
- 
- 	/* Find the coordinates of the screen center in units. */
--	cx = (canvas->layout.hadjustment->value + center_x) / canvas->pixels_per_unit + canvas->scroll_x1 + canvas->zoom_xofs;
--	cy = (canvas->layout.vadjustment->value + center_y) / canvas->pixels_per_unit + canvas->scroll_y1 + canvas->zoom_yofs;
-+	cx = (canvas->layout.hadjustment->value + center_x) / canvas->pixels_per_unit_x + canvas->scroll_x1 + canvas->zoom_xofs;
-+	cy = (canvas->layout.vadjustment->value + center_y) / canvas->pixels_per_unit_y + canvas->scroll_y1 + canvas->zoom_yofs;
- 
- 	/* Now calculate the new offset of the upper left corner. (round not truncate) */
--	x1 = ((cx - canvas->scroll_x1) * n) - center_x + .5;
--	y1 = ((cy - canvas->scroll_y1) * n) - center_y + .5;
-+	x1 = ((cx - canvas->scroll_x1) * x) - center_x + .5;
-+	y1 = ((cy - canvas->scroll_y1) * y) - center_y + .5;
- 
--	canvas->pixels_per_unit = n;
-+	canvas->pixels_per_unit_x = x;
-+	canvas->pixels_per_unit_y = y;
- 
- 	if (!(canvas->root->object.flags & FOO_CANVAS_ITEM_NEED_DEEP_UPDATE)) {
- 		canvas->root->object.flags |= FOO_CANVAS_ITEM_NEED_DEEP_UPDATE;
-@@ -3268,7 +3293,8 @@
- 	foo_canvas_w2c (canvas, x, y, &cx, &cy);
- 
- 	dist = foo_canvas_item_invoke_point (canvas->root, x, y, cx, cy, &item);
--	if ((int) (dist * canvas->pixels_per_unit + 0.5) <= canvas->close_enough)
-+	/* guessing the x factor is OK here.  RNGC */
-+	if ((int) (dist * canvas->pixels_per_unit_x + 0.5) <= canvas->close_enough)
- 		return item;
- 	else
- 		return NULL;
-@@ -3331,16 +3357,17 @@
- void
- foo_canvas_w2c (FooCanvas *canvas, double wx, double wy, int *cx, int *cy)
- {
--	double zoom;
-+	double zoom_x, zoom_y;
- 
- 	g_return_if_fail (FOO_IS_CANVAS (canvas));
- 	
--	zoom = canvas->pixels_per_unit;
-+	zoom_x = canvas->pixels_per_unit_x;
-+	zoom_y = canvas->pixels_per_unit_y;
- 	
- 	if (cx)
--		*cx = floor ((wx - canvas->scroll_x1)*zoom + canvas->zoom_xofs + 0.5);
-+		*cx = floor ((wx - canvas->scroll_x1)*zoom_x + canvas->zoom_xofs + 0.5);
- 	if (cy)
--		*cy = floor ((wy - canvas->scroll_y1)*zoom + canvas->zoom_yofs + 0.5);
-+		*cy = floor ((wy - canvas->scroll_y1)*zoom_y + canvas->zoom_yofs + 0.5);
- }
- 
- /**
-@@ -3380,16 +3407,17 @@
- void
- foo_canvas_w2c_d (FooCanvas *canvas, double wx, double wy, double *cx, double *cy)
- {
--	double zoom;
-+	double zoom_x, zoom_y;
- 
- 	g_return_if_fail (FOO_IS_CANVAS (canvas));
- 
--	zoom = canvas->pixels_per_unit;
-+	zoom_x = canvas->pixels_per_unit_x;
-+	zoom_y = canvas->pixels_per_unit_y;
- 	
- 	if (cx)
--		*cx = (wx - canvas->scroll_x1)*zoom + canvas->zoom_xofs;
-+		*cx = (wx - canvas->scroll_x1)*zoom_x + canvas->zoom_xofs;
- 	if (cy)
--		*cy = (wy - canvas->scroll_y1)*zoom + canvas->zoom_yofs;
-+		*cy = (wy - canvas->scroll_y1)*zoom_y + canvas->zoom_yofs;
- }
- 
- 
-@@ -3406,16 +3434,17 @@
- void
- foo_canvas_c2w (FooCanvas *canvas, int cx, int cy, double *wx, double *wy)
- {
--	double zoom;
-+	double zoom_x, zoom_y;
- 
- 	g_return_if_fail (FOO_IS_CANVAS (canvas));
- 
--	zoom = canvas->pixels_per_unit;
-+	zoom_x = canvas->pixels_per_unit_x;
-+	zoom_y = canvas->pixels_per_unit_y;
- 	
- 	if (wx)
--		*wx = (cx - canvas->zoom_xofs)/zoom + canvas->scroll_x1;
-+		*wx = (cx - canvas->zoom_xofs)/zoom_x + canvas->scroll_x1;
- 	if (wy)
--		*wy = (cy - canvas->zoom_yofs)/zoom + canvas->scroll_y1;
-+		*wy = (cy - canvas->zoom_yofs)/zoom_y + canvas->scroll_y1;
- }
- 
- 
-@@ -3441,11 +3470,11 @@
- 
- 	if (worldx)
- 		*worldx = canvas->scroll_x1 + ((winx - canvas->zoom_xofs)
--					       / canvas->pixels_per_unit);
-+					       / canvas->pixels_per_unit_x);
- 
- 	if (worldy)
- 		*worldy = canvas->scroll_y1 + ((winy - canvas->zoom_yofs)
--					       / canvas->pixels_per_unit);
-+					       / canvas->pixels_per_unit_y);
- }
- 
- 
-@@ -3468,10 +3497,10 @@
- 	g_return_if_fail (FOO_IS_CANVAS (canvas));
- 
- 	if (winx)
--		*winx = (canvas->pixels_per_unit)*(worldx - canvas->scroll_x1) + canvas->zoom_xofs;
-+		*winx = (canvas->pixels_per_unit_x)*(worldx - canvas->scroll_x1) + canvas->zoom_xofs;
- 
- 	if (winy)
--		*winy = (canvas->pixels_per_unit)*(worldy - canvas->scroll_y1) + canvas->zoom_yofs;
-+		*winy = (canvas->pixels_per_unit_y)*(worldy - canvas->scroll_y1) + canvas->zoom_yofs;
- }
- 
- 
-@@ -3999,3 +4028,11 @@
-                                        FOO_TYPE_CANVAS_ITEM,
-                                        foo_canvas_item_accessible_factory_get_type ());
- }
-+
-+void 
-+foo_canvas_zmap(void)
-+{
-+  /* do nothing */
-+}
-+
-+/*  Last edited: Feb 14 15:21 2005 (rds) */
-Index: foo-canvas.h
-===================================================================
-RCS file: /cvs/gnome/foocanvas/libfoocanvas/foo-canvas.h,v
-retrieving revision 1.4
-diff -u -w -r1.4 foo-canvas.h
---- foo-canvas.h	2 Mar 2004 14:32:55 -0000	1.4
-+++ foo-canvas.h	19 Oct 2006 08:48:55 -0000
-@@ -1,3 +1,4 @@
-+/*  Last edited: Jun 15 08:20 2005 (edgrif) */
- /* -*- Mode: C; tab-width: 8; indent-tabs-mode: 8; c-basic-offset: 8 -*- */
- /*
-  * Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation
-@@ -371,7 +372,8 @@
- 	double scroll_x2, scroll_y2;
- 
- 	/* Scaling factor to be used for display */
--	double pixels_per_unit;
-+	double pixels_per_unit_x;
-+	double pixels_per_unit_y;
- 
- 	/* Idle handler ID */
- 	guint idle_id;
-@@ -456,6 +458,10 @@
- /* Sets the number of pixels that correspond to one unit in world coordinates */
- void foo_canvas_set_pixels_per_unit (FooCanvas *canvas, double n);
- 
-+/* Sets the number of  pixels corresponding to one unit in world coordinates
-+ * separately on x and y axes, allowing asymmetric zooming. */
-+void foo_canvas_set_pixels_per_unit_xy (FooCanvas *canvas, double x, double y);
-+
- /* Wether the canvas centers the scroll region if it is smaller than the window  */
- void foo_canvas_set_center_scroll_region (FooCanvas *canvas, gboolean center_scroll_region);
- 
-@@ -525,6 +531,10 @@
-  */
- void foo_canvas_set_stipple_origin (FooCanvas *canvas, GdkGC *gc);
- 
-+void foo_canvas_zmap(void);
-+
- G_END_DECLS
- 
-+
- #endif
-+
-Index: libfoocanvas.h
-===================================================================
-RCS file: /cvs/gnome/foocanvas/libfoocanvas/libfoocanvas.h,v
-retrieving revision 1.1.1.1
-diff -u -w -r1.1.1.1 libfoocanvas.h
---- libfoocanvas.h	11 Feb 2002 04:23:32 -0000	1.1.1.1
-+++ libfoocanvas.h	19 Oct 2006 08:48:55 -0000
-@@ -1,3 +1,4 @@
-+/*  Last edited: Aug  1 11:42 2006 (edgrif) */
- /*
-  * Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation
-  * All rights reserved.
-@@ -34,6 +35,9 @@
- #include <libfoocanvas/foo-canvas-widget.h>
- #include <libfoocanvas/foo-canvas-rect-ellipse.h>
- #include <libfoocanvas/foo-canvas-util.h>
-+
-+#include <libfoocanvas/foozmap-canvas-line-glyph.h>
-+
- 
- G_BEGIN_DECLS
- 
diff --git a/foocanvas/support/libfoocanvas-20061018.tar.gz b/foocanvas/support/libfoocanvas-20061018.tar.gz
deleted file mode 100755
index dcf79e28afa0266834b44003016c23f284bbb8d5..0000000000000000000000000000000000000000
Binary files a/foocanvas/support/libfoocanvas-20061018.tar.gz and /dev/null differ
diff --git a/foocanvas/support/libfoocanvas-20070831.patch b/foocanvas/support/libfoocanvas-20070831.patch
deleted file mode 100755
index a1eba54d805ac7a549741d82e48106883ce1e028..0000000000000000000000000000000000000000
--- a/foocanvas/support/libfoocanvas-20070831.patch
+++ /dev/null
@@ -1,742 +0,0 @@
-Index: foo-canvas-line.c
-===================================================================
-RCS file: /cvs/gnome/foocanvas/libfoocanvas/foo-canvas-line.c,v
-retrieving revision 1.7
-diff -u -w -r1.7 foo-canvas-line.c
---- foo-canvas-line.c	4 Apr 2005 15:13:29 -0000	1.7
-+++ foo-canvas-line.c	19 Oct 2006 08:48:55 -0000
-@@ -1,3 +1,4 @@
-+/*  Last edited: Oct 18 18:34 2006 (rds) */
- /*
-  * Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation
-  * All rights reserved.
-@@ -338,7 +339,7 @@
- 	/* Add possible over-estimate for wide lines */
- 
- 	if (line->width_pixels)
--		width = line->width / line->item.canvas->pixels_per_unit;
-+		width = line->width / line->item.canvas->pixels_per_unit_x;
- 	else
- 		width = line->width;
- 
-@@ -466,7 +467,7 @@
- 		return;
- 
- 	if (line->width_pixels)
--		width = line->width / line->item.canvas->pixels_per_unit;
-+		width = line->width / line->item.canvas->pixels_per_unit_x;
- 	else
- 		width = line->width;
- 
-@@ -477,9 +478,9 @@
- 	shape_c = line->shape_c + width / 2.0;
- 
- 	if (line->width_pixels) {
--		shape_a /= line->item.canvas->pixels_per_unit;
--		shape_b /= line->item.canvas->pixels_per_unit;
--		shape_c /= line->item.canvas->pixels_per_unit;
-+		shape_a /= line->item.canvas->pixels_per_unit_x;
-+		shape_b /= line->item.canvas->pixels_per_unit_x;
-+		shape_c /= line->item.canvas->pixels_per_unit_x;
- 	}
- 
- 	shape_a += 0.001;
-@@ -600,7 +601,7 @@
- 	if (line->width_pixels)
- 		width = (int) line->width;
- 	else
--		width = (int) (line->width * line->item.canvas->pixels_per_unit + 0.5);
-+		width = (int) (line->width * line->item.canvas->pixels_per_unit_x + 0.5);
- 
- 	gdk_gc_set_line_attributes (line->gc,
- 				    width,
-@@ -1126,12 +1127,12 @@
- 	 */
- 
- 	if (line->width_pixels)
--		width = line->width / item->canvas->pixels_per_unit;
-+		width = line->width / item->canvas->pixels_per_unit_x;
- 	else
- 		width = line->width;
- 
--	if (width < (1.0 / item->canvas->pixels_per_unit))
--		width = 1.0 / item->canvas->pixels_per_unit;
-+	if (width < (1.0 / item->canvas->pixels_per_unit_x))
-+		width = 1.0 / item->canvas->pixels_per_unit_x;
- 
- 	changed_miter_to_bevel = 0;
- 
-Index: foo-canvas-pixbuf.c
-===================================================================
-RCS file: /cvs/gnome/foocanvas/libfoocanvas/foo-canvas-pixbuf.c,v
-retrieving revision 1.9
-diff -u -w -r1.9 foo-canvas-pixbuf.c
---- foo-canvas-pixbuf.c	4 Apr 2005 15:13:29 -0000	1.9
-+++ foo-canvas-pixbuf.c	19 Oct 2006 08:48:55 -0000
-@@ -1,3 +1,4 @@
-+/*  Last edited: May 11 11:33 2004 (rnc) */
- /* GNOME libraries - GdkPixbuf item for the GNOME canvas
-  *
-  * Copyright (C) 1999 The Free Software Foundation
-@@ -564,13 +565,13 @@
- 	}
- 
- 	if (priv->x_in_pixels) {
--		x = i2w_dx + priv->x / item->canvas->pixels_per_unit;
-+		x = i2w_dx + priv->x / item->canvas->pixels_per_unit_x;
- 	} else {
- 		x = i2w_dx + priv->x;
- 	}
- 
- 	if (priv->y_in_pixels) {
--		y = i2w_dy + priv->y / item->canvas->pixels_per_unit;
-+		y = i2w_dy + priv->y / item->canvas->pixels_per_unit_y;
- 	} else {
- 		y = i2w_dy + priv->y;
- 	}
-@@ -582,7 +583,7 @@
- 	}
- 
- 	if (priv->width_in_pixels)
--		width /= item->canvas->pixels_per_unit;
-+		width /= item->canvas->pixels_per_unit_x;
- 
- 	if (priv->height_set) {
- 		height = priv->height;
-@@ -591,7 +592,7 @@
- 	}
- 
- 	if (priv->height_in_pixels)
--		height /= item->canvas->pixels_per_unit;
-+		height /= item->canvas->pixels_per_unit_y;
- 
- 
- 	switch (priv->anchor) {
-@@ -781,8 +782,8 @@
- 	pixbuf = priv->pixbuf;
- 
- 	*actual_item = item;
--
--	no_hit = item->canvas->pixels_per_unit * 2 + 10;
-+	/* guessing that the x factor is OK here. RNGC */
-+	no_hit = item->canvas->pixels_per_unit_x * 2 + 10;
- 
- 	if (!priv->pixbuf)
- 		return no_hit;
-@@ -823,13 +824,13 @@
- 	priv = gcp->priv;
- 
- 	if (priv->x_in_pixels) {
--		priv->x += dx * item->canvas->pixels_per_unit;
-+		priv->x += dx * item->canvas->pixels_per_unit_x;
- 	} else {
- 		priv->x += dx;
- 	}
- 
- 	if (priv->y_in_pixels) {
--		priv->y += dy * item->canvas->pixels_per_unit;
-+		priv->y += dy * item->canvas->pixels_per_unit_y;
- 	} else {
- 		priv->y += dy;
- 	}
-Index: foo-canvas-polygon.c
-===================================================================
-RCS file: /cvs/gnome/foocanvas/libfoocanvas/foo-canvas-polygon.c,v
-retrieving revision 1.7
-diff -u -w -r1.7 foo-canvas-polygon.c
---- foo-canvas-polygon.c	4 Apr 2005 15:13:29 -0000	1.7
-+++ foo-canvas-polygon.c	19 Oct 2006 08:48:55 -0000
-@@ -1,3 +1,4 @@
-+/*  Last edited: Oct 19 09:39 2006 (rds) */
- /*
-  * Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation
-  * All rights reserved.
-@@ -276,7 +277,7 @@
- 	/* Add outline width */
- 
- 	if (poly->width_pixels)
--		width = poly->width / poly->item.canvas->pixels_per_unit;
-+		width = poly->width / poly->item.canvas->pixels_per_unit_x;
- 	else
- 		width = poly->width;
- 
-@@ -400,7 +401,7 @@
- 	if (poly->width_pixels)
- 		width = (int) poly->width;
- 	else
--		width = (int) (poly->width * poly->item.canvas->pixels_per_unit + 0.5);
-+		width = (int) (poly->width * poly->item.canvas->pixels_per_unit_x + 0.5);
- 
- 	gdk_gc_set_line_attributes (poly->outline_gc, width,
- 				    GDK_LINE_SOLID, GDK_CAP_ROUND, GDK_JOIN_ROUND);
-@@ -595,15 +596,16 @@
- static void
- get_color_value (FooCanvasPolygon *poly, gulong pixel, GValue *value)
- {
--	GdkColor *color;
-+	GdkColor color;
- 	GdkColormap *colormap;
- 
--	color = g_new (GdkColor, 1);
--	color->pixel = pixel;
-+	//color = g_new (GdkColor, 1);
-+	//color->pixel = pixel;
- 
--	colormap = gtk_widget_get_colormap (GTK_WIDGET (poly));
--	gdk_rgb_find_color (colormap, color);
--	g_value_set_boxed (value, color);
-+	colormap = gtk_widget_get_colormap (GTK_WIDGET (FOO_CANVAS_ITEM(poly)->canvas));
-+	gdk_colormap_query_color(colormap, pixel, &color);
-+	//gdk_rgb_find_color (colormap, color);
-+	g_value_set_boxed (value, &color);
- }
- 
- static void
-@@ -801,7 +803,7 @@
- 
- 	if (poly->outline_set) {
- 		if (poly->width_pixels)
--			width = poly->width / item->canvas->pixels_per_unit;
-+			width = poly->width / item->canvas->pixels_per_unit_x;
- 		else
- 			width = poly->width;
- 
-Index: foo-canvas-rect-ellipse.c
-===================================================================
-RCS file: /cvs/gnome/foocanvas/libfoocanvas/foo-canvas-rect-ellipse.c,v
-retrieving revision 1.12
-diff -u -w -r1.12 foo-canvas-rect-ellipse.c
---- foo-canvas-rect-ellipse.c	4 Apr 2005 15:13:29 -0000	1.12
-+++ foo-canvas-rect-ellipse.c	19 Oct 2006 08:48:55 -0000
-@@ -1,3 +1,4 @@
-+/*  Last edited: Feb 25 11:09 2005 (rds) */
- /*
-  * Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation
-  * All rights reserved.
-@@ -281,7 +282,7 @@
- 	item = FOO_CANVAS_ITEM (re);
- 
- 	if (re->width_pixels)
--		hwidth = (re->width / item->canvas->pixels_per_unit) / 2.0;
-+		hwidth = (re->width / item->canvas->pixels_per_unit_x) / 2.0;
- 	else
- 		hwidth = re->width / 2.0;
- 
-@@ -352,7 +353,7 @@
- 	if (re->width_pixels)
- 		width = (int) re->width;
- 	else
--		width = (int) (re->width * re->item.canvas->pixels_per_unit + 0.5);
-+		width = (int) (re->width * re->item.canvas->pixels_per_unit_x + 0.5);
- 
- 	gdk_gc_set_line_attributes (re->outline_gc, width,
- 				    GDK_LINE_SOLID, GDK_CAP_PROJECTING, GDK_JOIN_MITER);
-@@ -734,7 +735,7 @@
- 	re = FOO_CANVAS_RE (item);
- 
- 	if (re->width_pixels)
--		hwidth = (re->width / item->canvas->pixels_per_unit) / 2.0;
-+		hwidth = (re->width / item->canvas->pixels_per_unit_x) / 2.0;
- 	else
- 		hwidth = re->width / 2.0;
- 
-@@ -1065,7 +1066,7 @@
- 
- 	if (re->outline_set) {
- 		if (re->width_pixels)
--			hwidth = (re->width / item->canvas->pixels_per_unit) / 2.0;
-+			hwidth = (re->width / item->canvas->pixels_per_unit_x) / 2.0;
- 		else
- 			hwidth = re->width / 2.0;
- 
-@@ -1191,7 +1192,7 @@
- 		if (re->width_pixels)
- 			width_pixels = (int) re->width;
- 		else
--			width_pixels = (int) floor (re->width * re->item.canvas->pixels_per_unit + 0.5);
-+			width_pixels = (int) floor (re->width * re->item.canvas->pixels_per_unit_x + 0.5);
- 
- 		width_lt = width_pixels / 2;
- 		width_rb = (width_pixels + 1) / 2;
-@@ -1344,7 +1345,7 @@
- 
- 	if (re->outline_set) {
- 		if (re->width_pixels)
--			width = re->width / item->canvas->pixels_per_unit;
-+			width = re->width / item->canvas->pixels_per_unit_x;
- 		else
- 			width = re->width;
- 	} else
-Index: foo-canvas-text.c
-===================================================================
-RCS file: /cvs/gnome/foocanvas/libfoocanvas/foo-canvas-text.c,v
-retrieving revision 1.8
-diff -u -w -r1.8 foo-canvas-text.c
---- foo-canvas-text.c	4 Apr 2005 15:13:29 -0000	1.8
-+++ foo-canvas-text.c	19 Oct 2006 08:48:55 -0000
-@@ -1,3 +1,4 @@
-+/*  Last edited: Oct 18 18:38 2006 (rds) */
- /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
- /*
-  * $Id: foo-canvas-text.c,v 1.8 2005/04/04 15:13:29 mortenw Exp $
-@@ -615,8 +616,8 @@
- 	/* Get canvas pixel coordinates for clip rectangle position */
- 
- 	foo_canvas_w2c (item->canvas, wx, wy, &text->clip_cx, &text->clip_cy);
--	text->clip_cwidth = text->clip_width * item->canvas->pixels_per_unit;
--	text->clip_cheight = text->clip_height * item->canvas->pixels_per_unit;
-+	text->clip_cwidth = text->clip_width * item->canvas->pixels_per_unit_x;
-+	text->clip_cheight = text->clip_height * item->canvas->pixels_per_unit_y;
- 
- 	/* Anchor text */
- 
-@@ -976,7 +977,7 @@
- 	case PROP_WRAP_WIDTH: {
- 		double w = fabs (g_value_get_double (value));
- 		pango_layout_set_width (text->layout,
--			w * text->item.canvas->pixels_per_unit * PANGO_SCALE);
-+			w * text->item.canvas->pixels_per_unit_x * PANGO_SCALE);
- 
- 		break;
- 	}
-@@ -1252,11 +1253,11 @@
- 		break;
- 
- 	case PROP_TEXT_WIDTH:
--		g_value_set_double (value, text->max_width / text->item.canvas->pixels_per_unit);
-+		g_value_set_double (value, text->max_width / text->item.canvas->pixels_per_unit_x);
- 		break;
- 
- 	case PROP_TEXT_HEIGHT:
--		g_value_set_double (value, text->height / text->item.canvas->pixels_per_unit);
-+		g_value_set_double (value, text->height / text->item.canvas->pixels_per_unit_y);
- 		break;
- 
- 	default:
-@@ -1309,7 +1310,8 @@
- 	if (text->rise_set)
- 		add_attr (attr_list, pango_attr_rise_new (text->rise));
- 
--	zoom = text->item.canvas->pixels_per_unit;
-+	/* guessing that the x factor is OK here. RNGC */
-+	zoom = text->item.canvas->pixels_per_unit_x;
- 	if (fabs (zoom - 1.) > 1e-4) {
- 		PangoAttribute *attr = pango_attr_scale_new (zoom);
- 		attr->start_index = 0;
-@@ -1479,14 +1481,14 @@
-  	        PangoRectangle log_rect;
- 
- 		pango_layout_iter_get_line_extents (iter, NULL, &log_rect);
--
--		if (text->clip) {
-+                /* if (text->clip) { // original */
-+		/* if (!text->clip) { // broken for clipped !!! ;) */
-+                if(1) {
- 			x1 = PANGO_PIXELS (log_rect.x);
- 			y1 = PANGO_PIXELS (log_rect.y);
- 			x2 = PANGO_PIXELS (log_rect.x+log_rect.width);
- 			y2 = PANGO_PIXELS (log_rect.y+log_rect.height);
- 
--
- 			if (x1 < text->clip_cx)
- 				x1 = text->clip_cx;
- 
-@@ -1529,7 +1531,9 @@
- 			return 0.0;
- 		}
- 
-+
- 		dist = sqrt (dx * dx + dy * dy);
-+
- 		if (dist < best)
- 			best = dist;
- 
-@@ -1537,7 +1541,10 @@
- 
- 	pango_layout_iter_free(iter);
- 
--	return best / item->canvas->pixels_per_unit;
-+
-+	/* guessing that the x factor is OK here. RNGC */
-+        /* using x factor here as that is what is used in foo-canvas.c ... */
-+	return best / item->canvas->pixels_per_unit_x;
- }
- 
- static void
-@@ -1567,8 +1574,8 @@
- 		width = text->clip_width;
- 		height = text->clip_height;
- 	} else {
--		width = text->max_width / item->canvas->pixels_per_unit;
--		height = text->height / item->canvas->pixels_per_unit;
-+		width = text->max_width / item->canvas->pixels_per_unit_x;
-+		height = text->height / item->canvas->pixels_per_unit_y;
- 	}
- 
- 	switch (text->anchor) {
-Index: foo-canvas-widget.c
-===================================================================
-RCS file: /cvs/gnome/foocanvas/libfoocanvas/foo-canvas-widget.c,v
-retrieving revision 1.5
-diff -u -w -r1.5 foo-canvas-widget.c
---- foo-canvas-widget.c	13 May 2005 03:34:36 -0000	1.5
-+++ foo-canvas-widget.c	19 Oct 2006 08:48:55 -0000
-@@ -1,3 +1,4 @@
-+/*  Last edited: May 11 11:42 2004 (rnc) */
- /*
-  * Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation
-  * All rights reserved.
-@@ -456,8 +457,8 @@
- 			witem->cwidth = (int) (witem->width + 0.5);
- 			witem->cheight = (int) (witem->height + 0.5);
- 		} else {
--			witem->cwidth = (int) (witem->width * item->canvas->pixels_per_unit + 0.5);
--			witem->cheight = (int) (witem->height * item->canvas->pixels_per_unit + 0.5);
-+			witem->cwidth = (int) (witem->width * item->canvas->pixels_per_unit_x + 0.5);
-+			witem->cheight = (int) (witem->height * item->canvas->pixels_per_unit_y + 0.5);
- 		}
- 
- 		gtk_widget_set_usize (witem->widget, witem->cwidth, witem->cheight);
-@@ -516,8 +517,8 @@
- 
- 	foo_canvas_c2w (item->canvas, witem->cx, witem->cy, &x1, &y1);
- 
--	x2 = x1 + (witem->cwidth - 1) / item->canvas->pixels_per_unit;
--	y2 = y1 + (witem->cheight - 1) / item->canvas->pixels_per_unit;
-+	x2 = x1 + (witem->cwidth - 1) / item->canvas->pixels_per_unit_x;
-+	y2 = y1 + (witem->cheight - 1) / item->canvas->pixels_per_unit_y;
- 
- 	/* Is point inside widget bounds? */
- 
-Index: foo-canvas.c
-===================================================================
-RCS file: /cvs/gnome/foocanvas/libfoocanvas/foo-canvas.c,v
-retrieving revision 1.26
-diff -u -w -r1.26 foo-canvas.c
---- foo-canvas.c	14 Mar 2006 00:13:44 -0000	1.26
-+++ foo-canvas.c	19 Oct 2006 08:48:55 -0000
-@@ -1,3 +1,4 @@
-+/*  Last edited: Oct 18 18:59 2006 (rds) */
- /* -*- Mode: C; tab-width: 8; indent-tabs-mode: 8; c-basic-offset: 8 -*- */
- /*
-  * Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation
-@@ -295,6 +296,7 @@
- 	}
- }
- 
-+
- /* Destroy handler for canvas items */
- static void
- foo_canvas_item_destroy (GtkObject *object)
-@@ -339,10 +341,8 @@
- 
- 		if (item->parent)
- 			group_remove (FOO_CANVAS_GROUP (item->parent), item);
--
- 		item->canvas = NULL;
- 	}
--
- 	GTK_OBJECT_CLASS (item_parent_class)->destroy (object);
- }
- 
-@@ -1370,7 +1370,7 @@
- 	group = FOO_CANVAS_GROUP (item);
- 
- 	(* group_parent_class->update) (item, i2w_dx, i2w_dy, flags);
--
-+       if(item->object.flags & FOO_CANVAS_ITEM_VISIBLE){ 
- 	bbox_x0 = 0;
- 	bbox_y0 = 0;
- 	bbox_x1 = 0;
-@@ -1398,6 +1398,8 @@
- 	item->y1 = bbox_y0;
- 	item->x2 = bbox_x1;
- 	item->y2 = bbox_y1;
-+        } 
-+        return ;
- }
- 
- /* Unrealize handler for canvas groups */
-@@ -1540,10 +1542,10 @@
- 			has_point = TRUE;
- 		} else
- 			has_point = FALSE;
--
-+		/* guessing that the x factor is OK here. RNGC */
- 		if (has_point
- 		    && point_item
--		    && ((int) (dist * item->canvas->pixels_per_unit + 0.5)
-+		    && ((int) (dist * item->canvas->pixels_per_unit_x + 0.5)
- 			<= item->canvas->close_enough)) {
- 			best = dist;
- 			*actual_item = point_item;
-@@ -2080,7 +2082,8 @@
- 	canvas->scroll_x2 = canvas->layout.width;
- 	canvas->scroll_y2 = canvas->layout.height;
- 
--	canvas->pixels_per_unit = 1.0;
-+	canvas->pixels_per_unit_x = 1.0;
-+	canvas->pixels_per_unit_y = 1.0;
- 
- 	canvas->pick_event.type = GDK_LEAVE_NOTIFY;
- 	canvas->pick_event.crossing.x = 0;
-@@ -2302,8 +2305,8 @@
- 	canvas_width = GTK_WIDGET (canvas)->allocation.width;
- 	canvas_height = GTK_WIDGET (canvas)->allocation.height;
- 
--	scroll_width = floor ((canvas->scroll_x2 - canvas->scroll_x1) * canvas->pixels_per_unit + 0.5);
--	scroll_height = floor ((canvas->scroll_y2 - canvas->scroll_y1) * canvas->pixels_per_unit + 0.5);
-+	scroll_width = floor ((canvas->scroll_x2 - canvas->scroll_x1) * canvas->pixels_per_unit_x + 0.5);
-+	scroll_height = floor ((canvas->scroll_y2 - canvas->scroll_y1) * canvas->pixels_per_unit_y + 0.5);
- 
- 	right_limit = scroll_width - canvas_width;
- 	bottom_limit = scroll_height - canvas_height;
-@@ -3101,15 +3104,35 @@
- 
- /**
-  * foo_canvas_set_pixels_per_unit:
-- * @canvas: A canvas.
-+ * @canvas: A canvas
-  * @n: The number of pixels that correspond to one canvas unit.
-  *
-  * Sets the zooming factor of a canvas by specifying the number of pixels that
-  * correspond to one canvas unit.
-+ * This is retained for backwards compatibility and just calls
-+ * foo_canvas_set_pixels_per_unit_xy, passing the number of pixels/unit twice.
-  **/
- void
- foo_canvas_set_pixels_per_unit (FooCanvas *canvas, double n)
- {
-+  foo_canvas_set_pixels_per_unit_xy(canvas, n, n);
-+  return;
-+}
-+
-+
-+/**
-+ * foo_canvas_set_pixels_per_unit_xy:
-+ * @canvas: A canvas.
-+ * @x: The number of pixels that correspond to one canvas unit on the x axis.
-+ * @y: The number of pixels that correspond to one canvas unit on the y axis.
-+ *
-+ * Sets the zooming factor of a canvas by specifying the number of pixels that
-+ * correspond to one canvas unit.
-+ * Having two zooming factors enables asymmetric zooming.
-+ **/
-+void
-+foo_canvas_set_pixels_per_unit_xy (FooCanvas *canvas, double x, double y)
-+{
- 	GtkWidget *widget;
- 	double cx, cy;
- 	int x1, y1;
-@@ -3119,7 +3142,8 @@
- 	gint attributes_mask;
- 
- 	g_return_if_fail (FOO_IS_CANVAS (canvas));
--	g_return_if_fail (n > FOO_CANVAS_EPSILON);
-+	/* guessing that the x factor is OK here.  RNCG */
-+	g_return_if_fail (x > FOO_CANVAS_EPSILON);
- 
- 	widget = GTK_WIDGET (canvas);
- 
-@@ -3127,14 +3151,15 @@
- 	center_y = widget->allocation.height / 2;
- 
- 	/* Find the coordinates of the screen center in units. */
--	cx = (canvas->layout.hadjustment->value + center_x) / canvas->pixels_per_unit + canvas->scroll_x1 + canvas->zoom_xofs;
--	cy = (canvas->layout.vadjustment->value + center_y) / canvas->pixels_per_unit + canvas->scroll_y1 + canvas->zoom_yofs;
-+	cx = (canvas->layout.hadjustment->value + center_x) / canvas->pixels_per_unit_x + canvas->scroll_x1 + canvas->zoom_xofs;
-+	cy = (canvas->layout.vadjustment->value + center_y) / canvas->pixels_per_unit_y + canvas->scroll_y1 + canvas->zoom_yofs;
- 
- 	/* Now calculate the new offset of the upper left corner. (round not truncate) */
--	x1 = ((cx - canvas->scroll_x1) * n) - center_x + .5;
--	y1 = ((cy - canvas->scroll_y1) * n) - center_y + .5;
-+	x1 = ((cx - canvas->scroll_x1) * x) - center_x + .5;
-+	y1 = ((cy - canvas->scroll_y1) * y) - center_y + .5;
- 
--	canvas->pixels_per_unit = n;
-+	canvas->pixels_per_unit_x = x;
-+	canvas->pixels_per_unit_y = y;
- 
- 	if (!(canvas->root->object.flags & FOO_CANVAS_ITEM_NEED_DEEP_UPDATE)) {
- 		canvas->root->object.flags |= FOO_CANVAS_ITEM_NEED_DEEP_UPDATE;
-@@ -3268,7 +3293,8 @@
- 	foo_canvas_w2c (canvas, x, y, &cx, &cy);
- 
- 	dist = foo_canvas_item_invoke_point (canvas->root, x, y, cx, cy, &item);
--	if ((int) (dist * canvas->pixels_per_unit + 0.5) <= canvas->close_enough)
-+	/* guessing the x factor is OK here.  RNGC */
-+	if ((int) (dist * canvas->pixels_per_unit_x + 0.5) <= canvas->close_enough)
- 		return item;
- 	else
- 		return NULL;
-@@ -3331,16 +3357,17 @@
- void
- foo_canvas_w2c (FooCanvas *canvas, double wx, double wy, int *cx, int *cy)
- {
--	double zoom;
-+	double zoom_x, zoom_y;
- 
- 	g_return_if_fail (FOO_IS_CANVAS (canvas));
- 	
--	zoom = canvas->pixels_per_unit;
-+	zoom_x = canvas->pixels_per_unit_x;
-+	zoom_y = canvas->pixels_per_unit_y;
- 	
- 	if (cx)
--		*cx = floor ((wx - canvas->scroll_x1)*zoom + canvas->zoom_xofs + 0.5);
-+		*cx = floor ((wx - canvas->scroll_x1)*zoom_x + canvas->zoom_xofs + 0.5);
- 	if (cy)
--		*cy = floor ((wy - canvas->scroll_y1)*zoom + canvas->zoom_yofs + 0.5);
-+		*cy = floor ((wy - canvas->scroll_y1)*zoom_y + canvas->zoom_yofs + 0.5);
- }
- 
- /**
-@@ -3380,16 +3407,17 @@
- void
- foo_canvas_w2c_d (FooCanvas *canvas, double wx, double wy, double *cx, double *cy)
- {
--	double zoom;
-+	double zoom_x, zoom_y;
- 
- 	g_return_if_fail (FOO_IS_CANVAS (canvas));
- 
--	zoom = canvas->pixels_per_unit;
-+	zoom_x = canvas->pixels_per_unit_x;
-+	zoom_y = canvas->pixels_per_unit_y;
- 	
- 	if (cx)
--		*cx = (wx - canvas->scroll_x1)*zoom + canvas->zoom_xofs;
-+		*cx = (wx - canvas->scroll_x1)*zoom_x + canvas->zoom_xofs;
- 	if (cy)
--		*cy = (wy - canvas->scroll_y1)*zoom + canvas->zoom_yofs;
-+		*cy = (wy - canvas->scroll_y1)*zoom_y + canvas->zoom_yofs;
- }
- 
- 
-@@ -3406,16 +3434,17 @@
- void
- foo_canvas_c2w (FooCanvas *canvas, int cx, int cy, double *wx, double *wy)
- {
--	double zoom;
-+	double zoom_x, zoom_y;
- 
- 	g_return_if_fail (FOO_IS_CANVAS (canvas));
- 
--	zoom = canvas->pixels_per_unit;
-+	zoom_x = canvas->pixels_per_unit_x;
-+	zoom_y = canvas->pixels_per_unit_y;
- 	
- 	if (wx)
--		*wx = (cx - canvas->zoom_xofs)/zoom + canvas->scroll_x1;
-+		*wx = (cx - canvas->zoom_xofs)/zoom_x + canvas->scroll_x1;
- 	if (wy)
--		*wy = (cy - canvas->zoom_yofs)/zoom + canvas->scroll_y1;
-+		*wy = (cy - canvas->zoom_yofs)/zoom_y + canvas->scroll_y1;
- }
- 
- 
-@@ -3441,11 +3470,11 @@
- 
- 	if (worldx)
- 		*worldx = canvas->scroll_x1 + ((winx - canvas->zoom_xofs)
--					       / canvas->pixels_per_unit);
-+					       / canvas->pixels_per_unit_x);
- 
- 	if (worldy)
- 		*worldy = canvas->scroll_y1 + ((winy - canvas->zoom_yofs)
--					       / canvas->pixels_per_unit);
-+					       / canvas->pixels_per_unit_y);
- }
- 
- 
-@@ -3468,10 +3497,10 @@
- 	g_return_if_fail (FOO_IS_CANVAS (canvas));
- 
- 	if (winx)
--		*winx = (canvas->pixels_per_unit)*(worldx - canvas->scroll_x1) + canvas->zoom_xofs;
-+		*winx = (canvas->pixels_per_unit_x)*(worldx - canvas->scroll_x1) + canvas->zoom_xofs;
- 
- 	if (winy)
--		*winy = (canvas->pixels_per_unit)*(worldy - canvas->scroll_y1) + canvas->zoom_yofs;
-+		*winy = (canvas->pixels_per_unit_y)*(worldy - canvas->scroll_y1) + canvas->zoom_yofs;
- }
- 
- 
-@@ -3999,3 +4028,11 @@
-                                        FOO_TYPE_CANVAS_ITEM,
-                                        foo_canvas_item_accessible_factory_get_type ());
- }
-+
-+void 
-+foo_canvas_zmap(void)
-+{
-+  /* do nothing */
-+}
-+
-+/*  Last edited: Feb 14 15:21 2005 (rds) */
-Index: foo-canvas.h
-===================================================================
-RCS file: /cvs/gnome/foocanvas/libfoocanvas/foo-canvas.h,v
-retrieving revision 1.4
-diff -u -w -r1.4 foo-canvas.h
---- foo-canvas.h	2 Mar 2004 14:32:55 -0000	1.4
-+++ foo-canvas.h	19 Oct 2006 08:48:55 -0000
-@@ -1,3 +1,4 @@
-+/*  Last edited: Jun 15 08:20 2005 (edgrif) */
- /* -*- Mode: C; tab-width: 8; indent-tabs-mode: 8; c-basic-offset: 8 -*- */
- /*
-  * Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation
-@@ -371,7 +372,8 @@
- 	double scroll_x2, scroll_y2;
- 
- 	/* Scaling factor to be used for display */
--	double pixels_per_unit;
-+	double pixels_per_unit_x;
-+	double pixels_per_unit_y;
- 
- 	/* Idle handler ID */
- 	guint idle_id;
-@@ -456,6 +458,10 @@
- /* Sets the number of pixels that correspond to one unit in world coordinates */
- void foo_canvas_set_pixels_per_unit (FooCanvas *canvas, double n);
- 
-+/* Sets the number of  pixels corresponding to one unit in world coordinates
-+ * separately on x and y axes, allowing asymmetric zooming. */
-+void foo_canvas_set_pixels_per_unit_xy (FooCanvas *canvas, double x, double y);
-+
- /* Wether the canvas centers the scroll region if it is smaller than the window  */
- void foo_canvas_set_center_scroll_region (FooCanvas *canvas, gboolean center_scroll_region);
- 
-@@ -525,6 +531,10 @@
-  */
- void foo_canvas_set_stipple_origin (FooCanvas *canvas, GdkGC *gc);
- 
-+void foo_canvas_zmap(void);
-+
- G_END_DECLS
- 
-+
- #endif
-+
-Index: libfoocanvas.h
-===================================================================
-RCS file: /cvs/gnome/foocanvas/libfoocanvas/libfoocanvas.h,v
-retrieving revision 1.1.1.1
-diff -u -w -r1.1.1.1 libfoocanvas.h
---- libfoocanvas.h	11 Feb 2002 04:23:32 -0000	1.1.1.1
-+++ libfoocanvas.h	19 Oct 2006 08:48:55 -0000
-@@ -1,3 +1,4 @@
-+/*  Last edited: Aug  1 11:42 2006 (edgrif) */
- /*
-  * Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation
-  * All rights reserved.
-@@ -34,6 +35,9 @@
- #include <libfoocanvas/foo-canvas-widget.h>
- #include <libfoocanvas/foo-canvas-rect-ellipse.h>
- #include <libfoocanvas/foo-canvas-util.h>
-+
-+#include <libfoocanvas/foozmap-canvas-line-glyph.h>
-+
- 
- G_BEGIN_DECLS
- 
diff --git a/foocanvas/support/libfoocanvas-20070831.tar.gz b/foocanvas/support/libfoocanvas-20070831.tar.gz
deleted file mode 100755
index f76153bffaae089c2a3c5e66a090e48f0c190e0e..0000000000000000000000000000000000000000
Binary files a/foocanvas/support/libfoocanvas-20070831.tar.gz and /dev/null differ
diff --git a/foocanvas/support/libfoocanvas-20070905.patch b/foocanvas/support/libfoocanvas-20070905.patch
deleted file mode 100755
index c31559fccb14b6403bdcb67eed078155e8ad5506..0000000000000000000000000000000000000000
--- a/foocanvas/support/libfoocanvas-20070905.patch
+++ /dev/null
@@ -1,1010 +0,0 @@
-Only in ./: aclocal.m4
-diff -u -r ../foocanvas.latest/autogen.sh ./autogen.sh
---- ../foocanvas.latest/autogen.sh	2007-09-05 16:43:23.933000000 +0100
-+++ ./autogen.sh	2007-09-05 16:43:25.809000000 +0100
-@@ -41,5 +41,5 @@
-   exit 1
- fi
- 
--REQUIRED_AUTOMAKE_VERSION=1.5
-+REQUIRED_AUTOMAKE_VERSION=1.9
- GNOME_DATADIR="$gnome_datadir" USE_GNOME2_MACROS=1 . $gnome_autogen
-Only in ./: autom4te.cache
-Only in ./: config.guess
-Only in ./: config.h
-Only in ./: config.h.in
-Only in ./: config.log
-Only in ./: config.status
-Only in ./: config.sub
-Only in ./: configure
-diff -u -r ../foocanvas.latest/configure.in ./configure.in
---- ../foocanvas.latest/configure.in	2007-09-05 16:43:23.880000000 +0100
-+++ ./configure.in	2007-09-05 16:43:25.819000000 +0100
-@@ -3,7 +3,7 @@
- AC_CONFIG_SRCDIR([libfoocanvas/foo-canvas.c])
- 
- AC_CONFIG_HEADERS([config.h])
--AM_INIT_AUTOMAKE([dist-bz2])
-+AM_INIT_AUTOMAKE([])
- 
- AM_MAINTAINER_MODE
- 
-Only in ./demos: canvas-arrowhead.o
-Only in ./demos: canvas_demo
-Only in ./demos: canvas-features.o
-Only in ./demos: canvas-fifteen.o
-Only in ./demos: canvas.o
-Only in ./demos: canvas-primitives.o
-Only in ./demos: canvas-scalability.o
-Only in ./demos: .deps
-Only in ./demos: .libs
-Only in ./demos: Makefile
-Only in ./demos: Makefile.in
-Only in ./: depcomp
-Only in ./: gtk-doc.make
-Only in ./: INSTALL
-Only in ./: install-sh
-Only in ./libfoocanvas: .deps
-diff -u -r ../foocanvas.latest/libfoocanvas/foo-canvas.c ./libfoocanvas/foo-canvas.c
---- ../foocanvas.latest/libfoocanvas/foo-canvas.c	2007-09-05 16:43:23.013000000 +0100
-+++ ./libfoocanvas/foo-canvas.c	2007-09-05 17:28:06.622000000 +0100
-@@ -78,7 +78,7 @@
- 
- static void foo_canvas_request_update (FooCanvas      *canvas);
- static void group_add                   (FooCanvasGroup *group,
--					 FooCanvasItem  *item);
-+					 FooCanvasItem  *item, FooCanvasGroupPosition position);
- static void group_remove                (FooCanvasGroup *group,
- 					 FooCanvasItem  *item);
- static void redraw_and_repick_if_mapped (FooCanvasItem *item);
-@@ -190,17 +190,56 @@
- }
- 
- 
-+/**
-+ * foo_canvas_item_new:
-+ * @parent: The parent group for the new item.
-+ * @type: The object type of the item.
-+ * @position: puts new item at bottom (FOO_CANVAS_GROUP_BOTTOM) or top (FOO_CANVAS_GROUP_TOP)
-+ * of parents stack of child items.
-+ * @first_arg_name: A list of object argument name/value pairs, NULL-terminated,
-+ * used to configure the item.  For example, "fill_color", "black",
-+ * "width_units", 5.0, NULL.
-+ * @Varargs:
-+ *
-+ * Creates a new canvas item with @parent as its parent group.  The item is
-+ * created at the top of its parent's stack, and starts up as visible.  The item
-+ * is of the specified @type, for example, it can be
-+ * foo_canvas_rect_get_type().  The list of object arguments/value pairs is
-+ * used to configure the item.
-+ *
-+ * Return value: The newly-created item.
-+ **/
-+FooCanvasItem *
-+foo_canvas_item_new_position (FooCanvasGroup *parent, GType type, FooCanvasGroupPosition position,
-+			      const gchar *first_arg_name, ...)
-+{
-+	FooCanvasItem *item;
-+	va_list args;
-+
-+	g_return_val_if_fail (FOO_IS_CANVAS_GROUP (parent), NULL);
-+	g_return_val_if_fail (g_type_is_a (type, foo_canvas_item_get_type ()), NULL);
-+
-+	item = FOO_CANVAS_ITEM (g_object_new (type, NULL));
-+
-+	va_start (args, first_arg_name);
-+	foo_canvas_item_construct_position (item, parent, position, first_arg_name, args);
-+	va_end (args);
-+
-+	return item;
-+}
-+
-+
- /* Performs post-creation operations on a canvas item (adding it to its parent
-  * group, etc.)
-  */
- static void
--item_post_create_setup (FooCanvasItem *item)
-+item_post_create_setup (FooCanvasItem *item, FooCanvasGroupPosition position)
- {
- 	GtkObject *obj;
- 
- 	obj = GTK_OBJECT (item);
- 
--	group_add (FOO_CANVAS_GROUP (item->parent), item);
-+	group_add (FOO_CANVAS_GROUP (item->parent), item, position);
- 
- 	redraw_and_repick_if_mapped (item);
- }
-@@ -224,7 +263,7 @@
- 		} else if (g_value_get_object (value)) {
- 			item->parent = FOO_CANVAS_ITEM (g_value_get_object (value));
- 			item->canvas = item->parent->canvas;
--			item_post_create_setup (item);
-+			item_post_create_setup (item, FOO_CANVAS_GROUP_TOP);
- 		}
- 		break;
- 	case ITEM_PROP_VISIBLE:
-@@ -282,7 +321,34 @@
- 
- 	g_object_set_valist (G_OBJECT (item), first_arg_name, args);
- 
--	item_post_create_setup (item);
-+	item_post_create_setup (item, FOO_CANVAS_GROUP_TOP);
-+}
-+
-+
-+/**
-+ * foo_canvas_item_construct_position:
-+ * @item: An unconstructed canvas item.
-+ * @parent: The parent group for the item.
-+ * @position: puts new item at bottom (FOO_CANVAS_GROUP_BOTTOM) or top (FOO_CANVAS_GROUP_TOP)
-+ * of parents stack of child items.
-+ * @first_arg_name: The name of the first argument for configuring the item.
-+ * @args: The list of arguments used to configure the item.
-+ *
-+ * Constructs a canvas item; meant for use only by item implementations.
-+ **/
-+void
-+foo_canvas_item_construct_position (FooCanvasItem *item, FooCanvasGroup *parent, FooCanvasGroupPosition position,
-+				    const gchar *first_arg_name, va_list args)
-+{
-+	g_return_if_fail (FOO_IS_CANVAS_GROUP (parent));
-+	g_return_if_fail (FOO_IS_CANVAS_ITEM (item));
-+
-+	item->parent = FOO_CANVAS_ITEM (parent);
-+	item->canvas = item->parent->canvas;
-+
-+	g_object_set_valist (G_OBJECT (item), first_arg_name, args);
-+
-+	item_post_create_setup (item, position);
- }
- 
- 
-@@ -295,6 +361,7 @@
- 	}
- }
- 
-+
- /* Destroy handler for canvas items */
- static void
- foo_canvas_item_destroy (GtkObject *object)
-@@ -339,10 +406,8 @@
- 
- 		if (item->parent)
- 			group_remove (FOO_CANVAS_GROUP (item->parent), item);
--
- 		item->canvas = NULL;
- 	}
--
- 	GTK_OBJECT_CLASS (item_parent_class)->destroy (object);
- }
- 
-@@ -992,7 +1057,7 @@
- 	group_remove (FOO_CANVAS_GROUP (item->parent), item);
- 	item->parent = FOO_CANVAS_ITEM (new_group);
- 	/* item->canvas is unchanged.  */
--	group_add (new_group, item);
-+	group_add (new_group, item, FOO_CANVAS_GROUP_TOP);
- 
- 	/* Redraw and repick */
- 
-@@ -1376,6 +1441,7 @@
- 	bbox_x1 = 0;
- 	bbox_y1 = 0;
- 
-+       if(item->object.flags & FOO_CANVAS_ITEM_VISIBLE){ 
- 	for (list = group->item_list; list; list = list->next) {
- 		i = list->data;
- 
-@@ -1394,10 +1460,14 @@
- 			bbox_y1 = MAX (bbox_y1, i->y2);
- 		}
- 	}
-+
-+       }
- 	item->x1 = bbox_x0;
- 	item->y1 = bbox_y0;
- 	item->x2 = bbox_x1;
- 	item->y2 = bbox_y1;
-+
-+        return ;
- }
- 
- /* Unrealize handler for canvas groups */
-@@ -1540,10 +1610,10 @@
- 			has_point = TRUE;
- 		} else
- 			has_point = FALSE;
--
-+		/* guessing that the x factor is OK here. RNGC */
- 		if (has_point
- 		    && point_item
--		    && ((int) (dist * item->canvas->pixels_per_unit + 0.5)
-+		    && ((int) (dist * item->canvas->pixels_per_unit_x + 0.5)
- 			<= item->canvas->close_enough)) {
- 			best = dist;
- 			*actual_item = point_item;
-@@ -1553,7 +1623,7 @@
- 	return best;
- }
- 
--static void
-+void
- foo_canvas_group_translate (FooCanvasItem *item, double dx, double dy)
- {
-         FooCanvasGroup *group;
-@@ -1642,16 +1712,30 @@
- 
- /* Adds an item to a group */
- static void
--group_add (FooCanvasGroup *group, FooCanvasItem *item)
-+group_add (FooCanvasGroup *group, FooCanvasItem *item, FooCanvasGroupPosition position)
- {
- 	g_object_ref (GTK_OBJECT (item));
- 	gtk_object_sink (GTK_OBJECT (item));
- 
--	if (!group->item_list) {
--		group->item_list = g_list_append (group->item_list, item);
--		group->item_list_end = group->item_list;
--	} else
--		group->item_list_end = g_list_append (group->item_list_end, item)->next;
-+	if (position == FOO_CANVAS_GROUP_TOP)
-+	  {
-+	    if (!group->item_list) {
-+	      group->item_list = g_list_append (group->item_list, item);
-+	      group->item_list_end = group->item_list;
-+	    } else
-+	      group->item_list_end = g_list_append (group->item_list_end, item)->next;
-+	  }
-+	else
-+	  {
-+	    if (!group->item_list) {
-+	      group->item_list = g_list_prepend (group->item_list, item);
-+	      group->item_list_end = group->item_list;
-+	    } else
-+	      group->item_list = g_list_prepend (group->item_list, item);
-+	  }
-+
-+
-+
- 
- 	if (item->object.flags & FOO_CANVAS_ITEM_VISIBLE &&
- 	    group->item.object.flags & FOO_CANVAS_ITEM_MAPPED) {
-@@ -2080,7 +2164,8 @@
- 	canvas->scroll_x2 = canvas->layout.width;
- 	canvas->scroll_y2 = canvas->layout.height;
- 
--	canvas->pixels_per_unit = 1.0;
-+	canvas->pixels_per_unit_x = 1.0;
-+	canvas->pixels_per_unit_y = 1.0;
- 
- 	canvas->pick_event.type = GDK_LEAVE_NOTIFY;
- 	canvas->pick_event.crossing.x = 0;
-@@ -2302,8 +2387,8 @@
- 	canvas_width = GTK_WIDGET (canvas)->allocation.width;
- 	canvas_height = GTK_WIDGET (canvas)->allocation.height;
- 
--	scroll_width = floor ((canvas->scroll_x2 - canvas->scroll_x1) * canvas->pixels_per_unit + 0.5);
--	scroll_height = floor ((canvas->scroll_y2 - canvas->scroll_y1) * canvas->pixels_per_unit + 0.5);
-+	scroll_width = floor ((canvas->scroll_x2 - canvas->scroll_x1) * canvas->pixels_per_unit_x + 0.5);
-+	scroll_height = floor ((canvas->scroll_y2 - canvas->scroll_y1) * canvas->pixels_per_unit_y + 0.5);
- 
- 	right_limit = scroll_width - canvas_width;
- 	bottom_limit = scroll_height - canvas_height;
-@@ -3101,15 +3186,35 @@
- 
- /**
-  * foo_canvas_set_pixels_per_unit:
-- * @canvas: A canvas.
-+ * @canvas: A canvas
-  * @n: The number of pixels that correspond to one canvas unit.
-  *
-  * Sets the zooming factor of a canvas by specifying the number of pixels that
-  * correspond to one canvas unit.
-+ * This is retained for backwards compatibility and just calls
-+ * foo_canvas_set_pixels_per_unit_xy, passing the number of pixels/unit twice.
-  **/
- void
- foo_canvas_set_pixels_per_unit (FooCanvas *canvas, double n)
- {
-+  foo_canvas_set_pixels_per_unit_xy(canvas, n, n);
-+  return;
-+}
-+
-+
-+/**
-+ * foo_canvas_set_pixels_per_unit_xy:
-+ * @canvas: A canvas.
-+ * @x: The number of pixels that correspond to one canvas unit on the x axis.
-+ * @y: The number of pixels that correspond to one canvas unit on the y axis.
-+ *
-+ * Sets the zooming factor of a canvas by specifying the number of pixels that
-+ * correspond to one canvas unit.
-+ * Having two zooming factors enables asymmetric zooming.
-+ **/
-+void
-+foo_canvas_set_pixels_per_unit_xy (FooCanvas *canvas, double x, double y)
-+{
- 	GtkWidget *widget;
- 	double cx, cy;
- 	int x1, y1;
-@@ -3119,7 +3224,8 @@
- 	gint attributes_mask;
- 
- 	g_return_if_fail (FOO_IS_CANVAS (canvas));
--	g_return_if_fail (n > FOO_CANVAS_EPSILON);
-+	/* guessing that the x factor is OK here.  RNCG */
-+	g_return_if_fail (x > FOO_CANVAS_EPSILON);
- 
- 	widget = GTK_WIDGET (canvas);
- 
-@@ -3127,14 +3233,15 @@
- 	center_y = widget->allocation.height / 2;
- 
- 	/* Find the coordinates of the screen center in units. */
--	cx = (canvas->layout.hadjustment->value + center_x) / canvas->pixels_per_unit + canvas->scroll_x1 + canvas->zoom_xofs;
--	cy = (canvas->layout.vadjustment->value + center_y) / canvas->pixels_per_unit + canvas->scroll_y1 + canvas->zoom_yofs;
-+	cx = (canvas->layout.hadjustment->value + center_x) / canvas->pixels_per_unit_x + canvas->scroll_x1 + canvas->zoom_xofs;
-+	cy = (canvas->layout.vadjustment->value + center_y) / canvas->pixels_per_unit_y + canvas->scroll_y1 + canvas->zoom_yofs;
- 
- 	/* Now calculate the new offset of the upper left corner. (round not truncate) */
--	x1 = ((cx - canvas->scroll_x1) * n) - center_x + .5;
--	y1 = ((cy - canvas->scroll_y1) * n) - center_y + .5;
-+	x1 = ((cx - canvas->scroll_x1) * x) - center_x + .5;
-+	y1 = ((cy - canvas->scroll_y1) * y) - center_y + .5;
- 
--	canvas->pixels_per_unit = n;
-+	canvas->pixels_per_unit_x = x;
-+	canvas->pixels_per_unit_y = y;
- 
- 	if (!(canvas->root->object.flags & FOO_CANVAS_ITEM_NEED_DEEP_UPDATE)) {
- 		canvas->root->object.flags |= FOO_CANVAS_ITEM_NEED_DEEP_UPDATE;
-@@ -3268,7 +3375,8 @@
- 	foo_canvas_w2c (canvas, x, y, &cx, &cy);
- 
- 	dist = foo_canvas_item_invoke_point (canvas->root, x, y, cx, cy, &item);
--	if ((int) (dist * canvas->pixels_per_unit + 0.5) <= canvas->close_enough)
-+	/* guessing the x factor is OK here.  RNGC */
-+	if ((int) (dist * canvas->pixels_per_unit_x + 0.5) <= canvas->close_enough)
- 		return item;
- 	else
- 		return NULL;
-@@ -3331,16 +3439,17 @@
- void
- foo_canvas_w2c (FooCanvas *canvas, double wx, double wy, int *cx, int *cy)
- {
--	double zoom;
-+	double zoom_x, zoom_y;
- 
- 	g_return_if_fail (FOO_IS_CANVAS (canvas));
- 	
--	zoom = canvas->pixels_per_unit;
-+	zoom_x = canvas->pixels_per_unit_x;
-+	zoom_y = canvas->pixels_per_unit_y;
- 	
- 	if (cx)
--		*cx = floor ((wx - canvas->scroll_x1)*zoom + canvas->zoom_xofs + 0.5);
-+		*cx = floor ((wx - canvas->scroll_x1)*zoom_x + canvas->zoom_xofs + 0.5);
- 	if (cy)
--		*cy = floor ((wy - canvas->scroll_y1)*zoom + canvas->zoom_yofs + 0.5);
-+		*cy = floor ((wy - canvas->scroll_y1)*zoom_y + canvas->zoom_yofs + 0.5);
- }
- 
- /**
-@@ -3380,16 +3489,17 @@
- void
- foo_canvas_w2c_d (FooCanvas *canvas, double wx, double wy, double *cx, double *cy)
- {
--	double zoom;
-+	double zoom_x, zoom_y;
- 
- 	g_return_if_fail (FOO_IS_CANVAS (canvas));
- 
--	zoom = canvas->pixels_per_unit;
-+	zoom_x = canvas->pixels_per_unit_x;
-+	zoom_y = canvas->pixels_per_unit_y;
- 	
- 	if (cx)
--		*cx = (wx - canvas->scroll_x1)*zoom + canvas->zoom_xofs;
-+		*cx = (wx - canvas->scroll_x1)*zoom_x + canvas->zoom_xofs;
- 	if (cy)
--		*cy = (wy - canvas->scroll_y1)*zoom + canvas->zoom_yofs;
-+		*cy = (wy - canvas->scroll_y1)*zoom_y + canvas->zoom_yofs;
- }
- 
- 
-@@ -3406,16 +3516,17 @@
- void
- foo_canvas_c2w (FooCanvas *canvas, int cx, int cy, double *wx, double *wy)
- {
--	double zoom;
-+	double zoom_x, zoom_y;
- 
- 	g_return_if_fail (FOO_IS_CANVAS (canvas));
- 
--	zoom = canvas->pixels_per_unit;
-+	zoom_x = canvas->pixels_per_unit_x;
-+	zoom_y = canvas->pixels_per_unit_y;
- 	
- 	if (wx)
--		*wx = (cx - canvas->zoom_xofs)/zoom + canvas->scroll_x1;
-+		*wx = (cx - canvas->zoom_xofs)/zoom_x + canvas->scroll_x1;
- 	if (wy)
--		*wy = (cy - canvas->zoom_yofs)/zoom + canvas->scroll_y1;
-+		*wy = (cy - canvas->zoom_yofs)/zoom_y + canvas->scroll_y1;
- }
- 
- 
-@@ -3441,11 +3552,11 @@
- 
- 	if (worldx)
- 		*worldx = canvas->scroll_x1 + ((winx - canvas->zoom_xofs)
--					       / canvas->pixels_per_unit);
-+					       / canvas->pixels_per_unit_x);
- 
- 	if (worldy)
- 		*worldy = canvas->scroll_y1 + ((winy - canvas->zoom_yofs)
--					       / canvas->pixels_per_unit);
-+					       / canvas->pixels_per_unit_y);
- }
- 
- 
-@@ -3468,10 +3579,10 @@
- 	g_return_if_fail (FOO_IS_CANVAS (canvas));
- 
- 	if (winx)
--		*winx = (canvas->pixels_per_unit)*(worldx - canvas->scroll_x1) + canvas->zoom_xofs;
-+		*winx = (canvas->pixels_per_unit_x)*(worldx - canvas->scroll_x1) + canvas->zoom_xofs;
- 
- 	if (winy)
--		*winy = (canvas->pixels_per_unit)*(worldy - canvas->scroll_y1) + canvas->zoom_yofs;
-+		*winy = (canvas->pixels_per_unit_y)*(worldy - canvas->scroll_y1) + canvas->zoom_yofs;
- }
- 
- 
-@@ -3999,3 +4110,11 @@
-                                        FOO_TYPE_CANVAS_ITEM,
-                                        foo_canvas_item_accessible_factory_get_type ());
- }
-+
-+void 
-+foo_canvas_zmap(void)
-+{
-+  /* do nothing */
-+}
-+
-+/*  Last edited: Sep  5 17:28 2007 (edgrif) */
-Only in ./libfoocanvas: foo-canvas.c.~1~
-diff -u -r ../foocanvas.latest/libfoocanvas/foo-canvas.h ./libfoocanvas/foo-canvas.h
---- ../foocanvas.latest/libfoocanvas/foo-canvas.h	2007-09-05 16:43:22.583000000 +0100
-+++ ./libfoocanvas/foo-canvas.h	2007-09-05 13:17:27.000000000 +0100
-@@ -1,3 +1,4 @@
-+/*  Last edited: Sep  5 08:49 2007 (edgrif) */
- /* -*- Mode: C; tab-width: 8; indent-tabs-mode: 8; c-basic-offset: 8 -*- */
- /*
-  * Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation
-@@ -101,6 +102,11 @@
- 	FOO_CANVAS_UPDATE_DEEP       = 1 << 1
- };
- 
-+
-+/* Special positions for putting new items at top or bottom of group. */
-+typedef enum {FOO_CANVAS_GROUP_BOTTOM = -1, FOO_CANVAS_GROUP_TOP  = -2} FooCanvasGroupPosition ;
-+
-+
- #define FOO_TYPE_CANVAS_ITEM            (foo_canvas_item_get_type ())
- #define FOO_CANVAS_ITEM(obj)            (GTK_CHECK_CAST ((obj), FOO_TYPE_CANVAS_ITEM, FooCanvasItem))
- #define FOO_CANVAS_ITEM_CLASS(klass)    (GTK_CHECK_CLASS_CAST ((klass), FOO_TYPE_CANVAS_ITEM, FooCanvasItemClass))
-@@ -186,10 +192,16 @@
- FooCanvasItem *foo_canvas_item_new (FooCanvasGroup *parent, GType type,
- 				    const gchar *first_arg_name, ...);
- 
-+FooCanvasItem *foo_canvas_item_new_position (FooCanvasGroup *parent, GType type, FooCanvasGroupPosition position,
-+					     const gchar *first_arg_name, ...);
-+
- /* Constructors for use in derived classes and language wrappers */
- void foo_canvas_item_construct (FooCanvasItem *item, FooCanvasGroup *parent,
- 				const gchar *first_arg_name, va_list args);
- 
-+void foo_canvas_item_construct_position (FooCanvasItem *item, FooCanvasGroup *parent, FooCanvasGroupPosition position,
-+					 const gchar *first_arg_name, va_list args);
-+
- /* Configure an item using the standard Gtk argument mechanism.  The last
-  * argument must be a NULL pointer.
-  */
-@@ -371,7 +383,8 @@
- 	double scroll_x2, scroll_y2;
- 
- 	/* Scaling factor to be used for display */
--	double pixels_per_unit;
-+	double pixels_per_unit_x;
-+	double pixels_per_unit_y;
- 
- 	/* Idle handler ID */
- 	guint idle_id;
-@@ -456,6 +469,10 @@
- /* Sets the number of pixels that correspond to one unit in world coordinates */
- void foo_canvas_set_pixels_per_unit (FooCanvas *canvas, double n);
- 
-+/* Sets the number of  pixels corresponding to one unit in world coordinates
-+ * separately on x and y axes, allowing asymmetric zooming. */
-+void foo_canvas_set_pixels_per_unit_xy (FooCanvas *canvas, double x, double y);
-+
- /* Wether the canvas centers the scroll region if it is smaller than the window  */
- void foo_canvas_set_center_scroll_region (FooCanvas *canvas, gboolean center_scroll_region);
- 
-@@ -525,6 +542,10 @@
-  */
- void foo_canvas_set_stipple_origin (FooCanvas *canvas, GdkGC *gc);
- 
-+void foo_canvas_zmap(void);
-+
- G_END_DECLS
- 
-+
- #endif
-+
-diff -u -r ../foocanvas.latest/libfoocanvas/foo-canvas-line.c ./libfoocanvas/foo-canvas-line.c
---- ../foocanvas.latest/libfoocanvas/foo-canvas-line.c	2007-09-05 16:43:22.766000000 +0100
-+++ ./libfoocanvas/foo-canvas-line.c	2007-09-05 16:43:25.848000000 +0100
-@@ -1,3 +1,4 @@
-+/*  Last edited: Oct 18 18:34 2006 (rds) */
- /*
-  * Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation
-  * All rights reserved.
-@@ -338,7 +339,7 @@
- 	/* Add possible over-estimate for wide lines */
- 
- 	if (line->width_pixels)
--		width = line->width / line->item.canvas->pixels_per_unit;
-+		width = line->width / line->item.canvas->pixels_per_unit_x;
- 	else
- 		width = line->width;
- 
-@@ -466,7 +467,7 @@
- 		return;
- 
- 	if (line->width_pixels)
--		width = line->width / line->item.canvas->pixels_per_unit;
-+		width = line->width / line->item.canvas->pixels_per_unit_x;
- 	else
- 		width = line->width;
- 
-@@ -477,9 +478,9 @@
- 	shape_c = line->shape_c + width / 2.0;
- 
- 	if (line->width_pixels) {
--		shape_a /= line->item.canvas->pixels_per_unit;
--		shape_b /= line->item.canvas->pixels_per_unit;
--		shape_c /= line->item.canvas->pixels_per_unit;
-+		shape_a /= line->item.canvas->pixels_per_unit_x;
-+		shape_b /= line->item.canvas->pixels_per_unit_x;
-+		shape_c /= line->item.canvas->pixels_per_unit_x;
- 	}
- 
- 	shape_a += 0.001;
-@@ -600,7 +601,7 @@
- 	if (line->width_pixels)
- 		width = (int) line->width;
- 	else
--		width = (int) (line->width * line->item.canvas->pixels_per_unit + 0.5);
-+		width = (int) (line->width * line->item.canvas->pixels_per_unit_x + 0.5);
- 
- 	gdk_gc_set_line_attributes (line->gc,
- 				    width,
-@@ -1126,12 +1127,12 @@
- 	 */
- 
- 	if (line->width_pixels)
--		width = line->width / item->canvas->pixels_per_unit;
-+		width = line->width / item->canvas->pixels_per_unit_x;
- 	else
- 		width = line->width;
- 
--	if (width < (1.0 / item->canvas->pixels_per_unit))
--		width = 1.0 / item->canvas->pixels_per_unit;
-+	if (width < (1.0 / item->canvas->pixels_per_unit_x))
-+		width = 1.0 / item->canvas->pixels_per_unit_x;
- 
- 	changed_miter_to_bevel = 0;
- 
-Only in ./libfoocanvas: foo-canvas-line.lo
-Only in ./libfoocanvas: foo-canvas-line.o
-Only in ./libfoocanvas: foo-canvas.lo
-Only in ./libfoocanvas: foo-canvas-marshal.c
-Only in ./libfoocanvas: foo-canvas-marshal.h
-Only in ./libfoocanvas: foo-canvas-marshal.lo
-Only in ./libfoocanvas: foo-canvas-marshal.o
-Only in ./libfoocanvas: foo-canvas.o
-diff -u -r ../foocanvas.latest/libfoocanvas/foo-canvas-pixbuf.c ./libfoocanvas/foo-canvas-pixbuf.c
---- ../foocanvas.latest/libfoocanvas/foo-canvas-pixbuf.c	2007-09-05 16:43:22.898000000 +0100
-+++ ./libfoocanvas/foo-canvas-pixbuf.c	2007-09-05 16:43:25.860000000 +0100
-@@ -1,3 +1,4 @@
-+/*  Last edited: May 11 11:33 2004 (rnc) */
- /* GNOME libraries - GdkPixbuf item for the GNOME canvas
-  *
-  * Copyright (C) 1999 The Free Software Foundation
-@@ -564,13 +565,13 @@
- 	}
- 
- 	if (priv->x_in_pixels) {
--		x = i2w_dx + priv->x / item->canvas->pixels_per_unit;
-+		x = i2w_dx + priv->x / item->canvas->pixels_per_unit_x;
- 	} else {
- 		x = i2w_dx + priv->x;
- 	}
- 
- 	if (priv->y_in_pixels) {
--		y = i2w_dy + priv->y / item->canvas->pixels_per_unit;
-+		y = i2w_dy + priv->y / item->canvas->pixels_per_unit_y;
- 	} else {
- 		y = i2w_dy + priv->y;
- 	}
-@@ -582,7 +583,7 @@
- 	}
- 
- 	if (priv->width_in_pixels)
--		width /= item->canvas->pixels_per_unit;
-+		width /= item->canvas->pixels_per_unit_x;
- 
- 	if (priv->height_set) {
- 		height = priv->height;
-@@ -591,7 +592,7 @@
- 	}
- 
- 	if (priv->height_in_pixels)
--		height /= item->canvas->pixels_per_unit;
-+		height /= item->canvas->pixels_per_unit_y;
- 
- 
- 	switch (priv->anchor) {
-@@ -781,8 +782,8 @@
- 	pixbuf = priv->pixbuf;
- 
- 	*actual_item = item;
--
--	no_hit = item->canvas->pixels_per_unit * 2 + 10;
-+	/* guessing that the x factor is OK here. RNGC */
-+	no_hit = item->canvas->pixels_per_unit_x * 2 + 10;
- 
- 	if (!priv->pixbuf)
- 		return no_hit;
-@@ -823,13 +824,13 @@
- 	priv = gcp->priv;
- 
- 	if (priv->x_in_pixels) {
--		priv->x += dx * item->canvas->pixels_per_unit;
-+		priv->x += dx * item->canvas->pixels_per_unit_x;
- 	} else {
- 		priv->x += dx;
- 	}
- 
- 	if (priv->y_in_pixels) {
--		priv->y += dy * item->canvas->pixels_per_unit;
-+		priv->y += dy * item->canvas->pixels_per_unit_y;
- 	} else {
- 		priv->y += dy;
- 	}
-Only in ./libfoocanvas: foo-canvas-pixbuf.lo
-Only in ./libfoocanvas: foo-canvas-pixbuf.o
-diff -u -r ../foocanvas.latest/libfoocanvas/foo-canvas-polygon.c ./libfoocanvas/foo-canvas-polygon.c
---- ../foocanvas.latest/libfoocanvas/foo-canvas-polygon.c	2007-09-05 16:43:22.744000000 +0100
-+++ ./libfoocanvas/foo-canvas-polygon.c	2007-09-05 16:43:25.872000000 +0100
-@@ -1,3 +1,4 @@
-+/*  Last edited: Oct 19 09:39 2006 (rds) */
- /*
-  * Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation
-  * All rights reserved.
-@@ -276,7 +277,7 @@
- 	/* Add outline width */
- 
- 	if (poly->width_pixels)
--		width = poly->width / poly->item.canvas->pixels_per_unit;
-+		width = poly->width / poly->item.canvas->pixels_per_unit_x;
- 	else
- 		width = poly->width;
- 
-@@ -400,7 +401,7 @@
- 	if (poly->width_pixels)
- 		width = (int) poly->width;
- 	else
--		width = (int) (poly->width * poly->item.canvas->pixels_per_unit + 0.5);
-+		width = (int) (poly->width * poly->item.canvas->pixels_per_unit_x + 0.5);
- 
- 	gdk_gc_set_line_attributes (poly->outline_gc, width,
- 				    GDK_LINE_SOLID, GDK_CAP_ROUND, GDK_JOIN_ROUND);
-@@ -595,15 +596,16 @@
- static void
- get_color_value (FooCanvasPolygon *poly, gulong pixel, GValue *value)
- {
--	GdkColor *color;
-+	GdkColor color;
- 	GdkColormap *colormap;
- 
--	color = g_new (GdkColor, 1);
--	color->pixel = pixel;
-+	//color = g_new (GdkColor, 1);
-+	//color->pixel = pixel;
- 
--	colormap = gtk_widget_get_colormap (GTK_WIDGET (poly));
--	gdk_rgb_find_color (colormap, color);
--	g_value_set_boxed (value, color);
-+	colormap = gtk_widget_get_colormap (GTK_WIDGET (FOO_CANVAS_ITEM(poly)->canvas));
-+	gdk_colormap_query_color(colormap, pixel, &color);
-+	//gdk_rgb_find_color (colormap, color);
-+	g_value_set_boxed (value, &color);
- }
- 
- static void
-@@ -801,7 +803,7 @@
- 
- 	if (poly->outline_set) {
- 		if (poly->width_pixels)
--			width = poly->width / item->canvas->pixels_per_unit;
-+			width = poly->width / item->canvas->pixels_per_unit_x;
- 		else
- 			width = poly->width;
- 
-Only in ./libfoocanvas: foo-canvas-polygon.lo
-Only in ./libfoocanvas: foo-canvas-polygon.o
-diff -u -r ../foocanvas.latest/libfoocanvas/foo-canvas-rect-ellipse.c ./libfoocanvas/foo-canvas-rect-ellipse.c
---- ../foocanvas.latest/libfoocanvas/foo-canvas-rect-ellipse.c	2007-09-05 16:43:22.788000000 +0100
-+++ ./libfoocanvas/foo-canvas-rect-ellipse.c	2007-09-05 16:43:25.886000000 +0100
-@@ -1,3 +1,4 @@
-+/*  Last edited: Feb 25 11:09 2005 (rds) */
- /*
-  * Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation
-  * All rights reserved.
-@@ -281,7 +282,7 @@
- 	item = FOO_CANVAS_ITEM (re);
- 
- 	if (re->width_pixels)
--		hwidth = (re->width / item->canvas->pixels_per_unit) / 2.0;
-+		hwidth = (re->width / item->canvas->pixels_per_unit_x) / 2.0;
- 	else
- 		hwidth = re->width / 2.0;
- 
-@@ -352,7 +353,7 @@
- 	if (re->width_pixels)
- 		width = (int) re->width;
- 	else
--		width = (int) (re->width * re->item.canvas->pixels_per_unit + 0.5);
-+		width = (int) (re->width * re->item.canvas->pixels_per_unit_x + 0.5);
- 
- 	gdk_gc_set_line_attributes (re->outline_gc, width,
- 				    GDK_LINE_SOLID, GDK_CAP_PROJECTING, GDK_JOIN_MITER);
-@@ -734,7 +735,7 @@
- 	re = FOO_CANVAS_RE (item);
- 
- 	if (re->width_pixels)
--		hwidth = (re->width / item->canvas->pixels_per_unit) / 2.0;
-+		hwidth = (re->width / item->canvas->pixels_per_unit_x) / 2.0;
- 	else
- 		hwidth = re->width / 2.0;
- 
-@@ -1065,7 +1066,7 @@
- 
- 	if (re->outline_set) {
- 		if (re->width_pixels)
--			hwidth = (re->width / item->canvas->pixels_per_unit) / 2.0;
-+			hwidth = (re->width / item->canvas->pixels_per_unit_x) / 2.0;
- 		else
- 			hwidth = re->width / 2.0;
- 
-@@ -1191,7 +1192,7 @@
- 		if (re->width_pixels)
- 			width_pixels = (int) re->width;
- 		else
--			width_pixels = (int) floor (re->width * re->item.canvas->pixels_per_unit + 0.5);
-+			width_pixels = (int) floor (re->width * re->item.canvas->pixels_per_unit_x + 0.5);
- 
- 		width_lt = width_pixels / 2;
- 		width_rb = (width_pixels + 1) / 2;
-@@ -1344,7 +1345,7 @@
- 
- 	if (re->outline_set) {
- 		if (re->width_pixels)
--			width = re->width / item->canvas->pixels_per_unit;
-+			width = re->width / item->canvas->pixels_per_unit_x;
- 		else
- 			width = re->width;
- 	} else
-Only in ./libfoocanvas: foo-canvas-rect-ellipse.lo
-Only in ./libfoocanvas: foo-canvas-rect-ellipse.o
-diff -u -r ../foocanvas.latest/libfoocanvas/foo-canvas-text.c ./libfoocanvas/foo-canvas-text.c
---- ../foocanvas.latest/libfoocanvas/foo-canvas-text.c	2007-09-05 16:43:22.704000000 +0100
-+++ ./libfoocanvas/foo-canvas-text.c	2007-09-05 16:43:25.918000000 +0100
-@@ -1,3 +1,4 @@
-+/*  Last edited: Oct 18 18:38 2006 (rds) */
- /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
- /*
-  * $Id: foo-canvas-text.c 52 2005-04-04 15:13:29Z mortenw $
-@@ -615,8 +616,8 @@
- 	/* Get canvas pixel coordinates for clip rectangle position */
- 
- 	foo_canvas_w2c (item->canvas, wx, wy, &text->clip_cx, &text->clip_cy);
--	text->clip_cwidth = text->clip_width * item->canvas->pixels_per_unit;
--	text->clip_cheight = text->clip_height * item->canvas->pixels_per_unit;
-+	text->clip_cwidth = text->clip_width * item->canvas->pixels_per_unit_x;
-+	text->clip_cheight = text->clip_height * item->canvas->pixels_per_unit_y;
- 
- 	/* Anchor text */
- 
-@@ -976,7 +977,7 @@
- 	case PROP_WRAP_WIDTH: {
- 		double w = fabs (g_value_get_double (value));
- 		pango_layout_set_width (text->layout,
--			w * text->item.canvas->pixels_per_unit * PANGO_SCALE);
-+			w * text->item.canvas->pixels_per_unit_x * PANGO_SCALE);
- 
- 		break;
- 	}
-@@ -1252,11 +1253,11 @@
- 		break;
- 
- 	case PROP_TEXT_WIDTH:
--		g_value_set_double (value, text->max_width / text->item.canvas->pixels_per_unit);
-+		g_value_set_double (value, text->max_width / text->item.canvas->pixels_per_unit_x);
- 		break;
- 
- 	case PROP_TEXT_HEIGHT:
--		g_value_set_double (value, text->height / text->item.canvas->pixels_per_unit);
-+		g_value_set_double (value, text->height / text->item.canvas->pixels_per_unit_y);
- 		break;
- 
- 	default:
-@@ -1309,7 +1310,8 @@
- 	if (text->rise_set)
- 		add_attr (attr_list, pango_attr_rise_new (text->rise));
- 
--	zoom = text->item.canvas->pixels_per_unit;
-+	/* guessing that the x factor is OK here. RNGC */
-+	zoom = text->item.canvas->pixels_per_unit_x;
- 	if (fabs (zoom - 1.) > 1e-4) {
- 		PangoAttribute *attr = pango_attr_scale_new (zoom);
- 		attr->start_index = 0;
-@@ -1479,14 +1481,14 @@
-  	        PangoRectangle log_rect;
- 
- 		pango_layout_iter_get_line_extents (iter, NULL, &log_rect);
--
--		if (text->clip) {
-+                /* if (text->clip) { // original */
-+		/* if (!text->clip) { // broken for clipped !!! ;) */
-+                if(1) {
- 			x1 = PANGO_PIXELS (log_rect.x);
- 			y1 = PANGO_PIXELS (log_rect.y);
- 			x2 = PANGO_PIXELS (log_rect.x+log_rect.width);
- 			y2 = PANGO_PIXELS (log_rect.y+log_rect.height);
- 
--
- 			if (x1 < text->clip_cx)
- 				x1 = text->clip_cx;
- 
-@@ -1529,7 +1531,9 @@
- 			return 0.0;
- 		}
- 
-+
- 		dist = sqrt (dx * dx + dy * dy);
-+
- 		if (dist < best)
- 			best = dist;
- 
-@@ -1537,7 +1541,10 @@
- 
- 	pango_layout_iter_free(iter);
- 
--	return best / item->canvas->pixels_per_unit;
-+
-+	/* guessing that the x factor is OK here. RNGC */
-+        /* using x factor here as that is what is used in foo-canvas.c ... */
-+	return best / item->canvas->pixels_per_unit_x;
- }
- 
- static void
-@@ -1567,8 +1574,8 @@
- 		width = text->clip_width;
- 		height = text->clip_height;
- 	} else {
--		width = text->max_width / item->canvas->pixels_per_unit;
--		height = text->height / item->canvas->pixels_per_unit;
-+		width = text->max_width / item->canvas->pixels_per_unit_x;
-+		height = text->height / item->canvas->pixels_per_unit_y;
- 	}
- 
- 	switch (text->anchor) {
-Only in ./libfoocanvas: foo-canvas-text.c.orig
-Only in ./libfoocanvas: foo-canvas-text.lo
-Only in ./libfoocanvas: foo-canvas-text.o
-Only in ./libfoocanvas: foo-canvas-util.lo
-Only in ./libfoocanvas: foo-canvas-util.o
-diff -u -r ../foocanvas.latest/libfoocanvas/foo-canvas-widget.c ./libfoocanvas/foo-canvas-widget.c
---- ../foocanvas.latest/libfoocanvas/foo-canvas-widget.c	2007-09-05 16:43:22.681000000 +0100
-+++ ./libfoocanvas/foo-canvas-widget.c	2007-09-05 16:43:25.930000000 +0100
-@@ -1,3 +1,4 @@
-+/*  Last edited: May 11 11:42 2004 (rnc) */
- /*
-  * Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation
-  * All rights reserved.
-@@ -456,8 +457,8 @@
- 			witem->cwidth = (int) (witem->width + 0.5);
- 			witem->cheight = (int) (witem->height + 0.5);
- 		} else {
--			witem->cwidth = (int) (witem->width * item->canvas->pixels_per_unit + 0.5);
--			witem->cheight = (int) (witem->height * item->canvas->pixels_per_unit + 0.5);
-+			witem->cwidth = (int) (witem->width * item->canvas->pixels_per_unit_x + 0.5);
-+			witem->cheight = (int) (witem->height * item->canvas->pixels_per_unit_y + 0.5);
- 		}
- 
- 		gtk_widget_set_usize (witem->widget, witem->cwidth, witem->cheight);
-@@ -516,8 +517,8 @@
- 
- 	foo_canvas_c2w (item->canvas, witem->cx, witem->cy, &x1, &y1);
- 
--	x2 = x1 + (witem->cwidth - 1) / item->canvas->pixels_per_unit;
--	y2 = y1 + (witem->cheight - 1) / item->canvas->pixels_per_unit;
-+	x2 = x1 + (witem->cwidth - 1) / item->canvas->pixels_per_unit_x;
-+	y2 = y1 + (witem->cheight - 1) / item->canvas->pixels_per_unit_y;
- 
- 	/* Is point inside widget bounds? */
- 
-Only in ./libfoocanvas: foo-canvas-widget.lo
-Only in ./libfoocanvas: foo-canvas-widget.o
-Only in ./libfoocanvas: foozmap-canvas-line-glyph.c
-Only in ./libfoocanvas: foozmap-canvas-line-glyph.h
-Only in ./libfoocanvas: foozmap-canvas-line-glyph.lo
-Only in ./libfoocanvas: foozmap-canvas-line-glyph.o
-diff -u -r ../foocanvas.latest/libfoocanvas/libfoocanvas.h ./libfoocanvas/libfoocanvas.h
---- ../foocanvas.latest/libfoocanvas/libfoocanvas.h	2007-09-05 16:43:22.642000000 +0100
-+++ ./libfoocanvas/libfoocanvas.h	2007-09-05 16:43:25.975000000 +0100
-@@ -1,3 +1,4 @@
-+/*  Last edited: Aug  1 11:42 2006 (edgrif) */
- /*
-  * Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation
-  * All rights reserved.
-@@ -35,6 +36,9 @@
- #include <libfoocanvas/foo-canvas-rect-ellipse.h>
- #include <libfoocanvas/foo-canvas-util.h>
- 
-+#include <libfoocanvas/foozmap-canvas-line-glyph.h>
-+
-+
- G_BEGIN_DECLS
- 
- GType foo_canvas_points_get_type (void);
-Only in ./libfoocanvas: libfoocanvas.la
-Only in ./libfoocanvas: libfoocanvas.pc
-Only in ./libfoocanvas: libfoocanvastypes.lo
-Only in ./libfoocanvas: libfoocanvastypes.o
-Only in ./libfoocanvas: .libs
-Only in ./libfoocanvas: Makefile
-diff -u -r ../foocanvas.latest/libfoocanvas/Makefile.am ./libfoocanvas/Makefile.am
---- ../foocanvas.latest/libfoocanvas/Makefile.am	2007-09-05 16:43:22.916000000 +0100
-+++ ./libfoocanvas/Makefile.am	2007-09-05 16:43:25.831000000 +0100
-@@ -22,6 +22,7 @@
- 
- libfoocanvasinclude_HEADERS =			\
- 	foo-canvas-line.h			\
-+	foozmap-canvas-line-glyph.h		\
- 	foo-canvas-pixbuf.h			\
- 	foo-canvas-polygon.h			\
- 	foo-canvas-rect-ellipse.h		\
-@@ -36,6 +37,7 @@
- 	foo-canvas-marshal.list			\
- 	foo-canvas-i18n.h			\
- 	foo-canvas-line.c			\
-+	foozmap-canvas-line-glyph.c		\
- 	foo-canvas-pixbuf.c			\
- 	foo-canvas-polygon.c			\
- 	foo-canvas-rect-ellipse.c		\
-Only in ./libfoocanvas: Makefile.in
-Only in ./: libtool
-Only in ./: ltmain.sh
-Only in ./: Makefile
-Only in ./: Makefile.in
-Only in ./: missing
-Only in ./: mkinstalldirs
-Only in ./po: Makefile.in.in
-Only in ./: stamp-h1
diff --git a/foocanvas/support/libfoocanvas-20070905.tar.gz b/foocanvas/support/libfoocanvas-20070905.tar.gz
deleted file mode 100755
index d8f7defd97d5f6c0b393302d931d8efbfdbd5412..0000000000000000000000000000000000000000
Binary files a/foocanvas/support/libfoocanvas-20070905.tar.gz and /dev/null differ
diff --git a/foocanvas/support/libfoocanvas-20071015.patch b/foocanvas/support/libfoocanvas-20071015.patch
deleted file mode 100755
index 550e83c86f8deb0c4bd2e4ef561fc8eca716488f..0000000000000000000000000000000000000000
--- a/foocanvas/support/libfoocanvas-20071015.patch
+++ /dev/null
@@ -1,1017 +0,0 @@
-Only in ./: aclocal.m4
-diff -u -r ../foocanvas.latest/autogen.sh ./autogen.sh
---- ../foocanvas.latest/autogen.sh	2007-10-15 12:13:33.175000000 +0100
-+++ ./autogen.sh	2007-10-15 12:13:35.445000000 +0100
-@@ -41,5 +41,5 @@
-   exit 1
- fi
- 
--REQUIRED_AUTOMAKE_VERSION=1.5
-+REQUIRED_AUTOMAKE_VERSION=1.9
- GNOME_DATADIR="$gnome_datadir" USE_GNOME2_MACROS=1 . $gnome_autogen
-Only in ./: autom4te.cache
-Only in ./: config.guess
-Only in ./: config.h
-Only in ./: config.h.in
-Only in ./: config.log
-Only in ./: config.status
-Only in ./: config.sub
-Only in ./: configure
-diff -u -r ../foocanvas.latest/configure.in ./configure.in
---- ../foocanvas.latest/configure.in	2007-10-15 12:13:33.123000000 +0100
-+++ ./configure.in	2007-10-15 12:14:04.144000000 +0100
-@@ -3,7 +3,7 @@
- AC_CONFIG_SRCDIR([libfoocanvas/foo-canvas.c])
- 
- AC_CONFIG_HEADERS([config.h])
--AM_INIT_AUTOMAKE([dist-bz2])
-+AM_INIT_AUTOMAKE([])
- 
- AM_MAINTAINER_MODE
- 
-@@ -53,7 +53,7 @@
-   AC_SUBST(HTML_DIR, $with_html_dir)
- fi
- 
--GTK_DOC_CHECK([1.0])
-+dnl GTK_DOC_CHECK([1.0])
- 
- AC_CONFIG_FILES([
- Makefile
-Only in ./: configure.in.~1~
-Only in ./demos: canvas-arrowhead.o
-Only in ./demos: canvas_demo
-Only in ./demos: canvas-features.o
-Only in ./demos: canvas-fifteen.o
-Only in ./demos: canvas.o
-Only in ./demos: canvas-primitives.o
-Only in ./demos: canvas-scalability.o
-Only in ./demos: .deps
-Only in ./demos: .libs
-Only in ./demos: Makefile
-Only in ./demos: Makefile.in
-Only in ./: depcomp
-Only in ./: INSTALL
-Only in ./: install-sh
-Only in ./libfoocanvas: .deps
-diff -u -r ../foocanvas.latest/libfoocanvas/foo-canvas.c ./libfoocanvas/foo-canvas.c
---- ../foocanvas.latest/libfoocanvas/foo-canvas.c	2007-10-15 12:13:32.312000000 +0100
-+++ ./libfoocanvas/foo-canvas.c	2007-10-15 12:13:35.509000000 +0100
-@@ -78,7 +78,7 @@
- 
- static void foo_canvas_request_update (FooCanvas      *canvas);
- static void group_add                   (FooCanvasGroup *group,
--					 FooCanvasItem  *item);
-+					 FooCanvasItem  *item, FooCanvasGroupPosition position);
- static void group_remove                (FooCanvasGroup *group,
- 					 FooCanvasItem  *item);
- static void redraw_and_repick_if_mapped (FooCanvasItem *item);
-@@ -190,17 +190,56 @@
- }
- 
- 
-+/**
-+ * foo_canvas_item_new:
-+ * @parent: The parent group for the new item.
-+ * @type: The object type of the item.
-+ * @position: puts new item at bottom (FOO_CANVAS_GROUP_BOTTOM) or top (FOO_CANVAS_GROUP_TOP)
-+ * of parents stack of child items.
-+ * @first_arg_name: A list of object argument name/value pairs, NULL-terminated,
-+ * used to configure the item.  For example, "fill_color", "black",
-+ * "width_units", 5.0, NULL.
-+ * @Varargs:
-+ *
-+ * Creates a new canvas item with @parent as its parent group.  The item is
-+ * created at the top of its parent's stack, and starts up as visible.  The item
-+ * is of the specified @type, for example, it can be
-+ * foo_canvas_rect_get_type().  The list of object arguments/value pairs is
-+ * used to configure the item.
-+ *
-+ * Return value: The newly-created item.
-+ **/
-+FooCanvasItem *
-+foo_canvas_item_new_position (FooCanvasGroup *parent, GType type, FooCanvasGroupPosition position,
-+			      const gchar *first_arg_name, ...)
-+{
-+	FooCanvasItem *item;
-+	va_list args;
-+
-+	g_return_val_if_fail (FOO_IS_CANVAS_GROUP (parent), NULL);
-+	g_return_val_if_fail (g_type_is_a (type, foo_canvas_item_get_type ()), NULL);
-+
-+	item = FOO_CANVAS_ITEM (g_object_new (type, NULL));
-+
-+	va_start (args, first_arg_name);
-+	foo_canvas_item_construct_position (item, parent, position, first_arg_name, args);
-+	va_end (args);
-+
-+	return item;
-+}
-+
-+
- /* Performs post-creation operations on a canvas item (adding it to its parent
-  * group, etc.)
-  */
- static void
--item_post_create_setup (FooCanvasItem *item)
-+item_post_create_setup (FooCanvasItem *item, FooCanvasGroupPosition position)
- {
- 	GtkObject *obj;
- 
- 	obj = GTK_OBJECT (item);
- 
--	group_add (FOO_CANVAS_GROUP (item->parent), item);
-+	group_add (FOO_CANVAS_GROUP (item->parent), item, position);
- 
- 	redraw_and_repick_if_mapped (item);
- }
-@@ -224,7 +263,7 @@
- 		} else if (g_value_get_object (value)) {
- 			item->parent = FOO_CANVAS_ITEM (g_value_get_object (value));
- 			item->canvas = item->parent->canvas;
--			item_post_create_setup (item);
-+			item_post_create_setup (item, FOO_CANVAS_GROUP_TOP);
- 		}
- 		break;
- 	case ITEM_PROP_VISIBLE:
-@@ -282,7 +321,34 @@
- 
- 	g_object_set_valist (G_OBJECT (item), first_arg_name, args);
- 
--	item_post_create_setup (item);
-+	item_post_create_setup (item, FOO_CANVAS_GROUP_TOP);
-+}
-+
-+
-+/**
-+ * foo_canvas_item_construct_position:
-+ * @item: An unconstructed canvas item.
-+ * @parent: The parent group for the item.
-+ * @position: puts new item at bottom (FOO_CANVAS_GROUP_BOTTOM) or top (FOO_CANVAS_GROUP_TOP)
-+ * of parents stack of child items.
-+ * @first_arg_name: The name of the first argument for configuring the item.
-+ * @args: The list of arguments used to configure the item.
-+ *
-+ * Constructs a canvas item; meant for use only by item implementations.
-+ **/
-+void
-+foo_canvas_item_construct_position (FooCanvasItem *item, FooCanvasGroup *parent, FooCanvasGroupPosition position,
-+				    const gchar *first_arg_name, va_list args)
-+{
-+	g_return_if_fail (FOO_IS_CANVAS_GROUP (parent));
-+	g_return_if_fail (FOO_IS_CANVAS_ITEM (item));
-+
-+	item->parent = FOO_CANVAS_ITEM (parent);
-+	item->canvas = item->parent->canvas;
-+
-+	g_object_set_valist (G_OBJECT (item), first_arg_name, args);
-+
-+	item_post_create_setup (item, position);
- }
- 
- 
-@@ -295,6 +361,7 @@
- 	}
- }
- 
-+
- /* Destroy handler for canvas items */
- static void
- foo_canvas_item_destroy (GtkObject *object)
-@@ -339,10 +406,8 @@
- 
- 		if (item->parent)
- 			group_remove (FOO_CANVAS_GROUP (item->parent), item);
--
- 		item->canvas = NULL;
- 	}
--
- 	GTK_OBJECT_CLASS (item_parent_class)->destroy (object);
- }
- 
-@@ -992,7 +1057,7 @@
- 	group_remove (FOO_CANVAS_GROUP (item->parent), item);
- 	item->parent = FOO_CANVAS_ITEM (new_group);
- 	/* item->canvas is unchanged.  */
--	group_add (new_group, item);
-+	group_add (new_group, item, FOO_CANVAS_GROUP_TOP);
- 
- 	/* Redraw and repick */
- 
-@@ -1376,6 +1441,7 @@
- 	bbox_x1 = 0;
- 	bbox_y1 = 0;
- 
-+       if(item->object.flags & FOO_CANVAS_ITEM_VISIBLE){ 
- 	for (list = group->item_list; list; list = list->next) {
- 		i = list->data;
- 
-@@ -1394,10 +1460,14 @@
- 			bbox_y1 = MAX (bbox_y1, i->y2);
- 		}
- 	}
-+
-+       }
- 	item->x1 = bbox_x0;
- 	item->y1 = bbox_y0;
- 	item->x2 = bbox_x1;
- 	item->y2 = bbox_y1;
-+
-+        return ;
- }
- 
- /* Unrealize handler for canvas groups */
-@@ -1540,10 +1610,10 @@
- 			has_point = TRUE;
- 		} else
- 			has_point = FALSE;
--
-+		/* guessing that the x factor is OK here. RNGC */
- 		if (has_point
- 		    && point_item
--		    && ((int) (dist * item->canvas->pixels_per_unit + 0.5)
-+		    && ((int) (dist * item->canvas->pixels_per_unit_x + 0.5)
- 			<= item->canvas->close_enough)) {
- 			best = dist;
- 			*actual_item = point_item;
-@@ -1553,7 +1623,7 @@
- 	return best;
- }
- 
--static void
-+void
- foo_canvas_group_translate (FooCanvasItem *item, double dx, double dy)
- {
-         FooCanvasGroup *group;
-@@ -1642,16 +1712,30 @@
- 
- /* Adds an item to a group */
- static void
--group_add (FooCanvasGroup *group, FooCanvasItem *item)
-+group_add (FooCanvasGroup *group, FooCanvasItem *item, FooCanvasGroupPosition position)
- {
- 	g_object_ref (GTK_OBJECT (item));
- 	gtk_object_sink (GTK_OBJECT (item));
- 
--	if (!group->item_list) {
--		group->item_list = g_list_append (group->item_list, item);
--		group->item_list_end = group->item_list;
--	} else
--		group->item_list_end = g_list_append (group->item_list_end, item)->next;
-+	if (position == FOO_CANVAS_GROUP_TOP)
-+	  {
-+	    if (!group->item_list) {
-+	      group->item_list = g_list_append (group->item_list, item);
-+	      group->item_list_end = group->item_list;
-+	    } else
-+	      group->item_list_end = g_list_append (group->item_list_end, item)->next;
-+	  }
-+	else
-+	  {
-+	    if (!group->item_list) {
-+	      group->item_list = g_list_prepend (group->item_list, item);
-+	      group->item_list_end = group->item_list;
-+	    } else
-+	      group->item_list = g_list_prepend (group->item_list, item);
-+	  }
-+
-+
-+
- 
- 	if (item->object.flags & FOO_CANVAS_ITEM_VISIBLE &&
- 	    group->item.object.flags & FOO_CANVAS_ITEM_MAPPED) {
-@@ -2080,7 +2164,8 @@
- 	canvas->scroll_x2 = canvas->layout.width;
- 	canvas->scroll_y2 = canvas->layout.height;
- 
--	canvas->pixels_per_unit = 1.0;
-+	canvas->pixels_per_unit_x = 1.0;
-+	canvas->pixels_per_unit_y = 1.0;
- 
- 	canvas->pick_event.type = GDK_LEAVE_NOTIFY;
- 	canvas->pick_event.crossing.x = 0;
-@@ -2302,8 +2387,8 @@
- 	canvas_width = GTK_WIDGET (canvas)->allocation.width;
- 	canvas_height = GTK_WIDGET (canvas)->allocation.height;
- 
--	scroll_width = floor ((canvas->scroll_x2 - canvas->scroll_x1) * canvas->pixels_per_unit + 0.5);
--	scroll_height = floor ((canvas->scroll_y2 - canvas->scroll_y1) * canvas->pixels_per_unit + 0.5);
-+	scroll_width = floor ((canvas->scroll_x2 - canvas->scroll_x1) * canvas->pixels_per_unit_x + 0.5);
-+	scroll_height = floor ((canvas->scroll_y2 - canvas->scroll_y1) * canvas->pixels_per_unit_y + 0.5);
- 
- 	right_limit = scroll_width - canvas_width;
- 	bottom_limit = scroll_height - canvas_height;
-@@ -3101,15 +3186,35 @@
- 
- /**
-  * foo_canvas_set_pixels_per_unit:
-- * @canvas: A canvas.
-+ * @canvas: A canvas
-  * @n: The number of pixels that correspond to one canvas unit.
-  *
-  * Sets the zooming factor of a canvas by specifying the number of pixels that
-  * correspond to one canvas unit.
-+ * This is retained for backwards compatibility and just calls
-+ * foo_canvas_set_pixels_per_unit_xy, passing the number of pixels/unit twice.
-  **/
- void
- foo_canvas_set_pixels_per_unit (FooCanvas *canvas, double n)
- {
-+  foo_canvas_set_pixels_per_unit_xy(canvas, n, n);
-+  return;
-+}
-+
-+
-+/**
-+ * foo_canvas_set_pixels_per_unit_xy:
-+ * @canvas: A canvas.
-+ * @x: The number of pixels that correspond to one canvas unit on the x axis.
-+ * @y: The number of pixels that correspond to one canvas unit on the y axis.
-+ *
-+ * Sets the zooming factor of a canvas by specifying the number of pixels that
-+ * correspond to one canvas unit.
-+ * Having two zooming factors enables asymmetric zooming.
-+ **/
-+void
-+foo_canvas_set_pixels_per_unit_xy (FooCanvas *canvas, double x, double y)
-+{
- 	GtkWidget *widget;
- 	double cx, cy;
- 	int x1, y1;
-@@ -3119,7 +3224,8 @@
- 	gint attributes_mask;
- 
- 	g_return_if_fail (FOO_IS_CANVAS (canvas));
--	g_return_if_fail (n > FOO_CANVAS_EPSILON);
-+	/* guessing that the x factor is OK here.  RNCG */
-+	g_return_if_fail (x > FOO_CANVAS_EPSILON);
- 
- 	widget = GTK_WIDGET (canvas);
- 
-@@ -3127,14 +3233,15 @@
- 	center_y = widget->allocation.height / 2;
- 
- 	/* Find the coordinates of the screen center in units. */
--	cx = (canvas->layout.hadjustment->value + center_x) / canvas->pixels_per_unit + canvas->scroll_x1 + canvas->zoom_xofs;
--	cy = (canvas->layout.vadjustment->value + center_y) / canvas->pixels_per_unit + canvas->scroll_y1 + canvas->zoom_yofs;
-+	cx = (canvas->layout.hadjustment->value + center_x) / canvas->pixels_per_unit_x + canvas->scroll_x1 + canvas->zoom_xofs;
-+	cy = (canvas->layout.vadjustment->value + center_y) / canvas->pixels_per_unit_y + canvas->scroll_y1 + canvas->zoom_yofs;
- 
- 	/* Now calculate the new offset of the upper left corner. (round not truncate) */
--	x1 = ((cx - canvas->scroll_x1) * n) - center_x + .5;
--	y1 = ((cy - canvas->scroll_y1) * n) - center_y + .5;
-+	x1 = ((cx - canvas->scroll_x1) * x) - center_x + .5;
-+	y1 = ((cy - canvas->scroll_y1) * y) - center_y + .5;
- 
--	canvas->pixels_per_unit = n;
-+	canvas->pixels_per_unit_x = x;
-+	canvas->pixels_per_unit_y = y;
- 
- 	if (!(canvas->root->object.flags & FOO_CANVAS_ITEM_NEED_DEEP_UPDATE)) {
- 		canvas->root->object.flags |= FOO_CANVAS_ITEM_NEED_DEEP_UPDATE;
-@@ -3268,7 +3375,8 @@
- 	foo_canvas_w2c (canvas, x, y, &cx, &cy);
- 
- 	dist = foo_canvas_item_invoke_point (canvas->root, x, y, cx, cy, &item);
--	if ((int) (dist * canvas->pixels_per_unit + 0.5) <= canvas->close_enough)
-+	/* guessing the x factor is OK here.  RNGC */
-+	if ((int) (dist * canvas->pixels_per_unit_x + 0.5) <= canvas->close_enough)
- 		return item;
- 	else
- 		return NULL;
-@@ -3331,16 +3439,17 @@
- void
- foo_canvas_w2c (FooCanvas *canvas, double wx, double wy, int *cx, int *cy)
- {
--	double zoom;
-+	double zoom_x, zoom_y;
- 
- 	g_return_if_fail (FOO_IS_CANVAS (canvas));
- 	
--	zoom = canvas->pixels_per_unit;
-+	zoom_x = canvas->pixels_per_unit_x;
-+	zoom_y = canvas->pixels_per_unit_y;
- 	
- 	if (cx)
--		*cx = floor ((wx - canvas->scroll_x1)*zoom + canvas->zoom_xofs + 0.5);
-+		*cx = floor ((wx - canvas->scroll_x1)*zoom_x + canvas->zoom_xofs + 0.5);
- 	if (cy)
--		*cy = floor ((wy - canvas->scroll_y1)*zoom + canvas->zoom_yofs + 0.5);
-+		*cy = floor ((wy - canvas->scroll_y1)*zoom_y + canvas->zoom_yofs + 0.5);
- }
- 
- /**
-@@ -3380,16 +3489,17 @@
- void
- foo_canvas_w2c_d (FooCanvas *canvas, double wx, double wy, double *cx, double *cy)
- {
--	double zoom;
-+	double zoom_x, zoom_y;
- 
- 	g_return_if_fail (FOO_IS_CANVAS (canvas));
- 
--	zoom = canvas->pixels_per_unit;
-+	zoom_x = canvas->pixels_per_unit_x;
-+	zoom_y = canvas->pixels_per_unit_y;
- 	
- 	if (cx)
--		*cx = (wx - canvas->scroll_x1)*zoom + canvas->zoom_xofs;
-+		*cx = (wx - canvas->scroll_x1)*zoom_x + canvas->zoom_xofs;
- 	if (cy)
--		*cy = (wy - canvas->scroll_y1)*zoom + canvas->zoom_yofs;
-+		*cy = (wy - canvas->scroll_y1)*zoom_y + canvas->zoom_yofs;
- }
- 
- 
-@@ -3406,16 +3516,17 @@
- void
- foo_canvas_c2w (FooCanvas *canvas, int cx, int cy, double *wx, double *wy)
- {
--	double zoom;
-+	double zoom_x, zoom_y;
- 
- 	g_return_if_fail (FOO_IS_CANVAS (canvas));
- 
--	zoom = canvas->pixels_per_unit;
-+	zoom_x = canvas->pixels_per_unit_x;
-+	zoom_y = canvas->pixels_per_unit_y;
- 	
- 	if (wx)
--		*wx = (cx - canvas->zoom_xofs)/zoom + canvas->scroll_x1;
-+		*wx = (cx - canvas->zoom_xofs)/zoom_x + canvas->scroll_x1;
- 	if (wy)
--		*wy = (cy - canvas->zoom_yofs)/zoom + canvas->scroll_y1;
-+		*wy = (cy - canvas->zoom_yofs)/zoom_y + canvas->scroll_y1;
- }
- 
- 
-@@ -3441,11 +3552,11 @@
- 
- 	if (worldx)
- 		*worldx = canvas->scroll_x1 + ((winx - canvas->zoom_xofs)
--					       / canvas->pixels_per_unit);
-+					       / canvas->pixels_per_unit_x);
- 
- 	if (worldy)
- 		*worldy = canvas->scroll_y1 + ((winy - canvas->zoom_yofs)
--					       / canvas->pixels_per_unit);
-+					       / canvas->pixels_per_unit_y);
- }
- 
- 
-@@ -3468,10 +3579,10 @@
- 	g_return_if_fail (FOO_IS_CANVAS (canvas));
- 
- 	if (winx)
--		*winx = (canvas->pixels_per_unit)*(worldx - canvas->scroll_x1) + canvas->zoom_xofs;
-+		*winx = (canvas->pixels_per_unit_x)*(worldx - canvas->scroll_x1) + canvas->zoom_xofs;
- 
- 	if (winy)
--		*winy = (canvas->pixels_per_unit)*(worldy - canvas->scroll_y1) + canvas->zoom_yofs;
-+		*winy = (canvas->pixels_per_unit_y)*(worldy - canvas->scroll_y1) + canvas->zoom_yofs;
- }
- 
- 
-@@ -3999,3 +4110,11 @@
-                                        FOO_TYPE_CANVAS_ITEM,
-                                        foo_canvas_item_accessible_factory_get_type ());
- }
-+
-+void 
-+foo_canvas_zmap(void)
-+{
-+  /* do nothing */
-+}
-+
-+/*  Last edited: Sep  5 17:28 2007 (edgrif) */
-diff -u -r ../foocanvas.latest/libfoocanvas/foo-canvas.h ./libfoocanvas/foo-canvas.h
---- ../foocanvas.latest/libfoocanvas/foo-canvas.h	2007-10-15 12:13:31.901000000 +0100
-+++ ./libfoocanvas/foo-canvas.h	2007-10-15 12:13:35.539000000 +0100
-@@ -1,3 +1,4 @@
-+/*  Last edited: Sep  5 08:49 2007 (edgrif) */
- /* -*- Mode: C; tab-width: 8; indent-tabs-mode: 8; c-basic-offset: 8 -*- */
- /*
-  * Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation
-@@ -101,6 +102,11 @@
- 	FOO_CANVAS_UPDATE_DEEP       = 1 << 1
- };
- 
-+
-+/* Special positions for putting new items at top or bottom of group. */
-+typedef enum {FOO_CANVAS_GROUP_BOTTOM = -1, FOO_CANVAS_GROUP_TOP  = -2} FooCanvasGroupPosition ;
-+
-+
- #define FOO_TYPE_CANVAS_ITEM            (foo_canvas_item_get_type ())
- #define FOO_CANVAS_ITEM(obj)            (GTK_CHECK_CAST ((obj), FOO_TYPE_CANVAS_ITEM, FooCanvasItem))
- #define FOO_CANVAS_ITEM_CLASS(klass)    (GTK_CHECK_CLASS_CAST ((klass), FOO_TYPE_CANVAS_ITEM, FooCanvasItemClass))
-@@ -186,10 +192,16 @@
- FooCanvasItem *foo_canvas_item_new (FooCanvasGroup *parent, GType type,
- 				    const gchar *first_arg_name, ...);
- 
-+FooCanvasItem *foo_canvas_item_new_position (FooCanvasGroup *parent, GType type, FooCanvasGroupPosition position,
-+					     const gchar *first_arg_name, ...);
-+
- /* Constructors for use in derived classes and language wrappers */
- void foo_canvas_item_construct (FooCanvasItem *item, FooCanvasGroup *parent,
- 				const gchar *first_arg_name, va_list args);
- 
-+void foo_canvas_item_construct_position (FooCanvasItem *item, FooCanvasGroup *parent, FooCanvasGroupPosition position,
-+					 const gchar *first_arg_name, va_list args);
-+
- /* Configure an item using the standard Gtk argument mechanism.  The last
-  * argument must be a NULL pointer.
-  */
-@@ -371,7 +383,8 @@
- 	double scroll_x2, scroll_y2;
- 
- 	/* Scaling factor to be used for display */
--	double pixels_per_unit;
-+	double pixels_per_unit_x;
-+	double pixels_per_unit_y;
- 
- 	/* Idle handler ID */
- 	guint idle_id;
-@@ -456,6 +469,10 @@
- /* Sets the number of pixels that correspond to one unit in world coordinates */
- void foo_canvas_set_pixels_per_unit (FooCanvas *canvas, double n);
- 
-+/* Sets the number of  pixels corresponding to one unit in world coordinates
-+ * separately on x and y axes, allowing asymmetric zooming. */
-+void foo_canvas_set_pixels_per_unit_xy (FooCanvas *canvas, double x, double y);
-+
- /* Wether the canvas centers the scroll region if it is smaller than the window  */
- void foo_canvas_set_center_scroll_region (FooCanvas *canvas, gboolean center_scroll_region);
- 
-@@ -525,6 +542,10 @@
-  */
- void foo_canvas_set_stipple_origin (FooCanvas *canvas, GdkGC *gc);
- 
-+void foo_canvas_zmap(void);
-+
- G_END_DECLS
- 
-+
- #endif
-+
-diff -u -r ../foocanvas.latest/libfoocanvas/foo-canvas-line.c ./libfoocanvas/foo-canvas-line.c
---- ../foocanvas.latest/libfoocanvas/foo-canvas-line.c	2007-10-15 12:13:32.069000000 +0100
-+++ ./libfoocanvas/foo-canvas-line.c	2007-10-15 12:13:35.582000000 +0100
-@@ -1,3 +1,4 @@
-+/*  Last edited: Oct 18 18:34 2006 (rds) */
- /*
-  * Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation
-  * All rights reserved.
-@@ -338,7 +339,7 @@
- 	/* Add possible over-estimate for wide lines */
- 
- 	if (line->width_pixels)
--		width = line->width / line->item.canvas->pixels_per_unit;
-+		width = line->width / line->item.canvas->pixels_per_unit_x;
- 	else
- 		width = line->width;
- 
-@@ -466,7 +467,7 @@
- 		return;
- 
- 	if (line->width_pixels)
--		width = line->width / line->item.canvas->pixels_per_unit;
-+		width = line->width / line->item.canvas->pixels_per_unit_x;
- 	else
- 		width = line->width;
- 
-@@ -477,9 +478,9 @@
- 	shape_c = line->shape_c + width / 2.0;
- 
- 	if (line->width_pixels) {
--		shape_a /= line->item.canvas->pixels_per_unit;
--		shape_b /= line->item.canvas->pixels_per_unit;
--		shape_c /= line->item.canvas->pixels_per_unit;
-+		shape_a /= line->item.canvas->pixels_per_unit_x;
-+		shape_b /= line->item.canvas->pixels_per_unit_x;
-+		shape_c /= line->item.canvas->pixels_per_unit_x;
- 	}
- 
- 	shape_a += 0.001;
-@@ -600,7 +601,7 @@
- 	if (line->width_pixels)
- 		width = (int) line->width;
- 	else
--		width = (int) (line->width * line->item.canvas->pixels_per_unit + 0.5);
-+		width = (int) (line->width * line->item.canvas->pixels_per_unit_x + 0.5);
- 
- 	gdk_gc_set_line_attributes (line->gc,
- 				    width,
-@@ -1126,12 +1127,12 @@
- 	 */
- 
- 	if (line->width_pixels)
--		width = line->width / item->canvas->pixels_per_unit;
-+		width = line->width / item->canvas->pixels_per_unit_x;
- 	else
- 		width = line->width;
- 
--	if (width < (1.0 / item->canvas->pixels_per_unit))
--		width = 1.0 / item->canvas->pixels_per_unit;
-+	if (width < (1.0 / item->canvas->pixels_per_unit_x))
-+		width = 1.0 / item->canvas->pixels_per_unit_x;
- 
- 	changed_miter_to_bevel = 0;
- 
-Only in ./libfoocanvas: foo-canvas-line.lo
-Only in ./libfoocanvas: foo-canvas-line.o
-Only in ./libfoocanvas: foo-canvas.lo
-Only in ./libfoocanvas: foo-canvas-marshal.c
-Only in ./libfoocanvas: foo-canvas-marshal.h
-Only in ./libfoocanvas: foo-canvas-marshal.lo
-Only in ./libfoocanvas: foo-canvas-marshal.o
-Only in ./libfoocanvas: foo-canvas.o
-diff -u -r ../foocanvas.latest/libfoocanvas/foo-canvas-pixbuf.c ./libfoocanvas/foo-canvas-pixbuf.c
---- ../foocanvas.latest/libfoocanvas/foo-canvas-pixbuf.c	2007-10-15 12:13:32.197000000 +0100
-+++ ./libfoocanvas/foo-canvas-pixbuf.c	2007-10-15 12:13:35.702000000 +0100
-@@ -1,3 +1,4 @@
-+/*  Last edited: May 11 11:33 2004 (rnc) */
- /* GNOME libraries - GdkPixbuf item for the GNOME canvas
-  *
-  * Copyright (C) 1999 The Free Software Foundation
-@@ -564,13 +565,13 @@
- 	}
- 
- 	if (priv->x_in_pixels) {
--		x = i2w_dx + priv->x / item->canvas->pixels_per_unit;
-+		x = i2w_dx + priv->x / item->canvas->pixels_per_unit_x;
- 	} else {
- 		x = i2w_dx + priv->x;
- 	}
- 
- 	if (priv->y_in_pixels) {
--		y = i2w_dy + priv->y / item->canvas->pixels_per_unit;
-+		y = i2w_dy + priv->y / item->canvas->pixels_per_unit_y;
- 	} else {
- 		y = i2w_dy + priv->y;
- 	}
-@@ -582,7 +583,7 @@
- 	}
- 
- 	if (priv->width_in_pixels)
--		width /= item->canvas->pixels_per_unit;
-+		width /= item->canvas->pixels_per_unit_x;
- 
- 	if (priv->height_set) {
- 		height = priv->height;
-@@ -591,7 +592,7 @@
- 	}
- 
- 	if (priv->height_in_pixels)
--		height /= item->canvas->pixels_per_unit;
-+		height /= item->canvas->pixels_per_unit_y;
- 
- 
- 	switch (priv->anchor) {
-@@ -781,8 +782,8 @@
- 	pixbuf = priv->pixbuf;
- 
- 	*actual_item = item;
--
--	no_hit = item->canvas->pixels_per_unit * 2 + 10;
-+	/* guessing that the x factor is OK here. RNGC */
-+	no_hit = item->canvas->pixels_per_unit_x * 2 + 10;
- 
- 	if (!priv->pixbuf)
- 		return no_hit;
-@@ -823,13 +824,13 @@
- 	priv = gcp->priv;
- 
- 	if (priv->x_in_pixels) {
--		priv->x += dx * item->canvas->pixels_per_unit;
-+		priv->x += dx * item->canvas->pixels_per_unit_x;
- 	} else {
- 		priv->x += dx;
- 	}
- 
- 	if (priv->y_in_pixels) {
--		priv->y += dy * item->canvas->pixels_per_unit;
-+		priv->y += dy * item->canvas->pixels_per_unit_y;
- 	} else {
- 		priv->y += dy;
- 	}
-Only in ./libfoocanvas: foo-canvas-pixbuf.lo
-Only in ./libfoocanvas: foo-canvas-pixbuf.o
-diff -u -r ../foocanvas.latest/libfoocanvas/foo-canvas-polygon.c ./libfoocanvas/foo-canvas-polygon.c
---- ../foocanvas.latest/libfoocanvas/foo-canvas-polygon.c	2007-10-15 12:13:32.048000000 +0100
-+++ ./libfoocanvas/foo-canvas-polygon.c	2007-10-15 12:13:35.740000000 +0100
-@@ -1,3 +1,4 @@
-+/*  Last edited: Oct 19 09:39 2006 (rds) */
- /*
-  * Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation
-  * All rights reserved.
-@@ -276,7 +277,7 @@
- 	/* Add outline width */
- 
- 	if (poly->width_pixels)
--		width = poly->width / poly->item.canvas->pixels_per_unit;
-+		width = poly->width / poly->item.canvas->pixels_per_unit_x;
- 	else
- 		width = poly->width;
- 
-@@ -400,7 +401,7 @@
- 	if (poly->width_pixels)
- 		width = (int) poly->width;
- 	else
--		width = (int) (poly->width * poly->item.canvas->pixels_per_unit + 0.5);
-+		width = (int) (poly->width * poly->item.canvas->pixels_per_unit_x + 0.5);
- 
- 	gdk_gc_set_line_attributes (poly->outline_gc, width,
- 				    GDK_LINE_SOLID, GDK_CAP_ROUND, GDK_JOIN_ROUND);
-@@ -595,15 +596,16 @@
- static void
- get_color_value (FooCanvasPolygon *poly, gulong pixel, GValue *value)
- {
--	GdkColor *color;
-+	GdkColor color;
- 	GdkColormap *colormap;
- 
--	color = g_new (GdkColor, 1);
--	color->pixel = pixel;
-+	//color = g_new (GdkColor, 1);
-+	//color->pixel = pixel;
- 
--	colormap = gtk_widget_get_colormap (GTK_WIDGET (poly));
--	gdk_rgb_find_color (colormap, color);
--	g_value_set_boxed (value, color);
-+	colormap = gtk_widget_get_colormap (GTK_WIDGET (FOO_CANVAS_ITEM(poly)->canvas));
-+	gdk_colormap_query_color(colormap, pixel, &color);
-+	//gdk_rgb_find_color (colormap, color);
-+	g_value_set_boxed (value, &color);
- }
- 
- static void
-@@ -801,7 +803,7 @@
- 
- 	if (poly->outline_set) {
- 		if (poly->width_pixels)
--			width = poly->width / item->canvas->pixels_per_unit;
-+			width = poly->width / item->canvas->pixels_per_unit_x;
- 		else
- 			width = poly->width;
- 
-Only in ./libfoocanvas: foo-canvas-polygon.lo
-Only in ./libfoocanvas: foo-canvas-polygon.o
-diff -u -r ../foocanvas.latest/libfoocanvas/foo-canvas-rect-ellipse.c ./libfoocanvas/foo-canvas-rect-ellipse.c
---- ../foocanvas.latest/libfoocanvas/foo-canvas-rect-ellipse.c	2007-10-15 12:13:32.090000000 +0100
-+++ ./libfoocanvas/foo-canvas-rect-ellipse.c	2007-10-15 12:13:35.772000000 +0100
-@@ -1,3 +1,4 @@
-+/*  Last edited: Feb 25 11:09 2005 (rds) */
- /*
-  * Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation
-  * All rights reserved.
-@@ -281,7 +282,7 @@
- 	item = FOO_CANVAS_ITEM (re);
- 
- 	if (re->width_pixels)
--		hwidth = (re->width / item->canvas->pixels_per_unit) / 2.0;
-+		hwidth = (re->width / item->canvas->pixels_per_unit_x) / 2.0;
- 	else
- 		hwidth = re->width / 2.0;
- 
-@@ -352,7 +353,7 @@
- 	if (re->width_pixels)
- 		width = (int) re->width;
- 	else
--		width = (int) (re->width * re->item.canvas->pixels_per_unit + 0.5);
-+		width = (int) (re->width * re->item.canvas->pixels_per_unit_x + 0.5);
- 
- 	gdk_gc_set_line_attributes (re->outline_gc, width,
- 				    GDK_LINE_SOLID, GDK_CAP_PROJECTING, GDK_JOIN_MITER);
-@@ -734,7 +735,7 @@
- 	re = FOO_CANVAS_RE (item);
- 
- 	if (re->width_pixels)
--		hwidth = (re->width / item->canvas->pixels_per_unit) / 2.0;
-+		hwidth = (re->width / item->canvas->pixels_per_unit_x) / 2.0;
- 	else
- 		hwidth = re->width / 2.0;
- 
-@@ -1065,7 +1066,7 @@
- 
- 	if (re->outline_set) {
- 		if (re->width_pixels)
--			hwidth = (re->width / item->canvas->pixels_per_unit) / 2.0;
-+			hwidth = (re->width / item->canvas->pixels_per_unit_x) / 2.0;
- 		else
- 			hwidth = re->width / 2.0;
- 
-@@ -1191,7 +1192,7 @@
- 		if (re->width_pixels)
- 			width_pixels = (int) re->width;
- 		else
--			width_pixels = (int) floor (re->width * re->item.canvas->pixels_per_unit + 0.5);
-+			width_pixels = (int) floor (re->width * re->item.canvas->pixels_per_unit_x + 0.5);
- 
- 		width_lt = width_pixels / 2;
- 		width_rb = (width_pixels + 1) / 2;
-@@ -1344,7 +1345,7 @@
- 
- 	if (re->outline_set) {
- 		if (re->width_pixels)
--			width = re->width / item->canvas->pixels_per_unit;
-+			width = re->width / item->canvas->pixels_per_unit_x;
- 		else
- 			width = re->width;
- 	} else
-Only in ./libfoocanvas: foo-canvas-rect-ellipse.lo
-Only in ./libfoocanvas: foo-canvas-rect-ellipse.o
-diff -u -r ../foocanvas.latest/libfoocanvas/foo-canvas-text.c ./libfoocanvas/foo-canvas-text.c
---- ../foocanvas.latest/libfoocanvas/foo-canvas-text.c	2007-10-15 12:13:32.010000000 +0100
-+++ ./libfoocanvas/foo-canvas-text.c	2007-10-15 12:13:35.807000000 +0100
-@@ -1,3 +1,4 @@
-+/*  Last edited: Oct 18 18:38 2006 (rds) */
- /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
- /*
-  * $Id: foo-canvas-text.c 52 2005-04-04 15:13:29Z mortenw $
-@@ -615,8 +616,8 @@
- 	/* Get canvas pixel coordinates for clip rectangle position */
- 
- 	foo_canvas_w2c (item->canvas, wx, wy, &text->clip_cx, &text->clip_cy);
--	text->clip_cwidth = text->clip_width * item->canvas->pixels_per_unit;
--	text->clip_cheight = text->clip_height * item->canvas->pixels_per_unit;
-+	text->clip_cwidth = text->clip_width * item->canvas->pixels_per_unit_x;
-+	text->clip_cheight = text->clip_height * item->canvas->pixels_per_unit_y;
- 
- 	/* Anchor text */
- 
-@@ -976,7 +977,7 @@
- 	case PROP_WRAP_WIDTH: {
- 		double w = fabs (g_value_get_double (value));
- 		pango_layout_set_width (text->layout,
--			w * text->item.canvas->pixels_per_unit * PANGO_SCALE);
-+			w * text->item.canvas->pixels_per_unit_x * PANGO_SCALE);
- 
- 		break;
- 	}
-@@ -1252,11 +1253,11 @@
- 		break;
- 
- 	case PROP_TEXT_WIDTH:
--		g_value_set_double (value, text->max_width / text->item.canvas->pixels_per_unit);
-+		g_value_set_double (value, text->max_width / text->item.canvas->pixels_per_unit_x);
- 		break;
- 
- 	case PROP_TEXT_HEIGHT:
--		g_value_set_double (value, text->height / text->item.canvas->pixels_per_unit);
-+		g_value_set_double (value, text->height / text->item.canvas->pixels_per_unit_y);
- 		break;
- 
- 	default:
-@@ -1309,7 +1310,8 @@
- 	if (text->rise_set)
- 		add_attr (attr_list, pango_attr_rise_new (text->rise));
- 
--	zoom = text->item.canvas->pixels_per_unit;
-+	/* guessing that the x factor is OK here. RNGC */
-+	zoom = text->item.canvas->pixels_per_unit_x;
- 	if (fabs (zoom - 1.) > 1e-4) {
- 		PangoAttribute *attr = pango_attr_scale_new (zoom);
- 		attr->start_index = 0;
-@@ -1479,14 +1481,14 @@
-  	        PangoRectangle log_rect;
- 
- 		pango_layout_iter_get_line_extents (iter, NULL, &log_rect);
--
--		if (text->clip) {
-+                /* if (text->clip) { // original */
-+		/* if (!text->clip) { // broken for clipped !!! ;) */
-+                if(1) {
- 			x1 = PANGO_PIXELS (log_rect.x);
- 			y1 = PANGO_PIXELS (log_rect.y);
- 			x2 = PANGO_PIXELS (log_rect.x+log_rect.width);
- 			y2 = PANGO_PIXELS (log_rect.y+log_rect.height);
- 
--
- 			if (x1 < text->clip_cx)
- 				x1 = text->clip_cx;
- 
-@@ -1529,7 +1531,9 @@
- 			return 0.0;
- 		}
- 
-+
- 		dist = sqrt (dx * dx + dy * dy);
-+
- 		if (dist < best)
- 			best = dist;
- 
-@@ -1537,7 +1541,10 @@
- 
- 	pango_layout_iter_free(iter);
- 
--	return best / item->canvas->pixels_per_unit;
-+
-+	/* guessing that the x factor is OK here. RNGC */
-+        /* using x factor here as that is what is used in foo-canvas.c ... */
-+	return best / item->canvas->pixels_per_unit_x;
- }
- 
- static void
-@@ -1567,8 +1574,8 @@
- 		width = text->clip_width;
- 		height = text->clip_height;
- 	} else {
--		width = text->max_width / item->canvas->pixels_per_unit;
--		height = text->height / item->canvas->pixels_per_unit;
-+		width = text->max_width / item->canvas->pixels_per_unit_x;
-+		height = text->height / item->canvas->pixels_per_unit_y;
- 	}
- 
- 	switch (text->anchor) {
-Only in ./libfoocanvas: foo-canvas-text.lo
-Only in ./libfoocanvas: foo-canvas-text.o
-Only in ./libfoocanvas: foo-canvas-util.lo
-Only in ./libfoocanvas: foo-canvas-util.o
-diff -u -r ../foocanvas.latest/libfoocanvas/foo-canvas-widget.c ./libfoocanvas/foo-canvas-widget.c
---- ../foocanvas.latest/libfoocanvas/foo-canvas-widget.c	2007-10-15 12:13:31.990000000 +0100
-+++ ./libfoocanvas/foo-canvas-widget.c	2007-10-15 12:13:35.834000000 +0100
-@@ -1,3 +1,4 @@
-+/*  Last edited: May 11 11:42 2004 (rnc) */
- /*
-  * Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation
-  * All rights reserved.
-@@ -456,8 +457,8 @@
- 			witem->cwidth = (int) (witem->width + 0.5);
- 			witem->cheight = (int) (witem->height + 0.5);
- 		} else {
--			witem->cwidth = (int) (witem->width * item->canvas->pixels_per_unit + 0.5);
--			witem->cheight = (int) (witem->height * item->canvas->pixels_per_unit + 0.5);
-+			witem->cwidth = (int) (witem->width * item->canvas->pixels_per_unit_x + 0.5);
-+			witem->cheight = (int) (witem->height * item->canvas->pixels_per_unit_y + 0.5);
- 		}
- 
- 		gtk_widget_set_usize (witem->widget, witem->cwidth, witem->cheight);
-@@ -516,8 +517,8 @@
- 
- 	foo_canvas_c2w (item->canvas, witem->cx, witem->cy, &x1, &y1);
- 
--	x2 = x1 + (witem->cwidth - 1) / item->canvas->pixels_per_unit;
--	y2 = y1 + (witem->cheight - 1) / item->canvas->pixels_per_unit;
-+	x2 = x1 + (witem->cwidth - 1) / item->canvas->pixels_per_unit_x;
-+	y2 = y1 + (witem->cheight - 1) / item->canvas->pixels_per_unit_y;
- 
- 	/* Is point inside widget bounds? */
- 
-Only in ./libfoocanvas: foo-canvas-widget.lo
-Only in ./libfoocanvas: foo-canvas-widget.o
-Only in ./libfoocanvas: foozmap-canvas-line-glyph.c
-Only in ./libfoocanvas: foozmap-canvas-line-glyph.h
-Only in ./libfoocanvas: foozmap-canvas-line-glyph.lo
-Only in ./libfoocanvas: foozmap-canvas-line-glyph.o
-diff -u -r ../foocanvas.latest/libfoocanvas/libfoocanvas.h ./libfoocanvas/libfoocanvas.h
---- ../foocanvas.latest/libfoocanvas/libfoocanvas.h	2007-10-15 12:13:31.954000000 +0100
-+++ ./libfoocanvas/libfoocanvas.h	2007-10-15 12:13:35.851000000 +0100
-@@ -1,3 +1,4 @@
-+/*  Last edited: Aug  1 11:42 2006 (edgrif) */
- /*
-  * Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation
-  * All rights reserved.
-@@ -35,6 +36,9 @@
- #include <libfoocanvas/foo-canvas-rect-ellipse.h>
- #include <libfoocanvas/foo-canvas-util.h>
- 
-+#include <libfoocanvas/foozmap-canvas-line-glyph.h>
-+
-+
- G_BEGIN_DECLS
- 
- GType foo_canvas_points_get_type (void);
-Only in ./libfoocanvas: libfoocanvas.la
-Only in ./libfoocanvas: libfoocanvas.pc
-Only in ./libfoocanvas: libfoocanvastypes.lo
-Only in ./libfoocanvas: libfoocanvastypes.o
-Only in ./libfoocanvas: .libs
-Only in ./libfoocanvas: Makefile
-diff -u -r ../foocanvas.latest/libfoocanvas/Makefile.am ./libfoocanvas/Makefile.am
---- ../foocanvas.latest/libfoocanvas/Makefile.am	2007-10-15 12:13:32.215000000 +0100
-+++ ./libfoocanvas/Makefile.am	2007-10-15 12:13:35.879000000 +0100
-@@ -22,6 +22,7 @@
- 
- libfoocanvasinclude_HEADERS =			\
- 	foo-canvas-line.h			\
-+	foozmap-canvas-line-glyph.h		\
- 	foo-canvas-pixbuf.h			\
- 	foo-canvas-polygon.h			\
- 	foo-canvas-rect-ellipse.h		\
-@@ -36,6 +37,7 @@
- 	foo-canvas-marshal.list			\
- 	foo-canvas-i18n.h			\
- 	foo-canvas-line.c			\
-+	foozmap-canvas-line-glyph.c		\
- 	foo-canvas-pixbuf.c			\
- 	foo-canvas-polygon.c			\
- 	foo-canvas-rect-ellipse.c		\
-Only in ./libfoocanvas: Makefile.in
-Only in ./: libtool
-Only in ./: ltmain.sh
-Only in ./: Makefile
-Only in ./: Makefile.in
-Only in ./: missing
-Only in ./: mkinstalldirs
-Only in ./po: Makefile.in.in
-Only in ./: stamp-h1
diff --git a/foocanvas/support/libfoocanvas-20071015.tar.gz b/foocanvas/support/libfoocanvas-20071015.tar.gz
deleted file mode 100755
index 67ef7353ead1f7a16ca48b1ca35275589ae3d4ec..0000000000000000000000000000000000000000
Binary files a/foocanvas/support/libfoocanvas-20071015.tar.gz and /dev/null differ
diff --git a/foocanvas/support/libfoocanvas-20071109.patch b/foocanvas/support/libfoocanvas-20071109.patch
deleted file mode 100755
index ac3446ced15ca04464f71c112875b1f18b89dde8..0000000000000000000000000000000000000000
--- a/foocanvas/support/libfoocanvas-20071109.patch
+++ /dev/null
@@ -1,1122 +0,0 @@
-Only in ./: aclocal.m4
-diff -u -r ../foocanvas.latest/autogen.sh ./autogen.sh
---- ../foocanvas.latest/autogen.sh	2007-11-05 16:53:02.000000000 +0000
-+++ ./autogen.sh	2007-11-05 16:53:03.000000000 +0000
-@@ -41,5 +41,5 @@
-   exit 1
- fi
- 
--REQUIRED_AUTOMAKE_VERSION=1.5
-+REQUIRED_AUTOMAKE_VERSION=1.9
- GNOME_DATADIR="$gnome_datadir" USE_GNOME2_MACROS=1 . $gnome_autogen
-Only in ./: autom4te.cache
-Only in ./: config.guess
-Only in ./: config.h.in
-Only in ./: config.sub
-Only in ./: configure
-diff -u -r ../foocanvas.latest/configure.in ./configure.in
---- ../foocanvas.latest/configure.in	2007-11-05 16:53:02.000000000 +0000
-+++ ./configure.in	2007-11-05 16:53:03.000000000 +0000
-@@ -3,7 +3,7 @@
- AC_CONFIG_SRCDIR([libfoocanvas/foo-canvas.c])
- 
- AC_CONFIG_HEADERS([config.h])
--AM_INIT_AUTOMAKE([dist-bz2])
-+AM_INIT_AUTOMAKE([])
- 
- AM_MAINTAINER_MODE
- 
-Only in ./demos: Makefile.in
-Only in ./: depcomp
-Only in ./: gmon.out
-Only in ./: gtk-doc.make
-Only in ./: INSTALL
-Only in ./: install-sh
-diff -u -r ../foocanvas.latest/libfoocanvas/foo-canvas.c ./libfoocanvas/foo-canvas.c
---- ../foocanvas.latest/libfoocanvas/foo-canvas.c	2007-11-05 16:53:02.000000000 +0000
-+++ ./libfoocanvas/foo-canvas.c	2007-11-09 12:11:20.008557041 +0000
-@@ -78,7 +78,7 @@
- 
- static void foo_canvas_request_update (FooCanvas      *canvas);
- static void group_add                   (FooCanvasGroup *group,
--					 FooCanvasItem  *item);
-+					 FooCanvasItem  *item, FooCanvasGroupPosition position);
- static void group_remove                (FooCanvasGroup *group,
- 					 FooCanvasItem  *item);
- static void redraw_and_repick_if_mapped (FooCanvasItem *item);
-@@ -190,17 +190,56 @@
- }
- 
- 
-+/**
-+ * foo_canvas_item_new:
-+ * @parent: The parent group for the new item.
-+ * @type: The object type of the item.
-+ * @position: puts new item at bottom (FOO_CANVAS_GROUP_BOTTOM) or top (FOO_CANVAS_GROUP_TOP)
-+ * of parents stack of child items.
-+ * @first_arg_name: A list of object argument name/value pairs, NULL-terminated,
-+ * used to configure the item.  For example, "fill_color", "black",
-+ * "width_units", 5.0, NULL.
-+ * @Varargs:
-+ *
-+ * Creates a new canvas item with @parent as its parent group.  The item is
-+ * created at the top of its parent's stack, and starts up as visible.  The item
-+ * is of the specified @type, for example, it can be
-+ * foo_canvas_rect_get_type().  The list of object arguments/value pairs is
-+ * used to configure the item.
-+ *
-+ * Return value: The newly-created item.
-+ **/
-+FooCanvasItem *
-+foo_canvas_item_new_position (FooCanvasGroup *parent, GType type, FooCanvasGroupPosition position,
-+			      const gchar *first_arg_name, ...)
-+{
-+	FooCanvasItem *item;
-+	va_list args;
-+
-+	g_return_val_if_fail (FOO_IS_CANVAS_GROUP (parent), NULL);
-+	g_return_val_if_fail (g_type_is_a (type, foo_canvas_item_get_type ()), NULL);
-+
-+	item = FOO_CANVAS_ITEM (g_object_new (type, NULL));
-+
-+	va_start (args, first_arg_name);
-+	foo_canvas_item_construct_position (item, parent, position, first_arg_name, args);
-+	va_end (args);
-+
-+	return item;
-+}
-+
-+
- /* Performs post-creation operations on a canvas item (adding it to its parent
-  * group, etc.)
-  */
- static void
--item_post_create_setup (FooCanvasItem *item)
-+item_post_create_setup (FooCanvasItem *item, FooCanvasGroupPosition position)
- {
- 	GtkObject *obj;
- 
- 	obj = GTK_OBJECT (item);
- 
--	group_add (FOO_CANVAS_GROUP (item->parent), item);
-+	group_add (FOO_CANVAS_GROUP (item->parent), item, position);
- 
- 	redraw_and_repick_if_mapped (item);
- }
-@@ -224,7 +263,7 @@
- 		} else if (g_value_get_object (value)) {
- 			item->parent = FOO_CANVAS_ITEM (g_value_get_object (value));
- 			item->canvas = item->parent->canvas;
--			item_post_create_setup (item);
-+			item_post_create_setup (item, FOO_CANVAS_GROUP_TOP);
- 		}
- 		break;
- 	case ITEM_PROP_VISIBLE:
-@@ -282,7 +321,34 @@
- 
- 	g_object_set_valist (G_OBJECT (item), first_arg_name, args);
- 
--	item_post_create_setup (item);
-+	item_post_create_setup (item, FOO_CANVAS_GROUP_TOP);
-+}
-+
-+
-+/**
-+ * foo_canvas_item_construct_position:
-+ * @item: An unconstructed canvas item.
-+ * @parent: The parent group for the item.
-+ * @position: puts new item at bottom (FOO_CANVAS_GROUP_BOTTOM) or top (FOO_CANVAS_GROUP_TOP)
-+ * of parents stack of child items.
-+ * @first_arg_name: The name of the first argument for configuring the item.
-+ * @args: The list of arguments used to configure the item.
-+ *
-+ * Constructs a canvas item; meant for use only by item implementations.
-+ **/
-+void
-+foo_canvas_item_construct_position (FooCanvasItem *item, FooCanvasGroup *parent, FooCanvasGroupPosition position,
-+				    const gchar *first_arg_name, va_list args)
-+{
-+	g_return_if_fail (FOO_IS_CANVAS_GROUP (parent));
-+	g_return_if_fail (FOO_IS_CANVAS_ITEM (item));
-+
-+	item->parent = FOO_CANVAS_ITEM (parent);
-+	item->canvas = item->parent->canvas;
-+
-+	g_object_set_valist (G_OBJECT (item), first_arg_name, args);
-+
-+	item_post_create_setup (item, position);
- }
- 
- 
-@@ -295,6 +361,7 @@
- 	}
- }
- 
-+
- /* Destroy handler for canvas items */
- static void
- foo_canvas_item_destroy (GtkObject *object)
-@@ -339,10 +406,8 @@
- 
- 		if (item->parent)
- 			group_remove (FOO_CANVAS_GROUP (item->parent), item);
--
- 		item->canvas = NULL;
- 	}
--
- 	GTK_OBJECT_CLASS (item_parent_class)->destroy (object);
- }
- 
-@@ -992,7 +1057,7 @@
- 	group_remove (FOO_CANVAS_GROUP (item->parent), item);
- 	item->parent = FOO_CANVAS_ITEM (new_group);
- 	/* item->canvas is unchanged.  */
--	group_add (new_group, item);
-+	group_add (new_group, item, FOO_CANVAS_GROUP_TOP);
- 
- 	/* Redraw and repick */
- 
-@@ -1376,6 +1441,7 @@
- 	bbox_x1 = 0;
- 	bbox_y1 = 0;
- 
-+       if(item->object.flags & FOO_CANVAS_ITEM_VISIBLE){ 
- 	for (list = group->item_list; list; list = list->next) {
- 		i = list->data;
- 
-@@ -1394,10 +1460,14 @@
- 			bbox_y1 = MAX (bbox_y1, i->y2);
- 		}
- 	}
-+
-+       }
- 	item->x1 = bbox_x0;
- 	item->y1 = bbox_y0;
- 	item->x2 = bbox_x1;
- 	item->y2 = bbox_y1;
-+
-+        return ;
- }
- 
- /* Unrealize handler for canvas groups */
-@@ -1540,10 +1610,10 @@
- 			has_point = TRUE;
- 		} else
- 			has_point = FALSE;
--
-+		/* guessing that the x factor is OK here. RNGC */
- 		if (has_point
- 		    && point_item
--		    && ((int) (dist * item->canvas->pixels_per_unit + 0.5)
-+		    && ((int) (dist * item->canvas->pixels_per_unit_x + 0.5)
- 			<= item->canvas->close_enough)) {
- 			best = dist;
- 			*actual_item = point_item;
-@@ -1553,7 +1623,7 @@
- 	return best;
- }
- 
--static void
-+void
- foo_canvas_group_translate (FooCanvasItem *item, double dx, double dy)
- {
-         FooCanvasGroup *group;
-@@ -1642,16 +1712,30 @@
- 
- /* Adds an item to a group */
- static void
--group_add (FooCanvasGroup *group, FooCanvasItem *item)
-+group_add (FooCanvasGroup *group, FooCanvasItem *item, FooCanvasGroupPosition position)
- {
- 	g_object_ref (GTK_OBJECT (item));
- 	gtk_object_sink (GTK_OBJECT (item));
- 
--	if (!group->item_list) {
--		group->item_list = g_list_append (group->item_list, item);
--		group->item_list_end = group->item_list;
--	} else
--		group->item_list_end = g_list_append (group->item_list_end, item)->next;
-+	if (position == FOO_CANVAS_GROUP_TOP)
-+	  {
-+	    if (!group->item_list) {
-+	      group->item_list = g_list_append (group->item_list, item);
-+	      group->item_list_end = group->item_list;
-+	    } else
-+	      group->item_list_end = g_list_append (group->item_list_end, item)->next;
-+	  }
-+	else
-+	  {
-+	    if (!group->item_list) {
-+	      group->item_list = g_list_prepend (group->item_list, item);
-+	      group->item_list_end = group->item_list;
-+	    } else
-+	      group->item_list = g_list_prepend (group->item_list, item);
-+	  }
-+
-+
-+
- 
- 	if (item->object.flags & FOO_CANVAS_ITEM_VISIBLE &&
- 	    group->item.object.flags & FOO_CANVAS_ITEM_MAPPED) {
-@@ -1703,6 +1787,9 @@
- 
- enum {
- 	DRAW_BACKGROUND,
-+	DRAWN_ITEMS,
-+	BEGIN_UPDATE,
-+	END_UPDATE,
- 	LAST_SIGNAL
- };
- 
-@@ -2053,6 +2140,35 @@
- 			      G_TYPE_NONE, 4, 
- 			      G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT);
- 
-+	canvas_signals[DRAWN_ITEMS] =
-+		g_signal_new ("drawn_items",
-+			      G_TYPE_FROM_CLASS (object_class),
-+			      G_SIGNAL_RUN_FIRST,
-+			      0,
-+			      NULL, NULL,
-+			      foo_canvas_marshal_VOID__INT_INT_INT_INT,
-+			      G_TYPE_NONE, 4, 
-+			      G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT);
-+
-+	canvas_signals[BEGIN_UPDATE] =
-+		g_signal_new ("begin_update",
-+			      G_TYPE_FROM_CLASS (object_class),
-+			      G_SIGNAL_RUN_FIRST,
-+			      0,
-+			      NULL, NULL,
-+			      foo_canvas_marshal_VOID__VOID,
-+			      G_TYPE_NONE, 0); 
-+
-+	canvas_signals[END_UPDATE] =
-+		g_signal_new ("end_update",
-+			      G_TYPE_FROM_CLASS (object_class),
-+			      G_SIGNAL_RUN_FIRST,
-+			      0,
-+			      NULL, NULL,
-+			      foo_canvas_marshal_VOID__VOID,
-+			      G_TYPE_NONE, 0); 
-+
-+
- 	atk_registry_set_factory_type (atk_get_default_registry (),
- 				       FOO_TYPE_CANVAS,
- 				       foo_canvas_accessible_factory_get_type ());
-@@ -2080,7 +2196,8 @@
- 	canvas->scroll_x2 = canvas->layout.width;
- 	canvas->scroll_y2 = canvas->layout.height;
- 
--	canvas->pixels_per_unit = 1.0;
-+	canvas->pixels_per_unit_x = 1.0;
-+	canvas->pixels_per_unit_y = 1.0;
- 
- 	canvas->pick_event.type = GDK_LEAVE_NOTIFY;
- 	canvas->pick_event.crossing.x = 0;
-@@ -2298,12 +2415,12 @@
- 	int old_zoom_xofs, old_zoom_yofs;
- 	int changed_x = FALSE, changed_y = FALSE;
- 	int canvas_width, canvas_height;
--
-+	
- 	canvas_width = GTK_WIDGET (canvas)->allocation.width;
- 	canvas_height = GTK_WIDGET (canvas)->allocation.height;
- 
--	scroll_width = floor ((canvas->scroll_x2 - canvas->scroll_x1) * canvas->pixels_per_unit + 0.5);
--	scroll_height = floor ((canvas->scroll_y2 - canvas->scroll_y1) * canvas->pixels_per_unit + 0.5);
-+	scroll_width = floor ((canvas->scroll_x2 - canvas->scroll_x1) * canvas->pixels_per_unit_x + 0.5);
-+	scroll_height = floor ((canvas->scroll_y2 - canvas->scroll_y1) * canvas->pixels_per_unit_y + 0.5);
- 
- 	right_limit = scroll_width - canvas_width;
- 	bottom_limit = scroll_height - canvas_height;
-@@ -2867,10 +2984,14 @@
- 		g_source_remove (canvas->idle_id);
- 		canvas->idle_id = 0;
- 	}
-+
- 	if (canvas->need_update) {
- 		g_return_val_if_fail (!canvas->doing_update, FALSE);
- 
-+		g_signal_emit(G_OBJECT (canvas), canvas_signals[BEGIN_UPDATE], 0);
-+
- 		canvas->doing_update = TRUE;
-+
- 		foo_canvas_item_invoke_update (canvas->root, 0, 0, 0);
- 
- 		g_return_val_if_fail (canvas->doing_update, FALSE);
-@@ -2878,6 +2999,8 @@
- 		canvas->doing_update = FALSE;
- 
- 		canvas->need_update = FALSE;
-+
-+		g_signal_emit(G_OBJECT (canvas), canvas_signals[END_UPDATE], 0);
- 	}
- 
- 	/* Hmmm. Would like to queue antiexposes if the update marked
-@@ -2888,16 +3011,20 @@
- 		       event->area.x, event->area.y,
- 		       event->area.width, event->area.height);
- 	
--	if (canvas->root->object.flags & FOO_CANVAS_ITEM_MAPPED)
-+	if (canvas->root->object.flags & FOO_CANVAS_ITEM_MAPPED){
- 		(* FOO_CANVAS_ITEM_GET_CLASS (canvas->root)->draw) (canvas->root,
--								      canvas->layout.bin_window,
--								      event);
--
-+								    canvas->layout.bin_window,
-+								    event);
-+	}
- 
- 
- 	/* Chain up to get exposes on child widgets */
- 	GTK_WIDGET_CLASS (canvas_parent_class)->expose_event (widget, event);
- 
-+	g_signal_emit (G_OBJECT (canvas), canvas_signals[DRAWN_ITEMS], 0, 
-+		       event->area.x, event->area.y,
-+		       event->area.width, event->area.height);
-+
- 	return FALSE;
- }
- 
-@@ -2919,11 +3046,12 @@
- do_update (FooCanvas *canvas)
- {
- 	/* Cause the update if necessary */
--
- update_again:
- 	if (canvas->need_update) {
- 		g_return_if_fail (!canvas->doing_update);
- 
-+		g_signal_emit(G_OBJECT (canvas), canvas_signals[BEGIN_UPDATE], 0);
-+
- 		canvas->doing_update = TRUE;
- 		foo_canvas_item_invoke_update (canvas->root, 0, 0, 0);
- 
-@@ -2932,6 +3060,8 @@
- 		canvas->doing_update = FALSE;
- 
- 		canvas->need_update = FALSE;
-+
-+		g_signal_emit(G_OBJECT (canvas), canvas_signals[END_UPDATE], 0);
- 	}
- 
- 	/* Pick new current item */
-@@ -2949,6 +3079,8 @@
- 	if (canvas->need_update) {
- 		goto update_again;
- 	}
-+
-+	return ;
- }
- 
- /* Idle handler for the canvas.  It deals with pending updates and redraws. */
-@@ -3026,7 +3158,7 @@
- 	    (canvas->scroll_x2 == x2) && (canvas->scroll_y2 == y2)) {
- 		return;
- 	}
--	
-+
- 	/*
- 	 * Set the new scrolling region.  If possible, do not move the visible contents of the
- 	 * canvas.
-@@ -3101,15 +3233,35 @@
- 
- /**
-  * foo_canvas_set_pixels_per_unit:
-- * @canvas: A canvas.
-+ * @canvas: A canvas
-  * @n: The number of pixels that correspond to one canvas unit.
-  *
-  * Sets the zooming factor of a canvas by specifying the number of pixels that
-  * correspond to one canvas unit.
-+ * This is retained for backwards compatibility and just calls
-+ * foo_canvas_set_pixels_per_unit_xy, passing the number of pixels/unit twice.
-  **/
- void
- foo_canvas_set_pixels_per_unit (FooCanvas *canvas, double n)
- {
-+  foo_canvas_set_pixels_per_unit_xy(canvas, n, n);
-+  return;
-+}
-+
-+
-+/**
-+ * foo_canvas_set_pixels_per_unit_xy:
-+ * @canvas: A canvas.
-+ * @x: The number of pixels that correspond to one canvas unit on the x axis.
-+ * @y: The number of pixels that correspond to one canvas unit on the y axis.
-+ *
-+ * Sets the zooming factor of a canvas by specifying the number of pixels that
-+ * correspond to one canvas unit.
-+ * Having two zooming factors enables asymmetric zooming.
-+ **/
-+void
-+foo_canvas_set_pixels_per_unit_xy (FooCanvas *canvas, double x, double y)
-+{
- 	GtkWidget *widget;
- 	double cx, cy;
- 	int x1, y1;
-@@ -3119,7 +3271,8 @@
- 	gint attributes_mask;
- 
- 	g_return_if_fail (FOO_IS_CANVAS (canvas));
--	g_return_if_fail (n > FOO_CANVAS_EPSILON);
-+	/* guessing that the x factor is OK here.  RNCG */
-+	g_return_if_fail (x > FOO_CANVAS_EPSILON);
- 
- 	widget = GTK_WIDGET (canvas);
- 
-@@ -3127,14 +3280,15 @@
- 	center_y = widget->allocation.height / 2;
- 
- 	/* Find the coordinates of the screen center in units. */
--	cx = (canvas->layout.hadjustment->value + center_x) / canvas->pixels_per_unit + canvas->scroll_x1 + canvas->zoom_xofs;
--	cy = (canvas->layout.vadjustment->value + center_y) / canvas->pixels_per_unit + canvas->scroll_y1 + canvas->zoom_yofs;
-+	cx = (canvas->layout.hadjustment->value + center_x) / canvas->pixels_per_unit_x + canvas->scroll_x1 + canvas->zoom_xofs;
-+	cy = (canvas->layout.vadjustment->value + center_y) / canvas->pixels_per_unit_y + canvas->scroll_y1 + canvas->zoom_yofs;
- 
- 	/* Now calculate the new offset of the upper left corner. (round not truncate) */
--	x1 = ((cx - canvas->scroll_x1) * n) - center_x + .5;
--	y1 = ((cy - canvas->scroll_y1) * n) - center_y + .5;
-+	x1 = ((cx - canvas->scroll_x1) * x) - center_x + .5;
-+	y1 = ((cy - canvas->scroll_y1) * y) - center_y + .5;
- 
--	canvas->pixels_per_unit = n;
-+	canvas->pixels_per_unit_x = x;
-+	canvas->pixels_per_unit_y = y;
- 
- 	if (!(canvas->root->object.flags & FOO_CANVAS_ITEM_NEED_DEEP_UPDATE)) {
- 		canvas->root->object.flags |= FOO_CANVAS_ITEM_NEED_DEEP_UPDATE;
-@@ -3268,7 +3422,8 @@
- 	foo_canvas_w2c (canvas, x, y, &cx, &cy);
- 
- 	dist = foo_canvas_item_invoke_point (canvas->root, x, y, cx, cy, &item);
--	if ((int) (dist * canvas->pixels_per_unit + 0.5) <= canvas->close_enough)
-+	/* guessing the x factor is OK here.  RNGC */
-+	if ((int) (dist * canvas->pixels_per_unit_x + 0.5) <= canvas->close_enough)
- 		return item;
- 	else
- 		return NULL;
-@@ -3331,16 +3486,17 @@
- void
- foo_canvas_w2c (FooCanvas *canvas, double wx, double wy, int *cx, int *cy)
- {
--	double zoom;
-+	double zoom_x, zoom_y;
- 
- 	g_return_if_fail (FOO_IS_CANVAS (canvas));
- 	
--	zoom = canvas->pixels_per_unit;
-+	zoom_x = canvas->pixels_per_unit_x;
-+	zoom_y = canvas->pixels_per_unit_y;
- 	
- 	if (cx)
--		*cx = floor ((wx - canvas->scroll_x1)*zoom + canvas->zoom_xofs + 0.5);
-+		*cx = floor ((wx - canvas->scroll_x1)*zoom_x + canvas->zoom_xofs + 0.5);
- 	if (cy)
--		*cy = floor ((wy - canvas->scroll_y1)*zoom + canvas->zoom_yofs + 0.5);
-+		*cy = floor ((wy - canvas->scroll_y1)*zoom_y + canvas->zoom_yofs + 0.5);
- }
- 
- /**
-@@ -3380,16 +3536,17 @@
- void
- foo_canvas_w2c_d (FooCanvas *canvas, double wx, double wy, double *cx, double *cy)
- {
--	double zoom;
-+	double zoom_x, zoom_y;
- 
- 	g_return_if_fail (FOO_IS_CANVAS (canvas));
- 
--	zoom = canvas->pixels_per_unit;
-+	zoom_x = canvas->pixels_per_unit_x;
-+	zoom_y = canvas->pixels_per_unit_y;
- 	
- 	if (cx)
--		*cx = (wx - canvas->scroll_x1)*zoom + canvas->zoom_xofs;
-+		*cx = (wx - canvas->scroll_x1)*zoom_x + canvas->zoom_xofs;
- 	if (cy)
--		*cy = (wy - canvas->scroll_y1)*zoom + canvas->zoom_yofs;
-+		*cy = (wy - canvas->scroll_y1)*zoom_y + canvas->zoom_yofs;
- }
- 
- 
-@@ -3406,16 +3563,17 @@
- void
- foo_canvas_c2w (FooCanvas *canvas, int cx, int cy, double *wx, double *wy)
- {
--	double zoom;
-+	double zoom_x, zoom_y;
- 
- 	g_return_if_fail (FOO_IS_CANVAS (canvas));
- 
--	zoom = canvas->pixels_per_unit;
-+	zoom_x = canvas->pixels_per_unit_x;
-+	zoom_y = canvas->pixels_per_unit_y;
- 	
- 	if (wx)
--		*wx = (cx - canvas->zoom_xofs)/zoom + canvas->scroll_x1;
-+		*wx = (cx - canvas->zoom_xofs)/zoom_x + canvas->scroll_x1;
- 	if (wy)
--		*wy = (cy - canvas->zoom_yofs)/zoom + canvas->scroll_y1;
-+		*wy = (cy - canvas->zoom_yofs)/zoom_y + canvas->scroll_y1;
- }
- 
- 
-@@ -3441,11 +3599,11 @@
- 
- 	if (worldx)
- 		*worldx = canvas->scroll_x1 + ((winx - canvas->zoom_xofs)
--					       / canvas->pixels_per_unit);
-+					       / canvas->pixels_per_unit_x);
- 
- 	if (worldy)
- 		*worldy = canvas->scroll_y1 + ((winy - canvas->zoom_yofs)
--					       / canvas->pixels_per_unit);
-+					       / canvas->pixels_per_unit_y);
- }
- 
- 
-@@ -3468,10 +3626,10 @@
- 	g_return_if_fail (FOO_IS_CANVAS (canvas));
- 
- 	if (winx)
--		*winx = (canvas->pixels_per_unit)*(worldx - canvas->scroll_x1) + canvas->zoom_xofs;
-+		*winx = (canvas->pixels_per_unit_x)*(worldx - canvas->scroll_x1) + canvas->zoom_xofs;
- 
- 	if (winy)
--		*winy = (canvas->pixels_per_unit)*(worldy - canvas->scroll_y1) + canvas->zoom_yofs;
-+		*winy = (canvas->pixels_per_unit_y)*(worldy - canvas->scroll_y1) + canvas->zoom_yofs;
- }
- 
- 
-@@ -3999,3 +4157,11 @@
-                                        FOO_TYPE_CANVAS_ITEM,
-                                        foo_canvas_item_accessible_factory_get_type ());
- }
-+
-+void 
-+foo_canvas_zmap(void)
-+{
-+  /* do nothing */
-+}
-+
-+/*  Last edited: Nov  9 12:11 2007 (rds) */
-diff -u -r ../foocanvas.latest/libfoocanvas/foo-canvas.h ./libfoocanvas/foo-canvas.h
---- ../foocanvas.latest/libfoocanvas/foo-canvas.h	2007-11-05 16:53:02.000000000 +0000
-+++ ./libfoocanvas/foo-canvas.h	2007-11-09 10:56:04.895677663 +0000
-@@ -1,3 +1,4 @@
-+/*  Last edited: Nov  9 10:56 2007 (rds) */
- /* -*- Mode: C; tab-width: 8; indent-tabs-mode: 8; c-basic-offset: 8 -*- */
- /*
-  * Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation
-@@ -101,6 +102,11 @@
- 	FOO_CANVAS_UPDATE_DEEP       = 1 << 1
- };
- 
-+
-+/* Special positions for putting new items at top or bottom of group. */
-+typedef enum {FOO_CANVAS_GROUP_BOTTOM = -1, FOO_CANVAS_GROUP_TOP  = -2} FooCanvasGroupPosition ;
-+
-+
- #define FOO_TYPE_CANVAS_ITEM            (foo_canvas_item_get_type ())
- #define FOO_CANVAS_ITEM(obj)            (GTK_CHECK_CAST ((obj), FOO_TYPE_CANVAS_ITEM, FooCanvasItem))
- #define FOO_CANVAS_ITEM_CLASS(klass)    (GTK_CHECK_CLASS_CAST ((klass), FOO_TYPE_CANVAS_ITEM, FooCanvasItemClass))
-@@ -186,10 +192,16 @@
- FooCanvasItem *foo_canvas_item_new (FooCanvasGroup *parent, GType type,
- 				    const gchar *first_arg_name, ...);
- 
-+FooCanvasItem *foo_canvas_item_new_position (FooCanvasGroup *parent, GType type, FooCanvasGroupPosition position,
-+					     const gchar *first_arg_name, ...);
-+
- /* Constructors for use in derived classes and language wrappers */
- void foo_canvas_item_construct (FooCanvasItem *item, FooCanvasGroup *parent,
- 				const gchar *first_arg_name, va_list args);
- 
-+void foo_canvas_item_construct_position (FooCanvasItem *item, FooCanvasGroup *parent, FooCanvasGroupPosition position,
-+					 const gchar *first_arg_name, va_list args);
-+
- /* Configure an item using the standard Gtk argument mechanism.  The last
-  * argument must be a NULL pointer.
-  */
-@@ -341,6 +353,7 @@
- #define FOO_IS_CANVAS_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), FOO_TYPE_CANVAS))
- #define FOO_CANVAS_GET_CLASS(obj)  (GTK_CHECK_GET_CLASS ((obj), FOO_TYPE_CANVAS, FooCanvasClass))
- 
-+typedef void (*FooCanvasUpdateSignal)(FooCanvas *canvas, gpointer user_data);
- 
- struct _FooCanvas {
- 	GtkLayout layout;
-@@ -371,7 +384,8 @@
- 	double scroll_x2, scroll_y2;
- 
- 	/* Scaling factor to be used for display */
--	double pixels_per_unit;
-+	double pixels_per_unit_x;
-+	double pixels_per_unit_y;
- 
- 	/* Idle handler ID */
- 	guint idle_id;
-@@ -456,6 +470,10 @@
- /* Sets the number of pixels that correspond to one unit in world coordinates */
- void foo_canvas_set_pixels_per_unit (FooCanvas *canvas, double n);
- 
-+/* Sets the number of  pixels corresponding to one unit in world coordinates
-+ * separately on x and y axes, allowing asymmetric zooming. */
-+void foo_canvas_set_pixels_per_unit_xy (FooCanvas *canvas, double x, double y);
-+
- /* Wether the canvas centers the scroll region if it is smaller than the window  */
- void foo_canvas_set_center_scroll_region (FooCanvas *canvas, gboolean center_scroll_region);
- 
-@@ -525,6 +543,10 @@
-  */
- void foo_canvas_set_stipple_origin (FooCanvas *canvas, GdkGC *gc);
- 
-+void foo_canvas_zmap(void);
-+
- G_END_DECLS
- 
-+
- #endif
-+
-diff -u -r ../foocanvas.latest/libfoocanvas/foo-canvas-line.c ./libfoocanvas/foo-canvas-line.c
---- ../foocanvas.latest/libfoocanvas/foo-canvas-line.c	2007-11-05 16:53:02.000000000 +0000
-+++ ./libfoocanvas/foo-canvas-line.c	2007-11-05 16:53:03.000000000 +0000
-@@ -1,3 +1,4 @@
-+/*  Last edited: Oct 18 18:34 2006 (rds) */
- /*
-  * Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation
-  * All rights reserved.
-@@ -338,7 +339,7 @@
- 	/* Add possible over-estimate for wide lines */
- 
- 	if (line->width_pixels)
--		width = line->width / line->item.canvas->pixels_per_unit;
-+		width = line->width / line->item.canvas->pixels_per_unit_x;
- 	else
- 		width = line->width;
- 
-@@ -466,7 +467,7 @@
- 		return;
- 
- 	if (line->width_pixels)
--		width = line->width / line->item.canvas->pixels_per_unit;
-+		width = line->width / line->item.canvas->pixels_per_unit_x;
- 	else
- 		width = line->width;
- 
-@@ -477,9 +478,9 @@
- 	shape_c = line->shape_c + width / 2.0;
- 
- 	if (line->width_pixels) {
--		shape_a /= line->item.canvas->pixels_per_unit;
--		shape_b /= line->item.canvas->pixels_per_unit;
--		shape_c /= line->item.canvas->pixels_per_unit;
-+		shape_a /= line->item.canvas->pixels_per_unit_x;
-+		shape_b /= line->item.canvas->pixels_per_unit_x;
-+		shape_c /= line->item.canvas->pixels_per_unit_x;
- 	}
- 
- 	shape_a += 0.001;
-@@ -600,7 +601,7 @@
- 	if (line->width_pixels)
- 		width = (int) line->width;
- 	else
--		width = (int) (line->width * line->item.canvas->pixels_per_unit + 0.5);
-+		width = (int) (line->width * line->item.canvas->pixels_per_unit_x + 0.5);
- 
- 	gdk_gc_set_line_attributes (line->gc,
- 				    width,
-@@ -1126,12 +1127,12 @@
- 	 */
- 
- 	if (line->width_pixels)
--		width = line->width / item->canvas->pixels_per_unit;
-+		width = line->width / item->canvas->pixels_per_unit_x;
- 	else
- 		width = line->width;
- 
--	if (width < (1.0 / item->canvas->pixels_per_unit))
--		width = 1.0 / item->canvas->pixels_per_unit;
-+	if (width < (1.0 / item->canvas->pixels_per_unit_x))
-+		width = 1.0 / item->canvas->pixels_per_unit_x;
- 
- 	changed_miter_to_bevel = 0;
- 
-diff -u -r ../foocanvas.latest/libfoocanvas/foo-canvas-marshal.list ./libfoocanvas/foo-canvas-marshal.list
---- ../foocanvas.latest/libfoocanvas/foo-canvas-marshal.list	2007-11-05 16:53:02.000000000 +0000
-+++ ./libfoocanvas/foo-canvas-marshal.list	2007-11-09 11:11:00.397948830 +0000
-@@ -1,2 +1,3 @@
- VOID:INT,INT,INT,INT
- BOOLEAN:BOXED
-+VOID:VOID
-Only in ./libfoocanvas: foo-canvas-marshal.list~
-diff -u -r ../foocanvas.latest/libfoocanvas/foo-canvas-pixbuf.c ./libfoocanvas/foo-canvas-pixbuf.c
---- ../foocanvas.latest/libfoocanvas/foo-canvas-pixbuf.c	2007-11-05 16:53:02.000000000 +0000
-+++ ./libfoocanvas/foo-canvas-pixbuf.c	2007-11-05 16:53:03.000000000 +0000
-@@ -1,3 +1,4 @@
-+/*  Last edited: May 11 11:33 2004 (rnc) */
- /* GNOME libraries - GdkPixbuf item for the GNOME canvas
-  *
-  * Copyright (C) 1999 The Free Software Foundation
-@@ -564,13 +565,13 @@
- 	}
- 
- 	if (priv->x_in_pixels) {
--		x = i2w_dx + priv->x / item->canvas->pixels_per_unit;
-+		x = i2w_dx + priv->x / item->canvas->pixels_per_unit_x;
- 	} else {
- 		x = i2w_dx + priv->x;
- 	}
- 
- 	if (priv->y_in_pixels) {
--		y = i2w_dy + priv->y / item->canvas->pixels_per_unit;
-+		y = i2w_dy + priv->y / item->canvas->pixels_per_unit_y;
- 	} else {
- 		y = i2w_dy + priv->y;
- 	}
-@@ -582,7 +583,7 @@
- 	}
- 
- 	if (priv->width_in_pixels)
--		width /= item->canvas->pixels_per_unit;
-+		width /= item->canvas->pixels_per_unit_x;
- 
- 	if (priv->height_set) {
- 		height = priv->height;
-@@ -591,7 +592,7 @@
- 	}
- 
- 	if (priv->height_in_pixels)
--		height /= item->canvas->pixels_per_unit;
-+		height /= item->canvas->pixels_per_unit_y;
- 
- 
- 	switch (priv->anchor) {
-@@ -781,8 +782,8 @@
- 	pixbuf = priv->pixbuf;
- 
- 	*actual_item = item;
--
--	no_hit = item->canvas->pixels_per_unit * 2 + 10;
-+	/* guessing that the x factor is OK here. RNGC */
-+	no_hit = item->canvas->pixels_per_unit_x * 2 + 10;
- 
- 	if (!priv->pixbuf)
- 		return no_hit;
-@@ -823,13 +824,13 @@
- 	priv = gcp->priv;
- 
- 	if (priv->x_in_pixels) {
--		priv->x += dx * item->canvas->pixels_per_unit;
-+		priv->x += dx * item->canvas->pixels_per_unit_x;
- 	} else {
- 		priv->x += dx;
- 	}
- 
- 	if (priv->y_in_pixels) {
--		priv->y += dy * item->canvas->pixels_per_unit;
-+		priv->y += dy * item->canvas->pixels_per_unit_y;
- 	} else {
- 		priv->y += dy;
- 	}
-diff -u -r ../foocanvas.latest/libfoocanvas/foo-canvas-polygon.c ./libfoocanvas/foo-canvas-polygon.c
---- ../foocanvas.latest/libfoocanvas/foo-canvas-polygon.c	2007-11-05 16:53:02.000000000 +0000
-+++ ./libfoocanvas/foo-canvas-polygon.c	2007-11-05 16:53:03.000000000 +0000
-@@ -1,3 +1,4 @@
-+/*  Last edited: Oct 19 09:39 2006 (rds) */
- /*
-  * Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation
-  * All rights reserved.
-@@ -276,7 +277,7 @@
- 	/* Add outline width */
- 
- 	if (poly->width_pixels)
--		width = poly->width / poly->item.canvas->pixels_per_unit;
-+		width = poly->width / poly->item.canvas->pixels_per_unit_x;
- 	else
- 		width = poly->width;
- 
-@@ -400,7 +401,7 @@
- 	if (poly->width_pixels)
- 		width = (int) poly->width;
- 	else
--		width = (int) (poly->width * poly->item.canvas->pixels_per_unit + 0.5);
-+		width = (int) (poly->width * poly->item.canvas->pixels_per_unit_x + 0.5);
- 
- 	gdk_gc_set_line_attributes (poly->outline_gc, width,
- 				    GDK_LINE_SOLID, GDK_CAP_ROUND, GDK_JOIN_ROUND);
-@@ -595,15 +596,16 @@
- static void
- get_color_value (FooCanvasPolygon *poly, gulong pixel, GValue *value)
- {
--	GdkColor *color;
-+	GdkColor color;
- 	GdkColormap *colormap;
- 
--	color = g_new (GdkColor, 1);
--	color->pixel = pixel;
-+	//color = g_new (GdkColor, 1);
-+	//color->pixel = pixel;
- 
--	colormap = gtk_widget_get_colormap (GTK_WIDGET (poly));
--	gdk_rgb_find_color (colormap, color);
--	g_value_set_boxed (value, color);
-+	colormap = gtk_widget_get_colormap (GTK_WIDGET (FOO_CANVAS_ITEM(poly)->canvas));
-+	gdk_colormap_query_color(colormap, pixel, &color);
-+	//gdk_rgb_find_color (colormap, color);
-+	g_value_set_boxed (value, &color);
- }
- 
- static void
-@@ -801,7 +803,7 @@
- 
- 	if (poly->outline_set) {
- 		if (poly->width_pixels)
--			width = poly->width / item->canvas->pixels_per_unit;
-+			width = poly->width / item->canvas->pixels_per_unit_x;
- 		else
- 			width = poly->width;
- 
-diff -u -r ../foocanvas.latest/libfoocanvas/foo-canvas-rect-ellipse.c ./libfoocanvas/foo-canvas-rect-ellipse.c
---- ../foocanvas.latest/libfoocanvas/foo-canvas-rect-ellipse.c	2007-11-05 16:53:02.000000000 +0000
-+++ ./libfoocanvas/foo-canvas-rect-ellipse.c	2007-11-05 16:53:03.000000000 +0000
-@@ -1,3 +1,4 @@
-+/*  Last edited: Feb 25 11:09 2005 (rds) */
- /*
-  * Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation
-  * All rights reserved.
-@@ -281,7 +282,7 @@
- 	item = FOO_CANVAS_ITEM (re);
- 
- 	if (re->width_pixels)
--		hwidth = (re->width / item->canvas->pixels_per_unit) / 2.0;
-+		hwidth = (re->width / item->canvas->pixels_per_unit_x) / 2.0;
- 	else
- 		hwidth = re->width / 2.0;
- 
-@@ -352,7 +353,7 @@
- 	if (re->width_pixels)
- 		width = (int) re->width;
- 	else
--		width = (int) (re->width * re->item.canvas->pixels_per_unit + 0.5);
-+		width = (int) (re->width * re->item.canvas->pixels_per_unit_x + 0.5);
- 
- 	gdk_gc_set_line_attributes (re->outline_gc, width,
- 				    GDK_LINE_SOLID, GDK_CAP_PROJECTING, GDK_JOIN_MITER);
-@@ -734,7 +735,7 @@
- 	re = FOO_CANVAS_RE (item);
- 
- 	if (re->width_pixels)
--		hwidth = (re->width / item->canvas->pixels_per_unit) / 2.0;
-+		hwidth = (re->width / item->canvas->pixels_per_unit_x) / 2.0;
- 	else
- 		hwidth = re->width / 2.0;
- 
-@@ -1065,7 +1066,7 @@
- 
- 	if (re->outline_set) {
- 		if (re->width_pixels)
--			hwidth = (re->width / item->canvas->pixels_per_unit) / 2.0;
-+			hwidth = (re->width / item->canvas->pixels_per_unit_x) / 2.0;
- 		else
- 			hwidth = re->width / 2.0;
- 
-@@ -1191,7 +1192,7 @@
- 		if (re->width_pixels)
- 			width_pixels = (int) re->width;
- 		else
--			width_pixels = (int) floor (re->width * re->item.canvas->pixels_per_unit + 0.5);
-+			width_pixels = (int) floor (re->width * re->item.canvas->pixels_per_unit_x + 0.5);
- 
- 		width_lt = width_pixels / 2;
- 		width_rb = (width_pixels + 1) / 2;
-@@ -1344,7 +1345,7 @@
- 
- 	if (re->outline_set) {
- 		if (re->width_pixels)
--			width = re->width / item->canvas->pixels_per_unit;
-+			width = re->width / item->canvas->pixels_per_unit_x;
- 		else
- 			width = re->width;
- 	} else
-diff -u -r ../foocanvas.latest/libfoocanvas/foo-canvas-text.c ./libfoocanvas/foo-canvas-text.c
---- ../foocanvas.latest/libfoocanvas/foo-canvas-text.c	2007-11-05 16:53:02.000000000 +0000
-+++ ./libfoocanvas/foo-canvas-text.c	2007-11-05 16:53:03.000000000 +0000
-@@ -1,3 +1,4 @@
-+/*  Last edited: Oct 18 18:38 2006 (rds) */
- /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
- /*
-  * $Id: foo-canvas-text.c 52 2005-04-04 15:13:29Z mortenw $
-@@ -615,8 +616,8 @@
- 	/* Get canvas pixel coordinates for clip rectangle position */
- 
- 	foo_canvas_w2c (item->canvas, wx, wy, &text->clip_cx, &text->clip_cy);
--	text->clip_cwidth = text->clip_width * item->canvas->pixels_per_unit;
--	text->clip_cheight = text->clip_height * item->canvas->pixels_per_unit;
-+	text->clip_cwidth = text->clip_width * item->canvas->pixels_per_unit_x;
-+	text->clip_cheight = text->clip_height * item->canvas->pixels_per_unit_y;
- 
- 	/* Anchor text */
- 
-@@ -976,7 +977,7 @@
- 	case PROP_WRAP_WIDTH: {
- 		double w = fabs (g_value_get_double (value));
- 		pango_layout_set_width (text->layout,
--			w * text->item.canvas->pixels_per_unit * PANGO_SCALE);
-+			w * text->item.canvas->pixels_per_unit_x * PANGO_SCALE);
- 
- 		break;
- 	}
-@@ -1252,11 +1253,11 @@
- 		break;
- 
- 	case PROP_TEXT_WIDTH:
--		g_value_set_double (value, text->max_width / text->item.canvas->pixels_per_unit);
-+		g_value_set_double (value, text->max_width / text->item.canvas->pixels_per_unit_x);
- 		break;
- 
- 	case PROP_TEXT_HEIGHT:
--		g_value_set_double (value, text->height / text->item.canvas->pixels_per_unit);
-+		g_value_set_double (value, text->height / text->item.canvas->pixels_per_unit_y);
- 		break;
- 
- 	default:
-@@ -1309,7 +1310,8 @@
- 	if (text->rise_set)
- 		add_attr (attr_list, pango_attr_rise_new (text->rise));
- 
--	zoom = text->item.canvas->pixels_per_unit;
-+	/* guessing that the x factor is OK here. RNGC */
-+	zoom = text->item.canvas->pixels_per_unit_x;
- 	if (fabs (zoom - 1.) > 1e-4) {
- 		PangoAttribute *attr = pango_attr_scale_new (zoom);
- 		attr->start_index = 0;
-@@ -1479,14 +1481,14 @@
-  	        PangoRectangle log_rect;
- 
- 		pango_layout_iter_get_line_extents (iter, NULL, &log_rect);
--
--		if (text->clip) {
-+                /* if (text->clip) { // original */
-+		/* if (!text->clip) { // broken for clipped !!! ;) */
-+                if(1) {
- 			x1 = PANGO_PIXELS (log_rect.x);
- 			y1 = PANGO_PIXELS (log_rect.y);
- 			x2 = PANGO_PIXELS (log_rect.x+log_rect.width);
- 			y2 = PANGO_PIXELS (log_rect.y+log_rect.height);
- 
--
- 			if (x1 < text->clip_cx)
- 				x1 = text->clip_cx;
- 
-@@ -1529,7 +1531,9 @@
- 			return 0.0;
- 		}
- 
-+
- 		dist = sqrt (dx * dx + dy * dy);
-+
- 		if (dist < best)
- 			best = dist;
- 
-@@ -1537,7 +1541,10 @@
- 
- 	pango_layout_iter_free(iter);
- 
--	return best / item->canvas->pixels_per_unit;
-+
-+	/* guessing that the x factor is OK here. RNGC */
-+        /* using x factor here as that is what is used in foo-canvas.c ... */
-+	return best / item->canvas->pixels_per_unit_x;
- }
- 
- static void
-@@ -1567,8 +1574,8 @@
- 		width = text->clip_width;
- 		height = text->clip_height;
- 	} else {
--		width = text->max_width / item->canvas->pixels_per_unit;
--		height = text->height / item->canvas->pixels_per_unit;
-+		width = text->max_width / item->canvas->pixels_per_unit_x;
-+		height = text->height / item->canvas->pixels_per_unit_y;
- 	}
- 
- 	switch (text->anchor) {
-diff -u -r ../foocanvas.latest/libfoocanvas/foo-canvas-widget.c ./libfoocanvas/foo-canvas-widget.c
---- ../foocanvas.latest/libfoocanvas/foo-canvas-widget.c	2007-11-05 16:53:02.000000000 +0000
-+++ ./libfoocanvas/foo-canvas-widget.c	2007-11-05 16:53:03.000000000 +0000
-@@ -1,3 +1,4 @@
-+/*  Last edited: May 11 11:42 2004 (rnc) */
- /*
-  * Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation
-  * All rights reserved.
-@@ -456,8 +457,8 @@
- 			witem->cwidth = (int) (witem->width + 0.5);
- 			witem->cheight = (int) (witem->height + 0.5);
- 		} else {
--			witem->cwidth = (int) (witem->width * item->canvas->pixels_per_unit + 0.5);
--			witem->cheight = (int) (witem->height * item->canvas->pixels_per_unit + 0.5);
-+			witem->cwidth = (int) (witem->width * item->canvas->pixels_per_unit_x + 0.5);
-+			witem->cheight = (int) (witem->height * item->canvas->pixels_per_unit_y + 0.5);
- 		}
- 
- 		gtk_widget_set_usize (witem->widget, witem->cwidth, witem->cheight);
-@@ -516,8 +517,8 @@
- 
- 	foo_canvas_c2w (item->canvas, witem->cx, witem->cy, &x1, &y1);
- 
--	x2 = x1 + (witem->cwidth - 1) / item->canvas->pixels_per_unit;
--	y2 = y1 + (witem->cheight - 1) / item->canvas->pixels_per_unit;
-+	x2 = x1 + (witem->cwidth - 1) / item->canvas->pixels_per_unit_x;
-+	y2 = y1 + (witem->cheight - 1) / item->canvas->pixels_per_unit_y;
- 
- 	/* Is point inside widget bounds? */
- 
-Only in ./libfoocanvas: foozmap-canvas-line-glyph.c
-Only in ./libfoocanvas: foozmap-canvas-line-glyph.h
-diff -u -r ../foocanvas.latest/libfoocanvas/libfoocanvas.h ./libfoocanvas/libfoocanvas.h
---- ../foocanvas.latest/libfoocanvas/libfoocanvas.h	2007-11-05 16:53:02.000000000 +0000
-+++ ./libfoocanvas/libfoocanvas.h	2007-11-05 16:53:03.000000000 +0000
-@@ -1,3 +1,4 @@
-+/*  Last edited: Aug  1 11:42 2006 (edgrif) */
- /*
-  * Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation
-  * All rights reserved.
-@@ -35,6 +36,9 @@
- #include <libfoocanvas/foo-canvas-rect-ellipse.h>
- #include <libfoocanvas/foo-canvas-util.h>
- 
-+#include <libfoocanvas/foozmap-canvas-line-glyph.h>
-+
-+
- G_BEGIN_DECLS
- 
- GType foo_canvas_points_get_type (void);
-diff -u -r ../foocanvas.latest/libfoocanvas/Makefile.am ./libfoocanvas/Makefile.am
---- ../foocanvas.latest/libfoocanvas/Makefile.am	2007-11-05 16:53:02.000000000 +0000
-+++ ./libfoocanvas/Makefile.am	2007-11-05 16:53:03.000000000 +0000
-@@ -22,6 +22,7 @@
- 
- libfoocanvasinclude_HEADERS =			\
- 	foo-canvas-line.h			\
-+	foozmap-canvas-line-glyph.h		\
- 	foo-canvas-pixbuf.h			\
- 	foo-canvas-polygon.h			\
- 	foo-canvas-rect-ellipse.h		\
-@@ -36,6 +37,7 @@
- 	foo-canvas-marshal.list			\
- 	foo-canvas-i18n.h			\
- 	foo-canvas-line.c			\
-+	foozmap-canvas-line-glyph.c		\
- 	foo-canvas-pixbuf.c			\
- 	foo-canvas-polygon.c			\
- 	foo-canvas-rect-ellipse.c		\
-Only in ./libfoocanvas: Makefile.in
-Only in ./: ltmain.sh
-Only in ./: Makefile.in
-Only in ./: missing
-Only in ./: mkinstalldirs
-Only in ./po: Makefile.in.in
-Only in ./: www.bytefresh.com
diff --git a/foocanvas/support/libfoocanvas-20071109.tar.gz b/foocanvas/support/libfoocanvas-20071109.tar.gz
deleted file mode 100755
index 661d98c24780dcb4808c250a2aee9d761f1b3afa..0000000000000000000000000000000000000000
Binary files a/foocanvas/support/libfoocanvas-20071109.tar.gz and /dev/null differ
diff --git a/foocanvas/support/libfoocanvas-20071116.patch b/foocanvas/support/libfoocanvas-20071116.patch
deleted file mode 100755
index aeba763cf2eef2756b79fd2194a19703b34b9c55..0000000000000000000000000000000000000000
--- a/foocanvas/support/libfoocanvas-20071116.patch
+++ /dev/null
@@ -1,1114 +0,0 @@
-diff -u -r ../foocanvas.latest/autogen.sh ./autogen.sh
---- ../foocanvas.latest/autogen.sh	2007-11-16 10:21:09.992332032 +0000
-+++ ./autogen.sh	2007-11-16 10:21:10.161306063 +0000
-@@ -41,5 +41,5 @@
-   exit 1
- fi
- 
--REQUIRED_AUTOMAKE_VERSION=1.5
-+REQUIRED_AUTOMAKE_VERSION=1.9
- GNOME_DATADIR="$gnome_datadir" USE_GNOME2_MACROS=1 . $gnome_autogen
-diff -u -r ../foocanvas.latest/configure.in ./configure.in
---- ../foocanvas.latest/configure.in	2007-11-16 10:21:09.990332339 +0000
-+++ ./configure.in	2007-11-16 10:24:27.899916340 +0000
-@@ -3,7 +3,8 @@
- AC_CONFIG_SRCDIR([libfoocanvas/foo-canvas.c])
- 
- AC_CONFIG_HEADERS([config.h])
--AM_INIT_AUTOMAKE([dist-bz2])
-+dnl [dist-bz2] removed from the AM_INIT_AUTOMAKE()
-+AM_INIT_AUTOMAKE([])
- 
- AM_MAINTAINER_MODE
- 
-@@ -53,7 +54,8 @@
-   AC_SUBST(HTML_DIR, $with_html_dir)
- fi
- 
--GTK_DOC_CHECK([1.0])
-+dnl MAC OS X doesn't like this... (requires gtk-doc, which requires a million other packages)
-+dnl GTK_DOC_CHECK([1.0])
- 
- AC_CONFIG_FILES([
- Makefile
-Only in ./: configure.in~
-diff -u -r ../foocanvas.latest/libfoocanvas/foo-canvas.c ./libfoocanvas/foo-canvas.c
---- ../foocanvas.latest/libfoocanvas/foo-canvas.c	2007-11-16 10:21:09.953338025 +0000
-+++ ./libfoocanvas/foo-canvas.c	2007-11-16 10:21:10.164305602 +0000
-@@ -78,7 +78,7 @@
- 
- static void foo_canvas_request_update (FooCanvas      *canvas);
- static void group_add                   (FooCanvasGroup *group,
--					 FooCanvasItem  *item);
-+					 FooCanvasItem  *item, FooCanvasGroupPosition position);
- static void group_remove                (FooCanvasGroup *group,
- 					 FooCanvasItem  *item);
- static void redraw_and_repick_if_mapped (FooCanvasItem *item);
-@@ -190,17 +190,56 @@
- }
- 
- 
-+/**
-+ * foo_canvas_item_new:
-+ * @parent: The parent group for the new item.
-+ * @type: The object type of the item.
-+ * @position: puts new item at bottom (FOO_CANVAS_GROUP_BOTTOM) or top (FOO_CANVAS_GROUP_TOP)
-+ * of parents stack of child items.
-+ * @first_arg_name: A list of object argument name/value pairs, NULL-terminated,
-+ * used to configure the item.  For example, "fill_color", "black",
-+ * "width_units", 5.0, NULL.
-+ * @Varargs:
-+ *
-+ * Creates a new canvas item with @parent as its parent group.  The item is
-+ * created at the top of its parent's stack, and starts up as visible.  The item
-+ * is of the specified @type, for example, it can be
-+ * foo_canvas_rect_get_type().  The list of object arguments/value pairs is
-+ * used to configure the item.
-+ *
-+ * Return value: The newly-created item.
-+ **/
-+FooCanvasItem *
-+foo_canvas_item_new_position (FooCanvasGroup *parent, GType type, FooCanvasGroupPosition position,
-+			      const gchar *first_arg_name, ...)
-+{
-+	FooCanvasItem *item;
-+	va_list args;
-+
-+	g_return_val_if_fail (FOO_IS_CANVAS_GROUP (parent), NULL);
-+	g_return_val_if_fail (g_type_is_a (type, foo_canvas_item_get_type ()), NULL);
-+
-+	item = FOO_CANVAS_ITEM (g_object_new (type, NULL));
-+
-+	va_start (args, first_arg_name);
-+	foo_canvas_item_construct_position (item, parent, position, first_arg_name, args);
-+	va_end (args);
-+
-+	return item;
-+}
-+
-+
- /* Performs post-creation operations on a canvas item (adding it to its parent
-  * group, etc.)
-  */
- static void
--item_post_create_setup (FooCanvasItem *item)
-+item_post_create_setup (FooCanvasItem *item, FooCanvasGroupPosition position)
- {
- 	GtkObject *obj;
- 
- 	obj = GTK_OBJECT (item);
- 
--	group_add (FOO_CANVAS_GROUP (item->parent), item);
-+	group_add (FOO_CANVAS_GROUP (item->parent), item, position);
- 
- 	redraw_and_repick_if_mapped (item);
- }
-@@ -224,7 +263,7 @@
- 		} else if (g_value_get_object (value)) {
- 			item->parent = FOO_CANVAS_ITEM (g_value_get_object (value));
- 			item->canvas = item->parent->canvas;
--			item_post_create_setup (item);
-+			item_post_create_setup (item, FOO_CANVAS_GROUP_TOP);
- 		}
- 		break;
- 	case ITEM_PROP_VISIBLE:
-@@ -282,7 +321,34 @@
- 
- 	g_object_set_valist (G_OBJECT (item), first_arg_name, args);
- 
--	item_post_create_setup (item);
-+	item_post_create_setup (item, FOO_CANVAS_GROUP_TOP);
-+}
-+
-+
-+/**
-+ * foo_canvas_item_construct_position:
-+ * @item: An unconstructed canvas item.
-+ * @parent: The parent group for the item.
-+ * @position: puts new item at bottom (FOO_CANVAS_GROUP_BOTTOM) or top (FOO_CANVAS_GROUP_TOP)
-+ * of parents stack of child items.
-+ * @first_arg_name: The name of the first argument for configuring the item.
-+ * @args: The list of arguments used to configure the item.
-+ *
-+ * Constructs a canvas item; meant for use only by item implementations.
-+ **/
-+void
-+foo_canvas_item_construct_position (FooCanvasItem *item, FooCanvasGroup *parent, FooCanvasGroupPosition position,
-+				    const gchar *first_arg_name, va_list args)
-+{
-+	g_return_if_fail (FOO_IS_CANVAS_GROUP (parent));
-+	g_return_if_fail (FOO_IS_CANVAS_ITEM (item));
-+
-+	item->parent = FOO_CANVAS_ITEM (parent);
-+	item->canvas = item->parent->canvas;
-+
-+	g_object_set_valist (G_OBJECT (item), first_arg_name, args);
-+
-+	item_post_create_setup (item, position);
- }
- 
- 
-@@ -295,6 +361,7 @@
- 	}
- }
- 
-+
- /* Destroy handler for canvas items */
- static void
- foo_canvas_item_destroy (GtkObject *object)
-@@ -339,10 +406,8 @@
- 
- 		if (item->parent)
- 			group_remove (FOO_CANVAS_GROUP (item->parent), item);
--
- 		item->canvas = NULL;
- 	}
--
- 	GTK_OBJECT_CLASS (item_parent_class)->destroy (object);
- }
- 
-@@ -992,7 +1057,7 @@
- 	group_remove (FOO_CANVAS_GROUP (item->parent), item);
- 	item->parent = FOO_CANVAS_ITEM (new_group);
- 	/* item->canvas is unchanged.  */
--	group_add (new_group, item);
-+	group_add (new_group, item, FOO_CANVAS_GROUP_TOP);
- 
- 	/* Redraw and repick */
- 
-@@ -1376,6 +1441,7 @@
- 	bbox_x1 = 0;
- 	bbox_y1 = 0;
- 
-+       if(item->object.flags & FOO_CANVAS_ITEM_VISIBLE){ 
- 	for (list = group->item_list; list; list = list->next) {
- 		i = list->data;
- 
-@@ -1394,10 +1460,14 @@
- 			bbox_y1 = MAX (bbox_y1, i->y2);
- 		}
- 	}
-+
-+       }
- 	item->x1 = bbox_x0;
- 	item->y1 = bbox_y0;
- 	item->x2 = bbox_x1;
- 	item->y2 = bbox_y1;
-+
-+        return ;
- }
- 
- /* Unrealize handler for canvas groups */
-@@ -1540,10 +1610,10 @@
- 			has_point = TRUE;
- 		} else
- 			has_point = FALSE;
--
-+		/* guessing that the x factor is OK here. RNGC */
- 		if (has_point
- 		    && point_item
--		    && ((int) (dist * item->canvas->pixels_per_unit + 0.5)
-+		    && ((int) (dist * item->canvas->pixels_per_unit_x + 0.5)
- 			<= item->canvas->close_enough)) {
- 			best = dist;
- 			*actual_item = point_item;
-@@ -1553,7 +1623,7 @@
- 	return best;
- }
- 
--static void
-+void
- foo_canvas_group_translate (FooCanvasItem *item, double dx, double dy)
- {
-         FooCanvasGroup *group;
-@@ -1642,16 +1712,30 @@
- 
- /* Adds an item to a group */
- static void
--group_add (FooCanvasGroup *group, FooCanvasItem *item)
-+group_add (FooCanvasGroup *group, FooCanvasItem *item, FooCanvasGroupPosition position)
- {
- 	g_object_ref (GTK_OBJECT (item));
- 	gtk_object_sink (GTK_OBJECT (item));
- 
--	if (!group->item_list) {
--		group->item_list = g_list_append (group->item_list, item);
--		group->item_list_end = group->item_list;
--	} else
--		group->item_list_end = g_list_append (group->item_list_end, item)->next;
-+	if (position == FOO_CANVAS_GROUP_TOP)
-+	  {
-+	    if (!group->item_list) {
-+	      group->item_list = g_list_append (group->item_list, item);
-+	      group->item_list_end = group->item_list;
-+	    } else
-+	      group->item_list_end = g_list_append (group->item_list_end, item)->next;
-+	  }
-+	else
-+	  {
-+	    if (!group->item_list) {
-+	      group->item_list = g_list_prepend (group->item_list, item);
-+	      group->item_list_end = group->item_list;
-+	    } else
-+	      group->item_list = g_list_prepend (group->item_list, item);
-+	  }
-+
-+
-+
- 
- 	if (item->object.flags & FOO_CANVAS_ITEM_VISIBLE &&
- 	    group->item.object.flags & FOO_CANVAS_ITEM_MAPPED) {
-@@ -1703,6 +1787,9 @@
- 
- enum {
- 	DRAW_BACKGROUND,
-+	DRAWN_ITEMS,
-+	BEGIN_UPDATE,
-+	END_UPDATE,
- 	LAST_SIGNAL
- };
- 
-@@ -2053,6 +2140,35 @@
- 			      G_TYPE_NONE, 4, 
- 			      G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT);
- 
-+	canvas_signals[DRAWN_ITEMS] =
-+		g_signal_new ("drawn_items",
-+			      G_TYPE_FROM_CLASS (object_class),
-+			      G_SIGNAL_RUN_FIRST,
-+			      0,
-+			      NULL, NULL,
-+			      foo_canvas_marshal_VOID__INT_INT_INT_INT,
-+			      G_TYPE_NONE, 4, 
-+			      G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT);
-+
-+	canvas_signals[BEGIN_UPDATE] =
-+		g_signal_new ("begin_update",
-+			      G_TYPE_FROM_CLASS (object_class),
-+			      G_SIGNAL_RUN_FIRST,
-+			      0,
-+			      NULL, NULL,
-+			      foo_canvas_marshal_VOID__VOID,
-+			      G_TYPE_NONE, 0); 
-+
-+	canvas_signals[END_UPDATE] =
-+		g_signal_new ("end_update",
-+			      G_TYPE_FROM_CLASS (object_class),
-+			      G_SIGNAL_RUN_FIRST,
-+			      0,
-+			      NULL, NULL,
-+			      foo_canvas_marshal_VOID__VOID,
-+			      G_TYPE_NONE, 0); 
-+
-+
- 	atk_registry_set_factory_type (atk_get_default_registry (),
- 				       FOO_TYPE_CANVAS,
- 				       foo_canvas_accessible_factory_get_type ());
-@@ -2080,7 +2196,8 @@
- 	canvas->scroll_x2 = canvas->layout.width;
- 	canvas->scroll_y2 = canvas->layout.height;
- 
--	canvas->pixels_per_unit = 1.0;
-+	canvas->pixels_per_unit_x = 1.0;
-+	canvas->pixels_per_unit_y = 1.0;
- 
- 	canvas->pick_event.type = GDK_LEAVE_NOTIFY;
- 	canvas->pick_event.crossing.x = 0;
-@@ -2298,12 +2415,12 @@
- 	int old_zoom_xofs, old_zoom_yofs;
- 	int changed_x = FALSE, changed_y = FALSE;
- 	int canvas_width, canvas_height;
--
-+	
- 	canvas_width = GTK_WIDGET (canvas)->allocation.width;
- 	canvas_height = GTK_WIDGET (canvas)->allocation.height;
- 
--	scroll_width = floor ((canvas->scroll_x2 - canvas->scroll_x1) * canvas->pixels_per_unit + 0.5);
--	scroll_height = floor ((canvas->scroll_y2 - canvas->scroll_y1) * canvas->pixels_per_unit + 0.5);
-+	scroll_width = floor ((canvas->scroll_x2 - canvas->scroll_x1) * canvas->pixels_per_unit_x + 0.5);
-+	scroll_height = floor ((canvas->scroll_y2 - canvas->scroll_y1) * canvas->pixels_per_unit_y + 0.5);
- 
- 	right_limit = scroll_width - canvas_width;
- 	bottom_limit = scroll_height - canvas_height;
-@@ -2867,10 +2984,14 @@
- 		g_source_remove (canvas->idle_id);
- 		canvas->idle_id = 0;
- 	}
-+
- 	if (canvas->need_update) {
- 		g_return_val_if_fail (!canvas->doing_update, FALSE);
- 
-+		g_signal_emit(G_OBJECT (canvas), canvas_signals[BEGIN_UPDATE], 0);
-+
- 		canvas->doing_update = TRUE;
-+
- 		foo_canvas_item_invoke_update (canvas->root, 0, 0, 0);
- 
- 		g_return_val_if_fail (canvas->doing_update, FALSE);
-@@ -2878,6 +2999,8 @@
- 		canvas->doing_update = FALSE;
- 
- 		canvas->need_update = FALSE;
-+
-+		g_signal_emit(G_OBJECT (canvas), canvas_signals[END_UPDATE], 0);
- 	}
- 
- 	/* Hmmm. Would like to queue antiexposes if the update marked
-@@ -2888,16 +3011,20 @@
- 		       event->area.x, event->area.y,
- 		       event->area.width, event->area.height);
- 	
--	if (canvas->root->object.flags & FOO_CANVAS_ITEM_MAPPED)
-+	if (canvas->root->object.flags & FOO_CANVAS_ITEM_MAPPED){
- 		(* FOO_CANVAS_ITEM_GET_CLASS (canvas->root)->draw) (canvas->root,
--								      canvas->layout.bin_window,
--								      event);
--
-+								    canvas->layout.bin_window,
-+								    event);
-+	}
- 
- 
- 	/* Chain up to get exposes on child widgets */
- 	GTK_WIDGET_CLASS (canvas_parent_class)->expose_event (widget, event);
- 
-+	g_signal_emit (G_OBJECT (canvas), canvas_signals[DRAWN_ITEMS], 0, 
-+		       event->area.x, event->area.y,
-+		       event->area.width, event->area.height);
-+
- 	return FALSE;
- }
- 
-@@ -2919,11 +3046,12 @@
- do_update (FooCanvas *canvas)
- {
- 	/* Cause the update if necessary */
--
- update_again:
- 	if (canvas->need_update) {
- 		g_return_if_fail (!canvas->doing_update);
- 
-+		g_signal_emit(G_OBJECT (canvas), canvas_signals[BEGIN_UPDATE], 0);
-+
- 		canvas->doing_update = TRUE;
- 		foo_canvas_item_invoke_update (canvas->root, 0, 0, 0);
- 
-@@ -2932,6 +3060,8 @@
- 		canvas->doing_update = FALSE;
- 
- 		canvas->need_update = FALSE;
-+
-+		g_signal_emit(G_OBJECT (canvas), canvas_signals[END_UPDATE], 0);
- 	}
- 
- 	/* Pick new current item */
-@@ -2949,6 +3079,8 @@
- 	if (canvas->need_update) {
- 		goto update_again;
- 	}
-+
-+	return ;
- }
- 
- /* Idle handler for the canvas.  It deals with pending updates and redraws. */
-@@ -3026,7 +3158,7 @@
- 	    (canvas->scroll_x2 == x2) && (canvas->scroll_y2 == y2)) {
- 		return;
- 	}
--	
-+
- 	/*
- 	 * Set the new scrolling region.  If possible, do not move the visible contents of the
- 	 * canvas.
-@@ -3101,15 +3233,35 @@
- 
- /**
-  * foo_canvas_set_pixels_per_unit:
-- * @canvas: A canvas.
-+ * @canvas: A canvas
-  * @n: The number of pixels that correspond to one canvas unit.
-  *
-  * Sets the zooming factor of a canvas by specifying the number of pixels that
-  * correspond to one canvas unit.
-+ * This is retained for backwards compatibility and just calls
-+ * foo_canvas_set_pixels_per_unit_xy, passing the number of pixels/unit twice.
-  **/
- void
- foo_canvas_set_pixels_per_unit (FooCanvas *canvas, double n)
- {
-+  foo_canvas_set_pixels_per_unit_xy(canvas, n, n);
-+  return;
-+}
-+
-+
-+/**
-+ * foo_canvas_set_pixels_per_unit_xy:
-+ * @canvas: A canvas.
-+ * @x: The number of pixels that correspond to one canvas unit on the x axis.
-+ * @y: The number of pixels that correspond to one canvas unit on the y axis.
-+ *
-+ * Sets the zooming factor of a canvas by specifying the number of pixels that
-+ * correspond to one canvas unit.
-+ * Having two zooming factors enables asymmetric zooming.
-+ **/
-+void
-+foo_canvas_set_pixels_per_unit_xy (FooCanvas *canvas, double x, double y)
-+{
- 	GtkWidget *widget;
- 	double cx, cy;
- 	int x1, y1;
-@@ -3119,7 +3271,8 @@
- 	gint attributes_mask;
- 
- 	g_return_if_fail (FOO_IS_CANVAS (canvas));
--	g_return_if_fail (n > FOO_CANVAS_EPSILON);
-+	/* guessing that the x factor is OK here.  RNCG */
-+	g_return_if_fail (x > FOO_CANVAS_EPSILON);
- 
- 	widget = GTK_WIDGET (canvas);
- 
-@@ -3127,14 +3280,15 @@
- 	center_y = widget->allocation.height / 2;
- 
- 	/* Find the coordinates of the screen center in units. */
--	cx = (canvas->layout.hadjustment->value + center_x) / canvas->pixels_per_unit + canvas->scroll_x1 + canvas->zoom_xofs;
--	cy = (canvas->layout.vadjustment->value + center_y) / canvas->pixels_per_unit + canvas->scroll_y1 + canvas->zoom_yofs;
-+	cx = (canvas->layout.hadjustment->value + center_x) / canvas->pixels_per_unit_x + canvas->scroll_x1 + canvas->zoom_xofs;
-+	cy = (canvas->layout.vadjustment->value + center_y) / canvas->pixels_per_unit_y + canvas->scroll_y1 + canvas->zoom_yofs;
- 
- 	/* Now calculate the new offset of the upper left corner. (round not truncate) */
--	x1 = ((cx - canvas->scroll_x1) * n) - center_x + .5;
--	y1 = ((cy - canvas->scroll_y1) * n) - center_y + .5;
-+	x1 = ((cx - canvas->scroll_x1) * x) - center_x + .5;
-+	y1 = ((cy - canvas->scroll_y1) * y) - center_y + .5;
- 
--	canvas->pixels_per_unit = n;
-+	canvas->pixels_per_unit_x = x;
-+	canvas->pixels_per_unit_y = y;
- 
- 	if (!(canvas->root->object.flags & FOO_CANVAS_ITEM_NEED_DEEP_UPDATE)) {
- 		canvas->root->object.flags |= FOO_CANVAS_ITEM_NEED_DEEP_UPDATE;
-@@ -3268,7 +3422,8 @@
- 	foo_canvas_w2c (canvas, x, y, &cx, &cy);
- 
- 	dist = foo_canvas_item_invoke_point (canvas->root, x, y, cx, cy, &item);
--	if ((int) (dist * canvas->pixels_per_unit + 0.5) <= canvas->close_enough)
-+	/* guessing the x factor is OK here.  RNGC */
-+	if ((int) (dist * canvas->pixels_per_unit_x + 0.5) <= canvas->close_enough)
- 		return item;
- 	else
- 		return NULL;
-@@ -3331,16 +3486,17 @@
- void
- foo_canvas_w2c (FooCanvas *canvas, double wx, double wy, int *cx, int *cy)
- {
--	double zoom;
-+	double zoom_x, zoom_y;
- 
- 	g_return_if_fail (FOO_IS_CANVAS (canvas));
- 	
--	zoom = canvas->pixels_per_unit;
-+	zoom_x = canvas->pixels_per_unit_x;
-+	zoom_y = canvas->pixels_per_unit_y;
- 	
- 	if (cx)
--		*cx = floor ((wx - canvas->scroll_x1)*zoom + canvas->zoom_xofs + 0.5);
-+		*cx = floor ((wx - canvas->scroll_x1)*zoom_x + canvas->zoom_xofs + 0.5);
- 	if (cy)
--		*cy = floor ((wy - canvas->scroll_y1)*zoom + canvas->zoom_yofs + 0.5);
-+		*cy = floor ((wy - canvas->scroll_y1)*zoom_y + canvas->zoom_yofs + 0.5);
- }
- 
- /**
-@@ -3380,16 +3536,17 @@
- void
- foo_canvas_w2c_d (FooCanvas *canvas, double wx, double wy, double *cx, double *cy)
- {
--	double zoom;
-+	double zoom_x, zoom_y;
- 
- 	g_return_if_fail (FOO_IS_CANVAS (canvas));
- 
--	zoom = canvas->pixels_per_unit;
-+	zoom_x = canvas->pixels_per_unit_x;
-+	zoom_y = canvas->pixels_per_unit_y;
- 	
- 	if (cx)
--		*cx = (wx - canvas->scroll_x1)*zoom + canvas->zoom_xofs;
-+		*cx = (wx - canvas->scroll_x1)*zoom_x + canvas->zoom_xofs;
- 	if (cy)
--		*cy = (wy - canvas->scroll_y1)*zoom + canvas->zoom_yofs;
-+		*cy = (wy - canvas->scroll_y1)*zoom_y + canvas->zoom_yofs;
- }
- 
- 
-@@ -3406,16 +3563,17 @@
- void
- foo_canvas_c2w (FooCanvas *canvas, int cx, int cy, double *wx, double *wy)
- {
--	double zoom;
-+	double zoom_x, zoom_y;
- 
- 	g_return_if_fail (FOO_IS_CANVAS (canvas));
- 
--	zoom = canvas->pixels_per_unit;
-+	zoom_x = canvas->pixels_per_unit_x;
-+	zoom_y = canvas->pixels_per_unit_y;
- 	
- 	if (wx)
--		*wx = (cx - canvas->zoom_xofs)/zoom + canvas->scroll_x1;
-+		*wx = (cx - canvas->zoom_xofs)/zoom_x + canvas->scroll_x1;
- 	if (wy)
--		*wy = (cy - canvas->zoom_yofs)/zoom + canvas->scroll_y1;
-+		*wy = (cy - canvas->zoom_yofs)/zoom_y + canvas->scroll_y1;
- }
- 
- 
-@@ -3441,11 +3599,11 @@
- 
- 	if (worldx)
- 		*worldx = canvas->scroll_x1 + ((winx - canvas->zoom_xofs)
--					       / canvas->pixels_per_unit);
-+					       / canvas->pixels_per_unit_x);
- 
- 	if (worldy)
- 		*worldy = canvas->scroll_y1 + ((winy - canvas->zoom_yofs)
--					       / canvas->pixels_per_unit);
-+					       / canvas->pixels_per_unit_y);
- }
- 
- 
-@@ -3468,10 +3626,10 @@
- 	g_return_if_fail (FOO_IS_CANVAS (canvas));
- 
- 	if (winx)
--		*winx = (canvas->pixels_per_unit)*(worldx - canvas->scroll_x1) + canvas->zoom_xofs;
-+		*winx = (canvas->pixels_per_unit_x)*(worldx - canvas->scroll_x1) + canvas->zoom_xofs;
- 
- 	if (winy)
--		*winy = (canvas->pixels_per_unit)*(worldy - canvas->scroll_y1) + canvas->zoom_yofs;
-+		*winy = (canvas->pixels_per_unit_y)*(worldy - canvas->scroll_y1) + canvas->zoom_yofs;
- }
- 
- 
-@@ -3999,3 +4157,11 @@
-                                        FOO_TYPE_CANVAS_ITEM,
-                                        foo_canvas_item_accessible_factory_get_type ());
- }
-+
-+void 
-+foo_canvas_zmap(void)
-+{
-+  /* do nothing */
-+}
-+
-+/*  Last edited: Nov  9 12:11 2007 (rds) */
-diff -u -r ../foocanvas.latest/libfoocanvas/foo-canvas.h ./libfoocanvas/foo-canvas.h
---- ../foocanvas.latest/libfoocanvas/foo-canvas.h	2007-11-16 10:21:09.934340945 +0000
-+++ ./libfoocanvas/foo-canvas.h	2007-11-16 10:21:10.165305448 +0000
-@@ -1,3 +1,4 @@
-+/*  Last edited: Nov  9 10:56 2007 (rds) */
- /* -*- Mode: C; tab-width: 8; indent-tabs-mode: 8; c-basic-offset: 8 -*- */
- /*
-  * Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation
-@@ -101,6 +102,11 @@
- 	FOO_CANVAS_UPDATE_DEEP       = 1 << 1
- };
- 
-+
-+/* Special positions for putting new items at top or bottom of group. */
-+typedef enum {FOO_CANVAS_GROUP_BOTTOM = -1, FOO_CANVAS_GROUP_TOP  = -2} FooCanvasGroupPosition ;
-+
-+
- #define FOO_TYPE_CANVAS_ITEM            (foo_canvas_item_get_type ())
- #define FOO_CANVAS_ITEM(obj)            (GTK_CHECK_CAST ((obj), FOO_TYPE_CANVAS_ITEM, FooCanvasItem))
- #define FOO_CANVAS_ITEM_CLASS(klass)    (GTK_CHECK_CLASS_CAST ((klass), FOO_TYPE_CANVAS_ITEM, FooCanvasItemClass))
-@@ -186,10 +192,16 @@
- FooCanvasItem *foo_canvas_item_new (FooCanvasGroup *parent, GType type,
- 				    const gchar *first_arg_name, ...);
- 
-+FooCanvasItem *foo_canvas_item_new_position (FooCanvasGroup *parent, GType type, FooCanvasGroupPosition position,
-+					     const gchar *first_arg_name, ...);
-+
- /* Constructors for use in derived classes and language wrappers */
- void foo_canvas_item_construct (FooCanvasItem *item, FooCanvasGroup *parent,
- 				const gchar *first_arg_name, va_list args);
- 
-+void foo_canvas_item_construct_position (FooCanvasItem *item, FooCanvasGroup *parent, FooCanvasGroupPosition position,
-+					 const gchar *first_arg_name, va_list args);
-+
- /* Configure an item using the standard Gtk argument mechanism.  The last
-  * argument must be a NULL pointer.
-  */
-@@ -341,6 +353,7 @@
- #define FOO_IS_CANVAS_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), FOO_TYPE_CANVAS))
- #define FOO_CANVAS_GET_CLASS(obj)  (GTK_CHECK_GET_CLASS ((obj), FOO_TYPE_CANVAS, FooCanvasClass))
- 
-+typedef void (*FooCanvasUpdateSignal)(FooCanvas *canvas, gpointer user_data);
- 
- struct _FooCanvas {
- 	GtkLayout layout;
-@@ -371,7 +384,8 @@
- 	double scroll_x2, scroll_y2;
- 
- 	/* Scaling factor to be used for display */
--	double pixels_per_unit;
-+	double pixels_per_unit_x;
-+	double pixels_per_unit_y;
- 
- 	/* Idle handler ID */
- 	guint idle_id;
-@@ -456,6 +470,10 @@
- /* Sets the number of pixels that correspond to one unit in world coordinates */
- void foo_canvas_set_pixels_per_unit (FooCanvas *canvas, double n);
- 
-+/* Sets the number of  pixels corresponding to one unit in world coordinates
-+ * separately on x and y axes, allowing asymmetric zooming. */
-+void foo_canvas_set_pixels_per_unit_xy (FooCanvas *canvas, double x, double y);
-+
- /* Wether the canvas centers the scroll region if it is smaller than the window  */
- void foo_canvas_set_center_scroll_region (FooCanvas *canvas, gboolean center_scroll_region);
- 
-@@ -525,6 +543,10 @@
-  */
- void foo_canvas_set_stipple_origin (FooCanvas *canvas, GdkGC *gc);
- 
-+void foo_canvas_zmap(void);
-+
- G_END_DECLS
- 
-+
- #endif
-+
-diff -u -r ../foocanvas.latest/libfoocanvas/foo-canvas-line.c ./libfoocanvas/foo-canvas-line.c
---- ../foocanvas.latest/libfoocanvas/foo-canvas-line.c	2007-11-16 10:21:09.942339715 +0000
-+++ ./libfoocanvas/foo-canvas-line.c	2007-11-16 10:21:10.166305295 +0000
-@@ -1,3 +1,4 @@
-+/*  Last edited: Oct 18 18:34 2006 (rds) */
- /*
-  * Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation
-  * All rights reserved.
-@@ -338,7 +339,7 @@
- 	/* Add possible over-estimate for wide lines */
- 
- 	if (line->width_pixels)
--		width = line->width / line->item.canvas->pixels_per_unit;
-+		width = line->width / line->item.canvas->pixels_per_unit_x;
- 	else
- 		width = line->width;
- 
-@@ -466,7 +467,7 @@
- 		return;
- 
- 	if (line->width_pixels)
--		width = line->width / line->item.canvas->pixels_per_unit;
-+		width = line->width / line->item.canvas->pixels_per_unit_x;
- 	else
- 		width = line->width;
- 
-@@ -477,9 +478,9 @@
- 	shape_c = line->shape_c + width / 2.0;
- 
- 	if (line->width_pixels) {
--		shape_a /= line->item.canvas->pixels_per_unit;
--		shape_b /= line->item.canvas->pixels_per_unit;
--		shape_c /= line->item.canvas->pixels_per_unit;
-+		shape_a /= line->item.canvas->pixels_per_unit_x;
-+		shape_b /= line->item.canvas->pixels_per_unit_x;
-+		shape_c /= line->item.canvas->pixels_per_unit_x;
- 	}
- 
- 	shape_a += 0.001;
-@@ -600,7 +601,7 @@
- 	if (line->width_pixels)
- 		width = (int) line->width;
- 	else
--		width = (int) (line->width * line->item.canvas->pixels_per_unit + 0.5);
-+		width = (int) (line->width * line->item.canvas->pixels_per_unit_x + 0.5);
- 
- 	gdk_gc_set_line_attributes (line->gc,
- 				    width,
-@@ -1126,12 +1127,12 @@
- 	 */
- 
- 	if (line->width_pixels)
--		width = line->width / item->canvas->pixels_per_unit;
-+		width = line->width / item->canvas->pixels_per_unit_x;
- 	else
- 		width = line->width;
- 
--	if (width < (1.0 / item->canvas->pixels_per_unit))
--		width = 1.0 / item->canvas->pixels_per_unit;
-+	if (width < (1.0 / item->canvas->pixels_per_unit_x))
-+		width = 1.0 / item->canvas->pixels_per_unit_x;
- 
- 	changed_miter_to_bevel = 0;
- 
-diff -u -r ../foocanvas.latest/libfoocanvas/foo-canvas-marshal.list ./libfoocanvas/foo-canvas-marshal.list
---- ../foocanvas.latest/libfoocanvas/foo-canvas-marshal.list	2007-11-16 10:21:09.935340791 +0000
-+++ ./libfoocanvas/foo-canvas-marshal.list	2007-11-16 10:21:10.166305295 +0000
-@@ -1,2 +1,3 @@
- VOID:INT,INT,INT,INT
- BOOLEAN:BOXED
-+VOID:VOID
-diff -u -r ../foocanvas.latest/libfoocanvas/foo-canvas-pixbuf.c ./libfoocanvas/foo-canvas-pixbuf.c
---- ../foocanvas.latest/libfoocanvas/foo-canvas-pixbuf.c	2007-11-16 10:21:09.948338793 +0000
-+++ ./libfoocanvas/foo-canvas-pixbuf.c	2007-11-16 10:21:10.167305141 +0000
-@@ -1,3 +1,4 @@
-+/*  Last edited: May 11 11:33 2004 (rnc) */
- /* GNOME libraries - GdkPixbuf item for the GNOME canvas
-  *
-  * Copyright (C) 1999 The Free Software Foundation
-@@ -564,13 +565,13 @@
- 	}
- 
- 	if (priv->x_in_pixels) {
--		x = i2w_dx + priv->x / item->canvas->pixels_per_unit;
-+		x = i2w_dx + priv->x / item->canvas->pixels_per_unit_x;
- 	} else {
- 		x = i2w_dx + priv->x;
- 	}
- 
- 	if (priv->y_in_pixels) {
--		y = i2w_dy + priv->y / item->canvas->pixels_per_unit;
-+		y = i2w_dy + priv->y / item->canvas->pixels_per_unit_y;
- 	} else {
- 		y = i2w_dy + priv->y;
- 	}
-@@ -582,7 +583,7 @@
- 	}
- 
- 	if (priv->width_in_pixels)
--		width /= item->canvas->pixels_per_unit;
-+		width /= item->canvas->pixels_per_unit_x;
- 
- 	if (priv->height_set) {
- 		height = priv->height;
-@@ -591,7 +592,7 @@
- 	}
- 
- 	if (priv->height_in_pixels)
--		height /= item->canvas->pixels_per_unit;
-+		height /= item->canvas->pixels_per_unit_y;
- 
- 
- 	switch (priv->anchor) {
-@@ -781,8 +782,8 @@
- 	pixbuf = priv->pixbuf;
- 
- 	*actual_item = item;
--
--	no_hit = item->canvas->pixels_per_unit * 2 + 10;
-+	/* guessing that the x factor is OK here. RNGC */
-+	no_hit = item->canvas->pixels_per_unit_x * 2 + 10;
- 
- 	if (!priv->pixbuf)
- 		return no_hit;
-@@ -823,13 +824,13 @@
- 	priv = gcp->priv;
- 
- 	if (priv->x_in_pixels) {
--		priv->x += dx * item->canvas->pixels_per_unit;
-+		priv->x += dx * item->canvas->pixels_per_unit_x;
- 	} else {
- 		priv->x += dx;
- 	}
- 
- 	if (priv->y_in_pixels) {
--		priv->y += dy * item->canvas->pixels_per_unit;
-+		priv->y += dy * item->canvas->pixels_per_unit_y;
- 	} else {
- 		priv->y += dy;
- 	}
-diff -u -r ../foocanvas.latest/libfoocanvas/foo-canvas-polygon.c ./libfoocanvas/foo-canvas-polygon.c
---- ../foocanvas.latest/libfoocanvas/foo-canvas-polygon.c	2007-11-16 10:21:09.941339869 +0000
-+++ ./libfoocanvas/foo-canvas-polygon.c	2007-11-16 10:21:10.167305141 +0000
-@@ -1,3 +1,4 @@
-+/*  Last edited: Oct 19 09:39 2006 (rds) */
- /*
-  * Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation
-  * All rights reserved.
-@@ -276,7 +277,7 @@
- 	/* Add outline width */
- 
- 	if (poly->width_pixels)
--		width = poly->width / poly->item.canvas->pixels_per_unit;
-+		width = poly->width / poly->item.canvas->pixels_per_unit_x;
- 	else
- 		width = poly->width;
- 
-@@ -400,7 +401,7 @@
- 	if (poly->width_pixels)
- 		width = (int) poly->width;
- 	else
--		width = (int) (poly->width * poly->item.canvas->pixels_per_unit + 0.5);
-+		width = (int) (poly->width * poly->item.canvas->pixels_per_unit_x + 0.5);
- 
- 	gdk_gc_set_line_attributes (poly->outline_gc, width,
- 				    GDK_LINE_SOLID, GDK_CAP_ROUND, GDK_JOIN_ROUND);
-@@ -595,15 +596,16 @@
- static void
- get_color_value (FooCanvasPolygon *poly, gulong pixel, GValue *value)
- {
--	GdkColor *color;
-+	GdkColor color;
- 	GdkColormap *colormap;
- 
--	color = g_new (GdkColor, 1);
--	color->pixel = pixel;
-+	//color = g_new (GdkColor, 1);
-+	//color->pixel = pixel;
- 
--	colormap = gtk_widget_get_colormap (GTK_WIDGET (poly));
--	gdk_rgb_find_color (colormap, color);
--	g_value_set_boxed (value, color);
-+	colormap = gtk_widget_get_colormap (GTK_WIDGET (FOO_CANVAS_ITEM(poly)->canvas));
-+	gdk_colormap_query_color(colormap, pixel, &color);
-+	//gdk_rgb_find_color (colormap, color);
-+	g_value_set_boxed (value, &color);
- }
- 
- static void
-@@ -801,7 +803,7 @@
- 
- 	if (poly->outline_set) {
- 		if (poly->width_pixels)
--			width = poly->width / item->canvas->pixels_per_unit;
-+			width = poly->width / item->canvas->pixels_per_unit_x;
- 		else
- 			width = poly->width;
- 
-diff -u -r ../foocanvas.latest/libfoocanvas/foo-canvas-rect-ellipse.c ./libfoocanvas/foo-canvas-rect-ellipse.c
---- ../foocanvas.latest/libfoocanvas/foo-canvas-rect-ellipse.c	2007-11-16 10:21:09.943339562 +0000
-+++ ./libfoocanvas/foo-canvas-rect-ellipse.c	2007-11-16 10:21:10.168304987 +0000
-@@ -1,3 +1,4 @@
-+/*  Last edited: Feb 25 11:09 2005 (rds) */
- /*
-  * Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation
-  * All rights reserved.
-@@ -281,7 +282,7 @@
- 	item = FOO_CANVAS_ITEM (re);
- 
- 	if (re->width_pixels)
--		hwidth = (re->width / item->canvas->pixels_per_unit) / 2.0;
-+		hwidth = (re->width / item->canvas->pixels_per_unit_x) / 2.0;
- 	else
- 		hwidth = re->width / 2.0;
- 
-@@ -352,7 +353,7 @@
- 	if (re->width_pixels)
- 		width = (int) re->width;
- 	else
--		width = (int) (re->width * re->item.canvas->pixels_per_unit + 0.5);
-+		width = (int) (re->width * re->item.canvas->pixels_per_unit_x + 0.5);
- 
- 	gdk_gc_set_line_attributes (re->outline_gc, width,
- 				    GDK_LINE_SOLID, GDK_CAP_PROJECTING, GDK_JOIN_MITER);
-@@ -734,7 +735,7 @@
- 	re = FOO_CANVAS_RE (item);
- 
- 	if (re->width_pixels)
--		hwidth = (re->width / item->canvas->pixels_per_unit) / 2.0;
-+		hwidth = (re->width / item->canvas->pixels_per_unit_x) / 2.0;
- 	else
- 		hwidth = re->width / 2.0;
- 
-@@ -1065,7 +1066,7 @@
- 
- 	if (re->outline_set) {
- 		if (re->width_pixels)
--			hwidth = (re->width / item->canvas->pixels_per_unit) / 2.0;
-+			hwidth = (re->width / item->canvas->pixels_per_unit_x) / 2.0;
- 		else
- 			hwidth = re->width / 2.0;
- 
-@@ -1191,7 +1192,7 @@
- 		if (re->width_pixels)
- 			width_pixels = (int) re->width;
- 		else
--			width_pixels = (int) floor (re->width * re->item.canvas->pixels_per_unit + 0.5);
-+			width_pixels = (int) floor (re->width * re->item.canvas->pixels_per_unit_x + 0.5);
- 
- 		width_lt = width_pixels / 2;
- 		width_rb = (width_pixels + 1) / 2;
-@@ -1344,7 +1345,7 @@
- 
- 	if (re->outline_set) {
- 		if (re->width_pixels)
--			width = re->width / item->canvas->pixels_per_unit;
-+			width = re->width / item->canvas->pixels_per_unit_x;
- 		else
- 			width = re->width;
- 	} else
-diff -u -r ../foocanvas.latest/libfoocanvas/foo-canvas-text.c ./libfoocanvas/foo-canvas-text.c
---- ../foocanvas.latest/libfoocanvas/foo-canvas-text.c	2007-11-16 10:21:09.939340176 +0000
-+++ ./libfoocanvas/foo-canvas-text.c	2007-11-16 10:21:10.169304834 +0000
-@@ -1,3 +1,4 @@
-+/*  Last edited: Oct 18 18:38 2006 (rds) */
- /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
- /*
-  * $Id: foo-canvas-text.c 52 2005-04-04 15:13:29Z mortenw $
-@@ -615,8 +616,8 @@
- 	/* Get canvas pixel coordinates for clip rectangle position */
- 
- 	foo_canvas_w2c (item->canvas, wx, wy, &text->clip_cx, &text->clip_cy);
--	text->clip_cwidth = text->clip_width * item->canvas->pixels_per_unit;
--	text->clip_cheight = text->clip_height * item->canvas->pixels_per_unit;
-+	text->clip_cwidth = text->clip_width * item->canvas->pixels_per_unit_x;
-+	text->clip_cheight = text->clip_height * item->canvas->pixels_per_unit_y;
- 
- 	/* Anchor text */
- 
-@@ -976,7 +977,7 @@
- 	case PROP_WRAP_WIDTH: {
- 		double w = fabs (g_value_get_double (value));
- 		pango_layout_set_width (text->layout,
--			w * text->item.canvas->pixels_per_unit * PANGO_SCALE);
-+			w * text->item.canvas->pixels_per_unit_x * PANGO_SCALE);
- 
- 		break;
- 	}
-@@ -1252,11 +1253,11 @@
- 		break;
- 
- 	case PROP_TEXT_WIDTH:
--		g_value_set_double (value, text->max_width / text->item.canvas->pixels_per_unit);
-+		g_value_set_double (value, text->max_width / text->item.canvas->pixels_per_unit_x);
- 		break;
- 
- 	case PROP_TEXT_HEIGHT:
--		g_value_set_double (value, text->height / text->item.canvas->pixels_per_unit);
-+		g_value_set_double (value, text->height / text->item.canvas->pixels_per_unit_y);
- 		break;
- 
- 	default:
-@@ -1309,7 +1310,8 @@
- 	if (text->rise_set)
- 		add_attr (attr_list, pango_attr_rise_new (text->rise));
- 
--	zoom = text->item.canvas->pixels_per_unit;
-+	/* guessing that the x factor is OK here. RNGC */
-+	zoom = text->item.canvas->pixels_per_unit_x;
- 	if (fabs (zoom - 1.) > 1e-4) {
- 		PangoAttribute *attr = pango_attr_scale_new (zoom);
- 		attr->start_index = 0;
-@@ -1479,14 +1481,14 @@
-  	        PangoRectangle log_rect;
- 
- 		pango_layout_iter_get_line_extents (iter, NULL, &log_rect);
--
--		if (text->clip) {
-+                /* if (text->clip) { // original */
-+		/* if (!text->clip) { // broken for clipped !!! ;) */
-+                if(1) {
- 			x1 = PANGO_PIXELS (log_rect.x);
- 			y1 = PANGO_PIXELS (log_rect.y);
- 			x2 = PANGO_PIXELS (log_rect.x+log_rect.width);
- 			y2 = PANGO_PIXELS (log_rect.y+log_rect.height);
- 
--
- 			if (x1 < text->clip_cx)
- 				x1 = text->clip_cx;
- 
-@@ -1529,7 +1531,9 @@
- 			return 0.0;
- 		}
- 
-+
- 		dist = sqrt (dx * dx + dy * dy);
-+
- 		if (dist < best)
- 			best = dist;
- 
-@@ -1537,7 +1541,10 @@
- 
- 	pango_layout_iter_free(iter);
- 
--	return best / item->canvas->pixels_per_unit;
-+
-+	/* guessing that the x factor is OK here. RNGC */
-+        /* using x factor here as that is what is used in foo-canvas.c ... */
-+	return best / item->canvas->pixels_per_unit_x;
- }
- 
- static void
-@@ -1567,8 +1574,8 @@
- 		width = text->clip_width;
- 		height = text->clip_height;
- 	} else {
--		width = text->max_width / item->canvas->pixels_per_unit;
--		height = text->height / item->canvas->pixels_per_unit;
-+		width = text->max_width / item->canvas->pixels_per_unit_x;
-+		height = text->height / item->canvas->pixels_per_unit_y;
- 	}
- 
- 	switch (text->anchor) {
-diff -u -r ../foocanvas.latest/libfoocanvas/foo-canvas-widget.c ./libfoocanvas/foo-canvas-widget.c
---- ../foocanvas.latest/libfoocanvas/foo-canvas-widget.c	2007-11-16 10:21:09.938340330 +0000
-+++ ./libfoocanvas/foo-canvas-widget.c	2007-11-16 10:21:10.170304680 +0000
-@@ -1,3 +1,4 @@
-+/*  Last edited: May 11 11:42 2004 (rnc) */
- /*
-  * Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation
-  * All rights reserved.
-@@ -456,8 +457,8 @@
- 			witem->cwidth = (int) (witem->width + 0.5);
- 			witem->cheight = (int) (witem->height + 0.5);
- 		} else {
--			witem->cwidth = (int) (witem->width * item->canvas->pixels_per_unit + 0.5);
--			witem->cheight = (int) (witem->height * item->canvas->pixels_per_unit + 0.5);
-+			witem->cwidth = (int) (witem->width * item->canvas->pixels_per_unit_x + 0.5);
-+			witem->cheight = (int) (witem->height * item->canvas->pixels_per_unit_y + 0.5);
- 		}
- 
- 		gtk_widget_set_usize (witem->widget, witem->cwidth, witem->cheight);
-@@ -516,8 +517,8 @@
- 
- 	foo_canvas_c2w (item->canvas, witem->cx, witem->cy, &x1, &y1);
- 
--	x2 = x1 + (witem->cwidth - 1) / item->canvas->pixels_per_unit;
--	y2 = y1 + (witem->cheight - 1) / item->canvas->pixels_per_unit;
-+	x2 = x1 + (witem->cwidth - 1) / item->canvas->pixels_per_unit_x;
-+	y2 = y1 + (witem->cheight - 1) / item->canvas->pixels_per_unit_y;
- 
- 	/* Is point inside widget bounds? */
- 
-Only in ./libfoocanvas: foozmap-canvas-line-glyph.c
-Only in ./libfoocanvas: foozmap-canvas-line-glyph.h
-diff -u -r ../foocanvas.latest/libfoocanvas/libfoocanvas.h ./libfoocanvas/libfoocanvas.h
---- ../foocanvas.latest/libfoocanvas/libfoocanvas.h	2007-11-16 10:21:09.936340637 +0000
-+++ ./libfoocanvas/libfoocanvas.h	2007-11-16 10:21:10.170304680 +0000
-@@ -1,3 +1,4 @@
-+/*  Last edited: Aug  1 11:42 2006 (edgrif) */
- /*
-  * Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation
-  * All rights reserved.
-@@ -35,6 +36,9 @@
- #include <libfoocanvas/foo-canvas-rect-ellipse.h>
- #include <libfoocanvas/foo-canvas-util.h>
- 
-+#include <libfoocanvas/foozmap-canvas-line-glyph.h>
-+
-+
- G_BEGIN_DECLS
- 
- GType foo_canvas_points_get_type (void);
-diff -u -r ../foocanvas.latest/libfoocanvas/Makefile.am ./libfoocanvas/Makefile.am
---- ../foocanvas.latest/libfoocanvas/Makefile.am	2007-11-16 10:21:09.948338793 +0000
-+++ ./libfoocanvas/Makefile.am	2007-11-16 10:21:10.170304680 +0000
-@@ -22,6 +22,7 @@
- 
- libfoocanvasinclude_HEADERS =			\
- 	foo-canvas-line.h			\
-+	foozmap-canvas-line-glyph.h		\
- 	foo-canvas-pixbuf.h			\
- 	foo-canvas-polygon.h			\
- 	foo-canvas-rect-ellipse.h		\
-@@ -36,6 +37,7 @@
- 	foo-canvas-marshal.list			\
- 	foo-canvas-i18n.h			\
- 	foo-canvas-line.c			\
-+	foozmap-canvas-line-glyph.c		\
- 	foo-canvas-pixbuf.c			\
- 	foo-canvas-polygon.c			\
- 	foo-canvas-rect-ellipse.c		\
diff --git a/foocanvas/support/libfoocanvas-20071116.tar.gz b/foocanvas/support/libfoocanvas-20071116.tar.gz
deleted file mode 100755
index c6d9d76ce5b0028b7bae8993d6dbbecd5bf2a99e..0000000000000000000000000000000000000000
Binary files a/foocanvas/support/libfoocanvas-20071116.tar.gz and /dev/null differ
diff --git a/foocanvas/support/libfoocanvas-20080311.patch b/foocanvas/support/libfoocanvas-20080311.patch
deleted file mode 100755
index 6c946a16d39057631dad9dfab8380ebcdfd1e4e7..0000000000000000000000000000000000000000
--- a/foocanvas/support/libfoocanvas-20080311.patch
+++ /dev/null
@@ -1,1166 +0,0 @@
-diff -u -r ../foocanvas.latest/autogen.sh ./autogen.sh
---- ../foocanvas.latest/autogen.sh	2008-03-11 09:54:13.000000000 +0000
-+++ ./autogen.sh	2008-03-11 09:54:14.000000000 +0000
-@@ -41,5 +41,5 @@
-   exit 1
- fi
- 
--REQUIRED_AUTOMAKE_VERSION=1.5
-+REQUIRED_AUTOMAKE_VERSION=1.9
- GNOME_DATADIR="$gnome_datadir" USE_GNOME2_MACROS=1 . $gnome_autogen
-diff -u -r ../foocanvas.latest/configure.in ./configure.in
---- ../foocanvas.latest/configure.in	2008-03-11 09:54:13.000000000 +0000
-+++ ./configure.in	2008-03-11 09:54:14.179121814 +0000
-@@ -3,7 +3,8 @@
- AC_CONFIG_SRCDIR([libfoocanvas/foo-canvas.c])
- 
- AC_CONFIG_HEADERS([config.h])
--AM_INIT_AUTOMAKE([dist-bz2])
-+dnl [dist-bz2] removed from the AM_INIT_AUTOMAKE()
-+AM_INIT_AUTOMAKE([])
- 
- AM_MAINTAINER_MODE
- 
-@@ -53,7 +54,8 @@
-   AC_SUBST(HTML_DIR, $with_html_dir)
- fi
- 
--GTK_DOC_CHECK([1.0])
-+dnl MAC OS X doesn't like this... (requires gtk-doc, which requires a million other packages)
-+dnl GTK_DOC_CHECK([1.0])
- 
- AC_CONFIG_FILES([
- Makefile
-diff -u -r ../foocanvas.latest/libfoocanvas/foo-canvas.c ./libfoocanvas/foo-canvas.c
---- ../foocanvas.latest/libfoocanvas/foo-canvas.c	2008-03-11 09:54:13.000000000 +0000
-+++ ./libfoocanvas/foo-canvas.c	2008-03-11 09:54:14.184121047 +0000
-@@ -78,7 +78,7 @@
- 
- static void foo_canvas_request_update (FooCanvas      *canvas);
- static void group_add                   (FooCanvasGroup *group,
--					 FooCanvasItem  *item);
-+					 FooCanvasItem  *item, FooCanvasGroupPosition position);
- static void group_remove                (FooCanvasGroup *group,
- 					 FooCanvasItem  *item);
- static void redraw_and_repick_if_mapped (FooCanvasItem *item);
-@@ -190,17 +190,56 @@
- }
- 
- 
-+/**
-+ * foo_canvas_item_new:
-+ * @parent: The parent group for the new item.
-+ * @type: The object type of the item.
-+ * @position: puts new item at bottom (FOO_CANVAS_GROUP_BOTTOM) or top (FOO_CANVAS_GROUP_TOP)
-+ * of parents stack of child items.
-+ * @first_arg_name: A list of object argument name/value pairs, NULL-terminated,
-+ * used to configure the item.  For example, "fill_color", "black",
-+ * "width_units", 5.0, NULL.
-+ * @Varargs:
-+ *
-+ * Creates a new canvas item with @parent as its parent group.  The item is
-+ * created at the top of its parent's stack, and starts up as visible.  The item
-+ * is of the specified @type, for example, it can be
-+ * foo_canvas_rect_get_type().  The list of object arguments/value pairs is
-+ * used to configure the item.
-+ *
-+ * Return value: The newly-created item.
-+ **/
-+FooCanvasItem *
-+foo_canvas_item_new_position (FooCanvasGroup *parent, GType type, FooCanvasGroupPosition position,
-+			      const gchar *first_arg_name, ...)
-+{
-+	FooCanvasItem *item;
-+	va_list args;
-+
-+	g_return_val_if_fail (FOO_IS_CANVAS_GROUP (parent), NULL);
-+	g_return_val_if_fail (g_type_is_a (type, foo_canvas_item_get_type ()), NULL);
-+
-+	item = FOO_CANVAS_ITEM (g_object_new (type, NULL));
-+
-+	va_start (args, first_arg_name);
-+	foo_canvas_item_construct_position (item, parent, position, first_arg_name, args);
-+	va_end (args);
-+
-+	return item;
-+}
-+
-+
- /* Performs post-creation operations on a canvas item (adding it to its parent
-  * group, etc.)
-  */
- static void
--item_post_create_setup (FooCanvasItem *item)
-+item_post_create_setup (FooCanvasItem *item, FooCanvasGroupPosition position)
- {
- 	GtkObject *obj;
- 
- 	obj = GTK_OBJECT (item);
- 
--	group_add (FOO_CANVAS_GROUP (item->parent), item);
-+	group_add (FOO_CANVAS_GROUP (item->parent), item, position);
- 
- 	redraw_and_repick_if_mapped (item);
- }
-@@ -224,7 +263,7 @@
- 		} else if (g_value_get_object (value)) {
- 			item->parent = FOO_CANVAS_ITEM (g_value_get_object (value));
- 			item->canvas = item->parent->canvas;
--			item_post_create_setup (item);
-+			item_post_create_setup (item, FOO_CANVAS_GROUP_TOP);
- 		}
- 		break;
- 	case ITEM_PROP_VISIBLE:
-@@ -282,7 +321,34 @@
- 
- 	g_object_set_valist (G_OBJECT (item), first_arg_name, args);
- 
--	item_post_create_setup (item);
-+	item_post_create_setup (item, FOO_CANVAS_GROUP_TOP);
-+}
-+
-+
-+/**
-+ * foo_canvas_item_construct_position:
-+ * @item: An unconstructed canvas item.
-+ * @parent: The parent group for the item.
-+ * @position: puts new item at bottom (FOO_CANVAS_GROUP_BOTTOM) or top (FOO_CANVAS_GROUP_TOP)
-+ * of parents stack of child items.
-+ * @first_arg_name: The name of the first argument for configuring the item.
-+ * @args: The list of arguments used to configure the item.
-+ *
-+ * Constructs a canvas item; meant for use only by item implementations.
-+ **/
-+void
-+foo_canvas_item_construct_position (FooCanvasItem *item, FooCanvasGroup *parent, FooCanvasGroupPosition position,
-+				    const gchar *first_arg_name, va_list args)
-+{
-+	g_return_if_fail (FOO_IS_CANVAS_GROUP (parent));
-+	g_return_if_fail (FOO_IS_CANVAS_ITEM (item));
-+
-+	item->parent = FOO_CANVAS_ITEM (parent);
-+	item->canvas = item->parent->canvas;
-+
-+	g_object_set_valist (G_OBJECT (item), first_arg_name, args);
-+
-+	item_post_create_setup (item, position);
- }
- 
- 
-@@ -295,6 +361,7 @@
- 	}
- }
- 
-+
- /* Destroy handler for canvas items */
- static void
- foo_canvas_item_destroy (GtkObject *object)
-@@ -339,10 +406,8 @@
- 
- 		if (item->parent)
- 			group_remove (FOO_CANVAS_GROUP (item->parent), item);
--
- 		item->canvas = NULL;
- 	}
--
- 	GTK_OBJECT_CLASS (item_parent_class)->destroy (object);
- }
- 
-@@ -992,7 +1057,7 @@
- 	group_remove (FOO_CANVAS_GROUP (item->parent), item);
- 	item->parent = FOO_CANVAS_ITEM (new_group);
- 	/* item->canvas is unchanged.  */
--	group_add (new_group, item);
-+	group_add (new_group, item, FOO_CANVAS_GROUP_TOP);
- 
- 	/* Redraw and repick */
- 
-@@ -1376,6 +1441,7 @@
- 	bbox_x1 = 0;
- 	bbox_y1 = 0;
- 
-+       if(item->object.flags & FOO_CANVAS_ITEM_VISIBLE){ 
- 	for (list = group->item_list; list; list = list->next) {
- 		i = list->data;
- 
-@@ -1394,10 +1460,14 @@
- 			bbox_y1 = MAX (bbox_y1, i->y2);
- 		}
- 	}
-+
-+       }
- 	item->x1 = bbox_x0;
- 	item->y1 = bbox_y0;
- 	item->x2 = bbox_x1;
- 	item->y2 = bbox_y1;
-+
-+        return ;
- }
- 
- /* Unrealize handler for canvas groups */
-@@ -1540,10 +1610,10 @@
- 			has_point = TRUE;
- 		} else
- 			has_point = FALSE;
--
-+		/* guessing that the x factor is OK here. RNGC */
- 		if (has_point
- 		    && point_item
--		    && ((int) (dist * item->canvas->pixels_per_unit + 0.5)
-+		    && ((int) (dist * item->canvas->pixels_per_unit_x + 0.5)
- 			<= item->canvas->close_enough)) {
- 			best = dist;
- 			*actual_item = point_item;
-@@ -1553,7 +1623,7 @@
- 	return best;
- }
- 
--static void
-+void
- foo_canvas_group_translate (FooCanvasItem *item, double dx, double dy)
- {
-         FooCanvasGroup *group;
-@@ -1642,16 +1712,30 @@
- 
- /* Adds an item to a group */
- static void
--group_add (FooCanvasGroup *group, FooCanvasItem *item)
-+group_add (FooCanvasGroup *group, FooCanvasItem *item, FooCanvasGroupPosition position)
- {
- 	g_object_ref (GTK_OBJECT (item));
- 	gtk_object_sink (GTK_OBJECT (item));
- 
--	if (!group->item_list) {
--		group->item_list = g_list_append (group->item_list, item);
--		group->item_list_end = group->item_list;
--	} else
--		group->item_list_end = g_list_append (group->item_list_end, item)->next;
-+	if (position == FOO_CANVAS_GROUP_TOP)
-+	  {
-+	    if (!group->item_list) {
-+	      group->item_list = g_list_append (group->item_list, item);
-+	      group->item_list_end = group->item_list;
-+	    } else
-+	      group->item_list_end = g_list_append (group->item_list_end, item)->next;
-+	  }
-+	else
-+	  {
-+	    if (!group->item_list) {
-+	      group->item_list = g_list_prepend (group->item_list, item);
-+	      group->item_list_end = group->item_list;
-+	    } else
-+	      group->item_list = g_list_prepend (group->item_list, item);
-+	  }
-+
-+
-+
- 
- 	if (item->object.flags & FOO_CANVAS_ITEM_VISIBLE &&
- 	    group->item.object.flags & FOO_CANVAS_ITEM_MAPPED) {
-@@ -1703,6 +1787,9 @@
- 
- enum {
- 	DRAW_BACKGROUND,
-+	DRAWN_ITEMS,
-+	BEGIN_UPDATE,
-+	END_UPDATE,
- 	LAST_SIGNAL
- };
- 
-@@ -2053,6 +2140,35 @@
- 			      G_TYPE_NONE, 4, 
- 			      G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT);
- 
-+	canvas_signals[DRAWN_ITEMS] =
-+		g_signal_new ("drawn_items",
-+			      G_TYPE_FROM_CLASS (object_class),
-+			      G_SIGNAL_RUN_FIRST,
-+			      0,
-+			      NULL, NULL,
-+			      foo_canvas_marshal_VOID__INT_INT_INT_INT,
-+			      G_TYPE_NONE, 4, 
-+			      G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT);
-+
-+	canvas_signals[BEGIN_UPDATE] =
-+		g_signal_new ("begin_update",
-+			      G_TYPE_FROM_CLASS (object_class),
-+			      G_SIGNAL_RUN_FIRST,
-+			      0,
-+			      NULL, NULL,
-+			      foo_canvas_marshal_VOID__VOID,
-+			      G_TYPE_NONE, 0); 
-+
-+	canvas_signals[END_UPDATE] =
-+		g_signal_new ("end_update",
-+			      G_TYPE_FROM_CLASS (object_class),
-+			      G_SIGNAL_RUN_FIRST,
-+			      0,
-+			      NULL, NULL,
-+			      foo_canvas_marshal_VOID__VOID,
-+			      G_TYPE_NONE, 0); 
-+
-+
- 	atk_registry_set_factory_type (atk_get_default_registry (),
- 				       FOO_TYPE_CANVAS,
- 				       foo_canvas_accessible_factory_get_type ());
-@@ -2080,7 +2196,8 @@
- 	canvas->scroll_x2 = canvas->layout.width;
- 	canvas->scroll_y2 = canvas->layout.height;
- 
--	canvas->pixels_per_unit = 1.0;
-+	canvas->pixels_per_unit_x = 1.0;
-+	canvas->pixels_per_unit_y = 1.0;
- 
- 	canvas->pick_event.type = GDK_LEAVE_NOTIFY;
- 	canvas->pick_event.crossing.x = 0;
-@@ -2298,12 +2415,12 @@
- 	int old_zoom_xofs, old_zoom_yofs;
- 	int changed_x = FALSE, changed_y = FALSE;
- 	int canvas_width, canvas_height;
--
-+	
- 	canvas_width = GTK_WIDGET (canvas)->allocation.width;
- 	canvas_height = GTK_WIDGET (canvas)->allocation.height;
- 
--	scroll_width = floor ((canvas->scroll_x2 - canvas->scroll_x1) * canvas->pixels_per_unit + 0.5);
--	scroll_height = floor ((canvas->scroll_y2 - canvas->scroll_y1) * canvas->pixels_per_unit + 0.5);
-+	scroll_width = floor ((canvas->scroll_x2 - canvas->scroll_x1) * canvas->pixels_per_unit_x + 0.5);
-+	scroll_height = floor ((canvas->scroll_y2 - canvas->scroll_y1) * canvas->pixels_per_unit_y + 0.5);
- 
- 	right_limit = scroll_width - canvas_width;
- 	bottom_limit = scroll_height - canvas_height;
-@@ -2867,10 +2984,14 @@
- 		g_source_remove (canvas->idle_id);
- 		canvas->idle_id = 0;
- 	}
-+
- 	if (canvas->need_update) {
- 		g_return_val_if_fail (!canvas->doing_update, FALSE);
- 
-+		g_signal_emit(G_OBJECT (canvas), canvas_signals[BEGIN_UPDATE], 0);
-+
- 		canvas->doing_update = TRUE;
-+
- 		foo_canvas_item_invoke_update (canvas->root, 0, 0, 0);
- 
- 		g_return_val_if_fail (canvas->doing_update, FALSE);
-@@ -2878,6 +2999,8 @@
- 		canvas->doing_update = FALSE;
- 
- 		canvas->need_update = FALSE;
-+
-+		g_signal_emit(G_OBJECT (canvas), canvas_signals[END_UPDATE], 0);
- 	}
- 
- 	/* Hmmm. Would like to queue antiexposes if the update marked
-@@ -2888,16 +3011,20 @@
- 		       event->area.x, event->area.y,
- 		       event->area.width, event->area.height);
- 	
--	if (canvas->root->object.flags & FOO_CANVAS_ITEM_MAPPED)
-+	if (canvas->root->object.flags & FOO_CANVAS_ITEM_MAPPED){
- 		(* FOO_CANVAS_ITEM_GET_CLASS (canvas->root)->draw) (canvas->root,
--								      canvas->layout.bin_window,
--								      event);
--
-+								    canvas->layout.bin_window,
-+								    event);
-+	}
- 
- 
- 	/* Chain up to get exposes on child widgets */
- 	GTK_WIDGET_CLASS (canvas_parent_class)->expose_event (widget, event);
- 
-+	g_signal_emit (G_OBJECT (canvas), canvas_signals[DRAWN_ITEMS], 0, 
-+		       event->area.x, event->area.y,
-+		       event->area.width, event->area.height);
-+
- 	return FALSE;
- }
- 
-@@ -2919,11 +3046,12 @@
- do_update (FooCanvas *canvas)
- {
- 	/* Cause the update if necessary */
--
- update_again:
- 	if (canvas->need_update) {
- 		g_return_if_fail (!canvas->doing_update);
- 
-+		g_signal_emit(G_OBJECT (canvas), canvas_signals[BEGIN_UPDATE], 0);
-+
- 		canvas->doing_update = TRUE;
- 		foo_canvas_item_invoke_update (canvas->root, 0, 0, 0);
- 
-@@ -2932,6 +3060,8 @@
- 		canvas->doing_update = FALSE;
- 
- 		canvas->need_update = FALSE;
-+
-+		g_signal_emit(G_OBJECT (canvas), canvas_signals[END_UPDATE], 0);
- 	}
- 
- 	/* Pick new current item */
-@@ -2949,6 +3079,8 @@
- 	if (canvas->need_update) {
- 		goto update_again;
- 	}
-+
-+	return ;
- }
- 
- /* Idle handler for the canvas.  It deals with pending updates and redraws. */
-@@ -3026,7 +3158,7 @@
- 	    (canvas->scroll_x2 == x2) && (canvas->scroll_y2 == y2)) {
- 		return;
- 	}
--	
-+
- 	/*
- 	 * Set the new scrolling region.  If possible, do not move the visible contents of the
- 	 * canvas.
-@@ -3101,15 +3233,35 @@
- 
- /**
-  * foo_canvas_set_pixels_per_unit:
-- * @canvas: A canvas.
-+ * @canvas: A canvas
-  * @n: The number of pixels that correspond to one canvas unit.
-  *
-  * Sets the zooming factor of a canvas by specifying the number of pixels that
-  * correspond to one canvas unit.
-+ * This is retained for backwards compatibility and just calls
-+ * foo_canvas_set_pixels_per_unit_xy, passing the number of pixels/unit twice.
-  **/
- void
- foo_canvas_set_pixels_per_unit (FooCanvas *canvas, double n)
- {
-+  foo_canvas_set_pixels_per_unit_xy(canvas, n, n);
-+  return;
-+}
-+
-+
-+/**
-+ * foo_canvas_set_pixels_per_unit_xy:
-+ * @canvas: A canvas.
-+ * @x: The number of pixels that correspond to one canvas unit on the x axis.
-+ * @y: The number of pixels that correspond to one canvas unit on the y axis.
-+ *
-+ * Sets the zooming factor of a canvas by specifying the number of pixels that
-+ * correspond to one canvas unit.
-+ * Having two zooming factors enables asymmetric zooming.
-+ **/
-+void
-+foo_canvas_set_pixels_per_unit_xy (FooCanvas *canvas, double x, double y)
-+{
- 	GtkWidget *widget;
- 	double cx, cy;
- 	int x1, y1;
-@@ -3119,7 +3271,8 @@
- 	gint attributes_mask;
- 
- 	g_return_if_fail (FOO_IS_CANVAS (canvas));
--	g_return_if_fail (n > FOO_CANVAS_EPSILON);
-+	/* guessing that the x factor is OK here.  RNCG */
-+	g_return_if_fail (x > FOO_CANVAS_EPSILON);
- 
- 	widget = GTK_WIDGET (canvas);
- 
-@@ -3127,14 +3280,15 @@
- 	center_y = widget->allocation.height / 2;
- 
- 	/* Find the coordinates of the screen center in units. */
--	cx = (canvas->layout.hadjustment->value + center_x) / canvas->pixels_per_unit + canvas->scroll_x1 + canvas->zoom_xofs;
--	cy = (canvas->layout.vadjustment->value + center_y) / canvas->pixels_per_unit + canvas->scroll_y1 + canvas->zoom_yofs;
-+	cx = (canvas->layout.hadjustment->value + center_x) / canvas->pixels_per_unit_x + canvas->scroll_x1 + canvas->zoom_xofs;
-+	cy = (canvas->layout.vadjustment->value + center_y) / canvas->pixels_per_unit_y + canvas->scroll_y1 + canvas->zoom_yofs;
- 
- 	/* Now calculate the new offset of the upper left corner. (round not truncate) */
--	x1 = ((cx - canvas->scroll_x1) * n) - center_x + .5;
--	y1 = ((cy - canvas->scroll_y1) * n) - center_y + .5;
-+	x1 = ((cx - canvas->scroll_x1) * x) - center_x + .5;
-+	y1 = ((cy - canvas->scroll_y1) * y) - center_y + .5;
- 
--	canvas->pixels_per_unit = n;
-+	canvas->pixels_per_unit_x = x;
-+	canvas->pixels_per_unit_y = y;
- 
- 	if (!(canvas->root->object.flags & FOO_CANVAS_ITEM_NEED_DEEP_UPDATE)) {
- 		canvas->root->object.flags |= FOO_CANVAS_ITEM_NEED_DEEP_UPDATE;
-@@ -3268,7 +3422,8 @@
- 	foo_canvas_w2c (canvas, x, y, &cx, &cy);
- 
- 	dist = foo_canvas_item_invoke_point (canvas->root, x, y, cx, cy, &item);
--	if ((int) (dist * canvas->pixels_per_unit + 0.5) <= canvas->close_enough)
-+	/* guessing the x factor is OK here.  RNGC */
-+	if ((int) (dist * canvas->pixels_per_unit_x + 0.5) <= canvas->close_enough)
- 		return item;
- 	else
- 		return NULL;
-@@ -3331,16 +3486,17 @@
- void
- foo_canvas_w2c (FooCanvas *canvas, double wx, double wy, int *cx, int *cy)
- {
--	double zoom;
-+	double zoom_x, zoom_y;
- 
- 	g_return_if_fail (FOO_IS_CANVAS (canvas));
- 	
--	zoom = canvas->pixels_per_unit;
-+	zoom_x = canvas->pixels_per_unit_x;
-+	zoom_y = canvas->pixels_per_unit_y;
- 	
- 	if (cx)
--		*cx = floor ((wx - canvas->scroll_x1)*zoom + canvas->zoom_xofs + 0.5);
-+		*cx = floor ((wx - canvas->scroll_x1)*zoom_x + canvas->zoom_xofs + 0.5);
- 	if (cy)
--		*cy = floor ((wy - canvas->scroll_y1)*zoom + canvas->zoom_yofs + 0.5);
-+		*cy = floor ((wy - canvas->scroll_y1)*zoom_y + canvas->zoom_yofs + 0.5);
- }
- 
- /**
-@@ -3380,16 +3536,17 @@
- void
- foo_canvas_w2c_d (FooCanvas *canvas, double wx, double wy, double *cx, double *cy)
- {
--	double zoom;
-+	double zoom_x, zoom_y;
- 
- 	g_return_if_fail (FOO_IS_CANVAS (canvas));
- 
--	zoom = canvas->pixels_per_unit;
-+	zoom_x = canvas->pixels_per_unit_x;
-+	zoom_y = canvas->pixels_per_unit_y;
- 	
- 	if (cx)
--		*cx = (wx - canvas->scroll_x1)*zoom + canvas->zoom_xofs;
-+		*cx = (wx - canvas->scroll_x1)*zoom_x + canvas->zoom_xofs;
- 	if (cy)
--		*cy = (wy - canvas->scroll_y1)*zoom + canvas->zoom_yofs;
-+		*cy = (wy - canvas->scroll_y1)*zoom_y + canvas->zoom_yofs;
- }
- 
- 
-@@ -3406,16 +3563,17 @@
- void
- foo_canvas_c2w (FooCanvas *canvas, int cx, int cy, double *wx, double *wy)
- {
--	double zoom;
-+	double zoom_x, zoom_y;
- 
- 	g_return_if_fail (FOO_IS_CANVAS (canvas));
- 
--	zoom = canvas->pixels_per_unit;
-+	zoom_x = canvas->pixels_per_unit_x;
-+	zoom_y = canvas->pixels_per_unit_y;
- 	
- 	if (wx)
--		*wx = (cx - canvas->zoom_xofs)/zoom + canvas->scroll_x1;
-+		*wx = (cx - canvas->zoom_xofs)/zoom_x + canvas->scroll_x1;
- 	if (wy)
--		*wy = (cy - canvas->zoom_yofs)/zoom + canvas->scroll_y1;
-+		*wy = (cy - canvas->zoom_yofs)/zoom_y + canvas->scroll_y1;
- }
- 
- 
-@@ -3441,11 +3599,11 @@
- 
- 	if (worldx)
- 		*worldx = canvas->scroll_x1 + ((winx - canvas->zoom_xofs)
--					       / canvas->pixels_per_unit);
-+					       / canvas->pixels_per_unit_x);
- 
- 	if (worldy)
- 		*worldy = canvas->scroll_y1 + ((winy - canvas->zoom_yofs)
--					       / canvas->pixels_per_unit);
-+					       / canvas->pixels_per_unit_y);
- }
- 
- 
-@@ -3468,10 +3626,10 @@
- 	g_return_if_fail (FOO_IS_CANVAS (canvas));
- 
- 	if (winx)
--		*winx = (canvas->pixels_per_unit)*(worldx - canvas->scroll_x1) + canvas->zoom_xofs;
-+		*winx = (canvas->pixels_per_unit_x)*(worldx - canvas->scroll_x1) + canvas->zoom_xofs;
- 
- 	if (winy)
--		*winy = (canvas->pixels_per_unit)*(worldy - canvas->scroll_y1) + canvas->zoom_yofs;
-+		*winy = (canvas->pixels_per_unit_y)*(worldy - canvas->scroll_y1) + canvas->zoom_yofs;
- }
- 
- 
-@@ -3999,3 +4157,11 @@
-                                        FOO_TYPE_CANVAS_ITEM,
-                                        foo_canvas_item_accessible_factory_get_type ());
- }
-+
-+void 
-+foo_canvas_zmap(void)
-+{
-+  /* do nothing */
-+}
-+
-+/*  Last edited: Nov  9 12:11 2007 (rds) */
-diff -u -r ../foocanvas.latest/libfoocanvas/foo-canvas.h ./libfoocanvas/foo-canvas.h
---- ../foocanvas.latest/libfoocanvas/foo-canvas.h	2008-03-11 09:54:13.000000000 +0000
-+++ ./libfoocanvas/foo-canvas.h	2008-03-11 09:54:14.186120740 +0000
-@@ -1,3 +1,4 @@
-+/*  Last edited: Nov  9 10:56 2007 (rds) */
- /* -*- Mode: C; tab-width: 8; indent-tabs-mode: 8; c-basic-offset: 8 -*- */
- /*
-  * Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation
-@@ -101,6 +102,11 @@
- 	FOO_CANVAS_UPDATE_DEEP       = 1 << 1
- };
- 
-+
-+/* Special positions for putting new items at top or bottom of group. */
-+typedef enum {FOO_CANVAS_GROUP_BOTTOM = -1, FOO_CANVAS_GROUP_TOP  = -2} FooCanvasGroupPosition ;
-+
-+
- #define FOO_TYPE_CANVAS_ITEM            (foo_canvas_item_get_type ())
- #define FOO_CANVAS_ITEM(obj)            (GTK_CHECK_CAST ((obj), FOO_TYPE_CANVAS_ITEM, FooCanvasItem))
- #define FOO_CANVAS_ITEM_CLASS(klass)    (GTK_CHECK_CLASS_CAST ((klass), FOO_TYPE_CANVAS_ITEM, FooCanvasItemClass))
-@@ -186,10 +192,16 @@
- FooCanvasItem *foo_canvas_item_new (FooCanvasGroup *parent, GType type,
- 				    const gchar *first_arg_name, ...);
- 
-+FooCanvasItem *foo_canvas_item_new_position (FooCanvasGroup *parent, GType type, FooCanvasGroupPosition position,
-+					     const gchar *first_arg_name, ...);
-+
- /* Constructors for use in derived classes and language wrappers */
- void foo_canvas_item_construct (FooCanvasItem *item, FooCanvasGroup *parent,
- 				const gchar *first_arg_name, va_list args);
- 
-+void foo_canvas_item_construct_position (FooCanvasItem *item, FooCanvasGroup *parent, FooCanvasGroupPosition position,
-+					 const gchar *first_arg_name, va_list args);
-+
- /* Configure an item using the standard Gtk argument mechanism.  The last
-  * argument must be a NULL pointer.
-  */
-@@ -341,6 +353,7 @@
- #define FOO_IS_CANVAS_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), FOO_TYPE_CANVAS))
- #define FOO_CANVAS_GET_CLASS(obj)  (GTK_CHECK_GET_CLASS ((obj), FOO_TYPE_CANVAS, FooCanvasClass))
- 
-+typedef void (*FooCanvasUpdateSignal)(FooCanvas *canvas, gpointer user_data);
- 
- struct _FooCanvas {
- 	GtkLayout layout;
-@@ -371,7 +384,8 @@
- 	double scroll_x2, scroll_y2;
- 
- 	/* Scaling factor to be used for display */
--	double pixels_per_unit;
-+	double pixels_per_unit_x;
-+	double pixels_per_unit_y;
- 
- 	/* Idle handler ID */
- 	guint idle_id;
-@@ -456,6 +470,10 @@
- /* Sets the number of pixels that correspond to one unit in world coordinates */
- void foo_canvas_set_pixels_per_unit (FooCanvas *canvas, double n);
- 
-+/* Sets the number of  pixels corresponding to one unit in world coordinates
-+ * separately on x and y axes, allowing asymmetric zooming. */
-+void foo_canvas_set_pixels_per_unit_xy (FooCanvas *canvas, double x, double y);
-+
- /* Wether the canvas centers the scroll region if it is smaller than the window  */
- void foo_canvas_set_center_scroll_region (FooCanvas *canvas, gboolean center_scroll_region);
- 
-@@ -525,6 +543,10 @@
-  */
- void foo_canvas_set_stipple_origin (FooCanvas *canvas, GdkGC *gc);
- 
-+void foo_canvas_zmap(void);
-+
- G_END_DECLS
- 
-+
- #endif
-+
-diff -u -r ../foocanvas.latest/libfoocanvas/foo-canvas-line.c ./libfoocanvas/foo-canvas-line.c
---- ../foocanvas.latest/libfoocanvas/foo-canvas-line.c	2008-03-11 09:54:13.000000000 +0000
-+++ ./libfoocanvas/foo-canvas-line.c	2008-03-11 09:54:14.187120586 +0000
-@@ -1,3 +1,4 @@
-+/*  Last edited: Oct 18 18:34 2006 (rds) */
- /*
-  * Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation
-  * All rights reserved.
-@@ -338,7 +339,7 @@
- 	/* Add possible over-estimate for wide lines */
- 
- 	if (line->width_pixels)
--		width = line->width / line->item.canvas->pixels_per_unit;
-+		width = line->width / line->item.canvas->pixels_per_unit_x;
- 	else
- 		width = line->width;
- 
-@@ -466,7 +467,7 @@
- 		return;
- 
- 	if (line->width_pixels)
--		width = line->width / line->item.canvas->pixels_per_unit;
-+		width = line->width / line->item.canvas->pixels_per_unit_x;
- 	else
- 		width = line->width;
- 
-@@ -477,9 +478,9 @@
- 	shape_c = line->shape_c + width / 2.0;
- 
- 	if (line->width_pixels) {
--		shape_a /= line->item.canvas->pixels_per_unit;
--		shape_b /= line->item.canvas->pixels_per_unit;
--		shape_c /= line->item.canvas->pixels_per_unit;
-+		shape_a /= line->item.canvas->pixels_per_unit_x;
-+		shape_b /= line->item.canvas->pixels_per_unit_x;
-+		shape_c /= line->item.canvas->pixels_per_unit_x;
- 	}
- 
- 	shape_a += 0.001;
-@@ -600,7 +601,7 @@
- 	if (line->width_pixels)
- 		width = (int) line->width;
- 	else
--		width = (int) (line->width * line->item.canvas->pixels_per_unit + 0.5);
-+		width = (int) (line->width * line->item.canvas->pixels_per_unit_x + 0.5);
- 
- 	gdk_gc_set_line_attributes (line->gc,
- 				    width,
-@@ -1126,12 +1127,12 @@
- 	 */
- 
- 	if (line->width_pixels)
--		width = line->width / item->canvas->pixels_per_unit;
-+		width = line->width / item->canvas->pixels_per_unit_x;
- 	else
- 		width = line->width;
- 
--	if (width < (1.0 / item->canvas->pixels_per_unit))
--		width = 1.0 / item->canvas->pixels_per_unit;
-+	if (width < (1.0 / item->canvas->pixels_per_unit_x))
-+		width = 1.0 / item->canvas->pixels_per_unit_x;
- 
- 	changed_miter_to_bevel = 0;
- 
-diff -u -r ../foocanvas.latest/libfoocanvas/foo-canvas-marshal.list ./libfoocanvas/foo-canvas-marshal.list
---- ../foocanvas.latest/libfoocanvas/foo-canvas-marshal.list	2008-03-11 09:54:13.000000000 +0000
-+++ ./libfoocanvas/foo-canvas-marshal.list	2008-03-11 09:54:14.188120433 +0000
-@@ -1,2 +1,3 @@
- VOID:INT,INT,INT,INT
- BOOLEAN:BOXED
-+VOID:VOID
-diff -u -r ../foocanvas.latest/libfoocanvas/foo-canvas-pixbuf.c ./libfoocanvas/foo-canvas-pixbuf.c
---- ../foocanvas.latest/libfoocanvas/foo-canvas-pixbuf.c	2008-03-11 09:54:13.000000000 +0000
-+++ ./libfoocanvas/foo-canvas-pixbuf.c	2008-03-11 09:54:14.189120279 +0000
-@@ -1,3 +1,4 @@
-+/*  Last edited: May 11 11:33 2004 (rnc) */
- /* GNOME libraries - GdkPixbuf item for the GNOME canvas
-  *
-  * Copyright (C) 1999 The Free Software Foundation
-@@ -564,13 +565,13 @@
- 	}
- 
- 	if (priv->x_in_pixels) {
--		x = i2w_dx + priv->x / item->canvas->pixels_per_unit;
-+		x = i2w_dx + priv->x / item->canvas->pixels_per_unit_x;
- 	} else {
- 		x = i2w_dx + priv->x;
- 	}
- 
- 	if (priv->y_in_pixels) {
--		y = i2w_dy + priv->y / item->canvas->pixels_per_unit;
-+		y = i2w_dy + priv->y / item->canvas->pixels_per_unit_y;
- 	} else {
- 		y = i2w_dy + priv->y;
- 	}
-@@ -582,7 +583,7 @@
- 	}
- 
- 	if (priv->width_in_pixels)
--		width /= item->canvas->pixels_per_unit;
-+		width /= item->canvas->pixels_per_unit_x;
- 
- 	if (priv->height_set) {
- 		height = priv->height;
-@@ -591,7 +592,7 @@
- 	}
- 
- 	if (priv->height_in_pixels)
--		height /= item->canvas->pixels_per_unit;
-+		height /= item->canvas->pixels_per_unit_y;
- 
- 
- 	switch (priv->anchor) {
-@@ -781,8 +782,8 @@
- 	pixbuf = priv->pixbuf;
- 
- 	*actual_item = item;
--
--	no_hit = item->canvas->pixels_per_unit * 2 + 10;
-+	/* guessing that the x factor is OK here. RNGC */
-+	no_hit = item->canvas->pixels_per_unit_x * 2 + 10;
- 
- 	if (!priv->pixbuf)
- 		return no_hit;
-@@ -823,13 +824,13 @@
- 	priv = gcp->priv;
- 
- 	if (priv->x_in_pixels) {
--		priv->x += dx * item->canvas->pixels_per_unit;
-+		priv->x += dx * item->canvas->pixels_per_unit_x;
- 	} else {
- 		priv->x += dx;
- 	}
- 
- 	if (priv->y_in_pixels) {
--		priv->y += dy * item->canvas->pixels_per_unit;
-+		priv->y += dy * item->canvas->pixels_per_unit_y;
- 	} else {
- 		priv->y += dy;
- 	}
-diff -u -r ../foocanvas.latest/libfoocanvas/foo-canvas-polygon.c ./libfoocanvas/foo-canvas-polygon.c
---- ../foocanvas.latest/libfoocanvas/foo-canvas-polygon.c	2008-03-11 09:54:13.000000000 +0000
-+++ ./libfoocanvas/foo-canvas-polygon.c	2008-03-11 09:54:14.190120126 +0000
-@@ -1,3 +1,4 @@
-+/*  Last edited: Oct 19 09:39 2006 (rds) */
- /*
-  * Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation
-  * All rights reserved.
-@@ -276,7 +277,7 @@
- 	/* Add outline width */
- 
- 	if (poly->width_pixels)
--		width = poly->width / poly->item.canvas->pixels_per_unit;
-+		width = poly->width / poly->item.canvas->pixels_per_unit_x;
- 	else
- 		width = poly->width;
- 
-@@ -400,7 +401,7 @@
- 	if (poly->width_pixels)
- 		width = (int) poly->width;
- 	else
--		width = (int) (poly->width * poly->item.canvas->pixels_per_unit + 0.5);
-+		width = (int) (poly->width * poly->item.canvas->pixels_per_unit_x + 0.5);
- 
- 	gdk_gc_set_line_attributes (poly->outline_gc, width,
- 				    GDK_LINE_SOLID, GDK_CAP_ROUND, GDK_JOIN_ROUND);
-@@ -595,15 +596,16 @@
- static void
- get_color_value (FooCanvasPolygon *poly, gulong pixel, GValue *value)
- {
--	GdkColor *color;
-+	GdkColor color;
- 	GdkColormap *colormap;
- 
--	color = g_new (GdkColor, 1);
--	color->pixel = pixel;
-+	//color = g_new (GdkColor, 1);
-+	//color->pixel = pixel;
- 
--	colormap = gtk_widget_get_colormap (GTK_WIDGET (poly));
--	gdk_rgb_find_color (colormap, color);
--	g_value_set_boxed (value, color);
-+	colormap = gtk_widget_get_colormap (GTK_WIDGET (FOO_CANVAS_ITEM(poly)->canvas));
-+	gdk_colormap_query_color(colormap, pixel, &color);
-+	//gdk_rgb_find_color (colormap, color);
-+	g_value_set_boxed (value, &color);
- }
- 
- static void
-@@ -801,7 +803,7 @@
- 
- 	if (poly->outline_set) {
- 		if (poly->width_pixels)
--			width = poly->width / item->canvas->pixels_per_unit;
-+			width = poly->width / item->canvas->pixels_per_unit_x;
- 		else
- 			width = poly->width;
- 
-diff -u -r ../foocanvas.latest/libfoocanvas/foo-canvas-rect-ellipse.c ./libfoocanvas/foo-canvas-rect-ellipse.c
---- ../foocanvas.latest/libfoocanvas/foo-canvas-rect-ellipse.c	2008-03-11 09:54:13.000000000 +0000
-+++ ./libfoocanvas/foo-canvas-rect-ellipse.c	2008-03-11 09:54:14.192119819 +0000
-@@ -1,3 +1,4 @@
-+/*  Last edited: Feb 25 11:09 2005 (rds) */
- /*
-  * Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation
-  * All rights reserved.
-@@ -281,7 +282,7 @@
- 	item = FOO_CANVAS_ITEM (re);
- 
- 	if (re->width_pixels)
--		hwidth = (re->width / item->canvas->pixels_per_unit) / 2.0;
-+		hwidth = (re->width / item->canvas->pixels_per_unit_x) / 2.0;
- 	else
- 		hwidth = re->width / 2.0;
- 
-@@ -352,7 +353,7 @@
- 	if (re->width_pixels)
- 		width = (int) re->width;
- 	else
--		width = (int) (re->width * re->item.canvas->pixels_per_unit + 0.5);
-+		width = (int) (re->width * re->item.canvas->pixels_per_unit_x + 0.5);
- 
- 	gdk_gc_set_line_attributes (re->outline_gc, width,
- 				    GDK_LINE_SOLID, GDK_CAP_PROJECTING, GDK_JOIN_MITER);
-@@ -734,7 +735,7 @@
- 	re = FOO_CANVAS_RE (item);
- 
- 	if (re->width_pixels)
--		hwidth = (re->width / item->canvas->pixels_per_unit) / 2.0;
-+		hwidth = (re->width / item->canvas->pixels_per_unit_x) / 2.0;
- 	else
- 		hwidth = re->width / 2.0;
- 
-@@ -1065,7 +1066,7 @@
- 
- 	if (re->outline_set) {
- 		if (re->width_pixels)
--			hwidth = (re->width / item->canvas->pixels_per_unit) / 2.0;
-+			hwidth = (re->width / item->canvas->pixels_per_unit_x) / 2.0;
- 		else
- 			hwidth = re->width / 2.0;
- 
-@@ -1191,7 +1192,7 @@
- 		if (re->width_pixels)
- 			width_pixels = (int) re->width;
- 		else
--			width_pixels = (int) floor (re->width * re->item.canvas->pixels_per_unit + 0.5);
-+			width_pixels = (int) floor (re->width * re->item.canvas->pixels_per_unit_x + 0.5);
- 
- 		width_lt = width_pixels / 2;
- 		width_rb = (width_pixels + 1) / 2;
-@@ -1344,7 +1345,7 @@
- 
- 	if (re->outline_set) {
- 		if (re->width_pixels)
--			width = re->width / item->canvas->pixels_per_unit;
-+			width = re->width / item->canvas->pixels_per_unit_x;
- 		else
- 			width = re->width;
- 	} else
-diff -u -r ../foocanvas.latest/libfoocanvas/foo-canvas-text.c ./libfoocanvas/foo-canvas-text.c
---- ../foocanvas.latest/libfoocanvas/foo-canvas-text.c	2008-03-11 09:54:13.000000000 +0000
-+++ ./libfoocanvas/foo-canvas-text.c	2008-03-11 10:00:08.749684858 +0000
-@@ -1,3 +1,4 @@
-+/*  Last edited: Feb  1 14:44 2008 (rds) */
- /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
- /*
-  * $Id: foo-canvas-text.c 52 2005-04-04 15:13:29Z mortenw $
-@@ -615,8 +616,8 @@
- 	/* Get canvas pixel coordinates for clip rectangle position */
- 
- 	foo_canvas_w2c (item->canvas, wx, wy, &text->clip_cx, &text->clip_cy);
--	text->clip_cwidth = text->clip_width * item->canvas->pixels_per_unit;
--	text->clip_cheight = text->clip_height * item->canvas->pixels_per_unit;
-+	text->clip_cwidth = text->clip_width * item->canvas->pixels_per_unit_x;
-+	text->clip_cheight = text->clip_height * item->canvas->pixels_per_unit_y;
- 
- 	/* Anchor text */
- 
-@@ -976,7 +977,7 @@
- 	case PROP_WRAP_WIDTH: {
- 		double w = fabs (g_value_get_double (value));
- 		pango_layout_set_width (text->layout,
--			w * text->item.canvas->pixels_per_unit * PANGO_SCALE);
-+			w * text->item.canvas->pixels_per_unit_x * PANGO_SCALE);
- 
- 		break;
- 	}
-@@ -1252,11 +1253,11 @@
- 		break;
- 
- 	case PROP_TEXT_WIDTH:
--		g_value_set_double (value, text->max_width / text->item.canvas->pixels_per_unit);
-+		g_value_set_double (value, text->max_width / text->item.canvas->pixels_per_unit_x);
- 		break;
- 
- 	case PROP_TEXT_HEIGHT:
--		g_value_set_double (value, text->height / text->item.canvas->pixels_per_unit);
-+		g_value_set_double (value, text->height / text->item.canvas->pixels_per_unit_y);
- 		break;
- 
- 	default:
-@@ -1309,7 +1310,8 @@
- 	if (text->rise_set)
- 		add_attr (attr_list, pango_attr_rise_new (text->rise));
- 
--	zoom = text->item.canvas->pixels_per_unit;
-+	/* guessing that the x factor is OK here. RNGC */
-+	zoom = text->item.canvas->pixels_per_unit_x;
- 	if (fabs (zoom - 1.) > 1e-4) {
- 		PangoAttribute *attr = pango_attr_scale_new (zoom);
- 		attr->start_index = 0;
-@@ -1460,12 +1462,20 @@
- 	PangoLayoutIter *iter;
- 	int x1, y1, x2, y2;
- 	int dx, dy;
--	double dist, best;
-+	int icx, icy;
-+	double dist, best, wx, wy;
- 
- 	text = FOO_CANVAS_TEXT (item);
- 
- 	*actual_item = item;
- 
-+	wx = text->x;
-+	wy = text->y;
-+
-+	foo_canvas_item_i2w(item, &wx, &wy);
-+
-+	foo_canvas_w2c(item->canvas, wx, wy, &icx, &icy);
-+
- 	/* The idea is to build bounding rectangles for each of the lines of
- 	 * text (clipped by the clipping rectangle, if it is activated) and see
- 	 * whether the point is inside any of these.  If it is, we are done.
-@@ -1480,13 +1490,12 @@
- 
- 		pango_layout_iter_get_line_extents (iter, NULL, &log_rect);
- 
--		if (text->clip) {
-+                if(text->clip) {
- 			x1 = PANGO_PIXELS (log_rect.x);
- 			y1 = PANGO_PIXELS (log_rect.y);
- 			x2 = PANGO_PIXELS (log_rect.x+log_rect.width);
- 			y2 = PANGO_PIXELS (log_rect.y+log_rect.height);
- 
--
- 			if (x1 < text->clip_cx)
- 				x1 = text->clip_cx;
- 
-@@ -1502,10 +1511,10 @@
- 			if ((x1 >= x2) || (y1 >= y2))
- 				continue;
- 		} else {
--			x1 = text->x;
--			y1 = text->y;
--			x2 = log_rect.width;
--			y2 = log_rect.height;
-+		  x1 = icx + PANGO_PIXELS(log_rect.x);
-+		  y1 = icy + PANGO_PIXELS(log_rect.y);
-+		  x2 = x1 +  PANGO_PIXELS(log_rect.width);
-+		  y2 = y1 +  PANGO_PIXELS(log_rect.height);
- 		}
- 
- 		/* Calculate distance from point to rectangle */
-@@ -1529,15 +1538,21 @@
- 			return 0.0;
- 		}
- 
-+		/* convert to difference in world coords as that's
-+		 * what $best is measured in. */
-+		dx /= item->canvas->pixels_per_unit_x;
-+		dy /= item->canvas->pixels_per_unit_y;
-+
- 		dist = sqrt (dx * dx + dy * dy);
-+
- 		if (dist < best)
--			best = dist;
-+		  best = dist;
- 
- 	} while (pango_layout_iter_next_line(iter));
- 
- 	pango_layout_iter_free(iter);
- 
--	return best / item->canvas->pixels_per_unit;
-+	return best;
- }
- 
- static void
-@@ -1567,8 +1582,8 @@
- 		width = text->clip_width;
- 		height = text->clip_height;
- 	} else {
--		width = text->max_width / item->canvas->pixels_per_unit;
--		height = text->height / item->canvas->pixels_per_unit;
-+		width = text->max_width / item->canvas->pixels_per_unit_x;
-+		height = text->height / item->canvas->pixels_per_unit_y;
- 	}
- 
- 	switch (text->anchor) {
-diff -u -r ../foocanvas.latest/libfoocanvas/foo-canvas-widget.c ./libfoocanvas/foo-canvas-widget.c
---- ../foocanvas.latest/libfoocanvas/foo-canvas-widget.c	2008-03-11 09:54:13.000000000 +0000
-+++ ./libfoocanvas/foo-canvas-widget.c	2008-03-11 09:54:14.194119512 +0000
-@@ -1,3 +1,4 @@
-+/*  Last edited: May 11 11:42 2004 (rnc) */
- /*
-  * Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation
-  * All rights reserved.
-@@ -456,8 +457,8 @@
- 			witem->cwidth = (int) (witem->width + 0.5);
- 			witem->cheight = (int) (witem->height + 0.5);
- 		} else {
--			witem->cwidth = (int) (witem->width * item->canvas->pixels_per_unit + 0.5);
--			witem->cheight = (int) (witem->height * item->canvas->pixels_per_unit + 0.5);
-+			witem->cwidth = (int) (witem->width * item->canvas->pixels_per_unit_x + 0.5);
-+			witem->cheight = (int) (witem->height * item->canvas->pixels_per_unit_y + 0.5);
- 		}
- 
- 		gtk_widget_set_usize (witem->widget, witem->cwidth, witem->cheight);
-@@ -516,8 +517,8 @@
- 
- 	foo_canvas_c2w (item->canvas, witem->cx, witem->cy, &x1, &y1);
- 
--	x2 = x1 + (witem->cwidth - 1) / item->canvas->pixels_per_unit;
--	y2 = y1 + (witem->cheight - 1) / item->canvas->pixels_per_unit;
-+	x2 = x1 + (witem->cwidth - 1) / item->canvas->pixels_per_unit_x;
-+	y2 = y1 + (witem->cheight - 1) / item->canvas->pixels_per_unit_y;
- 
- 	/* Is point inside widget bounds? */
- 
-Only in ./libfoocanvas: foozmap-canvas-floating-group.c
-Only in ./libfoocanvas: foozmap-canvas-floating-group.h
-Only in ./libfoocanvas: foozmap-canvas-line-glyph.c
-Only in ./libfoocanvas: foozmap-canvas-line-glyph.h
-Only in ./libfoocanvas: foozmap-canvas-text.c
-Only in ./libfoocanvas: foozmap-canvas-text.h
-diff -u -r ../foocanvas.latest/libfoocanvas/libfoocanvas.h ./libfoocanvas/libfoocanvas.h
---- ../foocanvas.latest/libfoocanvas/libfoocanvas.h	2008-03-11 09:54:13.000000000 +0000
-+++ ./libfoocanvas/libfoocanvas.h	2008-03-11 10:00:44.301226557 +0000
-@@ -1,3 +1,4 @@
-+/*  Last edited: Jan 24 09:17 2008 (rds) */
- /*
-  * Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation
-  * All rights reserved.
-@@ -35,6 +36,10 @@
- #include <libfoocanvas/foo-canvas-rect-ellipse.h>
- #include <libfoocanvas/foo-canvas-util.h>
- 
-+#include <libfoocanvas/foozmap-canvas-line-glyph.h>
-+#include <libfoocanvas/foozmap-canvas-text.h>
-+#include <libfoocanvas/foozmap-canvas-floating-group.h>
-+
- G_BEGIN_DECLS
- 
- GType foo_canvas_points_get_type (void);
-diff -u -r ../foocanvas.latest/libfoocanvas/Makefile.am ./libfoocanvas/Makefile.am
---- ../foocanvas.latest/libfoocanvas/Makefile.am	2008-03-11 09:54:13.000000000 +0000
-+++ ./libfoocanvas/Makefile.am	2008-03-11 10:00:26.684931225 +0000
-@@ -22,10 +22,13 @@
- 
- libfoocanvasinclude_HEADERS =			\
- 	foo-canvas-line.h			\
-+	foozmap-canvas-line-glyph.h		\
- 	foo-canvas-pixbuf.h			\
- 	foo-canvas-polygon.h			\
- 	foo-canvas-rect-ellipse.h		\
- 	foo-canvas-text.h			\
-+	foozmap-canvas-text.h			\
-+	foozmap-canvas-floating-group.h		\
- 	foo-canvas-util.h			\
- 	foo-canvas-widget.h			\
- 	foo-canvas.h				\
-@@ -36,10 +39,13 @@
- 	foo-canvas-marshal.list			\
- 	foo-canvas-i18n.h			\
- 	foo-canvas-line.c			\
-+	foozmap-canvas-line-glyph.c		\
- 	foo-canvas-pixbuf.c			\
- 	foo-canvas-polygon.c			\
- 	foo-canvas-rect-ellipse.c		\
- 	foo-canvas-text.c			\
-+	foozmap-canvas-text.c			\
-+	foozmap-canvas-floating-group.c		\
- 	foo-canvas-util.c			\
- 	foo-canvas-widget.c			\
- 	foo-canvas.c				\
diff --git a/foocanvas/support/libfoocanvas-20080311.tar.gz b/foocanvas/support/libfoocanvas-20080311.tar.gz
deleted file mode 100755
index 47fa6c586612847e1c4581aedeca2ba699a51181..0000000000000000000000000000000000000000
Binary files a/foocanvas/support/libfoocanvas-20080311.tar.gz and /dev/null differ
diff --git a/foocanvas/support/libfoocanvas-20080320.patch b/foocanvas/support/libfoocanvas-20080320.patch
deleted file mode 100755
index 108132777ad699ac0bf431642276e9a4ef3c8867..0000000000000000000000000000000000000000
--- a/foocanvas/support/libfoocanvas-20080320.patch
+++ /dev/null
@@ -1,1166 +0,0 @@
-diff -u -r ../foocanvas.latest/autogen.sh ./autogen.sh
---- ../foocanvas.latest/autogen.sh	2008-03-20 16:05:00.971628013 +0000
-+++ ./autogen.sh	2008-03-20 16:05:01.311575791 +0000
-@@ -41,5 +41,5 @@
-   exit 1
- fi
- 
--REQUIRED_AUTOMAKE_VERSION=1.5
-+REQUIRED_AUTOMAKE_VERSION=1.9
- GNOME_DATADIR="$gnome_datadir" USE_GNOME2_MACROS=1 . $gnome_autogen
-diff -u -r ../foocanvas.latest/configure.in ./configure.in
---- ../foocanvas.latest/configure.in	2008-03-20 16:05:00.969628320 +0000
-+++ ./configure.in	2008-03-20 16:05:01.311575791 +0000
-@@ -3,7 +3,8 @@
- AC_CONFIG_SRCDIR([libfoocanvas/foo-canvas.c])
- 
- AC_CONFIG_HEADERS([config.h])
--AM_INIT_AUTOMAKE([dist-bz2])
-+dnl [dist-bz2] removed from the AM_INIT_AUTOMAKE()
-+AM_INIT_AUTOMAKE([])
- 
- AM_MAINTAINER_MODE
- 
-@@ -53,7 +54,8 @@
-   AC_SUBST(HTML_DIR, $with_html_dir)
- fi
- 
--GTK_DOC_CHECK([1.0])
-+dnl MAC OS X doesn't like this... (requires gtk-doc, which requires a million other packages)
-+dnl GTK_DOC_CHECK([1.0])
- 
- AC_CONFIG_FILES([
- Makefile
-diff -u -r ../foocanvas.latest/libfoocanvas/foo-canvas.c ./libfoocanvas/foo-canvas.c
---- ../foocanvas.latest/libfoocanvas/foo-canvas.c	2008-03-20 16:05:00.932634003 +0000
-+++ ./libfoocanvas/foo-canvas.c	2008-03-20 16:05:01.313575484 +0000
-@@ -78,7 +78,7 @@
- 
- static void foo_canvas_request_update (FooCanvas      *canvas);
- static void group_add                   (FooCanvasGroup *group,
--					 FooCanvasItem  *item);
-+					 FooCanvasItem  *item, FooCanvasGroupPosition position);
- static void group_remove                (FooCanvasGroup *group,
- 					 FooCanvasItem  *item);
- static void redraw_and_repick_if_mapped (FooCanvasItem *item);
-@@ -190,17 +190,56 @@
- }
- 
- 
-+/**
-+ * foo_canvas_item_new:
-+ * @parent: The parent group for the new item.
-+ * @type: The object type of the item.
-+ * @position: puts new item at bottom (FOO_CANVAS_GROUP_BOTTOM) or top (FOO_CANVAS_GROUP_TOP)
-+ * of parents stack of child items.
-+ * @first_arg_name: A list of object argument name/value pairs, NULL-terminated,
-+ * used to configure the item.  For example, "fill_color", "black",
-+ * "width_units", 5.0, NULL.
-+ * @Varargs:
-+ *
-+ * Creates a new canvas item with @parent as its parent group.  The item is
-+ * created at the top of its parent's stack, and starts up as visible.  The item
-+ * is of the specified @type, for example, it can be
-+ * foo_canvas_rect_get_type().  The list of object arguments/value pairs is
-+ * used to configure the item.
-+ *
-+ * Return value: The newly-created item.
-+ **/
-+FooCanvasItem *
-+foo_canvas_item_new_position (FooCanvasGroup *parent, GType type, FooCanvasGroupPosition position,
-+			      const gchar *first_arg_name, ...)
-+{
-+	FooCanvasItem *item;
-+	va_list args;
-+
-+	g_return_val_if_fail (FOO_IS_CANVAS_GROUP (parent), NULL);
-+	g_return_val_if_fail (g_type_is_a (type, foo_canvas_item_get_type ()), NULL);
-+
-+	item = FOO_CANVAS_ITEM (g_object_new (type, NULL));
-+
-+	va_start (args, first_arg_name);
-+	foo_canvas_item_construct_position (item, parent, position, first_arg_name, args);
-+	va_end (args);
-+
-+	return item;
-+}
-+
-+
- /* Performs post-creation operations on a canvas item (adding it to its parent
-  * group, etc.)
-  */
- static void
--item_post_create_setup (FooCanvasItem *item)
-+item_post_create_setup (FooCanvasItem *item, FooCanvasGroupPosition position)
- {
- 	GtkObject *obj;
- 
- 	obj = GTK_OBJECT (item);
- 
--	group_add (FOO_CANVAS_GROUP (item->parent), item);
-+	group_add (FOO_CANVAS_GROUP (item->parent), item, position);
- 
- 	redraw_and_repick_if_mapped (item);
- }
-@@ -224,7 +263,7 @@
- 		} else if (g_value_get_object (value)) {
- 			item->parent = FOO_CANVAS_ITEM (g_value_get_object (value));
- 			item->canvas = item->parent->canvas;
--			item_post_create_setup (item);
-+			item_post_create_setup (item, FOO_CANVAS_GROUP_TOP);
- 		}
- 		break;
- 	case ITEM_PROP_VISIBLE:
-@@ -282,7 +321,34 @@
- 
- 	g_object_set_valist (G_OBJECT (item), first_arg_name, args);
- 
--	item_post_create_setup (item);
-+	item_post_create_setup (item, FOO_CANVAS_GROUP_TOP);
-+}
-+
-+
-+/**
-+ * foo_canvas_item_construct_position:
-+ * @item: An unconstructed canvas item.
-+ * @parent: The parent group for the item.
-+ * @position: puts new item at bottom (FOO_CANVAS_GROUP_BOTTOM) or top (FOO_CANVAS_GROUP_TOP)
-+ * of parents stack of child items.
-+ * @first_arg_name: The name of the first argument for configuring the item.
-+ * @args: The list of arguments used to configure the item.
-+ *
-+ * Constructs a canvas item; meant for use only by item implementations.
-+ **/
-+void
-+foo_canvas_item_construct_position (FooCanvasItem *item, FooCanvasGroup *parent, FooCanvasGroupPosition position,
-+				    const gchar *first_arg_name, va_list args)
-+{
-+	g_return_if_fail (FOO_IS_CANVAS_GROUP (parent));
-+	g_return_if_fail (FOO_IS_CANVAS_ITEM (item));
-+
-+	item->parent = FOO_CANVAS_ITEM (parent);
-+	item->canvas = item->parent->canvas;
-+
-+	g_object_set_valist (G_OBJECT (item), first_arg_name, args);
-+
-+	item_post_create_setup (item, position);
- }
- 
- 
-@@ -295,6 +361,7 @@
- 	}
- }
- 
-+
- /* Destroy handler for canvas items */
- static void
- foo_canvas_item_destroy (GtkObject *object)
-@@ -339,10 +406,8 @@
- 
- 		if (item->parent)
- 			group_remove (FOO_CANVAS_GROUP (item->parent), item);
--
- 		item->canvas = NULL;
- 	}
--
- 	GTK_OBJECT_CLASS (item_parent_class)->destroy (object);
- }
- 
-@@ -992,7 +1057,7 @@
- 	group_remove (FOO_CANVAS_GROUP (item->parent), item);
- 	item->parent = FOO_CANVAS_ITEM (new_group);
- 	/* item->canvas is unchanged.  */
--	group_add (new_group, item);
-+	group_add (new_group, item, FOO_CANVAS_GROUP_TOP);
- 
- 	/* Redraw and repick */
- 
-@@ -1376,6 +1441,7 @@
- 	bbox_x1 = 0;
- 	bbox_y1 = 0;
- 
-+       if(item->object.flags & FOO_CANVAS_ITEM_VISIBLE){ 
- 	for (list = group->item_list; list; list = list->next) {
- 		i = list->data;
- 
-@@ -1394,10 +1460,14 @@
- 			bbox_y1 = MAX (bbox_y1, i->y2);
- 		}
- 	}
-+
-+       }
- 	item->x1 = bbox_x0;
- 	item->y1 = bbox_y0;
- 	item->x2 = bbox_x1;
- 	item->y2 = bbox_y1;
-+
-+        return ;
- }
- 
- /* Unrealize handler for canvas groups */
-@@ -1540,10 +1610,10 @@
- 			has_point = TRUE;
- 		} else
- 			has_point = FALSE;
--
-+		/* guessing that the x factor is OK here. RNGC */
- 		if (has_point
- 		    && point_item
--		    && ((int) (dist * item->canvas->pixels_per_unit + 0.5)
-+		    && ((int) (dist * item->canvas->pixels_per_unit_x + 0.5)
- 			<= item->canvas->close_enough)) {
- 			best = dist;
- 			*actual_item = point_item;
-@@ -1553,7 +1623,7 @@
- 	return best;
- }
- 
--static void
-+void
- foo_canvas_group_translate (FooCanvasItem *item, double dx, double dy)
- {
-         FooCanvasGroup *group;
-@@ -1642,16 +1712,30 @@
- 
- /* Adds an item to a group */
- static void
--group_add (FooCanvasGroup *group, FooCanvasItem *item)
-+group_add (FooCanvasGroup *group, FooCanvasItem *item, FooCanvasGroupPosition position)
- {
- 	g_object_ref (GTK_OBJECT (item));
- 	gtk_object_sink (GTK_OBJECT (item));
- 
--	if (!group->item_list) {
--		group->item_list = g_list_append (group->item_list, item);
--		group->item_list_end = group->item_list;
--	} else
--		group->item_list_end = g_list_append (group->item_list_end, item)->next;
-+	if (position == FOO_CANVAS_GROUP_TOP)
-+	  {
-+	    if (!group->item_list) {
-+	      group->item_list = g_list_append (group->item_list, item);
-+	      group->item_list_end = group->item_list;
-+	    } else
-+	      group->item_list_end = g_list_append (group->item_list_end, item)->next;
-+	  }
-+	else
-+	  {
-+	    if (!group->item_list) {
-+	      group->item_list = g_list_prepend (group->item_list, item);
-+	      group->item_list_end = group->item_list;
-+	    } else
-+	      group->item_list = g_list_prepend (group->item_list, item);
-+	  }
-+
-+
-+
- 
- 	if (item->object.flags & FOO_CANVAS_ITEM_VISIBLE &&
- 	    group->item.object.flags & FOO_CANVAS_ITEM_MAPPED) {
-@@ -1703,6 +1787,9 @@
- 
- enum {
- 	DRAW_BACKGROUND,
-+	DRAWN_ITEMS,
-+	BEGIN_UPDATE,
-+	END_UPDATE,
- 	LAST_SIGNAL
- };
- 
-@@ -2053,6 +2140,35 @@
- 			      G_TYPE_NONE, 4, 
- 			      G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT);
- 
-+	canvas_signals[DRAWN_ITEMS] =
-+		g_signal_new ("drawn_items",
-+			      G_TYPE_FROM_CLASS (object_class),
-+			      G_SIGNAL_RUN_FIRST,
-+			      0,
-+			      NULL, NULL,
-+			      foo_canvas_marshal_VOID__INT_INT_INT_INT,
-+			      G_TYPE_NONE, 4, 
-+			      G_TYPE_INT, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT);
-+
-+	canvas_signals[BEGIN_UPDATE] =
-+		g_signal_new ("begin_update",
-+			      G_TYPE_FROM_CLASS (object_class),
-+			      G_SIGNAL_RUN_FIRST,
-+			      0,
-+			      NULL, NULL,
-+			      foo_canvas_marshal_VOID__VOID,
-+			      G_TYPE_NONE, 0); 
-+
-+	canvas_signals[END_UPDATE] =
-+		g_signal_new ("end_update",
-+			      G_TYPE_FROM_CLASS (object_class),
-+			      G_SIGNAL_RUN_FIRST,
-+			      0,
-+			      NULL, NULL,
-+			      foo_canvas_marshal_VOID__VOID,
-+			      G_TYPE_NONE, 0); 
-+
-+
- 	atk_registry_set_factory_type (atk_get_default_registry (),
- 				       FOO_TYPE_CANVAS,
- 				       foo_canvas_accessible_factory_get_type ());
-@@ -2080,7 +2196,8 @@
- 	canvas->scroll_x2 = canvas->layout.width;
- 	canvas->scroll_y2 = canvas->layout.height;
- 
--	canvas->pixels_per_unit = 1.0;
-+	canvas->pixels_per_unit_x = 1.0;
-+	canvas->pixels_per_unit_y = 1.0;
- 
- 	canvas->pick_event.type = GDK_LEAVE_NOTIFY;
- 	canvas->pick_event.crossing.x = 0;
-@@ -2298,12 +2415,12 @@
- 	int old_zoom_xofs, old_zoom_yofs;
- 	int changed_x = FALSE, changed_y = FALSE;
- 	int canvas_width, canvas_height;
--
-+	
- 	canvas_width = GTK_WIDGET (canvas)->allocation.width;
- 	canvas_height = GTK_WIDGET (canvas)->allocation.height;
- 
--	scroll_width = floor ((canvas->scroll_x2 - canvas->scroll_x1) * canvas->pixels_per_unit + 0.5);
--	scroll_height = floor ((canvas->scroll_y2 - canvas->scroll_y1) * canvas->pixels_per_unit + 0.5);
-+	scroll_width = floor ((canvas->scroll_x2 - canvas->scroll_x1) * canvas->pixels_per_unit_x + 0.5);
-+	scroll_height = floor ((canvas->scroll_y2 - canvas->scroll_y1) * canvas->pixels_per_unit_y + 0.5);
- 
- 	right_limit = scroll_width - canvas_width;
- 	bottom_limit = scroll_height - canvas_height;
-@@ -2867,10 +2984,14 @@
- 		g_source_remove (canvas->idle_id);
- 		canvas->idle_id = 0;
- 	}
-+
- 	if (canvas->need_update) {
- 		g_return_val_if_fail (!canvas->doing_update, FALSE);
- 
-+		g_signal_emit(G_OBJECT (canvas), canvas_signals[BEGIN_UPDATE], 0);
-+
- 		canvas->doing_update = TRUE;
-+
- 		foo_canvas_item_invoke_update (canvas->root, 0, 0, 0);
- 
- 		g_return_val_if_fail (canvas->doing_update, FALSE);
-@@ -2878,6 +2999,8 @@
- 		canvas->doing_update = FALSE;
- 
- 		canvas->need_update = FALSE;
-+
-+		g_signal_emit(G_OBJECT (canvas), canvas_signals[END_UPDATE], 0);
- 	}
- 
- 	/* Hmmm. Would like to queue antiexposes if the update marked
-@@ -2888,16 +3011,20 @@
- 		       event->area.x, event->area.y,
- 		       event->area.width, event->area.height);
- 	
--	if (canvas->root->object.flags & FOO_CANVAS_ITEM_MAPPED)
-+	if (canvas->root->object.flags & FOO_CANVAS_ITEM_MAPPED){
- 		(* FOO_CANVAS_ITEM_GET_CLASS (canvas->root)->draw) (canvas->root,
--								      canvas->layout.bin_window,
--								      event);
--
-+								    canvas->layout.bin_window,
-+								    event);
-+	}
- 
- 
- 	/* Chain up to get exposes on child widgets */
- 	GTK_WIDGET_CLASS (canvas_parent_class)->expose_event (widget, event);
- 
-+	g_signal_emit (G_OBJECT (canvas), canvas_signals[DRAWN_ITEMS], 0, 
-+		       event->area.x, event->area.y,
-+		       event->area.width, event->area.height);
-+
- 	return FALSE;
- }
- 
-@@ -2919,11 +3046,12 @@
- do_update (FooCanvas *canvas)
- {
- 	/* Cause the update if necessary */
--
- update_again:
- 	if (canvas->need_update) {
- 		g_return_if_fail (!canvas->doing_update);
- 
-+		g_signal_emit(G_OBJECT (canvas), canvas_signals[BEGIN_UPDATE], 0);
-+
- 		canvas->doing_update = TRUE;
- 		foo_canvas_item_invoke_update (canvas->root, 0, 0, 0);
- 
-@@ -2932,6 +3060,8 @@
- 		canvas->doing_update = FALSE;
- 
- 		canvas->need_update = FALSE;
-+
-+		g_signal_emit(G_OBJECT (canvas), canvas_signals[END_UPDATE], 0);
- 	}
- 
- 	/* Pick new current item */
-@@ -2949,6 +3079,8 @@
- 	if (canvas->need_update) {
- 		goto update_again;
- 	}
-+
-+	return ;
- }
- 
- /* Idle handler for the canvas.  It deals with pending updates and redraws. */
-@@ -3026,7 +3158,7 @@
- 	    (canvas->scroll_x2 == x2) && (canvas->scroll_y2 == y2)) {
- 		return;
- 	}
--	
-+
- 	/*
- 	 * Set the new scrolling region.  If possible, do not move the visible contents of the
- 	 * canvas.
-@@ -3101,15 +3233,35 @@
- 
- /**
-  * foo_canvas_set_pixels_per_unit:
-- * @canvas: A canvas.
-+ * @canvas: A canvas
-  * @n: The number of pixels that correspond to one canvas unit.
-  *
-  * Sets the zooming factor of a canvas by specifying the number of pixels that
-  * correspond to one canvas unit.
-+ * This is retained for backwards compatibility and just calls
-+ * foo_canvas_set_pixels_per_unit_xy, passing the number of pixels/unit twice.
-  **/
- void
- foo_canvas_set_pixels_per_unit (FooCanvas *canvas, double n)
- {
-+  foo_canvas_set_pixels_per_unit_xy(canvas, n, n);
-+  return;
-+}
-+
-+
-+/**
-+ * foo_canvas_set_pixels_per_unit_xy:
-+ * @canvas: A canvas.
-+ * @x: The number of pixels that correspond to one canvas unit on the x axis.
-+ * @y: The number of pixels that correspond to one canvas unit on the y axis.
-+ *
-+ * Sets the zooming factor of a canvas by specifying the number of pixels that
-+ * correspond to one canvas unit.
-+ * Having two zooming factors enables asymmetric zooming.
-+ **/
-+void
-+foo_canvas_set_pixels_per_unit_xy (FooCanvas *canvas, double x, double y)
-+{
- 	GtkWidget *widget;
- 	double cx, cy;
- 	int x1, y1;
-@@ -3119,7 +3271,8 @@
- 	gint attributes_mask;
- 
- 	g_return_if_fail (FOO_IS_CANVAS (canvas));
--	g_return_if_fail (n > FOO_CANVAS_EPSILON);
-+	/* guessing that the x factor is OK here.  RNCG */
-+	g_return_if_fail (x > FOO_CANVAS_EPSILON);
- 
- 	widget = GTK_WIDGET (canvas);
- 
-@@ -3127,14 +3280,15 @@
- 	center_y = widget->allocation.height / 2;
- 
- 	/* Find the coordinates of the screen center in units. */
--	cx = (canvas->layout.hadjustment->value + center_x) / canvas->pixels_per_unit + canvas->scroll_x1 + canvas->zoom_xofs;
--	cy = (canvas->layout.vadjustment->value + center_y) / canvas->pixels_per_unit + canvas->scroll_y1 + canvas->zoom_yofs;
-+	cx = (canvas->layout.hadjustment->value + center_x) / canvas->pixels_per_unit_x + canvas->scroll_x1 + canvas->zoom_xofs;
-+	cy = (canvas->layout.vadjustment->value + center_y) / canvas->pixels_per_unit_y + canvas->scroll_y1 + canvas->zoom_yofs;
- 
- 	/* Now calculate the new offset of the upper left corner. (round not truncate) */
--	x1 = ((cx - canvas->scroll_x1) * n) - center_x + .5;
--	y1 = ((cy - canvas->scroll_y1) * n) - center_y + .5;
-+	x1 = ((cx - canvas->scroll_x1) * x) - center_x + .5;
-+	y1 = ((cy - canvas->scroll_y1) * y) - center_y + .5;
- 
--	canvas->pixels_per_unit = n;
-+	canvas->pixels_per_unit_x = x;
-+	canvas->pixels_per_unit_y = y;
- 
- 	if (!(canvas->root->object.flags & FOO_CANVAS_ITEM_NEED_DEEP_UPDATE)) {
- 		canvas->root->object.flags |= FOO_CANVAS_ITEM_NEED_DEEP_UPDATE;
-@@ -3268,7 +3422,8 @@
- 	foo_canvas_w2c (canvas, x, y, &cx, &cy);
- 
- 	dist = foo_canvas_item_invoke_point (canvas->root, x, y, cx, cy, &item);
--	if ((int) (dist * canvas->pixels_per_unit + 0.5) <= canvas->close_enough)
-+	/* guessing the x factor is OK here.  RNGC */
-+	if ((int) (dist * canvas->pixels_per_unit_x + 0.5) <= canvas->close_enough)
- 		return item;
- 	else
- 		return NULL;
-@@ -3331,16 +3486,17 @@
- void
- foo_canvas_w2c (FooCanvas *canvas, double wx, double wy, int *cx, int *cy)
- {
--	double zoom;
-+	double zoom_x, zoom_y;
- 
- 	g_return_if_fail (FOO_IS_CANVAS (canvas));
- 	
--	zoom = canvas->pixels_per_unit;
-+	zoom_x = canvas->pixels_per_unit_x;
-+	zoom_y = canvas->pixels_per_unit_y;
- 	
- 	if (cx)
--		*cx = floor ((wx - canvas->scroll_x1)*zoom + canvas->zoom_xofs + 0.5);
-+		*cx = floor ((wx - canvas->scroll_x1)*zoom_x + canvas->zoom_xofs + 0.5);
- 	if (cy)
--		*cy = floor ((wy - canvas->scroll_y1)*zoom + canvas->zoom_yofs + 0.5);
-+		*cy = floor ((wy - canvas->scroll_y1)*zoom_y + canvas->zoom_yofs + 0.5);
- }
- 
- /**
-@@ -3380,16 +3536,17 @@
- void
- foo_canvas_w2c_d (FooCanvas *canvas, double wx, double wy, double *cx, double *cy)
- {
--	double zoom;
-+	double zoom_x, zoom_y;
- 
- 	g_return_if_fail (FOO_IS_CANVAS (canvas));
- 
--	zoom = canvas->pixels_per_unit;
-+	zoom_x = canvas->pixels_per_unit_x;
-+	zoom_y = canvas->pixels_per_unit_y;
- 	
- 	if (cx)
--		*cx = (wx - canvas->scroll_x1)*zoom + canvas->zoom_xofs;
-+		*cx = (wx - canvas->scroll_x1)*zoom_x + canvas->zoom_xofs;
- 	if (cy)
--		*cy = (wy - canvas->scroll_y1)*zoom + canvas->zoom_yofs;
-+		*cy = (wy - canvas->scroll_y1)*zoom_y + canvas->zoom_yofs;
- }
- 
- 
-@@ -3406,16 +3563,17 @@
- void
- foo_canvas_c2w (FooCanvas *canvas, int cx, int cy, double *wx, double *wy)
- {
--	double zoom;
-+	double zoom_x, zoom_y;
- 
- 	g_return_if_fail (FOO_IS_CANVAS (canvas));
- 
--	zoom = canvas->pixels_per_unit;
-+	zoom_x = canvas->pixels_per_unit_x;
-+	zoom_y = canvas->pixels_per_unit_y;
- 	
- 	if (wx)
--		*wx = (cx - canvas->zoom_xofs)/zoom + canvas->scroll_x1;
-+		*wx = (cx - canvas->zoom_xofs)/zoom_x + canvas->scroll_x1;
- 	if (wy)
--		*wy = (cy - canvas->zoom_yofs)/zoom + canvas->scroll_y1;
-+		*wy = (cy - canvas->zoom_yofs)/zoom_y + canvas->scroll_y1;
- }
- 
- 
-@@ -3441,11 +3599,11 @@
- 
- 	if (worldx)
- 		*worldx = canvas->scroll_x1 + ((winx - canvas->zoom_xofs)
--					       / canvas->pixels_per_unit);
-+					       / canvas->pixels_per_unit_x);
- 
- 	if (worldy)
- 		*worldy = canvas->scroll_y1 + ((winy - canvas->zoom_yofs)
--					       / canvas->pixels_per_unit);
-+					       / canvas->pixels_per_unit_y);
- }
- 
- 
-@@ -3468,10 +3626,10 @@
- 	g_return_if_fail (FOO_IS_CANVAS (canvas));
- 
- 	if (winx)
--		*winx = (canvas->pixels_per_unit)*(worldx - canvas->scroll_x1) + canvas->zoom_xofs;
-+		*winx = (canvas->pixels_per_unit_x)*(worldx - canvas->scroll_x1) + canvas->zoom_xofs;
- 
- 	if (winy)
--		*winy = (canvas->pixels_per_unit)*(worldy - canvas->scroll_y1) + canvas->zoom_yofs;
-+		*winy = (canvas->pixels_per_unit_y)*(worldy - canvas->scroll_y1) + canvas->zoom_yofs;
- }
- 
- 
-@@ -3999,3 +4157,11 @@
-                                        FOO_TYPE_CANVAS_ITEM,
-                                        foo_canvas_item_accessible_factory_get_type ());
- }
-+
-+void 
-+foo_canvas_zmap(void)
-+{
-+  /* do nothing */
-+}
-+
-+/*  Last edited: Nov  9 12:11 2007 (rds) */
-diff -u -r ../foocanvas.latest/libfoocanvas/foo-canvas.h ./libfoocanvas/foo-canvas.h
---- ../foocanvas.latest/libfoocanvas/foo-canvas.h	2008-03-20 16:05:00.912637075 +0000
-+++ ./libfoocanvas/foo-canvas.h	2008-03-20 16:05:01.314575330 +0000
-@@ -1,3 +1,4 @@
-+/*  Last edited: Nov  9 10:56 2007 (rds) */
- /* -*- Mode: C; tab-width: 8; indent-tabs-mode: 8; c-basic-offset: 8 -*- */
- /*
-  * Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation
-@@ -101,6 +102,11 @@
- 	FOO_CANVAS_UPDATE_DEEP       = 1 << 1
- };
- 
-+
-+/* Special positions for putting new items at top or bottom of group. */
-+typedef enum {FOO_CANVAS_GROUP_BOTTOM = -1, FOO_CANVAS_GROUP_TOP  = -2} FooCanvasGroupPosition ;
-+
-+
- #define FOO_TYPE_CANVAS_ITEM            (foo_canvas_item_get_type ())
- #define FOO_CANVAS_ITEM(obj)            (GTK_CHECK_CAST ((obj), FOO_TYPE_CANVAS_ITEM, FooCanvasItem))
- #define FOO_CANVAS_ITEM_CLASS(klass)    (GTK_CHECK_CLASS_CAST ((klass), FOO_TYPE_CANVAS_ITEM, FooCanvasItemClass))
-@@ -186,10 +192,16 @@
- FooCanvasItem *foo_canvas_item_new (FooCanvasGroup *parent, GType type,
- 				    const gchar *first_arg_name, ...);
- 
-+FooCanvasItem *foo_canvas_item_new_position (FooCanvasGroup *parent, GType type, FooCanvasGroupPosition position,
-+					     const gchar *first_arg_name, ...);
-+
- /* Constructors for use in derived classes and language wrappers */
- void foo_canvas_item_construct (FooCanvasItem *item, FooCanvasGroup *parent,
- 				const gchar *first_arg_name, va_list args);
- 
-+void foo_canvas_item_construct_position (FooCanvasItem *item, FooCanvasGroup *parent, FooCanvasGroupPosition position,
-+					 const gchar *first_arg_name, va_list args);
-+
- /* Configure an item using the standard Gtk argument mechanism.  The last
-  * argument must be a NULL pointer.
-  */
-@@ -341,6 +353,7 @@
- #define FOO_IS_CANVAS_CLASS(klass) (GTK_CHECK_CLASS_TYPE ((klass), FOO_TYPE_CANVAS))
- #define FOO_CANVAS_GET_CLASS(obj)  (GTK_CHECK_GET_CLASS ((obj), FOO_TYPE_CANVAS, FooCanvasClass))
- 
-+typedef void (*FooCanvasUpdateSignal)(FooCanvas *canvas, gpointer user_data);
- 
- struct _FooCanvas {
- 	GtkLayout layout;
-@@ -371,7 +384,8 @@
- 	double scroll_x2, scroll_y2;
- 
- 	/* Scaling factor to be used for display */
--	double pixels_per_unit;
-+	double pixels_per_unit_x;
-+	double pixels_per_unit_y;
- 
- 	/* Idle handler ID */
- 	guint idle_id;
-@@ -456,6 +470,10 @@
- /* Sets the number of pixels that correspond to one unit in world coordinates */
- void foo_canvas_set_pixels_per_unit (FooCanvas *canvas, double n);
- 
-+/* Sets the number of  pixels corresponding to one unit in world coordinates
-+ * separately on x and y axes, allowing asymmetric zooming. */
-+void foo_canvas_set_pixels_per_unit_xy (FooCanvas *canvas, double x, double y);
-+
- /* Wether the canvas centers the scroll region if it is smaller than the window  */
- void foo_canvas_set_center_scroll_region (FooCanvas *canvas, gboolean center_scroll_region);
- 
-@@ -525,6 +543,10 @@
-  */
- void foo_canvas_set_stipple_origin (FooCanvas *canvas, GdkGC *gc);
- 
-+void foo_canvas_zmap(void);
-+
- G_END_DECLS
- 
-+
- #endif
-+
-diff -u -r ../foocanvas.latest/libfoocanvas/foo-canvas-line.c ./libfoocanvas/foo-canvas-line.c
---- ../foocanvas.latest/libfoocanvas/foo-canvas-line.c	2008-03-20 16:05:00.921635692 +0000
-+++ ./libfoocanvas/foo-canvas-line.c	2008-03-20 16:05:01.315575177 +0000
-@@ -1,3 +1,4 @@
-+/*  Last edited: Oct 18 18:34 2006 (rds) */
- /*
-  * Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation
-  * All rights reserved.
-@@ -338,7 +339,7 @@
- 	/* Add possible over-estimate for wide lines */
- 
- 	if (line->width_pixels)
--		width = line->width / line->item.canvas->pixels_per_unit;
-+		width = line->width / line->item.canvas->pixels_per_unit_x;
- 	else
- 		width = line->width;
- 
-@@ -466,7 +467,7 @@
- 		return;
- 
- 	if (line->width_pixels)
--		width = line->width / line->item.canvas->pixels_per_unit;
-+		width = line->width / line->item.canvas->pixels_per_unit_x;
- 	else
- 		width = line->width;
- 
-@@ -477,9 +478,9 @@
- 	shape_c = line->shape_c + width / 2.0;
- 
- 	if (line->width_pixels) {
--		shape_a /= line->item.canvas->pixels_per_unit;
--		shape_b /= line->item.canvas->pixels_per_unit;
--		shape_c /= line->item.canvas->pixels_per_unit;
-+		shape_a /= line->item.canvas->pixels_per_unit_x;
-+		shape_b /= line->item.canvas->pixels_per_unit_x;
-+		shape_c /= line->item.canvas->pixels_per_unit_x;
- 	}
- 
- 	shape_a += 0.001;
-@@ -600,7 +601,7 @@
- 	if (line->width_pixels)
- 		width = (int) line->width;
- 	else
--		width = (int) (line->width * line->item.canvas->pixels_per_unit + 0.5);
-+		width = (int) (line->width * line->item.canvas->pixels_per_unit_x + 0.5);
- 
- 	gdk_gc_set_line_attributes (line->gc,
- 				    width,
-@@ -1126,12 +1127,12 @@
- 	 */
- 
- 	if (line->width_pixels)
--		width = line->width / item->canvas->pixels_per_unit;
-+		width = line->width / item->canvas->pixels_per_unit_x;
- 	else
- 		width = line->width;
- 
--	if (width < (1.0 / item->canvas->pixels_per_unit))
--		width = 1.0 / item->canvas->pixels_per_unit;
-+	if (width < (1.0 / item->canvas->pixels_per_unit_x))
-+		width = 1.0 / item->canvas->pixels_per_unit_x;
- 
- 	changed_miter_to_bevel = 0;
- 
-diff -u -r ../foocanvas.latest/libfoocanvas/foo-canvas-marshal.list ./libfoocanvas/foo-canvas-marshal.list
---- ../foocanvas.latest/libfoocanvas/foo-canvas-marshal.list	2008-03-20 16:05:00.914636767 +0000
-+++ ./libfoocanvas/foo-canvas-marshal.list	2008-03-20 16:05:01.315575177 +0000
-@@ -1,2 +1,3 @@
- VOID:INT,INT,INT,INT
- BOOLEAN:BOXED
-+VOID:VOID
-diff -u -r ../foocanvas.latest/libfoocanvas/foo-canvas-pixbuf.c ./libfoocanvas/foo-canvas-pixbuf.c
---- ../foocanvas.latest/libfoocanvas/foo-canvas-pixbuf.c	2008-03-20 16:05:00.927634771 +0000
-+++ ./libfoocanvas/foo-canvas-pixbuf.c	2008-03-20 16:05:01.315575177 +0000
-@@ -1,3 +1,4 @@
-+/*  Last edited: May 11 11:33 2004 (rnc) */
- /* GNOME libraries - GdkPixbuf item for the GNOME canvas
-  *
-  * Copyright (C) 1999 The Free Software Foundation
-@@ -564,13 +565,13 @@
- 	}
- 
- 	if (priv->x_in_pixels) {
--		x = i2w_dx + priv->x / item->canvas->pixels_per_unit;
-+		x = i2w_dx + priv->x / item->canvas->pixels_per_unit_x;
- 	} else {
- 		x = i2w_dx + priv->x;
- 	}
- 
- 	if (priv->y_in_pixels) {
--		y = i2w_dy + priv->y / item->canvas->pixels_per_unit;
-+		y = i2w_dy + priv->y / item->canvas->pixels_per_unit_y;
- 	} else {
- 		y = i2w_dy + priv->y;
- 	}
-@@ -582,7 +583,7 @@
- 	}
- 
- 	if (priv->width_in_pixels)
--		width /= item->canvas->pixels_per_unit;
-+		width /= item->canvas->pixels_per_unit_x;
- 
- 	if (priv->height_set) {
- 		height = priv->height;
-@@ -591,7 +592,7 @@
- 	}
- 
- 	if (priv->height_in_pixels)
--		height /= item->canvas->pixels_per_unit;
-+		height /= item->canvas->pixels_per_unit_y;
- 
- 
- 	switch (priv->anchor) {
-@@ -781,8 +782,8 @@
- 	pixbuf = priv->pixbuf;
- 
- 	*actual_item = item;
--
--	no_hit = item->canvas->pixels_per_unit * 2 + 10;
-+	/* guessing that the x factor is OK here. RNGC */
-+	no_hit = item->canvas->pixels_per_unit_x * 2 + 10;
- 
- 	if (!priv->pixbuf)
- 		return no_hit;
-@@ -823,13 +824,13 @@
- 	priv = gcp->priv;
- 
- 	if (priv->x_in_pixels) {
--		priv->x += dx * item->canvas->pixels_per_unit;
-+		priv->x += dx * item->canvas->pixels_per_unit_x;
- 	} else {
- 		priv->x += dx;
- 	}
- 
- 	if (priv->y_in_pixels) {
--		priv->y += dy * item->canvas->pixels_per_unit;
-+		priv->y += dy * item->canvas->pixels_per_unit_y;
- 	} else {
- 		priv->y += dy;
- 	}
-diff -u -r ../foocanvas.latest/libfoocanvas/foo-canvas-polygon.c ./libfoocanvas/foo-canvas-polygon.c
---- ../foocanvas.latest/libfoocanvas/foo-canvas-polygon.c	2008-03-20 16:05:00.919635999 +0000
-+++ ./libfoocanvas/foo-canvas-polygon.c	2008-03-20 16:05:01.316575023 +0000
-@@ -1,3 +1,4 @@
-+/*  Last edited: Oct 19 09:39 2006 (rds) */
- /*
-  * Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation
-  * All rights reserved.
-@@ -276,7 +277,7 @@
- 	/* Add outline width */
- 
- 	if (poly->width_pixels)
--		width = poly->width / poly->item.canvas->pixels_per_unit;
-+		width = poly->width / poly->item.canvas->pixels_per_unit_x;
- 	else
- 		width = poly->width;
- 
-@@ -400,7 +401,7 @@
- 	if (poly->width_pixels)
- 		width = (int) poly->width;
- 	else
--		width = (int) (poly->width * poly->item.canvas->pixels_per_unit + 0.5);
-+		width = (int) (poly->width * poly->item.canvas->pixels_per_unit_x + 0.5);
- 
- 	gdk_gc_set_line_attributes (poly->outline_gc, width,
- 				    GDK_LINE_SOLID, GDK_CAP_ROUND, GDK_JOIN_ROUND);
-@@ -595,15 +596,16 @@
- static void
- get_color_value (FooCanvasPolygon *poly, gulong pixel, GValue *value)
- {
--	GdkColor *color;
-+	GdkColor color;
- 	GdkColormap *colormap;
- 
--	color = g_new (GdkColor, 1);
--	color->pixel = pixel;
-+	//color = g_new (GdkColor, 1);
-+	//color->pixel = pixel;
- 
--	colormap = gtk_widget_get_colormap (GTK_WIDGET (poly));
--	gdk_rgb_find_color (colormap, color);
--	g_value_set_boxed (value, color);
-+	colormap = gtk_widget_get_colormap (GTK_WIDGET (FOO_CANVAS_ITEM(poly)->canvas));
-+	gdk_colormap_query_color(colormap, pixel, &color);
-+	//gdk_rgb_find_color (colormap, color);
-+	g_value_set_boxed (value, &color);
- }
- 
- static void
-@@ -801,7 +803,7 @@
- 
- 	if (poly->outline_set) {
- 		if (poly->width_pixels)
--			width = poly->width / item->canvas->pixels_per_unit;
-+			width = poly->width / item->canvas->pixels_per_unit_x;
- 		else
- 			width = poly->width;
- 
-diff -u -r ../foocanvas.latest/libfoocanvas/foo-canvas-rect-ellipse.c ./libfoocanvas/foo-canvas-rect-ellipse.c
---- ../foocanvas.latest/libfoocanvas/foo-canvas-rect-ellipse.c	2008-03-20 16:05:00.922635539 +0000
-+++ ./libfoocanvas/foo-canvas-rect-ellipse.c	2008-03-20 16:05:01.316575023 +0000
-@@ -1,3 +1,4 @@
-+/*  Last edited: Feb 25 11:09 2005 (rds) */
- /*
-  * Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation
-  * All rights reserved.
-@@ -281,7 +282,7 @@
- 	item = FOO_CANVAS_ITEM (re);
- 
- 	if (re->width_pixels)
--		hwidth = (re->width / item->canvas->pixels_per_unit) / 2.0;
-+		hwidth = (re->width / item->canvas->pixels_per_unit_x) / 2.0;
- 	else
- 		hwidth = re->width / 2.0;
- 
-@@ -352,7 +353,7 @@
- 	if (re->width_pixels)
- 		width = (int) re->width;
- 	else
--		width = (int) (re->width * re->item.canvas->pixels_per_unit + 0.5);
-+		width = (int) (re->width * re->item.canvas->pixels_per_unit_x + 0.5);
- 
- 	gdk_gc_set_line_attributes (re->outline_gc, width,
- 				    GDK_LINE_SOLID, GDK_CAP_PROJECTING, GDK_JOIN_MITER);
-@@ -734,7 +735,7 @@
- 	re = FOO_CANVAS_RE (item);
- 
- 	if (re->width_pixels)
--		hwidth = (re->width / item->canvas->pixels_per_unit) / 2.0;
-+		hwidth = (re->width / item->canvas->pixels_per_unit_x) / 2.0;
- 	else
- 		hwidth = re->width / 2.0;
- 
-@@ -1065,7 +1066,7 @@
- 
- 	if (re->outline_set) {
- 		if (re->width_pixels)
--			hwidth = (re->width / item->canvas->pixels_per_unit) / 2.0;
-+			hwidth = (re->width / item->canvas->pixels_per_unit_x) / 2.0;
- 		else
- 			hwidth = re->width / 2.0;
- 
-@@ -1191,7 +1192,7 @@
- 		if (re->width_pixels)
- 			width_pixels = (int) re->width;
- 		else
--			width_pixels = (int) floor (re->width * re->item.canvas->pixels_per_unit + 0.5);
-+			width_pixels = (int) floor (re->width * re->item.canvas->pixels_per_unit_x + 0.5);
- 
- 		width_lt = width_pixels / 2;
- 		width_rb = (width_pixels + 1) / 2;
-@@ -1344,7 +1345,7 @@
- 
- 	if (re->outline_set) {
- 		if (re->width_pixels)
--			width = re->width / item->canvas->pixels_per_unit;
-+			width = re->width / item->canvas->pixels_per_unit_x;
- 		else
- 			width = re->width;
- 	} else
-diff -u -r ../foocanvas.latest/libfoocanvas/foo-canvas-text.c ./libfoocanvas/foo-canvas-text.c
---- ../foocanvas.latest/libfoocanvas/foo-canvas-text.c	2008-03-20 16:05:00.918636153 +0000
-+++ ./libfoocanvas/foo-canvas-text.c	2008-03-20 16:05:01.317574870 +0000
-@@ -1,3 +1,4 @@
-+/*  Last edited: Feb  1 14:44 2008 (rds) */
- /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
- /*
-  * $Id: foo-canvas-text.c 52 2005-04-04 15:13:29Z mortenw $
-@@ -615,8 +616,8 @@
- 	/* Get canvas pixel coordinates for clip rectangle position */
- 
- 	foo_canvas_w2c (item->canvas, wx, wy, &text->clip_cx, &text->clip_cy);
--	text->clip_cwidth = text->clip_width * item->canvas->pixels_per_unit;
--	text->clip_cheight = text->clip_height * item->canvas->pixels_per_unit;
-+	text->clip_cwidth = text->clip_width * item->canvas->pixels_per_unit_x;
-+	text->clip_cheight = text->clip_height * item->canvas->pixels_per_unit_y;
- 
- 	/* Anchor text */
- 
-@@ -976,7 +977,7 @@
- 	case PROP_WRAP_WIDTH: {
- 		double w = fabs (g_value_get_double (value));
- 		pango_layout_set_width (text->layout,
--			w * text->item.canvas->pixels_per_unit * PANGO_SCALE);
-+			w * text->item.canvas->pixels_per_unit_x * PANGO_SCALE);
- 
- 		break;
- 	}
-@@ -1252,11 +1253,11 @@
- 		break;
- 
- 	case PROP_TEXT_WIDTH:
--		g_value_set_double (value, text->max_width / text->item.canvas->pixels_per_unit);
-+		g_value_set_double (value, text->max_width / text->item.canvas->pixels_per_unit_x);
- 		break;
- 
- 	case PROP_TEXT_HEIGHT:
--		g_value_set_double (value, text->height / text->item.canvas->pixels_per_unit);
-+		g_value_set_double (value, text->height / text->item.canvas->pixels_per_unit_y);
- 		break;
- 
- 	default:
-@@ -1309,7 +1310,8 @@
- 	if (text->rise_set)
- 		add_attr (attr_list, pango_attr_rise_new (text->rise));
- 
--	zoom = text->item.canvas->pixels_per_unit;
-+	/* guessing that the x factor is OK here. RNGC */
-+	zoom = text->item.canvas->pixels_per_unit_x;
- 	if (fabs (zoom - 1.) > 1e-4) {
- 		PangoAttribute *attr = pango_attr_scale_new (zoom);
- 		attr->start_index = 0;
-@@ -1460,12 +1462,20 @@
- 	PangoLayoutIter *iter;
- 	int x1, y1, x2, y2;
- 	int dx, dy;
--	double dist, best;
-+	int icx, icy;
-+	double dist, best, wx, wy;
- 
- 	text = FOO_CANVAS_TEXT (item);
- 
- 	*actual_item = item;
- 
-+	wx = text->x;
-+	wy = text->y;
-+
-+	foo_canvas_item_i2w(item, &wx, &wy);
-+
-+	foo_canvas_w2c(item->canvas, wx, wy, &icx, &icy);
-+
- 	/* The idea is to build bounding rectangles for each of the lines of
- 	 * text (clipped by the clipping rectangle, if it is activated) and see
- 	 * whether the point is inside any of these.  If it is, we are done.
-@@ -1480,13 +1490,12 @@
- 
- 		pango_layout_iter_get_line_extents (iter, NULL, &log_rect);
- 
--		if (text->clip) {
-+                if(text->clip) {
- 			x1 = PANGO_PIXELS (log_rect.x);
- 			y1 = PANGO_PIXELS (log_rect.y);
- 			x2 = PANGO_PIXELS (log_rect.x+log_rect.width);
- 			y2 = PANGO_PIXELS (log_rect.y+log_rect.height);
- 
--
- 			if (x1 < text->clip_cx)
- 				x1 = text->clip_cx;
- 
-@@ -1502,10 +1511,10 @@
- 			if ((x1 >= x2) || (y1 >= y2))
- 				continue;
- 		} else {
--			x1 = text->x;
--			y1 = text->y;
--			x2 = log_rect.width;
--			y2 = log_rect.height;
-+		  x1 = icx + PANGO_PIXELS(log_rect.x);
-+		  y1 = icy + PANGO_PIXELS(log_rect.y);
-+		  x2 = x1 +  PANGO_PIXELS(log_rect.width);
-+		  y2 = y1 +  PANGO_PIXELS(log_rect.height);
- 		}
- 
- 		/* Calculate distance from point to rectangle */
-@@ -1529,15 +1538,21 @@
- 			return 0.0;
- 		}
- 
-+		/* convert to difference in world coords as that's
-+		 * what $best is measured in. */
-+		dx /= item->canvas->pixels_per_unit_x;
-+		dy /= item->canvas->pixels_per_unit_y;
-+
- 		dist = sqrt (dx * dx + dy * dy);
-+
- 		if (dist < best)
--			best = dist;
-+		  best = dist;
- 
- 	} while (pango_layout_iter_next_line(iter));
- 
- 	pango_layout_iter_free(iter);
- 
--	return best / item->canvas->pixels_per_unit;
-+	return best;
- }
- 
- static void
-@@ -1567,8 +1582,8 @@
- 		width = text->clip_width;
- 		height = text->clip_height;
- 	} else {
--		width = text->max_width / item->canvas->pixels_per_unit;
--		height = text->height / item->canvas->pixels_per_unit;
-+		width = text->max_width / item->canvas->pixels_per_unit_x;
-+		height = text->height / item->canvas->pixels_per_unit_y;
- 	}
- 
- 	switch (text->anchor) {
-diff -u -r ../foocanvas.latest/libfoocanvas/foo-canvas-widget.c ./libfoocanvas/foo-canvas-widget.c
---- ../foocanvas.latest/libfoocanvas/foo-canvas-widget.c	2008-03-20 16:05:00.916636460 +0000
-+++ ./libfoocanvas/foo-canvas-widget.c	2008-03-20 16:05:01.318574716 +0000
-@@ -1,3 +1,4 @@
-+/*  Last edited: May 11 11:42 2004 (rnc) */
- /*
-  * Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation
-  * All rights reserved.
-@@ -456,8 +457,8 @@
- 			witem->cwidth = (int) (witem->width + 0.5);
- 			witem->cheight = (int) (witem->height + 0.5);
- 		} else {
--			witem->cwidth = (int) (witem->width * item->canvas->pixels_per_unit + 0.5);
--			witem->cheight = (int) (witem->height * item->canvas->pixels_per_unit + 0.5);
-+			witem->cwidth = (int) (witem->width * item->canvas->pixels_per_unit_x + 0.5);
-+			witem->cheight = (int) (witem->height * item->canvas->pixels_per_unit_y + 0.5);
- 		}
- 
- 		gtk_widget_set_usize (witem->widget, witem->cwidth, witem->cheight);
-@@ -516,8 +517,8 @@
- 
- 	foo_canvas_c2w (item->canvas, witem->cx, witem->cy, &x1, &y1);
- 
--	x2 = x1 + (witem->cwidth - 1) / item->canvas->pixels_per_unit;
--	y2 = y1 + (witem->cheight - 1) / item->canvas->pixels_per_unit;
-+	x2 = x1 + (witem->cwidth - 1) / item->canvas->pixels_per_unit_x;
-+	y2 = y1 + (witem->cheight - 1) / item->canvas->pixels_per_unit_y;
- 
- 	/* Is point inside widget bounds? */
- 
-Only in ./libfoocanvas: foozmap-canvas-floating-group.c
-Only in ./libfoocanvas: foozmap-canvas-floating-group.h
-Only in ./libfoocanvas: foozmap-canvas-line-glyph.c
-Only in ./libfoocanvas: foozmap-canvas-line-glyph.h
-Only in ./libfoocanvas: foozmap-canvas-text.c
-Only in ./libfoocanvas: foozmap-canvas-text.h
-diff -u -r ../foocanvas.latest/libfoocanvas/libfoocanvas.h ./libfoocanvas/libfoocanvas.h
---- ../foocanvas.latest/libfoocanvas/libfoocanvas.h	2008-03-20 16:05:00.915636614 +0000
-+++ ./libfoocanvas/libfoocanvas.h	2008-03-20 16:05:01.318574716 +0000
-@@ -1,3 +1,4 @@
-+/*  Last edited: Jan 24 09:17 2008 (rds) */
- /*
-  * Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation
-  * All rights reserved.
-@@ -35,6 +36,10 @@
- #include <libfoocanvas/foo-canvas-rect-ellipse.h>
- #include <libfoocanvas/foo-canvas-util.h>
- 
-+#include <libfoocanvas/foozmap-canvas-line-glyph.h>
-+#include <libfoocanvas/foozmap-canvas-text.h>
-+#include <libfoocanvas/foozmap-canvas-floating-group.h>
-+
- G_BEGIN_DECLS
- 
- GType foo_canvas_points_get_type (void);
-diff -u -r ../foocanvas.latest/libfoocanvas/Makefile.am ./libfoocanvas/Makefile.am
---- ../foocanvas.latest/libfoocanvas/Makefile.am	2008-03-20 16:05:00.927634771 +0000
-+++ ./libfoocanvas/Makefile.am	2008-03-20 16:05:01.318574716 +0000
-@@ -22,10 +22,13 @@
- 
- libfoocanvasinclude_HEADERS =			\
- 	foo-canvas-line.h			\
-+	foozmap-canvas-line-glyph.h		\
- 	foo-canvas-pixbuf.h			\
- 	foo-canvas-polygon.h			\
- 	foo-canvas-rect-ellipse.h		\
- 	foo-canvas-text.h			\
-+	foozmap-canvas-text.h			\
-+	foozmap-canvas-floating-group.h		\
- 	foo-canvas-util.h			\
- 	foo-canvas-widget.h			\
- 	foo-canvas.h				\
-@@ -36,10 +39,13 @@
- 	foo-canvas-marshal.list			\
- 	foo-canvas-i18n.h			\
- 	foo-canvas-line.c			\
-+	foozmap-canvas-line-glyph.c		\
- 	foo-canvas-pixbuf.c			\
- 	foo-canvas-polygon.c			\
- 	foo-canvas-rect-ellipse.c		\
- 	foo-canvas-text.c			\
-+	foozmap-canvas-text.c			\
-+	foozmap-canvas-floating-group.c		\
- 	foo-canvas-util.c			\
- 	foo-canvas-widget.c			\
- 	foo-canvas.c				\
diff --git a/foocanvas/support/libfoocanvas-20080320.tar.gz b/foocanvas/support/libfoocanvas-20080320.tar.gz
deleted file mode 100755
index 5b13b0d8034387741d18b39acf0a6239f94d8fb2..0000000000000000000000000000000000000000
Binary files a/foocanvas/support/libfoocanvas-20080320.tar.gz and /dev/null differ
diff --git a/foocanvas/support/untar_patch.sh b/foocanvas/support/untar_patch.sh
deleted file mode 100755
index 7779621ccb48f9b39eeff067ad80ef0a83d70351..0000000000000000000000000000000000000000
--- a/foocanvas/support/untar_patch.sh
+++ /dev/null
@@ -1,34 +0,0 @@
-#!/bin/sh
-############################################################
-# 
-# script to untar and patch libfoocanvas for us.
-#  Set the following:
-
-FOOCANVAS_VERSION=20070831
-
-#
-#
-############################################################
-
-PACKAGE=libfoocanvas-${FOOCANVAS_VERSION}
-
-THISSCRIPT=`basename $0`
-SUPPORTDIR=`dirname $0` # directory we can cd to
- CALLEDDIR=`pwd`
-
-cd $SUPPORTDIR
-SUPPORTDIR=`pwd`        # and find the actual path
-
-if [ ! -z $WORKSPACE ]; then
-    CALLEDDIR=$WORKSPACE
-fi
-
-cd $CALLEDDIR
-
-tar -zxf $SUPPORTDIR/${PACKAGE}.tar.gz
-
-cd ${PACKAGE}/libfoocanvas
-
-patch -p0 -u < $SUPPORTDIR/${PACKAGE}.patch
-
-echo "run ./configure, make, make install in '$CALLEDDIR/$PACKAGE'"