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