Enlightenment CVS committal Author : codewarrior Project : e17 Module : apps/e
Dir : e17/apps/e/src/bin Modified Files: Makefile.am e_file_selector.c e_fileman.c e_fileman_smart.c e_fileman_smart.h Log Message: - fix scrolling =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/Makefile.am,v retrieving revision 1.72 retrieving revision 1.73 diff -u -3 -r1.72 -r1.73 --- Makefile.am 29 Oct 2005 11:51:19 -0000 1.72 +++ Makefile.am 30 Oct 2005 08:40:37 -0000 1.73 @@ -108,7 +108,7 @@ e_widget_fileman.h \ e_scrollframe.h \ e_file_selector.h \ -e_file_dialog.h +e_file_dialog.h enlightenment_src = \ e_user.c \ =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_file_selector.c,v retrieving revision 1.1 retrieving revision 1.2 diff -u -3 -r1.1 -r1.2 --- e_file_selector.c 28 Oct 2005 13:44:41 -0000 1.1 +++ e_file_selector.c 30 Oct 2005 08:40:37 -0000 1.2 @@ -102,15 +102,17 @@ sd->view = E_FILE_SELECTOR_ICONVIEW; evas = evas_object_evas_get(obj); - sd->theme = edje_object_add(evas); +// sd->theme = edje_object_add(evas); + sd->theme = e_scrollframe_add(evas); evas_object_smart_member_add(sd->theme, obj); - THEME_SET(sd->theme, "main"); +// THEME_SET(sd->theme, "main"); sd->files = e_fm_add(evas); e_fm_selector_enable(sd->files, _e_file_selector_selected_cb, sd); evas_object_smart_member_add(sd->files, obj); - edje_object_part_swallow(sd->theme, "items", sd->files); + //edje_object_part_swallow(sd->theme, "items", sd->files); + e_scrollframe_child_set(sd->theme, sd->files); evas_object_smart_data_set(obj, sd); =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_fileman.c,v retrieving revision 1.17 retrieving revision 1.18 diff -u -3 -r1.17 -r1.18 --- e_fileman.c 27 Oct 2005 13:21:38 -0000 1.17 +++ e_fileman.c 30 Oct 2005 08:40:37 -0000 1.18 @@ -18,17 +18,16 @@ # define D(x) ((void) 0) #endif -static void _e_fileman_vscrollbar_drag_cb(Evas_Object *object, double value, void *data); -static int _e_fileman_reconf_cb(void *data, int type, void *event); -static int _e_fileman_dir_change_cb(void *data, int type, void *event); -static int _e_fileman_mouse_wheel_cb(void *data, int type, void *event); static void _e_fileman_resize_cb(E_Win *win); static void _e_fileman_delete_cb(E_Win *win); static void _e_fileman_selector_cb(Evas_Object *object, char *file, void *data); -static void _e_fileman_vscrollbar_show_cb(void *data, Evas *e, Evas_Object *obj, void *ev); -static void _e_fileman_vscrollbar_hide_cb(void *data, Evas *e, Evas_Object *obj, void *ev); static void _e_fileman_free(E_Fileman *fileman); - +static void _e_fileman_scroll_set(Evas_Object *obj, Evas_Coord x, Evas_Coord y); +static void _e_fileman_scroll_get(Evas_Object *obj, Evas_Coord *x, Evas_Coord *y); +static void _e_fileman_scroll_max_get(Evas_Object *obj, Evas_Coord *x, Evas_Coord *y); +static void _e_fileman_scroll_child_size_get(Evas_Object *obj, Evas_Coord *x, Evas_Coord *y); + + E_Fileman * e_fileman_new(E_Container *con) { @@ -71,41 +70,23 @@ e_win_name_class_set(fileman->win, "Efm ", "_fileman"); e_win_title_set(fileman->win, dir); - fileman->main = edje_object_add(fileman->evas); - e_theme_edje_object_set(fileman->main, "base/theme/fileman/main", - "fileman/main"); - - fileman->vscrollbar = e_scrollbar_add(fileman->evas); - e_scrollbar_direction_set(fileman->vscrollbar, E_SCROLLBAR_VERTICAL); - e_scrollbar_callback_drag_add(fileman->vscrollbar, _e_fileman_vscrollbar_drag_cb, fileman); - evas_object_event_callback_add(fileman->vscrollbar, EVAS_CALLBACK_SHOW, _e_fileman_vscrollbar_show_cb, fileman); - evas_object_event_callback_add(fileman->vscrollbar, EVAS_CALLBACK_HIDE, _e_fileman_vscrollbar_hide_cb, fileman); - - e_win_resize_callback_set(fileman->win, _e_fileman_resize_cb); - e_win_resize(fileman->win, 640, 480); - evas_event_freeze(fileman->evas); - fileman->smart = e_fm_add(fileman->evas); e_fm_e_win_set(fileman->smart, fileman->win); - edje_object_part_swallow(fileman->main, "icon_area", fileman->smart); - - ecore_x_dnd_aware_set(fileman->win->evas_win, 1); - - fileman->event_handlers = evas_list_append(fileman->event_handlers, - ecore_event_handler_add(E_EVENT_FM_RECONFIGURE, - _e_fileman_reconf_cb, - fileman)); - fileman->event_handlers = evas_list_append(fileman->event_handlers, - ecore_event_handler_add(E_EVENT_FM_DIRECTORY_CHANGE, - _e_fileman_dir_change_cb, - fileman)); + fileman->main = e_scrollframe_add(fileman->evas); + e_scrollframe_custom_theme_set(fileman->main, "base/themes/fileman", + "fileman/main"); + e_scrollframe_extern_pan_set(fileman->main, fileman->smart, + _e_fileman_scroll_set, + _e_fileman_scroll_get, + _e_fileman_scroll_max_get, + _e_fileman_scroll_child_size_get); + + e_win_resize_callback_set(fileman->win, _e_fileman_resize_cb); + e_win_resize(fileman->win, 400, 400 ); - fileman->event_handlers = evas_list_append(fileman->event_handlers, - ecore_event_handler_add(ECORE_X_EVENT_MOUSE_WHEEL, - _e_fileman_mouse_wheel_cb, - fileman)); + ecore_x_dnd_aware_set(fileman->win->evas_win, 1); evas_event_thaw(fileman->evas); @@ -114,6 +95,31 @@ return fileman; } + +static void +_e_fileman_scroll_set(Evas_Object *obj, Evas_Coord x, Evas_Coord y) +{ + e_fm_scroll_set(obj, x, y); +} + +static void +_e_fileman_scroll_get(Evas_Object *obj, Evas_Coord *x, Evas_Coord *y) +{ + e_fm_scroll_get(obj, x, y); +} + +static void +_e_fileman_scroll_max_get(Evas_Object *obj, Evas_Coord *x, Evas_Coord *y) +{ + e_fm_scroll_max_get(obj, x, y); +} + +static void +_e_fileman_scroll_child_size_get(Evas_Object *obj, Evas_Coord *x, Evas_Coord *y) +{ + e_fm_geometry_virtual_get(obj, x, y); +} + void e_fileman_selector_enable(E_Fileman *fileman, void (*func)(E_Fileman *fileman, char *file, void *data), void *data) { @@ -151,7 +157,7 @@ ecore_event_handler_del(fileman->event_handlers->data); fileman->event_handlers = evas_list_remove_list(fileman->event_handlers, fileman->event_handlers); } - evas_object_del(fileman->vscrollbar); + evas_object_del(fileman->smart); evas_object_del(fileman->main); e_object_del(E_OBJECT(fileman->win)); @@ -167,25 +173,6 @@ fileman = win->data; evas_object_resize(fileman->main, win->w, win->h); - e_fm_geometry_virtual_get(fileman->smart, &w, &h); - - D(("_e_fileman_resize_cb: e_fm_freeze\n")); - frozen = e_fm_freeze(fileman->smart); - if (frozen > 1) - e_fm_thaw(fileman->smart); - - if (h > win->h) - { - D(("e_fileman_resize_cb: show (%p)\n", fileman)); - edje_object_part_swallow(fileman->main, "vscrollbar", fileman->vscrollbar); - e_fm_geometry_virtual_get(fileman->smart, &w, &h); - } - else - { - D(("e_fileman_resize_cb: hide (%p)\n", fileman)); - edje_object_part_unswallow(fileman->main, fileman->vscrollbar); - evas_object_hide(fileman->vscrollbar); - } } static void @@ -198,97 +185,6 @@ e_object_del(E_OBJECT(fileman)); } -static void -_e_fileman_vscrollbar_drag_cb(Evas_Object *object, double value, void *data) -{ - E_Fileman *fileman; - - fileman = data; - D(("e_fileman_vscrollbar_drag_cb: %f (%p)\n", value, fileman)); - e_fm_scroll_vertical(fileman->smart, value); -} - -static int -_e_fileman_reconf_cb(void *data, int type, void *event) -{ - E_Event_Fm_Reconfigure *ev; - E_Fileman *fileman; - Evas_Coord w, h; - int frozen; - - if (!data) return 1; - - fileman = data; - ev = event; - - D(("_e_fileman_reconf_cb: e_fm_freeze\n")); - frozen = e_fm_freeze(fileman->smart); - if (frozen > 1) - e_fm_thaw(fileman->smart); - - if (ev->h > fileman->win->h) - { - D(("e_fileman_reconf_cb: show (%p)\n", fileman)); - edje_object_part_swallow(fileman->main, "vscrollbar", fileman->vscrollbar); - } - else - { - D(("e_fileman_reconf_cb: hide (%p)\n", fileman)); - edje_object_part_unswallow(fileman->main, fileman->vscrollbar); - evas_object_hide(fileman->vscrollbar); - } - return 1; -} - -static int -_e_fileman_dir_change_cb(void *data, int type, void *event) -{ - E_Event_Fm_Directory_Change *ev; - E_Fileman *fileman; - Evas_Coord w, h; - - if (!data) return 1; - - fileman = data; - ev = event; - - D(("_e_fileman_dir_change_cb:\n")); - e_scrollbar_value_set(fileman->vscrollbar, 0.0); - - return 1; -} - -static int -_e_fileman_mouse_wheel_cb(void *data, int type, void *event) -{ - Ecore_X_Event_Mouse_Wheel *ev; - E_Fileman *fileman; - double pos; - - ev = event; - fileman = data; - - pos = e_scrollbar_value_get(fileman->vscrollbar); - - if (ev->z < 0) - { - pos -= 0.05; - if (pos < 0.0) - pos = 0.0; - } - - if (ev->z > 0) - { - pos += 0.05; - if (pos > 1.0) - pos = 1.0; - } - - e_scrollbar_value_set(fileman->vscrollbar, pos); - e_fm_scroll_vertical(fileman->smart, pos); - return 1; -} - static void _e_fileman_selector_cb(Evas_Object *object, char *file, void *data) { @@ -298,25 +194,3 @@ fileman->selector.func(fileman, file, fileman->selector.data); //e_object_del(E_OBJECT(fileman)); } - -static void -_e_fileman_vscrollbar_show_cb(void *data, Evas *e, Evas_Object *obj, void *ev) -{ - E_Fileman *fileman; - - fileman = data; - - D(("_e_fileman_vscrollbar_show_cb: thaw (%p)\n", fileman)); - e_fm_thaw(fileman->smart); -} - -static void -_e_fileman_vscrollbar_hide_cb(void *data, Evas *e, Evas_Object *obj, void *ev) -{ - E_Fileman *fileman; - - fileman = data; - - D(("_e_fileman_vscrollbar_hide_cb: thaw (%p)\n", fileman)); - e_fm_thaw(fileman->smart); -} =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_fileman_smart.c,v retrieving revision 1.65 retrieving revision 1.66 diff -u -3 -r1.65 -r1.66 --- e_fileman_smart.c 29 Oct 2005 09:53:19 -0000 1.65 +++ e_fileman_smart.c 30 Oct 2005 08:40:37 -0000 1.66 @@ -157,8 +157,8 @@ } icon_info; struct { - Evas_Coord w, h; - } max; + Evas_Coord x, y, w, h; + } child; struct { Evas_List *files; @@ -324,33 +324,62 @@ } void -e_fm_scroll_horizontal(Evas_Object *object, double percent) +e_fm_scroll_set(Evas_Object *object, Evas_Coord x, Evas_Coord y) { - + E_Fm_Smart_Data *sd; + + sd = evas_object_smart_data_get(object); + if (!sd) return NULL; + + if (x > (sd->child.w - sd->w)) x = sd->child.w - sd->w; + if (y > (sd->child.h - sd->h)) y = sd->child.h - sd->h; + if (x < 0) x = 0; + if (y < 0) y = 0; + if ((x == sd->child.x) && (y == sd->child.y)) return; + sd->child.x = x; + sd->child.y = y; + + e_icon_layout_clip_freeze(sd->layout); + evas_object_move(sd->layout, sd->x - sd->child.x, sd->y - sd->child.y); + e_icon_layout_clip_thaw(sd->layout); + + evas_object_smart_callback_call(sd->object, "changed", NULL); } void -e_fm_scroll_vertical(Evas_Object *object, double percent) +e_fm_scroll_max_get(Evas_Object *object, Evas_Coord *x, Evas_Coord *y) { E_Fm_Smart_Data *sd; - int offsetpx; - Evas_Coord x, y, w, h; - - if ((!object) || !(sd = evas_object_smart_data_get(object))) - return; - if(sd->max.h <= sd->h) return; + sd = evas_object_smart_data_get(object); + if (!sd) return NULL; - sd->position = percent; - - offsetpx = (percent) * (sd->max.h - sd->h); + if (x) + { + if (sd->w < sd->child.w) *x = sd->child.w - sd->w; + else *x = 0; + } + if (y) + { + if (sd->h < sd->child.h) *y = sd->child.h - sd->h; + else *y = 0; + } + +} - evas_object_geometry_get(sd->layout, &x, &y, &w, &h); - e_icon_layout_clip_freeze(sd->layout); - evas_object_move(sd->layout, x, sd->y - offsetpx); - e_icon_layout_clip_thaw(sd->layout); +void +e_fm_scroll_get(Evas_Object *object, Evas_Coord *x, Evas_Coord *y) +{ + E_Fm_Smart_Data *sd; + + sd = evas_object_smart_data_get(object); + if (!sd) return NULL; + + if (x) *x = sd->child.x; + if (y) *y = sd->child.y; } + void e_fm_geometry_virtual_get(Evas_Object *object, Evas_Coord *w, Evas_Coord *h) { @@ -360,10 +389,10 @@ return; if(w) - *w = sd->max.w; + *w = sd->child.w; if(h) - *h = sd->max.h; + *h = sd->child.h; } void @@ -626,12 +655,12 @@ sd = evas_object_smart_data_get(object); if (!sd) return; - evas_object_move(sd->bg, x, y); - evas_object_move(sd->clip, x, y); - evas_object_move(sd->layout, x, y); - sd->x = x; - sd->y = y; + sd->y = y; + + evas_object_move(sd->bg, x, y); + evas_object_move(sd->clip, x, y); + evas_object_move(sd->layout, sd->x - sd->child.x, sd->y - sd->child.y); } static void @@ -647,18 +676,15 @@ evas_object_resize(sd->clip, w, h); evas_object_resize(sd->layout, w, h); e_icon_layout_width_fix(sd->layout, w); - e_icon_layout_virtual_size_get(sd->layout, &sd->max.w, &sd->max.h); + e_icon_layout_virtual_size_get(sd->layout, &sd->child.w, &sd->child.h); sd->conf.main->width = w; sd->conf.main->height = h; sd->w = w; sd->h = h; - if(sd->position > 0.0 && sd->max.h > sd->h) - e_fm_scroll_vertical(object, sd->position); - else - sd->position = 0.0; - + evas_object_smart_callback_call(sd->object, "changed", NULL); + if(sd->frozen) return; @@ -669,8 +695,8 @@ evas_object_geometry_get(sd->layout, NULL, NULL, &w, &h); ev->object = sd->object; - ev->w = sd->max.w; - ev->h = sd->max.h; + ev->w = sd->child.w; + ev->h = sd->child.h; ecore_event_add(E_EVENT_FM_RECONFIGURE, ev, NULL, NULL); } } @@ -692,8 +718,8 @@ evas_object_geometry_get(sd->layout, NULL, NULL, &w, &h); ev->object = sd->object; - ev->w = sd->max.w; - ev->h = sd->max.h; + ev->w = sd->child.w; + ev->h = sd->child.h; ecore_event_add(E_EVENT_FM_RECONFIGURE, ev, NULL, NULL); } } @@ -1053,7 +1079,7 @@ lastmod = E_NEW(char, 128); strftime(lastmod, 128, "%a %b %d %T %Y", t); - permissions = E_NEW(char, 128); // todo + permissions = E_NEW(char, 128); snprintf(permissions, 128, "%s", ""); ol = e_widget_list_add(evas, 0, 0); @@ -1248,13 +1274,13 @@ case E_FILEMAN_CANVAS_ARRANGE_NAME: sd->files = evas_list_sort(sd->files, evas_list_count(sd->files), _e_fm_files_sort_name_cb); sd->arrange = E_FILEMAN_CANVAS_ARRANGE_NAME; - _e_fm_redraw(sd); // no_new + _e_fm_redraw(sd); break; case E_FILEMAN_CANVAS_ARRANGE_MODTIME: sd->files = evas_list_sort(sd->files, evas_list_count(sd->files), _e_fm_files_sort_modtime_cb); sd->arrange = E_FILEMAN_CANVAS_ARRANGE_MODTIME; - _e_fm_redraw(sd); // no new + _e_fm_redraw(sd); break; } } @@ -1350,8 +1376,8 @@ if (ev) { ev->object = sd->object; - ev->w = sd->max.w; - ev->h = sd->max.h; + ev->w = sd->child.w; + ev->h = sd->child.h; ecore_event_add(E_EVENT_FM_DIRECTORY_CHANGE, ev, NULL, NULL); } @@ -1359,13 +1385,16 @@ return; /* raise reconfigure event */ + e_icon_layout_virtual_size_get(sd->layout, &sd->child.w, &sd->child.h); + evas_object_smart_callback_call(sd->object, "changed", NULL); + ev = E_NEW(E_Event_Fm_Reconfigure, 1); if (ev) { - e_icon_layout_virtual_size_get(sd->layout, &sd->max.w, &sd->max.h); + e_icon_layout_virtual_size_get(sd->layout, &sd->child.w, &sd->child.h); ev->object = sd->object; - ev->w = sd->max.w; - ev->h = sd->max.h; + ev->w = sd->child.w; + ev->h = sd->child.h; ecore_event_add(E_EVENT_FM_RECONFIGURE, ev, NULL, NULL); } } @@ -1502,7 +1531,7 @@ } } break; - } + } } static void =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_fileman_smart.h,v retrieving revision 1.10 retrieving revision 1.11 diff -u -3 -r1.10 -r1.11 --- e_fileman_smart.h 27 Oct 2005 10:19:43 -0000 1.10 +++ e_fileman_smart.h 30 Oct 2005 08:40:37 -0000 1.11 @@ -31,8 +31,14 @@ EAPI E_Win *e_fm_e_win_get(Evas_Object *object); EAPI void e_fm_menu_set(Evas_Object *object, E_Menu *menu); EAPI E_Menu *e_fm_menu_get(Evas_Object *object); + +EAPI void e_fm_scroll_set(Evas_Object *object, Evas_Coord x, Evas_Coord y); +EAPI void e_fm_scroll_get(Evas_Object *object, Evas_Coord *x, Evas_Coord *y); +EAPI void e_fm_scroll_max_get(Evas_Object *object, Evas_Coord *x, Evas_Coord *y); + EAPI void e_fm_scroll_horizontal(Evas_Object *object, double percent); EAPI void e_fm_scroll_vertical(Evas_Object *object, double percent); + EAPI void e_fm_geometry_virtual_get(Evas_Object *object, Evas_Coord *w, Evas_Coord *h); EAPI void e_fm_reconfigure_callback_add(Evas_Object *object, void (*func)(void *data, Evas_Object *obj, E_Event_Fm_Reconfigure *ev), void *data); EAPI int e_fm_freeze(Evas_Object *freeze); ------------------------------------------------------- This SF.Net email is sponsored by the JBoss Inc. Get Certified Today * Register for a JBoss Training Course Free Certification Exam for All Training Attendees Through End of 2005 Visit http://www.jboss.com/services/certification for more information _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs