<?xml version="1.0" encoding="utf-8" standalone="no"?>
<book xmlns="http://www.devhelp.net/book" title="The Clutter Cookbook" link="index.html" author="Emmanuele BassiElliot Smith" name="clutter-cookbook">
  <chapters>
    <sub name="Preface" link="introduction.html">
      <sub name="About Clutter" link="introduction.html#idm139718409893184"/>
      <sub name="About this document" link="ch01s02.html">
        <sub name="Compiling the examples" link="ch01s02.html#idm139718418020816"/>
      </sub>
      <sub name="Acknowledgments" link="ch01s03.html">
        <sub name="Acknowledgments from Emmanuele" link="ch01s03.html#idm139718418009168"/>
        <sub name="Acknowledgements from Elliot" link="ch01s03.html#idm139718418007376"/>
      </sub>
      <sub name="Where to get Clutter" link="ch01s04.html"/>
    </sub>
    <sub name="Actors" link="actors.html">
      <sub name="Introduction" link="actors.html#actors-introduction"/>
      <sub name="Implementing a simple custom actor" link="actors-composite.html">
        <sub name="Problem" link="actors-composite.html#actors-composite-problem"/>
        <sub name="Solution" link="actors-composite.html#actors-composite-solution"/>
        <sub name="Discussion" link="actors-composite.html#actors-composite-discussion">
          <sub name="Implementing ClutterActor virtual functions" link="actors-composite.html#actors-composite-discussion-clutter-virtual-functions"/>
        </sub>
      </sub>
      <sub name="Knowing when an actor's position or size changes" link="actors-allocation-notify.html">
        <sub name="Problem" link="actors-allocation-notify.html#idm139718411593312"/>
        <sub name="Solution" link="actors-allocation-notify.html#idm139718411591824"/>
        <sub name="Discussion" link="actors-allocation-notify.html#idm139718411582576"/>
      </sub>
      <sub name="Overriding the paint sequence" link="actors-paint-wrappers.html">
        <sub name="Problem" link="actors-paint-wrappers.html#idm139718411569936"/>
        <sub name="Solution" link="actors-paint-wrappers.html#idm139718411568624"/>
        <sub name="Discussion" link="actors-paint-wrappers.html#idm139718411560960"/>
      </sub>
      <sub name="Making an actor transparent by changing its opacity" link="actors-opacity.html">
        <sub name="Problem" link="actors-opacity.html#idm139718411552720"/>
        <sub name="Solution" link="actors-opacity.html#idm139718411551408"/>
        <sub name="Discussion" link="actors-opacity.html#idm139718411547552">
          <sub name="Container and color opacity" link="actors-opacity.html#idm139718411533808"/>
          <sub name="Depth and depth order" link="actors-opacity.html#idm139718411515680"/>
        </sub>
      </sub>
      <sub name="Creating an actor with a non-rectangular shape" link="actors-non-rectangular.html">
        <sub name="Problem" link="actors-non-rectangular.html#idm139718411500224"/>
        <sub name="Solution" link="actors-non-rectangular.html#idm139718411498352"/>
        <sub name="Discussion" link="actors-non-rectangular.html#idm139718411489536">
          <sub name="Cogl path coordinates" link="actors-non-rectangular.html#idm139718411486192"/>
          <sub name="Other Cogl primitives" link="actors-non-rectangular.html#idm139718411473248"/>
          <sub name="Using ClutterPath to store the path" link="actors-non-rectangular.html#idm139718411459808"/>
        </sub>
      </sub>
    </sub>
    <sub name="Events" link="events.html">
      <sub name="Introduction" link="events.html#events-introduction"/>
      <sub name="Handling key events" link="events-handling-key-events.html">
        <sub name="Problem" link="events-handling-key-events.html#idm139718408526032"/>
        <sub name="Solutions" link="events-handling-key-events.html#idm139718408524720">
          <sub name="Solution 1" link="events-handling-key-events.html#idm139718408122272"/>
          <sub name="Solution 2" link="events-handling-key-events.html#idm139718409402896"/>
        </sub>
        <sub name="Discussion" link="events-handling-key-events.html#events-handling-key-events-discussion">
          <sub name="Pros and cons of Solution 1 and Solution 2" link="events-handling-key-events.html#idm139718409440704"/>
          <sub name="Other useful things to know about key press events" link="events-handling-key-events.html#idm139718408091872"/>
        </sub>
      </sub>
      <sub name="Detecting mouse scrolling on an actor" link="events-mouse-scroll.html">
        <sub name="Problem" link="events-mouse-scroll.html#idm139718408082048"/>
        <sub name="Solution" link="events-mouse-scroll.html#idm139718408080576"/>
        <sub name="Discussion" link="events-mouse-scroll.html#idm139718408072704">
          <sub name="Creating a scrolling viewport for an actor" link="events-mouse-scroll.html#idm139718408071312"/>
        </sub>
        <sub name="Full example" link="events-mouse-scroll.html#idm139718408031920"/>
      </sub>
      <sub name="Detecting pointer movements on an actor" link="events-pointer-motion.html">
        <sub name="Problem" link="events-pointer-motion.html#events-pointer-motion-problem"/>
        <sub name="Solution" link="events-pointer-motion.html#events-pointer-motion-solution">
          <sub name="Responding to crossing events" link="events-pointer-motion.html#idm139718408016672"/>
          <sub name="Responding to motion events" link="events-pointer-motion.html#idm139718408005312"/>
        </sub>
        <sub name="Discussion" link="events-pointer-motion.html#events-pointer-motion-discussion">
          <sub name="Pointer events on actors at different depths" link="events-pointer-motion.html#idm139718407986272"/>
        </sub>
        <sub name="Full examples" link="events-pointer-motion.html#idm139718407971888"/>
      </sub>
      <sub name="Making an actor respond to button events" link="events-buttons.html">
        <sub name="Problem" link="events-buttons.html#idm139718407943616"/>
        <sub name="Solution" link="events-buttons.html#idm139718407938240"/>
        <sub name="Discussion" link="events-buttons.html#idm139718407921152">
          <sub name="Click count" link="events-buttons.html#idm139718407915568"/>
          <sub name="Button numbering" link="events-buttons.html#idm139718407904416"/>
          <sub name="ClutterClickAction" link="events-buttons.html#events-buttons-clutterclickaction"/>
        </sub>
        <sub name="Full examples" link="events-buttons.html#idm139718407880608"/>
      </sub>
    </sub>
    <sub name="Textures" link="textures.html">
      <sub name="Introduction" link="textures.html#textures-introduction"/>
      <sub name="Drawing 2D graphics onto a texture" link="textures-drawing-with-cairo.html">
        <sub name="Problem" link="textures-drawing-with-cairo.html#idm139718410031408"/>
        <sub name="Solution" link="textures-drawing-with-cairo.html#idm139718410038464"/>
        <sub name="Discussion" link="textures-drawing-with-cairo.html#idm139718412686112">
          <sub name="Drawing pages from a PDF onto a ClutterCairoContext" link="textures-drawing-with-cairo.html#idm139718409779152"/>
        </sub>
      </sub>
      <sub name="Maintaining the aspect ratio when loading an&#10;    image into a texture" link="textures-aspect-ratio.html">
        <sub name="Problem" link="textures-aspect-ratio.html#idm139718407453104"/>
        <sub name="Solution" link="textures-aspect-ratio.html#idm139718407451664"/>
        <sub name="Discussion" link="textures-aspect-ratio.html#idm139718407447344"/>
      </sub>
      <sub name="Loading image data into a texture" link="textures-image-loading.html">
        <sub name="Problem" link="textures-image-loading.html#idm139718412897280"/>
        <sub name="Solution" link="textures-image-loading.html#idm139718412895968"/>
        <sub name="Discussion" link="textures-image-loading.html#idm139718407278896">
          <sub name="Synchronous vs. asynchronous image loading" link="textures-image-loading.html#idm139718407272880"/>
          <sub name="Other ways to load image data into a texture" link="textures-image-loading.html#idm139718407262928"/>
        </sub>
      </sub>
      <sub name="Creating sub-textures from an existing texture" link="textures-sub-textures.html">
        <sub name="Problem" link="textures-sub-textures.html#idm139718407254208"/>
        <sub name="Solution" link="textures-sub-textures.html#idm139718407252432"/>
        <sub name="Discussion" link="textures-sub-textures.html#idm139718407243584"/>
        <sub name="Full example" link="textures-sub-textures.html#idm139718407237488"/>
        <sub name="Going further" link="textures-sub-textures.html#idm139718407231536"/>
      </sub>
      <sub name="Creating a reflection of a texture" link="textures-reflection.html">
        <sub name="Problem" link="textures-reflection.html#idm139718407216496"/>
        <sub name="Solution" link="textures-reflection.html#idm139718407214592"/>
        <sub name="Discussion" link="textures-reflection.html#idm139718407206624"/>
        <sub name="Full example" link="textures-reflection.html#idm139718407191552"/>
      </sub>
      <sub name="Cross-fading between two images" link="textures-crossfade.html">
        <sub name="Problem" link="textures-crossfade.html#idm139718407182752"/>
        <sub name="Solutions" link="textures-crossfade.html#idm139718407180736">
          <sub name="Solution 1: two textures" link="textures-crossfade.html#idm139718407175840"/>
          <sub name="Solution 2: one texture with two layers" link="textures-crossfade.html#idm139718407142816">
            <sub name="Cross-fading using a texture combiner with interpolation" link="textures-crossfade.html#idm139718407137472"/>
          </sub>
        </sub>
        <sub name="Discussion" link="textures-crossfade.html#textures-crossfade-discussion">
          <sub name="Cross-fades between images of different sizes" link="textures-crossfade.html#idm139718407123968"/>
          <sub name="Slideshows" link="textures-crossfade.html#textures-crossfade-discussion-slideshows"/>
        </sub>
        <sub name="Full examples" link="textures-crossfade.html#idm139718407088448"/>
      </sub>
    </sub>
    <sub name="Animations" link="animations.html">
      <sub name="Introduction" link="animations.html#animations-introduction">
        <sub name="High level overview" link="animations.html#idm139718412527888"/>
        <sub name="Alphas" link="animations.html#animations-introduction-alphas"/>
        <sub name="Clutter's animation API" link="animations.html#animations-introduction-api"/>
      </sub>
      <sub name="Inverting Animations" link="animations-inversion.html">
        <sub name="Problem" link="animations-inversion.html#idm139718408705856"/>
        <sub name="Solution" link="animations-inversion.html#idm139718408704544"/>
        <sub name="Discussion" link="animations-inversion.html#idm139718407702800"/>
      </sub>
      <sub name="Fading an actor out of or into view" link="animations-fading.html">
        <sub name="Problem" link="animations-fading.html#idm139718407694144"/>
        <sub name="Solution" link="animations-fading.html#idm139718407692832"/>
        <sub name="Discussion" link="animations-fading.html#idm139718407675648"/>
      </sub>
      <sub name="Rotating an actor" link="animations-rotating.html">
        <sub name="Problem" link="animations-rotating.html#idm139718407672192"/>
        <sub name="Solution" link="animations-rotating.html#idm139718407667616"/>
        <sub name="Discussion" link="animations-rotating.html#idm139718407640336">
          <sub name="Setting the rotation center for an animation" link="animations-rotating.html#idm139718407638816">
            <sub name="Setting a rotation center inside an actor" link="animations-rotating.html#idm139718407636432"/>
            <sub name="Setting the rotation center outside an actor" link="animations-rotating.html#idm139718407620336"/>
          </sub>
          <sub name="Direction of rotation" link="animations-rotating.html#animations-rotating-discussion-direction"/>
          <sub name="Apparent vs. actual rotation" link="animations-rotating.html#idm139718407585824"/>
          <sub name="Orientation of rotation axes" link="animations-rotating.html#idm139718407582016"/>
        </sub>
        <sub name="Full example" link="animations-rotating.html#idm139718407578752"/>
      </sub>
      <sub name="Creating complex animations with&#10;    ClutterAnimator" link="animations-complex.html">
        <sub name="Problem" link="animations-complex.html#idm139718407568592"/>
        <sub name="Solution" link="animations-complex.html#idm139718407566464"/>
        <sub name="Discussion" link="animations-complex.html#animations-complex-discussion">
          <sub name="Understanding keys and key frames" link="animations-complex.html#animations-complex-discussion-keys"/>
          <sub name="Why ClutterAnimator?" link="animations-complex.html#animations-complex-why-clutteranimator"/>
        </sub>
        <sub name="Full example" link="animations-complex.html#idm139718406530864"/>
      </sub>
      <sub name="Reusing a complex animation on different actors" link="animations-reuse.html">
        <sub name="Problem" link="animations-reuse.html#animations-reuse-problem"/>
        <sub name="Solution" link="animations-reuse.html#animations-reuse-solution"/>
        <sub name="Discussion" link="animations-reuse.html#animations-reuse-discussion">
          <sub name="One animation vs. many" link="animations-reuse.html#animations-reuse-discussion-one-or-many"/>
          <sub name="Caveats about animating a rig instead of an actor" link="animations-reuse.html#animations-reuse-discussion-rig-not-actor"/>
        </sub>
        <sub name="Full example" link="animations-reuse.html#animations-reuse-examples"/>
      </sub>
      <sub name="Moving actors" link="animations-moving.html">
        <sub name="Problem" link="animations-moving.html#idm139718406446864"/>
        <sub name="Solutions" link="animations-moving.html#idm139718406442496">
          <sub name="Solution 1: Implicit animations" link="animations-moving.html#idm139718406439440"/>
          <sub name="Solution 2: ClutterState" link="animations-moving.html#idm139718406434304"/>
          <sub name="Solution 3: ClutterAnimator" link="animations-moving.html#idm139718406428432"/>
        </sub>
        <sub name="Discussion" link="animations-moving.html#idm139718406420832">
          <sub name="Movement can take an actor &quot;outside&quot; its container" link="animations-moving.html#idm139718406420192"/>
          <sub name="Anchor points can affect movement" link="animations-moving.html#idm139718406417248"/>
          <sub name="Actors can move in the z axis" link="animations-moving.html#idm139718406395728"/>
          <sub name="Movement is affected by constraints" link="animations-moving.html#idm139718406384928"/>
        </sub>
        <sub name="Full examples" link="animations-moving.html#animations-moving-examples"/>
      </sub>
      <sub name="Looping an animation" link="animations-looping.html">
        <sub name="Problem" link="animations-looping.html#idm139718406340608"/>
        <sub name="Solutions" link="animations-looping.html#idm139718406339376">
          <sub name="Solution 1: looping an implicit animation" link="animations-looping.html#animations-looping-solutions-implicit"/>
          <sub name="Solution 2: looping with ClutterAnimator" link="animations-looping.html#idm139718406324240"/>
          <sub name="Solution 3: looping with ClutterState" link="animations-looping.html#idm139718406312288"/>
        </sub>
        <sub name="Discussion" link="animations-looping.html#idm139718406293904">
          <sub name="Looping a fixed number of times" link="animations-looping.html#idm139718406287840"/>
          <sub name="Creating a &quot;closed loop&quot; with an implicit animation" link="animations-looping.html#animations-looping-discussion-closed-loop"/>
        </sub>
        <sub name="Full examples" link="animations-looping.html#animations-looping-examples"/>
      </sub>
      <sub name="Animated scaling" link="animations-scaling.html">
        <sub name="Problem" link="animations-scaling.html#idm139718406252016"/>
        <sub name="Solution" link="animations-scaling.html#idm139718406248608"/>
        <sub name="Discussion" link="animations-scaling.html#idm139718406241824">
          <sub name="Scaling vs. resizing" link="animations-scaling.html#idm139718406231376"/>
          <sub name="Scaling, layouts and containers" link="animations-scaling.html#idm139718406221632"/>
          <sub name="Setting the scale center" link="animations-scaling.html#idm139718406218272"/>
        </sub>
        <sub name="Full examples" link="animations-scaling.html#animations-scaling-examples"/>
      </sub>
      <sub name="Animating an actor along a curved path" link="animations-path.html">
        <sub name="Problem" link="animations-path.html#idm139718406181184"/>
        <sub name="Solution" link="animations-path.html#idm139718406179904"/>
        <sub name="Discussion" link="animations-path.html#idm139718406164736">
          <sub name="Other ways to animate along a path" link="animations-path.html#idm139718406150464"/>
        </sub>
        <sub name="Full examples" link="animations-path.html#animations-path-examples"/>
      </sub>
    </sub>
    <sub name="Text" link="text.html">
      <sub name="Introduction" link="text.html#text-introduction"/>
      <sub name="Drawing a shadow under the text" link="text-shadow.html">
        <sub name="Problem" link="text-shadow.html#idm139718412567856"/>
        <sub name="Solution" link="text-shadow.html#idm139718409759152"/>
        <sub name="Discussion" link="text-shadow.html#idm139718412634480"/>
        <sub name="Full example" link="text-shadow.html#idm139718409907792"/>
      </sub>
    </sub>
    <sub name="Layout management" link="layouts.html">
      <sub name="Introduction" link="layouts.html#layouts-introduction">
        <sub name="Using layouts" link="layouts.html#idm139718406579872"/>
        <sub name="Types of layout manager" link="layouts.html#layouts-introduction-manager-types"/>
        <sub name="Layout properties" link="layouts.html#layouts-introduction-layout-properties">
          <sub name="Setting layout properties" link="layouts.html#idm139718406873376"/>
        </sub>
        <sub name="Not using layout managers" link="layouts.html#layouts-introduction-not-using-layout-managers">
          <sub name="Manual positioning and alignment" link="layouts.html#idm139718406859456"/>
          <sub name="Using ClutterConstraint" link="layouts.html#idm139718406856336"/>
        </sub>
      </sub>
      <sub name="Stacking actors on top of each other" link="layouts-stacking.html">
        <sub name="Problem" link="layouts-stacking.html#idm139718406847488"/>
        <sub name="Solution" link="layouts-stacking.html#layouts-stacking-solution"/>
        <sub name="Discussion" link="layouts-stacking.html#idm139718409138928">
          <sub name="Setting and changing alignment" link="layouts-stacking.html#idm139718406839568"/>
          <sub name="Size requisitioning" link="layouts-stacking.html#layouts-stacking-size-requisitioning"/>
          <sub name="Depth ordering" link="layouts-stacking.html#idm139718406821792"/>
          <sub name="Other ways to stack actors" link="layouts-stacking.html#idm139718406817840"/>
        </sub>
        <sub name="Full examples" link="layouts-stacking.html#idm139718406811488"/>
      </sub>
      <sub name="Binding the size of one actor to the size of another" link="layouts-bind-constraint.html">
        <sub name="Problem" link="layouts-bind-constraint.html#idm139718406797664"/>
        <sub name="Solution" link="layouts-bind-constraint.html#idm139718406793424"/>
        <sub name="Discussion" link="layouts-bind-constraint.html#idm139718406776112">
          <sub name="Another way to bind actors' sizes together" link="layouts-bind-constraint.html#idm139718406763552"/>
        </sub>
        <sub name="Full examples" link="layouts-bind-constraint.html#idm139718406756704"/>
      </sub>
      <sub name="Arranging actors in a single row or column" link="layouts-box.html">
        <sub name="Problem" link="layouts-box.html#idm139718406740960"/>
        <sub name="Solution" link="layouts-box.html#idm139718406736864"/>
        <sub name="Discussion" link="layouts-box.html#idm139718406724048">
          <sub name="Layout properties" link="layouts-box.html#idm139718406720528">
            <sub name="ClutterBoxLayout properties" link="layouts-box.html#idm139718406714016"/>
            <sub name="Child properties" link="layouts-box.html#idm139718406693392"/>
          </sub>
          <sub name="Animating layout changes" link="layouts-box.html#layouts-box-animating-layout-changes"/>
        </sub>
        <sub name="Full examples" link="layouts-box.html#idm139718406664240"/>
      </sub>
    </sub>
    <sub name="Script" link="script.html">
      <sub name="Introduction" link="script.html#script-introduction">
        <sub name="Basic principles of ClutterScript" link="script.html#idm139718411393024"/>
        <sub name="Data types" link="script.html#script-introduction-data-types"/>
      </sub>
      <sub name="Defining a user interface with JSON" link="script-ui.html">
        <sub name="Problem" link="script-ui.html#idm139718408735264"/>
        <sub name="Solution" link="script-ui.html#idm139718412837712"/>
        <sub name="Discussion" link="script-ui.html#idm139718412818416"/>
      </sub>
      <sub name="Connecting to signals in ClutterScript" link="script-signals.html">
        <sub name="Problem" link="script-signals.html#idm139718412814576"/>
        <sub name="Solution" link="script-signals.html#idm139718412813152"/>
        <sub name="Discussion" link="script-signals.html#script-signals-discussion">
          <sub name="Options for connecting signals to handlers" link="script-signals.html#idm139718406097328"/>
          <sub name="Writing handler functions" link="script-signals.html#script-signals-discussion-writing-handlers"/>
          <sub name="Passing objects to handler functions" link="script-signals.html#idm139718406080848"/>
        </sub>
        <sub name="Full examples" link="script-signals.html#idm139718406071392"/>
      </sub>
      <sub name="Connecting ClutterState states in ClutterScript" link="script-state.html">
        <sub name="Problem" link="script-state.html#idm139718406058400"/>
        <sub name="Solution" link="script-state.html#idm139718406056640"/>
        <sub name="Discussion" link="script-state.html#idm139718406048112"/>
        <sub name="Full examples" link="script-state.html#idm139718406032704"/>
      </sub>
    </sub>
    <sub name="Effects" link="effects.html">
      <sub name="Introduction" link="effects.html#effects-introduction">
        <sub name="Creating effects using the abstract effect classes" link="effects.html#idm139718408165520"/>
        <sub name="Using the built-in effects" link="effects.html#effects-introduction-using-the-built-in-effects"/>
      </sub>
      <sub name="Changing an actor's paint sequence using&#10;    ClutterEffect" link="effects-basic.html">
        <sub name="Problem" link="effects-basic.html#idm139718406617552"/>
        <sub name="Solution" link="effects-basic.html#idm139718405981536"/>
        <sub name="Discussion" link="effects-basic.html#idm139718405944800">
          <sub name="Effect properties" link="effects-basic.html#effects-basic-discussion-properties"/>
        </sub>
        <sub name="Full example" link="effects-basic.html#effects-basic-example">
          <sub name="CbBackgroundEffect" link="effects-basic.html#effects-basic-example-cbbackgroundeffect"/>
          <sub name="CbBorderEffect" link="effects-basic.html#effects-basic-example-cbbordereffect"/>
          <sub name="Application" link="effects-basic.html#effects-basic-example-application"/>
        </sub>
      </sub>
      <sub name="Creating and animating a custom ClutterDeformEffect" link="effects-custom-deform.html">
        <sub name="Problem" link="effects-custom-deform.html#idm139718405864320"/>
        <sub name="Solution" link="effects-custom-deform.html#effects-custom-deform-solution"/>
        <sub name="Discussion" link="effects-custom-deform.html#effects-custom-deform-discussion">
          <sub name="Customising the back material" link="effects-custom-deform.html#idm139718405816960"/>
          <sub name="Animating a custom deform effect" link="effects-custom-deform.html#effects-custom-deform-discussion-animating"/>
          <sub name="Tiles" link="effects-custom-deform.html#effects-custom-deform-discussion-tiles"/>
        </sub>
        <sub name="Full example" link="effects-custom-deform.html#idm139718405778416"/>
      </sub>
    </sub>
    <sub name="Contributing to this document" link="contributing.html"/>
  </chapters>
  <functions/>
</book>
