74de3cfdf3
Add an effects chapter which gives a broad overview of the abstract classes in the effects API, plus a short example of how to apply one of the stock Clutter effects (ClutterColorizeEffect). The recipe explains how to create a custom ClutterDeformEffect to produce a page fold (code based on ClutterPageTurnEffect). The example code includes the effect class plus a small application to apply it to a texture.
267 lines
9.0 KiB
XML
267 lines
9.0 KiB
XML
<?xml version='1.0' encoding='UTF-8'?>
|
|
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
|
|
"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [
|
|
<!ENTITY appurl "http://www.clutter-project.org">
|
|
<!ENTITY docurl "http://docs.clutter-project.org/docs/clutter-cookbook">
|
|
<!ENTITY license_url "http://creativecommons.org/licenses/by-nc-sa/2.0/uk/">
|
|
<!ENTITY ebassi_mail "ebassi@linux.intel.com">
|
|
<!ENTITY elliot_mail "elliot.smith@intel.com">
|
|
<!ENTITY apiversion "@CLUTTER_API_VERSION@">
|
|
]>
|
|
|
|
<book lang="en"
|
|
xmlns:xi="http://www.w3.org/2003/XInclude">
|
|
<bookinfo>
|
|
<authorgroup>
|
|
<author>
|
|
<firstname>Emmanuele</firstname>
|
|
<surname>Bassi</surname>
|
|
<address><email>&ebassi_mail;</email></address>
|
|
</author>
|
|
<author>
|
|
<firstname>Elliot</firstname>
|
|
<surname>Smith</surname>
|
|
<address><email>&elliot_mail;</email></address>
|
|
</author>
|
|
</authorgroup>
|
|
<copyright>
|
|
<year>2009, 2010</year>
|
|
<holder>Intel Corporation</holder>
|
|
</copyright>
|
|
<legalnotice>
|
|
<para>Permission is granted to copy, distribute and/or modify this
|
|
document under the terms of the <ulink url="&license_url;">Creative
|
|
Commons Attribution-Non-Commercial-Share Alike 2.0 UK: England &
|
|
Wales</ulink> as published by Creative Commons.</para>
|
|
</legalnotice>
|
|
<title>The Clutter Cookbook</title>
|
|
<releaseinfo>for Clutter &apiversion;</releaseinfo>
|
|
</bookinfo>
|
|
|
|
<xi:include href="introduction.xml" />
|
|
<xi:include href="actors.xml" />
|
|
<xi:include href="events.xml" />
|
|
<xi:include href="textures.xml" />
|
|
<xi:include href="animations.xml" />
|
|
<xi:include href="text.xml" />
|
|
<xi:include href="layouts.xml" />
|
|
<xi:include href="script.xml" />
|
|
<xi:include href="effects.xml" />
|
|
|
|
<appendix id="contributing">
|
|
<title>Contributing to this document</title>
|
|
|
|
<para>This document is written in
|
|
<ulink url="http://docbook.org/">Docbook XML</ulink>. The source files
|
|
for this document are located in the subdirectory
|
|
<filename>doc/cookbook</filename> inside the Clutter source directory.</para>
|
|
|
|
<para>To maintain some degree of consistency, try to stick to the
|
|
following broad guidelines about how to write Docbook for this
|
|
cookbook:</para>
|
|
|
|
<itemizedlist>
|
|
<listitem>
|
|
<para>If adding a new recipe, use the
|
|
<filename>recipe-template.xml</filename> XML file as a basis.
|
|
You can find it in the <filename><clutter source>/doc/cookbook/</filename>
|
|
directory.</para>
|
|
</listitem>
|
|
<listitem>
|
|
<para>Try to indent your XML sensibly using 2 spaces per level
|
|
(we're not too strict, but some indentation helps reading
|
|
the source).</para>
|
|
</listitem>
|
|
<listitem>
|
|
<para>Stick to a column width of around 80 characters.</para>
|
|
</listitem>
|
|
<listitem>
|
|
<para>Use the <filename> element for file
|
|
and directory names.</para>
|
|
</listitem>
|
|
<listitem>
|
|
<para>Use the <property> element for property names
|
|
(e.g. GObject properties).</para>
|
|
</listitem>
|
|
<listitem>
|
|
<para>Use the <type> element for GObject class
|
|
names.</para>
|
|
</listitem>
|
|
<listitem>
|
|
<para>Use the <constant> element for C defines.</para>
|
|
</listitem>
|
|
<listitem>
|
|
<para>Use the <keycap> element for keys, where
|
|
you are referring to what's actually printed on the key, e.g.
|
|
<keycap>Shift</keycap>. If you're referring to the key some
|
|
other way (e.g. "the Control key"), don't use
|
|
<keycap>.</para>
|
|
</listitem>
|
|
<listitem>
|
|
<para>Use the <function> element for functions;
|
|
the style adopted is to give the function name followed by
|
|
empty brackets, e.g. <function>clutter_actor_set_size()</function>.
|
|
</para>
|
|
</listitem>
|
|
<listitem>
|
|
<para>Use the <note> element for asides which might
|
|
otherwise interrupt the flow of the recipe.</para>
|
|
</listitem>
|
|
<listitem>
|
|
<para>To include a video in a recipe, do the following:</para>
|
|
<itemizedlist>
|
|
<listitem>
|
|
<para>Make the video as short as is practical, and only include
|
|
the relevant Clutter window(s).</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>Use Ogg Theora for the encoding.</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>Put the file into the
|
|
<filename><clutter source>/doc/cookbook/videos</filename>
|
|
directory. The name should be in the format
|
|
<filename><section>-<recipe>-<identifier>.ogv</filename>.
|
|
For example: <filename>animations-fading-fade-out.ogv</filename>.</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>Add the name of the file to the <varname></varname>
|
|
in the cookbook's <filename>Makefile.am</filename>, e.g.</para>
|
|
|
|
<informalexample>
|
|
<programlisting>
|
|
<![CDATA[
|
|
VIDEO_FILES = \
|
|
videos/animations-fading-fade-out.ogv \
|
|
$(NULL)
|
|
]]>
|
|
</programlisting>
|
|
</informalexample>
|
|
|
|
<para>This ensures it gets included in the distribution and
|
|
installation.</para>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>Use an <inlinemediaobject> to include it in the
|
|
Docbook recipe file. It should look something like this:</para>
|
|
|
|
<informalexample>
|
|
<programlisting>
|
|
<![CDATA[
|
|
<inlinemediaobject>
|
|
<videoobject>
|
|
<videodata fileref="videos/animations-fading-in-then-out.ogv"/>
|
|
</videoobject>
|
|
<alt>
|
|
<para>Video showing an actor fading in then out using
|
|
<type>ClutterState</type></para>
|
|
</alt>
|
|
</inlinemediaobject>
|
|
]]>
|
|
</programlisting>
|
|
</informalexample>
|
|
|
|
<para>The <alt> tag provides the text which
|
|
is presented as a link to the file for users whose browser
|
|
doesn't support HTML 5 embedded video.</para>
|
|
</listitem>
|
|
</itemizedlist>
|
|
</listitem>
|
|
<listitem>
|
|
<para>To include a full code sample in a recipe (which can
|
|
be compiled into a runnable binary), do the following:</para>
|
|
|
|
<itemizedlist>
|
|
<listitem>
|
|
<para>Create a C code file in the
|
|
<filename><clutter source>/doc/cookbook/examples</filename>
|
|
directory. It should be a standalone C application (with
|
|
a <function>main()</function> etc.). The filename should be
|
|
in the format
|
|
<filename><section>-<recipe>.c</filename>; you
|
|
can add an optional identifier to the end if you have more
|
|
than one example for a recipe.</para>
|
|
|
|
<para>If you want to load image files into the application
|
|
(e.g. to demonstrate something with a texture), you can use
|
|
the <constant>TESTS_DATA_DIR</constant> variable in your C
|
|
code to reuse images in the Clutter <filename>tests</filename>
|
|
directory; this will be replaced with
|
|
<filename><clutter source>/tests/data</filename>
|
|
during the build. For example:</para>
|
|
|
|
<informalexample>
|
|
<programlisting>
|
|
<![CDATA[
|
|
clutter_texture_set_from_file (CLUTTER_TEXTURE (texture),
|
|
TESTS_DATA_DIR "/redhand.png",
|
|
&error);
|
|
]]>
|
|
</programlisting>
|
|
</informalexample>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>Edit <filename>Makefile.am</filename>
|
|
in the <filename>cookbook/examples</filename> directory
|
|
so that the build recognises the new code; e.g. if
|
|
your C source file were called
|
|
<filename>fooing-barring.c</filename> you would do:</para>
|
|
|
|
<informalexample>
|
|
<programlisting>
|
|
<![CDATA[
|
|
noinst_PROGRAMS = \
|
|
textures-reflection \
|
|
text-shadow \
|
|
animations-rotating \
|
|
fooing-barring \
|
|
$(NULL)
|
|
|
|
fooing_barring_SOURCE = fooing-barring.c
|
|
]]>
|
|
</programlisting>
|
|
</informalexample>
|
|
|
|
<note>
|
|
<para>Note the second line is a new one to tell the
|
|
build where the source file is for your example.</para>
|
|
</note>
|
|
</listitem>
|
|
|
|
<listitem>
|
|
<para>Add a section at the end of your recipe which
|
|
XIncludes the sample code, e.g.:</para>
|
|
|
|
<informalexample>
|
|
<programlisting>
|
|
<![CDATA[
|
|
<section>
|
|
<title>Full example</title>
|
|
|
|
<example id="fooing-barring-example">
|
|
<title>Fooing with a bar</title>
|
|
<programlisting>
|
|
<xi:include href="examples/fooing-barring.c" parse="text">
|
|
<xi:fallback>a code sample should be here... but isn't</xi:fallback>
|
|
</xi:include>
|
|
</programlisting>
|
|
</example>
|
|
</section>
|
|
]]>
|
|
</programlisting>
|
|
</informalexample>
|
|
</listitem>
|
|
|
|
</itemizedlist>
|
|
</listitem>
|
|
</itemizedlist>
|
|
|
|
</appendix>
|
|
|
|
</book>
|