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 public class AlphaFunction : global::System.IDisposable
28 private global::System.Runtime.InteropServices.HandleRef swigCPtr;
29 /// <summary>swigCMemOwn.</summary>
30 /// <since_tizen> 3 </since_tizen>
31 protected bool swigCMemOwn;
33 internal AlphaFunction(global::System.IntPtr cPtr, bool cMemoryOwn)
35 swigCMemOwn = cMemoryOwn;
36 swigCPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr);
39 internal static global::System.Runtime.InteropServices.HandleRef getCPtr(AlphaFunction obj)
41 return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr;
44 //A Flag to check who called Dispose(). (By User or DisposeQueue)
45 private bool isDisposeQueued = false;
47 /// A Flat to check if it is already disposed.
49 /// <since_tizen> 3 </since_tizen>
50 protected bool disposed = false;
55 /// <since_tizen> 3 </since_tizen>
60 isDisposeQueued = true;
61 DisposeQueue.Instance.Add(this);
65 /// To make the AlphaFunction instance be disposed.
67 /// <since_tizen> 3 </since_tizen>
70 //Throw excpetion if Dispose() is called in separate thread.
71 if (!Window.IsInstalled())
73 throw new System.InvalidOperationException("This API called from separate thread. This API must be called from MainThread.");
78 Dispose(DisposeTypes.Implicit);
82 Dispose(DisposeTypes.Explicit);
83 System.GC.SuppressFinalize(this);
88 /// To make the AlphaFunction instance be disposed.
90 /// <since_tizen> 3 </since_tizen>
91 protected virtual void Dispose(DisposeTypes type)
98 if(type == DisposeTypes.Explicit)
101 //Release your own managed resources here.
102 //You should release all of your own disposable objects here.
105 //Release your own unmanaged resources here.
106 //You should not access any managed member here except static instance.
107 //because the execution order of Finalizes is non-deterministic.
109 if (swigCPtr.Handle != global::System.IntPtr.Zero)
114 NDalicPINVOKE.delete_AlphaFunction(swigCPtr);
116 swigCPtr = new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero);
122 /// The constructor.<br />
123 /// Creates an alpha function object with the user-defined alpha function.<br />
125 /// <param name="func">User defined fuction. It must be a method formatted as float alphafunction(float progress)</param>
126 /// <since_tizen> 3 </since_tizen>
127 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)
129 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
133 /// The default constructor.<br />
134 /// Creates an alpha function object with the default built-in alpha function.<br />
136 /// <since_tizen> 3 </since_tizen>
137 public AlphaFunction() : this(NDalicPINVOKE.new_AlphaFunction__SWIG_0(), true)
139 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
143 /// The constructor.<br />
144 /// Creates an alpha function object with the built-in alpha function passed as a parameter to the constructor.<br />
146 /// <param name="function">One of the built-in alpha functions.</param>
147 /// <since_tizen> 3 </since_tizen>
148 public AlphaFunction(AlphaFunction.BuiltinFunctions function) : this(NDalicPINVOKE.new_AlphaFunction__SWIG_1((int)function), true)
150 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
153 internal AlphaFunction(SWIGTYPE_p_f_float__float function) : this(NDalicPINVOKE.new_AlphaFunction__SWIG_2(SWIGTYPE_p_f_float__float.getCPtr(function)), true)
155 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
159 /// The constructor.<br />
160 /// Creates a bezier alpha function. The bezier will have the first point at (0,0) and the end point at (1,1).<br />
162 /// <remarks>The x components of the control points will be clamped to the range [0, 1] to prevent non-monotonic curves.</remarks>
163 /// <param name="controlPoint0">A Vector2 which will be used as the first control point of the curve.</param>
164 /// <param name="controlPoint1">A Vector2 which will be used as the second control point of the curve.</param>
165 /// <since_tizen> 3 </since_tizen>
166 public AlphaFunction(Vector2 controlPoint0, Vector2 controlPoint1) : this(NDalicPINVOKE.new_AlphaFunction__SWIG_3(Vector2.getCPtr(controlPoint0), Vector2.getCPtr(controlPoint1)), true)
168 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
172 /// Retrives the control points of the alpha function.<br />
174 /// <param name="controlPoint0">A Vector2 which will be used as the first control point of the curve.</param>
175 /// <param name="controlPoint1">A Vector2 which will be used as the second control point of the curve.</param>
176 /// <since_tizen> 3 </since_tizen>
177 public void GetBezierControlPoints(out Vector2 controlPoint0, out Vector2 controlPoint1)
179 Vector4 ret = new Vector4(NDalicPINVOKE.AlphaFunction_GetBezierControlPoints(swigCPtr), true);
180 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
182 controlPoint0 = new Vector2(ret.X, ret.Y);
183 controlPoint1 = new Vector2(ret.Z, ret.W);
186 internal SWIGTYPE_p_f_float__float GetCustomFunction()
188 global::System.IntPtr cPtr = NDalicPINVOKE.AlphaFunction_GetCustomFunction(swigCPtr);
189 SWIGTYPE_p_f_float__float ret = (cPtr == global::System.IntPtr.Zero) ? null : new SWIGTYPE_p_f_float__float(cPtr, false);
190 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
195 /// Returns the built-in function used by the alpha function.<br />
196 /// In case no built-in function has been specified, it will return AlphaFunction::DEFAULT.<br />
198 /// <returns>One of the built-in alpha functions.</returns>
199 /// <since_tizen> 3 </since_tizen>
200 public AlphaFunction.BuiltinFunctions GetBuiltinFunction()
202 AlphaFunction.BuiltinFunctions ret = (AlphaFunction.BuiltinFunctions)NDalicPINVOKE.AlphaFunction_GetBuiltinFunction(swigCPtr);
203 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
208 /// Returns the functioning mode of the alpha function.
210 /// <returns>The functioning mode of the alpha function.</returns>
211 /// <since_tizen> 3 </since_tizen>
212 public AlphaFunction.Modes GetMode()
214 AlphaFunction.Modes ret = (AlphaFunction.Modes)NDalicPINVOKE.AlphaFunction_GetMode(swigCPtr);
215 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
220 /// This specifies the various types of BuiltinFunctions.
222 /// <since_tizen> 3 </since_tizen>
223 public enum BuiltinFunctions
230 /// No transformation.
238 /// Speeds up and comes to a sudden stop (square).
242 /// Sudden start and slows to a gradual stop (square).
246 /// Speeds up and comes to a sudden stop (cubic).
250 /// Sudden start and slows to a gradual stop (cubic).
254 /// Speeds up and slows to a gradual stop (cubic).
258 /// Speeds up and comes to a sudden stop (sinusoidal).
262 /// Sudden start and slows to a gradual stop (sinusoidal).
266 /// Speeds up and slows to a gradual stop (sinusoidal).
270 /// Sudden start, loses momentum and returns to start position.
274 /// Single revolution.
278 /// Sudden start, exceed end position and return to a gradual stop.
282 /// The count of the BuiltinFunctions enum.
288 /// This specifies which mode is set for AlphaFunction.
290 /// <since_tizen> 3 </since_tizen>
294 /// The user has used a built-in function.
299 /// The user has provided a custom function.
303 /// The user has provided the control points of a bezier curve.
308 internal static string BuiltinToPropertyKey(BuiltinFunctions? alphaFunction)
310 string propertyKey = null;
311 if (alphaFunction != null)
313 switch (alphaFunction)
315 case Tizen.NUI.AlphaFunction.BuiltinFunctions.Linear:
317 propertyKey = "LINEAR";
320 case Tizen.NUI.AlphaFunction.BuiltinFunctions.Reverse:
322 propertyKey = "REVERSE";
325 case Tizen.NUI.AlphaFunction.BuiltinFunctions.EaseInSquare:
327 propertyKey = "EASE_IN_SQUARE";
330 case Tizen.NUI.AlphaFunction.BuiltinFunctions.EaseOutSquare:
332 propertyKey = "EASE_OUT_SQUARE";
335 case Tizen.NUI.AlphaFunction.BuiltinFunctions.EaseIn:
337 propertyKey = "EASE_IN";
340 case Tizen.NUI.AlphaFunction.BuiltinFunctions.EaseOut:
342 propertyKey = "EASE_OUT";
345 case Tizen.NUI.AlphaFunction.BuiltinFunctions.EaseInOut:
347 propertyKey = "EASE_IN_OUT";
350 case Tizen.NUI.AlphaFunction.BuiltinFunctions.EaseInSine:
352 propertyKey = "EASE_IN_SINE";
355 case Tizen.NUI.AlphaFunction.BuiltinFunctions.EaseOutSine:
357 propertyKey = "EASE_OUT_SINE";
360 case Tizen.NUI.AlphaFunction.BuiltinFunctions.EaseInOutSine:
362 propertyKey = "EASE_IN_OUT_SINE";
365 case Tizen.NUI.AlphaFunction.BuiltinFunctions.Bounce:
367 propertyKey = "BOUNCE";
370 case Tizen.NUI.AlphaFunction.BuiltinFunctions.Sin:
375 case Tizen.NUI.AlphaFunction.BuiltinFunctions.EaseOutBack:
377 propertyKey = "EASE_OUT_BACK";
382 propertyKey = "DEFAULT";