From a98d9ab8c9c3ec12df621861170ab2a3b8c69d82 Mon Sep 17 00:00:00 2001 From: Thomas White Date: Sun, 4 Apr 2021 14:17:36 +0200 Subject: Actually fade attribute values (when appropriate) --- guile/starlet/playback.scm | 49 +++++++++++++++++++++++++++++++++------------- 1 file changed, 35 insertions(+), 14 deletions(-) diff --git a/guile/starlet/playback.scm b/guile/starlet/playback.scm index b580d7b..c9153d8 100644 --- a/guile/starlet/playback.scm +++ b/guile/starlet/playback.scm @@ -311,23 +311,44 @@ (define (make-continuous-attr-fade start-val target-val preset-val - fade-times + fade-time fade-start-time preset-time preset-start-time) - (lambda (time) - - ;; FIXME: If target value is a number, do a fade - ;; (if starting value is a function, freeze it) - (cond - - ((< time fade-start-time) start-val) - - ((and (not (eq? 'no-value preset-val)) - (> time preset-start-time)) - preset-val) - - (else target-val)))) + (if (and (number? target-val) + (not (eq? start-val 'no-value))) + + ;; It makes sense to do a fade + (let ((real-start-val (value->number start-val fade-start-time))) + (lambda (time) + (cond + ((< time fade-start-time) start-val) + + ((and (not (eq? 'no-value preset-val)) + (> time preset-start-time)) + (simple-fade target-val + preset-val + preset-time + preset-start-time + time)) + + (else + (simple-fade real-start-val + target-val + fade-time + fade-start-time + time))))) + + ;; A fade doesn't make sense, so make do with a snap transition + (lambda (time) + (cond + ((< time fade-start-time) start-val) + + ((and (not (eq? 'no-value preset-val)) + (> time preset-start-time)) + preset-val) + + (else target-val))))) (define (match-fix-attr attr-el fix attr) -- cgit v1.2.3