emotion/border: Add support for selecting the border colors.

This is a simple API that implements colors for the borders specified by
emotion_object_border_set(), using a background rectangle behind the
emotion object.

SVN revision: 63415
This commit is contained in:
Rafael Antognolli 2011-09-15 18:51:27 +00:00
parent 77f43424a6
commit 5c3474beed
3 changed files with 83 additions and 6 deletions

View File

@ -122,7 +122,8 @@ _canvas_resize_cb(Ecore_Evas *ee)
em = ecore_evas_data_get(ee, "emotion");
evas_object_resize(bg, w, h);
evas_object_resize(em, w, h);
evas_object_move(em, 10, 10);
evas_object_resize(em, w - 20, h - 20);
}
int
@ -175,9 +176,11 @@ main(int argc, const char *argv[])
/* Creating the emotion object */
em = _create_emotion_object(e);
emotion_object_file_set(em, eina_list_data_get(curfile));
evas_object_move(em, 0, 0);
evas_object_move(em, 10, 10);
evas_object_resize(em, WIDTH, HEIGHT);
emotion_object_border_set(em, -30, -30, -30, -30);
evas_object_resize(em, WIDTH - 20, HEIGHT - 20);
emotion_object_border_set(em, 0, 0, 50, 50);
emotion_object_bg_color_set(em, 0, 128, 0, 255);
evas_object_show(em);
ecore_evas_data_set(ee, "emotion", em);

View File

