forked from enlightenment/terminology
drag: add animation when dragging tab over other tabs
This commit is contained in:
parent
405abda540
commit
7eba4c97e0
|
@ -22,8 +22,11 @@ Changes since 1.6.0:
|
||||||
"drag_right_outline", "drag_top_outline", "drag_bottom_outline" are used to
|
"drag_right_outline", "drag_top_outline", "drag_bottom_outline" are used to
|
||||||
know when the cursor enters them when dragging a tab into them.
|
know when the cursor enters them when dragging a tab into them.
|
||||||
* In group "terminology/background", signals "drag_left,on", "drag_left,off"
|
* In group "terminology/background", signals "drag_left,on", "drag_left,off"
|
||||||
are received when the mouse enters or leaves "drag_left_outline". Same for
|
are received when the mouse, while dragging a tab, enters or leaves
|
||||||
right, top, bottom.
|
"drag_left_outline". Same for right, top, bottom.
|
||||||
|
* In group "terminology/background", signals "drag_over_tabs,on",
|
||||||
|
"drag_over_tabs,off" are received when the mouse, while dragging a tab,
|
||||||
|
enters the tab region.
|
||||||
|
|
||||||
Changes since 1.5.0:
|
Changes since 1.5.0:
|
||||||
--------------------
|
--------------------
|
||||||
|
|
4
THEME.md
4
THEME.md
|
@ -61,7 +61,7 @@ Here is swallowed an object of group `terminology.background`.
|
||||||
### `tabdrag` and `tabmiddle`
|
### `tabdrag` and `tabmiddle`
|
||||||
Their geometry are used to adjust drag values.
|
Their geometry are used to adjust drag values.
|
||||||
|
|
||||||
### `drag_left_outline`, `drag_right_outline`, `drag_top_outline`, `drag_bottom_outline`
|
### `drag_left_outline`, `drag_right_outline`, `drag_top_outline`, `drag_bottom_outline` and `terminology.tabregion`
|
||||||
Their geometry are used to know when the cursor enters them when dragging a
|
Their geometry are used to know when the cursor enters them when dragging a
|
||||||
tab.
|
tab.
|
||||||
|
|
||||||
|
@ -75,6 +75,8 @@ When to start an animation when the cursor enters `drag_XXXX_outline` while
|
||||||
dragging a tab.
|
dragging a tab.
|
||||||
### `drag_left,off`, `drag_right,off`, `drag_top,off`, `drag_bottom,off`
|
### `drag_left,off`, `drag_right,off`, `drag_top,off`, `drag_bottom,off`
|
||||||
When to stop an animation started by the related `*,on` signals.
|
When to stop an animation started by the related `*,on` signals.
|
||||||
|
### `drag_over_tabs,on` and `drag_over_tabs,off`
|
||||||
|
When the mouse, while dragging a tab, enters or leaves the tab region.
|
||||||
|
|
||||||
### TODO
|
### TODO
|
||||||
|
|
||||||
|
|
|
@ -1368,6 +1368,46 @@ group { name: "terminology/background";
|
||||||
description { state: "hdrag,off" 0.0;
|
description { state: "hdrag,off" 0.0;
|
||||||
inherit: "default" 0.0;
|
inherit: "default" 0.0;
|
||||||
}
|
}
|
||||||
|
description { state: "drag_over" 0.0;
|
||||||
|
inherit: "default" 0.0;
|
||||||
|
rel1.relative: 0.3 0.0;
|
||||||
|
rel2.to_x: "terminology.tabregion";
|
||||||
|
rel2.relative: 0.7 0.0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
program {
|
||||||
|
name: "drag_over_tabs,on";
|
||||||
|
signal: "drag_over_tabs,on"; source: "terminology";
|
||||||
|
action: STATE_SET "drag_over" 0.0;
|
||||||
|
target: "tabdrag";
|
||||||
|
after: "drag_over_tabs,pulse";
|
||||||
|
}
|
||||||
|
program {
|
||||||
|
name: "drag_over_tabs,pulse";
|
||||||
|
action: STATE_SET "default" 0.0;
|
||||||
|
transition: DECELERATE 0.5;
|
||||||
|
target: "tabdrag";
|
||||||
|
after: "drag_over_tabs,pulse2";
|
||||||
|
}
|
||||||
|
program {
|
||||||
|
name: "drag_over_tabs,pulse2";
|
||||||
|
transition: ACCELERATE 0.5;
|
||||||
|
action: STATE_SET "drag_over" 0.0;
|
||||||
|
target: "tabdrag";
|
||||||
|
after: "drag_over_tabs,pulse";
|
||||||
|
}
|
||||||
|
program {
|
||||||
|
signal: "drag_over_tabs,off"; source: "terminology";
|
||||||
|
action: ACTION_STOP;
|
||||||
|
target: "drag_over_tabs,on";
|
||||||
|
target: "drag_over_tabs,pulse";
|
||||||
|
target: "drag_over_tabs,pulse2";
|
||||||
|
after: "drag_over_tabs,off2";
|
||||||
|
}
|
||||||
|
program {
|
||||||
|
name: "drag_over_tabs,off2";
|
||||||
|
action: STATE_SET "default" 0.0;
|
||||||
|
target: "tabdrag";
|
||||||
}
|
}
|
||||||
program {
|
program {
|
||||||
signal: "hdrag,on"; source: "terminology";
|
signal: "hdrag,on"; source: "terminology";
|
||||||
|
@ -1419,7 +1459,7 @@ group { name: "terminology/background";
|
||||||
dragable.confine: "tabdrag";
|
dragable.confine: "tabdrag";
|
||||||
description { state: "default" 0.0;
|
description { state: "default" 0.0;
|
||||||
rel2.relative: 0.0 0.0;
|
rel2.relative: 0.0 0.0;
|
||||||
rel2.to_x: "terminology.tab_btn";
|
rel2.to_x: "tabdrag";
|
||||||
max: 1 1;
|
max: 1 1;
|
||||||
fixed: 1 1;
|
fixed: 1 1;
|
||||||
}
|
}
|
||||||
|
|
|
@ -33,6 +33,7 @@ typedef enum _Split_Direction {
|
||||||
SPLIT_DIRECTION_RIGHT,
|
SPLIT_DIRECTION_RIGHT,
|
||||||
SPLIT_DIRECTION_TOP,
|
SPLIT_DIRECTION_TOP,
|
||||||
SPLIT_DIRECTION_BOTTOM,
|
SPLIT_DIRECTION_BOTTOM,
|
||||||
|
SPLIT_DIRECTION_TABS,
|
||||||
} Split_Direction;
|
} Split_Direction;
|
||||||
|
|
||||||
struct _Term_Container {
|
struct _Term_Container {
|
||||||
|
|
|
@ -3256,6 +3256,10 @@ _tab_drag_disable_anim_over(void)
|
||||||
elm_layout_signal_emit(_tab_drag->term_over->bg,
|
elm_layout_signal_emit(_tab_drag->term_over->bg,
|
||||||
"drag_bottom,off", "terminology");
|
"drag_bottom,off", "terminology");
|
||||||
break;
|
break;
|
||||||
|
case SPLIT_DIRECTION_TABS:
|
||||||
|
elm_layout_signal_emit(_tab_drag->term_over->bg,
|
||||||
|
"drag_over_tabs,off", "terminology");
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -3794,7 +3798,7 @@ _tab_drag_reinsert(Term *term, double mid)
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_tab_reorg(Term *term, Term *to_term, Evas_Coord mx, Evas_Coord my)
|
_tab_reorg(Term *term, Term *to_term, Evas_Coord mx)
|
||||||
{
|
{
|
||||||
Term_Container *tc_orig = term->container;
|
Term_Container *tc_orig = term->container;
|
||||||
Term_Container *to_tc = to_term->container;
|
Term_Container *to_tc = to_term->container;
|
||||||
|
@ -3802,19 +3806,13 @@ _tab_reorg(Term *term, Term *to_term, Evas_Coord mx, Evas_Coord my)
|
||||||
assert(tc_orig->type == TERM_CONTAINER_TYPE_SOLO);
|
assert(tc_orig->type == TERM_CONTAINER_TYPE_SOLO);
|
||||||
assert(to_tc->type == TERM_CONTAINER_TYPE_SOLO);
|
assert(to_tc->type == TERM_CONTAINER_TYPE_SOLO);
|
||||||
|
|
||||||
if (_tab_drag->split_direction == SPLIT_DIRECTION_NONE)
|
if (_tab_drag->split_direction == SPLIT_DIRECTION_TABS)
|
||||||
{
|
{
|
||||||
Evas_Coord x = 0, y = 0, w = 0, h = 0, off_x = 0, off_y = 0;
|
Evas_Coord x = 0, w = 0;
|
||||||
double mid;
|
double mid;
|
||||||
|
|
||||||
/* check whether there is a need to add a tab or fail the drag */
|
edje_object_part_geometry_get(term->bg_edj, "terminology.tabregion",
|
||||||
evas_object_geometry_get(term->bg_edj, &off_x, &off_y, NULL, NULL);
|
|
||||||
edje_object_part_geometry_get(term->bg_edj, "tabdrag",
|
|
||||||
&x, NULL, &w, NULL);
|
&x, NULL, &w, NULL);
|
||||||
edje_object_part_geometry_get(term->bg_edj, "tabmiddle",
|
|
||||||
NULL, &y, NULL, &h);
|
|
||||||
if (!ELM_RECTS_INTERSECT(x,y,w,h, mx,my,1,1))
|
|
||||||
return;
|
|
||||||
|
|
||||||
mid = (double)(mx - x) / (double)w;
|
mid = (double)(mx - x) / (double)w;
|
||||||
|
|
||||||
|
@ -3864,10 +3862,8 @@ _tab_drag_stop(void)
|
||||||
|
|
||||||
/* Reinsert in same set of Tabs or same "tab" (could be a split) */
|
/* Reinsert in same set of Tabs or same "tab" (could be a split) */
|
||||||
evas_object_geometry_get(term->bg_edj, &off_x, &off_y, NULL, NULL);
|
evas_object_geometry_get(term->bg_edj, &off_x, &off_y, NULL, NULL);
|
||||||
edje_object_part_geometry_get(term->bg_edj, "tabdrag",
|
edje_object_part_geometry_get(term->bg_edj, "terminology.tabregion",
|
||||||
&x, NULL, &w, NULL);
|
&x, &y, &w, &h);
|
||||||
edje_object_part_geometry_get(term->bg_edj, "tabmiddle",
|
|
||||||
NULL, &y, NULL, &h);
|
|
||||||
if (!ELM_RECTS_INTERSECT(x,y,w,h, mx,my,1,1))
|
if (!ELM_RECTS_INTERSECT(x,y,w,h, mx,my,1,1))
|
||||||
goto end;
|
goto end;
|
||||||
|
|
||||||
|
@ -3875,10 +3871,10 @@ _tab_drag_stop(void)
|
||||||
_tab_drag_reparented();
|
_tab_drag_reparented();
|
||||||
_tab_drag_reinsert(term, mid);
|
_tab_drag_reinsert(term, mid);
|
||||||
}
|
}
|
||||||
else
|
else if (_tab_drag->split_direction != SPLIT_DIRECTION_NONE)
|
||||||
{
|
{
|
||||||
/* Move to different set of Tabs */
|
/* Move to different set of Tabs */
|
||||||
_tab_reorg(term, term_at_coords, mx, my);
|
_tab_reorg(term, term_at_coords, mx);
|
||||||
}
|
}
|
||||||
|
|
||||||
end:
|
end:
|
||||||
|
@ -3946,6 +3942,15 @@ _tabs_drag_mouse_move(
|
||||||
if (!term_at_coords)
|
if (!term_at_coords)
|
||||||
return;
|
return;
|
||||||
evas_object_geometry_get(term_at_coords->bg_edj, &off_x, &off_y, NULL, NULL);
|
evas_object_geometry_get(term_at_coords->bg_edj, &off_x, &off_y, NULL, NULL);
|
||||||
|
|
||||||
|
edje_object_part_geometry_get(term_at_coords->bg_edj, "terminology.tabregion",
|
||||||
|
&x, &y, &w, &h);
|
||||||
|
if (ELM_RECTS_INTERSECT(x+off_x, y+off_y, w, h, mx, my, 1, 1))
|
||||||
|
{
|
||||||
|
split_direction = SPLIT_DIRECTION_TABS;
|
||||||
|
goto found;
|
||||||
|
}
|
||||||
|
|
||||||
edje_object_part_geometry_get(term_at_coords->bg_edj, "drag_left_outline",
|
edje_object_part_geometry_get(term_at_coords->bg_edj, "drag_left_outline",
|
||||||
&x, &y, &w, &h);
|
&x, &y, &w, &h);
|
||||||
if (ELM_RECTS_INTERSECT(x+off_x, y+off_y, w, h, mx, my, 1, 1))
|
if (ELM_RECTS_INTERSECT(x+off_x, y+off_y, w, h, mx, my, 1, 1))
|
||||||
|
@ -3953,6 +3958,7 @@ _tabs_drag_mouse_move(
|
||||||
split_direction = SPLIT_DIRECTION_LEFT;
|
split_direction = SPLIT_DIRECTION_LEFT;
|
||||||
goto found;
|
goto found;
|
||||||
}
|
}
|
||||||
|
|
||||||
edje_object_part_geometry_get(term_at_coords->bg_edj, "drag_right_outline",
|
edje_object_part_geometry_get(term_at_coords->bg_edj, "drag_right_outline",
|
||||||
&x, &y, &w, &h);
|
&x, &y, &w, &h);
|
||||||
if (ELM_RECTS_INTERSECT(x+off_x, y+off_y, w, h, mx, my, 1, 1))
|
if (ELM_RECTS_INTERSECT(x+off_x, y+off_y, w, h, mx, my, 1, 1))
|
||||||
|
@ -3960,6 +3966,7 @@ _tabs_drag_mouse_move(
|
||||||
split_direction = SPLIT_DIRECTION_RIGHT;
|
split_direction = SPLIT_DIRECTION_RIGHT;
|
||||||
goto found;
|
goto found;
|
||||||
}
|
}
|
||||||
|
|
||||||
edje_object_part_geometry_get(term_at_coords->bg_edj, "drag_top_outline",
|
edje_object_part_geometry_get(term_at_coords->bg_edj, "drag_top_outline",
|
||||||
&x, &y, &w, &h);
|
&x, &y, &w, &h);
|
||||||
if (ELM_RECTS_INTERSECT(x+off_x, y+off_y, w, h, mx, my, 1, 1))
|
if (ELM_RECTS_INTERSECT(x+off_x, y+off_y, w, h, mx, my, 1, 1))
|
||||||
|
@ -3967,6 +3974,7 @@ _tabs_drag_mouse_move(
|
||||||
split_direction = SPLIT_DIRECTION_TOP;
|
split_direction = SPLIT_DIRECTION_TOP;
|
||||||
goto found;
|
goto found;
|
||||||
}
|
}
|
||||||
|
|
||||||
edje_object_part_geometry_get(term_at_coords->bg_edj, "drag_bottom_outline",
|
edje_object_part_geometry_get(term_at_coords->bg_edj, "drag_bottom_outline",
|
||||||
&x, &y, &w, &h);
|
&x, &y, &w, &h);
|
||||||
if (ELM_RECTS_INTERSECT(x+off_x, y+off_y, w, h, mx, my, 1, 1))
|
if (ELM_RECTS_INTERSECT(x+off_x, y+off_y, w, h, mx, my, 1, 1))
|
||||||
|
@ -3974,7 +3982,8 @@ _tabs_drag_mouse_move(
|
||||||
split_direction = SPLIT_DIRECTION_BOTTOM;
|
split_direction = SPLIT_DIRECTION_BOTTOM;
|
||||||
goto found;
|
goto found;
|
||||||
}
|
}
|
||||||
found:
|
|
||||||
|
found:
|
||||||
if ((_tab_drag->term_over != NULL) &&
|
if ((_tab_drag->term_over != NULL) &&
|
||||||
((_tab_drag->term_over != term_at_coords) ||
|
((_tab_drag->term_over != term_at_coords) ||
|
||||||
(_tab_drag->split_direction != split_direction)))
|
(_tab_drag->split_direction != split_direction)))
|
||||||
|
@ -4003,6 +4012,9 @@ _tabs_drag_mouse_move(
|
||||||
elm_layout_signal_emit(term_at_coords->bg,
|
elm_layout_signal_emit(term_at_coords->bg,
|
||||||
"drag_bottom,on", "terminology");
|
"drag_bottom,on", "terminology");
|
||||||
break;
|
break;
|
||||||
|
case SPLIT_DIRECTION_TABS:
|
||||||
|
elm_layout_signal_emit(term_at_coords->bg,
|
||||||
|
"drag_over_tabs,on", "terminology");
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue