aboutsummaryrefslogtreecommitdiff
path: root/src/animate.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/animate.c')
-rw-r--r--src/animate.c40
1 files changed, 40 insertions, 0 deletions
diff --git a/src/animate.c b/src/animate.c
new file mode 100644
index 0000000..7b95e9c
--- /dev/null
+++ b/src/animate.c
@@ -0,0 +1,40 @@
+#include <glib.h>
+
+#include "animate.h"
+
+double quadratic_bezier(double x, double a, double b, double c)
+{
+ g_assert(x >= 0 && x <= 1);
+ g_assert(a >= 0 && a <= 1);
+ g_assert(b >= 0 && b <= 1);
+ g_assert(c >= 0 && c <= 1);
+
+ const double t = 1 - x;
+ return a * t * t + 2 * b * t * x + c * x * x;
+}
+
+double cubic_bezier(double x, double a, double b, double c, double d)
+{
+ g_assert(x >= 0 && x <= 1);
+ g_assert(a >= 0 && a <= 1);
+ g_assert(b >= 0 && b <= 1);
+ g_assert(c >= 0 && c <= 1);
+ g_assert(d >= 0 && d <= 1);
+
+ const double t = 1 - x;
+ return a * (t * t * t) + 3 * b * (t * t * x) + 3 * c * (t * x * x) + d * (x * x * x);
+}
+
+Animation *animation_create()
+{
+ Animation *anim = g_malloc0(sizeof(Animation));
+ // TODO
+ return anim;
+}
+
+void animation_destroy(Animation *anim)
+{
+ g_free(anim);
+}
+
+// vim: ts=4 sw=4 et