From 655cb966c08b0ec3a0b73ed1b18fc9ebbe9a93b8 Mon Sep 17 00:00:00 2001 From: Emmanuele Bassi Date: Thu, 25 Feb 2010 17:09:55 +0000 Subject: [PATCH] docs: Add visual cue for Animator's key frames We should explain what a "key frame" is for ClutterAnimator, possibly with some sort of visual cue. This allows me to demonstrate my poor skills at using Inkscape, as well as my overall bad taste for graphics design. --- clutter/clutter-animator.c | 21 ++ doc/reference/clutter/Makefile.am | 3 + doc/reference/clutter/animator-key-frames.png | Bin 0 -> 11936 bytes doc/reference/clutter/animator-key-frames.svg | 271 ++++++++++++++++++++++++++ 4 files changed, 295 insertions(+) create mode 100644 doc/reference/clutter/animator-key-frames.png create mode 100644 doc/reference/clutter/animator-key-frames.svg diff --git a/clutter/clutter-animator.c b/clutter/clutter-animator.c index 9df1657..e64c870 100644 --- a/clutter/clutter-animator.c +++ b/clutter/clutter-animator.c @@ -37,6 +37,27 @@ * through the #ClutterScript definition format, but it comes with a * convenience C API. * + * + * Key Frames + * Every animation handled by a #ClutterAnimator can be + * described in terms of "key frames". For each #GObject property + * there can be multiple key frames, each one defined by the end + * value for the property to be computed starting from the current + * value to a specific point in time, using a given easing + * mode. + * The point in time is defined using a value representing + * the progress in the normalized interval of [ 0, 1 ]. This maps + * the value returned by clutter_timeline_get_duration(). + *
+ * Key Frames + * + *
+ * In the image above the duration of the animation is + * represented by the blue line. Each key frame is the white dot, + * along with its progress. The red line represents the computed + * function of time given the easing mode. + *
+ * * * ClutterAnimator description for #ClutterScript * #ClutterAnimator defines a custom "properties" property diff --git a/doc/reference/clutter/Makefile.am b/doc/reference/clutter/Makefile.am index 9063c4a..9fd24c8 100644 --- a/doc/reference/clutter/Makefile.am +++ b/doc/reference/clutter/Makefile.am @@ -106,6 +106,7 @@ EXTRA_HFILES=\ # e.g. HTML_IMAGES=$(top_srcdir)/gtk/stock-icons/stock_about_24.png HTML_IMAGES=\ actor-box.png \ + animator-key-frames.png \ bin-layout.png \ box-layout.png \ easing-modes.png \ @@ -157,6 +158,8 @@ include $(top_srcdir)/gtk-doc.make # e.g. EXTRA_DIST += version.xml.in EXTRA_DIST += \ actor-box.png \ + animator-key-frames.png \ + animator-key-frames.svg \ bin-layout.png \ box-layout.png \ easing-modes.png \ diff --git a/doc/reference/clutter/animator-key-frames.png b/doc/reference/clutter/animator-key-frames.png new file mode 100644 index 0000000000000000000000000000000000000000..c646dd3a0cdb480bcd71e5305e920faa4eb47847 GIT binary patch literal 11936 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 literal 0 HcmV?d00001 diff --git a/doc/reference/clutter/animator-key-frames.svg b/doc/reference/clutter/animator-key-frames.svg new file mode 100644 index 0000000..613ecec --- /dev/null +++ b/doc/reference/clutter/animator-key-frames.svg @@ -0,0 +1,271 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + 0.20. + + + + + + + + + + + 0.2 0.5 0.8 + + -- 2.7.4