evas_map: added precise coord get/set APIs
authorMinJeong Kim <minjjj.kim@samsung.com>
Mon, 10 Aug 2015 03:21:46 +0000 (12:21 +0900)
committerJiyoun Park <jy0703.park@samsung.com>
Tue, 19 Dec 2017 07:48:25 +0000 (16:48 +0900)
Parameters of evas_map_point_coord_get/set are integer coordinates values,
so any caller of APIs can not get/set coordinates of evas map accurately.
For improving accuracy of that, below two APIs using double value are added.
 - evas_map_point_precise_coord_set
 - evas_map_point_precise_coord_get

Change-Id: I632477de1224a0dd2db509809835f1e627762b64
Signed-off-by: MinJeong Kim <minjjj.kim@samsung.com>
src/lib/evas/Evas_Legacy.h
src/lib/evas/canvas/evas_map.c

index 9db0565..79c2d46 100644 (file)
@@ -7712,6 +7712,36 @@ EAPI void            evas_map_point_coord_set(Evas_Map *m, int idx, Evas_Coord x
 EAPI void            evas_map_point_coord_get(const Evas_Map *m, int idx, Evas_Coord *x, Evas_Coord *y, Evas_Coord *z);
 
 /**
+ * Change the map point's coordinate precisely.
+ *
+ * This sets the fixed point's coordinate in the map precisely.
+ *
+ * @param m map to change point. Must not be @c NULL.
+ * @param idx index of point to change. Must be smaller than map size.
+ * @param x Point X Coordinate (double)
+ * @param y Point Y Coordinate (double)
+ * @param z Point Z Coordinate (double)
+ *
+ * @see evas_map_point_coord_set()
+ */
+EAPI void            evas_map_point_precise_coord_set(Evas_Map *m, int idx, double x, double y, double z);
+
+/**
+ * Get the map point's precise coordinate.
+ *
+ * This returns the coordinates of the given point in the map.
+ *
+ * @param m map to query point.
+ * @param idx index of point to query. Must be smaller than map size.
+ * @param x where to return the X coordinate. (double)
+ * @param y where to return the Y coordinate. (double)
+ * @param z where to return the Z coordinate. (double)
+ *
+ * @see evas_map_point_coord_get()
+ */
+EAPI void            evas_map_point_precise_coord_get(const Evas_Map *m, int idx, double *x, double *y, double *z);
+
+/**
  * Change the map point's U and V texture source point
  *
  * This sets the U and V coordinates for the point. This determines which
index e05ad97..13e15e9 100644 (file)
@@ -782,6 +782,44 @@ evas_map_point_coord_get(const Evas_Map *m, int idx, Evas_Coord *x, Evas_Coord *
 }
 
 EAPI void
+evas_map_point_precise_coord_set(Evas_Map *m, int idx, double x, double y, double z)
+{
+   MAGIC_CHECK(m, Evas_Map, MAGIC_MAP);
+   return;
+   MAGIC_CHECK_END();
+
+   Evas_Map_Point *p;
+
+   if (idx >= m->count) return;
+   p = m->points + idx;
+   p->x = p->px = x;
+   p->y = p->py = y;
+   p->z = z;
+}
+
+EAPI void
+evas_map_point_precise_coord_get(const Evas_Map *m, int idx, double *x, double *y, double *z)
+{
+   MAGIC_CHECK(m, Evas_Map, MAGIC_MAP);
+   goto error;
+   MAGIC_CHECK_END();
+
+   const Evas_Map_Point *p;
+
+   if (idx >= m->count) goto error;
+   p = m->points + idx;
+   if (x) *x = p->x;
+   if (y) *y = p->y;
+   if (z) *z = p->z;
+   return;
+
+ error:
+   if (x) *x = 0;
+   if (y) *y = 0;
+   if (z) *z = 0;
+}
+
+EAPI void
 evas_map_point_image_uv_set(Evas_Map *m, int idx, double u, double v)
 {
    MAGIC_CHECK(m, Evas_Map, MAGIC_MAP);