slider... horizontal only done right now - but complete. looks decent methinks.
SVN revision: 38972
|
@ -97,7 +97,18 @@ icon_delete.png \
|
|||
icon_edit.png \
|
||||
ilist_1.png \
|
||||
ilist_2.png \
|
||||
ilist_item_shadow.png
|
||||
ilist_item_shadow.png \
|
||||
sl_bg.png \
|
||||
sl_bg_over.png \
|
||||
sl_bt_0.png \
|
||||
sl_bt_1.png \
|
||||
sl_bt_2.png \
|
||||
sl_bt2_0_0.png \
|
||||
sl_bt2_0_1.png \
|
||||
sl_bt2_0_2.png \
|
||||
sl_bt2_1.png \
|
||||
sl_bt2_2.png \
|
||||
sl_units.png
|
||||
|
||||
default.edj: Makefile $(EXTRA_DIST)
|
||||
$(EDJE_CC) $(EDJE_FLAGS) \
|
||||
|
|
|
@ -5948,4 +5948,516 @@ collections {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
group { name: "elm/slider/horizontal/default";
|
||||
// FIXME: do this element properly theme-wise. this is just testing here
|
||||
images {
|
||||
image: "sl_bg.png" COMP;
|
||||
image: "sl_bg_over.png" COMP;
|
||||
image: "sl_bt_0.png" COMP;
|
||||
image: "sl_bt_1.png" COMP;
|
||||
image: "sl_bt_2.png" COMP;
|
||||
image: "sl_bt2_0_0.png" COMP;
|
||||
image: "sl_bt2_0_1.png" COMP;
|
||||
image: "sl_bt2_0_2.png" COMP;
|
||||
image: "sl_bt2_1.png" COMP;
|
||||
image: "sl_bt2_2.png" COMP;
|
||||
image: "sl_units.png" COMP;
|
||||
}
|
||||
parts {
|
||||
part { name: "base";
|
||||
mouse_events: 0;
|
||||
description { state: "default" 0.0;
|
||||
max: 99999 6;
|
||||
min: 0 6;
|
||||
rel1 { to: "bg";
|
||||
offset: 1 0;
|
||||
}
|
||||
rel2 { to: "bg";
|
||||
offset: -2 -1;
|
||||
}
|
||||
image.normal: "sl_bg.png";
|
||||
fill.smooth: 0;
|
||||
}
|
||||
}
|
||||
part { name: "level";
|
||||
type: RECT;
|
||||
mouse_events: 0;
|
||||
description { state: "default" 0.0;
|
||||
rel1.to: "base";
|
||||
rel2 {
|
||||
to_y: "base";
|
||||
to_x: "elm.dragable.slider";
|
||||
relative: 0.5 1.0;
|
||||
}
|
||||
color: 255 0 0 200;
|
||||
}
|
||||
description { state: "inverted" 0.0;
|
||||
inherit: "default" 0.0;
|
||||
visible: 0;
|
||||
}
|
||||
}
|
||||
part { name: "level2";
|
||||
type: RECT;
|
||||
mouse_events: 0;
|
||||
description { state: "default" 0.0;
|
||||
visible: 0;
|
||||
rel1 {
|
||||
to_y: "base";
|
||||
to_x: "elm.dragable.slider";
|
||||
relative: 0.5 0.0;
|
||||
}
|
||||
rel2.to: "base";
|
||||
color: 255 0 0 200;
|
||||
}
|
||||
description { state: "inverted" 0.0;
|
||||
inherit: "default" 0.0;
|
||||
visible: 1;
|
||||
}
|
||||
}
|
||||
part {
|
||||
name: "base_over";
|
||||
mouse_events: 0;
|
||||
description { state: "default" 0.0;
|
||||
rel1.to: "base";
|
||||
rel1.offset: -1 -1;
|
||||
rel2.to: "base";
|
||||
rel2.offset: 0 0;
|
||||
image {
|
||||
normal: "sl_bg_over.png";
|
||||
border: 3 3 3 3;
|
||||
}
|
||||
fill.smooth: 0;
|
||||
}
|
||||
}
|
||||
part { name: "bg";
|
||||
type: RECT;
|
||||
mouse_events: 0;
|
||||
scale: 1;
|
||||
description { state: "default" 0.0;
|
||||
visible: 0;
|
||||
rel1.to: "elm.swallow.bar";
|
||||
rel2.to: "elm.swallow.bar";
|
||||
color: 0 0 0 0;
|
||||
}
|
||||
}
|
||||
part { name: "elm.swallow.bar";
|
||||
type: SWALLOW;
|
||||
scale: 1;
|
||||
description { state: "default" 0.0;
|
||||
min: 48 24;
|
||||
max: 99999 24;
|
||||
align: 1.0 0.5;
|
||||
rel1 {
|
||||
to_x: "elm.text";
|
||||
relative: 1.0 0.0;
|
||||
offset: 2 0;
|
||||
}
|
||||
rel2 {
|
||||
to_x: "elm.units";
|
||||
relative: 0.0 1.0;
|
||||
offset: -3 -1;
|
||||
}
|
||||
}
|
||||
}
|
||||
part { name: "elm.swallow.content";
|
||||
type: SWALLOW;
|
||||
description { state: "default" 0.0;
|
||||
visible: 0;
|
||||
align: 0.0 0.5;
|
||||
rel1 {
|
||||
offset: 4 0;
|
||||
to_y: "elm.swallow.bar";
|
||||
}
|
||||
rel2 {
|
||||
offset: 3 -1;
|
||||
relative: 0.0 1.0;
|
||||
to_y: "elm.swallow.bar";
|
||||
}
|
||||
}
|
||||
description { state: "visible" 0.0;
|
||||
inherit: "default" 0.0;
|
||||
visible: 1;
|
||||
aspect: 1.0 1.0;
|
||||
aspect_preference: VERTICAL;
|
||||
rel2.offset: 4 -5;
|
||||
}
|
||||
}
|
||||
part { name: "elm.text";
|
||||
type: TEXT;
|
||||
mouse_events: 0;
|
||||
scale: 1;
|
||||
description { state: "default" 0.0;
|
||||
visible: 0;
|
||||
fixed: 1 1;
|
||||
align: 0.0 0.5;
|
||||
rel1.to_x: "elm.swallow.content";
|
||||
rel1.relative: 1.0 0.0;
|
||||
rel1.offset: -1 4;
|
||||
rel2.to_x: "elm.swallow.content";
|
||||
rel2.relative: 1.0 1.0;
|
||||
rel2.offset: -1 -5;
|
||||
color: 0 0 0 255;
|
||||
text {
|
||||
font: "Sans,Edje-Vera";
|
||||
size: 10;
|
||||
min: 0 0;
|
||||
align: 0.0 0.5;
|
||||
}
|
||||
}
|
||||
description { state: "visible" 0.0;
|
||||
inherit: "default" 0.0;
|
||||
visible: 1;
|
||||
text.min: 1 1;
|
||||
rel1.offset: 0 4;
|
||||
rel2.offset: 0 -5;
|
||||
}
|
||||
}
|
||||
part { name: "units";
|
||||
mouse_events: 0;
|
||||
description { state: "default" 0.0;
|
||||
visible: 0;
|
||||
rel1 {
|
||||
to_x: "elm.units";
|
||||
offset: 0 5;
|
||||
}
|
||||
image {
|
||||
normal: "sl_units.png";
|
||||
border: 0 5 3 8;
|
||||
}
|
||||
fill.smooth: 0;
|
||||
}
|
||||
description { state: "visible" 0.0;
|
||||
inherit: "default" 0.0;
|
||||
visible: 1;
|
||||
}
|
||||
}
|
||||
part { name: "elm.units";
|
||||
type: TEXT;
|
||||
mouse_events: 0;
|
||||
scale: 1;
|
||||
description { state: "default" 0.0;
|
||||
visible: 0;
|
||||
fixed: 1 1;
|
||||
align: 1.0 0.5;
|
||||
rel1.relative: 1.0 0.0;
|
||||
rel1.offset: 0 8;
|
||||
rel2.relative: 1.0 1.0;
|
||||
rel2.offset: 0 -9;
|
||||
color: 0 0 0 255;
|
||||
text {
|
||||
font: "Sans,Edje-Vera";
|
||||
size: 10;
|
||||
min: 0 0;
|
||||
align: 0.0 0.5;
|
||||
}
|
||||
}
|
||||
description { state: "visible" 0.0;
|
||||
inherit: "default" 0.0;
|
||||
fixed: 1 1;
|
||||
visible: 1;
|
||||
text.min: 1 1;
|
||||
rel1.offset: -5 0;
|
||||
rel2.offset: -5 -1;
|
||||
}
|
||||
}
|
||||
part { name: "elm.dragable.slider";
|
||||
type: RECT;
|
||||
mouse_events: 1;
|
||||
scale: 1;
|
||||
dragable {
|
||||
x: 1 1 0;
|
||||
y: 0 0 0;
|
||||
confine: "bg";
|
||||
}
|
||||
description { state: "default" 0.0;
|
||||
min: 24 24;
|
||||
max: 24 24;
|
||||
fixed: 1 1;
|
||||
rel1 {
|
||||
relative: 0.5 0.5;
|
||||
to: "bg";
|
||||
}
|
||||
rel2 {
|
||||
relative: 0.5 0.5;
|
||||
to: "bg";
|
||||
}
|
||||
color: 0 0 0 0;
|
||||
}
|
||||
}
|
||||
part { name: "button0";
|
||||
mouse_events: 0;
|
||||
description { state: "default" 0.0;
|
||||
max: 17 999;
|
||||
min: 17 24;
|
||||
rel1.to: "elm.dragable.slider";
|
||||
rel2.to: "elm.dragable.slider";
|
||||
image {
|
||||
normal: "sl_bt_0.png";
|
||||
border: 5 5 5 10;
|
||||
}
|
||||
fill.smooth: 0;
|
||||
}
|
||||
}
|
||||
part { name: "button1";
|
||||
mouse_events: 0;
|
||||
description { state: "default" 0.0;
|
||||
rel1.to: "button0";
|
||||
rel2 {
|
||||
to: "button0";
|
||||
relative: 1.0 0.5;
|
||||
offset: -1 -5;
|
||||
}
|
||||
image {
|
||||
normal: "sl_bt_1.png";
|
||||
border: 5 5 5 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
part { name: "button2";
|
||||
mouse_events: 0;
|
||||
description { state: "default" 0.0;
|
||||
rel1.to: "button0";
|
||||
rel2.to: "button0";
|
||||
image {
|
||||
normal: "sl_bt_2.png";
|
||||
border: 5 5 5 10;
|
||||
}
|
||||
fill.smooth: 0;
|
||||
}
|
||||
}
|
||||
part { name: "button3";
|
||||
mouse_events: 0;
|
||||
description { state: "default" 0.0;
|
||||
visible: 0;
|
||||
min: 8 32;
|
||||
align: 1.0 0.5;
|
||||
rel1 {
|
||||
to_x: "elm.indicator";
|
||||
to_y: "button4";
|
||||
relative: 0.0 0.0;
|
||||
offset: -7 0;
|
||||
}
|
||||
rel2 {
|
||||
to: "button4";
|
||||
relative: 0.0 1.0;
|
||||
offset: 0 -1;
|
||||
}
|
||||
image {
|
||||
normal: "sl_bt2_0_0.png";
|
||||
border: 6 0 6 12;
|
||||
}
|
||||
fill.smooth: 0;
|
||||
}
|
||||
description { state: "visible" 0.0;
|
||||
inherit: "default" 0.0;
|
||||
visible: 1;
|
||||
}
|
||||
}
|
||||
part { name: "button4";
|
||||
mouse_events: 0;
|
||||
description { state: "default" 0.0;
|
||||
visible: 0;
|
||||
max: 15 999;
|
||||
min: 15 32;
|
||||
rel1 {
|
||||
to_x: "elm.dragable.slider";
|
||||
to_y: "elm.indicator";
|
||||
offset: 0 -7;
|
||||
}
|
||||
rel2.to: "elm.dragable.slider";
|
||||
image {
|
||||
normal: "sl_bt2_0_1.png";
|
||||
border: 0 0 6 12;
|
||||
}
|
||||
fill.smooth: 0;
|
||||
}
|
||||
description { state: "visible" 0.0;
|
||||
inherit: "default" 0.0;
|
||||
visible: 1;
|
||||
}
|
||||
}
|
||||
part { name: "button5";
|
||||
mouse_events: 0;
|
||||
description { state: "default" 0.0;
|
||||
visible: 0;
|
||||
min: 8 32;
|
||||
align: 1.0 0.5;
|
||||
rel1 {
|
||||
to: "button4";
|
||||
relative: 1.0 0.0;
|
||||
offset: 0 0;
|
||||
}
|
||||
rel2 {
|
||||
to_x: "elm.indicator";
|
||||
to_y: "button4";
|
||||
relative: 1.0 1.0;
|
||||
offset: 6 -1;
|
||||
}
|
||||
image {
|
||||
normal: "sl_bt2_0_2.png";
|
||||
border: 0 6 6 12;
|
||||
}
|
||||
fill.smooth: 0;
|
||||
}
|
||||
description { state: "visible" 0.0;
|
||||
inherit: "default" 0.0;
|
||||
visible: 1;
|
||||
}
|
||||
}
|
||||
part { name: "elm.indicator";
|
||||
type: TEXT;
|
||||
mouse_events: 0;
|
||||
effect: SOFT_SHADOW;
|
||||
scale: 1;
|
||||
description { state: "default" 0.0;
|
||||
visible: 0;
|
||||
fixed: 1 1;
|
||||
align: 0.5 1.0;
|
||||
rel1 {
|
||||
to: "elm.dragable.slider";
|
||||
relative: 0.0 0.0;
|
||||
offset: 0 0;
|
||||
}
|
||||
rel2 {
|
||||
to_x: "elm.dragable.slider";
|
||||
relative: 1.0 0.0;
|
||||
offset: -1 0;
|
||||
}
|
||||
color: 224 224 224 255;
|
||||
color3: 0 0 0 64;
|
||||
text {
|
||||
font: "Sans,Edje-Vera";
|
||||
size: 10;
|
||||
min: 0 0;
|
||||
align: 0.5 0.5;
|
||||
}
|
||||
}
|
||||
description { state: "visible" 0.0;
|
||||
inherit: "default" 0.0;
|
||||
visible: 1;
|
||||
text.min: 1 1;
|
||||
rel1.offset: 0 -1;
|
||||
rel2.offset: -1 -1;
|
||||
}
|
||||
}
|
||||
part { name: "button6";
|
||||
mouse_events: 0;
|
||||
description { state: "default" 0.0;
|
||||
visible: 0;
|
||||
rel1.to: "button3";
|
||||
rel2 {
|
||||
to: "button5";
|
||||
relative: 1.0 0.3;
|
||||
offset: -1 -1;
|
||||
}
|
||||
image {
|
||||
normal: "sl_bt2_1.png";
|
||||
border: 5 5 5 0;
|
||||
}
|
||||
fill.smooth: 0;
|
||||
}
|
||||
description { state: "visible" 0.0;
|
||||
inherit: "default" 0.0;
|
||||
visible: 1;
|
||||
}
|
||||
}
|
||||
part { name: "button7";
|
||||
mouse_events: 0;
|
||||
description { state: "default" 0.0;
|
||||
visible: 0;
|
||||
rel1.to: "button3";
|
||||
rel2.to: "button5";
|
||||
image {
|
||||
normal: "sl_bt2_2.png";
|
||||
border: 5 5 5 0;
|
||||
middle: 0;
|
||||
}
|
||||
fill.smooth: 0;
|
||||
}
|
||||
description { state: "visible" 0.0;
|
||||
inherit: "default" 0.0;
|
||||
visible: 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
programs {
|
||||
program { name: "text_show";
|
||||
signal: "elm,state,text,visible";
|
||||
source: "elm";
|
||||
action: STATE_SET "visible" 0.0;
|
||||
target: "elm.text";
|
||||
}
|
||||
program { name: "text_hide";
|
||||
signal: "elm,state,text,hidden";
|
||||
source: "elm";
|
||||
action: STATE_SET "default" 0.0;
|
||||
target: "elm.text";
|
||||
}
|
||||
program { name: "icon_show";
|
||||
signal: "elm,state,icon,visible";
|
||||
source: "elm";
|
||||
action: STATE_SET "visible" 0.0;
|
||||
target: "elm.swallow.content";
|
||||
}
|
||||
program { name: "icon_hide";
|
||||
signal: "elm,state,icon,hidden";
|
||||
source: "elm";
|
||||
action: STATE_SET "default" 0.0;
|
||||
target: "elm.swallow.content";
|
||||
}
|
||||
program { name: "units_show";
|
||||
signal: "elm,state,units,visible";
|
||||
source: "elm";
|
||||
action: STATE_SET "visible" 0.0;
|
||||
target: "elm.units";
|
||||
target: "units";
|
||||
}
|
||||
program { name: "units_hide";
|
||||
signal: "elm,state,units,hidden";
|
||||
source: "elm";
|
||||
action: STATE_SET "default" 0.0;
|
||||
target: "elm.units";
|
||||
target: "units";
|
||||
}
|
||||
program { name: "invert_on";
|
||||
signal: "elm,state,inverted,on";
|
||||
source: "elm";
|
||||
action: STATE_SET "inverted" 0.0;
|
||||
target: "level";
|
||||
target: "level2";
|
||||
}
|
||||
program { name: "invert_off";
|
||||
signal: "elm,state,inverted,off";
|
||||
source: "elm";
|
||||
action: STATE_SET "default" 0.0;
|
||||
target: "level";
|
||||
target: "level2";
|
||||
}
|
||||
program { name: "val_show";
|
||||
signal: "mouse,down,*";
|
||||
source: "elm.dragable.slider";
|
||||
action: STATE_SET "visible" 0.0;
|
||||
target: "elm.indicator";
|
||||
target: "button3";
|
||||
target: "button4";
|
||||
target: "button5";
|
||||
target: "button6";
|
||||
target: "button7";
|
||||
}
|
||||
program { name: "val_hide";
|
||||
signal: "mouse,up,*";
|
||||
source: "elm.dragable.slider";
|
||||
action: STATE_SET "default" 0.0;
|
||||
target: "elm.indicator";
|
||||
target: "button3";
|
||||
target: "button4";
|
||||
target: "button5";
|
||||
target: "button6";
|
||||
target: "button7";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
After Width: | Height: | Size: 479 B |
After Width: | Height: | Size: 302 B |
After Width: | Height: | Size: 413 B |
After Width: | Height: | Size: 466 B |
After Width: | Height: | Size: 446 B |
After Width: | Height: | Size: 350 B |
After Width: | Height: | Size: 286 B |
After Width: | Height: | Size: 571 B |
After Width: | Height: | Size: 249 B |
After Width: | Height: | Size: 246 B |
After Width: | Height: | Size: 893 B |
|
@ -1898,8 +1898,8 @@ my_bt_27(void *data, Evas_Object *obj, void *event_info)
|
|||
Evas_Object *win, *bg, *bx, *fr, *lb;
|
||||
char buf[PATH_MAX];
|
||||
|
||||
win = elm_win_add(NULL, "scaling", ELM_WIN_BASIC);
|
||||
elm_win_title_set(win, "Scaling");
|
||||
win = elm_win_add(NULL, "scaling-2", ELM_WIN_BASIC);
|
||||
elm_win_title_set(win, "Scaling 2");
|
||||
elm_win_autodel_set(win, 1);
|
||||
|
||||
bg = elm_bg_add(win);
|
||||
|
@ -1955,6 +1955,74 @@ my_bt_27(void *data, Evas_Object *obj, void *event_info)
|
|||
evas_object_show(win);
|
||||
}
|
||||
|
||||
static void
|
||||
my_bt_28(void *data, Evas_Object *obj, void *event_info)
|
||||
{
|
||||
Evas_Object *win, *bg, *bx, *sl, *ic;
|
||||
char buf[PATH_MAX];
|
||||
|
||||
win = elm_win_add(NULL, "slider", ELM_WIN_BASIC);
|
||||
elm_win_title_set(win, "Slider");
|
||||
elm_win_autodel_set(win, 1);
|
||||
|
||||
bg = elm_bg_add(win);
|
||||
elm_win_resize_object_add(win, bg);
|
||||
evas_object_size_hint_weight_set(bg, 1.0, 1.0);
|
||||
evas_object_show(bg);
|
||||
|
||||
bx = elm_box_add(win);
|
||||
evas_object_size_hint_weight_set(bx, 1.0, 1.0);
|
||||
elm_win_resize_object_add(win, bx);
|
||||
evas_object_show(bx);
|
||||
|
||||
ic = elm_icon_add(win);
|
||||
snprintf(buf, sizeof(buf), "%s/images/logo_small.png", PACKAGE_DATA_DIR);
|
||||
elm_icon_file_set(ic, buf, NULL);
|
||||
evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
|
||||
sl = elm_slider_add(win);
|
||||
elm_slider_label_set(sl, "Label");
|
||||
elm_slider_icon_set(sl, ic);
|
||||
elm_slider_unit_format_set(sl, "%1.1f units");
|
||||
elm_slider_span_size_set(sl, 400);
|
||||
evas_object_size_hint_align_set(sl, -1.0, -1.0);
|
||||
evas_object_size_hint_weight_set(sl, 1.0, 1.0);
|
||||
elm_box_pack_end(bx, sl);
|
||||
evas_object_show(ic);
|
||||
evas_object_show(sl);
|
||||
|
||||
sl = elm_slider_add(win);
|
||||
elm_slider_label_set(sl, "Label 2");
|
||||
elm_slider_span_size_set(sl, 200);
|
||||
evas_object_size_hint_align_set(sl, -1.0, -1.0);
|
||||
evas_object_size_hint_weight_set(sl, 1.0, 1.0);
|
||||
elm_slider_indicator_format_set(sl, "%3.0f");
|
||||
elm_slider_min_max_set(sl, 50, 150);
|
||||
elm_slider_value_set(sl, 80);
|
||||
elm_slider_inverted_set(sl, 1);
|
||||
evas_object_size_hint_align_set(sl, 0.5, 0.5);
|
||||
evas_object_size_hint_weight_set(sl, 0.0, 0.0);
|
||||
elm_box_pack_end(bx, sl);
|
||||
evas_object_show(ic);
|
||||
evas_object_show(sl);
|
||||
|
||||
sl = elm_slider_add(win);
|
||||
elm_slider_label_set(sl, "Label 3");
|
||||
elm_slider_unit_format_set(sl, "units");
|
||||
elm_slider_span_size_set(sl, 200);
|
||||
evas_object_size_hint_align_set(sl, -1.0, -1.0);
|
||||
evas_object_size_hint_weight_set(sl, 1.0, 1.0);
|
||||
elm_slider_indicator_format_set(sl, "%3.0f");
|
||||
elm_slider_min_max_set(sl, 50, 150);
|
||||
elm_slider_value_set(sl, 80);
|
||||
elm_slider_inverted_set(sl, 1);
|
||||
elm_object_scale_set(sl, 2.0);
|
||||
elm_box_pack_end(bx, sl);
|
||||
evas_object_show(ic);
|
||||
evas_object_show(sl);
|
||||
|
||||
evas_object_show(win);
|
||||
}
|
||||
|
||||
static void
|
||||
my_win_main(void)
|
||||
{
|
||||
|
@ -2057,11 +2125,12 @@ my_win_main(void)
|
|||
elm_list_item_append(li, "Inwin 2", NULL, NULL, my_bt_25, NULL);
|
||||
elm_list_item_append(li, "Scaling", NULL, NULL, my_bt_26, NULL);
|
||||
elm_list_item_append(li, "Scaling 2", NULL, NULL, my_bt_27, NULL);
|
||||
elm_list_item_append(li, "Slider", NULL, NULL, my_bt_28, NULL);
|
||||
|
||||
elm_list_go(li);
|
||||
|
||||
/* set an initial window size */
|
||||
evas_object_resize(win, 320, 520);
|
||||
evas_object_resize(win, 312, 480);
|
||||
/* show the window */
|
||||
evas_object_show(win);
|
||||
}
|
||||
|
|
|
@ -474,6 +474,25 @@ extern "C" {
|
|||
/* smart callbacks called:
|
||||
* "clicked" - when the user clicks on a carousel item and becomes selected
|
||||
*/
|
||||
|
||||
EAPI Evas_Object *elm_slider_add(Evas_Object *parent);
|
||||
EAPI void elm_slider_label_set(Evas_Object *obj, const char *label);
|
||||
EAPI void elm_slider_icon_set(Evas_Object *obj, Evas_Object *icon);
|
||||
EAPI void elm_slider_span_size_set(Evas_Object *obj, Evas_Coord size);
|
||||
EAPI void elm_slider_unit_format_set(Evas_Object *obj, const char *format);
|
||||
EAPI void elm_slider_indicator_format_set(Evas_Object *obj, const char *indicator);
|
||||
EAPI void elm_slider_horizontal_set(Evas_Object *obj, Evas_Bool horizontal);
|
||||
EAPI void elm_slider_min_max_set(Evas_Object *obj, double min, double max);
|
||||
EAPI void elm_slider_value_set(Evas_Object *obj, double val);
|
||||
EAPI double elm_slider_value_get(Evas_Object *obj);
|
||||
EAPI void elm_slider_inverted_set(Evas_Object *obj, Evas_Bool inverted);
|
||||
|
||||
|
||||
/* smart callbacks called:
|
||||
* "changed" - when the slider value changes
|
||||
* "delay,changed" - when the slider value changed, but a small time after a change (use this if you only want to respond to a change once the slider is held still for a short while).
|
||||
*/
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
@ -527,6 +546,7 @@ extern "C" {
|
|||
// * progress bar widget
|
||||
// * generic "tacho" widget (set min/max labels - and up to 3 intermediate labels)
|
||||
// * status widget (busy, stalled, running, etc.)
|
||||
// * full window in window widget (so move/resize of window object does as you'd expect a child window to do within the canvas)
|
||||
//
|
||||
//// (improvements - low priority)
|
||||
// * need another sample theme
|
||||
|
|
|
@ -47,6 +47,7 @@ elm_photo.c \
|
|||
elm_toolbar.c \
|
||||
elm_list.c \
|
||||
elm_carousel.c \
|
||||
elm_slider.c \
|
||||
\
|
||||
elc_notepad.c \
|
||||
elc_anchorview.c \
|
||||
|
|
|
@ -0,0 +1,394 @@
|
|||
#include <Elementary.h>
|
||||
#include "elm_priv.h"
|
||||
|
||||
typedef struct _Widget_Data Widget_Data;
|
||||
|
||||
struct _Widget_Data
|
||||
{
|
||||
Evas_Object *slider;
|
||||
Evas_Object *icon;
|
||||
Evas_Object *spacer;
|
||||
const char *label;
|
||||
const char *units;
|
||||
const char *indicator;
|
||||
Evas_Bool horizontal : 1;
|
||||
Evas_Bool inverted : 1;
|
||||
double val, val_min, val_max;
|
||||
Ecore_Timer *delay;
|
||||
Evas_Coord size;
|
||||
};
|
||||
|
||||
static void _del_hook(Evas_Object *obj);
|
||||
static void _theme_hook(Evas_Object *obj);
|
||||
static void _sizing_eval(Evas_Object *obj);
|
||||
static void _changed_size_hints(void *data, Evas *e, Evas_Object *obj, void *event_info);
|
||||
static void _sub_del(void *data, Evas_Object *obj, void *event_info);
|
||||
static void _units_set(Evas_Object *obj);
|
||||
static void _indicator_set(Evas_Object *obj);
|
||||
|
||||
static void
|
||||
_del_hook(Evas_Object *obj)
|
||||
{
|
||||
Widget_Data *wd = elm_widget_data_get(obj);
|
||||
if (wd->label) eina_stringshare_del(wd->label);
|
||||
if (wd->indicator) eina_stringshare_del(wd->units);
|
||||
if (wd->delay) ecore_timer_del(wd->delay);
|
||||
free(wd);
|
||||
}
|
||||
|
||||
static void
|
||||
_theme_hook(Evas_Object *obj)
|
||||
{
|
||||
Widget_Data *wd = elm_widget_data_get(obj);
|
||||
if (wd->horizontal)
|
||||
_elm_theme_set(wd->slider, "slider", "horizontal", "default");
|
||||
else
|
||||
_elm_theme_set(wd->slider, "slider", "vertical", "default");
|
||||
if (wd->inverted)
|
||||
edje_object_signal_emit(wd->slider, "elm,state,inverted,on", "elm");
|
||||
else
|
||||
edje_object_signal_emit(wd->slider, "elm,state,inverted,off", "elm");
|
||||
if (wd->icon)
|
||||
edje_object_signal_emit(wd->slider, "elm,state,icon,visible", "elm");
|
||||
else
|
||||
edje_object_signal_emit(wd->slider, "elm,state,icon,hidden", "elm");
|
||||
if (wd->label)
|
||||
edje_object_signal_emit(wd->slider, "elm,state,text,visible", "elm");
|
||||
else
|
||||
edje_object_signal_emit(wd->slider, "elm,state,text,hidden", "elm");
|
||||
edje_object_part_text_set(wd->slider, "elm.text", wd->label);
|
||||
if (wd->units)
|
||||
edje_object_signal_emit(wd->slider, "elm,state,units,visible", "elm");
|
||||
else
|
||||
edje_object_signal_emit(wd->slider, "elm,state,units,hidden", "elm");
|
||||
if (wd->horizontal)
|
||||
evas_object_size_hint_min_set(wd->spacer, (double)wd->size * elm_widget_scale_get(obj) * _elm_config->scale, 1);
|
||||
else
|
||||
evas_object_size_hint_min_set(wd->spacer, 1, (double)wd->size * elm_widget_scale_get(obj) * _elm_config->scale);
|
||||
edje_object_part_swallow(wd->slider, "elm.swallow.bar", wd->spacer);
|
||||
_units_set(obj);
|
||||
edje_object_message_signal_process(wd->slider);
|
||||
edje_object_scale_set(wd->slider, elm_widget_scale_get(obj) * _elm_config->scale);
|
||||
_sizing_eval(obj);
|
||||
}
|
||||
|
||||
static void
|
||||
_sizing_eval(Evas_Object *obj)
|
||||
{
|
||||
Widget_Data *wd = elm_widget_data_get(obj);
|
||||
Evas_Coord minw = -1, minh = -1, maxw = -1, maxh = -1;
|
||||
|
||||
edje_object_size_min_calc(wd->slider, &minw, &minh);
|
||||
evas_object_size_hint_min_set(obj, minw, minh);
|
||||
evas_object_size_hint_max_set(obj, maxw, maxh);
|
||||
}
|
||||
|
||||
static void
|
||||
_changed_size_hints(void *data, Evas *e, Evas_Object *obj, void *event_info)
|
||||
{
|
||||
Widget_Data *wd = elm_widget_data_get(data);
|
||||
if (obj != wd->icon) return;
|
||||
edje_object_part_swallow(wd->slider, "elm.swallow.content", obj);
|
||||
_sizing_eval(data);
|
||||
}
|
||||
|
||||
static void
|
||||
_sub_del(void *data, Evas_Object *obj, void *event_info)
|
||||
{
|
||||
Widget_Data *wd = elm_widget_data_get(obj);
|
||||
Evas_Object *sub = event_info;
|
||||
if (sub == wd->icon)
|
||||
{
|
||||
edje_object_signal_emit(wd->slider, "elm,state,icon,hidden", "elm");
|
||||
evas_object_event_callback_del
|
||||
(sub, EVAS_CALLBACK_CHANGED_SIZE_HINTS, _changed_size_hints);
|
||||
wd->icon = NULL;
|
||||
_sizing_eval(obj);
|
||||
}
|
||||
}
|
||||
|
||||
static int
|
||||
_delay_change(void *data)
|
||||
{
|
||||
Widget_Data *wd = elm_widget_data_get(data);
|
||||
wd->delay = NULL;
|
||||
evas_object_smart_callback_call(data, "delay,changed", NULL);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
_val_fetch(Evas_Object *obj)
|
||||
{
|
||||
Widget_Data *wd = elm_widget_data_get(obj);
|
||||
double posx = 0.0, posy = 0.0, pos = 0.0, val;
|
||||
|
||||
edje_object_part_drag_value_get(wd->slider, "elm.dragable.slider",
|
||||
&posx, &posy);
|
||||
if (wd->horizontal) pos = posx;
|
||||
else pos = posy;
|
||||
if (wd->inverted) pos = 1.0 - pos;
|
||||
val = (pos * (wd->val_max - wd->val_min)) + wd->val_min;
|
||||
if (val != wd->val)
|
||||
{
|
||||
wd->val = val;
|
||||
evas_object_smart_callback_call(obj, "changed", NULL);
|
||||
if (wd->delay) ecore_timer_del(wd->delay);
|
||||
wd->delay = ecore_timer_add(0.2, _delay_change, obj);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
_val_set(Evas_Object *obj)
|
||||
{
|
||||
Widget_Data *wd = elm_widget_data_get(obj);
|
||||
double pos;
|
||||
if (wd->val_max > wd->val_min)
|
||||
pos = (wd->val - wd->val_min) / (wd->val_max - wd->val_min);
|
||||
else
|
||||
pos = 0.0;
|
||||
if (pos < 0.0) pos = 0.0;
|
||||
else if (pos > 1.0) pos = 1.0;
|
||||
if (wd->inverted) pos = 1.0 - pos;
|
||||
edje_object_part_drag_value_set(wd->slider, "elm.dragable.slider", pos, pos);
|
||||
}
|
||||
|
||||
static void
|
||||
_units_set(Evas_Object *obj)
|
||||
{
|
||||
Widget_Data *wd = elm_widget_data_get(obj);
|
||||
if (wd->units)
|
||||
{
|
||||
char buf[1024];
|
||||
|
||||
snprintf(buf, sizeof(buf), wd->units, wd->val);
|
||||
edje_object_part_text_set(wd->slider, "elm.units", buf);
|
||||
}
|
||||
else
|
||||
edje_object_part_text_set(wd->slider, "elm.units", NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
_indicator_set(Evas_Object *obj)
|
||||
{
|
||||
Widget_Data *wd = elm_widget_data_get(obj);
|
||||
if (wd->indicator)
|
||||
{
|
||||
char buf[1024];
|
||||
|
||||
snprintf(buf, sizeof(buf), wd->indicator, wd->val);
|
||||
edje_object_part_text_set(wd->slider, "elm.indicator", buf);
|
||||
}
|
||||
else
|
||||
edje_object_part_text_set(wd->slider, "elm.indicator", NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
_drag(void *data, Evas_Object *obj, const char *emission, const char *source)
|
||||
{
|
||||
_val_fetch(data);
|
||||
_units_set(data);
|
||||
_indicator_set(data);
|
||||
}
|
||||
|
||||
static void
|
||||
_drag_start(void *data, Evas_Object *obj, const char *emission, const char *source)
|
||||
{
|
||||
_val_fetch(data);
|
||||
_units_set(data);
|
||||
_indicator_set(data);
|
||||
}
|
||||
|
||||
static void
|
||||
_drag_stop(void *data, Evas_Object *obj, const char *emission, const char *source)
|
||||
{
|
||||
_val_fetch(data);
|
||||
_units_set(data);
|
||||
_indicator_set(data);
|
||||
}
|
||||
|
||||
EAPI Evas_Object *
|
||||
elm_slider_add(Evas_Object *parent)
|
||||
{
|
||||
Evas_Object *obj;
|
||||
Evas *e;
|
||||
Widget_Data *wd;
|
||||
|
||||
wd = ELM_NEW(Widget_Data);
|
||||
e = evas_object_evas_get(parent);
|
||||
obj = elm_widget_add(e);
|
||||
elm_widget_data_set(obj, wd);
|
||||
elm_widget_del_hook_set(obj, _del_hook);
|
||||
elm_widget_theme_hook_set(obj, _theme_hook);
|
||||
|
||||
wd->horizontal = 1;
|
||||
wd->val = 0.0;
|
||||
wd->val_min = 0.0;
|
||||
wd->val_max = 1.0;
|
||||
|
||||
wd->slider = edje_object_add(e);
|
||||
_elm_theme_set(wd->slider, "slider", "horizontal", "default");
|
||||
elm_widget_resize_object_set(obj, wd->slider);
|
||||
edje_object_signal_callback_add(wd->slider, "drag", "*", _drag, obj);
|
||||
edje_object_signal_callback_add(wd->slider, "drag,start", "*", _drag_start, obj);
|
||||
edje_object_signal_callback_add(wd->slider, "drag,stop", "*", _drag_stop, obj);
|
||||
edje_object_signal_callback_add(wd->slider, "drag,step", "*", _drag_stop, obj);
|
||||
edje_object_signal_callback_add(wd->slider, "drag,set", "*", _drag_stop, obj);
|
||||
edje_object_part_drag_value_set(wd->slider, "elm.dragable.slider", 0.0, 0.0);
|
||||
|
||||
wd->spacer = evas_object_rectangle_add(e);
|
||||
evas_object_color_set(wd->spacer, 0, 0, 0, 0);
|
||||
evas_object_pass_events_set(wd->spacer, 1);
|
||||
elm_widget_sub_object_add(obj, wd->spacer);
|
||||
edje_object_part_swallow(wd->slider, "elm.swallow.bar", wd->spacer);
|
||||
|
||||
evas_object_smart_callback_add(obj, "sub-object-del", _sub_del, obj);
|
||||
|
||||
_sizing_eval(obj);
|
||||
return obj;
|
||||
}
|
||||
|
||||
EAPI void
|
||||
elm_slider_label_set(Evas_Object *obj, const char *label)
|
||||
{
|
||||
Widget_Data *wd = elm_widget_data_get(obj);
|
||||
|
||||
if (wd->label) eina_stringshare_del(wd->label);
|
||||
if (label)
|
||||
{
|
||||
wd->label = eina_stringshare_add(label);
|
||||
edje_object_signal_emit(wd->slider, "elm,state,text,visible", "elm");
|
||||
edje_object_message_signal_process(wd->slider);
|
||||
}
|
||||
else
|
||||
{
|
||||
wd->label = NULL;
|
||||
edje_object_signal_emit(wd->slider, "elm,state,text,hidden", "elm");
|
||||
edje_object_message_signal_process(wd->slider);
|
||||
}
|
||||
edje_object_part_text_set(wd->slider, "elm.text", label);
|
||||
_sizing_eval(obj);
|
||||
}
|
||||
|
||||
EAPI void
|
||||
elm_slider_icon_set(Evas_Object *obj, Evas_Object *icon)
|
||||
{
|
||||
Widget_Data *wd = elm_widget_data_get(obj);
|
||||
if ((wd->icon != icon) && (wd->icon))
|
||||
elm_widget_sub_object_del(obj, wd->icon);
|
||||
wd->icon = icon;
|
||||
if (icon)
|
||||
{
|
||||
elm_widget_sub_object_add(obj, icon);
|
||||
edje_object_part_swallow(wd->slider, "elm.swallow.content", icon);
|
||||
edje_object_signal_emit(wd->slider, "elm,state,icon,visible", "elm");
|
||||
evas_object_event_callback_add(icon, EVAS_CALLBACK_CHANGED_SIZE_HINTS,
|
||||
_changed_size_hints, obj);
|
||||
_sizing_eval(obj);
|
||||
}
|
||||
}
|
||||
|
||||
EAPI void
|
||||
elm_slider_span_size_set(Evas_Object *obj, Evas_Coord size)
|
||||
{
|
||||
Widget_Data *wd = elm_widget_data_get(obj);
|
||||
if (wd->size == size) return;
|
||||
wd->size = size;
|
||||
if (wd->horizontal)
|
||||
evas_object_size_hint_min_set(wd->spacer, (double)wd->size * elm_widget_scale_get(obj) * _elm_config->scale, 1);
|
||||
else
|
||||
evas_object_size_hint_min_set(wd->spacer, 1, (double)wd->size * elm_widget_scale_get(obj) * _elm_config->scale);
|
||||
edje_object_part_swallow(wd->slider, "elm.swallow.bar", wd->spacer);
|
||||
_sizing_eval(obj);
|
||||
}
|
||||
|
||||
EAPI void
|
||||
elm_slider_unit_format_set(Evas_Object *obj, const char *units)
|
||||
{
|
||||
Widget_Data *wd = elm_widget_data_get(obj);
|
||||
if (wd->units) eina_stringshare_del(wd->units);
|
||||
if (units)
|
||||
{
|
||||
wd->units = eina_stringshare_add(units);
|
||||
edje_object_signal_emit(wd->slider, "elm,state,units,visible", "elm");
|
||||
edje_object_message_signal_process(wd->slider);
|
||||
}
|
||||
else
|
||||
{
|
||||
wd->units = NULL;
|
||||
edje_object_signal_emit(wd->slider, "elm,state,units,hidden", "elm");
|
||||
edje_object_message_signal_process(wd->slider);
|
||||
}
|
||||
_units_set(obj);
|
||||
_sizing_eval(obj);
|
||||
}
|
||||
|
||||
EAPI void
|
||||
elm_slider_indicator_format_set(Evas_Object *obj, const char *indicator)
|
||||
{
|
||||
Widget_Data *wd = elm_widget_data_get(obj);
|
||||
if (wd->indicator) eina_stringshare_del(wd->indicator);
|
||||
if (indicator) wd->indicator = eina_stringshare_add(indicator);
|
||||
else wd->indicator = NULL;
|
||||
_indicator_set(obj);
|
||||
}
|
||||
|
||||
EAPI void
|
||||
elm_slider_horizontal_set(Evas_Object *obj, Evas_Bool horizontal)
|
||||
{
|
||||
Widget_Data *wd = elm_widget_data_get(obj);
|
||||
horizontal = !!horizontal;
|
||||
if (wd->horizontal == horizontal) return;
|
||||
wd->horizontal = horizontal;
|
||||
_theme_hook(obj);
|
||||
}
|
||||
|
||||
EAPI void
|
||||
elm_slider_min_max_set(Evas_Object *obj, double min, double max)
|
||||
{
|
||||
Widget_Data *wd = elm_widget_data_get(obj);
|
||||
if ((wd->val_min == min) && (wd->val_max == max)) return;
|
||||
wd->val_min = min;
|
||||
wd->val_max = max;
|
||||
if (wd->val < wd->val_min) wd->val = wd->val_min;
|
||||
if (wd->val > wd->val_max) wd->val = wd->val_max;
|
||||
_val_set(obj);
|
||||
_units_set(obj);
|
||||
_indicator_set(obj);
|
||||
}
|
||||
|
||||
EAPI void
|
||||
elm_slider_value_set(Evas_Object *obj, double val)
|
||||
{
|
||||
Widget_Data *wd = elm_widget_data_get(obj);
|
||||
if (wd->val == val) return;
|
||||
wd->val = val;
|
||||
if (wd->val < wd->val_min) wd->val = wd->val_min;
|
||||
if (wd->val > wd->val_max) wd->val = wd->val_max;
|
||||
_val_set(obj);
|
||||
_units_set(obj);
|
||||
_indicator_set(obj);
|
||||
}
|
||||
|
||||
EAPI double
|
||||
elm_slider_value_get(Evas_Object *obj)
|
||||
{
|
||||
Widget_Data *wd = elm_widget_data_get(obj);
|
||||
return wd->val;
|
||||
}
|
||||
|
||||
EAPI void
|
||||
elm_slider_inverted_set(Evas_Object *obj, Evas_Bool inverted)
|
||||
{
|
||||
Widget_Data *wd = elm_widget_data_get(obj);
|
||||
inverted = !!inverted;
|
||||
if (wd->inverted == inverted) return;
|
||||
wd->inverted = inverted;
|
||||
if (wd->inverted)
|
||||
edje_object_signal_emit(wd->slider, "elm,state,inverted,on", "elm");
|
||||
else
|
||||
edje_object_signal_emit(wd->slider, "elm,state,inverted,off", "elm");
|
||||
edje_object_message_signal_process(wd->slider);
|
||||
_val_set(obj);
|
||||
_units_set(obj);
|
||||
_indicator_set(obj);
|
||||
}
|