Blob Blame History Raw
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Migrating from ClutterBehaviour: Clutter Reference Manual</title>
<meta name="generator" content="DocBook XSL Stylesheets Vsnapshot">
<link rel="home" href="index.html" title="Clutter Reference Manual">
<link rel="up" href="migration.html" title="Part IX. Migrating from previous version of Clutter">
<link rel="prev" href="using-cairo.html" title="Integration with Cairo">
<link rel="next" href="migrating-ClutterAnimation.html" title="Migrating from ClutterAnimation">
<meta name="generator" content="GTK-Doc V1.25.1 (XML mode)">
<link rel="stylesheet" href="style.css" type="text/css">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
<table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="5"><tr valign="middle">
<td width="100%" align="left" class="shortcuts"></td>
<td><a accesskey="h" href="index.html"><img src="home.png" width="16" height="16" border="0" alt="Home"></a></td>
<td><a accesskey="u" href="migration.html"><img src="up.png" width="16" height="16" border="0" alt="Up"></a></td>
<td><a accesskey="p" href="using-cairo.html"><img src="left.png" width="16" height="16" border="0" alt="Prev"></a></td>
<td><a accesskey="n" href="migrating-ClutterAnimation.html"><img src="right.png" width="16" height="16" border="0" alt="Next"></a></td>
</tr></table>
<div class="chapter">
<div class="titlepage"><div>
<div><h2 class="title">
<a name="migrating-ClutterBehaviour"></a>Migrating from ClutterBehaviour</h2></div>
<div><div class="author">
<h3 class="author">
<span class="firstname">Emmanuele</span> <span class="surname">Bassi</span>
</h3>
<div class="affiliation"><div class="address"><p><br>
          <code class="email">&lt;<a class="email" href="mailto:ebassilinux.intel.com">ebassi<em class="parameter"><code>linux.intel.com</code></em></a>&gt;</code><br>
        </p></div></div>
</div></div>
</div></div>
<p>The <a class="link" href="ClutterBehaviour.html" title="ClutterBehaviour"><span class="type">ClutterBehaviour</span></a> class and its sub-classes have been deprecated
  since Clutter 1.6. The animation framework provided by <a class="link" href="clutter-Implicit-Animations.html#ClutterAnimation"><span class="type">ClutterAnimation</span></a>,
  <a class="link" href="ClutterAnimator.html" title="ClutterAnimator"><span class="type">ClutterAnimator</span></a> and <a class="link" href="ClutterState.html" title="ClutterState"><span class="type">ClutterState</span></a> fully replaces all functionality from the
  <a class="link" href="ClutterBehaviour.html" title="ClutterBehaviour"><span class="type">ClutterBehaviour</span></a> classes.</p>
<p>Generally, animations using <a class="link" href="ClutterBehaviour.html" title="ClutterBehaviour"><span class="type">ClutterBehaviour</span></a> sub-classes can be
  effectively re-implemented just by using <a class="link" href="ClutterActor.html" title="ClutterActor"><span class="type">ClutterActor</span></a> properties.</p>
<p>Here is an example of an animation using a
  <a class="link" href="ClutterBehaviourOpacity.html" title="ClutterBehaviourOpacity"><span class="type">ClutterBehaviourOpacity</span></a> instance:</p>
<div class="informalexample">
  <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
    <tbody>
      <tr>
        <td class="listing_lines" align="right"><pre>1
2
3
4
5
6
7</pre></td>
        <td class="listing_code"><pre class="programlisting"><span class="usertype">ClutterTimeline</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">timeline </span><span class="symbol">=</span><span class="normal"> </span><span class="function"><a href="ClutterTimeline.html#clutter-timeline-new">clutter_timeline_new</a></span><span class="normal"> </span><span class="symbol">(</span><span class="number">250</span><span class="symbol">);</span>
