e-modules/engage: added 'autohide when window overlaps' mode
SVN revision: 58367
This commit is contained in:
parent
76212fd783
commit
4cd476b00d
157
src/e_mod_main.c
157
src/e_mod_main.c
|
@ -29,7 +29,8 @@ static void _ngi_zoom_function(Ng *ng, double d, double *disp);
|
|||
static Eina_Bool _ngi_animator(void *data);
|
||||
static void _ngi_redraw(Ng *ng);
|
||||
static int _ngi_autohide(Ng *ng, int hide);
|
||||
/* static int _ngi_check_fullscreen(E_Desk *desk); */
|
||||
static Eina_Bool _ngi_win_border_intersects(Ng *ng);
|
||||
|
||||
|
||||
static int initialized = 0;
|
||||
|
||||
|
@ -110,7 +111,7 @@ ngi_new(Config_Item *cfg)
|
|||
|
||||
ng->state = unzoomed;
|
||||
ng->hide_state = show;
|
||||
|
||||
ng->hide = EINA_TRUE;
|
||||
|
||||
ng->clip = evas_object_rectangle_add(ng->evas);
|
||||
evas_object_color_set(ng->clip, 255, 255, 255, 0);
|
||||
|
@ -244,12 +245,20 @@ ngi_new(Config_Item *cfg)
|
|||
ng->handlers = eina_list_append
|
||||
(ng->handlers, ecore_event_handler_add
|
||||
(E_EVENT_BORDER_PROPERTY, _ngi_win_cb_border_event, ng));
|
||||
ng->handlers = eina_list_append
|
||||
(ng->handlers, ecore_event_handler_add
|
||||
(E_EVENT_BORDER_MOVE, _ngi_win_cb_border_event, ng));
|
||||
ng->handlers = eina_list_append
|
||||
(ng->handlers, ecore_event_handler_add
|
||||
(E_EVENT_BORDER_RESIZE, _ngi_win_cb_border_event, ng));
|
||||
|
||||
if (ng->cfg->autohide == AUTOHIDE_FULLSCREEN)
|
||||
{
|
||||
int fullscreen = e_desk_current_get(ng->zone)->fullscreen_borders;
|
||||
|
||||
ng->hide_fullscreen = fullscreen;
|
||||
ng->hide = e_desk_current_get(ng->zone)->fullscreen_borders;
|
||||
}
|
||||
else if (ng->cfg->autohide == AUTOHIDE_OVERLAP)
|
||||
{
|
||||
ng->hide = _ngi_win_border_intersects(ng);
|
||||
}
|
||||
else if (ng->cfg->stacking == below_fullscreen)
|
||||
{
|
||||
|
@ -261,8 +270,9 @@ ngi_new(Config_Item *cfg)
|
|||
e_popup_show(ng->win->popup);
|
||||
}
|
||||
|
||||
if ((ng->cfg->autohide == AUTOHIDE_NORMAL) || ng->hide_fullscreen)
|
||||
if (ng->cfg->autohide && ng->hide)
|
||||
{
|
||||
ng->hide = EINA_TRUE;
|
||||
ng->hide_step = ng->size + ng->opt.edge_offset + ng->opt.bg_offset;
|
||||
ng->hide_state = hidden;
|
||||
}
|
||||
|
@ -1085,8 +1095,7 @@ _ngi_zoom_out(Ng *ng)
|
|||
ng->zoom = 1.0;
|
||||
ng->state = unzoomed;
|
||||
|
||||
if (!(ng->cfg->autohide == AUTOHIDE_NORMAL) &&
|
||||
!(ng->cfg->autohide == AUTOHIDE_FULLSCREEN && !ng->hide_fullscreen))
|
||||
if (!ng->hide)
|
||||
ngi_input_extents_calc(ng);
|
||||
|
||||
if (ng->item_active)
|
||||
|
@ -1153,6 +1162,7 @@ _ngi_autohide(Ng *ng, int hide)
|
|||
ng->hide_step = 0;
|
||||
|
||||
_ngi_proxy_geometry_calc(ng);
|
||||
ngi_input_extents_calc(ng);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
@ -1210,8 +1220,7 @@ _ngi_animator(void *data)
|
|||
|
||||
if (ng->cfg->autohide)
|
||||
{
|
||||
if ((ng->mouse_in || ng->show_bar || ng->menu_wait_timer) ||
|
||||
(ng->cfg->autohide == AUTOHIDE_FULLSCREEN && (!ng->hide_fullscreen)))
|
||||
if (ng->mouse_in || ng->show_bar || ng->menu_wait_timer || (!ng->hide))
|
||||
{
|
||||
if (ng->hide_state != show)
|
||||
{
|
||||
|
@ -1219,7 +1228,7 @@ _ngi_animator(void *data)
|
|||
cont = 1;
|
||||
}
|
||||
}
|
||||
else if ((ng->cfg->autohide == AUTOHIDE_NORMAL) || (ng->hide_fullscreen))
|
||||
else
|
||||
{
|
||||
if ((ng->hide_state != hidden) &&
|
||||
((ng->zoom - 1.0) <= (ng->cfg->zoomfactor - 1.0) / 2.0))
|
||||
|
@ -1274,7 +1283,7 @@ ngi_reposition(Ng *ng)
|
|||
|
||||
range = ng->cfg->zoom_range * ng->size;
|
||||
|
||||
disp = erf(distance / range) * range * (ng->cfg->zoomfactor - 1.0) + 0.6;
|
||||
disp = erf(distance / range) * range * (ng->cfg->zoomfactor - 1.0);
|
||||
|
||||
end = ng->start - SIDE_OFFSET + disp;
|
||||
|
||||
|
@ -1360,7 +1369,7 @@ _ngi_zoom_function(Ng *ng, double d, double *disp)
|
|||
{
|
||||
float range = ng->cfg->zoom_range * ng->size;
|
||||
|
||||
*disp = erf(d / range) * range * (ng->zoom - 1.0) + 0.6;
|
||||
*disp = erf(d / range) * range * (ng->zoom - 1.0);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -1510,7 +1519,15 @@ _ngi_redraw(Ng *ng)
|
|||
|
||||
_ngi_zoom_function(ng, it->pos + (ng->size * it->scale) - ng->pos, &pos2);
|
||||
pos2 = (double)it->pos + ((double)ng->size * it->scale) + pos2;
|
||||
size = (int)pos2 - (int)pos;
|
||||
|
||||
if (pos2 > ng->pos)
|
||||
{
|
||||
/* pos2 += 0.5; */
|
||||
size = (int)(pos2 - (pos - 0.5));
|
||||
pos += 0.5;
|
||||
}
|
||||
else
|
||||
size = (int)(pos2 - pos);
|
||||
|
||||
switch (cfg->orient)
|
||||
{
|
||||
|
@ -1578,23 +1595,65 @@ ngi_thaw(Ng *ng)
|
|||
ngi_animate(ng);
|
||||
}
|
||||
|
||||
/* static int
|
||||
* _ngi_check_fullscreen(E_Desk *desk)
|
||||
* {
|
||||
* Eina_List *l;
|
||||
* E_Border *bd;
|
||||
*
|
||||
* EINA_LIST_FOREACH(e_border_client_list(), l, bd)
|
||||
* {
|
||||
* if (bd->desk != desk)
|
||||
* continue;
|
||||
*
|
||||
* if (bd->fullscreen)
|
||||
* return 1;
|
||||
* }
|
||||
*
|
||||
* return 0;
|
||||
* } */
|
||||
static Eina_Bool
|
||||
_ngi_win_border_intersects(Ng *ng)
|
||||
{
|
||||
Eina_List *l;
|
||||
E_Border *bd;
|
||||
E_Desk *desk;
|
||||
int x, y, w, h, size;
|
||||
|
||||
desk = e_desk_current_get(ng->zone);
|
||||
size = ng->size + ng->opt.bg_offset + ng->opt.edge_offset;
|
||||
|
||||
switch (ng->cfg->orient)
|
||||
{
|
||||
case E_GADCON_ORIENT_BOTTOM:
|
||||
x = ng->start;
|
||||
y = ng->win->popup->h - size;
|
||||
w = ng->w;
|
||||
h = size;
|
||||
break;
|
||||
|
||||
case E_GADCON_ORIENT_TOP:
|
||||
x = ng->start;
|
||||
y = 0;
|
||||
w = ng->w;
|
||||
h = size;
|
||||
break;
|
||||
|
||||
case E_GADCON_ORIENT_LEFT:
|
||||
x = 0;
|
||||
y = ng->start;
|
||||
w = size;
|
||||
h = ng->w;
|
||||
break;
|
||||
|
||||
case E_GADCON_ORIENT_RIGHT:
|
||||
x = ng->win->popup->w - size;
|
||||
y = ng->start;
|
||||
w = size;
|
||||
h = ng->w;
|
||||
break;
|
||||
}
|
||||
|
||||
x += ng->zone->x + ng->win->popup->x;
|
||||
y += ng->zone->y + ng->win->popup->y;
|
||||
|
||||
EINA_LIST_FOREACH(e_border_client_list(), l, bd)
|
||||
{
|
||||
if (bd->zone != ng->zone)
|
||||
continue;
|
||||
|
||||
if ((bd->desk != desk) && (!bd->sticky))
|
||||
continue;
|
||||
|
||||
if (E_INTERSECTS(x, y, w, h, bd->x, bd->y, bd->w, bd->h))
|
||||
return EINA_TRUE;
|
||||
}
|
||||
|
||||
return EINA_FALSE;
|
||||
}
|
||||
|
||||
static Eina_Bool
|
||||
_ngi_win_cb_desk_show(void *data, int type, void *event)
|
||||
|
@ -1616,10 +1675,10 @@ _ngi_win_cb_desk_show(void *data, int type, void *event)
|
|||
{
|
||||
fullscreen = ev->desk->fullscreen_borders;
|
||||
|
||||
if (ng->hide_fullscreen != fullscreen)
|
||||
if (ng->hide != fullscreen)
|
||||
ngi_animate(ng);
|
||||
|
||||
ng->hide_fullscreen = fullscreen;
|
||||
ng->hide = fullscreen;
|
||||
}
|
||||
return EINA_TRUE;
|
||||
}
|
||||
|
@ -1630,35 +1689,41 @@ _ngi_win_cb_border_event(void *data, int type, void *event)
|
|||
E_Event_Border_Property *ev = event;
|
||||
Ng *ng = data;
|
||||
E_Desk *desk;
|
||||
int fullscreen;
|
||||
int hide;
|
||||
|
||||
if (ng->cfg->stacking == below_fullscreen)
|
||||
{
|
||||
desk = e_desk_current_get(ng->zone);
|
||||
|
||||
if (ev->border->desk != desk)
|
||||
return EINA_TRUE;
|
||||
hide = desk->fullscreen_borders;
|
||||
|
||||
fullscreen = desk->fullscreen_borders;
|
||||
|
||||
if (fullscreen)
|
||||
if (hide)
|
||||
e_popup_hide(ng->win->popup);
|
||||
else
|
||||
e_popup_show(ng->win->popup);
|
||||
}
|
||||
else if (ng->cfg->autohide == AUTOHIDE_FULLSCREEN)
|
||||
|
||||
if (ng->cfg->autohide == AUTOHIDE_FULLSCREEN)
|
||||
{
|
||||
desk = e_desk_current_get(ng->zone);
|
||||
|
||||
if (ev->border->desk != desk)
|
||||
return EINA_TRUE;
|
||||
hide = desk->fullscreen_borders;
|
||||
|
||||
fullscreen = desk->fullscreen_borders;
|
||||
|
||||
if (ng->hide_fullscreen != fullscreen)
|
||||
if (ng->hide != hide)
|
||||
ngi_animate(ng);
|
||||
|
||||
ng->hide_fullscreen = fullscreen;
|
||||
ng->hide = hide;
|
||||
}
|
||||
else if (ng->cfg->autohide == AUTOHIDE_OVERLAP)
|
||||
{
|
||||
desk = e_desk_current_get(ng->zone);
|
||||
|
||||
hide = _ngi_win_border_intersects(ng);
|
||||
|
||||
if (ng->hide != hide)
|
||||
ngi_animate(ng);
|
||||
|
||||
ng->hide = hide;
|
||||
}
|
||||
|
||||
return EINA_TRUE;
|
||||
|
|
|
@ -14,22 +14,7 @@
|
|||
#define AUTOHIDE_NONE 0
|
||||
#define AUTOHIDE_NORMAL 1
|
||||
#define AUTOHIDE_FULLSCREEN 2
|
||||
|
||||
/* #define ITEM_MOUSE_DOWN(_item, _ev) \
|
||||
* if(_item && _item->cb_mouse_down) \
|
||||
* _item->cb_mouse_down(_item, _ev); \
|
||||
*
|
||||
* #define ITEM_MOUSE_UP(_item, _ev) \
|
||||
* if(_item && _item->cb_mouse_up) \
|
||||
* _item->cb_mouse_up(_item, _ev); \
|
||||
*
|
||||
* #define ITEM_MOUSE_OUT(_item) \
|
||||
* if(_item && _item->cb_mouse_out) \
|
||||
* _item->cb_mouse_out(_item); \
|
||||
*
|
||||
* #define ITEM_MOUSE_IN(_item) \
|
||||
* if(_item && _item->cb_mouse_in) \
|
||||
* _item->cb_mouse_in(_item); \ */
|
||||
#define AUTOHIDE_OVERLAP 3
|
||||
|
||||
#define ITEM_MOUSE_WHEEL(_item, ev) \
|
||||
if(_item && _item->cb_mouse_wheel) \
|
||||
|
@ -173,7 +158,7 @@ struct _Ng
|
|||
|
||||
enum { unzoomed, zooming, zoomed, unzooming } state;
|
||||
enum { hidden, hiding, showing, show } hide_state;
|
||||
int hide_fullscreen;
|
||||
int hide;
|
||||
|
||||
double zoom;
|
||||
double start_zoom;
|
||||
|
|
|
@ -292,7 +292,10 @@ _basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cf
|
|||
ob = e_widget_radio_add(evas, "Autohide",
|
||||
AUTOHIDE_NORMAL, rg);
|
||||
e_widget_framelist_object_append(of, ob);
|
||||
ob = e_widget_radio_add(evas, "Autohide on Fullscreen",
|
||||
ob = e_widget_radio_add(evas, "Hide when Window overlaps",
|
||||
AUTOHIDE_OVERLAP, rg);
|
||||
e_widget_framelist_object_append(of, ob);
|
||||
ob = e_widget_radio_add(evas, "Hide on Fullscreen",
|
||||
AUTOHIDE_FULLSCREEN, rg);
|
||||
e_widget_framelist_object_append(of, ob);
|
||||
|
||||
|
|
Loading…
Reference in New Issue