Enlightenment CVS committal

Author  : moom
Project : e17
Module  : proto

Dir     : e17/proto/etk/src/lib


Modified Files:
        etk_main.c etk_range.c etk_range.h 


Log Message:
* [Range] Use a job that will send the "value_changed" signal instead of 
emitting it immediately.
It should make scrolling a bit faster (at least, content will be refreshed now 
when it's too laggy)


===================================================================
RCS file: /cvs/e/e17/proto/etk/src/lib/etk_main.c,v
retrieving revision 1.19
retrieving revision 1.20
diff -u -3 -r1.19 -r1.20
--- etk_main.c  10 Apr 2006 09:23:47 -0000      1.19
+++ etk_main.c  12 Apr 2006 16:19:55 -0000      1.20
@@ -207,8 +207,8 @@
 /* Runs an iteration (used as callback for an ecore_job)*/
 static void _etk_main_iterate_job_cb(void *data)
 {
-   _etk_main_iterate_job = NULL;
    etk_main_iterate();
+   _etk_main_iterate_job = NULL;
 }
 
 /* Recusively requests the size of all the widgets */
===================================================================
RCS file: /cvs/e/e17/proto/etk/src/lib/etk_range.c,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -3 -r1.8 -r1.9
--- etk_range.c 7 Apr 2006 15:36:11 -0000       1.8
+++ etk_range.c 12 Apr 2006 16:19:55 -0000      1.9
@@ -28,8 +28,10 @@
 };
 
 static void _etk_range_constructor(Etk_Range *range);
+static void _etk_range_destructor(Etk_Range *range);
 static void _etk_range_property_set(Etk_Object *object, int property_id, 
Etk_Property_Value *value);
 static void _etk_range_property_get(Etk_Object *object, int property_id, 
Etk_Property_Value *value);
+static void _etk_range_change_value_job_cb(void *data);
 
 static Etk_Signal *_etk_range_signals[ETK_RANGE_NUM_SIGNALS];
 
@@ -49,16 +51,24 @@
 
    if (!range_type)
    {
-      range_type = etk_type_new("Etk_Range", ETK_WIDGET_TYPE, 
sizeof(Etk_Range), ETK_CONSTRUCTOR(_etk_range_constructor), NULL);
+      range_type = etk_type_new("Etk_Range", ETK_WIDGET_TYPE, 
sizeof(Etk_Range),
+         ETK_CONSTRUCTOR(_etk_range_constructor), 
ETK_DESTRUCTOR(_etk_range_destructor));
 
-      _etk_range_signals[ETK_RANGE_VALUE_CHANGED_SIGNAL] = 
etk_signal_new("value_changed", range_type, ETK_MEMBER_OFFSET(Etk_Range, 
value_changed), etk_marshaller_VOID__DOUBLE, NULL, NULL);
+      _etk_range_signals[ETK_RANGE_VALUE_CHANGED_SIGNAL] = 
etk_signal_new("value_changed",
+         range_type, ETK_MEMBER_OFFSET(Etk_Range, value_changed), 
etk_marshaller_VOID__DOUBLE, NULL, NULL);
 
-      etk_type_property_add(range_type, "lower", ETK_RANGE_LOWER_PROPERTY, 
ETK_PROPERTY_DOUBLE, ETK_PROPERTY_READABLE_WRITABLE,  
etk_property_value_double(0.0));
-      etk_type_property_add(range_type, "upper", ETK_RANGE_UPPER_PROPERTY, 
ETK_PROPERTY_DOUBLE, ETK_PROPERTY_READABLE_WRITABLE,  
etk_property_value_double(0.0));
-      etk_type_property_add(range_type, "value", ETK_RANGE_VALUE_PROPERTY, 
ETK_PROPERTY_DOUBLE, ETK_PROPERTY_READABLE_WRITABLE,  
etk_property_value_double(0.0));
-      etk_type_property_add(range_type, "step_increment", 
ETK_RANGE_STEP_INC_PROPERTY, ETK_PROPERTY_DOUBLE, 
ETK_PROPERTY_READABLE_WRITABLE,  etk_property_value_double(0.0));
-      etk_type_property_add(range_type, "page_increment", 
ETK_RANGE_PAGE_INC_PROPERTY, ETK_PROPERTY_DOUBLE, 
ETK_PROPERTY_READABLE_WRITABLE,  etk_property_value_double(0.0));
-      etk_type_property_add(range_type, "page_size", 
ETK_RANGE_PAGE_SIZE_PROPERTY, ETK_PROPERTY_DOUBLE, 
ETK_PROPERTY_READABLE_WRITABLE,  etk_property_value_double(0.0));
+      etk_type_property_add(range_type, "lower", ETK_RANGE_LOWER_PROPERTY,
+         ETK_PROPERTY_DOUBLE, ETK_PROPERTY_READABLE_WRITABLE, 
etk_property_value_double(0.0));
+      etk_type_property_add(range_type, "upper", ETK_RANGE_UPPER_PROPERTY,
+         ETK_PROPERTY_DOUBLE, ETK_PROPERTY_READABLE_WRITABLE, 
etk_property_value_double(0.0));
+      etk_type_property_add(range_type, "value", ETK_RANGE_VALUE_PROPERTY,
+         ETK_PROPERTY_DOUBLE, ETK_PROPERTY_READABLE_WRITABLE, 
etk_property_value_double(0.0));
+      etk_type_property_add(range_type, "step_increment", 
ETK_RANGE_STEP_INC_PROPERTY,
+         ETK_PROPERTY_DOUBLE, ETK_PROPERTY_READABLE_WRITABLE, 
etk_property_value_double(0.0));
+      etk_type_property_add(range_type, "page_increment", 
ETK_RANGE_PAGE_INC_PROPERTY,
+         ETK_PROPERTY_DOUBLE, ETK_PROPERTY_READABLE_WRITABLE, 
etk_property_value_double(0.0));
+      etk_type_property_add(range_type, "page_size", 
ETK_RANGE_PAGE_SIZE_PROPERTY,
+         ETK_PROPERTY_DOUBLE, ETK_PROPERTY_READABLE_WRITABLE, 
etk_property_value_double(0.0));
       
       range_type->property_set = _etk_range_property_set;
       range_type->property_get = _etk_range_property_get;
@@ -95,8 +105,8 @@
    if (new_value != range->value)
    {
       range->value = new_value;
-      etk_signal_emit(_etk_range_signals[ETK_RANGE_VALUE_CHANGED_SIGNAL], 
ETK_OBJECT(range), NULL, range->value);
-      etk_object_notify(ETK_OBJECT(range), "value");
+      if (!range->change_value_job)
+         range->change_value_job = 
ecore_job_add(_etk_range_change_value_job_cb, range);
    }
 }
 