<span class="usertype">ClutterAlpha</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">alpha </span><span class="symbol">=</span><span class="normal"> </span><span class="function"><a href="ClutterAlpha.html#clutter-alpha-new-full">clutter_alpha_new_full</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">timeline</span><span class="symbol">,</span><span class="normal"> <a href="ClutterTimeline.html#CLUTTER-LINEAR:CAPS">CLUTTER_LINEAR</a></span><span class="symbol">);</span>
<span class="usertype">ClutterBehaviour</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">behaviour </span><span class="symbol">=</span><span class="normal"> </span><span class="function"><a href="ClutterBehaviourOpacity.html#clutter-behaviour-opacity-new">clutter_behaviour_opacity_new</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">alpha</span><span class="symbol">,</span><span class="normal"> </span><span class="number">255</span><span class="symbol">,</span><span class="normal"> </span><span class="number">0</span><span class="symbol">);</span>

<span class="function"><a href="ClutterBehaviour.html#clutter-behaviour-apply">clutter_behaviour_apply</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">behaviour</span><span class="symbol">,</span><span class="normal"> some_actor</span><span class="symbol">);</span>

<span class="function"><a href="ClutterTimeline.html#clutter-timeline-start">clutter_timeline_start</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">timeline</span><span class="symbol">);</span></pre></td>
      </tr>
    </tbody>
  </table>
</div>

<p>The same effect can be achieved by using <a class="link" href="clutter-Implicit-Animations.html#clutter-actor-animate" title="clutter_actor_animate ()"><code class="function">clutter_actor_animate()</code></a> and
  the <a class="link" href="ClutterActor.html#ClutterActor--opacity" title="The “opacity” property"><span class="type">“opacity”</span></a> property:</p>
<div class="informalexample">
  <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
    <tbody>
      <tr>
        <td class="listing_lines" align="right"><pre>1
2
3
4</pre></td>
        <td class="listing_code"><pre class="programlisting"><span class="function"><a href="ClutterActor.html#clutter-actor-set-opacity">clutter_actor_set_opacity</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">some_actor</span><span class="symbol">,</span><span class="normal"> </span><span class="number">255</span><span class="symbol">);</span>
<span class="function"><a href="clutter-Implicit-Animations.html#clutter-actor-animate">clutter_actor_animate</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">some_actor</span><span class="symbol">,</span><span class="normal"> <a href="ClutterTimeline.html#CLUTTER-LINEAR:CAPS">CLUTTER_LINEAR</a></span><span class="symbol">,</span><span class="normal"> </span><span class="number">250</span><span class="symbol">,</span>
<span class="normal">                       </span><span class="string">"opacity"</span><span class="symbol">,</span><span class="normal"> </span><span class="number">0</span><span class="symbol">,</span>
<span class="normal">                       NULL</span><span class="symbol">);</span></pre></td>
      </tr>
    </tbody>
  </table>
</div>

<p><a class="link" href="ClutterBehaviour.html" title="ClutterBehaviour"><span class="type">ClutterBehaviour</span></a>s used for continuous animations with looping
  timelines can still be effectively replaced by looping animations; for
  instance, the following example of a "pulsating" actor using
  <a class="link" href="ClutterBehaviourScale.html" title="ClutterBehaviourScale"><span class="type">ClutterBehaviourScale</span></a>:</p>
<div class="informalexample">
  <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
    <tbody>
      <tr>
        <td class="listing_lines" align="right"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29</pre></td>
        <td class="listing_code"><pre class="programlisting"><span class="keyword">static</span><span class="normal"> </span><span class="type">void</span>
