summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYossi Kantor <yossi.kantor@samsung.com>2014-06-23 15:42:46 +0300
committerDaniel Zaoui <daniel.zaoui@samsung.com>2014-09-17 15:08:41 +0300
commit07f1a677b51e475b681a17b8b1b04791f84fecec (patch)
tree20c60e80cce72abaeb9631e228d62b9150bd89a2
parentd344d99974c724b5a849d2668479fef96b27b6a0 (diff)
downloadelementary-07f1a677b51e475b681a17b8b1b04791f84fecec.tar.gz
Porting to Eo: Elm Slideshow Item
-rw-r--r--src/lib/Makefile.am12
-rw-r--r--src/lib/elm_slideshow.c124
-rw-r--r--src/lib/elm_slideshow_common.h31
-rw-r--r--src/lib/elm_slideshow_item.eo42
-rw-r--r--src/lib/elm_widget_slideshow.h28
5 files changed, 141 insertions, 96 deletions
diff --git a/src/lib/Makefile.am b/src/lib/Makefile.am
index 95647172e..b22072d43 100644
--- a/src/lib/Makefile.am
+++ b/src/lib/Makefile.am
@@ -853,7 +853,9 @@ BUILT_SOURCES = \
elm_hoversel_item.eo.c \
elm_hoversel_item.eo.h \
elm_segment_control_item.eo.c \
- elm_segment_control_item.eo.h
+ elm_segment_control_item.eo.h \
+ elm_slideshow_item.eo.c \
+ elm_slideshow_item.eo.h
elementaryeolianfilesdir = $(datadir)/eolian/include/elementary-@VMAJ@
elementaryeolianfiles_DATA = \
@@ -952,8 +954,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}
@@ -1054,6 +1056,7 @@ nodist_includesunstable_HEADERS = \
elm_dayselector_item.eo.h \
elm_hoversel_item.eo.h \
elm_segment_control_item.eo.h \
+ elm_slideshow_item.eo.h \
elm_layout.eo.legacy.h \
elm_frame.eo.legacy.h \
elm_hover.eo.legacy.h \
@@ -1121,7 +1124,8 @@ nodist_includesunstable_HEADERS = \
elm_color_item.eo.legacy.h \
elm_dayselector_item.eo.legacy.h \
elm_hoversel_item.eo.legacy.h \
- elm_segment_control_item.eo.legacy.h
+ elm_segment_control_item.eo.legacy.h \
+ elm_slideshow_item.eo.legacy.h
if HAVE_CXX11
diff --git a/src/lib/elm_slideshow.c b/src/lib/elm_slideshow.c
index 890d2280b..951ee0e65 100644
--- a/src/lib/elm_slideshow.c
+++ b/src/lib/elm_slideshow.c
@@ -2,6 +2,7 @@
# include "elementary_config.h"
#endif
+#define ELM_WIDGET_ITEM_PROTECTED
#include <Elementary.h>
#include "elm_priv.h"
@@ -102,27 +103,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;
}
@@ -136,9 +139,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;
@@ -146,7 +149,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
@@ -178,7 +181,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
@@ -210,7 +213,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
@@ -238,7 +241,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);
}
}
@@ -249,7 +252,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;
@@ -287,16 +290,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)
@@ -313,7 +315,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;
}
@@ -396,55 +398,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;
+
+ eo_item = eo_add(ELM_SLIDESHOW_ITEM_CLASS, obj);
+ if (!eo_item) return NULL;
- item = elm_widget_item_new(obj, Elm_Slideshow_Item);
- if (!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)
{
- char buf[1024];
- Elm_Slideshow_Item *item, *next = NULL;
+ eo_do((Eo*)it, elm_obj_slideshow_item_show());
+}
- ELM_SLIDESHOW_ITEM_CHECK(it);
+EOLIAN static void
+_elm_slideshow_item_show(Eo *eo_item EINA_UNUSED, Elm_Slideshow_Item_Data *item)
+{
+ char buf[1024];
+ Elm_Slideshow_Item_Data *next = NULL;
- item = (Elm_Slideshow_Item *)it;
ELM_SLIDESHOW_DATA_GET(WIDGET(item), sd);
if (item == sd->current) return;
@@ -480,7 +494,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);
@@ -517,7 +531,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);
@@ -626,18 +640,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*
@@ -649,13 +664,21 @@ _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;
+ Elm_Slideshow_Item_Data *it = sd->current;
+ return it?(Elm_Object_Item *)EO_OBJ(it):NULL;
}
EAPI Evas_Object *
elm_slideshow_item_object_get(const Elm_Object_Item *it)
{
- ELM_SLIDESHOW_ITEM_CHECK_OR_RETURN(it, NULL);
+ Evas_Object *ret = NULL;
+ eo_do((Eo*)it, ret = elm_obj_slideshow_item_object_get());
+ return ret;
+}
+
+EOLIAN static Evas_Object *
+_elm_slideshow_item_object_get(Eo *eo_item EINA_UNUSED, Elm_Slideshow_Item_Data *it)
+{
return VIEW(it);
}
@@ -728,4 +751,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/src/lib/elm_slideshow_common.h b/src/lib/elm_slideshow_common.h
index 23a27214c..9c7d9e7ab 100644
--- a/src/lib/elm_slideshow_common.h
+++ b/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. <b>Do not modify this object</b> (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/src/lib/elm_slideshow_item.eo b/src/lib/elm_slideshow_item.eo
new file mode 100644
index 000000000..57e3b9dad
--- /dev/null
+++ b/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. <b>Do not modify this object</b> (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/src/lib/elm_widget_slideshow.h b/src/lib/elm_widget_slideshow.h
index c9c914fe6..c29f7bf4b 100644
--- a/src/lib/elm_widget_slideshow.h
+++ b/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(obj, ...) \
+ if (EINA_UNLIKELY(!eo_isa(EO_OBJ(obj), ELM_SLIDESHOW_ITEM_CLASS))) \
+ return __VA_ARGS__;
-#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_DATA_GET(o, sd) \
+ Elm_Slideshow_Item_Data *sd = eo_data_scope_get((Eo *)o, ELM_SLIDESHOW_ITEM_CLASS)
#endif