Symbian3/SDK/Source/GUID-829761B6-ECF7-5E15-A475-AEE357687067.dita
author Dominic Pinkman <dominic.pinkman@nokia.com>
Fri, 11 Jun 2010 12:39:03 +0100
changeset 8 ae94777fff8f
permissions -rw-r--r--
Week 23 contribution of SDK documentation content. See release notes for details. Fixes bugs Bug 2714, Bug 462.

<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (c) 2007-2010 Nokia Corporation and/or its subsidiary(-ies) All rights reserved. -->
<!-- This component and the accompanying materials are made available under the terms of the License 
"Eclipse Public License v1.0" which accompanies this distribution, 
and is available at the URL "http://www.eclipse.org/legal/epl-v10.html". -->
<!-- Initial Contributors:
    Nokia Corporation - initial contribution.
Contributors: 
-->
<!DOCTYPE concept
  PUBLIC "-//OASIS//DTD DITA Concept//EN" "concept.dtd">
<concept id="GUID-829761B6-ECF7-5E15-A475-AEE357687067" xml:lang="en"><title>Animation
overview</title><prolog><metadata><keywords/></metadata></prolog><conbody>
<section id="GUID-1FDB9A85-EA5C-4FA9-902C-A2DD7C23EE28"><title>Purpose</title> <p>The animation component is a framework
that provides support to build animated graphics applications. It provides
the basic data types that allow animations to be incorporated into the normal
drawing of a window from the client, or to be managed on the server as a sprite. </p> </section>
<section id="GUID-81E07DE3-E680-410C-A22D-809D72E9CD6D"><title>Required background</title> <p><xref href="GUID-2C443E6F-BC3D-5252-8098-9F850AA88A35.dita">Windows
server</xref> component knowledge is recommended before using this component. </p> </section>
<section id="GUID-DC47F478-274F-4669-AAF4-C6BD04D7D7D1"><title>Key concepts</title> <p>The component has the following key
concepts: </p> <dl>
<dlentry>
<dt>Animation</dt>
<dd><p>The animation is a fairly abstract interface owned by a client application.
The interface is independent of the source of the data it uses, as the data
providers are responsible for providing data to the animation. </p> </dd>
</dlentry>
<dlentry>
<dt>Animator</dt>
<dd><p>The animator represents each data type supported by the animation framework.
It can handle data interpretation, timing and control of the animation. An
animator is not be visible to the owner of the animation, but is controlled
through it using a standard interface. The animators can either reside on
the client or on the server. Each animation selects an animator plug-in to
be used by providing an appropriate string obtained from the data provider. </p> </dd>
</dlentry>
<dlentry>
<dt>Data provider</dt>
<dd><p>A data provider is a generic interface to handle different kinds of
data, which has different structures and behaviours, for example, GIFs and
SVG (Scalable Vector Graphics). Animations access the data providers they
own through an observer interface, which reports events to the animation.
The interface in turn reports these events to the respective animators. </p> </dd>
</dlentry>
<dlentry>
<dt>Observer</dt>
<dd><p>An observer acts as an interface and is responsible for reporting events.
The animation framework provides two such observers: a data provider observer,
and an animation observer. The data provider observer is an interface between
the animation and the data provider. Using this observer the animation can
receive data and events from the data provider. The animation observer is
an interface between the animation and the client application, and is used
to report events to the client application. In Symbian OS v9.1, the animation
observer is implemented to report only errors to the client application. </p> </dd>
</dlentry>
</dl> </section>
<section id="GUID-71398AF6-16D5-4FC5-9342-44304C0A3066"><title>Architectural relationships</title> <p>The animation component
provides a set of abstract classes with some basic functionality required
for any type of animation. Implementors have to derive their own classes using
these abstract classes to support specific animation types such as bitmap
animation, sprite animation and so on. </p> <p>The animation framework also
provides concrete implementations of the abstract classes. The concrete implementations
of the <codeph>CAnimation</codeph> class are: </p> <ul>
<li id="GUID-0E148B3E-F6D0-5AC0-B721-FB3BECD432F7"><p> <b>CBasicAnimation</b>  </p> <p>This
is a client-side animation class which can also act as a data provider observer
and an animation drawer. It provides a bitmap and a mask on which the animation
is submitted. This class establishes a session with the windows server before
submitting the animation to a particular window. </p> </li>
<li id="GUID-4E7B61AF-0FF0-5EBF-A46B-F42D747CF866"><p> <b>CSpriteAnimation</b>  </p> <p>This
is a server-side animation class for sprite based animations. The client has
limited control over the animation, as sprites are server-side graphic objects
and are controlled by the server. This class makes use of the windows server
animation API to submit sprite animations. For more information on these APIs,
refer to <xref href="GUID-2C443E6F-BC3D-5252-8098-9F850AA88A35.dita">Using Window
Server (WSERV)</xref>. </p> </li>
<li id="GUID-3514D632-4090-51BD-AD26-B98CA6B31ADC"><p> <b>CAnimationGroup</b>  </p> <p>This
class is not an animation class by itself, but is a collection of animations
grouped together. It provides access to an array of animation references and
handles all synchronisation issues among the animations in the group, provided
all the animations are of the same type. For example, if a set of client-side
animations are grouped together, they respond to commands collectively in
synchronisation with each other. If the group includes both sprite and client-side
animations, they will respond to commands collectively in asynchronous mode. </p> </li>
</ul> <p>The framework provides the following concrete implementations for
the other two abstract classes, <codeph>CAnimationDataProvider</codeph> and <codeph>CAnimator</codeph>: </p> <ul>
<li id="GUID-C7FB57BB-25C4-5813-9C0A-B71433999EB3"><p> <b>CICLAnimationDataProvider</b>  </p> <p>This
class interprets various data types including animated GIFs using the <xref href="GUID-6B478F86-1EC4-5F78-B7C8-C2E5FCD974B6.dita">Image Conversion Library</xref> (ICL).
It provides data to the animation class in the form of individual frames using
the <codeph>CAnimationFrame</codeph> object which contains a bitmap, a mask,
and frame information. </p> </li>
<li id="GUID-650EDA72-3CC2-5A08-8E6A-F57755B6EEAE"><p> <b>CBitmapAnimator</b>  </p> <p>This
class can handle fixed sequence of bitmap frames passed by the data provider. </p> </li>
</ul> </section>
<section id="GUID-20A5B4F1-586A-4ADC-96C5-E4CF49EC7DA9"><title>API summary</title> <p> </p> <table id="GUID-CA7854D0-7D1C-5BCD-B9E5-A1FB2198AE15">
<tgroup cols="2"><colspec colname="col0" colwidth="0.60*"/><colspec colname="col1" colwidth="1.40*"/>
<thead>
<row>
<entry>Class Name</entry>
<entry>Description</entry>
</row>
</thead>
<tbody>
<row>
<entry><p> <xref href="GUID-40CEAB8C-2202-3E88-929F-35DA5BD554A4.dita"><apiname>CAnimation</apiname></xref>  </p> </entry>
<entry><p>This is an abstract generic class which provides the basic functionality
for all types of animations. </p> </entry>
</row>
<row>
<entry><p> <xref href="GUID-AD71F0EC-EB49-3D46-BEEE-B8ECD30BDDEA.dita"><apiname>CAnimator</apiname></xref>  </p> </entry>
<entry><p>This is an abstract class, which represents each type of data supported
by the animation framework. This class is implemented as an ECOM plug-in. </p> </entry>
</row>
<row>
<entry><p> <xref href="GUID-CB96F59F-BEF9-3296-A80A-4E8E8BE354C6.dita"><apiname>CAnimationDataProvider</apiname></xref>  </p> </entry>
<entry><p>This is an abstract class, which takes the animation data and converts
it into a format recognized by the animator. </p> </entry>
</row>
<row>
<entry><p> <xref href="GUID-12B29886-1D43-37ED-8DC0-6F43D3E591E8.dita"><apiname>CBasicAnimation</apiname></xref>  </p> </entry>
<entry><p>This is a concrete implementation class of the <codeph>CAnimation</codeph> class.
This class is used for basic client-side animations. </p> </entry>
</row>
<row>
<entry><p> <xref href="GUID-6BB621FF-F799-357C-BEAC-9767D68E7D50.dita"><apiname>CSpriteAnimation</apiname></xref>  </p> </entry>
<entry><p>This is a concrete implementation class of the <codeph>CAnimation</codeph> class.
This class is used for sprite animations. </p> </entry>
</row>
</tbody>
</tgroup>
</table> </section>
<section id="GUID-65234329-B7A6-4A07-B32C-BB3B7D161F0C"><title>Typical uses</title> <p><b>Creating a basic animation </b> </p><p>The
animation framework can be used to create a basic client-side animation using
the <codeph>CBasicAnimation</codeph> class. You can also have your own implementation
for other type of animations. For more information, refer to <xref href="GUID-A97AD7EB-43C2-545A-9756-57D65A4905D9.dita">How
to create a basic animation</xref>. </p> <p><b>Creating a sprite animation </b> </p><p>The
animation framework supports server-side sprite animations using the <codeph>CSpriteAnimation</codeph> class.
The procedure to create a sprite animation is the same as that for creating
a basic client-side animation. The only difference between a client-side animation
and a sprite animation is that client-side animations are redrawn by the client
application. Whereas, for sprite animations redraws are handled automatically,
as they run in the window server's high priority thread. </p> </section>
</conbody><related-links>
<link href="GUID-A97AD7EB-43C2-545A-9756-57D65A4905D9.dita"><linktext>How to create
a basic animation</linktext></link>
<link href="GUID-0C4B86B5-530A-5839-86C1-46E7ABE281E0.dita"><linktext>Using Window
Server (WSERV)</linktext></link>
</related-links></concept>