rendered paste bodyalias test {
if (!$window(@sb)) {
;Window isn't open, create it
window -ak0hdBpfo +d @sb -1 -1 220 50
}
else {
;Clear it
clear @sb
}
;Scroll bar coordinates
set %sb.x 10
set %sb.y 10
set %sb.w 200
set %sb.h 30
;Scroll bar handle coordinates
set %sb.h.x 10
set %sb.h.y 10
set %sb.h.w 30
set %sb.h.h 30
;Draw it
draw.scroll.bar
}
alias draw.scroll.bar {
;Draw some rectangles
drawrect -rfn @sb $rgb(100,100,100) 1 %sb.x %sb.y %sb.w %sb.h
drawrect -rfn @sb $rgb(50,50,50) 1 %sb.h.x %sb.h.y %sb.h.w %sb.h.h
drawdot @sb
}
menu @sb {
sclick {
if ($inrect($mouse.x,$mouse.y,%sb.x,%sb.y,%sb.w,%sb.h)) {
;Mouse is in scrollbar coords.
if ($inrect($mouse.x,$mouse.y,%sb.h.x,%sb.h.y,%sb.h.w,%sb.h.h)) {
;Mouse is in scrollbar handle coords.
var %x,%scrollbar.percent,%scrollbar.handle.percent
while ($mouse.key & 1) && ($whilefix) {
%x = $calc($mouse.x - %sb.x)
%scrollbar.percent = $int($calc((%x / %sb.w) * 100))
%x = $calc($mouse.x - %sb.h.x)
%scrollbar.handle.percent = $int($calc((%x / %sb.h.w) * 100))
if (%scrollbar.percent isnum 0-100) && (%scrollbar.handle.percent isnum 0-100) {
;No errors.
scroll.bar.position %scrollbar.handle.percent %scrollbar.percent
draw.scroll.bar
}
}
}
else {
;We need to step in the direction of $mouse.y, worry about this later.
}
}
}
}
alias scroll.bar.position {
var %pos = $calc(($2 / 100) * %sb.w)
if (%pos isnum $+(%sb.x, -, $calc(%sb.x + %sb.w - %sb.h.w))) {
;It's a valid position.
%sb.h.x = %pos
}
}