@ -395,11 +395,11 @@ EAPI Eina_Bool emotion_object_init (Evas_Object *obj, const
* that respective side of the video will be cropped.
*
* It's possible to set a color for the added borders (default is transparent)
* with emotion_object_border_color_set(). By default, an Emotion object doesn't
* with emotion_object_bg_color_set(). By default, an Emotion object doesn't
* have any border.
*
* @see emotion_object_border_get()
* @see emotion_object_border_color_set()
* @see emotion_object_bg_color_set()
*/
EAPI void emotion_object_border_set(Evas_Object *obj, int l, int r, int t, int b);
@ -416,6 +416,38 @@ EAPI void emotion_object_border_set(Evas_Object *obj, int l, int r, int t, int b
*/
EAPI void emotion_object_border_get(const Evas_Object *obj, int *l, int *r, int *t, int *b);
/**
* @brief Set a color for the background rectangle of this emotion object.
*
* @param obj The emotion object where the background color is being set.
* @param r Red component of the color.
* @param g Green component of the color.
* @param b Blue component of the color.
* @param a Alpha channel of the color.
*
* This is useful when a border is added to any side of the Emotion object. The
* area between the edge of the video and the edge of the object will be filled
* with the specified color.
*
* The default color is 0, 0, 0, 0 (transparent).
*
* @see emotion_object_bg_color_get()
*/
EAPI void emotion_object_bg_color_set(Evas_Object *obj, int r, int g, int b, int a);
/**
* @brief Get the background color set for the emotion object.
*
* @param obj The emotion object from which the background color is being retrieved.
* @param r Red component of the color.
* @param g Green component of the color.
* @param b Blue component of the color.
* @param a AAlpha channel of the color.
*
* @see emotion_object_bg_color_set()
*/
EAPI void emotion_object_bg_color_get(const Evas_Object *obj, int *r, int *g, int *b, int *a);
/**
* @brief Set the file to be played in the Emotion object.
*

View File

@ -55,6 +55,7 @@ struct _Smart_Data
const char *file;
Evas_Object *obj;
Evas_Object *bg;
Ecore_Job *job;
@ -492,7 +493,7 @@ emotion_object_border_set(Evas_Object *obj, int l, int r, int t, int b)
}
EAPI void
emotion_object_border_get(Evas_Object *obj, int *l, int *r, int *t, int *b)
emotion_object_border_get(const Evas_Object *obj, int *l, int *r, int *t, int *b)
{
Smart_Data *sd;
@ -503,6 +504,33 @@ emotion_object_border_get(Evas_Object *obj, int *l, int *r, int *t, int *b)
*b = -sd->crop.b;
}
EAPI void
emotion_object_bg_color_set(Evas_Object *obj, int r, int g, int b, int a)
{
Smart_Data *sd;
E_SMART_OBJ_GET(sd, obj, E_OBJ_NAME);
evas_object_color_set(sd->bg, r, g, b, a);
if (!evas_object_visible_get(obj))
return;
if (a > 0)
evas_object_show(sd->bg);
else
evas_object_hide(sd->bg);
}
EAPI void
emotion_object_bg_color_get(const Evas_Object *obj, int *r, int *g, int *b, int *a)
{
Smart_Data *sd;
E_SMART_OBJ_GET(sd, obj, E_OBJ_NAME);
evas_object_color_get(sd->bg, r, g, b, a);
}
EAPI void
emotion_object_play_set(Evas_Object *obj, Eina_Bool play)
{
@ -1679,10 +1707,14 @@ _smart_add(Evas_Object * obj)
EINA_REFCOUNT_INIT(sd);
sd->state = EMOTION_WAKEUP;
sd->obj = evas_object_image_add(evas_object_evas_get(obj));
sd->bg = evas_object_rectangle_add(evas_object_evas_get(obj));
evas_object_color_set(sd->bg, 0, 0, 0, 0);
evas_object_event_callback_add(sd->obj, EVAS_CALLBACK_MOUSE_MOVE, _mouse_move, sd);
evas_object_event_callback_add(sd->obj, EVAS_CALLBACK_MOUSE_DOWN, _mouse_down, sd);
evas_object_image_pixels_get_callback_set(sd->obj, _pixels_get, sd);
evas_object_smart_member_add(sd->obj, obj);
evas_object_smart_member_add(sd->bg, obj);
evas_object_lower(sd->bg);
sd->ratio = 1.0;
sd->spu.button = -1;
evas_object_image_alpha_set(sd->obj, 0);
@ -1719,6 +1751,7 @@ _smart_move(Evas_Object * obj, Evas_Coord x, Evas_Coord y)
int vid_w, vid_h, w, h;
sd->module->video_data_size_get(sd->video, &vid_w, &vid_h);
_clipper_position_size_update(obj, vid_w, vid_h);
evas_object_move(sd->bg, x, y);
}
static void
@ -1733,18 +1766,24 @@ _smart_resize(Evas_Object * obj, Evas_Coord w, Evas_Coord h)
sd->module->video_data_size_get(sd->video, &vid_w, &vid_h);
_clipper_position_size_update(obj, vid_w, vid_h);
evas_object_resize(sd->bg, w, h);
}
static void
_smart_show(Evas_Object * obj)
{
Smart_Data *sd;
int a;
sd = evas_object_smart_data_get(obj);
if (!sd) return;
evas_object_show(sd->obj);
if (sd->crop.clipper)
evas_object_show(sd->crop.clipper);
evas_object_color_get(sd->bg, NULL, NULL, NULL, &a);
if (a > 0)
evas_object_show(sd->bg);
}
static void
@ -1757,6 +1796,7 @@ _smart_hide(Evas_Object * obj)
evas_object_hide(sd->obj);
if (sd->crop.clipper)
evas_object_hide(sd->crop.clipper);
evas_object_hide(sd->bg);
}
static void
@ -1781,6 +1821,7 @@ _smart_clip_set(Evas_Object * obj, Evas_Object * clip)
evas_object_clip_set(sd->crop.clipper, clip);
else
evas_object_clip_set(sd->obj, clip);
evas_object_clip_set(sd->bg, clip);
}
static void
@ -1794,5 +1835,6 @@ _smart_clip_unset(Evas_Object * obj)
evas_object_clip_unset(sd->crop.clipper);
else
evas_object_clip_unset(sd->obj);
evas_object_clip_unset(sd->bg);
}