diff options
author | Jaeun Choi <jaeun12.choi@samsung.com> | 2017-05-25 20:03:28 +0900 |
---|---|---|
committer | Jaeun Choi <jaeun12.choi@samsung.com> | 2017-05-26 16:23:58 +0900 |
commit | 6a9a64692af6b78b40c4b45659a595d59929d8c0 (patch) | |
tree | b2f05233fd6c5764dbf90db98c1f8c6ef4e9e71f | |
parent | b68ab789831b52275561bc9a782f2ba5bfae0411 (diff) | |
download | efl-6a9a64692af6b78b40c4b45659a595d59929d8c0.tar.gz |
implement basic scroll function
-rw-r--r-- | src/examples/elementary/efl_ui_scroller_example.c | 14 | ||||
-rw-r--r-- | src/lib/elementary/efl_ui_scroll_manager.c | 56 | ||||
-rw-r--r-- | src/lib/elementary/efl_ui_scroll_manager.eo | 14 | ||||
-rw-r--r-- | src/lib/elementary/efl_ui_scroller.c | 42 | ||||
-rw-r--r-- | src/lib/elementary/efl_ui_scroller.eo | 3 | ||||
-rw-r--r-- | src/lib/elementary/efl_ui_widget_scroll_manager.h | 5 | ||||
-rw-r--r-- | src/lib/elementary/efl_ui_widget_scroller.h | 2 |
7 files changed, 128 insertions, 8 deletions
diff --git a/src/examples/elementary/efl_ui_scroller_example.c b/src/examples/elementary/efl_ui_scroller_example.c index bbc11f63ba..05e76fcdb8 100644 --- a/src/examples/elementary/efl_ui_scroller_example.c +++ b/src/examples/elementary/efl_ui_scroller_example.c @@ -10,8 +10,10 @@ EAPI_MAIN int elm_main(int argc, char **argv) { Eo *win, *scroller, *content; + char buf[64]; elm_policy_set(ELM_POLICY_QUIT, ELM_POLICY_QUIT_LAST_WINDOW_CLOSED); + elm_app_info_set(elm_main, "elementary", "images/plant_01.jpg"); win = efl_add(EFL_UI_WIN_CLASS, NULL, "TEST", ELM_WIN_BASIC); efl_gfx_size_set(win, 300, 400); @@ -19,8 +21,16 @@ elm_main(int argc, char **argv) scroller = efl_add(EFL_UI_SCROLLER_CLASS, win); efl_gfx_visible_set(scroller, EINA_TRUE); - elm_win_resize_object_add(win, scroller); - evas_object_size_hint_weight_set(scroller, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + efl_gfx_size_set(scroller, 200, 300); + efl_gfx_position_set(scroller, 50, 50); + + content = elm_image_add(scroller); + snprintf(buf, sizeof(buf), "%s/images/plant_01.jpg", elm_app_data_dir_get()); + elm_image_file_set(content, buf, NULL); + efl_gfx_visible_set(content, EINA_TRUE); + evas_object_size_hint_min_set(content, 500, 500); + + efl_content_set(scroller, content); elm_run(); diff --git a/src/lib/elementary/efl_ui_scroll_manager.c b/src/lib/elementary/efl_ui_scroll_manager.c index 9d6282942b..f63de7add7 100644 --- a/src/lib/elementary/efl_ui_scroll_manager.c +++ b/src/lib/elementary/efl_ui_scroll_manager.c @@ -11,9 +11,61 @@ EOLIAN static void -_efl_ui_scroll_manager_efl_canvas_group_group_add(Eo *obj EINA_UNUSED, - Efl_Ui_Scroll_Manager_Data *sd EINA_UNUSED) +_efl_ui_scroll_manager_efl_gfx_size_set(Eo *obj EINA_UNUSED, + Efl_Ui_Scroll_Manager_Data *sd, + Evas_Coord w, + Evas_Coord h) { + efl_gfx_size_set(sd->hit_rect, w, h); +} + +EOLIAN static void +_efl_ui_scroll_manager_efl_gfx_position_set(Eo *obj EINA_UNUSED, + Efl_Ui_Scroll_Manager_Data *sd, + Evas_Coord x, + Evas_Coord y) +{ + efl_gfx_position_set(sd->hit_rect, x, y); +} + +static void +_resize_cb(Evas_Object *obj, Evas_Coord w EINA_UNUSED, Evas_Coord h EINA_UNUSED) +{ + Evas_Coord minw, minh; + Efl_Ui_Scroll_Manager_Data *sd = efl_data_scope_get(obj, EFL_UI_SCROLL_MANAGER_CLASS); + + efl_gfx_size_hint_combined_min_get(sd->content, &minw, &minh); + efl_gfx_size_set(sd->content, minw, minh); +} + +EOLIAN static void +_efl_ui_scroll_manager_efl_canvas_group_group_add(Eo *obj, + Efl_Ui_Scroll_Manager_Data *sd) +{ + sd->parent = efl_parent_get(obj); + ELM_WIDGET_DATA_GET_OR_RETURN(sd->parent, wd); + + efl_canvas_group_add(efl_super(obj, MY_CLASS)); + + sd->hit_rect = evas_object_rectangle_add(evas_object_evas_get(obj)); + efl_gfx_color_set(sd->hit_rect, 0, 0, 0, 0); + efl_gfx_visible_set(sd->hit_rect, EINA_TRUE); + + elm_interface_scrollable_objects_set(obj, wd->resize_obj, sd->hit_rect); + + elm_interface_scrollable_content_viewport_resize_cb_set(obj, _resize_cb); +} + +EOLIAN static void +_efl_ui_scroll_manager_content_set(Eo *obj, + Efl_Ui_Scroll_Manager_Data *sd, + Evas_Object *content) +{ + if (sd->content == content) return; + + sd->content = content; + efl_canvas_group_member_add(obj, content); + elm_interface_scrollable_content_set(obj, content); } EOLIAN static Eo * diff --git a/src/lib/elementary/efl_ui_scroll_manager.eo b/src/lib/elementary/efl_ui_scroll_manager.eo index 5a0dc8953b..aac5a1e83c 100644 --- a/src/lib/elementary/efl_ui_scroll_manager.eo +++ b/src/lib/elementary/efl_ui_scroll_manager.eo @@ -1,10 +1,22 @@ -class Efl.Ui.Scroll.Manager (Efl.Object, Elm.Interface_Scrollable) +class Efl.Ui.Scroll.Manager (Efl.Canvas.Group, Elm.Interface_Scrollable) { [[Efl ui scroll manager class]] event_prefix: efl_ui_scroll_manager; eo_prefix: efl_ui_scroll_manager; + methods { + @property content { + [[Set the content]] + set { + } + values { + content: Efl.Gfx @nullable; [[content object]] + } + } + } implements { Efl.Object.constructor; Efl.Canvas.Group.group_add; + Efl.Gfx.size { set; } + Efl.Gfx.position { set; } } } diff --git a/src/lib/elementary/efl_ui_scroller.c b/src/lib/elementary/efl_ui_scroller.c index 0f06394808..b3767fdaba 100644 --- a/src/lib/elementary/efl_ui_scroller.c +++ b/src/lib/elementary/efl_ui_scroller.c @@ -7,6 +7,7 @@ #include <Elementary.h> #include "elm_priv.h" #include "efl_ui_widget_scroller.h" +#include "efl_ui_widget_scroll_manager.h" #include "elm_widget_layout.h" #define MY_CLASS EFL_UI_SCROLLER_CLASS @@ -14,10 +15,45 @@ EOLIAN static void -_efl_ui_scroller_efl_canvas_group_group_add(Eo *obj EINA_UNUSED, - Efl_Ui_Scroller_Data *sd EINA_UNUSED) +_efl_ui_scroller_efl_gfx_size_set(Eo *obj, + Efl_Ui_Scroller_Data *sd, + Evas_Coord w, + Evas_Coord h) { - Eo *smanager = efl_add(EFL_UI_SCROLL_MANAGER_CLASS, obj); + efl_gfx_size_set(efl_super(obj, MY_CLASS), w, h); + + efl_gfx_size_set(sd->smanager, w, h); +} + +EOLIAN static void +_efl_ui_scroller_efl_gfx_position_set(Eo *obj, + Efl_Ui_Scroller_Data *sd, + Evas_Coord x, + Evas_Coord y) +{ + efl_gfx_position_set(efl_super(obj, MY_CLASS), x, y); + + efl_gfx_position_set(sd->smanager, x, y); +} + +EOLIAN static Eina_Bool +_efl_ui_scroller_efl_container_content_set(Eo *obj EINA_UNUSED, + Efl_Ui_Scroller_Data *sd, + Evas_Object *content) +{ + efl_ui_scroll_manager_content_set(sd->smanager, content); +} + +EOLIAN static void +_efl_ui_scroller_efl_canvas_group_group_add(Eo *obj, + Efl_Ui_Scroller_Data *sd) +{ + efl_canvas_group_add(efl_super(obj, MY_CLASS)); + elm_widget_sub_object_parent_add(obj); + + elm_layout_theme_set(obj, "scroller", "base", elm_widget_style_get(obj)); + + sd->smanager = efl_add(EFL_UI_SCROLL_MANAGER_CLASS, obj); } EOLIAN static Eo * diff --git a/src/lib/elementary/efl_ui_scroller.eo b/src/lib/elementary/efl_ui_scroller.eo index bb17c72795..89a29604a8 100644 --- a/src/lib/elementary/efl_ui_scroller.eo +++ b/src/lib/elementary/efl_ui_scroller.eo @@ -6,5 +6,8 @@ class Efl.Ui.Scroller (Elm.Layout, Efl.Ui.Scrollable) implements { Efl.Object.constructor; Efl.Canvas.Group.group_add; + Efl.Gfx.size { set; } + Efl.Gfx.position { set; } + Efl.Container.content { set; } } } diff --git a/src/lib/elementary/efl_ui_widget_scroll_manager.h b/src/lib/elementary/efl_ui_widget_scroll_manager.h index ca75a1514d..231ba05744 100644 --- a/src/lib/elementary/efl_ui_widget_scroll_manager.h +++ b/src/lib/elementary/efl_ui_widget_scroll_manager.h @@ -5,6 +5,11 @@ typedef struct _Efl_Ui_Scroll_Manager_Data { + Eo *parent; + + Evas_Object *hit_rect; + Evas_Object *content; + } Efl_Ui_Scroll_Manager_Data; #endif diff --git a/src/lib/elementary/efl_ui_widget_scroller.h b/src/lib/elementary/efl_ui_widget_scroller.h index 274c9cadd0..6bf9c93ffe 100644 --- a/src/lib/elementary/efl_ui_widget_scroller.h +++ b/src/lib/elementary/efl_ui_widget_scroller.h @@ -5,6 +5,8 @@ typedef struct _Efl_Ui_Scroller_Data { + Eo *smanager; + } Efl_Ui_Scroller_Data; #endif |