\r
struct _Widget_Data\r
{\r
- Evas_Object *sd;\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
};\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 _disable_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
_del_hook(Evas_Object *obj)\r
{\r
- Widget_Data *wd = elm_widget_data_get(obj);\r
- if (!wd) return;\r
- free(wd);\r
+ Widget_Data *wd = (Widget_Data *) elm_widget_data_get(obj);\r
+ free(wd);\r
}\r
\r
-/*\r
- * FIXME:\r
- */\r
static void\r
_theme_hook(Evas_Object *obj)\r
{\r
- Widget_Data *wd = elm_widget_data_get(obj);\r
- if (!wd) return;\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
+}\r
\r
- _elm_theme_object_set(obj,wd->sd, "slidingdrawer", "base", elm_widget_style_get(obj));\r
+static void\r
+_parent_resize(void *data, Evas *e, Evas_Object *obj, void *event_info)\r
+{\r
+ _sizing_eval(data);\r
+}\r
\r
- _sizing_eval(obj);\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
- evas_object_show (wd->sd);\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
- Widget_Data *wd = elm_widget_data_get(obj);\r
+ Evas_Coord x, y, w, h;\r
+ Widget_Data *wd;\r
+\r
+ wd = elm_widget_data_get(obj);\r
+\r
+ evas_object_geometry_get(wd->parent, &x, &y, &w, &h);\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
-/**\r
- * Set content to the slidingdrawer\r
- *\r
- * @param[in] obj Slidingdrawer object\r
- * @param[in] content Custom object\r
- * @ingroup SlidingDrawer\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
+\r
+ if(!ev->buttons)\r
+ return ;\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
+}\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
+{\r
+ ELM_CHECK_WIDTYPE(obj, widtype) NULL;\r
+\r
+ Evas_Object *swallow;\r
+ Widget_Data *wd;\r
+\r
+ wd = elm_widget_data_get(obj);\r
+ swallow = edje_object_part_swallow_get(wd->base, "elm.swallow.content");\r
+ edje_object_part_unswallow(wd->base, swallow);\r
+ return swallow;\r
+}\r
+\r
+\r
EAPI void\r
elm_slidingdrawer_content_set (Evas_Object *obj, Evas_Object *content)\r
{\r
+ ELM_CHECK_WIDTYPE(obj, widtype);\r
+\r
Widget_Data *wd = elm_widget_data_get(obj);\r
- if (!wd) return;\r
if (!content) return;\r
\r
- edje_object_part_swallow (wd->sd, "content.swallow", content);\r
+ edje_object_part_swallow (wd->base, "elm.swallow.content", content);\r
}\r
\r
-/**\r
- * Add a new slidingdrawer to the parent\r
- * @param parent The parent object\r
- * @return The new object or NULL if it cannot be created\r
- * @ingroup SlidingDrawer\r
- */\r
+\r
EAPI Evas_Object *\r
elm_slidingdrawer_add(Evas_Object *parent)\r
{\r
Evas_Object *obj;\r
+ Evas_Object *handler;\r
Evas *e;\r
Widget_Data *wd;\r
\r
+ if(!parent)\r
+ return ;\r
+\r
wd = ELM_NEW(Widget_Data);\r
+ if(!wd) return NULL;\r
+\r
+ ELM_SET_WIDTYPE(widtype, "slidingdrawer");\r
+\r
+ wd->parent = parent;\r
+\r
e = evas_object_evas_get(parent);\r
+\r
+ //window\r
+ /*\r
+ wd->win = elm_win_add(parent, "slidingdrawer", ELM_WIN_BASIC);\r
+ elm_win_autodel_set(wd->win, EINA_TRUE);\r
+ elm_win_borderless_set(wd->win, EINA_TRUE);\r
+ elm_win_alpha_set(wd->win, EINA_TRUE);\r
+ e = evas_object_evas_get(wd->win);\r
+\r
+ //widget\r
obj = elm_widget_add(e);\r
elm_widget_type_set(obj, "slidingdrawer");\r
- elm_widget_sub_object_add(parent, obj);\r
+ elm_widget_sub_object_add(wd->win, obj);\r
elm_widget_data_set(obj, wd);\r
elm_widget_del_hook_set(obj, _del_hook);\r
elm_widget_theme_hook_set(obj, _theme_hook);\r
- elm_widget_can_focus_set(obj, 0);\r
-\r
- wd->sd = edje_object_add(e);\r
+ elm_win_resize_object_add(wd->win, obj);\r
\r
- _elm_theme_object_set(obj,wd->sd, "slidingdrawer", "base", "default");\r
+ //base\r
+ wd->base = edje_object_add(e);\r
+ _elm_theme_object_set(wd->win, wd->base, "slidingdrawer", "base", "default");\r
+ elm_widget_sub_object_add(obj, wd->base);\r
+ evas_object_show(wd->base);\r
+ elm_widget_resize_object_set(obj, wd->base);\r
+ */\r
\r
- elm_widget_resize_object_set(obj, wd->sd);\r
+ //widget\r
+ obj = elm_widget_add(e);\r
+ elm_widget_type_set(obj, "slidingdrawer");\r
+ elm_widget_sub_object_add(parent, obj);\r
+ elm_widget_data_set(obj, wd);\r
+ elm_widget_del_hook_set(obj, _del_hook);\r
+ elm_widget_theme_hook_set(obj, _theme_hook);\r
+ elm_widget_can_focus_set(obj, EINA_FALSE);\r
+\r
+ //base\r
+ wd->base = edje_object_add(e);\r
+ _elm_theme_object_set(obj, wd->base, "slidingdrawer", "base", "default");\r
+ elm_widget_sub_object_add(obj, wd->base);\r
+ elm_widget_resize_object_set(obj, wd->base);\r
+\r
+ //handler\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