[Elementary.h.in] added elm_slidingdrawer_pos_set
authorChunEon Park <chuneon.park@samsung.com>
Wed, 1 Sep 2010 00:27:31 +0000 (09:27 +0900)
committerChunEon Park <chuneon.park@samsung.com>
Wed, 1 Sep 2010 00:27:31 +0000 (09:27 +0900)
[elm_slidindgdrawer.c] implemented pos set

src/lib/Elementary.h.in
src/lib/elm_slidingdrawer.c

index 27bbe1b..c431173 100755 (executable)
@@ -2407,9 +2407,16 @@ extern "C" {
    EAPI void         elm_gallery_set_max_count(Evas_Object *obj,int max_value);
 
    /* Sliding Drawer */
+   typedef enum _Elm_SlidingDrawer_Pos {
+               ELM_SLIDINGDRAWER_BOTTOM,
+               ELM_SLIDINGDRAWER_LEFT,
+               ELM_SLIDINGDRAWER_RIGHT,
+               ELM_SLIDINGDRAWER_TOP
+   } Elm_SlidingDrawer_Pos;
    EAPI Evas_Object *elm_slidingdrawer_add(Evas_Object *parent);
    EAPI void         elm_slidingdrawer_content_set (Evas_Object *obj, Evas_Object *content);
    EAPI Evas_Object *elm_slidingdrawer_content_get(Evas_Object *obj);
+   EAPI void           elm_slidingdrawer_pos_set(Evas_Object *obj, Elm_SlidingDrawer_Pos pos);
 
    /* wipercontrol*/
    EAPI Evas_Object *elm_wipercontrol_add(Evas_Object *parent);
index 8ae846a..d6def89 100644 (file)
@@ -11,22 +11,18 @@ typedef struct _Widget_Data Widget_Data;
 \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
@@ -40,7 +36,7 @@ static void
 _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
@@ -50,24 +46,11 @@ _parent_resize(void *data, Evas *e, Evas_Object *obj, void *event_info)
 }\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
@@ -75,72 +58,17 @@ _sizing_eval(Evas_Object *obj)
        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
@@ -156,7 +84,6 @@ elm_slidingdrawer_content_get(Evas_Object *obj)
        return swallow;\r
 }\r
 \r
-\r
 EAPI void\r
 elm_slidingdrawer_content_set (Evas_Object *obj, Evas_Object *content)\r
 {\r
@@ -168,6 +95,44 @@ elm_slidingdrawer_content_set (Evas_Object *obj, Evas_Object *content)
        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
@@ -225,17 +190,16 @@ elm_slidingdrawer_add(Evas_Object *parent)
 \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