[cairo-commit] goocanvas/src goocanvasellipse.c, 1.9,
1.10 goocanvasgroup.c, 1.18, 1.19 goocanvasimage.c, 1.12,
1.13 goocanvasitem.c, 1.19, 1.20 goocanvasitemmodel.c, 1.8,
1.9 goocanvasitemsimple.c, 1.20, 1.21 goocanvasitemsimple.h,
1.17, 1.18 goocanvaspath.c, 1.10, 1.11 goocanvaspolyline.c,
1.11, 1.12 goocanvasrect.c, 1.9, 1.10 goocanvastable.c, 1.5,
1.6 goocanvastext.c, 1.11, 1.12 goocanvaswidget.c, 1.3, 1.4
Damon Chaplin
commit at pdx.freedesktop.org
Sat Feb 17 05:48:44 PST 2007
- Previous message: [cairo-commit]
goocanvas ChangeLog, 1.77, 1.78 NEWS, 1.4, 1.5 README,
1.6, 1.7 TODO, 1.23, 1.24 configure.in, 1.12, 1.13
- Next message: [cairo-commit] goocanvas/demo Makefile.am,1.10,1.11
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
Committed by: damon
Update of /cvs/cairo/goocanvas/src
In directory kemper:/tmp/cvs-serv8775/src
Modified Files:
goocanvasellipse.c goocanvasgroup.c goocanvasimage.c
goocanvasitem.c goocanvasitemmodel.c goocanvasitemsimple.c
goocanvasitemsimple.h goocanvaspath.c goocanvaspolyline.c
goocanvasrect.c goocanvastable.c goocanvastext.c
goocanvaswidget.c
Log Message:
2007-02-17 Damon Chaplin <damon at gnome.org>
* Released GooCanvas 0.6
2007-02-17 Damon Chaplin <damon at gnome.org>
* src/goocanvasitemsimple.h (struct _GooCanvasItemSimpleClass): renamed
create_path, update, paint and get_item_at class methods to
simple_create_path, simple_update, simple_paint and simple_get_item_at.
This avoids confusion with the GooCanvasItem interface methods with the
same name (and may avoid problems with language bindings etc.)
* src/goocanvasellipse.c (goo_canvas_ellipse_class_init):
* src/goocanvasimage.c (goo_canvas_image_class_init):
* src/goocanvaspath.c (goo_canvas_path_class_init):
* src/goocanvaspolyline.c (goo_canvas_polyline_class_init):
* src/goocanvasrect.c (goo_canvas_rect_class_init):
* src/goocanvastext.c (goo_canvas_text_class_init):
* src/goocanvaswidget.c (goo_canvas_widget_class_init):
* demo/demo-item.c (goo_demo_item_class_init):
* src/goocanvasitemsimple.c: updated use of above class methods.
* src/goocanvasgroup.c (goo_canvas_group_update): handle children with
empty bounds (i.e. ignore their bounds when computing the group's
bounds).
* src/goocanvastable.c (goo_canvas_table_paint)
(goo_canvas_table_get_item_at):
* src/goocanvasgroup.c (goo_canvas_group_get_item_at)
(goo_canvas_group_paint): don't check the
child bounds here. Leave it up to the children to do that.
* src/goocanvasitemsimple.c (goo_canvas_item_simple_get_item_at)
(goo_canvas_item_simple_paint): check the item's bounds here.
Index: goocanvasellipse.c
===================================================================
RCS file: /cvs/cairo/goocanvas/src/goocanvasellipse.c,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -d -r1.9 -r1.10
--- goocanvasellipse.c 15 Feb 2007 14:18:50 -0000 1.9
+++ goocanvasellipse.c 17 Feb 2007 13:48:37 -0000 1.10
@@ -106,7 +106,7 @@
gobject_class->get_property = goo_canvas_ellipse_get_property;
gobject_class->set_property = goo_canvas_ellipse_set_property;
- simple_class->create_path = goo_canvas_ellipse_create_path;
+ simple_class->simple_create_path = goo_canvas_ellipse_create_path;
goo_canvas_ellipse_install_common_properties (gobject_class);
}
Index: goocanvasgroup.c
===================================================================
RCS file: /cvs/cairo/goocanvas/src/goocanvasgroup.c,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -d -r1.18 -r1.19
--- goocanvasgroup.c 15 Feb 2007 14:18:50 -0000 1.18
+++ goocanvasgroup.c 17 Feb 2007 13:48:37 -0000 1.19
@@ -339,6 +339,7 @@
GooCanvasItemSimple *simple = (GooCanvasItemSimple*) item;
GooCanvasGroup *group = (GooCanvasGroup*) item;
GooCanvasBounds child_bounds;
+ gboolean initial_bounds = TRUE;
gint i;
if (entire_tree || simple->need_update)
@@ -364,20 +365,25 @@
goo_canvas_item_update (child, entire_tree, cr, &child_bounds);
- /* FIXME: Check for NULL bounds. Anywhere else? */
- if (i == 0)
- {
- simple->bounds.x1 = child_bounds.x1;
- simple->bounds.y1 = child_bounds.y1;
- simple->bounds.x2 = child_bounds.x2;
- simple->bounds.y2 = child_bounds.y2;
- }
- else
+ /* If the child has non-empty bounds, compute the union. */
+ if (child_bounds.x1 < child_bounds.x2
+ && child_bounds.y1 < child_bounds.y2)
{
- simple->bounds.x1 = MIN (simple->bounds.x1, child_bounds.x1);
- simple->bounds.y1 = MIN (simple->bounds.y1, child_bounds.y1);
- simple->bounds.x2 = MAX (simple->bounds.x2, child_bounds.x2);
- simple->bounds.y2 = MAX (simple->bounds.y2, child_bounds.y2);
+ if (initial_bounds)
+ {
+ simple->bounds.x1 = child_bounds.x1;
+ simple->bounds.y1 = child_bounds.y1;
+ simple->bounds.x2 = child_bounds.x2;
+ simple->bounds.y2 = child_bounds.y2;
+ initial_bounds = FALSE;
+ }
+ else
+ {
+ simple->bounds.x1 = MIN (simple->bounds.x1, child_bounds.x1);
+ simple->bounds.y1 = MIN (simple->bounds.y1, child_bounds.y1);
+ simple->bounds.x2 = MAX (simple->bounds.x2, child_bounds.x2);
+ simple->bounds.y2 = MAX (simple->bounds.y2, child_bounds.y2);
+ }
}
}
cairo_restore (cr);
@@ -398,7 +404,6 @@
GooCanvasItemSimple *simple = (GooCanvasItemSimple*) item;
GooCanvasItemSimpleData *simple_data = simple->simple_data;
GooCanvasGroup *group = (GooCanvasGroup*) item;
- GooCanvasBounds child_bounds;
GooCanvasItem *found_item = NULL;
gboolean visible = parent_visible;
int i;
@@ -427,12 +432,6 @@
for (i = group->items->len - 1; i >= 0; i--)
{
GooCanvasItem *child = group->items->pdata[i];
- goo_canvas_item_get_bounds (child, &child_bounds);
-
- /* Skip the item if the bounds don't contain the point. */
- if (child_bounds.x1 > x || child_bounds.x2 < x
- || child_bounds.y1 > y || child_bounds.y2 < y)
- continue;
found_item = goo_canvas_item_get_item_at (child, x, y, cr,
is_pointer_event, visible);
@@ -454,7 +453,6 @@
GooCanvasItemSimple *simple = (GooCanvasItemSimple*) item;
GooCanvasItemSimpleData *simple_data = simple->simple_data;
GooCanvasGroup *group = (GooCanvasGroup*) item;
- GooCanvasBounds child_bounds;
gint i;
/* Check if the item should be visible. */
@@ -471,14 +469,6 @@
for (i = 0; i < group->items->len; i++)
{
GooCanvasItem *child = group->items->pdata[i];
-
- goo_canvas_item_get_bounds (child, &child_bounds);
-
- /* Skip the item if the bounds don't intersect the expose rectangle. */
- if (child_bounds.x1 > bounds->x2 || child_bounds.x2 < bounds->x1
- || child_bounds.y1 > bounds->y2 || child_bounds.y2 < bounds->y1)
- continue;
-
goo_canvas_item_paint (child, cr, bounds, scale);
}
cairo_restore (cr);
Index: goocanvasimage.c
===================================================================
RCS file: /cvs/cairo/goocanvas/src/goocanvasimage.c,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -d -r1.12 -r1.13
--- goocanvasimage.c 15 Feb 2007 14:18:50 -0000 1.12
+++ goocanvasimage.c 17 Feb 2007 13:48:37 -0000 1.13
@@ -410,9 +410,9 @@
gobject_class->get_property = goo_canvas_image_get_property;
gobject_class->set_property = goo_canvas_image_set_property;
- simple_class->update = goo_canvas_image_update;
- simple_class->paint = goo_canvas_image_paint;
- simple_class->get_item_at = goo_canvas_image_get_item_at;
+ simple_class->simple_update = goo_canvas_image_update;
+ simple_class->simple_paint = goo_canvas_image_paint;
+ simple_class->simple_get_item_at = goo_canvas_image_get_item_at;
goo_canvas_image_install_common_properties (gobject_class);
}
Index: goocanvasitem.c
===================================================================
RCS file: /cvs/cairo/goocanvas/src/goocanvasitem.c,v
retrieving revision 1.19
retrieving revision 1.20
diff -u -d -r1.19 -r1.20
--- goocanvasitem.c 13 Feb 2007 12:39:57 -0000 1.19
+++ goocanvasitem.c 17 Feb 2007 13:48:37 -0000 1.20
@@ -1228,10 +1228,11 @@
/**
* goo_canvas_item_animate:
* @item: an item.
- * @x: the final x offset from the current position.
- * @y: the final y offset from the current position.
- * @scale: the final scale of the item.
- * @degrees: the final rotation of the item.
+ * @x: the final x coordinate.
+ * @y: the final y coordinate.
+ * @scale: the final scale.
+ * @degrees: the final rotation. This can be negative to rotate anticlockwise,
+ * and can also be greater than 360 to rotate a number of times.
* @absolute: if the @x, @y, @scale and @degrees values are absolute, or
* relative to the current transform. Note that absolute animations only work
* if the item currently has a simple transform. If the item has a shear or
Index: goocanvasitemmodel.c
===================================================================
RCS file: /cvs/cairo/goocanvas/src/goocanvasitemmodel.c,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -d -r1.8 -r1.9
--- goocanvasitemmodel.c 13 Feb 2007 12:32:44 -0000 1.8
+++ goocanvasitemmodel.c 17 Feb 2007 13:48:37 -0000 1.9
@@ -766,10 +766,11 @@
/**
* goo_canvas_item_model_animate:
* @model: an item model.
- * @x: the final x offset from the current position.
- * @y: the final y offset from the current position.
- * @scale: the final scale of the model.
- * @degrees: the final rotation of the model.
+ * @x: the final x coordinate.
+ * @y: the final y coordinate.
+ * @scale: the final scale.
+ * @degrees: the final rotation. This can be negative to rotate anticlockwise,
+ * and can also be greater than 360 to rotate a number of times.
* @absolute: if the @x, @y, @scale and @degrees values are absolute, or
* relative to the current transform. Note that absolute animations only work
* if the model currently has a simple transform. If the model has a shear or
Index: goocanvasitemsimple.c
===================================================================
RCS file: /cvs/cairo/goocanvas/src/goocanvasitemsimple.c,v
retrieving revision 1.20
retrieving revision 1.21
diff -u -d -r1.20 -r1.21
--- goocanvasitemsimple.c 15 Feb 2007 14:18:50 -0000 1.20
+++ goocanvasitemsimple.c 17 Feb 2007 13:48:37 -0000 1.21
@@ -939,6 +939,11 @@
if (simple->need_update)
goo_canvas_item_ensure_updated (item);
+ /* Skip the item if the point isn't in the item's bounds. */
+ if (simple->bounds.x1 > x || simple->bounds.x2 < x
+ || simple->bounds.y1 > y || simple->bounds.y2 < y)
+ return NULL;
+
/* Check if the item should receive events. */
if (is_pointer_event)
{
@@ -976,15 +981,15 @@
}
}
- if (class->get_item_at)
+ if (class->simple_get_item_at)
{
- found = class->get_item_at (simple, user_x, user_y, cr,
- is_pointer_event);
+ found = class->simple_get_item_at (simple, user_x, user_y, cr,
+ is_pointer_event);
}
else
{
/* Use the virtual method subclasses define to create the path. */
- class->create_path (simple, cr);
+ class->simple_create_path (simple, cr);
if (goo_canvas_item_simple_check_in_path (simple, user_x, user_y, cr,
pointer_events))
@@ -1069,15 +1074,15 @@
cairo_get_matrix (cr, &transform);
- if (class->update)
+ if (class->simple_update)
{
- class->update (simple, cr);
+ class->simple_update (simple, cr);
}
else
{
/* Use the identity matrix to get the bounds completely in user space. */
cairo_identity_matrix (cr);
- class->create_path (simple, cr);
+ class->simple_create_path (simple, cr);
goo_canvas_item_simple_get_path_bounds (simple, cr, &simple->bounds);
}
@@ -1250,6 +1255,11 @@
GooCanvasItemSimple *simple = (GooCanvasItemSimple*) item;
GooCanvasItemSimpleData *simple_data = simple->simple_data;
+ /* Skip the item if the bounds don't intersect the expose rectangle. */
+ if (simple->bounds.x1 > bounds->x2 || simple->bounds.x2 < bounds->x1
+ || simple->bounds.y1 > bounds->y2 || simple->bounds.y2 < bounds->y1)
+ return;
+
/* Check if the item should be visible. */
if (simple_data->visibility <= GOO_CANVAS_ITEM_INVISIBLE
|| (simple_data->visibility == GOO_CANVAS_ITEM_VISIBLE_ABOVE_THRESHOLD
@@ -1267,13 +1277,13 @@
cairo_clip (cr);
}
- if (class->paint)
+ if (class->simple_paint)
{
- class->paint (simple, cr, bounds);
+ class->simple_paint (simple, cr, bounds);
}
else
{
- class->create_path (simple, cr);
+ class->simple_create_path (simple, cr);
goo_canvas_item_simple_paint_path (simple, cr);
}
@@ -1470,6 +1480,10 @@
cairo_stroke_extents (cr, &tmp_bounds2.x1, &tmp_bounds2.y1,
&tmp_bounds2.x2, &tmp_bounds2.y2);
+ /* FIXME: Handle whatever cairo returns for NULL bounds. Cairo starts with
+ INT16_MAX << 16 in cairo-traps.c, but this may get converted to user
+ space so could be anything? */
+
bounds->x1 = MIN (tmp_bounds.x1, tmp_bounds.x2);
bounds->x1 = MIN (bounds->x1, tmp_bounds2.x1);
bounds->x1 = MIN (bounds->x1, tmp_bounds2.x2);
Index: goocanvasitemsimple.h
===================================================================
RCS file: /cvs/cairo/goocanvas/src/goocanvasitemsimple.h,v
retrieving revision 1.17
retrieving revision 1.18
diff -u -d -r1.17 -r1.18
--- goocanvasitemsimple.h 15 Feb 2007 14:18:50 -0000 1.17
+++ goocanvasitemsimple.h 17 Feb 2007 13:48:37 -0000 1.18
@@ -94,15 +94,15 @@
/**
* GooCanvasItemSimpleClass
- * @create_path: simple subclasses that draw basic shapes and paths only
+ * @simple_create_path: simple subclasses that draw basic shapes and paths only
* need to override this one method. It creates the path for the item.
* All updating, painting and hit-testing is provided automatically by the
* #GooCanvasItemSimple class. (This method is used by the builtin
* #GooCanvasEllipse, #GooCanvasRect and #GooCanvasPath items.)
- * @update: subclasses should override this to calculate their new bounds,
- * in user space.
- * @paint: subclasses should override this to paint their item.
- * @get_item_at: subclasses should override this to do hit-testing.
+ * @simple_update: subclasses should override this to calculate their new
+ * bounds, in user space.
+ * @simple_paint: subclasses should override this to paint their item.
+ * @simple_get_item_at: subclasses should override this to do hit-testing.
*
* The #GooCanvasItemSimpleClass-struct struct contains several methods that
* subclasses can override.
@@ -116,19 +116,19 @@
GObjectClass parent_class;
/*< public >*/
- void (* create_path) (GooCanvasItemSimple *simple,
- cairo_t *cr);
+ void (* simple_create_path) (GooCanvasItemSimple *simple,
+ cairo_t *cr);
- void (* update) (GooCanvasItemSimple *simple,
- cairo_t *cr);
- void (* paint) (GooCanvasItemSimple *simple,
- cairo_t *cr,
- GooCanvasBounds *bounds);
- GooCanvasItem* (* get_item_at) (GooCanvasItemSimple *simple,
- gdouble x,
- gdouble y,
- cairo_t *cr,
- gboolean is_pointer_event);
+ void (* simple_update) (GooCanvasItemSimple *simple,
+ cairo_t *cr);
+ void (* simple_paint) (GooCanvasItemSimple *simple,
+ cairo_t *cr,
+ GooCanvasBounds *bounds);
+ GooCanvasItem* (* simple_get_item_at) (GooCanvasItemSimple *simple,
+ gdouble x,
+ gdouble y,
+ cairo_t *cr,
+ gboolean is_pointer_event);
/*< private >*/
Index: goocanvaspath.c
===================================================================
RCS file: /cvs/cairo/goocanvas/src/goocanvaspath.c,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -d -r1.10 -r1.11
--- goocanvaspath.c 15 Feb 2007 14:18:50 -0000 1.10
+++ goocanvaspath.c 17 Feb 2007 13:48:37 -0000 1.11
@@ -90,7 +90,7 @@
gobject_class->get_property = goo_canvas_path_get_property;
gobject_class->set_property = goo_canvas_path_set_property;
- simple_class->create_path = goo_canvas_path_create_path;
+ simple_class->simple_create_path = goo_canvas_path_create_path;
goo_canvas_path_install_common_properties (gobject_class);
}
Index: goocanvaspolyline.c
===================================================================
RCS file: /cvs/cairo/goocanvas/src/goocanvaspolyline.c,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -d -r1.11 -r1.12
--- goocanvaspolyline.c 15 Feb 2007 14:18:50 -0000 1.11
+++ goocanvaspolyline.c 17 Feb 2007 13:48:37 -0000 1.12
@@ -969,9 +969,9 @@
gobject_class->get_property = goo_canvas_polyline_get_property;
gobject_class->set_property = goo_canvas_polyline_set_property;
- simple_class->update = goo_canvas_polyline_update;
- simple_class->paint = goo_canvas_polyline_paint;
- simple_class->get_item_at = goo_canvas_polyline_get_item_at;
+ simple_class->simple_update = goo_canvas_polyline_update;
+ simple_class->simple_paint = goo_canvas_polyline_paint;
+ simple_class->simple_get_item_at = goo_canvas_polyline_get_item_at;
goo_canvas_polyline_install_common_properties (gobject_class);
}
Index: goocanvasrect.c
===================================================================
RCS file: /cvs/cairo/goocanvas/src/goocanvasrect.c,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -d -r1.9 -r1.10
--- goocanvasrect.c 15 Feb 2007 14:18:50 -0000 1.9
+++ goocanvasrect.c 17 Feb 2007 13:48:37 -0000 1.10
@@ -122,7 +122,7 @@
gobject_class->get_property = goo_canvas_rect_get_property;
gobject_class->set_property = goo_canvas_rect_set_property;
- simple_class->create_path = goo_canvas_rect_create_path;
+ simple_class->simple_create_path = goo_canvas_rect_create_path;
goo_canvas_rect_install_common_properties (gobject_class);
}
Index: goocanvastable.c
===================================================================
RCS file: /cvs/cairo/goocanvas/src/goocanvastable.c,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -d -r1.5 -r1.6
--- goocanvastable.c 8 Feb 2007 22:56:45 -0000 1.5
+++ goocanvastable.c 17 Feb 2007 13:48:37 -0000 1.6
@@ -1732,7 +1732,6 @@
GooCanvasTable *table = (GooCanvasTable*) item;
GooCanvasTableData *table_data = table->table_data;
GArray *children = table_data->children;
- GooCanvasBounds child_bounds;
GooCanvasTableChild *table_child;
GooCanvasItem *child;
gint i;
@@ -1752,13 +1751,6 @@
{
child = group->items->pdata[i];
- goo_canvas_item_get_bounds (child, &child_bounds);
-
- /* Skip the item if the bounds don't intersect the expose rectangle. */
- if (child_bounds.x1 > bounds->x2 || child_bounds.x2 < bounds->x1
- || child_bounds.y1 > bounds->y2 || child_bounds.y2 < bounds->y1)
- continue;
-
table_child = &g_array_index (children, GooCanvasTableChild, i);
cairo_translate (cr, table_child->position[HORZ],
table_child->position[VERT]);
@@ -1787,7 +1779,6 @@
GooCanvasTable *table = (GooCanvasTable*) item;
GooCanvasTableData *table_data = table->table_data;
GArray *children = table_data->children;
- GooCanvasBounds child_bounds;
GooCanvasTableChild *table_child;
GooCanvasItem *child;
GooCanvasItem *found_item = NULL;
@@ -1818,12 +1809,6 @@
for (i = group->items->len - 1; i >= 0; i--)
{
child = group->items->pdata[i];
- goo_canvas_item_get_bounds (child, &child_bounds);
-
- /* Skip the item if the bounds don't contain the point. */
- if (child_bounds.x1 > x || child_bounds.x2 < x
- || child_bounds.y1 > y || child_bounds.y2 < y)
- continue;
table_child = &g_array_index (children, GooCanvasTableChild, i);
cairo_translate (cr, table_child->position[HORZ],
Index: goocanvastext.c
===================================================================
RCS file: /cvs/cairo/goocanvas/src/goocanvastext.c,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -d -r1.11 -r1.12
--- goocanvastext.c 15 Feb 2007 14:18:50 -0000 1.11
+++ goocanvastext.c 17 Feb 2007 13:48:37 -0000 1.12
@@ -610,9 +610,9 @@
gobject_class->get_property = goo_canvas_text_get_property;
gobject_class->set_property = goo_canvas_text_set_property;
- simple_class->update = goo_canvas_text_update;
- simple_class->paint = goo_canvas_text_paint;
- simple_class->get_item_at = goo_canvas_text_get_item_at;
+ simple_class->simple_update = goo_canvas_text_update;
+ simple_class->simple_paint = goo_canvas_text_paint;
+ simple_class->simple_get_item_at = goo_canvas_text_get_item_at;
goo_canvas_text_install_common_properties (gobject_class);
Index: goocanvaswidget.c
===================================================================
RCS file: /cvs/cairo/goocanvas/src/goocanvaswidget.c,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -d -r1.3 -r1.4
--- goocanvaswidget.c 2 Feb 2007 21:54:00 -0000 1.3
+++ goocanvaswidget.c 17 Feb 2007 13:48:37 -0000 1.4
@@ -481,9 +481,9 @@
gobject_class->get_property = goo_canvas_widget_get_property;
gobject_class->set_property = goo_canvas_widget_set_property;
- simple_class->update = goo_canvas_widget_update;
- simple_class->paint = goo_canvas_widget_paint;
- simple_class->get_item_at = goo_canvas_widget_get_item_at;
+ simple_class->simple_update = goo_canvas_widget_update;
+ simple_class->simple_paint = goo_canvas_widget_paint;
+ simple_class->simple_get_item_at = goo_canvas_widget_get_item_at;
/* Register our accessible factory, but only if accessibility is enabled. */
if (!ATK_IS_NO_OP_OBJECT_FACTORY (atk_registry_get_factory (atk_get_default_registry (), GTK_TYPE_WIDGET)))
- Previous message: [cairo-commit]
goocanvas ChangeLog, 1.77, 1.78 NEWS, 1.4, 1.5 README,
1.6, 1.7 TODO, 1.23, 1.24 configure.in, 1.12, 1.13
- Next message: [cairo-commit] goocanvas/demo Makefile.am,1.10,1.11
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
More information about the cairo-commit
mailing list