summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJaeun Choi <jaeun12.choi@samsung.com>2017-12-15 15:53:50 +0900
committerJaeun Choi <jaeun12.choi@samsung.com>2018-04-23 16:28:41 +0900
commita18e25540142aafbc27da09282e736881af33850 (patch)
tree24ba25d069baecf1d834af2b5ddff02119cb70ab
parent7150e849ff964dffcebd233e33b1f2e527dedf4d (diff)
downloadefl-a18e25540142aafbc27da09282e736881af33850.tar.gz
efl_ui_pager: add efl_page_indicator
add more test case
-rw-r--r--data/elementary/themes/Makefile.am1
-rw-r--r--data/elementary/themes/default.edc1
-rw-r--r--data/elementary/themes/edc/elm/pager.edc31
-rw-r--r--data/elementary/themes/img/circle.svg7
-rw-r--r--src/Makefile_Elementary.am8
-rw-r--r--src/bin/elementary/test_efl_ui_pager.c116
-rw-r--r--src/lib/elementary/Elementary.h2
-rw-r--r--src/lib/elementary/efl_page_indicator.c91
-rw-r--r--src/lib/elementary/efl_page_indicator.eo7
-rw-r--r--src/lib/elementary/efl_page_indicator.h22
-rw-r--r--src/lib/elementary/efl_page_indicator_icon.c196
-rw-r--r--src/lib/elementary/efl_page_indicator_icon.eo8
-rw-r--r--src/lib/elementary/efl_page_indicator_icon.h17
-rw-r--r--src/lib/elementary/efl_ui_pager.c77
-rw-r--r--src/lib/elementary/efl_ui_pager.eo12
-rw-r--r--src/lib/elementary/efl_ui_widget_pager.h4
-rw-r--r--src/lib/elementary/elm_priv.h8
17 files changed, 592 insertions, 16 deletions
diff --git a/data/elementary/themes/Makefile.am b/data/elementary/themes/Makefile.am
index fc285c696c..e53c1cfe4c 100644
--- a/data/elementary/themes/Makefile.am
+++ b/data/elementary/themes/Makefile.am
@@ -152,6 +152,7 @@ elementary/themes/edc/elm/tooltip.edc \
elementary/themes/edc/elm/uiclock.edc \
elementary/themes/edc/elm/video.edc \
elementary/themes/edc/elm/win.edc \
+elementary/themes/edc/elm/pager.edc \
\
elementary/themes/edc/O/efm_icons.edc \
elementary/themes/edc/O/icons.edc \
diff --git a/data/elementary/themes/default.edc b/data/elementary/themes/default.edc
index d7c823e36d..e7a15fd56f 100644
--- a/data/elementary/themes/default.edc
+++ b/data/elementary/themes/default.edc
@@ -75,6 +75,7 @@ collections {
#include "edc/elm/code.edc"
#include "edc/elm/ews.edc"
#include "edc/elm/textpath.edc"
+#include "edc/elm/pager.edc"
// desktop in general
diff --git a/data/elementary/themes/edc/elm/pager.edc b/data/elementary/themes/edc/elm/pager.edc
new file mode 100644
index 0000000000..10827c7a48
--- /dev/null
+++ b/data/elementary/themes/edc/elm/pager.edc
@@ -0,0 +1,31 @@
+ group { name: "efl/pager/indicator";
+ images {
+ image: "circle.svg" COMP;
+ }
+ parts {
+ rect { "base";
+ scale;
+ desc { "default";
+ color: 0 0 0 0;
+ }
+ }
+ image { "icon";
+ scale;
+ desc { "default";
+ image.normal: "circle.svg";
+ color: 0 0 0 255;
+ min: 6 6;
+ }
+ desc { "selected";
+ inherit: "default";
+ color: 255 0 0 255;
+ }
+ }
+ }
+ script {
+ public message(Msg_Type:type, id, ...) {
+ set_tween_state(PART:"icon", getfarg(2),
+ "default", 0.0, "selected", 0.0);
+ }
+ }
+ }
diff --git a/data/elementary/themes/img/circle.svg b/data/elementary/themes/img/circle.svg
new file mode 100644
index 0000000000..d57ee3a5df
--- /dev/null
+++ b/data/elementary/themes/img/circle.svg
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="6px" height="6px" viewBox="0 0 6 6" enable-background="new 0 0 6 6" xml:space="preserve">
+<circle fill="#FFFFFF" cx="3" cy="3" r="3"/>
+</svg>
diff --git a/src/Makefile_Elementary.am b/src/Makefile_Elementary.am
index a84adcf558..28c17b483c 100644
--- a/src/Makefile_Elementary.am
+++ b/src/Makefile_Elementary.am
@@ -108,6 +108,8 @@ elm_public_eolian_files = \
lib/elementary/efl_ui_pager.eo \
lib/elementary/efl_page_transition.eo \
lib/elementary/efl_page_transition_scroll.eo \
+ lib/elementary/efl_page_indicator.eo \
+ lib/elementary/efl_page_indicator_icon.eo \
$(NULL)
# More public files -- FIXME
@@ -406,7 +408,9 @@ includesunstable_HEADERS = \
lib/elementary/Efl_Ui.h \
lib/elementary/efl_ui_widget_pager.h \
lib/elementary/efl_page_transition.h \
- lib/elementary/efl_page_transition_scroll.h
+ lib/elementary/efl_page_transition_scroll.h \
+ lib/elementary/efl_page_indicator.h \
+ lib/elementary/efl_page_indicator_icon.h
includesunstabledir = $(includedir)/elementary-@VMAJ@
nodist_includesunstable_HEADERS = \
@@ -814,6 +818,8 @@ lib_elementary_libelementary_la_SOURCES = \
lib/elementary/efl_ui_pager.c \
lib/elementary/efl_page_transition.c \
lib/elementary/efl_page_transition_scroll.c \
+ lib/elementary/efl_page_indicator.c \
+ lib/elementary/efl_page_indicator_icon.c \
$(NULL)
diff --git a/src/bin/elementary/test_efl_ui_pager.c b/src/bin/elementary/test_efl_ui_pager.c
index c4a7867aac..e360c34ea4 100644
--- a/src/bin/elementary/test_efl_ui_pager.c
+++ b/src/bin/elementary/test_efl_ui_pager.c
@@ -41,6 +41,11 @@ typedef struct _Page_Set_Params {
Evas_Object *spinner;
} Page_Set_Params;
+typedef struct _Pack_At_Params {
+ Evas_Object *pager;
+ Evas_Object *spinner;
+} Pack_At_Params;
+
static void page_size_cb(void *data, Evas_Object *obj, void *event_info);
static void padding_cb(void *data, Evas_Object *obj, void *event_info);
static void side_page_num_cb(void *data, Evas_Object *obj, void *event_info);
@@ -48,6 +53,7 @@ static void pack_cb(void *data, Evas_Object *obj, void *event_info);
static void loop_cb(void *data, Evas_Object *obj, void *event_info);
static void current_page_cb(void *data, Evas_Object *obj, void *event_info);
static void scroll_block_cb(void *data, Evas_Object *obj, void *event_info);
+static void indicator_cb(void *data, Evas_Object *obj, void *event_info);
//static void transition_cb(void *data, Evas_Object *obj, void *event_info); //TODO
static void win_del_cb(void *data, Evas *e, Evas_Object *obj, void *event_info);
@@ -169,6 +175,7 @@ test_efl_ui_pager(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *ev
elm_list_item_append(list, "Loop", NULL, NULL, loop_cb, params);
elm_list_item_append(list, "Current Page", NULL, NULL, current_page_cb, params);
elm_list_item_append(list, "Scroll Block", NULL, NULL, scroll_block_cb, params);
+ elm_list_item_append(list, "Indicator", NULL, NULL, indicator_cb, params);
//elm_list_item_append(list, "Transition", NULL, NULL, transition_cb, params); //TODO
elm_list_go(list);
@@ -325,6 +332,27 @@ static void pack_after_btn_cb(void *data, Evas_Object *obj EINA_UNUSED, void *ev
efl_pack_after(pager, page, curr_page);
}
+static void pack_at_btn_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
+{
+ Pack_At_Params *pap = data;
+ Evas_Object *page;
+ int index = elm_spinner_value_get(pap->spinner);
+
+ switch (index % 3) {
+ case 0:
+ page = page_add(LAYOUT, pap->pager, index);
+ break;
+ case 1:
+ page = page_add(GENLIST, pap->pager, index);
+ break;
+ case 2:
+ page = page_add(BUTTON, pap->pager, index);
+ break;
+ }
+
+ efl_pack_at(pap->pager, page, index);
+}
+
static void page_set_btn_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
{
Page_Set_Params *psp = data;
@@ -349,6 +377,14 @@ static void page_set_btn_del_cb(void *data,
free(data);
}
+static void pack_at_btn_del_cb(void *data,
+ Evas *e EINA_UNUSED,
+ Evas_Object *obj EINA_UNUSED,
+ void *event_info EINA_UNUSED)
+{
+ free(data);
+}
+
static void prev_block_check_cb(void *data, Evas_Object *obj, void *event_info EINA_UNUSED)
{
Evas_Object *pager = data;
@@ -371,6 +407,18 @@ static void next_block_check_cb(void *data, Evas_Object *obj, void *event_info E
efl_ui_pager_scroll_block_set(pager, prev, next);
}
+static void indicator_icon_btn_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
+{
+ Evas_Object *pager = data;
+ efl_ui_pager_indicator_set(pager, EFL_PAGE_INDICATOR_ICON_CLASS);
+}
+
+static void indicator_none_btn_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
+{
+ Evas_Object *pager = data;
+ efl_ui_pager_indicator_set(pager, NULL);
+}
+
static void page_size_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
{
Params *params = (Params *)data;
@@ -473,7 +521,9 @@ static void pack_cb(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *
Params *params = (Params *)data;
Evas_Object *navi = params->navi;
Evas_Object *pager = params->pager;
- Evas_Object *btn, *box, *pack_btn;
+ Evas_Object *btn, *box, *in_box, *pack_btn, *sp;
+ Page_Set_Params *pap = calloc(1, sizeof(Pack_At_Params));
+ int max_page;
btn = elm_button_add(navi);
elm_object_text_set(btn, "Back");
@@ -484,29 +534,55 @@ static void pack_cb(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *
evas_object_show(box);
elm_naviframe_item_push(navi, "Pack End", btn, NULL, box, NULL);
- pack_btn = elm_button_add(navi);
+ pack_btn = elm_button_add(box);
elm_object_text_set(pack_btn, "Pack Begin");
evas_object_smart_callback_add(pack_btn, "clicked", pack_begin_btn_cb, pager);
evas_object_show(pack_btn);
elm_box_pack_end(box, pack_btn);
- pack_btn = elm_button_add(navi);
+ pack_btn = elm_button_add(box);
elm_object_text_set(pack_btn, "Pack End");
evas_object_smart_callback_add(pack_btn, "clicked", pack_end_btn_cb, pager);
evas_object_show(pack_btn);
elm_box_pack_end(box, pack_btn);
- pack_btn = elm_button_add(navi);
+ pack_btn = elm_button_add(box);
elm_object_text_set(pack_btn, "Pack Before Current Page");
evas_object_smart_callback_add(pack_btn, "clicked", pack_before_btn_cb, pager);
evas_object_show(pack_btn);
elm_box_pack_end(box, pack_btn);
- pack_btn = elm_button_add(navi);
+ pack_btn = elm_button_add(box);
elm_object_text_set(pack_btn, "Pack After Current Page");
evas_object_smart_callback_add(pack_btn, "clicked", pack_after_btn_cb, pager);
evas_object_show(pack_btn);
elm_box_pack_end(box, pack_btn);
+
+ in_box = elm_box_add(box);
+ elm_box_padding_set(in_box, 10, 10);
+ elm_box_horizontal_set(in_box, EINA_TRUE);
+ evas_object_show(in_box);
+ elm_box_pack_end(box, in_box);
+
+ pack_btn = elm_button_add(in_box);
+ elm_object_text_set(pack_btn, "Pack At");
+ evas_object_show(pack_btn);
+ elm_box_pack_end(in_box, pack_btn);
+
+ sp = elm_spinner_add(in_box);
+ elm_spinner_wrap_set(sp, EINA_TRUE);
+ max_page = efl_content_count(pager) - 1;
+ elm_spinner_min_max_set(sp, 0, max_page);
+ elm_spinner_value_set(sp, efl_ui_pager_current_page_get(pager));
+ elm_spinner_label_format_set(sp, "%d");
+ evas_object_show(sp);
+ elm_box_pack_end(in_box, sp);
+
+ pap->pager = pager;
+ pap->spinner = sp;
+
+ evas_object_smart_callback_add(pack_btn, "clicked", pack_at_btn_cb, pap);
+ evas_object_event_callback_add(pack_btn, EVAS_CALLBACK_DEL, pack_at_btn_del_cb, pap);
}
static void loop_cb(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
@@ -606,6 +682,36 @@ static void scroll_block_cb(void *data, Evas_Object *obj EINA_UNUSED, void *even
elm_box_pack_end(box, check);
}
+static void indicator_cb(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
+{
+ Params *params = (Params *)data;
+ Evas_Object *navi = params->navi;
+ Evas_Object *pager = params->pager;
+ Evas_Object *btn, *box, *id_btn;
+
+ btn = elm_button_add(navi);
+ elm_object_text_set(btn, "Back");
+ evas_object_smart_callback_add(btn, "clicked", btn_cb, navi);
+
+ box = elm_box_add(navi);
+ elm_box_padding_set(box, 10, 10);
+ evas_object_show(box);
+ elm_naviframe_item_push(navi, "Pack End", btn, NULL, box, NULL);
+
+ id_btn = elm_button_add(box);
+ elm_object_text_set(id_btn, "Icon Type");
+ evas_object_smart_callback_add(id_btn, "clicked", indicator_icon_btn_cb, pager);
+ evas_object_show(id_btn);
+ elm_box_pack_end(box, id_btn);
+
+ id_btn = elm_button_add(box);
+ elm_object_text_set(id_btn, "None");
+ evas_object_smart_callback_add(id_btn, "clicked", indicator_none_btn_cb, pager);
+ evas_object_show(id_btn);
+ elm_box_pack_end(box, id_btn);
+}
+
+
/** TODO
*
static void transition_cb(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
diff --git a/src/lib/elementary/Elementary.h b/src/lib/elementary/Elementary.h
index 8ae7480c66..8fe0230849 100644
--- a/src/lib/elementary/Elementary.h
+++ b/src/lib/elementary/Elementary.h
@@ -349,6 +349,8 @@ typedef Eo Efl_Ui_Pager;
# include <efl_page_transition.eo.h>
# include <efl_page_transition_scroll.eo.h>
+# include <efl_page_indicator.eo.h>
+# include <efl_page_indicator_icon.eo.h>
# include <efl_ui_pager.eo.h>
#endif
diff --git a/src/lib/elementary/efl_page_indicator.c b/src/lib/elementary/efl_page_indicator.c
new file mode 100644
index 0000000000..0262027784
--- /dev/null
+++ b/src/lib/elementary/efl_page_indicator.c
@@ -0,0 +1,91 @@
+#ifdef HAVE_CONFIG_H
+# include "elementary_config.h"
+#endif
+
+#include <Elementary.h>
+#include "elm_priv.h"
+
+#include "efl_page_indicator.h"
+#include "efl_ui_widget_pager.h"
+
+#define MY_CLASS EFL_PAGE_INDICATOR_CLASS
+
+
+
+EOLIAN static void
+_efl_page_indicator_update(Eo *obj EINA_UNUSED,
+ Efl_Page_Indicator_Data *pd EINA_UNUSED,
+ double pos EINA_UNUSED)
+{
+
+}
+
+EOLIAN static void
+_efl_page_indicator_pack_begin(Eo *obj EINA_UNUSED,
+ Efl_Page_Indicator_Data *pd)
+{
+ pd->cnt++;
+}
+
+EOLIAN static void
+_efl_page_indicator_pack_end(Eo *obj EINA_UNUSED,
+ Efl_Page_Indicator_Data *pd)
+{
+ pd->cnt++;
+}
+
+EOLIAN static void
+_efl_page_indicator_pack_before(Eo *obj EINA_UNUSED,
+ Efl_Page_Indicator_Data *pd,
+ int index EINA_UNUSED)
+{
+ pd->cnt++;
+}
+
+EOLIAN static void
+_efl_page_indicator_pack_after(Eo *obj EINA_UNUSED,
+ Efl_Page_Indicator_Data *pd,
+ int index EINA_UNUSED)
+{
+ pd->cnt++;
+}
+
+EOLIAN static Eo *
+_efl_page_indicator_efl_object_constructor(Eo *obj,
+ Efl_Page_Indicator_Data *pd)
+{
+ obj = efl_constructor(efl_super(obj, MY_CLASS));
+
+ pd->idbox = efl_parent_get(obj);
+ pd->pager.obj = efl_parent_get(pd->idbox);
+
+ pd->cnt = efl_content_count(pd->pager.obj);
+
+ return obj;
+}
+
+
+
+EOAPI EFL_VOID_FUNC_BODYV(efl_page_indicator_update,
+ EFL_FUNC_CALL(pos), double pos)
+EOAPI EFL_VOID_FUNC_BODY(efl_page_indicator_pack_begin)
+EOAPI EFL_VOID_FUNC_BODY(efl_page_indicator_pack_end)
+EOAPI EFL_VOID_FUNC_BODYV(efl_page_indicator_pack_before,
+ EFL_FUNC_CALL(index), int index)
+EOAPI EFL_VOID_FUNC_BODYV(efl_page_indicator_pack_after,
+ EFL_FUNC_CALL(index), int index)
+
+
+#define EFL_PAGE_INDICATOR_EXTRA_OPS \
+ EFL_OBJECT_OP_FUNC(efl_page_indicator_update, \
+ _efl_page_indicator_update), \
+ EFL_OBJECT_OP_FUNC(efl_page_indicator_pack_begin, \
+ _efl_page_indicator_pack_begin), \
+ EFL_OBJECT_OP_FUNC(efl_page_indicator_pack_end, \
+ _efl_page_indicator_pack_end), \
+ EFL_OBJECT_OP_FUNC(efl_page_indicator_pack_before, \
+ _efl_page_indicator_pack_before), \
+ EFL_OBJECT_OP_FUNC(efl_page_indicator_pack_after, \
+ _efl_page_indicator_pack_after)
+
+#include "efl_page_indicator.eo.c"
diff --git a/src/lib/elementary/efl_page_indicator.eo b/src/lib/elementary/efl_page_indicator.eo
new file mode 100644
index 0000000000..ae3774f5d5
--- /dev/null
+++ b/src/lib/elementary/efl_page_indicator.eo
@@ -0,0 +1,7 @@
+class Efl.Page.Indicator (Efl.Object)
+{
+ [[Efl ui pager indicator class]]
+ implements {
+ Efl.Object.constructor;
+ }
+}
diff --git a/src/lib/elementary/efl_page_indicator.h b/src/lib/elementary/efl_page_indicator.h
new file mode 100644
index 0000000000..430dc47cfd
--- /dev/null
+++ b/src/lib/elementary/efl_page_indicator.h
@@ -0,0 +1,22 @@
+#ifndef EFL_PAGE_INDICATOR_H
+#define EFL_PAGE_INDICATOR_H
+
+typedef struct _Efl_Page_Indicator_Data Efl_Page_Indicator_Data;
+
+struct _Efl_Page_Indicator_Data
+{
+ struct {
+ Efl_Object *obj;
+ Evas_Coord x, y, w, h;
+ } pager;
+
+ Efl_Ui_Box *idbox;
+
+ int cnt;
+};
+
+#define EFL_PAGE_INDICATOR_DATA_GET(o, pd) \
+ Efl_Page_Indicator_Data *pd = \
+ efl_data_scope_get(o, EFL_PAGE_INDICATOR_CLASS)
+
+#endif
diff --git a/src/lib/elementary/efl_page_indicator_icon.c b/src/lib/elementary/efl_page_indicator_icon.c
new file mode 100644
index 0000000000..14dda4211e
--- /dev/null
+++ b/src/lib/elementary/efl_page_indicator_icon.c
@@ -0,0 +1,196 @@
+#ifdef HAVE_CONFIG_H
+# include "elementary_config.h"
+#endif
+
+#include <Elementary.h>
+#include "elm_priv.h"
+
+#include "efl_page_indicator_icon.h"
+#include "efl_page_indicator.h"
+#include "efl_ui_widget_pager.h"
+
+#define MY_CLASS EFL_PAGE_INDICATOR_ICON_CLASS
+
+
+
+EOLIAN static void
+_efl_page_indicator_icon_update(Eo *obj,
+ Efl_Page_Indicator_Icon_Data *pd,
+ double pos)
+{
+ EFL_PAGE_INDICATOR_DATA_GET(obj, spd);
+ Eo *item;
+ int page = efl_ui_pager_current_page_get(spd->pager.obj);
+
+ if (pos < 0)
+ {
+ item = eina_list_nth(pd->items, page);
+ eina_value_set(pd->v, (1.0 + pos));
+ efl_layout_signal_message_send(item, 1, *(pd->v));
+
+ item = eina_list_nth(pd->items,
+ (page - 1 + spd->cnt) % spd->cnt);
+ eina_value_set(pd->v, (pos * -1.0));
+ efl_layout_signal_message_send(item, 1, *(pd->v));
+ }
+ else
+ {
+ item = eina_list_nth(pd->items, page);
+ eina_value_set(pd->v, (1.0 - pos));
+ efl_layout_signal_message_send(item, 1, *(pd->v));
+
+ item = eina_list_nth(pd->items,
+ (page + 1 + spd->cnt) % spd->cnt);
+ eina_value_set(pd->v, pos);
+ efl_layout_signal_message_send(item, 1, *(pd->v));
+ }
+}
+
+EOLIAN static void
+_efl_page_indicator_icon_pack_begin(Eo *obj,
+ Efl_Page_Indicator_Icon_Data *pd)
+{
+ EFL_PAGE_INDICATOR_DATA_GET(obj, spd);
+ Eo *item;
+
+ efl_page_indicator_pack_begin(efl_super(obj, MY_CLASS));
+
+ item = efl_add(EFL_CANVAS_LAYOUT_CLASS, spd->idbox);
+ pd->items = eina_list_prepend(pd->items, item);
+
+ elm_widget_theme_object_set(spd->idbox, item,
+ "pager", "indicator", "default");
+ efl_gfx_size_hint_align_set(item, 0.5, 0.5);
+ efl_gfx_size_hint_weight_set(item, 0, 0);
+ efl_pack_begin(spd->idbox, item);
+}
+
+EOLIAN static void
+_efl_page_indicator_icon_pack_end(Eo *obj,
+ Efl_Page_Indicator_Icon_Data *pd)
+{
+ EFL_PAGE_INDICATOR_DATA_GET(obj, spd);
+ Eo *item;
+
+ efl_page_indicator_pack_end(efl_super(obj, MY_CLASS));
+
+ item = efl_add(EFL_CANVAS_LAYOUT_CLASS, spd->idbox);
+ pd->items = eina_list_append(pd->items, item);
+
+ elm_widget_theme_object_set(spd->idbox, item,
+ "pager", "indicator", "default");
+ efl_gfx_size_hint_align_set(item, 0.5, 0.5);
+ efl_gfx_size_hint_weight_set(item, 0, 0);
+ efl_pack_end(spd->idbox, item);
+}
+
+EOLIAN static void
+_efl_page_indicator_icon_pack_before(Eo *obj,
+ Efl_Page_Indicator_Icon_Data *pd,
+ int index)
+{
+ EFL_PAGE_INDICATOR_DATA_GET(obj, spd);
+ Eo *item, *existing;
+
+ efl_page_indicator_pack_before(efl_super(obj, MY_CLASS), index);
+
+ existing = eina_list_nth(pd->items, index);
+
+ item = efl_add(EFL_CANVAS_LAYOUT_CLASS, spd->idbox);
+ pd->items = eina_list_prepend_relative(pd->items, item, existing);
+
+ elm_widget_theme_object_set(spd->idbox, item,
+ "pager", "indicator", "default");
+ efl_gfx_size_hint_align_set(item, 0.5, 0.5);
+ efl_gfx_size_hint_weight_set(item, 0, 0);
+
+ efl_pack_before(spd->idbox, item, existing);
+}
+
+EOLIAN static void
+_efl_page_indicator_icon_pack_after(Eo *obj,
+ Efl_Page_Indicator_Icon_Data *pd,
+ int index)
+{
+ EFL_PAGE_INDICATOR_DATA_GET(obj, spd);
+ Eo *item, *existing;
+
+ efl_page_indicator_pack_after(efl_super(obj, MY_CLASS), index);
+
+ existing = eina_list_nth(pd->items, index);
+
+ item = efl_add(EFL_CANVAS_LAYOUT_CLASS, spd->idbox);
+ pd->items = eina_list_append_relative(pd->items, item, existing);
+
+ elm_widget_theme_object_set(spd->idbox, item,
+ "pager", "indicator", "default");
+ efl_gfx_size_hint_align_set(item, 0.5, 0.5);
+ efl_gfx_size_hint_weight_set(item, 0, 0);
+
+ efl_pack_after(spd->idbox, item, existing);
+}
+
+EOLIAN static Eo *
+_efl_page_indicator_icon_efl_object_constructor(Eo *obj,
+ Efl_Page_Indicator_Icon_Data *pd)
+{
+ EFL_PAGE_INDICATOR_DATA_GET(obj, spd);
+ Eo *item;
+ int i, page;
+
+ obj = efl_constructor(efl_super(obj, MY_CLASS));
+
+ efl_ui_direction_set(spd->idbox, EFL_UI_DIR_HORIZONTAL);
+ efl_pack_padding_set(spd->idbox, 15, 15, EINA_TRUE);
+
+ pd->v = eina_value_float_new(0.0);
+
+ if (spd->cnt != 0)
+ {
+ for (i = 0; i < spd->cnt; i++)
+ {
+ item = efl_add(EFL_CANVAS_LAYOUT_CLASS, spd->idbox);
+ pd->items = eina_list_append(pd->items, item);
+
+ elm_widget_theme_object_set(spd->idbox, item,
+ "pager", "indicator", "default");
+ efl_gfx_size_hint_align_set(item, 0.5, 0.5);
+ efl_gfx_size_hint_weight_set(item, 0, 0);
+ efl_pack_end(spd->idbox, item);
+ }
+
+ page = efl_ui_pager_current_page_get(spd->pager.obj);
+ item = eina_list_nth(pd->items, page);
+ eina_value_set(pd->v, 1.0);
+ efl_layout_signal_message_send(item, 1, *(pd->v));
+ }
+
+ return obj;
+}
+
+EOLIAN static void
+_efl_page_indicator_icon_efl_object_destructor(Eo *obj,
+ Efl_Page_Indicator_Icon_Data *pd)
+{
+ Eo *item;
+
+ efl_destructor(efl_super(obj, MY_CLASS));
+
+ EINA_LIST_FREE(pd->items, item)
+ efl_del(item);
+}
+
+
+#define EFL_PAGE_INDICATOR_ICON_EXTRA_OPS \
+ EFL_OBJECT_OP_FUNC(efl_page_indicator_update, \
+ _efl_page_indicator_icon_update), \
+ EFL_OBJECT_OP_FUNC(efl_page_indicator_pack_begin, \
+ _efl_page_indicator_icon_pack_begin), \
+ EFL_OBJECT_OP_FUNC(efl_page_indicator_pack_end, \
+ _efl_page_indicator_icon_pack_end), \
+ EFL_OBJECT_OP_FUNC(efl_page_indicator_pack_before, \
+ _efl_page_indicator_icon_pack_before), \
+ EFL_OBJECT_OP_FUNC(efl_page_indicator_pack_after, \
+ _efl_page_indicator_icon_pack_after)
+
+#include "efl_page_indicator_icon.eo.c"
diff --git a/src/lib/elementary/efl_page_indicator_icon.eo b/src/lib/elementary/efl_page_indicator_icon.eo
new file mode 100644
index 0000000000..4b74d2832f
--- /dev/null
+++ b/src/lib/elementary/efl_page_indicator_icon.eo
@@ -0,0 +1,8 @@
+class Efl.Page.Indicator.Icon (Efl.Page.Indicator)
+{
+ [[Efl ui pager indicator icon class]]
+ implements {
+ Efl.Object.constructor;
+ Efl.Object.destructor;
+ }
+}
diff --git a/src/lib/elementary/efl_page_indicator_icon.h b/src/lib/elementary/efl_page_indicator_icon.h
new file mode 100644
index 0000000000..ed509f06aa
--- /dev/null
+++ b/src/lib/elementary/efl_page_indicator_icon.h
@@ -0,0 +1,17 @@
+#ifndef EFL_PAGE_INDICATOR_ICON_H
+#define EFL_PAGE_INDICATOR_ICON_H
+
+typedef struct _Efl_Page_Indicator_Icon_Data Efl_Page_Indicator_Icon_Data;
+
+struct _Efl_Page_Indicator_Icon_Data
+{
+ Eina_List *items;
+ Eina_Value *v;
+};
+
+
+#define EFL_PAGE_INDICATOR_ICON_DATA_GET(o, pd) \
+ Efl_Page_Indicator_Icon_Data *pd = \
+ efl_data_scope_get(o, EFL_PAGE_INDICATOR_ICON_CLASS)
+
+#endif
diff --git a/src/lib/elementary/efl_ui_pager.c b/src/lib/elementary/efl_ui_pager.c
index 862820846a..3165e33877 100644
--- a/src/lib/elementary/efl_ui_pager.c
+++ b/src/lib/elementary/efl_ui_pager.c
@@ -19,6 +19,8 @@ _efl_ui_pager_update(Efl_Ui_Pager_Data *pd)
if (pd->cnt == 0) return;
efl_page_transition_update(pd->transition, pd->curr.pos);
+ if (pd->indicator)
+ efl_page_indicator_update(pd->indicator, pd->curr.pos);
}
static void
@@ -281,6 +283,7 @@ _efl_ui_pager_efl_gfx_size_set(Eo *obj,
pd->h = sz.h;
efl_gfx_size_set(pd->event, sz);
+ efl_gfx_size_set(pd->idbox, EINA_SIZE2D(sz.w, 50));
}
EOLIAN static void
@@ -299,6 +302,7 @@ _efl_ui_pager_efl_gfx_position_set(Eo *obj,
pd->y = pos.y;
efl_gfx_position_set(pd->event, pos);
+ efl_gfx_position_set(pd->idbox, pos);
}
EOLIAN static int
@@ -318,12 +322,19 @@ _efl_ui_pager_efl_pack_linear_pack_begin(Eo *obj,
pd->content_list = eina_list_prepend(pd->content_list, subobj);
efl_gfx_stack_above(pd->event, subobj);
+ efl_gfx_stack_above(pd->idbox, subobj);
pd->cnt += 1;
pd->curr.page += 1;
efl_page_transition_update(pd->transition, pd->curr.pos);
+ if (pd->indicator)
+ {
+ efl_page_indicator_pack_begin(pd->indicator);
+ efl_page_indicator_update(pd->indicator, pd->curr.pos);
+ }
+
return EINA_TRUE;
}
@@ -337,11 +348,18 @@ _efl_ui_pager_efl_pack_linear_pack_end(Eo *obj,
pd->content_list = eina_list_append(pd->content_list, subobj);
efl_gfx_stack_above(pd->event, subobj);
+ efl_gfx_stack_above(pd->idbox, subobj);
pd->cnt += 1;
efl_page_transition_update(pd->transition, pd->curr.pos);
+ if (pd->indicator)
+ {
+ efl_page_indicator_pack_end(pd->indicator);
+ efl_page_indicator_update(pd->indicator, pd->curr.pos);
+ }
+
return EINA_TRUE;
}
@@ -352,18 +370,26 @@ _efl_ui_pager_efl_pack_linear_pack_before(Eo *obj,
const Efl_Gfx *existing)
{
int index;
+
efl_parent_set(subobj, obj);
elm_widget_sub_object_add(obj, subobj);
index = eina_list_data_idx(pd->content_list, (void *)existing);
pd->content_list = eina_list_prepend_relative(pd->content_list, subobj, existing);
efl_gfx_stack_above(pd->event, subobj);
+ efl_gfx_stack_above(pd->idbox, subobj);
pd->cnt += 1;
if (pd->curr.page >= index) pd->curr.page += 1;
efl_page_transition_update(pd->transition, pd->curr.pos);
+ if (pd->indicator)
+ {
+ efl_page_indicator_pack_before(pd->indicator, index);
+ efl_page_indicator_update(pd->indicator, pd->curr.pos);
+ }
+
return EINA_TRUE;
}
@@ -374,18 +400,26 @@ _efl_ui_pager_efl_pack_linear_pack_after(Eo *obj,
const Efl_Gfx *existing)
{
int index;
+
efl_parent_set(subobj, obj);
elm_widget_sub_object_add(obj, subobj);
index = eina_list_data_idx(pd->content_list, (void *)existing);
pd->content_list = eina_list_append_relative(pd->content_list, subobj, existing);
efl_gfx_stack_above(pd->event, subobj);
+ efl_gfx_stack_above(pd->idbox, subobj);
pd->cnt += 1;
if (pd->curr.page > index) pd->curr.page += 1;
efl_page_transition_update(pd->transition, pd->curr.pos);
+ if (pd->indicator)
+ {
+ efl_page_indicator_pack_after(pd->indicator, index);
+ efl_page_indicator_update(pd->indicator, pd->curr.pos);
+ }
+
return EINA_TRUE;
}
@@ -396,18 +430,26 @@ _efl_ui_pager_efl_pack_linear_pack_at(Eo *obj,
int index)
{
Efl_Gfx *existing = NULL;
+
efl_parent_set(subobj, obj);
elm_widget_sub_object_add(obj, subobj);
existing = eina_list_nth(pd->content_list, index);
pd->content_list = eina_list_prepend_relative(pd->content_list, subobj, existing);
efl_gfx_stack_above(pd->event, subobj);
+ efl_gfx_stack_above(pd->idbox, subobj);
pd->cnt += 1;
if (pd->curr.page >= index) pd->curr.page += 1;
efl_page_transition_update(pd->transition, pd->curr.pos);
+ if (pd->indicator)
+ {
+ efl_page_indicator_pack_before(pd->indicator, index);
+ efl_page_indicator_update(pd->indicator, pd->curr.pos);
+ }
+
return EINA_TRUE;
}
@@ -511,13 +553,6 @@ _efl_ui_pager_current_page_get(Eo *obj EINA_UNUSED,
return pd->curr.page;
}
-EOLIAN static Efl_Page_Transition *
-_efl_ui_pager_transition_get(Eo *obj EINA_UNUSED,
- Efl_Ui_Pager_Data *pd)
-{
- return pd->transition;
-}
-
EOLIAN static void
_efl_ui_pager_transition_set(Eo *obj EINA_UNUSED,
Efl_Ui_Pager_Data *pd,
@@ -527,6 +562,34 @@ _efl_ui_pager_transition_set(Eo *obj EINA_UNUSED,
pd->transition = transition;
}
+EOLIAN static void
+_efl_ui_pager_indicator_set(Eo *obj EINA_UNUSED,
+ Efl_Ui_Pager_Data *pd,
+ const Efl_Class *klass)
+{
+ if (pd->indicator)
+ {
+ efl_del(pd->indicator);
+ pd->indicator = NULL;
+ }
+
+ if (!klass)
+ {
+ efl_del(pd->idbox);
+ pd->idbox = NULL;
+ return;
+ }
+
+ if (!pd->idbox)
+ {
+ pd->idbox = efl_add(EFL_UI_BOX_CLASS, obj);
+ efl_gfx_size_set(pd->idbox, EINA_SIZE2D(pd->w, 50));
+ efl_gfx_position_set(pd->idbox, EINA_POSITION2D(pd->x, pd->y));
+ }
+
+ pd->indicator = efl_add(klass, pd->idbox);
+}
+
EOLIAN Eina_Size2D
_efl_ui_pager_page_size_get(Eo *obj EINA_UNUSED,
Efl_Ui_Pager_Data *pd)
diff --git a/src/lib/elementary/efl_ui_pager.eo b/src/lib/elementary/efl_ui_pager.eo
index 34c1f4715a..9c6dea66be 100644
--- a/src/lib/elementary/efl_ui_pager.eo
+++ b/src/lib/elementary/efl_ui_pager.eo
@@ -12,11 +12,21 @@ class Efl.Ui.Pager (Elm.Widget, Efl.Pack.Linear)
eo_prefix: efl_ui_pager;
methods {
@property transition {
- [[Page transition effect]]
+ set {
+ [[Page transition effect]]
+ }
values {
transition: Efl.Page.Transition @nonull; [[transition effect]]
}
}
+ @property indicator {
+ set {
+ [[Page indicator]]
+ }
+ values {
+ klass: const(Efl.Class) @nullable; [[indicator class]]
+ }
+ }
@property current_page {
[[Set the currently selected page]]
values {
diff --git a/src/lib/elementary/efl_ui_widget_pager.h b/src/lib/elementary/efl_ui_widget_pager.h
index 05bae3b376..5f42133ce8 100644
--- a/src/lib/elementary/efl_ui_widget_pager.h
+++ b/src/lib/elementary/efl_ui_widget_pager.h
@@ -11,7 +11,8 @@ typedef struct _Efl_Ui_Pager_Data
Eina_List *page_infos;
Eina_List *content_list;
- Evas_Object *event;
+ Eo *event;
+ Efl_Ui_Box *idbox;
Ecore_Animator *animator;
Ecore_Job *job;
Ecore_Job *page_info_job;
@@ -48,6 +49,7 @@ typedef struct _Efl_Ui_Pager_Data
Efl_Ui_Pager_Loop loop;
Efl_Page_Transition *transition;
+ Efl_Page_Indicator *indicator;
Eina_Bool move_started : 1;
Eina_Bool prev_block : 1;
diff --git a/src/lib/elementary/elm_priv.h b/src/lib/elementary/elm_priv.h
index aefe6021d7..d07b433334 100644
--- a/src/lib/elementary/elm_priv.h
+++ b/src/lib/elementary/elm_priv.h
@@ -733,11 +733,17 @@ void _elm_widget_full_eval(Eo *obj);
EOAPI void efl_page_transition_page_size_set(Eo *obj, Eina_Size2D sz);
EOAPI void efl_page_transition_padding_size_set(Eo *obj, int padding);
-EOAPI void efl_page_transition_update(Eo *obj, double move);
+EOAPI void efl_page_transition_update(Eo *obj, double pos);
EOAPI void efl_page_transition_curr_page_change(Eo *obj, double move);
EOAPI void efl_page_transition_pack_end(Eo *obj, Efl_Gfx *subobj);
EOAPI void efl_page_transition_loop_set(Eo *obj, Efl_Ui_Pager_Loop loop);
+EOAPI void efl_page_indicator_update(Eo *obj, double pos);
+EOAPI void efl_page_indicator_pack_begin(Eo *obj);
+EOAPI void efl_page_indicator_pack_end(Eo *obj);
+EOAPI void efl_page_indicator_pack_before(Eo *obj, int index);
+EOAPI void efl_page_indicator_pack_after(Eo *obj, int index);
+
Eina_Bool _elm_config_accel_preference_parse(const char *pref, Eina_Stringshare **accel, int *gl_depth, int *gl_stencil, int *gl_msaa);
extern char *_elm_appname;