mutter/doc/cookbook/clutter-cookbook.xml.in
2010-08-09 11:43:33 +01:00

265 lines
8.9 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 &amp;
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" />
<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>&lt;clutter source&gt;/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 &lt;filename&gt; element for file
and directory names.</para>
</listitem>
<listitem>
<para>Use the &lt;property&gt; element for property names
(e.g. GObject properties).</para>
</listitem>
<listitem>
<para>Use the &lt;type&gt; element for GObject class
names.</para>
</listitem>
<listitem>
<para>Use the &lt;constant&gt; element for C defines.</para>
</listitem>
<listitem>
<para>Use the &lt;keycap&gt; 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
&lt;keycap&gt;.</para>
</listitem>
<listitem>
<para>Use the &lt;function&gt; 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 &lt;note&gt; 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>&lt;clutter source&gt;/doc/cookbook/videos</filename>
directory. The name should be in the format
<filename>&lt;section&gt;-&lt;recipe&gt;-&lt;identifier&gt;.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 &lt;inlinemediaobject&gt; 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 &lt;alt&gt; 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>&lt;clutter source&gt;/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>&lt;section&gt;-&lt;recipe&gt;.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>&lt;clutter source&gt;/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>