View Javadoc

1   /*
2   
3       dsh-interpolate  Interpolation and easing functions.
4       Copyright (c) 2009-2013 held jointly by the individual authors.
5   
6       This library is free software; you can redistribute it and/or modify it
7       under the terms of the GNU Lesser General Public License as published
8       by the Free Software Foundation; either version 3 of the License, or (at
9       your option) any later version.
10  
11      This library is distributed in the hope that it will be useful, but WITHOUT
12      ANY WARRANTY; with out even the implied warranty of MERCHANTABILITY or
13      FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public
14      License for more details.
15  
16      You should have received a copy of the GNU Lesser General Public License
17      along with this library;  if not, write to the Free Software Foundation,
18      Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307  USA.
19  
20      > http://www.fsf.org/licensing/licenses/lgpl.html
21      > http://www.opensource.org/licenses/lgpl-license.php
22  
23  */
24  package org.dishevelled.interpolate;
25  
26  import java.util.Arrays;
27  import java.util.HashMap;
28  import java.util.List;
29  import java.util.Map;
30  
31  /**
32   * Easing interpolation functions.
33   *
34   * @author  Michael Heuer
35   * @version $Revision$ $Date$
36   */
37  public final class EasingFunctions
38  {
39      /** Linear easing interpolation function. */
40      public static final Linear LINEAR = new Linear();
41  
42      /** Ease-in quadratic interpolation function. */
43      public static final EaseInQuadratic EASE_IN_QUADRATIC = new EaseInQuadratic();
44  
45      /** Ease-out quadratic interpolation function. */
46      public static final EaseOutQuadratic EASE_OUT_QUADRATIC = new EaseOutQuadratic();
47  
48      /** Ease-in-out quadratic interpolation function. */
49      public static final EaseInOutQuadratic EASE_IN_OUT_QUADRATIC = new EaseInOutQuadratic();
50  
51      /** Ease-in cubic interpolation function. */
52      public static final EaseInCubic EASE_IN_CUBIC = new EaseInCubic();
53  
54      /** Ease-out cubic interpolation function. */
55      public static final EaseOutCubic EASE_OUT_CUBIC = new EaseOutCubic();
56  
57      /** Ease-in-out cubic interpolation function. */
58      public static final EaseInOutCubic EASE_IN_OUT_CUBIC = new EaseInOutCubic();
59  
60      /** Ease-in quartic interpolation function. */
61      public static final EaseInQuartic EASE_IN_QUARTIC = new EaseInQuartic();
62  
63      /** Ease-out quartic interpolation function. */
64      public static final EaseOutQuartic EASE_OUT_QUARTIC = new EaseOutQuartic();
65  
66      /** Ease-in-out quartic interpolation function. */
67      public static final EaseInOutQuartic EASE_IN_OUT_QUARTIC = new EaseInOutQuartic();
68  
69      /** Ease-in quintic interpolation function. */
70      public static final EaseInQuintic EASE_IN_QUINTIC = new EaseInQuintic();
71  
72      /** Ease-out quintic interpolation function. */
73      public static final EaseOutQuintic EASE_OUT_QUINTIC = new EaseOutQuintic();
74  
75      /** Ease-in-out quintic interpolation function. */
76      public static final EaseInOutQuintic EASE_IN_OUT_QUINTIC = new EaseInOutQuintic();
77  
78      /** Ease-in sine interpolation function. */
79      public static final EaseInSine EASE_IN_SINE = new EaseInSine();
80  
81      /** Ease-out sine interpolation function. */
82      public static final EaseOutSine EASE_OUT_SINE = new EaseOutSine();
83  
84      /** Ease-in-out sine interpolation function. */
85      public static final EaseInOutSine EASE_IN_OUT_SINE = new EaseInOutSine();
86  
87      /** Ease-in exponential interpolation function. */
88      public static final EaseInExponential EASE_IN_EXPONENTIAL = new EaseInExponential();
89  
90      /** Ease-out exponential interpolation function. */
91      public static final EaseOutExponential EASE_OUT_EXPONENTIAL = new EaseOutExponential();
92  
93      /** Ease-in-out exponential interpolation function. */
94      public static final EaseInOutExponential EASE_IN_OUT_EXPONENTIAL = new EaseInOutExponential();
95  
96      /** Ease-in circular interpolation function. */
97      public static final EaseInCircular EASE_IN_CIRCULAR = new EaseInCircular();
98  
99      /** Ease-out circular interpolation function. */
100     public static final EaseOutCircular EASE_OUT_CIRCULAR = new EaseOutCircular();
101 
102     /** Ease-in-out circular interpolation function. */
103     public static final EaseInOutCircular EASE_IN_OUT_CIRCULAR = new EaseInOutCircular();
104 
105     /** Ease-in elastic interpolation function. */
106     public static final EaseInElastic EASE_IN_ELASTIC = new EaseInElastic();
107 
108     /** Ease-out elastic interpolation function. */
109     public static final EaseOutElastic EASE_OUT_ELASTIC = new EaseOutElastic();
110 
111     /** Ease-in-out elastic interpolation function. */
112     public static final EaseInOutElastic EASE_IN_OUT_ELASTIC = new EaseInOutElastic();
113 
114     /** Ease-in back interpolation function. */
115     public static final EaseInBack EASE_IN_BACK = new EaseInBack();
116 
117     /** Ease-out back interpolation function. */
118     public static final EaseOutBack EASE_OUT_BACK = new EaseOutBack();
119 
120     /** Ease-in-out back interpolation function. */
121     public static final EaseInOutBack EASE_IN_OUT_BACK = new EaseInOutBack();
122 
123     /** Ease-in bounce interpolation function. */
124     public static final EaseInBounce EASE_IN_BOUNCE = new EaseInBounce();
125 
126     /** Ease-out bounce interpolation function. */
127     public static final EaseOutBounce EASE_OUT_BOUNCE = new EaseOutBounce();
128 
129     /** Ease-in-out bounce interpolation function. */
130     public static final EaseInOutBounce EASE_IN_OUT_BOUNCE = new EaseInOutBounce();
131 
132     /** Array of easing interpolation functions. */
133     private static final EasingFunction[] values = new EasingFunction[] { LINEAR, EASE_IN_QUADRATIC, EASE_OUT_QUADRATIC,
134             EASE_IN_OUT_QUADRATIC, EASE_IN_CUBIC, EASE_OUT_CUBIC, EASE_IN_OUT_CUBIC, EASE_IN_QUARTIC, EASE_OUT_QUARTIC, EASE_IN_OUT_QUARTIC,
135             EASE_IN_QUINTIC, EASE_OUT_QUINTIC, EASE_IN_OUT_QUINTIC, EASE_IN_SINE, EASE_OUT_SINE, EASE_IN_OUT_SINE, EASE_IN_EXPONENTIAL,
136             EASE_OUT_EXPONENTIAL, EASE_IN_OUT_EXPONENTIAL, EASE_IN_CIRCULAR, EASE_OUT_CIRCULAR, EASE_IN_OUT_CIRCULAR, EASE_IN_ELASTIC,
137             EASE_OUT_ELASTIC, EASE_IN_OUT_ELASTIC, EASE_IN_BACK, EASE_OUT_BACK, EASE_IN_OUT_BACK, EASE_IN_BOUNCE, EASE_OUT_BOUNCE,
138             EASE_IN_OUT_BOUNCE };
139 
140     /** List of easing interpolation functions. */
141     public static final List<EasingFunction> VALUES = Arrays.asList(values);
142 
143     /** Map of easing interpolation functions keyed by name. */
144     private static final Map<String, EasingFunction> KEYED_BY_NAME = new HashMap<String, EasingFunction>(32);
145 
146     static
147     {
148         for (EasingFunction function : VALUES)
149         {
150             KEYED_BY_NAME.put(function.toString(), function);
151         }
152     }
153 
154 
155     /**
156      * Private no-arg constructor.
157      */
158     private EasingFunctions()
159     {
160         // empty
161     }
162 
163 
164     /**
165      * Return the easing interpolation function for the specified name, if any.
166      *
167      * @param name easing interpolation function name
168      * @return the easing interpolation function for the specified name, or <code>null</code>
169      *    if no such easing interpolation function exists
170      */
171     public static EasingFunction valueOf(final String name)
172     {
173         return KEYED_BY_NAME.get(name);
174     }
175 
176     /**
177      * Create and return new composite easing function <code>g(h(value))</code> with the
178      * specified easing functions <code>g</code> and <code>h</code>.
179      *
180      * @param g easing function g, in <code>g(h(value))</code>, must not be null
181      * @param h easing function h, in <code>g(h(value))</code>, must not be null
182      * @return a new composite easing function <code>g(h(value))</code>
183      */
184     public static CompositeEasingFunction compose(final EasingFunction g, final EasingFunction h)
185     {
186         return new CompositeEasingFunction(g, h);
187     }
188 }