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 /// <summary>swigCMemOwn.</summary>
30 /// <since_tizen> 3 </since_tizen>
31 protected bool swigCMemOwn;
33 /// A Flat to check if it is already disposed.
35 /// <since_tizen> 3 </since_tizen>
36 protected bool disposed = false;
38 private global::System.Runtime.InteropServices.HandleRef swigCPtr;
39 //A Flag to check who called Dispose(). (By User or DisposeQueue)
40 private bool isDisposeQueued = false;
43 /// The constructor.<br />
44 /// Creates an alpha function object with the user-defined alpha function.<br />
46 /// <param name="func">User defined fuction. It must be a method formatted as float alphafunction(float progress)</param>
47 /// <since_tizen> 3 </since_tizen>
48 public AlphaFunction(System.Delegate func) : this(Interop.AlphaFunction.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)
50 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
54 /// The default constructor.<br />
55 /// Creates an alpha function object with the default built-in alpha function.<br />
57 /// <since_tizen> 3 </since_tizen>
58 public AlphaFunction() : this(Interop.AlphaFunction.new_AlphaFunction__SWIG_0(), true)
60 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
64 /// The constructor.<br />
65 /// Creates an alpha function object with the built-in alpha function passed as a parameter to the constructor.<br />
67 /// <param name="function">One of the built-in alpha functions.</param>
68 /// <since_tizen> 3 </since_tizen>
69 public AlphaFunction(AlphaFunction.BuiltinFunctions function) : this(Interop.AlphaFunction.new_AlphaFunction__SWIG_1((int)function), true)
71 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
75 /// The constructor.<br />
76 /// Creates a bezier alpha function. The bezier will have the first point at (0,0) and the end point at (1,1).<br />
78 /// <remarks>The x components of the control points will be clamped to the range [0, 1] to prevent non-monotonic curves.</remarks>
79 /// <param name="controlPoint0">A Vector2 which will be used as the first control point of the curve.</param>
80 /// <param name="controlPoint1">A Vector2 which will be used as the second control point of the curve.</param>
81 /// <since_tizen> 3 </since_tizen>
82 public AlphaFunction(Vector2 controlPoint0, Vector2 controlPoint1) : this(Interop.AlphaFunction.new_AlphaFunction__SWIG_3(Vector2.getCPtr(controlPoint0), Vector2.getCPtr(controlPoint1)), true)
84 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
87 internal AlphaFunction(global::System.IntPtr cPtr, bool cMemoryOwn)
89 swigCMemOwn = cMemoryOwn;
90 swigCPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr);
93 internal AlphaFunction(SWIGTYPE_p_f_float__float function) : this(Interop.AlphaFunction.new_AlphaFunction__SWIG_2(SWIGTYPE_p_f_float__float.getCPtr(function)), true)
95 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
101 /// <since_tizen> 3 </since_tizen>
106 isDisposeQueued = true;
107 DisposeQueue.Instance.Add(this);
112 /// This specifies the various types of BuiltinFunctions.
114 /// <since_tizen> 3 </since_tizen>
115 public enum BuiltinFunctions
122 /// No transformation.
130 /// Speeds up and comes to a sudden stop (square).
134 /// Sudden start and slows to a gradual stop (square).
138 /// Speeds up and comes to a sudden stop (cubic).
142 /// Sudden start and slows to a gradual stop (cubic).
146 /// Speeds up and slows to a gradual stop (cubic).
150 /// Speeds up and comes to a sudden stop (sinusoidal).
154 /// Sudden start and slows to a gradual stop (sinusoidal).
158 /// Speeds up and slows to a gradual stop (sinusoidal).
162 /// Sudden start, loses momentum and returns to start position.
166 /// Single revolution.
170 /// Sudden start, exceed end position and return to a gradual stop.
174 /// The count of the BuiltinFunctions enum.
180 /// This specifies which mode is set for AlphaFunction.
182 /// <since_tizen> 3 </since_tizen>
186 /// The user has used a built-in function.
191 /// The user has provided a custom function.
195 /// The user has provided the control points of a bezier curve.
201 /// To make the AlphaFunction instance be disposed.
203 /// <since_tizen> 3 </since_tizen>
204 public void Dispose()
206 //Throw excpetion if Dispose() is called in separate thread.
207 if (!Window.IsInstalled())
209 throw new System.InvalidOperationException("This API called from separate thread. This API must be called from MainThread.");
214 Dispose(DisposeTypes.Implicit);
218 Dispose(DisposeTypes.Explicit);
219 System.GC.SuppressFinalize(this);
224 /// Retrives the control points of the alpha function.<br />
226 /// <param name="controlPoint0">A Vector2 which will be used as the first control point of the curve.</param>
227 /// <param name="controlPoint1">A Vector2 which will be used as the second control point of the curve.</param>
228 /// <since_tizen> 3 </since_tizen>
229 public void GetBezierControlPoints(out Vector2 controlPoint0, out Vector2 controlPoint1)
231 Vector4 ret = new Vector4(Interop.AlphaFunction.AlphaFunction_GetBezierControlPoints(swigCPtr), true);
232 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
234 controlPoint0 = new Vector2(ret.X, ret.Y);
235 controlPoint1 = new Vector2(ret.Z, ret.W);
239 /// Returns the built-in function used by the alpha function.<br />
240 /// In case no built-in function has been specified, it will return AlphaFunction::DEFAULT.<br />
242 /// <returns>One of the built-in alpha functions.</returns>
243 /// <since_tizen> 3 </since_tizen>
244 public AlphaFunction.BuiltinFunctions GetBuiltinFunction()
246 AlphaFunction.BuiltinFunctions ret = (AlphaFunction.BuiltinFunctions)Interop.AlphaFunction.AlphaFunction_GetBuiltinFunction(swigCPtr);
247 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
252 /// Returns the functioning mode of the alpha function.
254 /// <returns>The functioning mode of the alpha function.</returns>
255 /// <since_tizen> 3 </since_tizen>
256 public AlphaFunction.Modes GetMode()
258 AlphaFunction.Modes ret = (AlphaFunction.Modes)Interop.AlphaFunction.AlphaFunction_GetMode(swigCPtr);
259 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
263 internal static global::System.Runtime.InteropServices.HandleRef getCPtr(AlphaFunction obj)
265 return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr;
268 internal static string BuiltinToPropertyKey(BuiltinFunctions? alphaFunction)
270 string propertyKey = null;
271 if (alphaFunction != null)
273 switch (alphaFunction)
275 case Tizen.NUI.AlphaFunction.BuiltinFunctions.Linear:
277 propertyKey = "LINEAR";
280 case Tizen.NUI.AlphaFunction.BuiltinFunctions.Reverse:
282 propertyKey = "REVERSE";
285 case Tizen.NUI.AlphaFunction.BuiltinFunctions.EaseInSquare:
287 propertyKey = "EASE_IN_SQUARE";
290 case Tizen.NUI.AlphaFunction.BuiltinFunctions.EaseOutSquare:
292 propertyKey = "EASE_OUT_SQUARE";
295 case Tizen.NUI.AlphaFunction.BuiltinFunctions.EaseIn:
297 propertyKey = "EASE_IN";
300 case Tizen.NUI.AlphaFunction.BuiltinFunctions.EaseOut:
302 propertyKey = "EASE_OUT";
305 case Tizen.NUI.AlphaFunction.BuiltinFunctions.EaseInOut:
307 propertyKey = "EASE_IN_OUT";
310 case Tizen.NUI.AlphaFunction.BuiltinFunctions.EaseInSine:
312 propertyKey = "EASE_IN_SINE";
315 case Tizen.NUI.AlphaFunction.BuiltinFunctions.EaseOutSine:
317 propertyKey = "EASE_OUT_SINE";
320 case Tizen.NUI.AlphaFunction.BuiltinFunctions.EaseInOutSine:
322 propertyKey = "EASE_IN_OUT_SINE";
325 case Tizen.NUI.AlphaFunction.BuiltinFunctions.Bounce:
327 propertyKey = "BOUNCE";
330 case Tizen.NUI.AlphaFunction.BuiltinFunctions.Sin:
335 case Tizen.NUI.AlphaFunction.BuiltinFunctions.EaseOutBack:
337 propertyKey = "EASE_OUT_BACK";
342 propertyKey = "DEFAULT";
350 internal SWIGTYPE_p_f_float__float GetCustomFunction()
352 global::System.IntPtr cPtr = Interop.AlphaFunction.AlphaFunction_GetCustomFunction(swigCPtr);
353 SWIGTYPE_p_f_float__float ret = (cPtr == global::System.IntPtr.Zero) ? null : new SWIGTYPE_p_f_float__float(cPtr, false);
354 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
359 /// To make the AlphaFunction instance be disposed.
361 /// <since_tizen> 3 </since_tizen>
362 protected virtual void Dispose(DisposeTypes type)
369 if(type == DisposeTypes.Explicit)
372 //Release your own managed resources here.
373 //You should release all of your own disposable objects here.
376 //Release your own unmanaged resources here.
377 //You should not access any managed member here except static instance.
378 //because the execution order of Finalizes is non-deterministic.
380 if (swigCPtr.Handle != global::System.IntPtr.Zero)
385 Interop.AlphaFunction.delete_AlphaFunction(swigCPtr);
387 swigCPtr = new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero);