From d903a79d8114e68db6bfbfed6c6f8d93b6e3abc9 Mon Sep 17 00:00:00 2001 From: Matthew Allum Date: Wed, 13 Feb 2008 16:46:07 +0000 Subject: [PATCH] 2008-02-13 Matthew Allum * Makefile.am: * clutter-docs.sgml: Add new appendix + FIXME for building * creating-your-own-behaviours.sgml: Add new initial doc on custom behaviour creation. * subclassing-ClutterActor.sgml: Add FIXME notes. --- doc/reference/ChangeLog | 10 +++ doc/reference/Makefile.am | 4 +- doc/reference/clutter-docs.sgml | 16 ++++ .../creating-your-own-behaviours.sgml | 76 +++++++++++++++++++ doc/reference/subclassing-ClutterActor.sgml | 15 ++++ 5 files changed, 120 insertions(+), 1 deletion(-) create mode 100644 doc/reference/creating-your-own-behaviours.sgml diff --git a/doc/reference/ChangeLog b/doc/reference/ChangeLog index 1f14ce5b2..7a037754c 100644 --- a/doc/reference/ChangeLog +++ b/doc/reference/ChangeLog @@ -1,3 +1,13 @@ +2008-02-13 Matthew Allum + + * Makefile.am: + * clutter-docs.sgml: + Add new appendix + FIXME for building + * creating-your-own-behaviours.sgml: + Add new initial doc on custom behaviour creation. + * subclassing-ClutterActor.sgml: + Add FIXME notes. + 2008-02-08 Emmanuele Bassi * actor-box.png: diff --git a/doc/reference/Makefile.am b/doc/reference/Makefile.am index 3af30112b..419cef8cd 100644 --- a/doc/reference/Makefile.am +++ b/doc/reference/Makefile.am @@ -92,6 +92,7 @@ HTML_IMAGES=\ content_files= \ subclassing-ClutterActor.sgml \ clutter-animation.sgml \ + creating-your-own-behaviours.sgml \ version.xml # SGML files where gtk-doc abbrevations (#GtkWidget) are expanded @@ -99,7 +100,8 @@ content_files= \ # e.g. expand_content_files=running.sgml expand_content_files= \ subclassing-ClutterActor.sgml \ - clutter-animation.sgml + clutter-animation.sgml \ + creating-your-own-behaviours.sgml # CFLAGS and LDFLAGS for compiling gtkdoc-scangobj with your library. # Only needed if you are using gtkdoc-scangobj to dynamically query widget diff --git a/doc/reference/clutter-docs.sgml b/doc/reference/clutter-docs.sgml index 666af4269..0c8ccb270 100644 --- a/doc/reference/clutter-docs.sgml +++ b/doc/reference/clutter-docs.sgml @@ -4,6 +4,7 @@ + ]> @@ -106,6 +107,19 @@ + + Building Clutter + + + + + FIXME: Linux, Windows, OSX. Embedded? + + + + + + Clutter Core Reference @@ -224,6 +238,8 @@ &clutter-animation; + &creating-your-own-behaviours; + diff --git a/doc/reference/creating-your-own-behaviours.sgml b/doc/reference/creating-your-own-behaviours.sgml new file mode 100644 index 000000000..27b18d0de --- /dev/null +++ b/doc/reference/creating-your-own-behaviours.sgml @@ -0,0 +1,76 @@ + + + + Matthew + Allum + +
+ mallum@openedhand.com +
+
+
+
+ + Creating You Own Behaviours + + + Clutter comes with a number of fairly generic prebuilt behaviour + classes which provide a basis for transitions, animations and other + visual effects. However even with the ability to combine a number of + these behaviours sometimes they are not enough and a custom + behaviour is needed to create a spcific animation. + + + + + + In order to implement a new #ClutterBehaviour subclass the usual + machinery for subclassing a GObject should be used. The new subclass + then just overides the ClutterBehaviour::alpha_notify() method. This + method is passed an alpha_value which is then used to computer + modifications to any actors the behaviour is applied to. + + + + + This example demonstrates a behaviour that produces a vertical 'wipe' like affect by modifying the actors clip region + + +static void +clutter_behaviour_foo_alpha_notify (ClutterBehaviour *behaviour, + guint32 alpha_value) +{ + ClutterActor *actor + gint i, n; + gdouble factor; + + /* Normalise alpha value */ + factor = (gdouble)alpha_value / CLUTTER_ALPHA_MAX_ALPHA; + + n = clutter_behaviour_get_n_actors (behaviour); + + /* Change clip height of each applied actor. Note usually better to use + * clutter_behaviour_actors_foreach () for performance reasons. + */ + for (i=0; i<n; i++) + { + int clip_height; + + actor = clutter_behaviour_get_nth_actor (behaviour, i); + + clip_height = clutter_actor_get_height (actor) + - (clutter_actor_get_height (actor) * factor); + + clutter_actor_set_clip (actor, + 0, + 0, + clutter_actor_get_width (actor), + clip_height); + } +} + + + + + +
diff --git a/doc/reference/subclassing-ClutterActor.sgml b/doc/reference/subclassing-ClutterActor.sgml index 575010553..d0de73221 100644 --- a/doc/reference/subclassing-ClutterActor.sgml +++ b/doc/reference/subclassing-ClutterActor.sgml @@ -13,6 +13,21 @@ Implementing a new actor + + A few FIXMES: + - note use of units in sizing + - more on composite/container actors, when/why to use... + + implementaing a composite actor - set_parent() etc + + implementing a container - interface etc + - Painting + + note transform already applied. (including position, scale etc) + + note on cogl_enable if painting texture or blended item + (should at least call cogl_enable(0) - to reset state cache) + + fine to use regular GL but then wont be portable + + avoid further transforms ? + + + In order to implement a new #ClutterActor subclass the usual machinery for subclassing a GObject should be used. After that, the ClutterActor::query_coords() and ClutterActor::request_coords() virtual