From 04a3737a3c832233210ae7fbf5b8fa1fc0f5857d Mon Sep 17 00:00:00 2001 From: Carsten Haitzler Date: Thu, 17 Nov 2005 08:34:33 +0000 Subject: [PATCH] first step - slider smart and minimal theme stuff. i need to make the gfx proper and do a label area. SVN revision: 18516 --- data/themes/Makefile.am | 3 +- data/themes/default.edc | 1 + data/themes/default_slider.edc | 383 ++++++++++++++++++++++++ src/bin/Makefile.am | 4 +- src/bin/e_includes.h | 1 + src/bin/e_slider.c | 526 +++++++++++++++++++++++++++++++++ src/bin/e_slider.h | 26 ++ src/bin/e_test.c | 32 ++ 8 files changed, 974 insertions(+), 2 deletions(-) create mode 100644 data/themes/default_slider.edc create mode 100644 src/bin/e_slider.c create mode 100644 src/bin/e_slider.h diff --git a/data/themes/Makefile.am b/data/themes/Makefile.am index 5760d7425..5ce963ff1 100644 --- a/data/themes/Makefile.am +++ b/data/themes/Makefile.am @@ -47,7 +47,8 @@ default_frame.edc \ default_label.edc \ default_button.edc \ default_scrollframe.edc \ -default_ilist.edc +default_ilist.edc \ +default_slider.edc default.edj: Makefile $(EXTRA_DIST) $(EDJE_CC) $(EDJE_FLAGS) \ diff --git a/data/themes/default.edc b/data/themes/default.edc index 8ec7a26ea..d4e0b4245 100644 --- a/data/themes/default.edc +++ b/data/themes/default.edc @@ -56,5 +56,6 @@ collections { #include "default_label.edc" #include "default_scrollframe.edc" #include "default_ilist.edc" +#include "default_slider.edc" } diff --git a/data/themes/default_slider.edc b/data/themes/default_slider.edc new file mode 100644 index 000000000..2b6ed26e7 --- /dev/null +++ b/data/themes/default_slider.edc @@ -0,0 +1,383 @@ +images { + image: "e17_ibar_bg_v.png" COMP; + image: "e17_ibar_over_v.png" COMP; + image: "e17_sb_btd1.png" COMP; + image: "e17_sb_btd2.png" COMP; + image: "e17_sb_btu1.png" COMP; + image: "e17_sb_btu2.png" COMP; + image: "e17_sb_btl1.png" COMP; + image: "e17_sb_btl2.png" COMP; + image: "e17_sb_btr1.png" COMP; + image: "e17_sb_btr2.png" COMP; + image: "e17_sb_btu1.png" COMP; + image: "e17_sb_barh1.png" COMP; + image: "e17_sb_barh2.png" COMP; + image: "e17_sb_barv1.png" COMP; + image: "e17_sb_barv2.png" COMP; + image: "e17_sb_runnerh.png" COMP; + image: "e17_sb_runnerv.png" COMP; + image: "e17_scrollbar_hdrag_thumb.png" COMP; + image: "e17_scrollbar_vdrag_thumb.png" COMP; + image: "focus.png" COMP; +} + +group { + name: "widgets/slider_vertical"; + parts { + part { + name: "sb_vbar"; + type: RECT; + mouse_events: 0; + description { + state: "default" 0.0; + min: 16 16; + } + } + part { + name: "sb_vbar_base"; + type: RECT; + clip_to: "sb_vbar"; + mouse_events: 1; + description { + state: "default" 0.0; + color: 0 0 0 0; + } + } + part { + name: "sb_vbar_runner"; + clip_to: "sb_vbar"; + mouse_events: 0; + description { + state: "default" 0.0; + max: 2 99999; + rel1 { + to: "sb_vbar_base"; + } + rel2 { + to: "sb_vbar_base"; + } + image { + normal: "e17_sb_runnerv.png"; + border: 0 0 4 4; + } + fill { + smooth: 0; + } + } + } + part { + name: "sb_vbar_p1"; + type: RECT; + clip_to: "sb_vbar"; + mouse_events: 1; + description { + state: "default" 0.0; + color: 0 0 0 0; + rel2 { + relative: 1.0 0.0; + offset: -1 -1; + to: "slider"; + } + } + } + part { + name: "sb_vbar_p2"; + type: RECT; + clip_to: "sb_vbar"; + mouse_events: 1; + description { + state: "default" 0.0; + color: 0 0 0 0; + rel1 { + relative: 0.0 1.0; + offset: 0 0; + to: "slider"; + } + } + } + part { + name: "slider"; + clip_to: "sb_vbar"; + mouse_events: 1; + dragable { + x: 0 0 0; + y: 1 1 0; + confine: "sb_vbar_base"; + } + description { + state: "default" 0.0; + min: 16 16; + rel1 { + relative: 0.5 0.5; + offset: 0 0; + to: "sb_vbar_base"; + } + rel2 { + relative: 0.5 0.5; + offset: 0 0; + to: "sb_vbar_base"; + } + image { + normal: "e17_sb_barv1.png"; + border: 5 5 5 5; + } + } + description { + state: "clicked" 0.0; + inherit: "default" 0.0; + image { + normal: "e17_sb_barv2.png"; + } + } + } + part { + name: "focus"; + mouse_events: 0; + description { + state: "default" 0.0; + visible: 0; + color: 255 255 255 0; + image { + normal: "focus.png"; + border: 7 7 7 7; + middle: 0; + } + fill { + smooth: 0; + } + } + description { + state: "focused" 0.0; + inherit: "default" 0.0; + visible: 1; + color: 255 255 255 255; + } + } + } + programs { + program { + name: "sb_vbar_p1_down"; + signal: "mouse,down,1"; + source: "sb_vbar_p1"; + action: DRAG_VAL_PAGE 0.0 -1.0; + target: "slider"; + } + program { + name: "sb_vbar_p2_down"; + signal: "mouse,down,1"; + source: "sb_vbar_p2"; + action: DRAG_VAL_PAGE 0.0 1.0; + target: "slider"; + } + program { + name: "sb_vbar_down"; + signal: "mouse,down,1"; + source: "slider"; + action: STATE_SET "clicked" 0.0; + target: "slider"; + } + program { + name: "sb_vbar_up"; + signal: "mouse,up,1"; + source: "slider"; + action: STATE_SET "default" 0.0; + target: "slider"; + } + program { + name: "focus_in"; + signal: "focus_in"; + source: ""; + action: STATE_SET "focused" 0.0; + transition: DECELERATE 0.2; + target: "focus"; + } + program { + name: "focus_out"; + signal: "focus_out"; + source: ""; + action: STATE_SET "default" 0.0; + transition: ACCELERATE 0.5; + target: "focus"; + } + } +} +group { + name: "widgets/slider_horizontal"; + parts { + part { + name: "sb_hbar"; + type: RECT; + mouse_events: 0; + description { + state: "default" 0.0; + min: 16 16; + } + } + part { + name: "sb_hbar_base"; + type: RECT; + clip_to: "sb_hbar"; + mouse_events: 1; + description { + state: "default" 0.0; + color: 0 0 0 0; + } + } + part { + name: "sb_hbar_runner"; + clip_to: "sb_hbar"; + mouse_events: 0; + description { + state: "default" 0.0; + max: 99999 2; + rel1 { + to: "sb_hbar_base"; + } + rel2 { + to: "sb_hbar_base"; + } + image { + normal: "e17_sb_runnerh.png"; + border: 4 4 0 0; + } + fill { + smooth: 0; + } + } + } + part { + name: "sb_hbar_p1"; + type: RECT; + clip_to: "sb_hbar"; + mouse_events: 1; + description { + state: "default" 0.0; + color: 0 0 0 0; + rel2 { + relative: 0.0 1.0; + offset: -1 -1; + to: "slider"; + } + } + } + part { + name: "sb_hbar_p2"; + type: RECT; + clip_to: "sb_hbar"; + mouse_events: 1; + description { + state: "default" 0.0; + color: 0 0 0 0; + rel1 { + relative: 1.0 0.0; + offset: 0 0; + to: "slider"; + } + } + } + part { + name: "slider"; + clip_to: "sb_hbar"; + mouse_events: 1; + dragable { + x: 1 1 0; + y: 0 0 0; + confine: "sb_hbar_base"; + } + description { + state: "default" 0.0; + min: 16 16; + rel1 { + relative: 0.5 0.5; + offset: 0 0; + to: "sb_hbar_base"; + } + rel2 { + relative: 0.5 0.5; + offset: 0 0; + to: "sb_hbar_base"; + } + image { + normal: "e17_sb_barh1.png"; + border: 5 5 5 5; + } + } + description { + state: "clicked" 0.0; + inherit: "default" 0.0; + image { + normal: "e17_sb_barh2.png"; + } + } + } + part { + name: "focus"; + mouse_events: 0; + description { + state: "default" 0.0; + visible: 0; + color: 255 255 255 0; + image { + normal: "focus.png"; + border: 7 7 7 7; + middle: 0; + } + fill { + smooth: 0; + } + } + description { + state: "focused" 0.0; + inherit: "default" 0.0; + visible: 1; + color: 255 255 255 255; + } + } + } + programs { + program { + name: "sb_hbar_p1_down"; + signal: "mouse,down,1"; + source: "sb_hbar_p1"; + action: DRAG_VAL_PAGE -1.0 0.0; + target: "slider"; + } + program { + name: "sb_hbar_p2_down"; + signal: "mouse,down,1"; + source: "sb_hbar_p2"; + action: DRAG_VAL_PAGE 1.0 0.0; + target: "slider"; + } + program { + name: "sb_hbar_down"; + signal: "mouse,down,1"; + source: "slider"; + action: STATE_SET "clicked" 0.0; + target: "slider"; + } + program { + name: "sb_hbar_up"; + signal: "mouse,up,1"; + source: "slider"; + action: STATE_SET "default" 0.0; + target: "slider"; + } + program { + name: "focus_in"; + signal: "focus_in"; + source: ""; + action: STATE_SET "focused" 0.0; + transition: DECELERATE 0.2; + target: "focus"; + } + program { + name: "focus_out"; + signal: "focus_out"; + source: ""; + action: STATE_SET "default" 0.0; + transition: ACCELERATE 0.5; + target: "focus"; + } + } +} diff --git a/src/bin/Makefile.am b/src/bin/Makefile.am index e50ca4f35..910c156be 100644 --- a/src/bin/Makefile.am +++ b/src/bin/Makefile.am @@ -112,7 +112,8 @@ e_int_border_menu.h \ e_ilist.h \ e_livethumb.h \ e_int_border_border.h \ -e_widget_ilist.h +e_widget_ilist.h \ +e_slider.h enlightenment_src = \ e_user.c \ @@ -206,6 +207,7 @@ e_ilist.c \ e_livethumb.c \ e_int_border_border.c \ e_widget_ilist.c \ +e_slider.c \ $(ENLIGHTENMENTHEADERS) enlightenment_SOURCES = \ diff --git a/src/bin/e_includes.h b/src/bin/e_includes.h index 16565a138..e9fd366e1 100644 --- a/src/bin/e_includes.h +++ b/src/bin/e_includes.h @@ -93,3 +93,4 @@ #include "e_livethumb.h" #include "e_int_border_border.h" #include "e_widget_ilist.h" +#include "e_slider.h" diff --git a/src/bin/e_slider.c b/src/bin/e_slider.c new file mode 100644 index 000000000..c6b4da59d --- /dev/null +++ b/src/bin/e_slider.c @@ -0,0 +1,526 @@ +/* + * vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2 + */ +#include "e.h" + +#define SMART_NAME "e_slider" +#define API_ENTRY E_Smart_Data *sd; sd = evas_object_smart_data_get(obj); if ((!obj) || (!sd) || (evas_object_type_get(obj) && strcmp(evas_object_type_get(obj), SMART_NAME))) +#define INTERNAL_ENTRY E_Smart_Data *sd; sd = evas_object_smart_data_get(obj); if (!sd) return; +typedef struct _E_Smart_Data E_Smart_Data; + +struct _E_Smart_Data +{ + Evas_Coord x, y, w, h; + + Evas_Object *smart_obj; + Evas_Object *edje_obj; + double val, val_min, val_max, step_size; + int reversed, step_count, horizontal; + char *format; + Evas_Coord minw, minh; + Ecore_Timer *set_timer; +}; + +/* local subsystem functions */ +static int _e_smart_set_timer(void *data); +static void _e_smart_value_update(E_Smart_Data *sd); +static void _e_smart_value_update_now(E_Smart_Data *sd); +static void _e_smart_value_fetch(E_Smart_Data *sd); +static void _e_smart_value_limit(E_Smart_Data *sd); +static void _e_smart_format_update(E_Smart_Data *sd); +static void _e_smart_signal_cb_drag(void *data, Evas_Object *obj, const char *emission, const char *source); +static void _e_smart_signal_cb_drag_start(void *data, Evas_Object *obj, const char *emission, const char *source); +static void _e_smart_signal_cb_drag_stop(void *data, Evas_Object *obj, const char *emission, const char *source); +static void _e_smart_event_key_down(void *data, Evas *e, Evas_Object *obj, void *event_info); +static void _e_smart_reconfigure(E_Smart_Data *sd); +static void _e_smart_add(Evas_Object *obj); +static void _e_smart_del(Evas_Object *obj); +static void _e_smart_move(Evas_Object *obj, Evas_Coord x, Evas_Coord y); +static void _e_smart_resize(Evas_Object *obj, Evas_Coord w, Evas_Coord h); +static void _e_smart_show(Evas_Object *obj); +static void _e_smart_hide(Evas_Object *obj); +static void _e_smart_color_set(Evas_Object *obj, int r, int g, int b, int a); +static void _e_smart_clip_set(Evas_Object *obj, Evas_Object * clip); +static void _e_smart_clip_unset(Evas_Object *obj); +static void _e_smart_init(void); + +/* local subsystem globals */ +static Evas_Smart *_e_smart = NULL; + +/* externally accessible functions */ +Evas_Object * +e_slider_add(Evas *evas) +{ + _e_smart_init(); + return evas_object_smart_add(evas, _e_smart); +} + +void +e_slider_orientation_set(Evas_Object *obj, int horizontal) +{ + API_ENTRY return; + if (sd->horizontal == horizontal) return; + sd->horizontal = horizontal; + if (sd->horizontal) + e_theme_edje_object_set(sd->edje_obj, "base/theme/widgets", + "widgets/slider_horizontal"); + else + e_theme_edje_object_set(sd->edje_obj, "base/theme/widgets", + "widgets/slider_vertical"); + edje_object_size_min_calc(sd->edje_obj, &(sd->minw), &(sd->minh)); + _e_smart_value_update(sd); +} + +int +e_slider_orientation_get(Evas_Object *obj) +{ + API_ENTRY return 0; + return sd->horizontal; +} + +void +e_slider_value_set(Evas_Object *obj, double val) +{ + API_ENTRY return; + sd->val = val; + _e_smart_value_update_now(sd); +} + +double +e_slider_value_get(Evas_Object *obj) +{ + API_ENTRY return 0.0; + return sd->val; +} + +void +e_slider_value_range_set(Evas_Object *obj, double min, double max) +{ + API_ENTRY return; + sd->val_min = min; + sd->val_max = max; + if (sd->val_max < sd->val_min) sd->val_min = sd->val_max; + _e_smart_value_limit(sd); + _e_smart_value_update_now(sd); +} + +void +e_slider_value_range_get(Evas_Object *obj, double *min, double *max) +{ + API_ENTRY return; + if (min) *min = sd->val_min; + if (max) *max = sd->val_max; +} + +void +e_slider_value_step_size_set(Evas_Object *obj, double step_size) +{ + double step; + + API_ENTRY return; + if (step_size < 0.0) step_size = 0.0; + sd->step_size = step_size; + step = 0.0; + if (sd->val_max > sd->val_min) + step = step_size / (sd->val_max - sd->val_min); + edje_object_part_drag_step_set(sd->edje_obj, "slider", step, step); + _e_smart_value_limit(sd); + _e_smart_value_update_now(sd); +} + +double +e_slider_value_step_size_get(Evas_Object *obj) +{ + API_ENTRY return 0.0; + return sd->step_size; +} + +void +e_slider_value_step_count_set(Evas_Object *obj, int step_count) +{ + API_ENTRY return; + sd->step_count = step_count; + _e_smart_value_limit(sd); + _e_smart_value_update_now(sd); +} + +int +e_slider_value_step_count_get(Evas_Object *obj) +{ + API_ENTRY return 0; + return sd->step_count; +} + +void +e_slider_value_format_display_set(Evas_Object *obj, const char *format) +{ + int changed = 0; + + API_ENTRY return; + if (((sd->format) && (!format)) || ((!sd->format) && (format))) changed = 1; + E_FREE(sd->format); + sd->format = NULL; + if (format) sd->format = strdup(format); + if (changed) + { + if (sd->format) + edje_object_signal_emit(sd->edje_obj, "show_label", ""); + else + edje_object_signal_emit(sd->edje_obj, "hide_label", ""); + } + _e_smart_format_update(sd); +} + +const char * +e_slider_value_format_display_get(Evas_Object *obj) +{ + API_ENTRY return NULL; + return sd->format; +} + +void +e_slider_direction_set(Evas_Object *obj, int reversed) +{ + API_ENTRY return; + sd->reversed = reversed; + _e_smart_value_update_now(sd); +} + +int +e_slider_direction_get(Evas_Object *obj) +{ + API_ENTRY return 0; + return sd->reversed; +} + +void +e_slider_min_size_get(Evas_Object *obj, Evas_Coord *minw, Evas_Coord *minh) +{ + API_ENTRY return; + if (minw) *minw = sd->minw; + if (minh) *minh = sd->minh; +} + +/* local subsystem functions */ +static int +_e_smart_set_timer(void *data) +{ + E_Smart_Data *sd; + double pos = 0.0; + + sd = data; + if (sd->val_max > sd->val_min) + pos = (sd->val - sd->val_min) / (sd->val_max - sd->val_min); + if (pos < 0.0) pos = 0.0; + else if (pos > 1.0) pos = 1.0; + if (sd->reversed) pos = 1.0 - pos; + edje_object_part_drag_value_set(sd->edje_obj, "slider", pos, pos); + sd->set_timer = NULL; + return 0; +} + +static void +_e_smart_value_update(E_Smart_Data *sd) +{ + if (sd->set_timer) ecore_timer_del(sd->set_timer); + sd->set_timer = ecore_timer_add(0.05, _e_smart_set_timer, sd); +} + +static void +_e_smart_value_update_now(E_Smart_Data *sd) +{ + if (sd->set_timer) ecore_timer_del(sd->set_timer); + _e_smart_set_timer(sd); +} + +static void +_e_smart_value_fetch(E_Smart_Data *sd) +{ + double posx = 0.0, posy = 0.0, pos = 0.0; + + edje_object_part_drag_value_get(sd->edje_obj, "slider", &posx, &posy); + if (sd->horizontal) pos = posx; + else pos = posy; + sd->val = (pos * (sd->val_max - sd->val_min)) + sd->val_min; +} + +static void +_e_smart_value_limit(E_Smart_Data *sd) +{ + if (sd->val < sd->val_min) sd->val = sd->val_min; + if (sd->val > sd->val_max) sd->val = sd->val_max; + if (sd->val_max > sd->val_min) + { + if (sd->step_count > 0) + { + double p, s; + double v1, v2; + + p = sd->val_min; + s = (sd->val_max - sd->val_min) / sd->step_count; + v1 = sd->val_min; + v2 = sd->val_max; + while (p <= sd->val_max) + { + p += s; + if ((p <= sd->val) && ((sd->val - p) < (sd->val - v1))) + v1 = p; + if ((p >= sd->val) && ((p - sd->val) < (v2 - sd->val))) + v2 = p; + } + if ((sd->val - v1) < (v2 - sd->val)) + sd->val = v1; + else + sd->val = v2; + } + else if (sd->step_size > 0.0) + { + double p, s; + double v1, v2; + + p = sd->val_min; + s = sd->step_size; + v1 = sd->val_min; + v2 = sd->val_max; + while (p <= sd->val_max) + { + p += s; + if ((p <= sd->val) && ((sd->val - p) < (sd->val - v1))) + v1 = p; + if ((p >= sd->val) && ((p - sd->val) < (v2 - sd->val))) + v2 = p; + } + if ((sd->val - v1) < (v2 - sd->val)) + sd->val = v1; + else + sd->val = v2; + } + } +} + +static void +_e_smart_format_update(E_Smart_Data *sd) +{ + if (sd->format) + { + char buf[256]; + + snprintf(buf, sizeof(buf), sd->format, sd->val); + edje_object_part_text_set(sd->edje_obj, "label", buf); + } +} + +static void +_e_smart_signal_cb_drag(void *data, Evas_Object *obj, const char *emission, const char *source) +{ + E_Smart_Data *sd; + double pval; + + sd = data; + pval = sd->val; + _e_smart_value_fetch(sd); + _e_smart_value_limit(sd); + _e_smart_format_update(sd); + if (sd->val != pval) + evas_object_smart_callback_call(sd->smart_obj, "changed", NULL); +} + +static void +_e_smart_signal_cb_drag_start(void *data, Evas_Object *obj, const char *emission, const char *source) +{ + E_Smart_Data *sd; + double pval; + + sd = data; + pval = sd->val; + _e_smart_value_fetch(sd); + _e_smart_value_limit(sd); + _e_smart_format_update(sd); + if (sd->val != pval) + evas_object_smart_callback_call(sd->smart_obj, "changed", NULL); +} + +static void +_e_smart_signal_cb_drag_stop(void *data, Evas_Object *obj, const char *emission, const char *source) +{ + E_Smart_Data *sd; + double pval; + + sd = data; + pval = sd->val; + _e_smart_value_fetch(sd); + _e_smart_value_limit(sd); + _e_smart_format_update(sd); + _e_smart_value_update(sd); + if (sd->val != pval) + evas_object_smart_callback_call(sd->smart_obj, "changed", NULL); +} + +static void +_e_smart_event_key_down(void *data, Evas *e, Evas_Object *obj, void *event_info) +{ + Evas_Event_Key_Down *ev; + E_Smart_Data *sd; + + sd = data; + ev = event_info; + if ((!strcmp(ev->keyname, "Up")) || + (!strcmp(ev->keyname, "Left"))) + { + if (sd->step_count > 0) + { + double s; + + s = (sd->val_max - sd->val_min) / sd->step_count; + edje_object_part_drag_step(sd->edje_obj, "slider", -s, -s); + } + else + edje_object_part_drag_step(sd->edje_obj, "slider", -sd->step_size, -sd->step_size); + } + else if ((!strcmp(ev->keyname, "Down")) || + (!strcmp(ev->keyname, "Right"))) + { + if (sd->step_count > 0) + { + double s; + + s = (sd->val_max - sd->val_min) / sd->step_count; + edje_object_part_drag_step(sd->edje_obj, "slider", s, s); + } + else + edje_object_part_drag_step(sd->edje_obj, "slider", sd->step_size, sd->step_size); + } +} + +static void +_e_smart_reconfigure(E_Smart_Data *sd) +{ + evas_object_move(sd->edje_obj, sd->x, sd->y); + evas_object_resize(sd->edje_obj, sd->w, sd->h); +} + +static void +_e_smart_add(Evas_Object *obj) +{ + E_Smart_Data *sd; + Evas_Object *o; + + sd = calloc(1, sizeof(E_Smart_Data)); + if (!sd) return; + evas_object_smart_data_set(obj, sd); + + sd->smart_obj = obj; + sd->x = 0; + sd->y = 0; + sd->w = 0; + sd->h = 0; + + sd->val = 0.0; + sd->val_min = 0.0; + sd->val_max = 1.0; + sd->step_size = 0.01; + sd->reversed = 0; + sd->step_count = 0; + sd->horizontal = 0; + sd->format = NULL; + + sd->edje_obj = edje_object_add(evas_object_evas_get(obj)); + e_theme_edje_object_set(sd->edje_obj, "base/theme/widgets", + "widgets/slider_vertical"); + edje_object_size_min_calc(sd->edje_obj, &(sd->minw), &(sd->minh)); + evas_object_smart_member_add(sd->edje_obj, obj); + + edje_object_signal_callback_add(sd->edje_obj, "drag", "*", _e_smart_signal_cb_drag, sd); + edje_object_signal_callback_add(sd->edje_obj, "drag,start", "*", _e_smart_signal_cb_drag_start, sd); + edje_object_signal_callback_add(sd->edje_obj, "drag,stop", "*", _e_smart_signal_cb_drag_stop, sd); + edje_object_signal_callback_add(sd->edje_obj, "drag,step", "*", _e_smart_signal_cb_drag_stop, sd); + edje_object_signal_callback_add(sd->edje_obj, "drag,set", "*", _e_smart_signal_cb_drag_stop, sd); + + evas_object_event_callback_add(obj, EVAS_CALLBACK_KEY_DOWN, _e_smart_event_key_down, sd); +} + +static void +_e_smart_del(Evas_Object *obj) +{ + INTERNAL_ENTRY; + evas_object_del(sd->edje_obj); + E_FREE(sd->format); + if (sd->set_timer) ecore_timer_del(sd->set_timer); + free(sd); +} + +static void +_e_smart_move(Evas_Object *obj, Evas_Coord x, Evas_Coord y) +{ + INTERNAL_ENTRY; + if ((sd->x == x) && (sd->y == y)) return; + sd->x = x; + sd->y = y; + _e_smart_reconfigure(sd); +} + +static void +_e_smart_resize(Evas_Object *obj, Evas_Coord w, Evas_Coord h) +{ + INTERNAL_ENTRY; + if ((sd->w == w) && (sd->h == h)) return; + sd->w = w; + sd->h = h; + _e_smart_reconfigure(sd); +} + +static void +_e_smart_show(Evas_Object *obj) +{ + INTERNAL_ENTRY; + evas_object_show(sd->edje_obj); +} + +static void +_e_smart_hide(Evas_Object *obj) +{ + INTERNAL_ENTRY; + evas_object_hide(sd->edje_obj); +} + +static void +_e_smart_color_set(Evas_Object *obj, int r, int g, int b, int a) +{ + INTERNAL_ENTRY; + evas_object_color_set(sd->edje_obj, r, g, b, a); +} + +static void +_e_smart_clip_set(Evas_Object *obj, Evas_Object * clip) +{ + INTERNAL_ENTRY; + evas_object_clip_set(sd->edje_obj, clip); +} + +static void +_e_smart_clip_unset(Evas_Object *obj) +{ + INTERNAL_ENTRY; + evas_object_clip_unset(sd->edje_obj); +} + +/* never need to touch this */ + +static void +_e_smart_init(void) +{ + if (_e_smart) return; + _e_smart = evas_smart_new(SMART_NAME, + _e_smart_add, + _e_smart_del, + NULL, NULL, NULL, NULL, NULL, + _e_smart_move, + _e_smart_resize, + _e_smart_show, + _e_smart_hide, + _e_smart_color_set, + _e_smart_clip_set, + _e_smart_clip_unset, + NULL); +} + diff --git a/src/bin/e_slider.h b/src/bin/e_slider.h new file mode 100644 index 000000000..054172f6d --- /dev/null +++ b/src/bin/e_slider.h @@ -0,0 +1,26 @@ +/* + * vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2 + */ +#ifdef E_TYPEDEFS +#else +#ifndef E_SLIDER_H +#define E_SLIDER_H + +EAPI Evas_Object *e_slider_add (Evas *evas); +EAPI void e_slider_orientation_set (Evas_Object *obj, int horizontal); +EAPI int e_slider_orientation_get (Evas_Object *obj); +EAPI void e_slider_value_set (Evas_Object *obj, double val); +EAPI double e_slider_value_get (Evas_Object *obj); +EAPI void e_slider_value_range_set (Evas_Object *obj, double min, double max); +EAPI void e_slider_value_range_get (Evas_Object *obj, double *min, double *max); +EAPI void e_slider_value_step_size_set (Evas_Object *obj, double step_size); +EAPI double e_slider_value_step_size_get (Evas_Object *obj); +EAPI void e_slider_value_step_count_set (Evas_Object *obj, int step_count); +EAPI int e_slider_value_step_count_get (Evas_Object *obj); +EAPI void e_slider_value_format_display_set (Evas_Object *obj, const char *format); +EAPI const char *e_slider_value_format_display_get (Evas_Object *obj); +EAPI void e_slider_direction_set (Evas_Object *obj, int reversed); +EAPI int e_slider_direction_get (Evas_Object *obj); +EAPI void e_slider_min_size_get (Evas_Object *obj, Evas_Coord *minw, Evas_Coord *minh); +#endif +#endif diff --git a/src/bin/e_test.c b/src/bin/e_test.c index 6ad7cc431..4d8f9840d 100644 --- a/src/bin/e_test.c +++ b/src/bin/e_test.c @@ -500,6 +500,38 @@ _e_test_internal(E_Container *con) evas_object_focus_set(o, 1); } +#elif 0 +static void +_e_test_cb_e_smart_pan_changed_hook(void *data, Evas_Object *obj, void *event_info) +{ + printf("VAL: %3.3f\n", e_slider_value_get(obj)); +} + +static void +_e_test_internal(E_Container *con) +{ + E_Dialog *dia; + Evas_Object *o; + + dia = e_dialog_new(con); + e_dialog_title_set(dia, "A Test Dialog"); + + o = e_slider_add(dia->win->evas); + e_slider_orientation_set(o, 1); + e_slider_value_set(o, 0.5); + e_slider_value_step_count_set(o, 4); + e_slider_value_format_display_set(o, "%1.1f V"); + evas_object_smart_callback_add(o, "changed", _e_test_cb_e_smart_pan_changed_hook, NULL); + evas_object_show(o); + + e_dialog_content_set(dia, o, 240, 16); + + e_dialog_button_add(dia, "OK", NULL, NULL, NULL); + e_win_centered_set(dia->win, 1); + e_dialog_show(dia); + + evas_object_focus_set(o, 1); +} #else static void _e_test_internal(E_Container *con)