diff --git a/legacy/elementary/src/lib/Makefile.am b/legacy/elementary/src/lib/Makefile.am index f612a7ac7c..1c6dfa65c6 100644 --- a/legacy/elementary/src/lib/Makefile.am +++ b/legacy/elementary/src/lib/Makefile.am @@ -608,7 +608,8 @@ elm_widget_item.eo \ elm_color_item.eo \ elm_dayselector_item.eo \ elm_hoversel_item.eo \ -elm_segment_control_item.eo +elm_segment_control_item.eo \ +elm_slideshow_item.eo elm_eolian_c = $(elm_eolian_files:%.eo=%.eo.c) elm_eolian_h = $(elm_eolian_files:%.eo=%.eo.h) @@ -724,8 +725,8 @@ elementaryeolianfiles_DATA = \ elm_color_item.eo \ elm_dayselector_item.eo \ elm_hoversel_item.eo \ - elm_segment_control_item.eo - + elm_segment_control_item.eo \ + elm_slideshow_item.eo EXTRA_DIST += ${elementaryeolianfiles_DATA} diff --git a/legacy/elementary/src/lib/elm_slideshow.c b/legacy/elementary/src/lib/elm_slideshow.c index 7e930e2bc9..d2e5cfe36d 100644 --- a/legacy/elementary/src/lib/elm_slideshow.c +++ b/legacy/elementary/src/lib/elm_slideshow.c @@ -5,6 +5,7 @@ #define ELM_INTERFACE_ATSPI_ACCESSIBLE_PROTECTED #define ELM_INTERFACE_ATSPI_WIDGET_ACTION_PROTECTED +#define ELM_WIDGET_ITEM_PROTECTED #include #include "elm_priv.h" @@ -97,27 +98,29 @@ _elm_slideshow_elm_layout_sizing_eval(Eo *obj, Elm_Slideshow_Data *_pd EINA_UNUS evas_object_size_hint_max_set(obj, minw, minh); } -static Elm_Slideshow_Item * -_item_prev_get(Elm_Slideshow_Item *item) +static Elm_Slideshow_Item_Data * +_item_prev_get(Elm_Slideshow_Item_Data *item) { ELM_SLIDESHOW_DATA_GET(WIDGET(item), sd); - Elm_Slideshow_Item *prev = eina_list_data_get(eina_list_prev(item->l)); + Elm_Object_Item *eo_prev = eina_list_data_get(eina_list_prev(item->l)); - if ((!prev) && (sd->loop)) - prev = eina_list_data_get(eina_list_last(item->l)); + if ((!eo_prev) && (sd->loop)) + eo_prev = eina_list_data_get(eina_list_last(item->l)); + ELM_SLIDESHOW_ITEM_DATA_GET(eo_prev, prev); return prev; } -static Elm_Slideshow_Item * -_item_next_get(Elm_Slideshow_Item *item) +static Elm_Slideshow_Item_Data * +_item_next_get(Elm_Slideshow_Item_Data *item) { ELM_SLIDESHOW_DATA_GET(WIDGET(item), sd); - Elm_Slideshow_Item *next = eina_list_data_get(eina_list_next(item->l)); + Elm_Object_Item *eo_next = eina_list_data_get(eina_list_next(item->l)); - if ((!next) && (sd->loop)) - next = eina_list_data_get(sd->items); + if ((!eo_next) && (sd->loop)) + eo_next = eina_list_data_get(sd->items); + ELM_SLIDESHOW_ITEM_DATA_GET(eo_next, next); return next; } @@ -131,9 +134,9 @@ _on_size_hints_changed(void *data, } static void -_item_realize(Elm_Slideshow_Item *item) +_item_realize(Elm_Slideshow_Item_Data *item) { - Elm_Slideshow_Item *_item_prev, *_item_next; + Elm_Slideshow_Item_Data *_item_prev, *_item_next; Evas_Object *obj = WIDGET(item); int ac, bc, lc, ic = 0; @@ -141,7 +144,7 @@ _item_realize(Elm_Slideshow_Item *item) if ((!VIEW(item)) && (item->itc->func.get)) { - VIEW(item) = item->itc->func.get(elm_widget_item_data_get(item), obj); + VIEW(item) = item->itc->func.get(elm_object_item_data_get(EO_OBJ(item)), obj); item->l_built = eina_list_append(NULL, item); sd->items_built = eina_list_merge(sd->items_built, item->l_built); //FIXME: item could be shown by obj @@ -173,7 +176,7 @@ _item_realize(Elm_Slideshow_Item *item) ic++; VIEW(_item_next) = _item_next->itc->func.get( - elm_widget_item_data_get(_item_next), obj); + elm_object_item_data_get(EO_OBJ(_item_next)), obj); _item_next->l_built = eina_list_append(NULL, _item_next); sd->items_built = eina_list_merge @@ -205,7 +208,7 @@ _item_realize(Elm_Slideshow_Item *item) ic++; VIEW(_item_prev) = _item_prev->itc->func.get( - elm_widget_item_data_get(_item_prev), obj); + elm_object_item_data_get(EO_OBJ(_item_prev)), obj); _item_prev->l_built = eina_list_append(NULL, _item_prev); sd->items_built = eina_list_merge @@ -233,7 +236,7 @@ _item_realize(Elm_Slideshow_Item *item) sd->items_built = eina_list_remove_list (sd->items_built, sd->items_built); if (item->itc->func.del) - item->itc->func.del(elm_widget_item_data_get(item), VIEW(item)); + item->itc->func.del(elm_object_item_data_get(EO_OBJ(item)), VIEW(item)); ELM_SAFE_FREE(VIEW(item), evas_object_del); } } @@ -244,7 +247,7 @@ _on_slideshow_end(void *data, const char *emission, const char *source EINA_UNUSED) { - Elm_Slideshow_Item *item; + Elm_Slideshow_Item_Data *item; ELM_SLIDESHOW_DATA_GET(data, sd); item = sd->previous; @@ -282,16 +285,15 @@ _timer_cb(void *data) return ECORE_CALLBACK_CANCEL; } -static Eina_Bool -_item_del_pre_hook(Elm_Object_Item *it) +EOLIAN static Eina_Bool +_elm_slideshow_item_elm_widget_item_del_pre(Eo *eo_item, Elm_Slideshow_Item_Data *item) { - Elm_Slideshow_Item *item = (Elm_Slideshow_Item *)it; ELM_SLIDESHOW_DATA_GET_OR_RETURN_VAL(WIDGET(item), sd, EINA_FALSE); if (sd->previous == item) sd->previous = NULL; if (sd->current == item) { - Eina_List *l = eina_list_data_find_list(sd->items, item); + Eina_List *l = eina_list_data_find_list(sd->items, eo_item); Eina_List *l2 = eina_list_next(l); sd->current = NULL; if (!l2) @@ -308,7 +310,7 @@ _item_del_pre_hook(Elm_Object_Item *it) sd->items_built = eina_list_remove_list(sd->items_built, item->l_built); if ((VIEW(item)) && (item->itc->func.del)) - item->itc->func.del(elm_widget_item_data_get(item), VIEW(item)); + item->itc->func.del(elm_object_item_data_get((Elm_Object_Item *)eo_item), VIEW(item)); return EINA_TRUE; } @@ -390,55 +392,67 @@ _elm_slideshow_eo_base_constructor(Eo *obj, Elm_Slideshow_Data *_pd EINA_UNUSED) elm_interface_atspi_accessible_role_set(ELM_ATSPI_ROLE_DOCUMENT_PRESENTATION)); } +EOLIAN static void +_elm_slideshow_item_eo_base_constructor(Eo *obj, Elm_Slideshow_Item_Data *it) +{ + eo_do_super(obj, ELM_SLIDESHOW_ITEM_CLASS, eo_constructor()); + it->base = eo_data_scope_get(obj, ELM_WIDGET_ITEM_CLASS); +} + EOLIAN static Elm_Object_Item* _elm_slideshow_item_add(Eo *obj, Elm_Slideshow_Data *sd, const Elm_Slideshow_Item_Class *itc, const void *data) { - Elm_Slideshow_Item *item; + Eo *eo_item; - item = elm_widget_item_new(obj, Elm_Slideshow_Item); - if (!item) return NULL; + eo_item = eo_add(ELM_SLIDESHOW_ITEM_CLASS, obj); + if (!eo_item) return NULL; + + ELM_SLIDESHOW_ITEM_DATA_GET(eo_item, item); - elm_widget_item_del_pre_hook_set(item, _item_del_pre_hook); item->itc = itc; - item->l = eina_list_append(item->l, item); - elm_widget_item_data_set(item, data); + item->l = eina_list_append(item->l, eo_item); + eo_do(eo_item, elm_wdg_item_data_set(data)); sd->items = eina_list_merge(sd->items, item->l); - if (!sd->current) elm_slideshow_item_show((Elm_Object_Item *)item); + if (!sd->current) elm_slideshow_item_show((Elm_Object_Item *)eo_item); - return (Elm_Object_Item *)item; + return (Elm_Object_Item *)eo_item; } EOLIAN static Elm_Object_Item* _elm_slideshow_item_sorted_insert(Eo *obj, Elm_Slideshow_Data *sd, const Elm_Slideshow_Item_Class *itc, const void *data, Eina_Compare_Cb func) { - Elm_Slideshow_Item *item; + Eo *eo_item; - item = elm_widget_item_new(obj, Elm_Slideshow_Item); - if (!item) return NULL; + eo_item = eo_add(ELM_SLIDESHOW_ITEM_CLASS, obj); + if (!eo_item) return NULL; + + ELM_SLIDESHOW_ITEM_DATA_GET(eo_item, item); - elm_widget_item_del_pre_hook_set(item, _item_del_pre_hook); item->itc = itc; - item->l = eina_list_append(item->l, item); - elm_widget_item_data_set(item, data); + item->l = eina_list_append(item->l, eo_item); + eo_do(eo_item, elm_wdg_item_data_set(data)); sd->items = eina_list_sorted_merge(sd->items, item->l, func); - if (!sd->current) elm_slideshow_item_show((Elm_Object_Item *)item); + if (!sd->current) elm_slideshow_item_show((Elm_Object_Item *)eo_item); - return (Elm_Object_Item *)item; + return (Elm_Object_Item *)eo_item; } EAPI void elm_slideshow_item_show(Elm_Object_Item *it) +{ + eo_do((Eo*)it, elm_obj_slideshow_item_show()); +} + +EOLIAN static void +_elm_slideshow_item_show(Eo *eo_item EINA_UNUSED, Elm_Slideshow_Item_Data *item) { char buf[1024]; - Elm_Slideshow_Item *item, *next = NULL; + Elm_Slideshow_Item_Data *next = NULL; - ELM_SLIDESHOW_ITEM_CHECK(it); - - item = (Elm_Slideshow_Item *)it; ELM_SLIDESHOW_DATA_GET(WIDGET(item), sd); if (item == sd->current) return; @@ -474,7 +488,7 @@ EOLIAN static void _elm_slideshow_next(Eo *obj, Elm_Slideshow_Data *sd) { char buf[1024]; - Elm_Slideshow_Item *next = NULL; + Elm_Slideshow_Item_Data *next = NULL; if (sd->current) next = _item_next_get(sd->current); @@ -511,7 +525,7 @@ EOLIAN static void _elm_slideshow_previous(Eo *obj, Elm_Slideshow_Data *sd) { char buf[1024]; - Elm_Slideshow_Item *prev = NULL; + Elm_Slideshow_Item_Data *prev = NULL; if (sd->current) prev = _item_prev_get(sd->current); @@ -620,18 +634,19 @@ _elm_slideshow_loop_get(Eo *obj EINA_UNUSED, Elm_Slideshow_Data *sd) EOLIAN static void _elm_slideshow_clear(Eo *obj EINA_UNUSED, Elm_Slideshow_Data *sd) { - Elm_Slideshow_Item *item; + Elm_Slideshow_Item_Data *item; + Eo *eo_item; sd->previous = NULL; sd->current = NULL; EINA_LIST_FREE(sd->items_built, item) { if (item->itc->func.del) - item->itc->func.del(elm_widget_item_data_get(item), VIEW(item)); + item->itc->func.del(elm_object_item_data_get(EO_OBJ(item)), VIEW(item)); } - EINA_LIST_FREE(sd->items, item) - elm_widget_item_free(item); + EINA_LIST_FREE(sd->items, eo_item) + eo_del(eo_item); } EOLIAN static const Eina_List* @@ -643,13 +658,12 @@ _elm_slideshow_items_get(Eo *obj EINA_UNUSED, Elm_Slideshow_Data *sd) EOLIAN static Elm_Object_Item* _elm_slideshow_item_current_get(Eo *obj EINA_UNUSED, Elm_Slideshow_Data *sd) { - return (Elm_Object_Item *)sd->current; + return (Elm_Object_Item *)EO_OBJ(sd->current); } -EAPI Evas_Object * -elm_slideshow_item_object_get(const Elm_Object_Item *it) +EOLIAN static Evas_Object * +_elm_slideshow_item_object_get(Eo *eo_item EINA_UNUSED, Elm_Slideshow_Item_Data *it) { - ELM_SLIDESHOW_ITEM_CHECK_OR_RETURN(it, NULL); return VIEW(it); } @@ -722,4 +736,5 @@ _elm_slideshow_elm_interface_atspi_widget_action_elm_actions_get(Eo *obj EINA_UN return &atspi_actions[0]; } +#include "elm_slideshow_item.eo.c" #include "elm_slideshow.eo.c" diff --git a/legacy/elementary/src/lib/elm_slideshow_common.h b/legacy/elementary/src/lib/elm_slideshow_common.h index 23a27214ce..9c7d9e7ab2 100644 --- a/legacy/elementary/src/lib/elm_slideshow_common.h +++ b/legacy/elementary/src/lib/elm_slideshow_common.h @@ -18,37 +18,6 @@ struct _Elm_Slideshow_Item_Class } func; }; /**< member definitions of #Elm_Slideshow_Item_Class */ -/** - * Display a given slideshow widget's item, programmatically. - * - * @param it The item to display on @p obj's viewport - * - * The change between the current item and @p item will use the - * transition @p obj is set to use (@see - * elm_slideshow_transition_set()). - * - * @ingroup Slideshow - */ EAPI void elm_slideshow_item_show(Elm_Object_Item *it); -/** - * Get the real Evas object created to implement the view of a - * given slideshow item - * - * @param it The slideshow item. - * @return the Evas object implementing this item's view. - * - * This returns the actual Evas object used to implement the - * specified slideshow item's view. This may be @c NULL, as it may - * not have been created or may have been deleted, at any time, by - * the slideshow. Do not modify this object (move, resize, - * show, hide, etc.), as the slideshow is controlling it. This - * function is for querying, emitting custom signals or hooking - * lower level callbacks for events on that object. Do not delete - * this object under any circumstances. - * - * @see elm_object_item_data_get() - * - * @ingroup Slideshow - */ EAPI Evas_Object *elm_slideshow_item_object_get(const Elm_Object_Item *it); diff --git a/legacy/elementary/src/lib/elm_slideshow_item.eo b/legacy/elementary/src/lib/elm_slideshow_item.eo new file mode 100644 index 0000000000..57e3b9dadd --- /dev/null +++ b/legacy/elementary/src/lib/elm_slideshow_item.eo @@ -0,0 +1,42 @@ +class Elm_Slideshow_Item(Elm_Widget_Item) +{ + legacy_prefix: null; + eo_prefix: elm_obj_slideshow_item; + methods { + show { + /*@ + Display a given slideshow widget's item, programmatically. + + The change between the current item and @p item will use the + transition @p obj is set to use (@see + elm_slideshow_transition_set()). + + @ingroup Slideshow + */ + } + object_get @const { + /*@ + Get the real Evas object created to implement the view of a + given slideshow item + + This returns the actual Evas object used to implement the + specified slideshow item's view. This may be @c NULL, as it may + not have been created or may have been deleted, at any time, by + the slideshow. Do not modify this object (move, resize, + show, hide, etc.), as the slideshow is controlling it. This + function is for querying, emitting custom signals or hooking + lower level callbacks for events on that object. Do not delete + this object under any circumstances. + + @see elm_object_item_data_get() + + @ingroup Slideshow + */ + return: Evas_Object*; + } + } + implements { + Eo.Base.constructor; + Elm_Widget_Item.del_pre; + } +} diff --git a/legacy/elementary/src/lib/elm_widget_slideshow.h b/legacy/elementary/src/lib/elm_widget_slideshow.h index c9c914fe69..c29f7bf4bd 100644 --- a/legacy/elementary/src/lib/elm_widget_slideshow.h +++ b/legacy/elementary/src/lib/elm_widget_slideshow.h @@ -2,6 +2,9 @@ #define ELM_WIDGET_SLIDESHOW_H #include "Elementary.h" +#include "elm_slideshow_item.eo.h" + +#include "elm_object_item_migration_temp.h" /* DO NOT USE THIS HEADER UNLESS YOU ARE PREPARED FOR BREAKING OF YOUR * CODE. THIS IS ELEMENTARY'S INTERNAL WIDGET API (for now) AND IS NOT @@ -24,11 +27,11 @@ * Base layout smart data extended with slideshow instance data. */ typedef struct _Elm_Slideshow_Data Elm_Slideshow_Data; -typedef struct _Elm_Slideshow_Item Elm_Slideshow_Item; +typedef struct _Elm_Slideshow_Item_Data Elm_Slideshow_Item_Data; -struct _Elm_Slideshow_Item +struct _Elm_Slideshow_Item_Data { - ELM_WIDGET_ITEM; + Elm_Widget_Item_Data *base; Eina_List *l, *l_built; @@ -41,8 +44,8 @@ struct _Elm_Slideshow_Data Eina_List *items; Eina_List *items_built; - Elm_Slideshow_Item *current; - Elm_Slideshow_Item *previous; + Elm_Slideshow_Item_Data *current; + Elm_Slideshow_Item_Data *previous; Eina_List *transitions; const char *transition; @@ -89,12 +92,15 @@ struct _Elm_Slideshow_Data if (EINA_UNLIKELY(!eo_isa((obj), ELM_SLIDESHOW_CLASS))) \ return -#define ELM_SLIDESHOW_ITEM_CHECK(it) \ - ELM_WIDGET_ITEM_CHECK_OR_RETURN((Elm_Widget_Item_Data *)it, ); \ - ELM_SLIDESHOW_CHECK(it->base.widget); +#define ELM_SLIDESHOW_ITEM_CHECK(obj) \ + if (EINA_UNLIKELY(!eo_isa(EO_OBJ(obj), ELM_SLIDESHOW_ITEM_CLASS))) \ + return -#define ELM_SLIDESHOW_ITEM_CHECK_OR_RETURN(it, ...) \ - ELM_WIDGET_ITEM_CHECK_OR_RETURN((Elm_Widget_Item_Data *)it, __VA_ARGS__); \ - ELM_SLIDESHOW_CHECK(it->base.widget) __VA_ARGS__; +#define ELM_SLIDESHOW_ITEM_CHECK_OR_RETURN(obj, ...) \ + if (EINA_UNLIKELY(!eo_isa(EO_OBJ(obj), ELM_SLIDESHOW_ITEM_CLASS))) \ + return __VA_ARGS__; + +#define ELM_SLIDESHOW_ITEM_DATA_GET(o, sd) \ + Elm_Slideshow_Item_Data *sd = eo_data_scope_get((Eo *)o, ELM_SLIDESHOW_ITEM_CLASS) #endif