2 * Copyright(c) 2017 Samsung Electronics Co., Ltd.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
22 /// Alpha functions are used in animations to specify the rate of change of the animation parameter over time.<br />
23 /// Understanding an animation as a parametric function over time, the alpha function is applied to the parameter of
24 /// the animation before computing the final animation value.
26 /// <since_tizen> 3 </since_tizen>
27 public class AlphaFunction : global::System.IDisposable
29 private global::System.Runtime.InteropServices.HandleRef swigCPtr;
30 /// <summary>swigCMemOwn.</summary>
31 /// <since_tizen> 3 </since_tizen>
32 protected bool swigCMemOwn;
34 internal AlphaFunction(global::System.IntPtr cPtr, bool cMemoryOwn)
36 swigCMemOwn = cMemoryOwn;
37 swigCPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr);
40 internal static global::System.Runtime.InteropServices.HandleRef getCPtr(AlphaFunction obj)
42 return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr;
45 //A Flag to check who called Dispose(). (By User or DisposeQueue)
46 private bool isDisposeQueued = false;
48 /// A Flat to check if it is already disposed.
50 /// <since_tizen> 3 </since_tizen>
51 protected bool disposed = false;
56 /// <since_tizen> 3 </since_tizen>
61 isDisposeQueued = true;
62 DisposeQueue.Instance.Add(this);
66 /// To make the AlphaFunction instance be disposed.
68 /// <since_tizen> 3 </since_tizen>
71 //Throw excpetion if Dispose() is called in separate thread.
72 if (!Window.IsInstalled())
74 throw new System.InvalidOperationException("This API called from separate thread. This API must be called from MainThread.");
79 Dispose(DisposeTypes.Implicit);
83 Dispose(DisposeTypes.Explicit);
84 System.GC.SuppressFinalize(this);
89 /// To make the AlphaFunction instance be disposed.
91 /// <since_tizen> 3 </since_tizen>
92 protected virtual void Dispose(DisposeTypes type)
99 if(type == DisposeTypes.Explicit)
102 //Release your own managed resources here.
103 //You should release all of your own disposable objects here.
106 //Release your own unmanaged resources here.
107 //You should not access any managed member here except static instance.
108 //because the execution order of Finalizes is non-deterministic.
110 if (swigCPtr.Handle != global::System.IntPtr.Zero)
115 NDalicPINVOKE.delete_AlphaFunction(swigCPtr);
117 swigCPtr = new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero);
123 /// The constructor.<br />
124 /// Creates an alpha function object with the user-defined alpha function.<br />
126 /// <param name="func">User defined fuction. It must be a method formatted as float alphafunction(float progress)</param>
127 /// <since_tizen> 3 </since_tizen>
128 public AlphaFunction(System.Delegate func) : this(NDalicPINVOKE.new_AlphaFunction__SWIG_2(SWIGTYPE_p_f_float__float.getCPtr(new SWIGTYPE_p_f_float__float(System.Runtime.InteropServices.Marshal.GetFunctionPointerForDelegate<System.Delegate>(func), true))), true)
130 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
134 /// The default constructor.<br />
135 /// Creates an alpha function object with the default built-in alpha function.<br />
137 /// <since_tizen> 3 </since_tizen>
138 public AlphaFunction() : this(NDalicPINVOKE.new_AlphaFunction__SWIG_0(), true)
140 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
144 /// The constructor.<br />
145 /// Creates an alpha function object with the built-in alpha function passed as a parameter to the constructor.<br />
147 /// <param name="function">One of the built-in alpha functions.</param>
148 /// <since_tizen> 3 </since_tizen>
149 public AlphaFunction(AlphaFunction.BuiltinFunctions function) : this(NDalicPINVOKE.new_AlphaFunction__SWIG_1((int)function), true)
151 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
154 internal AlphaFunction(SWIGTYPE_p_f_float__float function) : this(NDalicPINVOKE.new_AlphaFunction__SWIG_2(SWIGTYPE_p_f_float__float.getCPtr(function)), true)
156 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
160 /// The constructor.<br />
161 /// Creates a bezier alpha function. The bezier will have the first point at (0,0) and the end point at (1,1).<br />
163 /// <remarks>The x components of the control points will be clamped to the range [0, 1] to prevent non-monotonic curves.</remarks>
164 /// <param name="controlPoint0">A Vector2 which will be used as the first control point of the curve.</param>
165 /// <param name="controlPoint1">A Vector2 which will be used as the second control point of the curve.</param>
166 /// <since_tizen> 3 </since_tizen>
167 public AlphaFunction(Vector2 controlPoint0, Vector2 controlPoint1) : this(NDalicPINVOKE.new_AlphaFunction__SWIG_3(Vector2.getCPtr(controlPoint0), Vector2.getCPtr(controlPoint1)), true)
169 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
173 /// Retrives the control points of the alpha function.<br />
175 /// <param name="controlPoint0">A Vector2 which will be used as the first control point of the curve.</param>
176 /// <param name="controlPoint1">A Vector2 which will be used as the second control point of the curve.</param>
177 /// <since_tizen> 3 </since_tizen>
178 public void GetBezierControlPoints(out Vector2 controlPoint0, out Vector2 controlPoint1)
180 Vector4 ret = new Vector4(NDalicPINVOKE.AlphaFunction_GetBezierControlPoints(swigCPtr), true);
181 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
183 controlPoint0 = new Vector2(ret.X, ret.Y);
184 controlPoint1 = new Vector2(ret.Z, ret.W);
187 internal SWIGTYPE_p_f_float__float GetCustomFunction()
189 global::System.IntPtr cPtr = NDalicPINVOKE.AlphaFunction_GetCustomFunction(swigCPtr);
190 SWIGTYPE_p_f_float__float ret = (cPtr == global::System.IntPtr.Zero) ? null : new SWIGTYPE_p_f_float__float(cPtr, false);
191 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
196 /// Returns the built-in function used by the alpha function.<br />
197 /// In case no built-in function has been specified, it will return AlphaFunction::DEFAULT.<br />
199 /// <returns>One of the built-in alpha functions.</returns>
200 /// <since_tizen> 3 </since_tizen>
201 public AlphaFunction.BuiltinFunctions GetBuiltinFunction()
203 AlphaFunction.BuiltinFunctions ret = (AlphaFunction.BuiltinFunctions)NDalicPINVOKE.AlphaFunction_GetBuiltinFunction(swigCPtr);
204 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
209 /// Returns the functioning mode of the alpha function.
211 /// <returns>The functioning mode of the alpha function.</returns>
212 /// <since_tizen> 3 </since_tizen>
213 public AlphaFunction.Modes GetMode()
215 AlphaFunction.Modes ret = (AlphaFunction.Modes)NDalicPINVOKE.AlphaFunction_GetMode(swigCPtr);
216 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
221 /// This specifies the various types of BuiltinFunctions.
223 /// <since_tizen> 3 </since_tizen>
224 public enum BuiltinFunctions
231 /// No transformation.
239 /// Speeds up and comes to a sudden stop (square).
243 /// Sudden start and slows to a gradual stop (square).
247 /// Speeds up and comes to a sudden stop (cubic).
251 /// Sudden start and slows to a gradual stop (cubic).
255 /// Speeds up and slows to a gradual stop (cubic).
259 /// Speeds up and comes to a sudden stop (sinusoidal).
263 /// Sudden start and slows to a gradual stop (sinusoidal).
267 /// Speeds up and slows to a gradual stop (sinusoidal).
271 /// Sudden start, loses momentum and returns to start position.
275 /// Single revolution.
279 /// Sudden start, exceed end position and return to a gradual stop.
283 /// The count of the BuiltinFunctions enum.
289 /// This specifies which mode is set for AlphaFunction.
291 /// <since_tizen> 3 </since_tizen>
295 /// The user has used a built-in function.
300 /// The user has provided a custom function.
304 /// The user has provided the control points of a bezier curve.
309 internal static string BuiltinToPropertyKey(BuiltinFunctions? alphaFunction)
311 string propertyKey = null;
312 if (alphaFunction != null)
314 switch (alphaFunction)
316 case Tizen.NUI.AlphaFunction.BuiltinFunctions.Linear:
318 propertyKey = "LINEAR";
321 case Tizen.NUI.AlphaFunction.BuiltinFunctions.Reverse:
323 propertyKey = "REVERSE";
326 case Tizen.NUI.AlphaFunction.BuiltinFunctions.EaseInSquare:
328 propertyKey = "EASE_IN_SQUARE";
331 case Tizen.NUI.AlphaFunction.BuiltinFunctions.EaseOutSquare:
333 propertyKey = "EASE_OUT_SQUARE";
336 case Tizen.NUI.AlphaFunction.BuiltinFunctions.EaseIn:
338 propertyKey = "EASE_IN";
341 case Tizen.NUI.AlphaFunction.BuiltinFunctions.EaseOut:
343 propertyKey = "EASE_OUT";
346 case Tizen.NUI.AlphaFunction.BuiltinFunctions.EaseInOut:
348 propertyKey = "EASE_IN_OUT";
351 case Tizen.NUI.AlphaFunction.BuiltinFunctions.EaseInSine:
353 propertyKey = "EASE_IN_SINE";
356 case Tizen.NUI.AlphaFunction.BuiltinFunctions.EaseOutSine:
358 propertyKey = "EASE_OUT_SINE";
361 case Tizen.NUI.AlphaFunction.BuiltinFunctions.EaseInOutSine:
363 propertyKey = "EASE_IN_OUT_SINE";
366 case Tizen.NUI.AlphaFunction.BuiltinFunctions.Bounce:
368 propertyKey = "BOUNCE";
371 case Tizen.NUI.AlphaFunction.BuiltinFunctions.Sin:
376 case Tizen.NUI.AlphaFunction.BuiltinFunctions.EaseOutBack:
378 propertyKey = "EASE_OUT_BACK";
383 propertyKey = "DEFAULT";