Enlightenment CVS committal

Author  : codewarrior
Project : e17
Module  : apps/e

Dir     : e17/apps/e/src/bin


Modified Files:
        e_scrollbar.c e_scrollbar.h 


Log Message:
More scrollbar work (callbacks and accessors).

there's a problem with getting the values. FIXME included.


===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_scrollbar.c,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -3 -r1.3 -r1.4
--- e_scrollbar.c       4 Oct 2005 21:32:19 -0000       1.3
+++ e_scrollbar.c       5 Oct 2005 00:40:06 -0000       1.4
@@ -16,11 +16,14 @@
    Evas_Object *edje_object;
 
    struct {
-       double min;
-       double max;
+      double min;
+      double max;
+      double current;
    } value;
-
+   
    E_Scrollbar_Direction direction;
+
+   Evas_List *callbacks;
 };
 
 static void _e_scrollbar_smart_add(Evas_Object *object);
@@ -33,7 +36,8 @@
 static void _e_scrollbar_smart_resize(Evas_Object *object, Evas_Coord w, 
Evas_Coord h);
 static void _e_scrollbar_smart_show(Evas_Object *object);
 static void _e_scrollbar_smart_hide(Evas_Object *object);
-
+static void _e_scrollbar_drag_cb (void *data, Evas_Object *object, const char 
*emission, const char *source);
+    
 static Evas_Smart *e_scrollbar_smart = NULL;
 
 Evas_Object *
@@ -99,6 +103,104 @@
    return scrollbar_sd->direction;   
 }
 
+void
+e_scrollbar_callback_drag_add (Evas_Object *object, void (*func) (Evas_Object 
*obj, double value, void *data), void *data)
+{    
+   E_Scrollbar_Smart_Data *scrollbar_sd;
+   E_Scrollbar_Drag_Handler *handler;
+
+   if ((!object) || !(scrollbar_sd = evas_object_smart_data_get(object)))
+     return;
+   
+   handler = E_NEW(E_Scrollbar_Drag_Handler, 1);
+   
+   handler->data = data;
+   handler->cb.drag = func;
+   
+   scrollbar_sd->callbacks = evas_list_append(scrollbar_sd->callbacks, 
handler);
+}
+
+void
+e_scrollbar_value_set (Evas_Object *object, double value)
+{    
+   E_Scrollbar_Smart_Data *scrollbar_sd;
+   
+   if ((!object) || !(scrollbar_sd = evas_object_smart_data_get(object)))
+     return;
+   
+   scrollbar_sd->value.current = value;
+   
+   if (scrollbar_sd->direction == E_SCROLLBAR_HORIZONTAL)
+     edje_object_part_drag_value_set (scrollbar_sd->edje_object, "drag", 
value, 0);
+   else
+     edje_object_part_drag_value_set (scrollbar_sd->edje_object, "drag", 0, 
value);
+}
+
+double
+e_scrollbar_value_get (Evas_Object *object)
+{
+   E_Scrollbar_Smart_Data *scrollbar_sd;
+   double dx, dy;
+   
+   if ((!object) || !(scrollbar_sd = evas_object_smart_data_get(object)))
+     return;
+
+   /* FIXME:
+    * we have a problem here. if we printf the dx and dy we get 0 
+    */
+   
+   edje_object_part_drag_value_get (scrollbar_sd->edje_object, "drag", &dx, 
&dy);
+   
+   if (scrollbar_sd->direction == E_SCROLLBAR_HORIZONTAL)     
+     scrollbar_sd->value.current = dx;
+   else
+     scrollbar_sd->value.current = dy;     
+   
+   return scrollbar_sd->value.current;
+}
+
+void
+e_scrollbar_increments_set (Evas_Object *object, double step, double page)
+{
+   E_Scrollbar_Smart_Data *scrollbar_sd;
+   
+   if ((!object) || !(scrollbar_sd = evas_object_smart_data_get(object)))
+     return;
+   
+   if (scrollbar_sd->direction == E_SCROLLBAR_HORIZONTAL)
+    {
+       edje_object_part_drag_step_set (scrollbar_sd->edje_object, "drag", 
step, 0);
+       edje_object_part_drag_page_set (scrollbar_sd->edje_object, "drag", 
page, 0);
+    } else {
+       edje_object_part_drag_step_set (scrollbar_sd->edje_object, "drag", 0, 
step);
+       edje_object_part_drag_page_set (scrollbar_sd->edje_object, "drag", 0, 
page);
+    }
+}
+
+void
+e_scrollbar_increments_get (Evas_Object *object, double *step, double *page)
+{
+   E_Scrollbar_Smart_Data *scrollbar_sd;
+   double stepx; double stepy;
+   double pagex; double pagey;
+   
+   if ((!object) || !(scrollbar_sd = evas_object_smart_data_get(object)))
+     return;
+   
+   edje_object_part_drag_step_get (scrollbar_sd->edje_object, "drag", &stepx, 
&stepy);
+   edje_object_part_drag_page_get (scrollbar_sd->edje_object, "drag", &pagex, 
&pagey);   
+   
+   if (scrollbar_sd->direction == E_SCROLLBAR_HORIZONTAL)
+    {
+       *step = stepx;
+       *page = pagex;
+    } else {
+       *step = stepy;
+       *page = pagey;
+    }      
+}
+
+
 /************************** 
  * Private functions 
  **************************/
