summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJaeun Choi <jaeun12.choi@samsung.com>2017-05-25 20:03:28 +0900
committerJaeun Choi <jaeun12.choi@samsung.com>2017-05-26 16:23:58 +0900
commit6a9a64692af6b78b40c4b45659a595d59929d8c0 (patch)
treeb2f05233fd6c5764dbf90db98c1f8c6ef4e9e71f
parentb68ab789831b52275561bc9a782f2ba5bfae0411 (diff)
downloadefl-6a9a64692af6b78b40c4b45659a595d59929d8c0.tar.gz
implement basic scroll function
-rw-r--r--src/examples/elementary/efl_ui_scroller_example.c14
-rw-r--r--src/lib/elementary/efl_ui_scroll_manager.c56
-rw-r--r--src/lib/elementary/efl_ui_scroll_manager.eo14
-rw-r--r--src/lib/elementary/efl_ui_scroller.c42
-rw-r--r--src/lib/elementary/efl_ui_scroller.eo3
-rw-r--r--src/lib/elementary/efl_ui_widget_scroll_manager.h5
-rw-r--r--src/lib/elementary/efl_ui_widget_scroller.h2
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