<part id="clutter-overview">
  <partinfo>
    <author>
      <firstname>Emmanuele</firstname>
      <surname>Bassi</surname>
      <affiliation>
        <address>
          <email>ebassi@openedhand.com</email>
        </address>
      </affiliation>
    </author>
  </partinfo>

  <title>Overview</title>

  <partintro>

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

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

    <para>#ClutterActor is the base class for such surfaces. All
    #ClutterActor<!-- -->s 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.</para>

    <para>Subclasses of #ClutterActor include #ClutterStage, #ClutterTexture,
    #ClutterText, #ClutterRectangle, #ClutterCairoTexture, #ClutterGroup and
    #ClutterBox. #ClutterActor<!-- -->s are added to a parent, transformed
    and then made visible.</para>

    <para>#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 #ClutterContainer interface.</para>

    <para>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.</para>

    <para>#ClutterTimeline<!-- -->s provide the basis for Clutter's animation
    utilities. #ClutterActor<!-- -->s 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.</para>

    <para>Clutter further contains a number of utilities, including;
    #ClutterScript - for loading 'UI definition' files formatted in
    <ulink type="http" url="http://json.org">JSON</ulink>; #ClutterShader - a
    class for applying GPU shaders to actors, #ClutterModel - a utility class
    for MVC list type implementations; #ClutterAction<!-- -->s,
    #ClutterConstraint<!-- -->s and #ClutterEffect<!-- -->s.</para>

  </partintro>

</part>