<span class="function">reverse_timeline</span><span class="normal"> </span><span class="symbol">(</span><span class="usertype">ClutterTimeline</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">timeline</span><span class="symbol">)</span>
<span class="cbracket">{</span>
<span class="normal">  </span><span class="usertype">ClutterTimelineDirection</span><span class="normal"> dir </span><span class="symbol">=</span><span class="normal"> </span><span class="function"><a href="ClutterTimeline.html#clutter-timeline-get-direction">clutter_timeline_get_direction</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">timeline</span><span class="symbol">);</span>

<span class="normal">  </span><span class="keyword">if</span><span class="normal"> </span><span class="symbol">(</span><span class="normal">dir </span><span class="symbol">==</span><span class="normal"> <a href="ClutterTimeline.html#CLUTTER-TIMELINE-FORWARD:CAPS">CLUTTER_TIMELINE_FORWARD</a></span><span class="symbol">)</span>
<span class="normal">    dir </span><span class="symbol">=</span><span class="normal"> <a href="ClutterTimeline.html#CLUTTER-TIMELINE-BACKWARD:CAPS">CLUTTER_TIMELINE_BACKWARD</a></span><span class="symbol">;</span>
<span class="normal">  </span><span class="keyword">else</span>
<span class="normal">    dir </span><span class="symbol">=</span><span class="normal"> <a href="ClutterTimeline.html#CLUTTER-TIMELINE-FORWARD:CAPS">CLUTTER_TIMELINE_FORWARD</a></span><span class="symbol">;</span>

<span class="normal">  </span><span class="function"><a href="ClutterTimeline.html#clutter-timeline-set-direction">clutter_timeline_set_direction</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">timeline</span><span class="symbol">,</span><span class="normal"> dir</span><span class="symbol">);</span>
<span class="cbracket">}</span>

<span class="normal">  </span><span class="usertype">ClutterTimeline</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">timeline </span><span class="symbol">=</span><span class="normal"> </span><span class="function"><a href="ClutterTimeline.html#clutter-timeline-new">clutter_timeline_new</a></span><span class="normal"> </span><span class="symbol">(</span><span class="number">500</span><span class="symbol">);</span>
<span class="normal">  </span><span class="usertype">ClutterAlpha</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">alpha </span><span class="symbol">=</span><span class="normal"> </span><span class="function"><a href="ClutterAlpha.html#clutter-alpha-new-full">clutter_alpha_new_full</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">timeline</span><span class="symbol">,</span><span class="normal"> <a href="ClutterTimeline.html#CLUTTER-LINEAR:CAPS">CLUTTER_LINEAR</a></span><span class="symbol">);</span>
<span class="normal">  </span><span class="usertype">ClutterBehaviour</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">behaviour</span><span class="symbol">;</span>

<span class="normal">  </span><span class="function">g_object_set</span><span class="normal"> </span><span class="symbol">(</span><span class="normal">some_actor</span><span class="symbol">,</span><span class="normal"> </span><span class="string">"scale-gravity"</span><span class="symbol">,</span><span class="normal"> <a href="ClutterBehaviourScale.html#CLUTTER-GRAVITY-CENTER:CAPS">CLUTTER_GRAVITY_CENTER</a></span><span class="symbol">,</span><span class="normal"> NULL</span><span class="symbol">);</span>
<span class="normal">  behaviour </span><span class="symbol">=</span><span class="normal"> </span><span class="function"><a href="ClutterBehaviourScale.html#clutter-behaviour-scale-new">clutter_behaviour_scale_new</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">alpha</span><span class="symbol">,</span>
<span class="normal">                                           </span><span class="number">1.0</span><span class="symbol">,</span><span class="normal"> </span><span class="number">2.0</span><span class="symbol">,</span>
<span class="normal">                                           </span><span class="number">1.0</span><span class="symbol">,</span><span class="normal"> </span><span class="number">2.0</span><span class="symbol">);</span>
<span class="normal">  </span><span class="function"><a href="ClutterBehaviour.html#clutter-behaviour-apply">clutter_behaviour_apply</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">behaviour</span><span class="symbol">,</span><span class="normal"> some_actor</span><span class="symbol">);</span>

<span class="normal">  </span><span class="function">g_signal_connect</span><span class="normal"> </span><span class="symbol">(</span><span class="normal">timeline</span><span class="symbol">,</span>
<span class="normal">                    </span><span class="string">"completed"</span><span class="symbol">,</span><span class="normal"> </span><span class="function">G_CALLBACK</span><span class="normal"> </span><span class="symbol">(</span><span class="normal">reverse_timeline</span><span class="symbol">),</span>
<span class="normal">                    NULL</span><span class="symbol">);</span>

