blob: b4eead029328f26a4fdc8d952a500e679e5db554 [file] [log] [blame]
/*
Copyright (C) 2008,2009 INdT - Instituto Nokia de Tecnologia
This file is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public License
along with this library; see the file COPYING.LIB. If not, write to
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA.
*/
group {
name: "scrollbar.vertical";
min: 0 0; /* if > 0, this is the minimum size that will be allocated.
* If wants to draw on top, just overflow usign edje's rel1/rel2
*/
images {
image: "widget/scrollbar/scrollbar_v.png" COMP;
image: "widget/scrollbar/scrollbar_knob_v.png" COMP;
}
script {
public hide_timer;
public hide_timer_cb(val) {
run_program(PROGRAM:"hide");
return 0;
}
public hide_timer_stop() {
new id = get_int(hide_timer);
if (id <= 0)
return;
cancel_timer(id);
set_int(hide_timer, 0);
}
public hide_timer_start() {
set_int(hide_timer, timer(1.0, "hide_timer_cb", 0));
}
public message(Msg_Type:type, id, ...) {
if ((id == 0) && (type == MSG_FLOAT_SET)) {
new Float:vy, Float:sy;
vy = getfarg(2);
sy = getfarg(3);
if (vy >= 0.0) {
set_drag_size(PART:"img.knob", 1.0, sy);
set_drag(PART:"img.knob", 0.0, vy);
run_program(PROGRAM:"show");
} else
run_program(PROGRAM:"hide");
hide_timer_stop();
hide_timer_start();
}
}
public update_drag_pos() {
new Float:x, Float:y;
get_drag(PART:"img.knob", x, y);
send_message(MSG_FLOAT, 1, y);
}
}
parts {
part {
name: "rect.base";
type: RECT;
description {
min: 10 0;
max: 10 999999;
align: 1.0 0.5;
state: "default" 0.0;
color: 255 255 255 0;
}
}
part {
name: "rect.clipper";
type: RECT;
description {
state: "default" 0.0;
color: 255 255 255 255;
rel1.to: "rect.base";
rel2.to: "rect.base";
}
description {
state: "hidden" 0.0;
color: 255 255 255 64;
rel1.to: "rect.base";
rel2.to: "rect.base";
}
}
part {
name: "img.scrollbar";
type: IMAGE;
mouse_events: 0;
clip_to: "rect.clipper";
description {
state: "default" 0.0;
min: 1 30;
max: 1 999999;
align: 0.5 0.5;
image {
normal: "widget/scrollbar/scrollbar_v.png";
border: 0 0 15 15;
middle: SOLID;
}
rel1.to: "rect.base";
rel2.to: "rect.base";
}
}
part {
name: "rect.knobarea";
type: RECT;
description {
state: "default" 0.0;
color: 255 255 255 0;
min: 5 5;
max: 5 999999;
align: 0.5 0.5;
rel1.to: "rect.base";
rel2.to: "rect.base";
}
}
part {
name: "img.knob";
type: IMAGE;
mouse_events: 1;
clip_to: "rect.clipper";
dragable {
x: 0 0 0;
y: 1 1 0;
confine: "rect.knobarea";
}
description {
state: "default" 0.0;
min: 5 5;
max: 5 999999;
align: 0.5 0.5;
image {
normal: "widget/scrollbar/scrollbar_knob_v.png";
border: 3 3 3 3;
middle: SOLID;
}
}
}
}
programs {
program {
name: "load";
signal: "load";
action: STATE_SET "hidden" 0.0;
target: "rect.clipper";
}
program {
name: "hide";
action: STATE_SET "hidden" 0.0;
transition: ACCELERATE 0.5;
target: "rect.clipper";
}
program {
name: "show";
action: STATE_SET "default" 0.0;
target: "rect.clipper";
}
program {
name: "dragged";
signal: "drag";
source: "img.knob";
script {
update_drag_pos();
}
}
}
}
group {
name: "scrollbar.horizontal";
min: 0 0; /* if > 0, this is the minimum size that will be allocated.
* If wants to draw on top, just overflow usign edje's rel1/rel2
*/
images {
image: "widget/scrollbar/scrollbar_h.png" COMP;
image: "widget/scrollbar/scrollbar_knob_h.png" COMP;
}
script {
public hide_timer;
public hide_timer_cb(val) {
run_program(PROGRAM:"hide");
return 0;
}
public hide_timer_stop() {
new id = get_int(hide_timer);
if (id <= 0)
return;
cancel_timer(id);
set_int(hide_timer, 0);
}
public hide_timer_start() {
set_int(hide_timer, timer(1.0, "hide_timer_cb", 0));
}
public message(Msg_Type:type, id, ...) {
if ((id == 0) && (type == MSG_FLOAT_SET)) {
new Float:vx, Float:sx;
vx = getfarg(2);
sx = getfarg(3);
if (vx >= 0.0) {
set_drag_size(PART:"img.knob", sx, 1.0);
set_drag(PART:"img.knob", vx, 0.0);
run_program(PROGRAM:"show");
} else
run_program(PROGRAM:"hide");
hide_timer_stop();
hide_timer_start();
}
}
public update_drag_pos() {
new Float:x, Float:y;
get_drag(PART:"img.knob", x, y);
send_message(MSG_FLOAT, 1, x);
}
}
parts {
part {
name: "rect.base";
type: RECT;
description {
state: "default" 0.0;
min: 0 10;
max: 999999 10;
align: 0.5 1.0;
color: 255 255 255 0;
}
}
part {
name: "rect.clipper";
type: RECT;
description {
state: "default" 0.0;
color: 255 255 255 255;
rel1.to: "rect.base";
rel2.to: "rect.base";
}
description {
state: "hidden" 0.0;
color: 255 255 255 64;
rel1.to: "rect.base";
rel2.to: "rect.base";
}
}
part {
name: "img.scrollbar";
type: IMAGE;
mouse_events: 0;
clip_to: "rect.clipper";
description {
state: "default" 0.0;
min: 30 1;
max: 999999 1;
align: 0.5 0.5;
image {
normal: "widget/scrollbar/scrollbar_h.png";
border: 15 15 0 0;
middle: SOLID;
}
rel1.to: "rect.base";
rel2.to: "rect.base";
}
}
part {
name: "rect.knobarea";
type: RECT;
description {
state: "default" 0.0;
color: 255 255 255 0;
min: 5 5;
max: 999999 5;
align: 0.5 0.5;
rel1.to: "rect.base";
rel2.to: "rect.base";
}
}
part {
name: "img.knob";
type: IMAGE;
mouse_events: 1;
clip_to: "rect.clipper";
dragable {
x: 1 1 0;
y: 0 0 0;
confine: "rect.knobarea";
}
description {
state: "default" 0.0;
min: 5 5;
max: 999999 5;
image {
normal: "widget/scrollbar/scrollbar_knob_h.png";
border: 3 3 3 3;
middle: SOLID;
}
}
}
}
programs {
program {
name: "load";
signal: "load";
action: STATE_SET "hidden" 0.0;
target: "rect.clipper";
}
program {
name: "hide";
action: STATE_SET "hidden" 0.0;
transition: ACCELERATE 0.5;
target: "rect.clipper";
}
program {
name: "show";
action: STATE_SET "default" 0.0;
target: "rect.clipper";
}
program {
name: "dragged";
signal: "drag";
source: "img.knob";
script {
update_drag_pos();
}
}
}
}