\r
struct _Widget_Data\r
{\r
- Evas_Object *win;\r
Evas_Object *parent;\r
Evas_Object *base;\r
- Evas_Coord_Rectangle win_rect;\r
- Evas_Coord_Rectangle base_rect;\r
- Evas_Coord handler_h;\r
- Evas_Coord drag;\r
- Evas_Coord_Point down_pos;\r
+ Evas_Object *handler;\r
+ Elm_SlidingDrawer_Pos pos;\r
+ double max_drag_dw;\r
+ double max_drag_dh;\r
};\r
\r
static const char *widtype = NULL;\r
static void _del_hook(Evas_Object *obj);\r
static void _theme_hook(Evas_Object *obj);\r
static void _sizing_eval(Evas_Object *obj);\r
-static void _slidingdrawer_show(void *data, Evas *e, Evas_Object *obj, void *event_info);\r
-static void _slidingdrawer_hide(void *data, Evas *e, Evas_Object *obj, void *event_info);\r
static void _parent_resize(void *data, Evas *e, Evas_Object *obj, void *event_info);\r
\r
static void\r
_theme_hook(Evas_Object *obj)\r
{\r
Widget_Data *wd = (Widget_Data *) elm_widget_data_get(obj);\r
- _elm_theme_object_set(obj, wd->base, "slidingdrawer", "base", elm_widget_style_get(obj));\r
+ elm_slidingdrawer_pos_set(obj, wd->pos);\r
}\r
\r
static void\r
}\r
\r
static void\r
-_slidingdrawer_show(void *data, Evas *e, Evas_Object *obj, void *event_info)\r
-{\r
- Widget_Data *wd = (Widget_Data*) data;\r
- evas_object_show(wd->win);\r
-}\r
-\r
-static void\r
-_slidingdrawer_hide(void *data, Evas *e, Evas_Object *obj, void *event_info)\r
-{\r
- Widget_Data *wd = (Widget_Data*) data;\r
- evas_object_hide(wd->win);\r
-}\r
-\r
-static void\r
_sizing_eval(Evas_Object *obj)\r
{\r
- Evas_Coord x, y, w, h;\r
Widget_Data *wd;\r
+ Evas_Coord x, y, w, h;\r
+ Evas_Object *part;\r
\r
wd = elm_widget_data_get(obj);\r
\r
evas_object_move(obj, x, y);\r
evas_object_resize(obj, w, h);\r
\r
- /*\r
- ecore_x_window_geometry_get(ecore_x_window_root_get(ecore_x_window_focus_get()), &wd->win_rect.x, &wd->win_rect.y, &wd->win_rect.w, &wd->win_rect.h);\r
- edje_object_part_geometry_get(wd->base, "handler", NULL, NULL, NULL, &wd->handler_h);\r
- evas_object_resize(wd->win, wd->win_rect.w, wd->handler_h);\r
- evas_object_move(wd->win, 0, wd->win_rect.h - wd->handler_h);\r
- evas_object_resize(wd->base, wd->win_rect.w, wd->handler_h);\r
- wd->base_rect.y = 0;\r
- wd->base_rect.h = wd->handler_h;\r
- */\r
-}\r
-\r
-void\r
-_down(void *data, Evas *e, Evas_Object *obj, void *event_info)\r
-{\r
- Evas_Event_Mouse_Down *ev;\r
- Widget_Data *wd = (Widget_Data*) data;\r
-\r
- ev = (Evas_Event_Mouse_Down *) event_info;\r
- wd = (Widget_Data*) data;\r
-\r
- evas_object_move(wd->win, 0, 0 );\r
- evas_object_resize(wd->win, wd->win_rect.w, wd->win_rect.h);\r
- evas_object_move(wd->base, 0, wd->win_rect.h - wd->base_rect.h);\r
- wd->base_rect.y = wd->win_rect.h - wd->base_rect.h;\r
- wd->down_pos.x = ev->output.x;\r
- wd->down_pos.y = wd->win_rect.h - wd->base_rect.h + ev->output.y;\r
- fprintf( stderr, "DOWN! window - %d %d %d %d\n", 0, 0, wd->win_rect.w, wd->win_rect.h);\r
- fprintf( stderr, "DOWN! base - %d %d\n", 0, wd->win_rect.h - wd->base_rect.h );\r
-\r
-}\r
-\r
-void\r
-_move(void *data, Evas *e, Evas_Object *obj, void *event_info)\r
-{\r
- Evas_Event_Mouse_Move *ev;\r
- Widget_Data *wd;\r
-\r
- ev = (Evas_Event_Mouse_Move *) event_info;\r
+ part = edje_object_part_object_get(wd->base, "elm.dragable.handler");\r
\r
- if(!ev->buttons)\r
- return ;\r
+ if((wd->pos == ELM_SLIDINGDRAWER_TOP) || (wd->pos == ELM_SLIDINGDRAWER_BOTTOM)) {\r
+ edje_object_size_min_get(part, NULL, &h);\r
+ }else {\r
+ edje_object_size_min_get(part, &w, NULL);\r
+ }\r
\r
- wd = (Widget_Data*) data;\r
-\r
- wd->drag = ev->cur.output.y - wd->down_pos.y;\r
- evas_object_move(wd->base, 0, wd->base_rect.y + wd->drag );\r
- evas_object_resize(wd->base, wd->win_rect.w, wd->handler_h - wd->drag );\r
+ evas_object_size_hint_min_set(wd->handler, w, h);\r
}\r
\r
-void\r
-_up(void *data, Evas *e, Evas_Object *obj, void *event_info)\r
-{\r
- Evas_Event_Mouse_Up *ev;\r
- Widget_Data *wd;\r
- ev = (Evas_Event_Mouse_Up *) event_info;\r
-\r
- wd = (Widget_Data *) data;\r
-\r
- wd->base_rect.y = wd->base_rect.y + wd->drag;\r
- wd->base_rect.h = wd->handler_h - wd->drag;\r
- evas_object_move(wd->win, 0, wd->base_rect.y);\r
- evas_object_resize(wd->win, wd->win_rect.w, wd->base_rect.h);\r
- evas_object_move(wd->base, 0, 0);\r
- wd->drag = 0;\r
-// fprintf( stderr, "UP! window - %d %d %d %d\n", 0, wd->base_rect.y, wd->win_rect.w, wd->base_rect.h);\r
-}\r
\r
EAPI Evas_Object *\r
elm_slidingdrawer_content_get(Evas_Object *obj)\r
return swallow;\r
}\r
\r
-\r
EAPI void\r
elm_slidingdrawer_content_set (Evas_Object *obj, Evas_Object *content)\r
{\r
edje_object_part_swallow (wd->base, "elm.swallow.content", content);\r
}\r
\r
+EAPI void\r
+elm_slidingdrawer_pos_set(Evas_Object *obj, Elm_SlidingDrawer_Pos pos)\r
+{\r
+ ELM_CHECK_WIDTYPE(obj, widtype);\r
+\r
+ Widget_Data *wd = elm_widget_data_get(obj);\r
+\r
+ switch(pos)\r
+ {\r
+ case ELM_SLIDINGDRAWER_BOTTOM:\r
+ _elm_theme_object_set(obj, wd->base, "slidingdrawer", "bottom", elm_widget_style_get(obj));\r
+ break;\r
+ case ELM_SLIDINGDRAWER_LEFT:\r
+ _elm_theme_object_set(obj, wd->base, "slidingdrawer", "left", elm_widget_style_get(obj));\r
+ break;\r
+ case ELM_SLIDINGDRAWER_RIGHT:\r
+ _elm_theme_object_set(obj, wd->base, "slidingdrawer", "right", elm_widget_style_get(obj));\r
+ break;\r
+ case ELM_SLIDINGDRAWER_TOP:\r
+ _elm_theme_object_set(obj, wd->base, "slidingdrawer", "top", elm_widget_style_get(obj));\r
+ break;\r
+ }\r
+\r
+ edje_object_part_drag_value_set(wd->base, "elm.dragable.handler", 0, 0);\r
+ wd->pos = pos;\r
+ _sizing_eval(obj);\r
+}\r
+\r
+EAPI void\r
+elm_slidingdrawer_drag_max_set(Evas_Object *obj, double dw, double dh)\r
+{\r
+ ELM_CHECK_WIDTYPE(obj, widtype);\r
+\r
+ Widget_Data *wd = elm_widget_data_get(obj);\r
+ wd->max_drag_dw = dw;\r
+ wd->max_drag_dh = dh;\r
+}\r
+\r
\r
EAPI Evas_Object *\r
elm_slidingdrawer_add(Evas_Object *parent)\r
\r
//base\r
wd->base = edje_object_add(e);\r
- _elm_theme_object_set(obj, wd->base, "slidingdrawer", "base", "default");\r
+ _elm_theme_object_set(obj, wd->base, "slidingdrawer", "bottom", "default");\r
elm_widget_sub_object_add(obj, wd->base);\r
elm_widget_resize_object_set(obj, wd->base);\r
\r
//handler\r
+ wd->handler = evas_object_rectangle_add(e);\r
+ evas_object_color_set(wd->handler, 0, 0, 0, 0);\r
+ edje_object_part_swallow(wd->base, "elm.dragable.handler", wd->handler);\r
+\r
evas_object_event_callback_add(parent, EVAS_CALLBACK_RESIZE, _parent_resize, obj);\r
- //evas_object_event_callback_add(handler, EVAS_CALLBACK_MOUSE_DOWN, _down, wd);\r
- //evas_object_event_callback_add(handler, EVAS_CALLBACK_MOUSE_MOVE, _move, wd);\r
- //evas_object_event_callback_add(handler, EVAS_CALLBACK_MOUSE_UP, _up, wd);\r
- //evas_object_event_callback_add(obj, EVAS_CALLBACK_SHOW, _slidingdrawer_show, wd);\r
- //evas_object_event_callback_add(obj, EVAS_CALLBACK_HIDE, _slidingdrawer_hide, wd);\r
\r
_sizing_eval(obj);\r
\r