<span class="normal">  </span><span class="function"><a href="ClutterTimeline.html#clutter-timeline-set-loop">clutter_timeline_set_loop</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">timeline</span><span class="symbol">);</span>
<span class="normal">  </span><span class="function"><a href="ClutterTimeline.html#clutter-timeline-start">clutter_timeline_start</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">timeline</span><span class="symbol">);</span></pre></td>
      </tr>
    </tbody>
  </table>
</div>

<p>The same effect can be achieved using a <a class="link" href="clutter-Implicit-Animations.html#ClutterAnimation"><span class="type">ClutterAnimation</span></a>:</p>
<div class="informalexample">
  <table class="listing_frame" border="0" cellpadding="0" cellspacing="0">
    <tbody>
      <tr>
        <td class="listing_lines" align="right"><pre>1
2
3
4
5
6
7
8
9
10</pre></td>
        <td class="listing_code"><pre class="programlisting"><span class="usertype">ClutterAnimation</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">animation </span><span class="symbol">=</span>
<span class="normal">  </span><span class="function"><a href="clutter-Implicit-Animations.html#clutter-actor-animate">clutter_actor_animate</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">some_actor</span><span class="symbol">,</span><span class="normal"> <a href="ClutterTimeline.html#CLUTTER-LINEAR:CAPS">CLUTTER_LINEAR</a></span><span class="symbol">,</span><span class="normal"> </span><span class="number">500</span><span class="symbol">,</span>
<span class="normal">                         </span><span class="string">"scale-x"</span><span class="symbol">,</span><span class="normal"> </span><span class="number">2.0</span><span class="symbol">,</span>
<span class="normal">                         </span><span class="string">"scale-y"</span><span class="symbol">,</span><span class="normal"> </span><span class="number">2.0</span><span class="symbol">,</span>
<span class="normal">                         </span><span class="string">"fixed::scale-gravity"</span><span class="symbol">,</span><span class="normal"> <a href="ClutterBehaviourScale.html#CLUTTER-GRAVITY-CENTER:CAPS">CLUTTER_GRAVITY_CENTER</a></span><span class="symbol">,</span>
<span class="normal">                         NULL</span><span class="symbol">);</span>

<span class="usertype">ClutterTimeline</span><span class="normal"> </span><span class="symbol">*</span><span class="normal">timeline </span><span class="symbol">=</span><span class="normal"> </span><span class="function"><a href="clutter-Implicit-Animations.html#clutter-animation-get-timeline">clutter_animation_get_timeline</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">animation</span><span class="symbol">);</span>
<span class="function"><a href="ClutterTimeline.html#clutter-timeline-set-repeat-count">clutter_timeline_set_repeat_count</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">timeline</span><span class="symbol">,</span><span class="normal"> </span><span class="symbol">-</span><span class="number">1</span><span class="symbol">);</span>
<span class="function"><a href="ClutterTimeline.html#clutter-timeline-set-auto-reverse">clutter_timeline_set_auto_reverse</a></span><span class="normal"> </span><span class="symbol">(</span><span class="normal">timeline</span><span class="symbol">,</span><span class="normal"> TRUE</span><span class="symbol">);</span></pre></td>
      </tr>
    </tbody>
  </table>
</div>

<p><a class="link" href="ClutterBehaviour.html" title="ClutterBehaviour"><span class="type">ClutterBehaviour</span></a> sub-classes can be applied to multiple actors, in
  order to share the duration and the easing mode. It is possible to use the
  same underlying <a class="link" href="ClutterTimeline.html" title="ClutterTimeline"><span class="type">ClutterTimeline</span></a> and <a class="link" href="ClutterAlpha.html" title="ClutterAlpha"><span class="type">ClutterAlpha</span></a> instances with
  <a class="link" href="clutter-Implicit-Animations.html#ClutterAnimation"><span class="type">ClutterAnimation</span></a> to achieve the same effect. Complex animations, spanning
  multiple actors, should use the <a class="link" href="ClutterAnimator.html" title="ClutterAnimator"><span class="type">ClutterAnimator</span></a> and <a class="link" href="ClutterState.html" title="ClutterState"><span class="type">ClutterState</span></a> classes
  instead.</p>
</div>
<div class="footer">
<hr>Generated by GTK-Doc V1.25.1</div>
</body>
</html>