Enlightenment CVS committal Author : moom16 Project : e17 Module : apps/eclair
Dir : e17/apps/eclair/src Modified Files: eclair_playlist.c eclair_playlist_container.c eclair_playlist_container.h Log Message: * Automatically scroll to the current playlist item (but still need to add animation) =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/eclair/src/eclair_playlist.c,v retrieving revision 1.11 retrieving revision 1.12 diff -u -3 -r1.11 -r1.12 --- eclair_playlist.c 21 May 2005 12:55:23 -0000 1.11 +++ eclair_playlist.c 22 May 2005 15:21:51 -0000 1.12 @@ -322,15 +322,14 @@ { Eclair_Media_File *previous_media_file; - if (!playlist) + if (!playlist || !playlist->eclair) return; previous_media_file = evas_list_data(playlist->current); playlist->current = list; + eclair_playlist_container_scroll_to_list(playlist->eclair->playlist_container, list); eclair_media_file_update(playlist->eclair, previous_media_file); eclair_media_file_update(playlist->eclair, evas_list_data(playlist->current)); - - //TODO: eclair_playlist_container scroll_to } //Set the media file which is just before the active media file as the active media file =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/eclair/src/eclair_playlist_container.c,v retrieving revision 1.1 retrieving revision 1.2 diff -u -3 -r1.1 -r1.2 --- eclair_playlist_container.c 18 May 2005 15:36:25 -0000 1.1 +++ eclair_playlist_container.c 22 May 2005 15:21:51 -0000 1.2 @@ -267,7 +267,7 @@ Eclair_Playlist_Container *playlist_container; double dt, dx; - if (!(obj = data) || !(playlist_container = (Eclair_Playlist_Container *)evas_object_smart_data_get(obj))) + if (!(obj = (Evas_Object *)data) || !(playlist_container = (Eclair_Playlist_Container *)evas_object_smart_data_get(obj))) return 0; dt = ecore_time_get() - playlist_container->scroll_start_time; @@ -278,6 +278,98 @@ return 1; } +//Scroll the playlist container upto the element +void eclair_playlist_container_scroll_to_list(Evas_Object *obj, Evas_List *element) +{ + Eclair_Playlist_Container *playlist_container; + Evas_List *l; + Evas_Coord container_height; + int i, start_offset, element_offset; + + if (!obj || !element || !(playlist_container = (Eclair_Playlist_Container *)evas_object_smart_data_get(obj)) || + playlist_container->entry_height <= 0 || !playlist_container->entries) + return; + + for (l = *playlist_container->entries, i = 0; l; l = l->next, i++) + { + if (l == element) + { + if (eclair_playlist_container_nth_element_is_visible(obj, i, 1)) + return; + + element_offset = i * playlist_container->entry_height; + start_offset = eclair_playlist_container_offset_get(obj); + if (element_offset < start_offset) + { + eclair_playlist_container_offset_set(obj, element_offset); + } + else + { + evas_object_geometry_get(obj, NULL, NULL, NULL, &container_height); + eclair_playlist_container_offset_set(obj, element_offset - container_height + playlist_container->entry_height); + } + } + } +} + +//Return the offset of the playlist container +int eclair_playlist_container_offset_get(Evas_Object *obj) +{ + Eclair_Playlist_Container *playlist_container; + Evas_Coord container_height; + int hidden_height; + + if (!obj || !(playlist_container = (Eclair_Playlist_Container *)evas_object_smart_data_get(obj)) || + !playlist_container->entries || playlist_container->entry_height <= 0) + return 0; + + evas_object_geometry_get(obj, NULL, NULL, NULL, &container_height); + hidden_height = (playlist_container->entry_height * evas_list_count(*playlist_container->entries)) - container_height; + + if (hidden_height <= 0) + return 0; + else + return (int)(playlist_container->scroll_percent * hidden_height); +} + +//Set the offset of the playlist container +void eclair_playlist_container_offset_set(Evas_Object *obj, int offset) +{ + Eclair_Playlist_Container *playlist_container; + double scroll_percent; + Evas_Coord container_height; + int hidden_height; + + if (!obj || !(playlist_container = (Eclair_Playlist_Container *)evas_object_smart_data_get(obj)) || + !playlist_container->entries || playlist_container->entry_height <= 0) + return; + + evas_object_geometry_get(obj, NULL, NULL, NULL, &container_height); + hidden_height = (playlist_container->entry_height * evas_list_count(*playlist_container->entries)) - container_height; + scroll_percent = (double)offset / hidden_height; + eclair_playlist_container_scroll_percent_set(obj, scroll_percent); +} + +//Return 1 if the nth element is visible in the playlist container (if it is entirely visible if entirely == 1) +Evas_Bool eclair_playlist_container_nth_element_is_visible(Evas_Object *obj, int n, Evas_Bool entirely) +{ + int start_offset, element_offset; + Evas_Coord container_height; + Eclair_Playlist_Container *playlist_container; + + if (!obj || !(playlist_container = (Eclair_Playlist_Container *)evas_object_smart_data_get(obj)) || playlist_container->entry_height <= 0) + return 0; + + start_offset = eclair_playlist_container_offset_get(obj); + element_offset = n * playlist_container->entry_height; + evas_object_geometry_get(obj, NULL, NULL, NULL, &container_height); + if (entirely) + return (element_offset >= start_offset && (element_offset + playlist_container->entry_height) <= (start_offset + container_height)); + else + return (element_offset - playlist_container->entry_height > start_offset && element_offset < (start_offset + container_height)); +} + + //Select the files in the playlist container according to the media_file selected and the modifiers void eclair_playlist_container_select_file(Evas_Object *obj, Eclair_Media_File *media_file, Evas_Modifier *modifiers) { =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/eclair/src/eclair_playlist_container.h,v retrieving revision 1.1 retrieving revision 1.2 diff -u -3 -r1.1 -r1.2 --- eclair_playlist_container.h 18 May 2005 15:36:25 -0000 1.1 +++ eclair_playlist_container.h 22 May 2005 15:21:51 -0000 1.2 @@ -13,6 +13,10 @@ double eclair_playlist_container_scroll_percent_get(Evas_Object *obj); void eclair_playlist_container_scroll_start(Evas_Object *obj, double speed); void eclair_playlist_container_scroll_stop(Evas_Object *obj); +void eclair_playlist_container_scroll_to_list(Evas_Object *obj, Evas_List *element); +int eclair_playlist_container_offset_get(Evas_Object *obj); +void eclair_playlist_container_offset_set(Evas_Object *obj, int offset); +Evas_Bool eclair_playlist_container_nth_element_is_visible(Evas_Object *obj, int n, Evas_Bool entirely); void eclair_playlist_container_select_file(Evas_Object *obj, Eclair_Media_File *media_file, Evas_Modifier *modifiers); void eclair_playlist_container_select_all(Evas_Object *obj); ------------------------------------------------------- This SF.Net email is sponsored by Oracle Space Sweepstakes Want to be the first software developer in space? Enter now for the Oracle Space Sweepstakes! http://ads.osdn.com/?ad_id=7412&alloc_id=16344&op=click _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs