forked from enlightenment/efl
evas map: Replace EO APIs for populate with reset
Manual points population will eventually be useless as the map API will become more like a transformation API, where the current object geometry doesn't matter as much as which transformation is applied to it.
This commit is contained in:
parent
81dd06a6ed
commit
d111c6e1dd
|
@ -84,8 +84,8 @@ _toggle_map(void *data, const Efl_Event *ev EINA_UNUSED)
|
||||||
if (!efl_gfx_map_enable_get(ly))
|
if (!efl_gfx_map_enable_get(ly))
|
||||||
{
|
{
|
||||||
int x, y, w, h;
|
int x, y, w, h;
|
||||||
|
efl_gfx_map_reset(ly);
|
||||||
efl_gfx_geometry_get(ly, &x, &y, &w, &h);
|
efl_gfx_geometry_get(ly, &x, &y, &w, &h);
|
||||||
efl_gfx_map_populate(ly, 0.0);
|
|
||||||
efl_gfx_map_zoom(ly, 0.8, 0.8, x + w / 2, y + h / 2);
|
efl_gfx_map_zoom(ly, 0.8, 0.8, x + w / 2, y + h / 2);
|
||||||
efl_gfx_map_enable_set(ly, 1);
|
efl_gfx_map_enable_set(ly, 1);
|
||||||
}
|
}
|
||||||
|
|
|
@ -131,7 +131,7 @@ _map_do(void *data, const Efl_Event *ev EINA_UNUSED)
|
||||||
if (here) return;
|
if (here) return;
|
||||||
here = 1;
|
here = 1;
|
||||||
|
|
||||||
efl_gfx_map_populate(snap, 0);
|
efl_gfx_map_reset(snap);
|
||||||
efl_gfx_geometry_get(snap, &x, &y, &w, &h);
|
efl_gfx_geometry_get(snap, &x, &y, &w, &h);
|
||||||
efl_gfx_map_zoom(snap, 0.8, 0.8, x + w/2., y + h/2.);
|
efl_gfx_map_zoom(snap, 0.8, 0.8, x + w/2., y + h/2.);
|
||||||
efl_gfx_map_rotate(snap, 45., x + w/2., y + h/2.);
|
efl_gfx_map_rotate(snap, 45., x + w/2., y + h/2.);
|
||||||
|
|
|
@ -15,6 +15,36 @@
|
||||||
_evas_map_util_points_populate(m, obj->cur->geometry.x, obj->cur->geometry.y, \
|
_evas_map_util_points_populate(m, obj->cur->geometry.x, obj->cur->geometry.y, \
|
||||||
obj->cur->geometry.w, obj->cur->geometry.h, z)
|
obj->cur->geometry.w, obj->cur->geometry.h, z)
|
||||||
|
|
||||||
|
static Eina_Bool
|
||||||
|
_map_populate(Eo *eo_obj, int z)
|
||||||
|
{
|
||||||
|
Evas_Object_Protected_Data *obj = EVAS_OBJ_GET_OR_RETURN(eo_obj, EINA_FALSE);
|
||||||
|
Evas_Map *m;
|
||||||
|
|
||||||
|
if (!obj->map->cur.map)
|
||||||
|
{
|
||||||
|
m = _evas_map_new(4, EINA_TRUE);
|
||||||
|
if (!m) return EINA_FALSE;
|
||||||
|
MAP_POPULATE_DEFAULT(m, z);
|
||||||
|
evas_object_map_set(eo_obj, m);
|
||||||
|
evas_map_free(m);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m = (Evas_Map *) obj->map->cur.map;
|
||||||
|
MAP_POPULATE_DEFAULT(m, z);
|
||||||
|
MAP_OBJ_CHANGE();
|
||||||
|
}
|
||||||
|
|
||||||
|
return EINA_TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
EOLIAN static void
|
||||||
|
_efl_gfx_map_map_reset(Eo *eo_obj, void *_pd EINA_UNUSED)
|
||||||
|
{
|
||||||
|
evas_object_map_set(eo_obj, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
EOLIAN static Eina_Bool
|
EOLIAN static Eina_Bool
|
||||||
_efl_gfx_map_map_clockwise_get(Eo *eo_obj, void *_pd EINA_UNUSED)
|
_efl_gfx_map_map_clockwise_get(Eo *eo_obj, void *_pd EINA_UNUSED)
|
||||||
{
|
{
|
||||||
|
@ -30,7 +60,7 @@ _efl_gfx_map_map_smooth_set(Eo *eo_obj, void *_pd EINA_UNUSED, Eina_Bool smooth)
|
||||||
if (!obj->map->cur.map)
|
if (!obj->map->cur.map)
|
||||||
{
|
{
|
||||||
if (smooth) return;
|
if (smooth) return;
|
||||||
if (!efl_gfx_map_populate(eo_obj, 0))
|
if (!_map_populate(eo_obj, 0))
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -55,7 +85,7 @@ _efl_gfx_map_map_alpha_set(Eo *eo_obj, void *_pd EINA_UNUSED, Eina_Bool alpha)
|
||||||
if (!obj->map->cur.map)
|
if (!obj->map->cur.map)
|
||||||
{
|
{
|
||||||
if (alpha) return;
|
if (alpha) return;
|
||||||
if (!efl_gfx_map_populate(eo_obj, 0))
|
if (!_map_populate(eo_obj, 0))
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -79,7 +109,7 @@ _efl_gfx_map_map_point_coord_set(Eo *eo_obj, void *_pd EINA_UNUSED, int idx, dou
|
||||||
Evas_Object_Protected_Data *obj = EVAS_OBJ_GET_OR_RETURN(eo_obj);
|
Evas_Object_Protected_Data *obj = EVAS_OBJ_GET_OR_RETURN(eo_obj);
|
||||||
Evas_Map *m;
|
Evas_Map *m;
|
||||||
|
|
||||||
if (!obj->map->cur.map && !efl_gfx_map_populate(eo_obj, 0))
|
if (!obj->map->cur.map && !_map_populate(eo_obj, 0))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
m = (Evas_Map *) obj->map->cur.map;
|
m = (Evas_Map *) obj->map->cur.map;
|
||||||
|
@ -102,7 +132,7 @@ _efl_gfx_map_map_point_image_uv_set(Eo *eo_obj, void *_pd EINA_UNUSED, int idx,
|
||||||
Evas_Object_Protected_Data *obj = EVAS_OBJ_GET_OR_RETURN(eo_obj);
|
Evas_Object_Protected_Data *obj = EVAS_OBJ_GET_OR_RETURN(eo_obj);
|
||||||
Evas_Map *m;
|
Evas_Map *m;
|
||||||
|
|
||||||
if (!obj->map->cur.map && !efl_gfx_map_populate(eo_obj, 0))
|
if (!obj->map->cur.map && !_map_populate(eo_obj, 0))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
m = (Evas_Map *) obj->map->cur.map;
|
m = (Evas_Map *) obj->map->cur.map;
|
||||||
|
@ -126,7 +156,7 @@ _efl_gfx_map_map_color_set(Eo *eo_obj, void *_pd EINA_UNUSED, int idx, int r, in
|
||||||
Evas_Object_Protected_Data *obj = EVAS_OBJ_GET_OR_RETURN(eo_obj);
|
Evas_Object_Protected_Data *obj = EVAS_OBJ_GET_OR_RETURN(eo_obj);
|
||||||
Evas_Map *m;
|
Evas_Map *m;
|
||||||
|
|
||||||
if (!obj->map->cur.map && !efl_gfx_map_populate(eo_obj, 0))
|
if (!obj->map->cur.map && !_map_populate(eo_obj, 0))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
m = (Evas_Map *) obj->map->cur.map;
|
m = (Evas_Map *) obj->map->cur.map;
|
||||||
|
@ -154,7 +184,7 @@ _efl_gfx_map_map_move_sync_set(Eo *eo_obj, void *_pd EINA_UNUSED, Eina_Bool enab
|
||||||
if (!obj->map->cur.map)
|
if (!obj->map->cur.map)
|
||||||
{
|
{
|
||||||
if (enable) return;
|
if (enable) return;
|
||||||
if (!efl_gfx_map_populate(eo_obj, 0))
|
if (!_map_populate(eo_obj, 0))
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -171,54 +201,6 @@ _efl_gfx_map_map_move_sync_get(Eo *eo_obj, void *_pd EINA_UNUSED)
|
||||||
return om ? om->move_sync.enabled : EINA_TRUE;
|
return om ? om->move_sync.enabled : EINA_TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
EOLIAN static Eina_Bool
|
|
||||||
_efl_gfx_map_map_populate(Eo *eo_obj, void *_pd EINA_UNUSED, double z)
|
|
||||||
{
|
|
||||||
Evas_Object_Protected_Data *obj = EVAS_OBJ_GET_OR_RETURN(eo_obj, EINA_FALSE);
|
|
||||||
Evas_Map *m;
|
|
||||||
|
|
||||||
if (!obj->map->cur.map)
|
|
||||||
{
|
|
||||||
m = _evas_map_new(4, EINA_TRUE);
|
|
||||||
if (!m) return EINA_FALSE;
|
|
||||||
MAP_POPULATE_DEFAULT(m, z);
|
|
||||||
evas_object_map_set(eo_obj, m);
|
|
||||||
evas_map_free(m);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
m = (Evas_Map *) obj->map->cur.map;
|
|
||||||
MAP_POPULATE_DEFAULT(m, z);
|
|
||||||
MAP_OBJ_CHANGE();
|
|
||||||
}
|
|
||||||
|
|
||||||
return EINA_TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
EOLIAN static Eina_Bool
|
|
||||||
_efl_gfx_map_map_populate_manual(Eo *eo_obj, void *_pd EINA_UNUSED, double x, double y, double w, double h, double z)
|
|
||||||
{
|
|
||||||
Evas_Object_Protected_Data *obj = EVAS_OBJ_GET_OR_RETURN(eo_obj, EINA_FALSE);
|
|
||||||
Evas_Map *m;
|
|
||||||
|
|
||||||
if (!obj->map->cur.map)
|
|
||||||
{
|
|
||||||
m = _evas_map_new(4, EINA_TRUE);
|
|
||||||
if (!m) return EINA_FALSE;
|
|
||||||
_evas_map_util_points_populate(m, x, y, w, h, z);
|
|
||||||
evas_object_map_set(eo_obj, m);
|
|
||||||
evas_map_free(m);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
m = (Evas_Map *) obj->map->cur.map;
|
|
||||||
_evas_map_util_points_populate(m, x, y, w, h, z);
|
|
||||||
MAP_OBJ_CHANGE();
|
|
||||||
}
|
|
||||||
|
|
||||||
return EINA_TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
EOLIAN static Eina_Bool
|
EOLIAN static Eina_Bool
|
||||||
_efl_gfx_map_map_rotate(Eo *eo_obj, void *_pd EINA_UNUSED, double degrees, double cx, double cy)
|
_efl_gfx_map_map_rotate(Eo *eo_obj, void *_pd EINA_UNUSED, double degrees, double cx, double cy)
|
||||||
{
|
{
|
||||||
|
@ -227,7 +209,7 @@ _efl_gfx_map_map_rotate(Eo *eo_obj, void *_pd EINA_UNUSED, double degrees, doubl
|
||||||
|
|
||||||
if (!obj->map->cur.map)
|
if (!obj->map->cur.map)
|
||||||
{
|
{
|
||||||
if (!efl_gfx_map_populate(eo_obj, 0))
|
if (!_map_populate(eo_obj, 0))
|
||||||
return EINA_FALSE;
|
return EINA_FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -246,7 +228,7 @@ _efl_gfx_map_map_zoom(Eo *eo_obj, void *_pd EINA_UNUSED, double zoomx, double zo
|
||||||
|
|
||||||
if (!obj->map->cur.map)
|
if (!obj->map->cur.map)
|
||||||
{
|
{
|
||||||
if (!efl_gfx_map_populate(eo_obj, 0))
|
if (!_map_populate(eo_obj, 0))
|
||||||
return EINA_FALSE;
|
return EINA_FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -265,7 +247,7 @@ _efl_gfx_map_map_rotate_3d(Eo *eo_obj, void *_pd EINA_UNUSED, double dx, double
|
||||||
|
|
||||||
if (!obj->map->cur.map)
|
if (!obj->map->cur.map)
|
||||||
{
|
{
|
||||||
if (!efl_gfx_map_populate(eo_obj, 0))
|
if (!_map_populate(eo_obj, 0))
|
||||||
return EINA_FALSE;
|
return EINA_FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -284,7 +266,7 @@ _efl_gfx_map_map_quat_rotate(Eo *eo_obj, void *_pd EINA_UNUSED, double qx, doubl
|
||||||
|
|
||||||
if (!obj->map->cur.map)
|
if (!obj->map->cur.map)
|
||||||
{
|
{
|
||||||
if (!efl_gfx_map_populate(eo_obj, 0))
|
if (!_map_populate(eo_obj, 0))
|
||||||
return EINA_FALSE;
|
return EINA_FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -303,7 +285,7 @@ _efl_gfx_map_map_lightning_3d(Eo *eo_obj, void *_pd EINA_UNUSED, double lx, doub
|
||||||
|
|
||||||
if (!obj->map->cur.map)
|
if (!obj->map->cur.map)
|
||||||
{
|
{
|
||||||
if (!efl_gfx_map_populate(eo_obj, 0))
|
if (!_map_populate(eo_obj, 0))
|
||||||
return EINA_FALSE;
|
return EINA_FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -322,7 +304,7 @@ _efl_gfx_map_map_perspective_3d(Eo *eo_obj, void *_pd EINA_UNUSED, double px, do
|
||||||
|
|
||||||
if (!obj->map->cur.map)
|
if (!obj->map->cur.map)
|
||||||
{
|
{
|
||||||
if (!efl_gfx_map_populate(eo_obj, 0))
|
if (!_map_populate(eo_obj, 0))
|
||||||
return EINA_FALSE;
|
return EINA_FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -333,18 +315,6 @@ _efl_gfx_map_map_perspective_3d(Eo *eo_obj, void *_pd EINA_UNUSED, double px, do
|
||||||
return EINA_TRUE;
|
return EINA_TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
EOLIAN static double
|
|
||||||
_efl_gfx_map_map_point_z_get(Eo *eo_obj, void *_pd EINA_UNUSED, int idx)
|
|
||||||
{
|
|
||||||
Evas_Object_Protected_Data *obj = EVAS_OBJ_GET_OR_RETURN(eo_obj, 0.0);
|
|
||||||
EINA_SAFETY_ON_FALSE_RETURN_VAL((idx >= 0) && (idx < 4), 0.0);
|
|
||||||
|
|
||||||
const Evas_Map *m = obj->map->cur.map;
|
|
||||||
const Evas_Map_Point *p = m ? (m->points + idx) : NULL;
|
|
||||||
|
|
||||||
return p ? p->z : 0.0;
|
|
||||||
}
|
|
||||||
|
|
||||||
EOLIAN static Eina_Bool
|
EOLIAN static Eina_Bool
|
||||||
_efl_gfx_map_map_dup(Eo *eo_obj, void *_pd EINA_UNUSED, const Efl_Gfx_Map *other)
|
_efl_gfx_map_map_dup(Eo *eo_obj, void *_pd EINA_UNUSED, const Efl_Gfx_Map *other)
|
||||||
{
|
{
|
||||||
|
|
|
@ -14,17 +14,9 @@ mixin Efl.Gfx.Map (Efl.Interface, Efl.Object)
|
||||||
3D effects.
|
3D effects.
|
||||||
|
|
||||||
At the moment of writing, maps can only have 4 points (no more, no less).
|
At the moment of writing, maps can only have 4 points (no more, no less).
|
||||||
Usually, it will be necessary to update the map points (start afresh with
|
|
||||||
@.map_populate) whenever the object geometry changes.
|
|
||||||
|
|
||||||
Note: For now this mixin is only compatible with $Efl.Canvas.Object and
|
Note: For now this mixin is only compatible with $Efl.Canvas.Object and
|
||||||
shouldn't be used anywhere else.
|
shouldn't be used anywhere else.
|
||||||
|
|
||||||
Note: There are a few differences with legacy $Evas_Map:
|
|
||||||
- A map is now a property of an object, rather than a separate entity.
|
|
||||||
- @.map_move_sync is enabled by default
|
|
||||||
- @.map_populate will be called automatically if another map function
|
|
||||||
is called while the object has no map info.
|
|
||||||
]]
|
]]
|
||||||
data: null;
|
data: null;
|
||||||
methods {
|
methods {
|
||||||
|
@ -49,6 +41,16 @@ mixin Efl.Gfx.Map (Efl.Interface, Efl.Object)
|
||||||
enabled: bool; [[Enabled state.]]
|
enabled: bool; [[Enabled state.]]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
map_reset {
|
||||||
|
[[Resets the map transformation to its default state.
|
||||||
|
|
||||||
|
This will reset all transformations to identity, meaning the points'
|
||||||
|
colors, positions and UV coordinates will be reset to their default
|
||||||
|
values. This does not reset the @.map_enable flag.
|
||||||
|
|
||||||
|
@since 1.20
|
||||||
|
]]
|
||||||
|
}
|
||||||
@property map_clockwise {
|
@property map_clockwise {
|
||||||
[[Clockwise state of a map (read-only).
|
[[Clockwise state of a map (read-only).
|
||||||
|
|
||||||
|
@ -163,46 +165,6 @@ mixin Efl.Gfx.Map (Efl.Interface, Efl.Object)
|
||||||
enable: bool; [[$true by default.]]
|
enable: bool; [[$true by default.]]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@property map_point_z {
|
|
||||||
[[Value of Z coordinate of point $idx.
|
|
||||||
|
|
||||||
Useful to call @.map_populate without changing Z.
|
|
||||||
]]
|
|
||||||
get {}
|
|
||||||
keys {
|
|
||||||
idx: int; [[Point]]
|
|
||||||
}
|
|
||||||
values {
|
|
||||||
z: double; [[Z coordinate for point]]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
map_populate {
|
|
||||||
[[Populate source and destination map points to match this object.
|
|
||||||
]]
|
|
||||||
params {
|
|
||||||
z: double @optional; [[Point Z coordinate (pre-pesrpective transform),
|
|
||||||
used for all 4 points. 0 by default.]]
|
|
||||||
}
|
|
||||||
return: bool; [[$false in case of error.]]
|
|
||||||
}
|
|
||||||
map_populate_manual {
|
|
||||||
[[Populate source and destination map points to match given geometry.
|
|
||||||
|
|
||||||
Similar to @.map_populate, this call takes raw values instead of
|
|
||||||
querying this object's unmapped geometry. The given size will be
|
|
||||||
used to calculate destination points (@.map_point_coord) and set the
|
|
||||||
image uv (@.map_point_image_uv).
|
|
||||||
]]
|
|
||||||
params {
|
|
||||||
x: double; [[X coordinate]]
|
|
||||||
y: double; [[Y coordinate]]
|
|
||||||
w: double; [[Width]]
|
|
||||||
h: double; [[Height]]
|
|
||||||
z: double @optional; [[Point Z coordinate (pre-perspective transform),
|
|
||||||
used for all 4 points. 0 by default.]]
|
|
||||||
}
|
|
||||||
return: bool; [[$false in case of error.]]
|
|
||||||
}
|
|
||||||
map_rotate {
|
map_rotate {
|
||||||
[[Change the map to apply the given rotation.
|
[[Change the map to apply the given rotation.
|
||||||
|
|
||||||
|
|
|
@ -1251,7 +1251,6 @@ evas_map_util_clockwise_get(Evas_Map *m)
|
||||||
return EINA_FALSE;
|
return EINA_FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
/* If the return value is true, the map surface should be redrawn. */
|
/* If the return value is true, the map surface should be redrawn. */
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
Loading…
Reference in New Issue