An Effect implementation might override the paint volume of the actor to
which it is applied to. The get_paint_volume() virtual function should
be added to the Effect class vtable so that any effect can get the
current paint volume and update it.
The clutter_actor_get_paint_volume() function becomes context aware, and
does the right thing if called from within a ClutterEffect pre_paint()
or post_paint() implementation, by allowing all effects in the chain up
to the caller to modify the paint volume.
ClutterEffect is an abstract class that should be used to apply effects
on generic actors.
The ClutterEffect class just defines what an effect should implement; it
could be defined as an interface, but we might want to add some default
behavior dependent on the internal state at a later point.
The effect API applies to any actor, so we need to provide a way to
assign an effect to an actor, and let ClutterActor call the Effect
methods during the paint sequence.
Once an effect is attached to an actor we will perform the paint in this
order:
• Effect::pre_paint()
• Actor::paint signal emission
• Effect::post_paint()
Since an effect might collide with the Shader class, we either allow a
shader or an effect for the time being.
The Effects API and all related symbols have been superceded by
the newly added Animation API and clutter_actor_animate().
This commit removes the Effects implementation, the documentation
and the interactive test/example code.
* clutter/clutter-path.h:
* clutter/clutter-path.c: Implementation of new ClutterPath object
to represent a path combining straight line and bezier curve
elements.
* clutter/clutter.h: Include clutter-path.h and remove
clutter-behaviour-bspline.h
* tests/interactive/test-threads.c (test_threads_main):
* tests/interactive/test-script.c:
* tests/interactive/test-behave.c (test_behave_main): Use new path
API
* clutter/clutter-effect.c: Use the new ClutterBehaviourPath API.
* clutter/clutter-bezier.h:
* clutter/clutter-bezier.c: Moved bezier curve handling code out
from clutter-behaviour-bspline.c to a separate file.
* clutter/clutter-behaviour-path.h:
* clutter/clutter-behaviour-path.c: Reimplemented to work with a
ClutterPath
* clutter/clutter-behaviour-bspline.h:
* clutter/clutter-behaviour-bspline.c: Removed
* clutter/Makefile.am: Add clutter-path and clutter-bezier, remove
clutter-behaviour-bspline.
* tests/conform/test-path.c: New automatic test for ClutterPath
consistency
* tests/conform/test-conform-main.c (main): Add test_path
* tests/conform/Makefile.am (test_conformance_SOURCES): Add
test-path.c
* clutter/clutter-sections.txt: Add ClutterPath docs
* clutter/clutter.types:
* clutter/clutter-docs.xml:
* doc/reference/clutter/clutter-animation-tutorial.xml: Remove
mention of ClutterBehaviourBspline
* clutter/clutter-marshal.list: Add VOID:UINT
* clutter/clutter-effect.c:
(clutter_effect_closure_destroy): Do not remove the actor
from the behaviour; the behaviour is an internal detail of the
effect, and it will remove the actors anyway when finalized
when g_object_unref() is called. This should guard against
actors being destroyed while an effect is running.
* clutter.symbols: Add new ClutterBehaviourScale setters.
* clutter/clutter-behaviour-scale.[ch]: Split the scaling factors
on both axis. Add setters for all the behaviour properties.
* clutter/clutter-effect.h:
* clutter/clutter-effect.c (clutter_effect_scale): Split the
final scale factor to match the ClutterBehaviourScale changes. (#709)
* tests/test-actors.c:
* tests/test-effects.c:
* tests/test-rotate.c:
* tests/test-scale.c: Update after API change.
* clutter/clutter-effect.c (clutter_effect_rotate): Make the
rotate effect work on the passed axis, instead of hardcoding
the X axis. (#700, Neil Roberts)
* clutter/clutter-effect.[ch]: Add clutter_effect_template_construct()
function, for language bindings that need to set the alpha function
but cannot call the clutter_effect_template_new() ctor themselves.
* clutter/clutter-effect.[ch]: Update the effects API to remove
the start value for most of them.
(clutter_effect_move): Make it a simple "move from current
position to new coordinates" effect.
(clutter_effect_path): Rename from clutter_effect_move().
(clutter_effect_rotate): Sync up with the new actor rotation API.
* tests/test-effects.c: Regression test for the effects.
* tests/Makefile.am: Build glue for test-effects
* tests/test-behave.c: Emulate a full ramp by using a looping
timeline changing its direction when reaching the last frame.
* clutter/clutter-actor.c::
* clutter/clutter-behaviour-opacity.c:
* clutter/clutter-clone-texture.c:
* clutter/clutter-effect.c:
* clutter/clutter-label.c: Remove the usage of G_PARAM_CONSTRUCT
without an override for the ::construct virtual function; using
G_PARAM_CONSTRUCT to set the default value of a property is not
the recommended approach; default values are set inside the
instance init function.
(clutter_actor_set_rotation): swapped axis and angle around,
the new argument order is: (axis, angle, x, y, z). Also removed
deprecated rotation functions from header.
Updated use of clutter_actor_set_rotation? in the following files:
* clutter/clutter-behaviour-rotate.c:
* clutter/clutter-effect.c:
* tests/test-actors.c:
* tests/test-project.c:
* clutter.symbols: Update exported symbols.
* clutter/clutter-actor.[ch]: Remove clutter_actor_rotate_*
and clutter_actor_get_rx* and provide a simpler rotation API:
clutter_actor_set_rotation() and clutter_actor_get_rotation().
* clutter/clutter-deprecated.h: Deprecate the old rotation API.
* clutter/clutter-behaviour-bspline.c:
* clutter/clutter-behaviour-rotate.c:
* clutter/clutter-effect.c: Update internal usage of the
rotation API.
* tests/test-project.c: Ditto as above.
* clutter/clutter-effect.h:
* clutter/clutter-effect.c:
(clutter_effect_template_new_for_duration): Add a simple constructor
for implicitly creating a ClutterTimeline with a given duration.
* clutter/clutter-actor.c:
* clutter/clutter-event.h:
* clutter/clutter-main.c:
* clutter/clutter-stage.c:
* clutter/clutter-stage.h:
* clutter/glx/clutter-backend-glx.c:
* clutter/glx/clutter-backend-glx.h:
* clutter/glx/clutter-event-glx.c:
* clutter/glx/clutter-stage-glx.c:
* clutter/glx/clutter-stage-glx.h:
Add initial support for stage state events.
Fix fullscreening for an already mapped stage.
* tests/test-events.c:
Print out info from the above. Blue button now toggles
fullscreen.
* clutter/clutter-effect.c:
* clutter/clutter-effect.h:
Add a setting for templates to ref or clone underlying
timelines. (As to improve sync issues like those in foofone)
* tests/test-timeline.c:
Also add completed signals.
* clutter/cogl/gles/cogl.c: (cogl_texture_image_2d):
* configure.ac:
Forward port from stable branch. RGB Image fixes gles
and check for lower case libgles_cm.
The ownership of the ClutterAlpha object is transferred to the ClutterBehaviour
used by the effect; we just need to unref the behaviour to make the alpha
object disappear.
Some of the API landed in trunk has been backported to the stable branch
after testing. This patch updates the Since: tag in the API reference to
reflect the time when the API was first added to a release.
* clutter/clutter-actor.[ch]: Use GInitiallyUnowned
as the parent structure in the ClutterActor structure
definition; somehow, this has escaped everyone attention
in one year and a half. Luckily, GInitiallyUnowned is
as big as GObject.
(clutter_actor_get_abs_position_units),
(clutter_actor_get_abs_position): Check parameters.
* clutter/clutter-texture.h: Unmangle the flags enum
type declaration, so that dumb parsers like h2defs.py
are not fooled.
* clutter/clutter-behaviour-ellipse.[ch]:
* clutter/clutter-effect.c: Fix some documentation
issues and make gtk-doc happy.
* clutter/clutter-behaviour-rotate.c:
* clutter/clutter-behaviour-rotate.h:
Split 'center' prop into 3 seperate props for each axis.
Use clutter_behaviour_actors_foreach() rather than
clutter_behaviour_get_actors() to avoid copying list.
Call fixed point rotation funcs internally.
* clutter/clutter-effect.c:
* clutter/clutter-effect.h:
Add new simple rotation based effect funcs.
Make ClutterEffectTemplate use a pointer to the private data to avoid
a type check each time it dereferences the ClutterEffectTemplatePrivate
structure pointer.
Clean up the header file for parsing purposes.
Add a description for the gtk-doc reference.
* clutter/clutter-behaviour-ellipse.c:
Remove uneeded knot signal
* clutter/clutter-behaviour-path.c:
Fix so knot signal is emitted only when a knot is reached.
* clutter/clutter-effect.c:
* clutter/clutter-effect.h:
Add a scale effect.
* configure.ac:
* doc/manual/Makefile.am:
* doc/manual/clutter-manual.xml.in:
* doc/manual/manual.xsl:
* doc/manual/style.css:
Add various bits for application developers manual.