Coverage for lib/lottie/objects/easing.py: 71%
41 statements
« prev ^ index » next coverage.py v7.2.2, created at 2023-03-20 16:17 +0100
« prev ^ index » next coverage.py v7.2.2, created at 2023-03-20 16:17 +0100
1import math
2from .base import LottieObject, LottieProp, PseudoList, PseudoBool
5## @ingroup Lottie
6class KeyframeBezierHandle(LottieObject):
7 """!
8 Bezier handle for keyframe interpolation
9 """
10 _props = [
11 LottieProp("x", "x", list=PseudoList),
12 LottieProp("y", "y", list=PseudoList),
13 ]
15 def __init__(self, x=0, y=0):
16 ## x position of the handle.
17 ## This represents the change in time of the keyframe
18 self.x = x
19 ## y position of the handle.
20 ## This represents the change in value of the keyframe
21 self.y = y
24class Linear:
25 """!
26 Linear easing, the value will change from start to end in a straight line
27 """
28 def __call__(self, keyframe):
29 keyframe.out_value = KeyframeBezierHandle(
30 0,
31 0
32 )
33 keyframe.in_value = KeyframeBezierHandle(
34 1,
35 1
36 )
39class EaseIn:
40 """!
41 The value lingers near the start before accelerating towards the end
42 """
43 def __init__(self, delay=1/3):
44 self.delay = delay
46 def __call__(self, keyframe):
47 keyframe.out_value = KeyframeBezierHandle(
48 self.delay,
49 0
50 )
51 keyframe.in_value = KeyframeBezierHandle(
52 1,
53 1
54 )
57class EaseOut:
58 """!
59 The value starts fast before decelerating towards the end
60 """
61 def __init__(self, delay=1/3):
62 self.delay = delay
64 def __call__(self, keyframe):
65 keyframe.out_value = KeyframeBezierHandle(
66 0,
67 0
68 )
69 keyframe.in_value = KeyframeBezierHandle(
70 1-self.delay,
71 1
72 )
75class Jump:
76 """!
77 Jumps to the end value at the end of the keyframe
78 """
79 def __call__(self, keyframe):
80 keyframe.jump = True
83class Sigmoid:
84 """!
85 Combines the effects of EaseIn and EaseOut
86 """
87 def __init__(self, delay=1/3):
88 self.delay = delay
90 def __call__(self, keyframe):
91 keyframe.out_value = KeyframeBezierHandle(
92 self.delay,
93 0
94 )
95 keyframe.in_value = KeyframeBezierHandle(
96 1 - self.delay,
97 1
98 )
101class Split:
102 """
103 Uses different easing methods for in/out
104 """
106 def __init__(self, out_ease, in_ease):
107 self.out_ease = out_ease
108 self.in_ease = in_ease
110 def __call__(self, keyframe):
111 self.out_ease(keyframe)
112 t = keyframe.out_value
113 self.in_ease(keyframe)
114 keyframe.out_value = t