parent
69c9bca326
commit
4e6e38a200
9 changed files with 527 additions and 3 deletions
After Width: | Height: | Size: 2.7 KiB |
@ -0,0 +1,310 @@ |
||||
#include "ephoto.h" |
||||
|
||||
typedef struct _Smart_Data Smart_Data; |
||||
|
||||
struct _Smart_Data |
||||
{ |
||||
Evas_Object *obj; |
||||
Evas_Object *images; |
||||
int x; |
||||
int y; |
||||
int w; |
||||
int h; |
||||
Evas_Object *center_image_one; |
||||
Evas_Object *center_image_two; |
||||
Eina_List *current_node; |
||||
Eina_List *list; |
||||
Ecore_Timer *timer; |
||||
}; |
||||
|
||||
static Evas_Smart *_smart = NULL; |
||||
|
||||
static void _slide_smart_reconfigure(Smart_Data *sd); |
||||
static void _slide_smart_init(void); |
||||
static void _slide_smart_add(Evas_Object *obj); |
||||
static void _slide_smart_del(Evas_Object *obj); |
||||
static void _slide_smart_move(Evas_Object *obj, Evas_Coord x, Evas_Coord y); |
||||
static void _slide_smart_resize(Evas_Object *obj, Evas_Coord w, Evas_Coord h); |
||||
static void _slide_smart_show(Evas_Object *obj); |
||||
static void _slide_smart_hide(Evas_Object *obj); |
||||
static void _slide_smart_color_set(Evas_Object *obj, int r, int g, int b, int a); |
||||
static void _slide_smart_clip_set(Evas_Object *obj, Evas_Object *clip); |
||||
static void _slide_smart_clip_unset(Evas_Object *obj); |
||||
|
||||
static int change_image(void *data); |
||||
static void go_back(void *data, Evas_Object *obj, const char *emission, const char *source); |
||||
static void done(void *data, Evas_Object *obj, const char *emission, const char *source); |
||||
|
||||
static int change_image(void *data) |
||||
{ |
||||
char *center; |
||||
Smart_Data *sd; |
||||
|
||||
sd = data; |
||||
|
||||
done(sd, sd->obj, NULL, NULL); |
||||
|
||||
if (sd->current_node->next) |
||||
sd->current_node = sd->current_node->next; |
||||
else |
||||
sd->current_node = sd->list; |
||||
|
||||
center = sd->current_node->data; |
||||
evas_object_image_file_set(sd->center_image_two, center, NULL); |
||||
|
||||
edje_object_signal_emit(sd->images, "ephoto.change.image", "ephoto"); |
||||
|
||||
return 1; |
||||
} |
||||
|
||||
static void go_back(void *data, Evas_Object *obj, const char *emission, const char *source) |
||||
{ |
||||
Smart_Data *sd; |
||||
|
||||
sd = data; |
||||
|
||||
ephoto_slide_stop(obj); |
||||
hide_slideshow(); |
||||
show_flow_view(sd->current_node, sd->list); |
||||
} |
||||
|
||||
static void done(void *data, Evas_Object *obj, const char *emission, const char *source) |
||||
{ |
||||
char *center; |
||||
Smart_Data *sd; |
||||
|
||||
sd = data; |
||||
|
||||
center = sd->current_node->data; |
||||
|
||||
evas_object_image_file_set(sd->center_image_one, center, NULL); |
||||
} |
||||
|
||||
Evas_Object *ephoto_slide_add(Evas *e) |
||||
{ |
||||
_slide_smart_init(); |
||||
return evas_object_smart_add(e, _smart); |
||||
} |
||||
|
||||
void ephoto_slide_current_node_set(Evas_Object *obj, Eina_List *node) |
||||
{ |
||||
char *center; |
||||
Smart_Data *sd; |
||||
|
||||
sd = evas_object_smart_data_get(obj); |
||||
|
||||
sd->current_node = node; |
||||
center = sd->current_node->data; |
||||
|
||||
evas_object_image_file_set(sd->center_image_one, center, NULL); |
||||
|
||||
return; |
||||
} |
||||
|
||||
void ephoto_slide_item_list_set(Evas_Object *obj, Eina_List *list) |
||||
{ |
||||
Smart_Data *sd; |
||||
|
||||
sd = evas_object_smart_data_get(obj); |
||||
|
||||
sd->list = list; |
||||
return; |
||||
} |
||||
|
||||
void ephoto_slide_start(Evas_Object *obj) |
||||
{ |
||||
Smart_Data *sd; |
||||
|
||||
sd = evas_object_smart_data_get(obj); |
||||
|
||||
sd->timer = ecore_timer_add(3, change_image, sd);
|
||||
} |
||||
|
||||
void ephoto_slide_stop(Evas_Object *obj) |
||||
{ |
||||
Smart_Data *sd; |
||||
|
||||
sd = evas_object_smart_data_get(obj); |
||||
|
||||
ecore_timer_del(sd->timer); |
||||
} |
||||
|
||||
static void _slide_smart_reconfigure(Smart_Data *sd) |
||||
{ |
||||
int w, h, nw, nh; |
||||
|
||||
evas_object_geometry_get(sd->obj, 0, 0, &w, &h); |
||||
|
||||
nw = w/1.2; |
||||
nh = h/1.2; |
||||
|
||||
edje_object_part_unswallow(sd->obj, sd->images); |
||||
evas_object_image_load_size_set(sd->center_image_one, nw, nh); |
||||
evas_object_image_load_size_set(sd->center_image_two, nw, nh); |
||||
evas_object_resize(sd->center_image_one, nw, nh); |
||||
evas_object_resize(sd->center_image_two, nw, nh); |
||||
evas_object_resize(sd->images, nw, nh); |
||||
evas_object_size_hint_min_set(sd->images, nw, nh); |
||||
evas_object_size_hint_max_set(sd->images, nw, nh); |
||||
edje_object_part_swallow(sd->obj, "ephoto.swallow.content", sd->images); |
||||
|
||||
return; |
||||
} |
||||
|
||||
static void _slide_smart_init(void) |
||||
{ |
||||
if (_smart) |
||||
return; |
||||
{ |
||||
static const Evas_Smart_Class sc = |
||||
{ |
||||
"ephoto_slide", |
||||
EVAS_SMART_CLASS_VERSION, |
||||
_slide_smart_add, |
||||
_slide_smart_del, |
||||
_slide_smart_move, |
||||
_slide_smart_resize, |
||||
_slide_smart_show, |
||||
_slide_smart_hide, |
||||
_slide_smart_color_set, |
||||
_slide_smart_clip_set, |
||||
_slide_smart_clip_unset, |
||||
NULL, |
||||
NULL |
||||
}; |
||||
_smart = evas_smart_class_new(&sc); |
||||
} |
||||
} |
||||
|
||||
static void _slide_smart_add(Evas_Object *obj) |
||||
{ |
||||
Smart_Data *sd; |
||||
|
||||
sd = calloc(1, sizeof(Smart_Data)); |
||||
if (!sd) |
||||
return; |
||||
|
||||
sd->w = 0; |
||||
sd->h = 0; |
||||
sd->x = 0; |
||||
sd->y = 0; |
||||
|
||||
sd->obj = edje_object_add(em->e); |
||||
edje_object_file_set(sd->obj, PACKAGE_DATA_DIR "/themes/default/ephoto.edj", "/ephoto/slide/view"); |
||||
evas_object_smart_data_set(obj, sd); |
||||
|
||||
sd->images = edje_object_add(em->e); |
||||
edje_object_file_set(sd->images, PACKAGE_DATA_DIR "/themes/default/ephoto.edj", "/ephoto/slide/images"); |
||||
edje_object_part_swallow(sd->obj, "ephoto.swallow.content", sd->images); |
||||
|
||||
sd->center_image_one = (Evas_Object *)edje_object_part_object_get(sd->images, "ephoto.image.one"); |
||||
evas_object_image_filled_set(sd->center_image_one, EINA_FALSE); |
||||
evas_object_image_smooth_scale_set(sd->center_image_one, EINA_TRUE); |
||||
sd->center_image_two = (Evas_Object *)edje_object_part_object_get(sd->images, "ephoto.image.two"); |
||||
evas_object_image_filled_set(sd->center_image_two, EINA_TRUE); |
||||
evas_object_image_smooth_scale_set(sd->center_image_two, EINA_FALSE); |
||||
|
||||
edje_object_signal_callback_add(sd->obj, "mouse,up,1", "ephoto.move.back", go_back, sd); |
||||
edje_object_signal_callback_add(sd->images, "ephoto.transition.done", "ephoto", done, sd);
|
||||
} |
||||
|
||||
static void _slide_smart_del(Evas_Object *obj) |
||||
{ |
||||
Smart_Data *sd; |
||||
|
||||
sd = evas_object_smart_data_get(obj); |
||||
if (!sd) |
||||
return; |
||||
evas_object_del(sd->images); |
||||
evas_object_del(sd->obj); |
||||
free(sd); |
||||
} |
||||
|
||||
static void _slide_smart_move(Evas_Object *obj, Evas_Coord x, Evas_Coord y) |
||||
{ |
||||
Smart_Data *sd; |
||||
|
||||
sd = evas_object_smart_data_get(obj); |
||||
if (!sd) |
||||
return; |
||||
if ((x == sd->x) && (y == sd->y)) |
||||
return; |
||||
sd->x = x; |
||||
sd->y = y; |
||||
evas_object_move(sd->obj, x, y); |
||||
_slide_smart_reconfigure(sd); |
||||
} |
||||
|
||||
static void _slide_smart_resize(Evas_Object *obj, Evas_Coord w, Evas_Coord h) |
||||
{ |
||||
Smart_Data *sd; |
||||
|
||||
sd = evas_object_smart_data_get(obj); |
||||
if (!sd) |
||||
return; |
||||
|
||||
if ((w == sd->w) && (h == sd->h)) |
||||
return; |
||||
sd->w = w; |
||||
sd->h = h; |
||||
evas_object_resize(sd->obj, w, h); |
||||
_slide_smart_reconfigure(sd); |
||||
} |
||||
|
||||
static void _slide_smart_show(Evas_Object *obj) |
||||
{ |
||||
Smart_Data *sd; |
||||
|
||||
sd = evas_object_smart_data_get(obj); |
||||
if (!sd) |
||||
return; |
||||
|
||||
evas_object_show(sd->obj); |
||||
evas_object_show(sd->images); |
||||
} |
||||
|
||||
static void _slide_smart_hide(Evas_Object *obj) |
||||
{ |
||||
Smart_Data *sd; |
||||
|
||||
sd = evas_object_smart_data_get(obj); |
||||
if (!sd) |
||||
return; |
||||
|
||||
evas_object_hide(sd->obj); |
||||
evas_object_hide(sd->images); |
||||
} |
||||
|
||||
static void _slide_smart_color_set(Evas_Object *obj, int r, int g, int b, int a) |
||||
{ |
||||
Smart_Data *sd; |
||||
|
||||
sd = evas_object_smart_data_get(obj); |
||||
if (!sd) |
||||
return; |
||||
evas_object_color_set(sd->obj, r, g, b, a); |
||||
} |
||||
|
||||
static void _slide_smart_clip_set(Evas_Object *obj, Evas_Object *clip) |
||||
{ |
||||
Smart_Data *sd; |
||||
|
||||
sd = evas_object_smart_data_get(obj); |
||||
if (!sd) |
||||
return; |
||||
evas_object_clip_set(sd->obj, clip); |
||||
|
||||
return; |
||||
} |
||||
|
||||
static void _slide_smart_clip_unset(Evas_Object *obj) |
||||
{ |
||||
Smart_Data *sd; |
||||
|
||||
sd = evas_object_smart_data_get(obj); |
||||
if (!sd) |
||||
return; |
||||
evas_object_clip_unset(sd->obj); |
||||
|
||||
return; |
||||
} |
@ -0,0 +1,26 @@ |
||||
#include "ephoto.h" |
||||
|
||||
void add_slideshow(void) |
||||
{ |
||||
Evas_Object *o; |
||||
|
||||
o = ephoto_slide_add(em->e); |
||||
em->slideshow = o; |
||||
} |
||||
|
||||
void show_slideshow(Eina_List *node, Eina_List *list) |
||||
{ |
||||
ephoto_slide_current_node_set(em->slideshow, node); |
||||
ephoto_slide_item_list_set(em->slideshow, list); |
||||
evas_object_show(em->slideshow); |
||||
edje_object_part_swallow(em->bg, "ephoto.swallow.content", em->slideshow); |
||||
ephoto_slide_start(em->slideshow); |
||||
} |
||||
|
||||
void hide_slideshow(void) |
||||
{ |
||||
ephoto_slide_stop(em->slideshow); |
||||
evas_object_hide(em->slideshow); |
||||
edje_object_part_unswallow(em->bg, em->slideshow); |
||||
} |
||||
|
Loading…
Reference in new issue