Added the mouse focus handling throughout the menu and grid thumbnails 60/45060/1
authorHyojung Jo <hj903.jo@samsung.com>
Fri, 31 Jul 2015 05:06:36 +0000 (14:06 +0900)
committerHyojung Jo <hj903.jo@samsung.com>
Fri, 31 Jul 2015 05:06:36 +0000 (14:06 +0900)
Change-Id: If2148c04a94b9ec9ae24442dbe2c2d0dfa3ce880
Signed-off-by: Hyojung Jo <hj903.jo@samsung.com>
include/define.h
res/widgets/button.edc
src/view/view_base.c

index b2306c1..beffc8a 100644 (file)
 #define SIG_FOCUSED "focused"
 #define SIG_UNFOCUSED "unfocused"
 #define SIG_SELECTED "selected"
+#define SIG_UNSELECTED "unselected"
 #define SIG_ITEM_SELECTED "item.selected"
 #define SIG_VISIBLE "visible"
 #define SIG_INVISIBLE "invisible"
 
 /* Source */
 #define SRC_EDC "edc"
+#define SRC_MENU_BTN "menubtn"
 
 /* Transition */
 #define TRANSITION_FOCUS DECELERATE 0.20
index b25facc..c0094c7 100644 (file)
@@ -161,68 +161,113 @@ group {
 
        programs{
                program {
+                       name, "load";
+                       signal, "load";
+                       source, "";
+                       script {
+                               set_int(cur_state, STATE_NORMAL);
+                       }
+               }
+
+               program {
                        name, SIG_FOCUSED;
                        signal, "elm,action,focus";
                        source, "elm";
                        script {
                                set_int(cur_state, STATE_NORMAL);
+                               set_state(PART:"part.bottom.line", "focused", 0.0);
                                run_program(PROGRAM:"focused,anim");
                        }
                }
 
                program {
+                       name, "focused,anim";
+                       action, STATE_SET "focused" 0.0;
+                       target, "part.bg";
+                       target, "part.bg.left";
+                       target, "part.bg.right";
+                       target, "elm.text";
+                       transition, TRANSITION_FOCUS;
+               }
+
+               program {
                        name, SIG_UNFOCUSED;
                        signal, "elm,action,unfocus";
                        source, "elm";
                        script {
                                new state;
                                state = get_int(cur_state);
+                               set_int(cur_state, STATE_NORMAL);
                                if (state == STATE_SELECTED) {
-                                       set_state(PART:"part.bg", "selected", 0.0);
-                                       set_state(PART:"part.bg.left", "selected", 0.0);
-                                       set_state(PART:"part.bg.right", "selected", 0.0);
-                                       set_state(PART:"elm.text", "selected", 0.0);
                                        set_state(PART:"part.bottom.line", "selected", 0.0);
+                                       run_program(PROGRAM:"unfocused,sel,anim");
                                } else {
-                                       run_program(PROGRAM:"unfocused,anim");
+                                       set_state(PART:"part.bottom.line", "default", 0.0);
+                                       run_program(PROGRAM:"unfocused,foc,anim");
                                }
                        }
                }
 
                program {
-                       name, "focused,anim";
-                       action, STATE_SET "focused" 0.0;
+                       name, "unfocused,sel,anim";
+                       action, STATE_SET "selected" 0.0;
                        target, "part.bg";
                        target, "part.bg.left";
                        target, "part.bg.right";
                        target, "elm.text";
-                       target, "part.bottom.line";
                        transition, TRANSITION_FOCUS;
                }
 
                program {
-                       name, "unfocused,anim";
+                       name, "unfocused,foc,anim";
                        action, STATE_SET "default" 0.0;
                        target, "part.bg";
                        target, "part.bg.left";
                        target, "part.bg.right";
                        target, "elm.text";
-                       target, "part.bottom.line";
                        transition, TRANSITION_FOCUS;
                }
 
                program {
                        name, SIG_SELECTED;
-                       signal, "selected";
-                       source, "";
+                       signal, SIG_SELECTED;
+                       source, SRC_MENU_BTN;
                        script {
                                set_int(cur_state, STATE_SELECTED);
-                               set_state(PART:"part.bg", "selected", 0.0);
-                               set_state(PART:"elm.text", "selected", 0.0);
-                               set_state(PART:"part.bg.left", "selected", 0.0);
-                               set_state(PART:"part.bg.right", "selected", 0.0);
                                set_state(PART:"part.bottom.line", "selected", 0.0);
+                               run_program(PROGRAM:"selected,anim");
+                       }
+               }
+
+               program {
+                       name, "selected,anim";
+                       action, STATE_SET "selected" 0.0;
+                       target, "part.bg";
+                       target, "part.bg.left";
+                       target, "part.bg.right";
+                       target, "elm.text";
+                       transition, TRANSITION_FOCUS;
+               }
+
+               program {
+                       name, SIG_UNSELECTED;
+                       signal, SIG_UNSELECTED;
+                       source, SRC_MENU_BTN;
+                       script {
+                               set_int(cur_state, STATE_NORMAL);
+                               set_state(PART:"part.bottom.line", "default", 0.0);
+                               run_program(PROGRAM:"unselected,anim");
                        }
                }
+
+               program {
+                       name, "unselected,anim";
+                       action, STATE_SET "default" 0.0;
+                       target, "part.bg";
+                       target, "part.bg.left";
+                       target, "part.bg.right";
+                       target, "elm.text";
+                       transition, TRANSITION_FOCUS;
+               }
        }
 }
