rendered paste body/*
DYNAMIC PICWIN
*/
alias math.PI {
return 3.1415926535897932384626433832795
}
alias -l dynpw {
if ($isid) {
return $iif($2 != $null,$hget(dynpw,$+($1,.,$2)),$hget(dynpw,$+($1,.DYNPW_LAYER)))
}
if ($3 != $null) {
hadd -m dynpw $+($1,.,$2) $3-
}
else {
hadd -m dynpw $1-
}
}
alias -l dynpwDel {
hdel dynpw $+($1,.,$2)
}
alias dynpwCircle {
;(rad,ainc,a,enda,speed,slant)
var %rad = $2
var %ainc = $3
var %a = $4
var %enda = $5
var %speed = $6
var %slant = $7
if (%slant == %null) var %slant = 0
dynpw $1 rad %rad
dynpw $1 ainc %ainc
dynpw $1 a %a
dynpw $1 b $calc(%slant * $Math.PI / 180)
dynpw $1 u $calc(%rad * $cos($calc(%a * $Math.PI / 180)))
dynpw $1 v $calc(%rad * $sin($calc(%a * $Math.PI / 180)))
dynpw $1 enda %enda
dynpw $1 speed %speed
startCircle $1
}
alias -l startCircle {
if (!$dynpw($1,Cactive)) {
; if (this.cx!=null && this.cy!=null) { this.xc=this.cx - (this.u*Math.cos(this.b) - this.v*Math.sin(this.b))
; this.yc=this.cy + (this.u*Math.sin(this.a) + this.v*Math.cos(this.b))
; this.a = this.LastAngle?this.LastAngle:this.a
; }
; else {
dynpw $1 xc $calc($dynpw($1,x) - ($dynpw($1,u) * $cos($dynpw($1,b)) - $dynpw($1,v) * $sin($dynpw($1,b))))
dynpw $1 yc $calc($dynpw($1,y) + ($dynpw($1,u) * $sin($dynpw($1,a)) + $dynpw($1,v) * $cos($dynpw($1,b))))
; }
if ($dynpw($1,enda) != $null) {
dynpw $1 ainc $abs($dynpw($1,ainc))
if ($dynpw($1,enda) < $dynpw($1,a)) dynpw $1 ainc $calc($dynpw($1,ainc) * -1)
}
dynpw $1 Cactive $true
}
if ($abs($dynpw($1,ainc)) < $abs($calc($dynpw($1,enda) - $dynpw($1,a))) ) {
dynpw $1 a $calc($dynpw($1,a) + $dynpw($1,ainc))
dynpw $1 u $calc($dynpw($1,rad) * $cos($calc($dynpw($1,a) * $Math.PI / 180)))
dynpw $1 v $calc($dynpw($1,rad) * $sin($calc($dynpw($1,a) * $Math.PI / 180)))
var %x = $calc($dynpw($1,xc) + ($dynpw($1,u) * $cos($dynpw($1,b)) - $dynpw($1,v) * $sin($dynpw($1,b))))
var %y = $calc($dynpw($1,yc) - ($dynpw($1,u) * $sin($dynpw($1,b)) + $dynpw($1,v) * $cos($dynpw($1,b))))
dynpwmoveTo $1 %x %y
; if (this.onCircle) this.onCircle()
.timer -h 1 $dynpw($1,speed) startcircle $1
; ID=setTimeout(this.obj + ".startCircle()",this.speed)
}
else {
if ($dynpw($1,enda) != $null) {
dynpw $1 u $calc($dynpw($1,rad) * $cos($calc($dynpw($1,enda) * $Math.PI / 180)))
dynpw $1 v $calc($dynpw($1,rad) * $sin($calc($dynpw($1,enda) * $Math.PI / 180)))
var %x $calc($dynpw($1,xc) + ($dynpw($1,u) * $cos($dynpw($1,b)) - $dynpw($1,v) * $sin($dynpw($1,b))))
var %y $calc($dynpw($1,yc) - ($dynpw($1,u) * $sin($dynpw($1,b)) + $dynpw($1,v) * $cos($dynpw($1,b))))
; LastAngle = this.enda
dynpwmoveTo $1 %x %y
}
dynpwdel $1 rad
dynpwdel $1 ainc
dynpwdel $1 a
dynpwdel $1 b
dynpwdel $1 u
dynpwdel $1 v
dynpwdel $1 enda
dynpwdel $1 speed
dynpwdel $1 Cactive
; if (this.onCircleStop) {
; this.onCircleStop()
; }
}
}
alias -l dynpwSlide {
;(endx,endy,inc,speed)
var %endx = $2
var %endy = $3
var %inc = $4
var %speed = $5
if (!$dynpw($1,slideActive)) {
var %distx = $calc($2 - $dynpw($1,x))
var %disty = $calc($3 - $dynpw($1,y))
var %num = $calc($sqrt($calc((%distx ^ 2) + (%disty ^ 2))) / %inc)
if (%num == 0) { return }
var %dx = $calc(%distx / %num)
var %dy = $calc(%disty / %num)
dynpw $1 slideActive $true
dynpwSlideStart $1 %dx %dy %endx %endy %num 1 %speed
}
}
alias -l dynpwSlideStart {
; function(dx,dy,endx,endy,num,i,speed) {
var %dx = $2
var %dy = $3
var %endx = $4
var %endy = $5
var %num = $6
var %i = $7
var %speed = $8
if (!$dynpw($1,slideActive)) { return }
if (%i < %num) {
inc %i
dynpwmoveTo $1 $calc($getLayer($1).x + %dx) $calc($getLayer($1).y + %dy)
.timer -h 1 %speed dynpwslidestart $1 %dx %dy %endx %endy %num %i %speed
}
else {
dynpwmoveTo $1 %endx %endy
dynpw $1 slideActive $false
if ($dynpw($1,onSlideStop) != $null ) {
$dynpw($1,onSlideStop) $1
}
}
}
alias -l dynpwmoveTo {
if (!$dynpw($1)) { return }
if ($dynpw($1,type) ) {
drawrect -f $gettok($1,1,46) 1 1 $dynpw($1,x) $dynpw($1,y) $dynpw($1,w) $dynpw($1,h)
$dynpw($1,type) $2 $3 $dynpw($1,w) $dynpw($1,h)
dynpw $1 x $2
dynpw $1 y $3
redrawdynpw $gettok($1,1,46)
return
}
dynpw $1 x $2
dynpw $1 y $3
}
alias -l dynpwsetDim {
if (!$dynpw($1)) { return }
if ($dynpw($1,type)) {
drawrect -f 0 $gettok($1,1,46) 1 $dynpw($1,x) $dynpw($1,y) $dynpw($1,w) $dynpw($1,h)
$dynpw($1,type) $dynpw($1,x) $dynpw($1,y) $2 $3
}
dynpw $1 w $2
dynpw $1 h $3
}
alias redrawdynpw {
var %__i = 1
while ($hfind(dynpw,$+($1,.,*,.DYNPW_LAYER),%__i,w)) {
var %layer = $gettok($ifmatch,1-2,46)
$dynpw(%layer,type) $dynpw(%layer,x) $dynpw(%layer,y) $dynpw(%layer,w) $dynpw(%layer,h)
var %__j = 1
while ($dynpw(%layer,$+(layer.,%__j))) {
tokenize 32 $ifmatch
$1-5 $calc($dynpw(%layer,x) + 2) $calc($dynpw(%layer,y) + 2) $6
inc %__j
}
inc %__i
}
}
alias getLayer {
if (!$dynpw($+($1,.,$2),DYNPW_LAYER) && !$dynpw($1,DYNPW_LAYER)) { echo -s Error : getLayer : window $1 doesn't have a layer $2 | return }
if (!$prop) { return $dynpw($+($1,.,$2,DYNPW_LAYER)) }
if (!$dynpw($1,DYNPW_LAYER)) {
var %layer = $+($1,.,$2)
}
else { var %layer = $1 }
var %prop = $gettok($prop,1,40)
if (%prop == moveTo) {
tokenize 44 $remove($gettok($prop,2,40),$chr(41))
dynpwmoveTo %layer $1 $2
}
else if (%prop == setDim) {
tokenize 44 $remove($gettok($prop,2,40),$chr(41))
dynpwsetDim %layer $1 $2
}
else if (%prop == x) { return $dynpw(%layer,x) }
else if (%prop == y) { return $dynpw(%layer,y) }
else if (%prop == w) { return $dynpw(%layer,w) }
else if (%prop == h) { return $dynpw(%layer,h) }
else if (%prop == moveBy) {
tokenize 44 $remove($gettok($prop,2,40),$chr(41))
dynpwmoveTo %layer $calc($dynpw(%layer,x) + $1) $calc($dynpw(%layer,y) + $2)
}
else if (%prop == Slide) {
tokenize 44 $remove($gettok($prop,2,40),$chr(41))
dynpwslide %layer $1-
}
else if (%prop == setOnClick) {
return hadd dynpw $+(%layer,.onClick)
}
else if (%prop == setOnSlideStop) {
return hadd dynpw $+(%layer,.onSlideStop)
}
elseif (%prop == onClick()) {
$dynpw(%layer,onClick)
}
else if (%prop == circle) {
tokenize 44 $remove($gettok($prop,2,40),$chr(41))
dynpwcircle %layer $1-
}
else if (%prop == makeDragable) {
dynpw %layer drag $true
dynpw %layer onClick dynpw.startDrag %layer
}
else if (%prop == noDrag) {
dynpwdel %layer drag
dynpw %layer onClick .
}
else if (%prop == write) {
tokenize 44 $remove($gettok($prop,2,40),$chr(41))
var %j = 1
while ($dynpw(%layer,$+(layer.,%j))) {
inc %j
}
dynpw %layer $+(layer.,%j) drawtext $gettok(%layer,1,46) $2 $3 $4 $1
return drawtext $gettok(%layer,1,46) $2 $3 $4 $calc($dynpw(%layer,x) + 1) $calc($dynpw(%layer,y) + 1) $1
}
}
alias dynpw.startDrag {
dynpw $1 dsx $calc($mouse.x - $dynpw($1,x))
dynpw $1 dsy $calc($mouse.y - $dynpw($1,y))
dynpw $1 dragging $true
}
alias dynpw.checkOnClick {
var %i = 1
var %zIndex
while ($hfind(dynpw,$+($active,.,*onClick),%i,w) != $null) {
var %layer = $gettok($ifmatch,1-2,46)
var %ifmatch = $ifmatch
if ($gettok($ifmatch,1,46 == $1)) {
var %x = $dynpw(%layer,x)
var %y = $dynpw(%layer,y)
var %w = $dynpw(%layer,w)
var %h = $dynpw(%layer,h)
if ($inrect($2,$3,%x,%y,%w,%h)) {
var %zIndex = $hget(dynpw,%ifmatch)
}
}
inc %i
}
%zIndex
}
alias createElement {
if ($hget(dynpw,$+($1,.,$2,.DYNPW_LAYER)) || $regex($2,/[1-9 a-z A-Z]/g) != $len($2)) {
echo -s * /createElement : Name Invailed or already an object
}
else {
dynpw $+($1,.,$2) DYNPW_LAYER $+($1,.,$2)
dynpw $+($1,.,$2) type $iif($left($4,1) == -,$3-7,$3-6)
$3-
var %layer = $+($1,.,$2)
if ($3 != drawrect) { echo -s * /createElement: Only drawrect is supported at this time | return }
if ($left($4,1) == -) { tokenize 32 $8- }
else { tokenize 32 $7- }
dynpw %layer x $1
dynpw %layer y $2
dynpw %layer w $3
dynpw %layer h $4
}
}
alias dynpw.checkDrag {
var %i = 1
while ($hfind(dynpw,*drag,%i,w) != $null) {
var %layer = $gettok($ifmatch,1-2,46)
var %ifmatch = $ifmatch
if ($gettok($ifmatch,1,46 == $1) && $dynpw(%layer,dragging)) {
var %x = $dynpw(%layer,dsx)
var %y = $dynpw(%layer,dsy)
dynpwmoveTo %layer $calc($mouse.x - %x) $calc($mouse.y - %y)
}
inc %i
}
}
alias dynpw.checkOnMouseUp {
var %i = 1
while ($hfind(dynpw,*drag,%i,w) != $null) {
var %layer = $gettok($ifmatch,1-2,46)
var %ifmatch = $ifmatch
if ($gettok($ifmatch,1,46 == $1) && $dynpw(%layer,dragging)) {
dynpw %layer dragging $false
break
}
inc %i
}
}
alias removeElement {
if ($window($1) && $2) {
drawrect -f $1 1 1 $dynpw($+($1,.,$2),x) $dynpw($+($1,.,$2),y) $dynpw($+($1,.,$2),w) $dynpw($+($1,.,$2),h)
}
var %i = 1
while ($hfind(dynpw,$+($1,.,$2,*),%i,w)) {
hdel dynpw $ifmatch
inc %i
}
if ($hfind(dynpw,$+($1,.,$2,*),0,w) > 0) {
.timer -h 1 0 removeelement $1 $2
}
}
alias circleIt {
$getLayer($1,test).circle(100,5,0,180,20)
$getLayer($1,test).setOnSlideStop $null
}
alias circleIt2 {
$getLayer($1,test2).circle(100,5,0,720,20)
$getLayer($1,test).setOnSlideStop $null
}
menu @dynpw {
sclick {
$dynpw.checkOnClick($active,$mouse.x,$mouse.y)
}
uclick {
$dynpw.checkOnMouseUp($active)
}
mouse {
dynpw.checkDrag $active $mouse.x $mouse.y
}
TEST 1 = WHITE | TEST 2 = RED {
}
-
SLIDE
-
slide test 1 to 50 50 : {
$getLayer($active,test).slide(50,50,5,10)
}
slide test 1 to 500 0 : {
$getLayer($active,test).slide(500,0,5,10)
}
slide test 2 to 0 0 : {
$getLayer($active,test2).slide(0,0,5,10)
}
slide test 2 to 500 0: {
$getLayer($active,test2).slide(500,0,5,10)
}
slide test 1 to 100 100 and slide test 2 to 400 200 : {
$getLayer($active,test).slide(100,100,5,10)
$getLayer($active,test2).slide(400,200,5,10)
}
-
onSlideStop CIRCLE
-
slide test 1 to 400 200 then circle it 180° at a raduis of 100 : {
$getLayer($active,test).slide(400,200,5,10)
$getLayer($active,test).setOnSlideStop circleIt
}
slide test 2 to 450 250 then make 2 complete circles : {
$getLayer($active,test2).slide(450,250,5,10)
$getLayer($active,test2).setOnSlideStop circleIt2
}
-
DRAG METHOD
-
make test 1 dragable {
$getLayer($active,test).makeDragable
}
make test 1 not dragable {
$getLayer($active,test).noDrag
}
}
alias dynpw.test {
window -p @dynpw
createElement @dynpw test drawrect -f @dynpw 0 1 0 0 100 100
$getLayer(@dynpw,test).setOnClick echo -s **** clicked test layer
createElement @dynpw test2 drawrect -f @dynpw 4 1 100 100 20 20
$getLayer(@dynpw,test2).setOnClick echo -s **** clicked test2 layer
}
alias dynpw.switchbar {
if (!$window(switchbar)) {
window -p @switchbar
createElement @switchbar status drawrect -f @switchbar 0 1 0 -20 50 20
$getLayer(@switchbar,status).write(Status,1,tomaha,15)
$getLayer(@switchbar,status).slide(0,0,5,15)
}
}
on *:CLOSE:@dynpw*: {
removeelement @dynpw
}
on *:CLOSE:@switchbar: {
removeelement @switchbar
}