# Part I. Overview

### Emmanuele Bassi

`<ebassi`openedhand.com`>`

Clutter is a GObject based library for creating fast, visually rich, graphical user interfaces.

Clutter works by manipulating a scene-graph of 2D surfaces, or 'actors', inside a 3D space.

ClutterActor is the base class for such surfaces. All ClutterActors can be positioned, scaled and rotated in 3D space. In addition, other properties can be set, such as 2D clipping, children and opacity. Tranforms applied to a parent actor also apply to any children. Actors are also able to receive events.

Subclasses of ClutterActor include ClutterStage, ClutterTexture, ClutterText, ClutterRectangle, ClutterCairoTexture, ClutterGroup and ClutterBox. ClutterActors are added to a parent, transformed and then made visible.

ClutterStage is the top level ClutterActor - it's the representation of a window, or framebuffer. It is created automatically when Clutter is initialised. ClutterStage is a ClutterGroup, a class implementing the ClutterCointainer interface.

Clutter allows explicit positioning and sizing through the ClutterFixedLayout layout manager; and implicit positioning and sizing through fluid layout managers like ClutterBoxLayout, ClutterFlowLayout and ClutterTableLayout. Actors inside fixed layout managers like ClutterGroup and ClutterStage can also be positioned and sized implicitly using the ClutterConstraint sub-classes.

ClutterTimelines provide the basis for Clutter's animation utilities. ClutterActors can be animated using explicit animations through the various ClutterBehaviour implementations, or implicit animations, through the `clutter_actor_animate()` function. Animations can also be defined as named states through the ClutterState class.

Clutter further contains a number of utilities, including; ClutterScript - for loading 'UI definition' files formatted in JSON; ClutterShader - a class for applying GPU shaders to actors, ClutterModel - a utility class for MVC list type implementations; ClutterActions, ClutterConstraints and ClutterEffects.