index e7b4f2b..03ccb3f 100644 (file)
@@ -130,6 +130,18 @@ static bool _load_current_grid(struct _priv *priv, int id)
        return true;
 }
 
+static void _mouse_move_cb(int id, void *data, Evas *e, Evas_Object *obj,
+               Evas_Event_Mouse_Move *ev)
+{
+       if (!obj) {
+               _ERR("Invalid argument.");
+               return;
+       }
+
+       if (!elm_object_focus_get(obj))
+               elm_object_focus_set(obj ,EINA_TRUE);
+}
+
 static void _menu_clicked_cb(int id, void *data, Evas_Object *obj)
 {
        /* It will be implemented later. */
@@ -139,6 +151,7 @@ static void _menu_focused_cb(int id, void *data, Evas_Object *obj,
                Elm_Object_Item *item)
 {
        struct _priv *priv;
+       int pre_menu_id;
 
        if (!data || !obj ) {
                _ERR("Invalid argument.");
@@ -146,9 +159,15 @@ static void _menu_focused_cb(int id, void *data, Evas_Object *obj,
        }
        priv = data;
 
-       if (priv->cur_menu_id == id)
+       pre_menu_id = priv->cur_menu_id;
+
+       if (pre_menu_id == id)
                return;
 
+       if (priv->menu[pre_menu_id])
+               elm_object_signal_emit(priv->menu[pre_menu_id],
+                               SIG_UNSELECTED, SRC_MENU_BTN);
+
        priv->cur_menu_id = id;
 
        if (!_load_current_grid(priv, id))
@@ -185,6 +204,26 @@ static void _menu_key_down_cb(int id, void *data, Evas *e, Evas_Object *obj,
        }
 }
 
+static void _grid_mouse_move_cb(int id, void *data, Evas *e, Evas_Object *obj,
+               Evas_Event_Mouse_Move *ev)
+{
+       Elm_Object_Item *it;
+
+       if (!obj || !ev) {
+               _ERR("Invalid argument.");
+               return;
+       }
+
+       it = elm_gengrid_at_xy_item_get(obj, ev->cur.canvas.x,
+                       ev->cur.canvas.y, NULL, NULL);
+
+       if (!it)
+               return;
+
+       if (!elm_object_item_focus_get(it))
+               elm_object_item_focus_set(it, EINA_TRUE);
+}
+
 static void _grid_focused_cb(int id, void *data, Evas_Object *obj,
                Elm_Object_Item *item)
 {
@@ -196,7 +235,8 @@ static void _grid_focused_cb(int id, void *data, Evas_Object *obj,
        }
        priv = data;
 
-       elm_object_signal_emit(priv->menu[priv->cur_menu_id], SIG_SELECTED, "");
+       elm_object_signal_emit(priv->menu[priv->cur_menu_id],
+                       SIG_SELECTED, SRC_MENU_BTN);
 }
 
 static void _grid_item_selected_cb(void *data, Elm_Object_Item *it,
@@ -265,6 +305,7 @@ static void _grid_key_down_cb(int id, void *data, Evas *e, Evas_Object *obj,
 }
 
 static input_handler _menu_input_handler = {
+       .mouse_move = _mouse_move_cb,
        .clicked = _menu_clicked_cb,
        .focused = _menu_focused_cb,
        .key_down = _menu_key_down_cb
@@ -272,6 +313,7 @@ static input_handler _menu_input_handler = {
 };
 
 static input_handler _grid_input_handler = {
+       .mouse_move = _grid_mouse_move_cb,
        .focused = _grid_focused_cb,
        .realized = _grid_realized_cb,
        .unrealized = _grid_unrealized_cb,