panes: support top/bottom drag for console.
This commit is contained in:
parent
858c2f3001
commit
0cbf3b38be
6
README
6
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
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -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"))
|
||||
{
|
||||
|
|
218
src/bin/panes.c
218
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;
|
||||
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;
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue