e-modules/engage: simplify zoom function
SVN revision: 62475
This commit is contained in:
parent
a414887a23
commit
25980ca1d6
132
src/e_mod_main.c
132
src/e_mod_main.c
|
@ -24,12 +24,12 @@ static void _ngi_zoom_in(Ng *ng);
|
||||||
static void _ngi_zoom_out(Ng *ng);
|
static void _ngi_zoom_out(Ng *ng);
|
||||||
static void _ngi_item_appear(Ng *ng, Ngi_Item *it);
|
static void _ngi_item_appear(Ng *ng, Ngi_Item *it);
|
||||||
static void _ngi_item_disappear(Ng *ng, Ngi_Item *it);
|
static void _ngi_item_disappear(Ng *ng, Ngi_Item *it);
|
||||||
static void _ngi_zoom_function(Ng *ng, double d, double *disp);
|
static double _ngi_zoom_function(Ng *ng, double to, double pos);
|
||||||
static Eina_Bool _ngi_animator(void *data);
|
static Eina_Bool _ngi_animator(void *data);
|
||||||
static void _ngi_redraw(Ng *ng);
|
static void _ngi_redraw(Ng *ng);
|
||||||
static int _ngi_autohide(Ng *ng, int hide);
|
static int _ngi_autohide(Ng *ng, int hide);
|
||||||
static Eina_Bool _ngi_win_border_intersects(Ng *ng);
|
static Eina_Bool _ngi_win_border_intersects(Ng *ng);
|
||||||
|
static void _ngi_label_pos_set(Ng *ng);
|
||||||
|
|
||||||
static int initialized = 0;
|
static int initialized = 0;
|
||||||
|
|
||||||
|
@ -843,19 +843,7 @@ ngi_item_activate(Ng *ng)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (ng->cfg->orient)
|
_ngi_label_pos_set(ng);
|
||||||
{
|
|
||||||
case E_GADCON_ORIENT_BOTTOM:
|
|
||||||
evas_object_move(ng->o_label, ng->item_active->pos + ng->size/2,
|
|
||||||
(ng->win->popup->h + ng->hide_step) -
|
|
||||||
((double)ng->size * ng->zoom + TEXT_DIST));
|
|
||||||
break;
|
|
||||||
|
|
||||||
case E_GADCON_ORIENT_TOP:
|
|
||||||
evas_object_move(ng->o_label, ng->item_active->pos + ng->size/2,
|
|
||||||
((double)ng->size * ng->zoom + TEXT_DIST) - ng->hide_step);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
evas_object_show(ng->o_label);
|
evas_object_show(ng->o_label);
|
||||||
edje_object_signal_emit(ng->o_label, "e,state,label,show", "e");
|
edje_object_signal_emit(ng->o_label, "e,state,label,show", "e");
|
||||||
|
@ -1146,14 +1134,14 @@ void
|
||||||
ngi_reposition(Ng *ng)
|
ngi_reposition(Ng *ng)
|
||||||
{
|
{
|
||||||
Ngi_Box *box;
|
Ngi_Box *box;
|
||||||
double pos, distance, range, disp;
|
double pos;
|
||||||
Eina_List *l, *ll;
|
Eina_List *l, *ll;
|
||||||
Ngi_Item *it;
|
Ngi_Item *it;
|
||||||
int size = ng->size;
|
int size = ng->size;
|
||||||
int cnt = 0, end;
|
int cnt = 0, end;
|
||||||
int width = ng->horizontal ? ng->win->popup->w : ng->win->popup->h;
|
int width = ng->horizontal ? ng->win->popup->w : ng->win->popup->h;
|
||||||
|
|
||||||
while (1)
|
for (;;)
|
||||||
{
|
{
|
||||||
ng->w = 0;
|
ng->w = 0;
|
||||||
|
|
||||||
|
@ -1174,15 +1162,11 @@ ngi_reposition(Ng *ng)
|
||||||
|
|
||||||
ng->start = (width - ng->w) / 2;
|
ng->start = (width - ng->w) / 2;
|
||||||
|
|
||||||
distance = ng->start - SIDE_OFFSET - width/2;
|
/* distance = ng->start - SIDE_OFFSET - width/2; */
|
||||||
|
|
||||||
range = ng->cfg->zoom_range * ng->size;
|
end = _ngi_zoom_function(ng, width/2, ng->start - SIDE_OFFSET);
|
||||||
|
|
||||||
disp = erf(distance / range) * range * (ng->cfg->zoomfactor - 1.0);
|
if ((end > 0) || (size <= 16))
|
||||||
|
|
||||||
end = ng->start - SIDE_OFFSET + disp;
|
|
||||||
|
|
||||||
if ((end > 0) || (size <= 0))
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
/* shrink bar when it becomes larger than screen height/width */
|
/* shrink bar when it becomes larger than screen height/width */
|
||||||
|
@ -1258,12 +1242,58 @@ ngi_reposition(Ng *ng)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void
|
static double
|
||||||
_ngi_zoom_function(Ng *ng, double d, double *disp)
|
_ngi_zoom_function(Ng *ng, double to, double pos)
|
||||||
{
|
{
|
||||||
float range = ng->cfg->zoom_range * ng->size;
|
double range = ng->cfg->zoom_range * ng->size/2.0;
|
||||||
|
double d = pos - to;
|
||||||
|
|
||||||
*disp = erf(d / range) * range * (ng->zoom - 1.0);
|
if (ng->zoom <= 1.0)
|
||||||
|
{
|
||||||
|
return pos;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((d > 0) && (d >= range))
|
||||||
|
{
|
||||||
|
return pos + range * (ng->zoom - 1.0);
|
||||||
|
}
|
||||||
|
else if (d <= -range)
|
||||||
|
{
|
||||||
|
return pos + -range * (ng->zoom - 1.0);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* erf(distance / range) * range * (ng->cfg->zoomfactor - 1.0); */
|
||||||
|
|
||||||
|
return pos + sin(M_PI/2.0 * d/range) * range * (ng->zoom - 1.0);
|
||||||
|
}
|
||||||
|
|
||||||
|
return pos;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
_ngi_label_pos_set(Ng *ng)
|
||||||
|
{
|
||||||
|
int off, h;
|
||||||
|
|
||||||
|
if (!ng->item_active)
|
||||||
|
return;
|
||||||
|
|
||||||
|
off = (ng->size * ng->zoom) + ng->opt.edge_offset + TEXT_DIST;
|
||||||
|
h = ng->win->popup->h;
|
||||||
|
|
||||||
|
switch (ng->cfg->orient)
|
||||||
|
{
|
||||||
|
case E_GADCON_ORIENT_BOTTOM:
|
||||||
|
evas_object_move(ng->o_label, ng->item_active->pos + ng->size/2,
|
||||||
|
(h + ng->hide_step) - off);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case E_GADCON_ORIENT_TOP:
|
||||||
|
evas_object_move(ng->o_label, ng->item_active->pos + ng->size/2,
|
||||||
|
(off - ng->hide_step));
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -1283,7 +1313,7 @@ _ngi_redraw(Ng *ng)
|
||||||
int separator_width = ng->opt.separator_width;
|
int separator_width = ng->opt.separator_width;
|
||||||
|
|
||||||
int cnt = 0;
|
int cnt = 0;
|
||||||
double disp = 0.0;
|
/* double disp = 0.0; */
|
||||||
|
|
||||||
int w = ng->win->popup->w;
|
int w = ng->win->popup->w;
|
||||||
int h = ng->win->popup->h;
|
int h = ng->win->popup->h;
|
||||||
|
@ -1295,13 +1325,12 @@ _ngi_redraw(Ng *ng)
|
||||||
|
|
||||||
size_spacing = ng->size + edge_offset;
|
size_spacing = ng->size + edge_offset;
|
||||||
|
|
||||||
|
_ngi_label_pos_set(ng);
|
||||||
|
|
||||||
if (cfg->show_background)
|
if (cfg->show_background)
|
||||||
{
|
{
|
||||||
_ngi_zoom_function(ng, ng->start - ng->pos, &disp);
|
end1 = _ngi_zoom_function(ng, ng->pos, ng->start);
|
||||||
end1 = ng->start + disp;
|
end2 = _ngi_zoom_function(ng, ng->pos, ng->start + ng->w);
|
||||||
|
|
||||||
_ngi_zoom_function(ng, ng->start + ng->w - ng->pos, &disp);
|
|
||||||
end2 = ng->start + ng->w + disp;
|
|
||||||
|
|
||||||
switch (cfg->orient)
|
switch (cfg->orient)
|
||||||
{
|
{
|
||||||
|
@ -1339,28 +1368,11 @@ _ngi_redraw(Ng *ng)
|
||||||
evas_object_resize(ng->o_frame, bw, bh);
|
evas_object_resize(ng->o_frame, bw, bh);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ng->item_active /* && ng->state != unzoomed */)
|
|
||||||
{
|
|
||||||
switch (cfg->orient)
|
|
||||||
{
|
|
||||||
case E_GADCON_ORIENT_BOTTOM:
|
|
||||||
evas_object_move(ng->o_label, ng->item_active->pos + ng->size/2,
|
|
||||||
(h + hide_step) - ((double)ng->size * ng->zoom + TEXT_DIST));
|
|
||||||
break;
|
|
||||||
|
|
||||||
case E_GADCON_ORIENT_TOP:
|
|
||||||
evas_object_move(ng->o_label, ng->item_active->pos + ng->size/2,
|
|
||||||
((double)ng->size * ng->zoom + TEXT_DIST) - hide_step);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
EINA_LIST_FOREACH (ng->boxes, ll, box)
|
EINA_LIST_FOREACH (ng->boxes, ll, box)
|
||||||
{
|
{
|
||||||
if (cnt++ > 0)
|
if (cnt++ > 0)
|
||||||
{
|
{
|
||||||
_ngi_zoom_function(ng, box->pos - ng->pos, &disp);
|
pos = _ngi_zoom_function(ng, box->pos - ng->pos, box->pos);
|
||||||
pos = (box->pos + disp);
|
|
||||||
|
|
||||||
switch (cfg->orient)
|
switch (cfg->orient)
|
||||||
{
|
{
|
||||||
|
@ -1388,7 +1400,7 @@ _ngi_redraw(Ng *ng)
|
||||||
else
|
else
|
||||||
evas_object_hide(box->separator);
|
evas_object_hide(box->separator);
|
||||||
|
|
||||||
pos = 0;
|
pos2 = 0;
|
||||||
|
|
||||||
EINA_LIST_FOREACH (box->items, l, it)
|
EINA_LIST_FOREACH (box->items, l, it)
|
||||||
{
|
{
|
||||||
|
@ -1398,18 +1410,12 @@ _ngi_redraw(Ng *ng)
|
||||||
if (it->scale == 0.0)
|
if (it->scale == 0.0)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (pos == 0)
|
if (pos2 == 0)
|
||||||
{
|
pos = _ngi_zoom_function(ng, ng->pos, it->pos);
|
||||||
_ngi_zoom_function(ng, it->pos - ng->pos, &pos);
|
|
||||||
pos = (double)it->pos + pos;
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
pos = pos2 + (double)ng->opt.item_spacing;
|
||||||
pos = pos2 + (double)ng->opt.item_spacing;
|
|
||||||
}
|
|
||||||
|
|
||||||
_ngi_zoom_function(ng, it->pos + (ng->size * it->scale) - ng->pos, &pos2);
|
pos2 = _ngi_zoom_function(ng, ng->pos, it->pos + (ng->size * it->scale));
|
||||||
pos2 = (double)it->pos + ((double)ng->size * it->scale) + pos2;
|
|
||||||
|
|
||||||
size = (int)pos2 - (int)pos;
|
size = (int)pos2 - (int)pos;
|
||||||
|
|
||||||
|
|
|
@ -140,7 +140,7 @@ struct _Ng
|
||||||
unsigned char changed : 1;
|
unsigned char changed : 1;
|
||||||
|
|
||||||
int pos; /* mouse position */
|
int pos; /* mouse position */
|
||||||
int size; /* current icon size */
|
double size; /* current icon size */
|
||||||
|
|
||||||
enum { unzoomed, zooming, zoomed, unzooming } state;
|
enum { unzoomed, zooming, zoomed, unzooming } state;
|
||||||
enum { hidden, hiding, showing, show } hide_state;
|
enum { hidden, hiding, showing, show } hide_state;
|
||||||
|
|
Loading…
Reference in New Issue