hermet pushed a commit to branch master. http://git.enlightenment.org/tools/enventor.git/commit/?id=0cbf3b38be8fcddb41463d24dd67d90d02e3fa3a
commit 0cbf3b38be8fcddb41463d24dd67d90d02e3fa3a Author: ChunEon Park <her...@hermet.pe.kr> Date: Sun Aug 10 18:33:17 2014 +0900 panes: support top/bottom drag for console. --- README | 6 +- data/themes/default/layout_common.edc | 39 +----- src/bin/base_gui.c | 12 ++ src/bin/main.c | 18 ++- src/bin/panes.c | 216 ++++++++++++++++++++++++++-------- src/include/base_gui.h | 2 + src/include/panes.h | 2 + 7 files changed, 203 insertions(+), 92 deletions(-) diff --git a/README b/README index 769f129..79ef040 100644 --- a/README +++ b/README @@ -44,8 +44,10 @@ Ctrl+I = On/Off Auto Indentation Ctrl+O = On/Off Auto Completion Ctrl+W = Show/Hide Dummy Swallow Ctrl+H = On/Off Part Highlighting -Ctrl+, = Full Edit View / Split View -Ctrl+. = Full Edje View / Split View +Ctrl+Left = On/Off Full Edit View +Ctrl+Right = On/Off Full Live View +Ctrl+Top = On/Off Full Console View +Ctrl+Bottom = On/Off Full Editors View Ctrl+T = Insert Defaut Template Code Ctrl+Mouse Wheel Up = View Scale Up / Font Size Up Ctrl+Mouse Wheel Down = View Scale Down / Font Size Down diff --git a/data/themes/default/layout_common.edc b/data/themes/default/layout_common.edc index ad1160a..23b4025 100644 --- a/data/themes/default/layout_common.edc +++ b/data/themes/default/layout_common.edc @@ -2046,13 +2046,7 @@ group { name: "main_layout"; rel1.relative: 0 1; rel2.relative: 1 0; rel1.to_y: "elm.swallow.tools"; - rel2.to_y: "elm.swallow.console"; - } - description { state: "console" 0.0; - rel1.to: "elm.swallow.console"; - rel2.to: "elm.swallow.console"; - rel1.relative: 0 0; - rel2.relative: 1 0; + rel2.to_y: "elm.swallow.statusbar"; } } part { name: "elm.swallow.statusbar"; @@ -2070,25 +2064,6 @@ group { name: "main_layout"; align: 0.5 1; } } - part { name: "elm.swallow.console"; - type: SWALLOW; - scale: 1; - description { state: "default" 0.0; - rel1.to: "elm.swallow.statusbar"; - rel2.to: "elm.swallow.statusbar"; - rel1.relative: 0 0; - rel2.relative: 1 0; - align: 0.5 1; - color: 0 0 0 0; - } - description { state: "visible" 0.0; - inherit: "default" 0.0; - align: 0.5 1; - min: 0 125; - fixed: 0 1; - color: 255 255 255 255; - } - } } programs { program { name: "statusbar_show"; @@ -2115,18 +2090,6 @@ group { name: "main_layout"; target: "elm.swallow.tools"; transition: DECELERATE 0.25; } - program { name: "console_show"; - signal: "elm,state,console,show"; - action: STATE_SET "visible" 0.0; - target: "elm.swallow.console"; - transition: DECELERATE 0.25; - } - program { name: "console_hide"; - signal: "elm,state,console,hide"; - action: STATE_SET "default" 0.0; - target: "elm.swallow.console"; - transition: DECELERATE 0.25; - } } } diff --git a/src/bin/base_gui.c b/src/bin/base_gui.c index 25a1e61..25b8ce0 100644 --- a/src/bin/base_gui.c +++ b/src/bin/base_gui.c @@ -103,6 +103,18 @@ base_full_view_right(void) } void +base_full_view_top(void) +{ + panes_full_view_top(); +} + +void +base_full_view_bottom(void) +{ + panes_full_view_bottom(); +} + +void base_right_view_set(Evas_Object *right) { panes_content_set("right", right); diff --git a/src/bin/main.c b/src/bin/main.c index 23c9e4f..d44195c 100644 --- a/src/bin/main.c +++ b/src/bin/main.c @@ -154,17 +154,29 @@ ctrl_func(app_data *ad, const char *key) return ECORE_CALLBACK_DONE; } //Full Edit View - if (!strcmp(key, "comma")) + if (!strcmp(key, "Left")) { base_full_view_left(); return ECORE_CALLBACK_DONE; } - //Full Edje View - if (!strcmp(key, "period")) + //Full Live View + if (!strcmp(key, "Right")) { base_full_view_right(); return ECORE_CALLBACK_DONE; } + //Full Console View + if (!strcmp(key, "Up")) + { + base_full_view_top(); + return ECORE_CALLBACK_DONE; + } + //Full Editors View + if (!strcmp(key, "Down")) + { + base_full_view_bottom(); + return ECORE_CALLBACK_DONE; + } //Auto Indentation if (!strcmp(key, "i") || !strcmp(key, "I")) { diff --git a/src/bin/panes.c b/src/bin/panes.c index dbb1c47..081a467 100644 --- a/src/bin/panes.c +++ b/src/bin/panes.c @@ -1,43 +1,79 @@ #include <Elementary.h> #include "common.h" +static const double TRANSIT_TIME = 0.25; + typedef enum { PANES_FULL_VIEW_LEFT, PANES_FULL_VIEW_RIGHT, + PANES_FULL_VIEW_TOP, + PANES_FULL_VIEW_BOTTOM, PANES_SPLIT_VIEW } Panes_State; typedef struct _panes_data { - Evas_Object *panes; - Panes_State state; + Evas_Object *panes_h; + Evas_Object *panes_v; + Panes_State state_v; + Panes_State state_h; + + double origin_h; + double origin_v; + + double delta_h; + double delta_v; - double origin; - double delta; - double last_right_size1; //when down the panes bar - double last_right_size2; //when up the panes bar + double last_bottom_size1; //when down the panes bar + double last_bottom_size2; //when up the panes bar + double last_right_size1; //when down the panes bar + double last_right_size2; //when up the panes bar } panes_data; static panes_data *g_pd = NULL; static void -transit_op(void *data, Elm_Transit *transit EINA_UNUSED, double progress) +transit_op_v(void *data, Elm_Transit *transit EINA_UNUSED, double progress) { panes_data *pd = data; - elm_panes_content_right_size_set(pd->panes, - pd->origin + (pd->delta * progress)); + elm_panes_content_right_size_set(pd->panes_v, + pd->origin_v + (pd->delta_v * progress)); +} + +static void +transit_op_h(void *data, Elm_Transit *transit EINA_UNUSED, double progress) +{ + panes_data *pd = data; + elm_panes_content_right_size_set(pd->panes_h, + pd->origin_h + (pd->delta_h * progress)); +} + +static void +v_press_cb(void *data, Evas_Object *obj, void *event_info EINA_UNUSED) +{ + panes_data *pd = data; + pd->last_bottom_size1 = elm_panes_content_right_size_get(obj); +} + +static void +v_unpress_cb(void *data, Evas_Object *obj, void *event_info EINA_UNUSED) +{ + panes_data *pd = data; + double bottom_size = elm_panes_content_right_size_get(obj); + if (pd->last_bottom_size1 != bottom_size) + pd->last_right_size2 = bottom_size; } static void -press_cb(void *data, Evas_Object *obj, void *event_info EINA_UNUSED) +h_press_cb(void *data, Evas_Object *obj, void *event_info EINA_UNUSED) { panes_data *pd = data; pd->last_right_size1 = elm_panes_content_right_size_get(obj); } static void -unpress_cb(void *data, Evas_Object *obj, void *event_info EINA_UNUSED) +h_unpress_cb(void *data, Evas_Object *obj, void *event_info EINA_UNUSED) { panes_data *pd = data; double right_size = elm_panes_content_right_size_get(obj); @@ -46,93 +82,156 @@ unpress_cb(void *data, Evas_Object *obj, void *event_info EINA_UNUSED) } static void -panes_full_view_cancel(panes_data *pd) +panes_h_full_view_cancel(panes_data *pd) { - const double TRANSIT_TIME = 0.25; + pd->origin_h = elm_panes_content_right_size_get(pd->panes_h); + pd->delta_h = pd->last_right_size2 - pd->origin_h; - pd->origin = elm_panes_content_right_size_get(pd->panes); - pd->delta = pd->last_right_size2 - pd->origin; + Elm_Transit *transit = elm_transit_add(); + elm_transit_effect_add(transit, transit_op_h, pd, NULL); + elm_transit_tween_mode_set(transit, ELM_TRANSIT_TWEEN_MODE_DECELERATE); + elm_transit_duration_set(transit, TRANSIT_TIME); + elm_transit_go(transit); + + pd->state_h = PANES_SPLIT_VIEW; +} + +static void +panes_v_full_view_cancel(panes_data *pd) +{ + pd->origin_v = elm_panes_content_right_size_get(pd->panes_v); + pd->delta_v = pd->last_bottom_size2 - pd->origin_v; Elm_Transit *transit = elm_transit_add(); - elm_transit_effect_add(transit, transit_op, pd, NULL); + elm_transit_effect_add(transit, transit_op_v, pd, NULL); elm_transit_tween_mode_set(transit, ELM_TRANSIT_TWEEN_MODE_DECELERATE); elm_transit_duration_set(transit, TRANSIT_TIME); elm_transit_go(transit); - pd->state = PANES_SPLIT_VIEW; + pd->state_v = PANES_SPLIT_VIEW; } void panes_full_view_right(void) { - const double TRANSIT_TIME = 0.25; - panes_data *pd = g_pd; - //Revert state if the current state is full view left already. - if (pd->state == PANES_FULL_VIEW_RIGHT) + //Revert state if the current state is full view right already. + if (pd->state_h == PANES_FULL_VIEW_RIGHT) { - panes_full_view_cancel(pd); + panes_h_full_view_cancel(pd); return; } - double origin = elm_panes_content_right_size_get(pd->panes); - if (origin == 0.0) return; + double origin_h = elm_panes_content_right_size_get(pd->panes_h); + if (origin_h == 0.0) return; - pd->origin = origin; - pd->delta = 0.0 - pd->origin; + pd->origin_h = origin_h; + pd->delta_h = 0.0 - pd->origin_h; Elm_Transit *transit = elm_transit_add(); - elm_transit_effect_add(transit, transit_op, pd, NULL); + elm_transit_effect_add(transit, transit_op_h, pd, NULL); elm_transit_tween_mode_set(transit, ELM_TRANSIT_TWEEN_MODE_DECELERATE); elm_transit_duration_set(transit, TRANSIT_TIME); elm_transit_go(transit); - pd->state = PANES_FULL_VIEW_RIGHT; + pd->state_h = PANES_FULL_VIEW_RIGHT; } void panes_full_view_left(void) { - const double TRANSIT_TIME = 0.25; - panes_data *pd = g_pd; //Revert state if the current state is full view left already. - if (pd->state == PANES_FULL_VIEW_LEFT) + if (pd->state_h == PANES_FULL_VIEW_LEFT) { - panes_full_view_cancel(pd); + panes_h_full_view_cancel(pd); return; } - double origin = elm_panes_content_right_size_get(pd->panes); - if (origin == 1.0) return; + double origin_h = elm_panes_content_right_size_get(pd->panes_h); + if (origin_h == 1.0) return; + + pd->origin_h = origin_h; + pd->delta_h = 1.0 - pd->origin_h; + + Elm_Transit *transit = elm_transit_add(); + elm_transit_effect_add(transit, transit_op_h, pd, NULL); + elm_transit_tween_mode_set(transit, ELM_TRANSIT_TWEEN_MODE_DECELERATE); + elm_transit_duration_set(transit, TRANSIT_TIME); + elm_transit_go(transit); + + pd->state_h = PANES_FULL_VIEW_LEFT; - pd->origin = origin; - pd->delta = 1.0 - pd->origin; +} + +void +panes_full_view_bottom(void) +{ + panes_data *pd = g_pd; + + //Revert state if the current state is full view bottom already. + if (pd->state_v == PANES_FULL_VIEW_BOTTOM) + { + panes_v_full_view_cancel(pd); + return; + } + double origin_v = elm_panes_content_right_size_get(pd->panes_v); + if (origin_v == 0.0) return; + + pd->origin_v = origin_v; + pd->delta_v = 0.0 - pd->origin_v; Elm_Transit *transit = elm_transit_add(); - elm_transit_effect_add(transit, transit_op, pd, NULL); + elm_transit_effect_add(transit, transit_op_v, pd, NULL); elm_transit_tween_mode_set(transit, ELM_TRANSIT_TWEEN_MODE_DECELERATE); elm_transit_duration_set(transit, TRANSIT_TIME); elm_transit_go(transit); - pd->state = PANES_FULL_VIEW_LEFT; + pd->state_v = PANES_FULL_VIEW_BOTTOM; +} + +void +panes_full_view_top(void) +{ + panes_data *pd = g_pd; + + //Revert state if the current state is full view top already. + if (pd->state_v == PANES_FULL_VIEW_TOP) + { + panes_v_full_view_cancel(pd); + return; + } + double origin_v = elm_panes_content_right_size_get(pd->panes_v); + if (origin_v == 1.0) return; + + pd->origin_v = origin_v; + pd->delta_v = 1.0 - pd->origin_v; + + Elm_Transit *transit = elm_transit_add(); + elm_transit_effect_add(transit, transit_op_v, pd, NULL); + elm_transit_tween_mode_set(transit, ELM_TRANSIT_TWEEN_MODE_DECELERATE); + elm_transit_duration_set(transit, TRANSIT_TIME); + elm_transit_go(transit); + + pd->state_v = PANES_FULL_VIEW_TOP; } + void panes_content_set(const char *part, Evas_Object *content) { panes_data *pd = g_pd; - elm_object_part_content_set(pd->panes, part, content); + elm_object_part_content_set(pd->panes_h, part, content); } void panes_term(void) { panes_data *pd = g_pd; - evas_object_del(pd->panes); + evas_object_del(pd->panes_v); free(pd); } @@ -147,16 +246,35 @@ panes_init(Evas_Object *parent) } g_pd = pd; - //Panes - Evas_Object *panes = elm_panes_add(parent); - elm_object_style_set(panes, elm_app_name_get()); - evas_object_size_hint_weight_set(panes, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - evas_object_smart_callback_add(panes, "press", press_cb, pd); - evas_object_smart_callback_add(panes, "unpress", unpress_cb, pd); - pd->panes = panes; - pd->state = PANES_SPLIT_VIEW; + //Panes Vertical + Evas_Object *panes_v = elm_panes_add(parent); + elm_object_style_set(panes_v, "flush"); + elm_panes_horizontal_set(panes_v, EINA_FALSE); + evas_object_size_hint_weight_set(panes_v, EVAS_HINT_EXPAND, + EVAS_HINT_EXPAND); + evas_object_smart_callback_add(panes_v, "press", v_press_cb, pd); + evas_object_smart_callback_add(panes_v, "unpress", v_unpress_cb, pd); + + pd->panes_v = panes_v; + pd->state_v = PANES_SPLIT_VIEW; + pd->last_bottom_size1 = 0.5; + pd->last_bottom_size2 = 0.5; + + //Panes Horizontal + Evas_Object *panes_h = elm_panes_add(parent); + elm_object_style_set(panes_h, elm_app_name_get()); + elm_panes_horizontal_set(panes_v, EINA_TRUE); + evas_object_size_hint_weight_set(panes_h, EVAS_HINT_EXPAND, + EVAS_HINT_EXPAND); + evas_object_smart_callback_add(panes_h, "press", h_press_cb, pd); + evas_object_smart_callback_add(panes_h, "unpress", h_unpress_cb, pd); + + elm_object_part_content_set(panes_v, "top", panes_h); + + pd->panes_h = panes_h; + pd->state_h = PANES_SPLIT_VIEW; pd->last_right_size1 = 0.5; pd->last_right_size2 = 0.5; - return panes; + return panes_v; } diff --git a/src/include/base_gui.h b/src/include/base_gui.h index 09450fa..f1b7502 100644 --- a/src/include/base_gui.h +++ b/src/include/base_gui.h @@ -11,6 +11,8 @@ void base_tools_toggle(Eina_Bool config); void base_tools_set(Evas_Object *tools); void base_full_view_left(void); void base_full_view_right(void); +void base_full_view_top(void); +void base_full_view_bottom(void); void base_console_toggle(Eina_Bool config); void base_left_view_set(Evas_Object *left); void base_right_view_set(Evas_Object *right); diff --git a/src/include/panes.h b/src/include/panes.h index 01af585..1efc7f8 100644 --- a/src/include/panes.h +++ b/src/include/panes.h @@ -2,4 +2,6 @@ Evas_Object *panes_init(Evas_Object *parent); void panes_term(void); void panes_full_view_right(void); void panes_full_view_left(void); +void panes_full_view_top(void); +void panes_full_view_bottom(void); void panes_content_set(const char *part, Evas_Object *content); --