<page xmlns="http://projectmallard.org/1.0/"
      xmlns:its="http://www.w3.org/2005/11/its"
      type="topic"
      id="tech-clutter">

  <info>
    <link type="guide" xref="tech" group="clutter"/>
    <revision pkgversion="3.0" date="2011-04-05" status="incomplete"/>

    <credit type="author copyright">
      <name>Shaun McCance</name>
      <email its:translate="no">shaunm@gnome.org</email>
      <years>2011–2012</years>
    </credit>

    <include href="cc-by-sa-3-0.xml" xmlns="http://www.w3.org/2001/XInclude"/>

    <desc>Animations and scene graph</desc>
  </info>

<title>Clutter</title>

<p>Clutter is a library for doing animations and using a 2.5-D canvas.
You create graphical objects out of images, and you can manipulate
them later to move them, rotate them, or give them quasi-3D
effects.</p>

<p>Clutter uses the <link href="http://www.khronos.org/opengl/">OpenGL</link>
and <link href="http://www.khronos.org/opengles/">OpenGL|ES</link> industry
standard API to access the accelerated graphical hardware on both desktop and
mobile environments alike, without exposing the complexities of GPU pipeline
programming.</p>

<p>Clutter does not specify any visual style, and does not provide any
pre-defined complex user interface control; it lets the developer define what
is needed, using a flexible scene graph API, with free-form placement of the
scene elements (or <em>actors</em>) on the main viewport (or <em>stage</em>).</p>

  <p>Clutter comes with pre-defined actors for displaying solid colors, image
  data, text and custom high-precision 2D drawing using the
  <link xref="tech-cairo">Cairo</link> API. Clutter also provides generic
  classes for structuring a user interface using both a box-packing model like
  <link xref="tech-gtk">GTK</link>, and a series of free-form
  <em>constraints</em>.</p>

<p>Clutter provides an extensible animation framework and graphical
effects. An animation is associated with a timeline and changes one or
more properties of one or more actors over time, for example their
rotation in a particular dimension, scale, size, opacity, etc.</p>

<p>A number of third-party libraries allow integration with other
technologies, such as: Clutter-GTK, for embedding a Clutter stage inside a
GTK application; Clutter-GStreamer, for embedding GStreamer video and audio
pipelines; Clutter-Box2D and Clutter-Bullet, for adding physics interaction
in both 2D and 3D environments.</p>

<list style="compact">
  <item><p><link href="https://developer.gnome.org/clutter-cookbook/stable/">The Clutter Cookbook</link></p></item>
  <item><p><link href="http://developer.gnome.org/clutter/stable">Clutter Reference Manual</link></p></item>
  <item><p><link href="http://www.clutter-project.org">The Clutter web site</link></p></item>
</list>

</page>