@@ -116,14 +218,14 @@
    if (!scrollbar_sd) return;
    scrollbar_sd->value.min = 0.0;
    scrollbar_sd->value.max = 1.0;
-
+   scrollbar_sd->callbacks = NULL;
+   scrollbar_sd->direction = E_SCROLLBAR_HORIZONTAL;   
    scrollbar_sd->edje_object = edje_object_add(evas);
    e_theme_edje_object_set(scrollbar_sd->edje_object, 
                           "base/theme/widgets/hscrollbar",
                           "widgets/hscrollbar");
-
-   scrollbar_sd->direction = E_SCROLLBAR_HORIZONTAL;
-   
+   edje_object_signal_callback_add(scrollbar_sd->edje_object, "drag", "*", 
_e_scrollbar_drag_cb, scrollbar_sd);
+   evas_object_data_set (scrollbar_sd->edje_object, "smart", object);
    evas_object_smart_member_add(scrollbar_sd->edje_object, object);
    
    evas_object_smart_data_set(object, scrollbar_sd);
@@ -233,3 +335,27 @@
    evas_object_hide(scrollbar_sd->edje_object);
 }
 
+static void
+_e_scrollbar_drag_cb (void *data, Evas_Object *object, const char *emission, 
const char *source)
+{    
+   E_Scrollbar_Smart_Data *scrollbar_sd;
+   Evas_Object *smart_object;
+   Evas_List *l;
+   
+   if ((!object) || !(smart_object = evas_object_data_get(object, "smart")))
+     return;
+   
+   scrollbar_sd = evas_object_smart_data_get(smart_object);
+   if (!scrollbar_sd)
+     return;
+   
+   scrollbar_sd->value.current = e_scrollbar_value_get (object);
+   
+   for (l = scrollbar_sd->callbacks; l; l = l->next)
+    {
+       E_Scrollbar_Drag_Handler *handler;
+       
+       handler = l->data;
+       handler->cb.drag (smart_object, scrollbar_sd->value.current, 
handler->data);
+    }
+}
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_scrollbar.h,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -3 -r1.4 -r1.5
--- e_scrollbar.h       4 Oct 2005 22:53:27 -0000       1.4
+++ e_scrollbar.h       5 Oct 2005 00:40:06 -0000       1.5
@@ -3,20 +3,35 @@
  */
 #ifdef E_TYPEDEFS
 
-typedef enum _E_Scrollbar_Direction
-{
-   E_SCROLLBAR_HORIZONTAL,
-   E_SCROLLBAR_VERTICAL
-} E_Scrollbar_Direction;
+typedef struct _E_Scrollbar_Drag_Handler E_Scrollbar_Drag_Handler;
+typedef enum _E_Scrollbar_Direction E_Scrollbar_Direction;
 
 #else
 #ifndef E_SCROLLBAR_H
 #define E_SCROLLBAR_H
 
+struct _E_Scrollbar_Drag_Handler
+{
+   void *data;
+   struct {
+      void (*drag)(Evas_Object *obj, double value, void *data);
+   } cb;
+};
+
+enum _E_Scrollbar_Direction
+{
+   E_SCROLLBAR_HORIZONTAL,
+   E_SCROLLBAR_VERTICAL
+};
+
 EAPI Evas_Object          *e_scrollbar_add(Evas *evas);
-EAPI void                  e_scrollbar_direction_set(Evas_Object *object,
-                                                    E_Scrollbar_Direction dir);
+EAPI void                  e_scrollbar_direction_set(Evas_Object *object, 
E_Scrollbar_Direction dir);
 EAPI E_Scrollbar_Direction e_scrollbar_direction_get(Evas_Object *object);
+EAPI void                  e_scrollbar_callback_drag_add (Evas_Object *object, 
void (*func)(Evas_Object *obj, double value, void *data), void *data);
+EAPI void                  e_scrollbar_value_set (Evas_Object *object, double 
value);
+EAPI double                e_scrollbar_value_get (Evas_Object *object);
+EAPI void                  e_scrollbar_increments_set (Evas_Object *object, 
double step, double page);
+EAPI void                  e_scrollbar_increments_get (Evas_Object *object, 
double *step, double *page);
 
 #endif
 #endif




-------------------------------------------------------
This SF.Net email is sponsored by:
Power Architecture Resource Center: Free content, downloads, discussions,
and more. http://solutions.newsforge.com/ibmarch.tmpl
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to