Release 4.0.0-preview1-00249
[platform/core/csapi/tizenfx.git] / src / ElmSharp / ElmSharp / EvasMap.cs
1 /*
2  * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
3  *
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
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
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.
15  */
16
17 using System;
18
19 namespace ElmSharp
20 {
21     /// <summary>
22     /// The EvasMap is an opaque handle to map points.
23     /// </summary>
24     public class EvasMap
25     {
26         IntPtr _evasMap;
27         bool _ownership;
28
29         /// <summary>
30         /// Creates and initializes a new instance of the EvasMap class.
31         /// </summary>
32         /// <param name="count">The number of points in the map</param>
33         public EvasMap(int count)
34         {
35             _evasMap = Interop.Evas.evas_map_new(count);
36             _ownership = true;
37         }
38
39         internal EvasMap(IntPtr handle)
40         {
41             _evasMap = handle;
42             _ownership = false;
43         }
44
45         ~EvasMap()
46         {
47             if (_ownership)
48             {
49                 Interop.Evas.evas_map_free(_evasMap);
50             }
51         }
52
53         internal IntPtr Handle
54         {
55             get
56             {
57                 return _evasMap;
58             }
59         }
60
61         /// <summary>
62         /// Gets or sets the flag of the object move synchronization for map rendering.
63         /// </summary>
64         public bool IsMoveSync
65         {
66             get
67             {
68                 return Interop.Evas.evas_map_util_object_move_sync_get(_evasMap);
69             }
70             set
71             {
72                 Interop.Evas.evas_map_util_object_move_sync_set(_evasMap, value);
73             }
74         }
75
76         /// <summary>
77         /// Populates source and destination map points to exactly match the object.
78         /// </summary>
79         /// <param name="obj">The object to use unmapped geometry to populate map coordinates</param>
80         public void PopulatePoints(EvasObject obj)
81         {
82             Interop.Evas.evas_map_util_points_populate_from_object_full(_evasMap, obj, 0);
83         }
84
85         /// <summary>
86         /// Populates source and destination map points to exactly match the object.
87         /// </summary>
88         /// <param name="obj">The object to use unmapped geometry to populate map coordinates</param>
89         /// <param name="z">
90         /// The point Z coordinate hint (pre-perspective transform)This value is used for all four points.
91         /// </param>
92         public void PopulatePoints(EvasObject obj, int z)
93         {
94             Interop.Evas.evas_map_util_points_populate_from_object_full(_evasMap, obj, z);
95         }
96
97         /// <summary>
98         /// Populates the source and destination map points to match the given geometry.
99         /// </summary>
100         /// <param name="geometry">The geometry value contains X coordinate,Y coordinate,the width and height to use to calculate second and third points</param>
101         /// <param name="z">The Z coordinate hint (pre-perspective transform) This value is used for all four points.</param>
102         public void PopulatePoints(Rect geometry, int z)
103         {
104             Interop.Evas.evas_map_util_points_populate_from_geometry(_evasMap, geometry.X, geometry.Y, geometry.Width, geometry.Height, z);
105         }
106
107         /// <summary>
108         /// Rotate the map
109         /// </summary>
110         /// <param name="degrees">The abount of degrees from 0.0 to 360.0 to rotate</param>
111         /// <param name="cx">rotation's center horizontal position.</param>
112         /// <param name="cy">rotation's center vertical position.</param>
113         public void Rotate(double degrees, int cx, int cy)
114         {
115             Interop.Evas.evas_map_util_rotate(_evasMap, degrees, cx, cy);
116         }
117
118         /// <summary>
119         /// Rotates the map around 3 axes in 3D.
120         /// </summary>
121         /// <param name="dx">The amount of degrees from 0.0 to 360.0 to rotate around X axis</param>
122         /// <param name="dy">The amount of degrees from 0.0 to 360.0 to rotate around Y axis</param>
123         /// <param name="dz">The amount of degrees from 0.0 to 360.0 to rotate around Z axis</param>
124         /// <param name="cx">The rotation's center horizontal position</param>
125         /// <param name="cy">The rotation's center vertical position</param>
126         /// <param name="cz">The rotation's center depth position</param>
127         public void Rotate3D(double dx, double dy, double dz, int cx, int cy, int cz)
128         {
129             Interop.Evas.evas_map_util_3d_rotate(_evasMap, dx, dy, dz, cx, cy, cz);
130         }
131
132         /// <summary>
133         /// Changes the map point's coordinate.
134         /// </summary>
135         /// <param name="idx">The index of point to change ,this must be smaller than map size.</param>
136         /// <param name="point">3D Point coordinate</param>
137         public void SetPointCoordinate(int idx, Point3D point)
138         {
139             Interop.Evas.evas_map_point_coord_set(_evasMap, idx, point.X, point.Y, point.Z);
140         }
141
142         /// <summary>
143         /// Gets the map point's coordinate.
144         /// </summary>
145         /// <param name="idx">The index of point to change ,this must be smaller than map size.</param>
146         /// <returns>The coordinates of the given point in the map.</returns>
147         public Point3D GetPointCoordinate(int idx)
148         {
149             Point3D point;
150             Interop.Evas.evas_map_point_coord_get(_evasMap, idx, out point.X, out point.Y, out point.Z);
151             return point;
152         }
153
154         /// <summary>
155         /// Changes the map to apply the given zooming.
156         /// </summary>
157         /// <param name="x">The horizontal zoom to use</param>
158         /// <param name="y">The vertical zoom to use</param>
159         /// <param name="cx">The zooming center horizontal position</param>
160         /// <param name="cy">The zooming center vertical position</param>
161         public void Zoom(double x, double y, int cx, int cy)
162         {
163             Interop.Evas.evas_map_util_zoom(_evasMap, x, y, cx, cy);
164         }
165     }
166 }