/*
* Copyright(c) 2017 Samsung Electronics Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
using Tizen.NUI.BaseComponents;
namespace Tizen.NUI
{
///
/// Hover events are a collection of points at a specific moment in time.
/// When a multi-event occurs, each point represents the points that are currently being
/// hovered or the points where a hover has stopped.
///
/// 3
public class Hover : Disposable
{
///
/// swigCMemOwn
///
/// 3
protected bool swigCMemOwn;
private global::System.Runtime.InteropServices.HandleRef swigCPtr;
///
/// The default constructor.
///
/// 3
public Hover() : this(Interop.Hover.new_Hover__SWIG_0(), true)
{
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
}
///
/// The constructor.
///
/// The time the event occurred.
internal Hover(uint time) : this(Interop.Hover.new_Hover__SWIG_1(time), true)
{
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
}
internal Hover(global::System.IntPtr cPtr, bool cMemoryOwn)
{
swigCMemOwn = cMemoryOwn;
swigCPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr);
}
///
/// The time (in ms) that the hover event occurred.
///
/// 3
public uint Time
{
get
{
return time;
}
}
private TouchPointContainer points
{
set
{
Interop.Hover.Hover_points_set(swigCPtr, TouchPointContainer.getCPtr(value));
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
}
get
{
global::System.IntPtr cPtr = Interop.Hover.Hover_points_get(swigCPtr);
TouchPointContainer ret = (cPtr == global::System.IntPtr.Zero) ? null : new TouchPointContainer(cPtr, false);
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
return ret;
}
}
private uint time
{
set
{
Interop.Hover.Hover_time_set(swigCPtr, value);
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
}
get
{
uint ret = Interop.Hover.Hover_time_get(swigCPtr);
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
return ret;
}
}
///
/// Returns the ID of the device used for the point specified.
/// Each point has a unique device ID which specifies the device used for that
/// point. This is returned by this method.
///
/// The point required.
/// The device ID of this point.
/// 3
public int GetDeviceId(uint point)
{
if (point < points.Count)
{
return points[(int)point].DeviceId;
}
return -1;
}
///
/// Retrieves the state of the point specified.
///
/// The point required.
/// The state of the point specified.
/// 3
public PointStateType GetState(uint point)
{
if (point < points.Count)
{
return (Tizen.NUI.PointStateType)(points[(int)point].State);
}
return PointStateType.Finished;
}
///
/// Retrieves the view that was underneath the point specified.
///
/// The point required.
/// The view that was underneath the point specified.
/// 3
public View GetHitView(uint point)
{
if (point < points.Count)
{
return points[(int)point].HitView;
}
else
{
// Return a native empty handle
View view = new View();
view.Reset();
return view;
}
}
///
/// Retrieves the coordinates relative to the top-left of the hit-view at the point specified.
///
/// The point required.
/// The coordinates relative to the top-left of the hit-view of the point specified.
/// 3
public Vector2 GetLocalPosition(uint point)
{
if (point < points.Count)
{
return points[(int)point].Local;
}
return new Vector2(0.0f, 0.0f);
}
///
/// Retrieves the coordinates relative to the top-left of the screen of the point specified.
///
/// The point required.
/// The coordinates relative to the top-left of the screen of the point specified.
/// 3
public Vector2 GetScreenPosition(uint point)
{
if (point < points.Count)
{
return points[(int)point].Screen;
}
return new Vector2(0.0f, 0.0f);
}
///
/// Returns the total number of points.
///
/// Total number of points.
/// 3
public uint GetPointCount()
{
uint ret = Interop.Hover.Hover_GetPointCount(swigCPtr);
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
return ret;
}
internal static global::System.Runtime.InteropServices.HandleRef getCPtr(Hover obj)
{
return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr;
}
internal static Hover GetHoverFromPtr(global::System.IntPtr cPtr)
{
Hover ret = new Hover(cPtr, false);
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
return ret;
}
internal TouchPoint GetPoint(uint point)
{
TouchPoint ret = new TouchPoint(Interop.Hover.Hover_GetPoint(swigCPtr, point), false);
if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
return ret;
}
///
/// Dispose.
///
/// 3
protected override void Dispose(DisposeTypes type)
{
if (disposed)
{
return;
}
//Release your own unmanaged resources here.
//You should not access any managed member here except static instance.
//because the execution order of Finalizes is non-deterministic.
if (swigCPtr.Handle != global::System.IntPtr.Zero)
{
if (swigCMemOwn)
{
swigCMemOwn = false;
Interop.Hover.delete_Hover(swigCPtr);
}
swigCPtr = new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero);
}
base.Dispose(type);
}
}
}