Rapid Prototyping of custom Items

Managing the Bounding Box
Managing Redrawing
Hit-Testing

Managing the Bounding Box

CCC uses a managed bounding box to easily see whether a region that needs to be redrawn or whether a click is within an item. So the first thing that you have to care about is the question "where's my item?".

static void
update_bbox (CcItem  * item,
	     CcView  * view,
	     gpointer  user_data)
{
	CcDRect bounding_box = {0.0, 0.0, 100.0, 100.0};
	CcDRect* old_box = cc_hash_map_lookup (item->bounds, view);

	/* here you can add your routine to measure the bounding box and
	 * update @bounding_box accordingly */

	if (old_box && !cc_d_rect_equal (bounding_box, *old_box)) {
		/* different bounding boxes; delete old one; bur before we do
		 * let's ask for a redraw of the old area */
		cc_item_dirty (item, view, *old_box);
		g_free (old_box);
		old_box = NULL;
	}

	if (!old_box) {
		/* no bounding box set: copy ours */
		cc_hash_map_insert (item->bounds, view, cc_d_rect_copy (&bounding_box));

		/* queue the region to be redrawn */
		cc_item_dirty (item, view, bounding_box);
	}
}

…
        g_signal_connect (custom_item, "update-bounds",
                          G_CALLBACK (update_bbox), NULL);
…