X-Git-Url: https://git.cworth.org/git?a=blobdiff_plain;f=demo-item.c;h=99c45fb8b380de280e2a1dd215ddea8f920d6872;hb=bcb2db8e93ce94b662e7118b92230c6eb749ee22;hp=2eaf830c2235faee43ec53633f3c7d2262e90ec7;hpb=f8d083966703a2b0efb6db1782a14a1a0b5d56f4;p=wordgame diff --git a/demo-item.c b/demo-item.c index 2eaf830..99c45fb 100644 --- a/demo-item.c +++ b/demo-item.c @@ -4,6 +4,8 @@ * * demo-item.c - a simple demo item. */ +#include + #include "goocanvas.h" #include "demo-item.h" @@ -16,21 +18,17 @@ G_DEFINE_TYPE (GooDemoItem, goo_demo_item, GOO_TYPE_CANVAS_ITEM_SIMPLE) static void goo_demo_item_init (GooDemoItem *demo_item) { - demo_item->x = 0.0; - demo_item->y = 0.0; - demo_item->width = 0.0; - demo_item->height = 0.0; + demo_item->size = 0.0; } /* The convenience function to create new items. This should start with a parent argument and end with a variable list of object properties to fit in with the standard canvas items. */ GooCanvasItem* -goo_demo_item_new (GooCanvasItem *parent, - gdouble x, - gdouble y, - gdouble width, - gdouble height, +goo_demo_item_new (GooCanvasItem *parent, + gdouble size, + GooDemoItemPaintFunc paint, + void *closure, ...) { GooCanvasItem *item; @@ -41,12 +39,11 @@ goo_demo_item_new (GooCanvasItem *parent, item = g_object_new (GOO_TYPE_DEMO_ITEM, NULL); demo_item = (GooDemoItem*) item; - demo_item->x = x; - demo_item->y = y; - demo_item->width = width; - demo_item->height = height; + demo_item->size = size; + demo_item->paint = paint; + demo_item->closure = closure; - va_start (var_args, height); + va_start (var_args, closure); first_property = va_arg (var_args, char*); if (first_property) g_object_set_valist ((GObject*) item, first_property, var_args); @@ -72,10 +69,10 @@ goo_demo_item_update (GooCanvasItemSimple *simple, GooDemoItem *demo_item = (GooDemoItem*) simple; /* Compute the new bounds. */ - simple->bounds.x1 = demo_item->x; - simple->bounds.y1 = demo_item->y; - simple->bounds.x2 = demo_item->x + demo_item->width; - simple->bounds.y2 = demo_item->y + demo_item->height; + simple->bounds.x1 = 0; + simple->bounds.y1 = 0; + simple->bounds.x2 = demo_item->size; + simple->bounds.y2 = demo_item->size; /* Convert to device coordinates. */ goo_canvas_item_simple_user_bounds_to_device (simple, cr, &simple->bounds); @@ -88,16 +85,9 @@ goo_demo_item_paint (GooCanvasItemSimple *simple, cairo_t *cr, GooCanvasBounds *bounds) { - GooDemoItem *demo_item = (GooDemoItem*) simple; + GooDemoItem *item = (GooDemoItem*) simple; - cairo_move_to (cr, demo_item->x, demo_item->y); - cairo_line_to (cr, demo_item->x, demo_item->y + demo_item->height); - cairo_line_to (cr, demo_item->x + demo_item->width, - demo_item->y + demo_item->height); - cairo_line_to (cr, demo_item->x + demo_item->width, demo_item->y); - cairo_close_path (cr); - goo_canvas_style_set_fill_options (simple->simple_data->style, cr); - cairo_fill (cr); + item->paint (cr, item->closure); } /* Hit detection. This should check if the given coordinate (in the item's @@ -112,8 +102,8 @@ goo_demo_item_get_item_at (GooCanvasItemSimple *simple, { GooDemoItem *demo_item = (GooDemoItem*) simple; - if (x < demo_item->x || (x > demo_item->x + demo_item->width) - || y < demo_item->y || (y > demo_item->y + demo_item->height)) + if (x < 0 || (x > demo_item->size) + || y < 0 || (y > demo_item->size)) return NULL; return (GooCanvasItem*) simple;