panes: support top/bottom drag for console.

This commit is contained in:
ChunEon Park 2014-08-10 18:33:17 +09:00
parent 858c2f3001
commit 0cbf3b38be
7 changed files with 204 additions and 93 deletions

6
README
View File

@ -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

View File

@ -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;
}
}
}

View File

@ -102,6 +102,18 @@ base_full_view_right(void)
panes_full_view_right();
}
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)
{

View File

@ -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"))
{

View File

@ -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;
double delta;
double last_right_size1; //when down the panes bar
double last_right_size2; //when up the panes bar
double origin_h;
double origin_v;
double delta_h;
double delta_v;
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
press_cb(void *data, Evas_Object *obj, void *event_info EINA_UNUSED)
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
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 = elm_panes_content_right_size_get(pd->panes);
pd->delta = pd->last_right_size2 - pd->origin;
pd->origin_h = elm_panes_content_right_size_get(pd->panes_h);
pd->delta_h = pd->last_right_size2 - 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_SPLIT_VIEW;
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_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_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 = origin;
pd->delta = 1.0 - pd->origin;
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, 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_LEFT;
pd->state_h = PANES_FULL_VIEW_LEFT;
}
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_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_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;
}

View File

@ -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);

View File

@ -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);