docs: Move to markdown
We're removing docbook tags in favour of the markdown syntax.
This commit is contained in:
@ -13,126 +13,95 @@
|
||||
* allocation of the actor to which they are applied by overriding the
|
||||
* #ClutterConstraintClass.update_allocation() virtual function.
|
||||
*
|
||||
* <refsect2 id="ClutterConstraint-usage">
|
||||
* <title>Using Constraints</title>
|
||||
* <para>Constraints can be used with fixed layout managers, like
|
||||
* #ClutterFixedLayout, or with actors implicitly using a fixed layout
|
||||
* manager, like #ClutterGroup and #ClutterStage.</para>
|
||||
* <para>Constraints provide a way to build user interfaces by using
|
||||
* relations between #ClutterActor<!-- -->s, without explicit fixed
|
||||
* positioning and sizing, similarly to how fluid layout managers like
|
||||
* #ClutterBoxLayout and #ClutterTableLayout lay out their children.</para>
|
||||
* <para>Constraints are attached to a #ClutterActor, and are available
|
||||
* for inspection using clutter_actor_get_constraints().</para>
|
||||
* <para>Clutter provides different implementation of the #ClutterConstraint
|
||||
* abstract class, for instance:</para>
|
||||
* <variablelist>
|
||||
* <varlistentry>
|
||||
* <term>#ClutterAlignConstraint</term>
|
||||
* <listitem><simpara>this constraint can be used to align an actor
|
||||
* to another one, on either the horizontal or the vertical axis; the
|
||||
* #ClutterAlignConstraint uses a normalized offset between 0.0 (the
|
||||
* top or the left of the source actor, depending on the axis) and
|
||||
* 1.0 (the bottom or the right of the source actor, depending on the
|
||||
* axis).</simpara></listitem>
|
||||
* </varlistentry>
|
||||
* <varlistentry>
|
||||
* <term>#ClutterBindConstraint</term>
|
||||
* <listitem><simpara>this constraint binds the X, Y, width or height
|
||||
* of an actor to the corresponding position or size of a source
|
||||
* actor; it can also apply an offset.</simpara></listitem>
|
||||
* </varlistentry>
|
||||
* <varlistentry>
|
||||
* <term>#ClutterSnapConstraint</term>
|
||||
* <listitem><simpara>this constraint "snaps" together the edges of
|
||||
* two #ClutterActor<!-- -->s; if an actor uses two constraints on
|
||||
* both its horizontal or vertical edges then it can also expand to
|
||||
* fit the empty space.</simpara></listitem>
|
||||
* </varlistentry>
|
||||
* </variablelist>
|
||||
* <example id="ClutterConstraint-usage-example">
|
||||
* <title>Usage of constraints</title>
|
||||
* <para>The example below uses various #ClutterConstraint<!-- -->s to
|
||||
* lay out three actors on a resizable stage. Only the central actor has
|
||||
* an explicit size, and no actor has an explicit position.</para>
|
||||
* <orderedlist>
|
||||
* <listitem><simpara>The #ClutterRectangle with #ClutterActor:name
|
||||
* <emphasis>layerA</emphasis> is explicitly sized to 100 pixels by 25
|
||||
* pixels, and it's added to the #ClutterStage;</simpara></listitem>
|
||||
* <listitem><simpara>two #ClutterAlignConstraint<!-- -->s are used
|
||||
* to anchor <emphasis>layerA</emphasis> to the center of the stage,
|
||||
* by using 0.5 as the alignment #ClutterAlignConstraint:factor on
|
||||
* both the X and Y axis.</simpara></listitem>
|
||||
* <listitem><simpara>the #ClutterRectangle with #ClutterActor:name
|
||||
* <emphasis>layerB</emphasis> is added to the #ClutterStage with
|
||||
* no explicit size;</simpara></listitem>
|
||||
* <listitem><simpara>the #ClutterActor:x and #ClutterActor:width
|
||||
* of <emphasis>layerB</emphasis> are bound to the same properties
|
||||
* of <emphasis>layerA</emphasis> using two #ClutterBindConstraint
|
||||
* objects, thus keeping <emphasis>layerB</emphasis> aligned to
|
||||
* <emphasis>layerA</emphasis>;</simpara></listitem>
|
||||
* <listitem><simpara>the top edge of <emphasis>layerB</emphasis> is
|
||||
* snapped together with the bottom edge of <emphasis>layerA</emphasis>;
|
||||
* the bottom edge of <emphasis>layerB</emphasis> is also snapped
|
||||
* together with the bottom edge of the #ClutterStage; an offset is
|
||||
* given to the two #ClutterSnapConstraint<!-- -->s to allow for some
|
||||
* padding; since <emphasis>layerB</emphasis> is snapped between two
|
||||
* different #ClutterActor<!-- -->s, its height is stretched to match
|
||||
* the gap;</simpara></listitem>
|
||||
* <listitem><simpara>the #ClutterRectangle with #ClutterActor:name
|
||||
* <emphasis>layerC</emphasis> mirrors <emphasis>layerB</emphasis>,
|
||||
* snapping the top edge of the #ClutterStage to the top edge of
|
||||
* <emphasis>layerC</emphasis> and the top edge of
|
||||
* <emphasis>layerA</emphasis> to the bottom edge of
|
||||
* <emphasis>layerC</emphasis>;</simpara></listitem>
|
||||
* </orderedlist>
|
||||
* <figure id="constraints-example">
|
||||
* <title>Constraints</title>
|
||||
* <graphic fileref="constraints-example.png" format="PNG"/>
|
||||
* </figure>
|
||||
* <programlisting>
|
||||
*<xi:include xmlns:xi="http://www.w3.org/2001/XInclude" href="../../../../examples/constraints.c" parse="text">
|
||||
* <xi:fallback>FIXME: MISSING XINCLUDE CONTENT</xi:fallback>
|
||||
*</xi:include>
|
||||
* </programlisting>
|
||||
* <para>You can try resizing interactively the #ClutterStage and verify
|
||||
* that the three #ClutterActor<!-- -->s maintain the same position and
|
||||
* size relative to each other, and to the #ClutterStage.</para>
|
||||
* </example>
|
||||
* <warning><para>It's important to note that Clutter does not avoid loops
|
||||
* or competing constraints; if two or more #ClutterConstraint<!-- -->s
|
||||
* are operating on the same positional or dimensional attributes of an
|
||||
* actor, or if the constraints on two different actors depend on each
|
||||
* other, then the behavior is undefined.</para></warning>
|
||||
* </refsect2>
|
||||
*
|
||||
* <refsect2 id="ClutterConstraint-implementation">
|
||||
* <title>Implementing a ClutterConstraint</title>
|
||||
* <para>Creating a sub-class of #ClutterConstraint requires the
|
||||
* implementation of the <function>update_allocation()</function>
|
||||
* virtual function.</para>
|
||||
* <para>The <function>update_allocation()</function> virtual function
|
||||
* is called during the allocation sequence of a #ClutterActor, and
|
||||
* allows any #ClutterConstraint attached to that actor to modify the
|
||||
* allocation before it is passed to the <function>allocate()</function>
|
||||
* implementation.</para>
|
||||
* <para>The #ClutterActorBox passed to the
|
||||
* <function>update_allocation()</function> implementation contains the
|
||||
* original allocation of the #ClutterActor, plus the eventual modifications
|
||||
* applied by the other #ClutterConstraint<!-- -->s.</para>
|
||||
* <note><para>Constraints are queried in the same order as they were
|
||||
* applied using clutter_actor_add_constraint() or
|
||||
* clutter_actor_add_constraint_with_name().</para></note>
|
||||
* <para>It is not necessary for a #ClutterConstraint sub-class to chain
|
||||
* up to the parent's implementation.</para>
|
||||
* <para>If a #ClutterConstraint is parametrized - i.e. if it contains
|
||||
* properties that affect the way the constraint is implemented - it should
|
||||
* call clutter_actor_queue_relayout() on the actor to which it is attached
|
||||
* to whenever any parameter is changed. The actor to which it is attached
|
||||
* can be recovered at any point using clutter_actor_meta_get_actor().</para>
|
||||
* </refsect2>
|
||||
*
|
||||
* #ClutterConstraint is available since Clutter 1.4
|
||||
*
|
||||
* ## Using Constraints
|
||||
*
|
||||
* Constraints can be used with fixed layout managers, like
|
||||
* #ClutterFixedLayout, or with actors implicitly using a fixed layout
|
||||
* manager, like #ClutterGroup and #ClutterStage.
|
||||
*
|
||||
* Constraints provide a way to build user interfaces by using
|
||||
* relations between #ClutterActors, without explicit fixed
|
||||
* positioning and sizing, similarly to how fluid layout managers like
|
||||
* #ClutterBoxLayout and #ClutterTableLayout lay out their children.
|
||||
*
|
||||
* Constraints are attached to a #ClutterActor, and are available
|
||||
* for inspection using clutter_actor_get_constraints().
|
||||
*
|
||||
* Clutter provides different implementation of the #ClutterConstraint
|
||||
* abstract class, for instance:
|
||||
*
|
||||
* - #ClutterAlignConstraint, a constraint that can be used to align
|
||||
* an actor to another one on either the horizontal or the vertical
|
||||
* axis, using a normalized value between 0 and 1.
|
||||
* - #ClutterBindConstraint, a constraint binds the X, Y, width or height
|
||||
* of an actor to the corresponding position or size of a source actor,
|
||||
* with or without an offset.
|
||||
* - #ClutterSnapConstraint, a constraint that "snaps" together the edges
|
||||
* of two #ClutterActors; if an actor uses two constraints on both its
|
||||
* horizontal or vertical edges then it can also expand to fit the empty
|
||||
* space.
|
||||
*
|
||||
* The [constraints example](https://git.gnome.org/browse/clutter/tree/examples/constraints.c?h=clutter-1.18)
|
||||
* uses various types of #ClutterConstraints to lay out three actors on a
|
||||
* resizable stage. Only the central actor has an explicit size, and no
|
||||
* actor has an explicit position.
|
||||
*
|
||||
* - The #ClutterActor with #ClutterActor:name `layerA` is explicitly
|
||||
* sized to 100 pixels by 25 pixels, and it's added to the #ClutterStage
|
||||
* - two #ClutterAlignConstraints are used to anchor `layerA` to the
|
||||
* center of the stage, by using 0.5 as the alignment #ClutterAlignConstraint:factor on
|
||||
* both the X and Y axis
|
||||
* - the #ClutterActor with #ClutterActor:name `layerB` is added to the
|
||||
* #ClutterStage with no explicit size
|
||||
* - the #ClutterActor:x and #ClutterActor:width of `layerB` are bound
|
||||
* to the same properties of `layerA` using two #ClutterBindConstraint
|
||||
* objects, thus keeping `layerB` aligned to `layerA`
|
||||
* - the top edge of `layerB` is snapped together with the bottom edge
|
||||
* of `layerA`; the bottom edge of `layerB` is also snapped together with
|
||||
* the bottom edge of the #ClutterStage; an offset is given to the two
|
||||
* #ClutterSnapConstraintss to allow for some padding; since `layerB` is
|
||||
* snapped between two different #ClutterActors, its height is stretched
|
||||
* to match the gap
|
||||
* - the #ClutterActor with #ClutterActor:name `layerC` mirrors `layerB`,
|
||||
* snapping the top edge of the #ClutterStage to the top edge of `layerC`
|
||||
* and the top edge of `layerA` to the bottom edge of `layerC`
|
||||
*
|
||||
* You can try resizing interactively the #ClutterStage and verify
|
||||
* that the three #ClutterActors maintain the same position and
|
||||
* size relative to each other, and to the #ClutterStage.
|
||||
*
|
||||
* It is important to note that Clutter does not avoid loops or
|
||||
* competing constraints; if two or more #ClutterConstraints
|
||||
* are operating on the same positional or dimensional attributes of an
|
||||
* actor, or if the constraints on two different actors depend on each
|
||||
* other, then the behavior is undefined.
|
||||
*
|
||||
* ## Implementing a ClutterConstraint
|
||||
*
|
||||
* Creating a sub-class of #ClutterConstraint requires the
|
||||
* implementation of the #ClutterConstraintClass.update_allocation()
|
||||
* virtual function.
|
||||
*
|
||||
* The `update_allocation()` virtual function is called during the
|
||||
* allocation sequence of a #ClutterActor, and allows any #ClutterConstraint
|
||||
* attached to that actor to modify the allocation before it is passed to
|
||||
* the actor's #ClutterActorClass.allocate() implementation.
|
||||
*
|
||||
* The #ClutterActorBox passed to the `update_allocation()` implementation
|
||||
* contains the original allocation of the #ClutterActor, plus the eventual
|
||||
* modifications applied by the other #ClutterConstraints, in the same order
|
||||
* the constraints have been applied to the actor.
|
||||
*
|
||||
* It is not necessary for a #ClutterConstraint sub-class to chain
|
||||
* up to the parent's implementation.
|
||||
*
|
||||
* If a #ClutterConstraint is parametrized - i.e. if it contains
|
||||
* properties that affect the way the constraint is implemented - it should
|
||||
* call clutter_actor_queue_relayout() on the actor to which it is attached
|
||||
* to whenever any parameter is changed. The actor to which it is attached
|
||||
* can be recovered at any point using clutter_actor_meta_get_actor().
|
||||
*/
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
|
Reference in New Issue
Block a user