@@ -131,7 +141,8 @@
 /**
  * @brief Sets the increment value of the range
  * @param range a range
- * @param step the step increment value. Used when the arrow of a scrollbar is 
clicked, or when the keyboard arrows are pressed (for a scale)
+ * @param step the step increment value. Used when the arrow of a scrollbar is 
clicked, @n
+ * or when the keyboard arrows are pressed (for a scale)
  * @param page the page increment value. Used when the trough of a scrollbar 
is clicked, or when page up/down are pressed
  */
 void etk_range_increments_set(Etk_Range *range, double step, double page)
@@ -202,9 +213,20 @@
    range->page_increment = 0.0;
    range->page_size = 0.0;
 
+   range->change_value_job = NULL;
    range->value_changed = NULL;
 }
 
+/* Destroys the range */
+static void _etk_range_destructor(Etk_Range *range)
+{
+   if (!range)
+      return;
+   
+   if (range->change_value_job)
+      ecore_job_del(range->change_value_job);
+}
+
 /* Sets the property whose id is "property_id" to the value "value" */
 static void _etk_range_property_set(Etk_Object *object, int property_id, 
Etk_Property_Value *value)
 {
@@ -269,6 +291,26 @@
       default:
          break;
    }
+}
+
+/**************************
+ *
+ * Private functions
+ *
+ **************************/
+
+/* Emits the the "value changed" signal (doing it in a job to avoid emitting 
it too
+ often when the mouse is moved for scrollbars or sliders for example) */
+static void _etk_range_change_value_job_cb(void *data)
+{
+   Etk_Range *range;
+   
+   if (!(range = ETK_RANGE(data)))
+      return;
+   
+   etk_signal_emit(_etk_range_signals[ETK_RANGE_VALUE_CHANGED_SIGNAL], 
ETK_OBJECT(range), NULL, range->value);
+   etk_object_notify(ETK_OBJECT(range), "value");
+   range->change_value_job = NULL;
 }
 
 /** @} */
===================================================================
RCS file: /cvs/e/e17/proto/etk/src/lib/etk_range.h,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -3 -r1.6 -r1.7
--- etk_range.h 7 Apr 2006 15:36:11 -0000       1.6
+++ etk_range.h 12 Apr 2006 16:19:55 -0000      1.7
@@ -3,6 +3,7 @@
 #define _ETK_RANGE_H_
 
 #include "etk_widget.h"
+#include <Ecore_Job.h>
 #include "etk_types.h"
 
 /**
@@ -35,6 +36,7 @@
    double page_increment;
    double page_size;
 
+   Ecore_Job *change_value_job;
    void (*value_changed)(Etk_Range *range, double value);
 };
 




-------------------------------------------------------
This SF.Net email is sponsored by xPML, a groundbreaking scripting language
that extends applications into web and mobile media. Attend the live webcast
and join the prime developer group breaking into this new coding territory!
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=110944&bid=241720&dat=121642
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to