From ddbce10fe444d89e4041ea8675c87c000c57e21e Mon Sep 17 00:00:00 2001 From: MinJeong Kim Date: Mon, 10 Aug 2015 12:21:46 +0900 Subject: [PATCH] evas_map: added precise coord get/set APIs 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 --- src/lib/evas/Evas_Legacy.h | 30 ++++++++++++++++++++++++++++++ src/lib/evas/canvas/evas_map.c | 38 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 68 insertions(+) diff --git a/src/lib/evas/Evas_Legacy.h b/src/lib/evas/Evas_Legacy.h index 9db0565..79c2d46 100644 --- a/src/lib/evas/Evas_Legacy.h +++ b/src/lib/evas/Evas_Legacy.h @@ -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 diff --git a/src/lib/evas/canvas/evas_map.c b/src/lib/evas/canvas/evas_map.c index e05ad97..13e15e9 100644 --- a/src/lib/evas/canvas/evas_map.c +++ b/src/lib/evas/canvas/evas_map.c @@ -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); -- 2.7.4