Gtk Canvas

This page tries to collect highlights and drawbacks for the most known canvases around, plus some other information that hopefully will be useful to determine a sensible feature set and the best candidates to fill the canvas gap in GTK+.

Candidates for a new GtkCanvas are marked with a colored row. Other canvases are just for comparison.

Use Cases

Some Links

GnomeCanvas

This is the existing (unloved) GNOME canvas, included here for reference. We should try to avoid regressions when choosing functionality for a new canvas.

libccc

A candidate for the new GtkCanvas.

GooCanvas

A candidate for the new GtkCanvas.

FooCanvas

Hippo-Canvas

GeoCanvas

clutter

Qt4 Graphics View Framework

Concepts

Canvas

Primary Layout Model

Model/View Split

Infinite Scrolling

Backend

gnomecanvas

scene graph

{X}

{X}

GDK/libart(aa)

ccc

scene graph

(./)

{X}

cairo

goocanvas

scene graph

(./) (optional)

{X}

cairo

hippocanvas

boxed

{X}

{X}

cairo

foocanvas

scene graph

{X}

{X}

GDK

geocanvas

scene graph

{X}

(./)

cairo

clutter

scene graph

{X}

{X}

GLX/Win32/OSX/SDL/EGL/EGLX

Qt4

(./)

{X}

Qt

Evas

{X}

{X}

GL/XCB/X11

Rapicorn

(./)

{X}

cairo

Notes

Basic Features

Canvas

Generic Positioning

Accessibility

Printing Support

Item Grouping

Unit Support

Embedded GTK+ Widgets

GTK+ CellRenderer

Pixel Alignment

Automatic Layout

Primitives

gnomecanvas

(./)

(./)

{X}

(./)

Without transformation

{X}

{X}

ccc

gnomebug:436932

gnomebug:379331

(./)

(./)

Not yet,
waiting for GTK+ offscreen-rendering support
to implement transformation.

(./)

(./)

gnomebug:354331

Camera, Caret, Circle, Line, Pixbuf, Rectangle, Rounded Rectangle, Shape, SimpleItem, Text

goocanvas

{X}

(./)

(./) (no pagination)

(./)

(./)

Without transformation

{X}

only for tables

WxH

Ellipse, Group, Image, Path, Polyline, Rect, Table, Text, Widget

hippocanvas

N/A

{X}

{X}

(./)

{X}

(./)

{X}

mandatory

(./)

Box, Entry, Gradient, ImageButton, Image, Link, Scrollbars, Text

foocanvas

(./)

{X}

(./)

{X}

{X}

geocanvas

{X}

{X}

(./)

{X}

{X}

clutter

(./)

{X}
planned for 1.0

{X}

(./)

(./)

Embedding Clutter in GTK+ is possible.
Embedding Gtk+ Widgets is pending on the offscreen-rendering support.

{X}

(./)

WxH, HxW, NaS

Group, Entry, Texture, Label

Qt4

(./)

(./)

{X}

{X}

Evas

{X}

{X}

(./)

{X}

{X}

{X}

Rapicorn

{X}

{X}

(./)

(./)

{X}

(./)

Notes

Highlevel Features

Canvas

Animation Framework

Collision Detection

Builtin DnD Support

Non-scaled items

Theming

Inline Text Editing

Serialization

Rapid Prototyping

gnomecanvas

{X}

{X}

{X}

{X}

{X}

ccc

gnomebug:379327

{X}

gnomebug:436934

{X}

planned

(./)

in progress, using GtkBuilder

Signals of CcSimpleItem

goocanvas

fixed set of animations

{X}

{X}

{X}

{X}

{X}

{X}

hippocanvas

{X}

{X}

{X}

{X}

{X}

{X}

{X}

foocanvas

{X}

{X}

{X}

{X}

{X}

geocanvas

{X}

{X}

{X}

{X}

{X}

clutter

(./)

(./) a complete physics engine is provided through an integration library

{X}

{X}

{X}

(./)

(./)
using JSON and not GtkBuilder

(./)
using JSON and not GtkBuilder

Qt4

(./)

(./)

(./)

{X}

{X}

Evas

(./)

{X}

{X}

Rapicorn

{X}

{X}

{X}

{X}

Notes

API Details

Canvas

Opaque Object Structures

Initial Object Ownership

gnomecanvas

{X}

floating (GtkObject)

ccc

almost finished

floating (GInitiallyUnowned)

goocanvas

{X}

scope (GObject)

hippocanvas

{X}

floating?

foocanvas

{X}

floating (GtkObject)

geocanvas

(./)

floating (GtkObject)

clutter

(./)

floating (GInitiallyUnowned)

Qt4

Evas

Rapicorn

Notes

Metrics

Canvas

Phys. Lines of Code

API Reference

Tutorial

Roadmap

Bindings

Regression Tests

gnomecanvas

(./)

{X}

{X}

C, C++, Perl, Python, Ruby

(./)

ccc

7,617 - 2007/10/15

(./)

(./)

(./)

C, C++, C#, Python

(./)

goocanvas

14,610 - 2007/10/15

(./)

(./)

TODO list

C, C++, Python

{X}

hippocanvas

9,246 - 0.2.23

{X}

{X}

C, Python

(./)

foocanvas

{X}

{X}

C, C++

{X}

geocanvas

(./)

{X}

C, Python

(./)

clutter

51,091 - 2008/06/09

(./)

(./)

TODO list

C, C++, C#, Perl, Python, Ruby, Vala

(./)

Qt4

(./)

(./)

C++, Perl, Python

Evas

{X}

{X}

{X}

Rapicorn

{X}

{X}

{X}

C++

Comments

Any thoughts/comments? please write them here

ProjectRidley/CanvasOverview (last edited 2008-07-20 21:24:18 by EmmanueleBassi)