|
From: <enl...@li...> - 2005-05-22 15:22:02
|
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);
|