forked from enlightenment/efl
elementary/mapbuf - added 2 apis, elm_mapbuf_point_color_set(), get().
for gradient color effect, mapbuf supports these 2 apis additionally.
This commit is contained in:
parent
9ff56c3abf
commit
175f7cb5fb
|
@ -102,12 +102,19 @@ _configure(Evas_Object *obj)
|
|||
if (sd->enabled && !evas_object_visible_get(obj)) return;
|
||||
|
||||
Evas_Coord x, y, w, h;
|
||||
int i;
|
||||
evas_object_geometry_get(wd->resize_obj, &x, &y, &w, &h);
|
||||
|
||||
if (sd->enabled)
|
||||
{
|
||||
if (!m) m = evas_map_new(4);
|
||||
evas_map_util_points_populate_from_geometry(m, x, y, w, h, 0);
|
||||
for (i = 0; i < (int)(sizeof(sd->colors)/sizeof(sd->colors[0])); i++)
|
||||
{
|
||||
evas_map_point_color_set(m, i, sd->colors[i].r, sd->colors[i].g,
|
||||
sd->colors[i].b, sd->colors[i].a);
|
||||
}
|
||||
|
||||
evas_map_smooth_set(m, sd->smooth);
|
||||
evas_map_alpha_set(m, sd->alpha);
|
||||
evas_object_map_set(sd->content, m);
|
||||
|
@ -273,6 +280,8 @@ _elm_mapbuf_smart_add(Eo *obj, void *_pd, va_list *list EINA_UNUSED)
|
|||
{
|
||||
Elm_Mapbuf_Smart_Data *priv = _pd;
|
||||
Evas_Object *rect = evas_object_rectangle_add(evas_object_evas_get(obj));
|
||||
int i;
|
||||
|
||||
elm_widget_resize_object_set(obj, rect, EINA_TRUE);
|
||||
|
||||
eo_do_super(obj, MY_CLASS, evas_obj_smart_add());
|
||||
|
@ -282,6 +291,14 @@ _elm_mapbuf_smart_add(Eo *obj, void *_pd, va_list *list EINA_UNUSED)
|
|||
evas_object_pass_events_set(rect, EINA_TRUE);
|
||||
evas_object_color_set(rect, 0, 0, 0, 0);
|
||||
|
||||
for (i = 0; i < (int)(sizeof(priv->colors)/sizeof(priv->colors[0])); i++)
|
||||
{
|
||||
priv->colors[i].r = 255;
|
||||
priv->colors[i].g = 255;
|
||||
priv->colors[i].b = 255;
|
||||
priv->colors[i].a = 255;
|
||||
}
|
||||
|
||||
priv->self = obj;
|
||||
priv->alpha = EINA_TRUE;
|
||||
priv->smooth = EINA_TRUE;
|
||||
|
@ -488,6 +505,76 @@ _auto_get(Eo *obj EINA_UNUSED, void *_pd, va_list *list)
|
|||
*ret = sd->automode;
|
||||
}
|
||||
|
||||
static void
|
||||
_point_color_get(Eo *obj EINA_UNUSED, void *_pd, va_list *list)
|
||||
{
|
||||
int idx = va_arg(*list, int);
|
||||
int *r = va_arg(*list, int *);
|
||||
int *g = va_arg(*list, int *);
|
||||
int *b = va_arg(*list, int *);
|
||||
int *a = va_arg(*list, int *);
|
||||
|
||||
Elm_Mapbuf_Smart_Data *sd = _pd;
|
||||
|
||||
*r = sd->colors[idx].r;
|
||||
*g = sd->colors[idx].g;
|
||||
*b = sd->colors[idx].b;
|
||||
*a =sd->colors[idx].a;
|
||||
}
|
||||
|
||||
EAPI void
|
||||
elm_mapbuf_point_color_get(Evas_Object *obj, int idx,
|
||||
int *r, int *g, int *b, int *a)
|
||||
{
|
||||
ELM_MAPBUF_CHECK(obj);
|
||||
ELM_MAPBUF_DATA_GET(obj, sd);
|
||||
|
||||
if ((idx < 0) || (idx >= (int)(sizeof(sd->colors)/sizeof(sd->colors[0]))))
|
||||
{
|
||||
ERR("idx value should be 0 ~ %d, mapbuf(%p)",
|
||||
((sizeof(sd->colors)/sizeof(sd->colors[0])) - 1), obj);
|
||||
return;
|
||||
}
|
||||
|
||||
eo_do(obj, elm_obj_mapbuf_point_color_get(idx, r, g, b, a));
|
||||
}
|
||||
|
||||
static void
|
||||
_point_color_set(Eo *obj EINA_UNUSED, void *_pd, va_list *list)
|
||||
{
|
||||
int idx = va_arg(*list, int);
|
||||
int r = va_arg(*list, int);
|
||||
int g = va_arg(*list, int);
|
||||
int b = va_arg(*list, int);
|
||||
int a = va_arg(*list, int);
|
||||
|
||||
Elm_Mapbuf_Smart_Data *sd = _pd;
|
||||
|
||||
sd->colors[idx].r = r;
|
||||
sd->colors[idx].g = g;
|
||||
sd->colors[idx].b = b;
|
||||
sd->colors[idx].a = a;
|
||||
|
||||
_configure(obj);
|
||||
}
|
||||
|
||||
EAPI void
|
||||
elm_mapbuf_point_color_set(Evas_Object *obj, int idx,
|
||||
int r, int g, int b, int a)
|
||||
{
|
||||
ELM_MAPBUF_CHECK(obj);
|
||||
ELM_MAPBUF_DATA_GET(obj, sd);
|
||||
|
||||
if ((idx < 0) || (idx >= (int)(sizeof(sd->colors)/sizeof(sd->colors[0]))))
|
||||
{
|
||||
ERR("idx value should be 0 ~ %d, mapbuf(%p)",
|
||||
((sizeof(sd->colors)/sizeof(sd->colors[0])) - 1), obj);
|
||||
return;
|
||||
}
|
||||
|
||||
eo_do(obj, elm_obj_mapbuf_point_color_set(idx, r, g, b, a));
|
||||
}
|
||||
|
||||
static void
|
||||
_class_constructor(Eo_Class *klass)
|
||||
{
|
||||
|
@ -516,6 +603,8 @@ _class_constructor(Eo_Class *klass)
|
|||
EO_OP_FUNC(ELM_OBJ_MAPBUF_ID(ELM_OBJ_MAPBUF_SUB_ID_ALPHA_GET), _alpha_get),
|
||||
EO_OP_FUNC(ELM_OBJ_MAPBUF_ID(ELM_OBJ_MAPBUF_SUB_ID_AUTO_SET), _auto_set),
|
||||
EO_OP_FUNC(ELM_OBJ_MAPBUF_ID(ELM_OBJ_MAPBUF_SUB_ID_AUTO_GET), _auto_get),
|
||||
EO_OP_FUNC(ELM_OBJ_MAPBUF_ID(ELM_OBJ_MAPBUF_SUB_ID_POINT_COLOR_SET), _point_color_set),
|
||||
EO_OP_FUNC(ELM_OBJ_MAPBUF_ID(ELM_OBJ_MAPBUF_SUB_ID_POINT_COLOR_GET), _point_color_get),
|
||||
EO_OP_FUNC_SENTINEL
|
||||
};
|
||||
eo_class_funcs_set(klass, func_desc);
|
||||
|
@ -531,6 +620,8 @@ static const Eo_Op_Description op_desc[] = {
|
|||
EO_OP_DESCRIPTION(ELM_OBJ_MAPBUF_SUB_ID_ALPHA_GET, "Get a value whether alpha blending is enabled or not."),
|
||||
EO_OP_DESCRIPTION(ELM_OBJ_MAPBUF_SUB_ID_AUTO_SET, "Turn map on or off automatically based on object visibility."),
|
||||
EO_OP_DESCRIPTION(ELM_OBJ_MAPBUF_SUB_ID_AUTO_GET, "Get automatic mode state."),
|
||||
EO_OP_DESCRIPTION(ELM_OBJ_MAPBUF_SUB_ID_POINT_COLOR_SET, "Set a vertex color of the mapbuf"),
|
||||
EO_OP_DESCRIPTION(ELM_OBJ_MAPBUF_SUB_ID_POINT_COLOR_GET, "Get a vertex color of the mapbuf"),
|
||||
EO_OP_DESCRIPTION_SENTINEL
|
||||
};
|
||||
static const Eo_Class_Description class_desc = {
|
||||
|
|
|
@ -19,6 +19,8 @@ enum
|
|||
ELM_OBJ_MAPBUF_SUB_ID_ALPHA_GET,
|
||||
ELM_OBJ_MAPBUF_SUB_ID_AUTO_SET,
|
||||
ELM_OBJ_MAPBUF_SUB_ID_AUTO_GET,
|
||||
ELM_OBJ_MAPBUF_SUB_ID_POINT_COLOR_SET,
|
||||
ELM_OBJ_MAPBUF_SUB_ID_POINT_COLOR_GET,
|
||||
ELM_OBJ_MAPBUF_SUB_ID_LAST
|
||||
};
|
||||
|
||||
|
@ -121,6 +123,38 @@ enum
|
|||
*/
|
||||
#define elm_obj_mapbuf_auto_get(ret) ELM_OBJ_MAPBUF_ID(ELM_OBJ_MAPBUF_SUB_ID_AUTO_GET), EO_TYPECHECK(Eina_Bool *, ret)
|
||||
|
||||
/**
|
||||
* @def elm_obj_mapbuf_point_color_set
|
||||
* @since 1.9
|
||||
*
|
||||
* Set a vertex color of the mapbuf
|
||||
*
|
||||
* @param[in] idx
|
||||
* @param[in] r
|
||||
* @param[in] g
|
||||
* @param[in] b
|
||||
* @param[in] a
|
||||
*
|
||||
* @see elm_mapbuf_point_color_set
|
||||
*/
|
||||
#define elm_obj_mapbuf_point_color_set(idx, r, g, b, a) ELM_OBJ_MAPBUF_ID(ELM_OBJ_MAPBUF_SUB_ID_POINT_COLOR_SET), EO_TYPECHECK(int, idx), EO_TYPECHECK(int, r), EO_TYPECHECK(int, g), EO_TYPECHECK(int, b), EO_TYPECHECK(int, a)
|
||||
|
||||
/**
|
||||
* @def elm_obj_mapbuf_point_color_get
|
||||
* @since 1.9
|
||||
*
|
||||
* get a vertex color of the mapbuf
|
||||
*
|
||||
* @param[in] idx
|
||||
* @param[out] r
|
||||
* @param[out] g
|
||||
* @param[out] b
|
||||
* @param[out] a
|
||||
*
|
||||
* @see elm_mapbuf_point_color_get
|
||||
*/
|
||||
#define elm_obj_mapbuf_point_color_get(idx, r, g, b, a) ELM_OBJ_MAPBUF_ID(ELM_OBJ_MAPBUF_SUB_ID_POINT_COLOR_GET), EO_TYPECHECK(int, idx), EO_TYPECHECK(int *, r), EO_TYPECHECK(int *, g), EO_TYPECHECK(int *, b), EO_TYPECHECK(int *, a)
|
||||
|
||||
/**
|
||||
* @}
|
||||
*/
|
||||
|
|
|
@ -145,3 +145,42 @@ EAPI void elm_mapbuf_auto_set(Evas_Object *obj, Eina_Boo
|
|||
*/
|
||||
EAPI Eina_Bool elm_mapbuf_auto_get(const Evas_Object *obj);
|
||||
|
||||
/**
|
||||
* Set the color of a vertex in the mapbuf
|
||||
*
|
||||
* This sets the color of the vertex in the mapbuf. Colors will be linearly
|
||||
* interpolated between vertex points through the mapbuf. Color will multiply
|
||||
* the "texture" pixels (like GL_MODULATE in OpenGL). The default color of
|
||||
* a vertex in a mapbuf is white solid (255, 255, 255, 255) which means it will
|
||||
* have no affect on modifying the texture pixels.
|
||||
*
|
||||
* @param obj The mapbuf object.
|
||||
* @param idx index of point to change. Must be smaller than mapbuf size.
|
||||
* @param r red (0 - 255)
|
||||
* @param g green (0 - 255)
|
||||
* @param b blue (0 - 255)
|
||||
* @param a alpha (0 - 255)
|
||||
*
|
||||
* @see evas_object_map_set()
|
||||
* @since 1.9
|
||||
*/
|
||||
EAPI void elm_mapbuf_point_color_set(Evas_Object *obj, int idx, int r, int g, int b, int a);
|
||||
|
||||
/**
|
||||
* Get the color set on a vertex in the mapbuf
|
||||
*
|
||||
* This gets the color set by elm_mapbuf_point_color_set() on the given vertex
|
||||
* of the mapbuf.
|
||||
*
|
||||
* @param obj The mapbuf object.
|
||||
* @param idx index of point get. Must be smaller than map size.
|
||||
* @param r pointer to red return
|
||||
* @param g pointer to green return
|
||||
* @param b pointer to blue return
|
||||
* @param a pointer to alpha return
|
||||
*
|
||||
* @see elm_mapbuf_point_color_set()
|
||||
*
|
||||
* @since 1.9
|
||||
*/
|
||||
EAPI void elm_mapbuf_point_color_get(Evas_Object *obj, int idx, int *r, int *g, int *b, int *a);
|
||||
|
|
|
@ -22,8 +22,11 @@ struct _Elm_Mapbuf_Smart_Data
|
|||
{
|
||||
Evas_Object *self;
|
||||
Evas_Object *content;
|
||||
|
||||
Ecore_Idler *idler;
|
||||
struct
|
||||
{
|
||||
int r, g, b, a;
|
||||
} colors[4];
|
||||
|
||||
Eina_Bool enabled : 1;
|
||||
Eina_Bool smooth_saved : 1;
|
||||
|
|
Loading…
Reference in New Issue