void cb_mouse_out(Ewl_Widget *w, void *ev, void *data) { Folder_Widget *fw = FOLDER_WIDGET(w); fw->inside = 0; if(!fw->timer) ecore_timer_add(0.05,folder_zoom,w); } void cb_mouse_in(Ewl_Widget *w, void *ev, void *data) { Folder_Widget *fw = FOLDER_WIDGET(w); fw->start_time = -1; fw->dir = 1; fw->inside = 1; if(!fw->timer) fw->timer = ecore_timer_add(0.05,folder_zoom,w); } int folder_zoom(void *folder) { Folder_Widget *fw = FOLDER_WIDGET(folder); int scale; int done = 0; int w; if( fw->start_time == -1) { w = ewl_object_current_w_get(EWL_OBJECT(folder)); fw->start_time = ecore_time_get(); fw->start_size = w; } scale = fw->start_size + fw->speed * fw->dir * (ecore_time_get() - fw->start_time); if (fw->dir > 0 && scale >= fw->max) { scale = fw->max; if (fw->inside) done = 1; else { fw->start_time = -1; fw->dir = -1; } } else if ( fw->dir < 0 && scale <= fw->min) { scale = fw->min; done = 1; } /* ewl_object_place(EWL_OBJECT(folder), (CURRENT_X(folder) - (scale/2)), (CURRENT_Y(folder) - (scale/2)), scale, scale ); */ //ewl_object_position_request(EWL_OBJECT(folder), CURRENT_X(folder) - (scale/2), CURRENT_Y(folder) - (scale/2)); printf("scale = %g \t current_x = %i current_y = %i \n", scale, CURRENT_X(folder), CURRENT_Y(folder)); if (done) { fw->timer = NULL; return 0; } return 1; }