Bugs o I need to check the bounds are being calculated correctly so that they are correct for all zoom settings. Since cairo uses fixed point maths and I think only calculates up to a certain tolerance there might be slight errors in our gdouble results. So as the canvas is scaled this could eventually lead to the bounds being a pixel out, leading to painting errors. Maybe we should extend any bounds returned from cairo slightly to cover the maximum possible errors. o button press events are generating leave-notify and enter-notify signals. Seems to be a GTK+/X problem. o The GooCairo* types are used for some properties but aren't documented. Maybe we could point to the cairo docs. Features definitely needed: o Editable text item - a port of GtkTextView. o Tooltips - I have code to support tooltips using the new API in GTK+ 2.12. o Need a function to setup a given cairo context with the defaults settings of a GooCanvas, e.g. default line width. o Check canvas and all items can be completely configured with properties so that GtkBuilder can be used to load hierarchies of items/models. Add "root-item" and "root-item-model" properties? Will GtkBuilder be able to handle the tree of items/models like that? What about GUI builders? How can gradients be specified by object properties? Possible additional features: o Need a way to efficiently notify items about changes in canvas scale, if they request it. Could use something similar to the update flags. o Change GooCanvasStyle so it doesn't expose GValues in the API. Use get/set_boolean/int/double/boxed() instead. o Drag-and-Drop - probably copy all the GTK+ widget signals so items can implement their own behavior. o Caching of rendered items to improve performance. Items would have a cache option with choices like Never, Always and WhenVisible. o Sticky items that don't move at all as the canvas is scrolled & zoomed. o Filters like in SVG, to add graphical effects. o Support using the same item in different places, like SVG 'use'. o Support using system color names, like SVG, e.g. "ActiveBorder". This helps you write widget-like items that fit in with the rest of GTK+. o "scale-line-width" boolean property to specify if the line width scales with the canvas? The item bounds will change at different scale settings. o Arrows on path items, just like on polyline. Requests from GTK+ people: o Use separate GooCanvasContainer[Model] interfaces? May help bindings. o GooCanvasWidget width & height are redundant - use widget's requested size. o Make PathCommand and LineDash structs opaque. o Use floating flag and sink() for objects. o Use 1-byte integer percentage for xalign/yalign instead of doubles? o Make it easy to add a border and background to items. "border-width", "border-color" and "background-color" properties? Might also need "x-pad", "y-pad", "x-radius", "y-radius" etc. Maybe have a related border item. Note that we only have the bounds in device coords, so drawing a border of a rotated item would be awkward. (Maybe we store the user bounds somewhere.) o Link/URL item, or enable URLs in the markup of text items. o A button item, with different children displayed for different states, maybe with optional automatic prelighting.