Chapter #1 in which we meet Graff

23 Apr 2007 » permalink

Long time, no news.

I'm working now on a (new) set of libraries called Graff. Graff is a lighweight high-performance graphics rendering library. I guess it falls into the category of canvas — as currently discussed on the gtk mailing list. It’s a bit more generic though and focused on providing ways of animating graphical elements over time. It knows about motion paths, timelines, animating parameters, etc. The use case here is building new rich custom UI’s, providing a building-block for higher-level toolkits and abstracting hardware-specific quirks. It provides a basic model-view-controller environment with the UI elements (“faces”) being cleanly separated from the “motors” driving them. “Touches” provide event sources.

Graff can currently render using two runtime-selectable backends — a hardware-accelerated OpenGL backend or a software-only driver. The software backend is extremelly highly optimized using all the ugly demo-scene tips&tricks straight form the ‘90ties. It performs suprisingly well and the demo applications mentioned below can actually run good on our existing hardware (nokia 770, nokia n800).

Speaking of demos, I made a few simplistic test applications to sketch the idea of what Graff can already do. Video recordings available below. It’s a work in progress, early on.

Graff Demo 1   Graff Demo 2

Graff Demo 3   Graff Demo 4

Image viewer: a basic image viewer controlled with thumbs.

Dancing emotes: an example showing objects running along morphable paths.

Scrolling list: contact list with inertia scrolling.

Drag: trivial drag and drop with some smooth blending.

The image viewer example uses Jakub’s nice photos. Icons come from our awsome Tango artists.