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

Reply via email to