uxn/attic/examples/gui.shapes.usm

156 lines
4.1 KiB
Plaintext
Raw Normal View History

2021-04-02 00:53:41 -04:00
( GUI Shapes )
2021-02-20 20:14:36 -05:00
2021-03-16 00:29:44 -04:00
%RTN { JMP2r }
2021-03-16 14:25:26 -04:00
%++ { #0001 ADD2 }
2021-03-22 12:42:48 -04:00
%-- { #0001 SUB2 }
2021-03-16 14:25:26 -04:00
%8+ { #0008 ADD2 }
2021-03-26 14:19:19 -04:00
%ABS2 { DUP2 #000f SFT2 EQU #04 JNZ #ffff MUL2 }
2021-03-16 00:29:44 -04:00
2021-04-14 15:11:01 -04:00
%SIZE-TO-RECT {
STH2 STH2 OVR2 STH2r ADD2 OVR2 STH2r ADD2
} ( x y w h -- x1 y1 x2 y2 )
( draw requirements )
;color { byte 1 }
2021-03-13 20:34:08 -05:00
;rect { x1 2 y1 2 x2 2 y2 2 }
2021-03-21 19:33:34 -04:00
;line { x0 2 y0 2 x 2 y 2 sx 2 sy 2 dx 2 dy 2 e1 2 e2 2 }
2021-03-22 12:42:48 -04:00
;circle { xc 2 yc 2 x 2 y 2 r 2 d 2 }
|0100 ;System { vector 2 pad 6 r 2 g 2 b 2 }
|0110 ;Console { vector 2 pad 6 char 1 byte 1 short 2 string 2 }
2021-04-09 13:01:53 -04:00
|0120 ;Screen { vector 2 width 2 height 2 pad 2 x 2 y 2 addr 2 color 1 }
2021-03-21 17:16:19 -04:00
2021-04-05 16:00:55 -04:00
( program )
|0200
2021-03-28 14:20:36 -04:00
2021-04-14 15:11:01 -04:00
( theme ) #f03f =System.r #f03f =System.g #003f =System.b
( background ) ,checker_icn #23 ,cover-pattern JSR2
#0010 #0030 #0020 #0020 SIZE-TO-RECT #01 ,line-slow JSR2
#0070 #0040 #0010 #01 ,draw-circle JSR2
#0038 #0030 #0020 #0020 SIZE-TO-RECT #01 ,line-rect JSR2
#0038 #0058 #0020 #0020 SIZE-TO-RECT #01 ,fill-rect JSR2
2021-02-21 16:23:36 -05:00
2021-02-20 20:14:36 -05:00
BRK
2021-04-14 15:11:01 -04:00
@line-slow ( x1 y1 x2 y2 color -- )
2021-03-21 12:18:52 -04:00
2021-04-14 15:11:01 -04:00
( load ) =color -- =line.y0 -- =line.x0 =line.y =line.x
2021-03-21 19:33:34 -04:00
~line.x0 ~line.x SUB2 ABS2 =line.dx
~line.y0 ~line.y SUB2 ABS2 #0000 SWP2 SUB2 =line.dy
#ffff #00 ~line.x ~line.x0 LTS2 #0002 MUL2 ADD2 =line.sx
#ffff #00 ~line.y ~line.y0 LTS2 #0002 MUL2 ADD2 =line.sy
2021-03-21 12:18:52 -04:00
~line.dx ~line.dy ADD2 =line.e1
$loop
~line.x =Screen.x ~line.y =Screen.y ~color =Screen.color
~line.x ~line.x0 EQU2 ~line.y ~line.y0 EQU2 #0101 EQU2 ^$end JNZ
2021-03-21 12:18:52 -04:00
~line.e1 #0002 MUL2 =line.e2
~line.e2 ~line.dy LTS2 ^$skipy JNZ
2021-03-21 12:18:52 -04:00
~line.e1 ~line.dy ADD2 =line.e1
~line.x ~line.sx ADD2 =line.x
$skipy
~line.e2 ~line.dx GTS2 ^$skipx JNZ
2021-03-21 12:18:52 -04:00
~line.e1 ~line.dx ADD2 =line.e1
~line.y ~line.sy ADD2 =line.y
$skipx
,$loop JMP2
$end
RTN
2021-04-14 15:11:01 -04:00
@line-rect ( x1 y1 x2 y2 color -- )
2021-04-14 01:50:01 -04:00
2021-04-14 15:11:01 -04:00
( load ) =color DUP2 STH2 -- =rect.y2 -- =rect.x2 DUP2 STH2 =rect.y1 =rect.x1
2021-04-14 01:50:01 -04:00
STH2r STH2r
$ver
( save ) OVR2 =Screen.y
2021-04-14 15:11:01 -04:00
( draw ) ~rect.x1 =Screen.x ~color DUP =Screen.color
( draw ) ~rect.x2 =Screen.x =Screen.color
2021-04-14 01:50:01 -04:00
( incr ) SWP2 ++ SWP2
OVR2 OVR2 LTS2 ^$ver JNZ
2021-04-14 01:50:01 -04:00
POP2 POP2
2021-04-14 15:11:01 -04:00
~rect.x1 ~rect.x2
2021-04-14 01:50:01 -04:00
$hor
( save ) OVR2 =Screen.x
2021-04-14 15:11:01 -04:00
( draw ) ~rect.y1 =Screen.y ~color DUP =Screen.color
( draw ) ~rect.y2 =Screen.y =Screen.color
2021-04-14 01:50:01 -04:00
( incr ) SWP2 ++ SWP2
OVR2 OVR2 ++ LTS2 ^$hor JNZ
2021-04-14 01:50:01 -04:00
POP2 POP2
2021-02-27 14:39:12 -05:00
2021-03-14 17:26:17 -04:00
RTN
2021-02-21 16:23:36 -05:00
2021-04-14 15:11:01 -04:00
@fill-rect ( x1 y1 x2 y2 color -- )
2021-04-14 01:50:01 -04:00
=color
( x1 x2 y1 y2 ) ROT2 SWP2
$ver
( save ) OVR2 =Screen.y
STH2 STH2 OVR2 OVR2
$hor
( save ) OVR2 =Screen.x
( draw ) ~color =Screen.color
( incr ) SWP2 ++ SWP2
OVR2 OVR2 LTS2 ^$hor JNZ
2021-04-14 01:50:01 -04:00
POP2 POP2 STH2r STH2r
( incr ) SWP2 ++ SWP2
OVR2 OVR2 LTS2 ^$ver JNZ
2021-04-14 01:50:01 -04:00
POP2 POP2 POP2 POP2
RTN
2021-04-14 15:11:01 -04:00
@draw-circle ( xc yc r color -- )
2021-03-22 12:42:48 -04:00
( load ) =color =circle.r =circle.yc =circle.xc
#0000 =circle.x ~circle.r =circle.y
2021-04-14 15:11:01 -04:00
~circle.r #0002 MUL2 =circle.d
2021-03-22 12:42:48 -04:00
( draw ) ,$seg JSR2
$loop
( incr ) ~circle.x ++ =circle.x
2021-04-14 15:11:01 -04:00
~circle.d #0001 LTS2 ^$else JNZ
2021-03-22 12:42:48 -04:00
( decr ) ~circle.y -- =circle.y
2021-04-14 15:11:01 -04:00
~circle.x ~circle.y SUB2 #0004 MUL2 ~circle.d ADD2 =circle.d
2021-03-22 12:42:48 -04:00
,$end JMP2
$else
2021-04-14 15:11:01 -04:00
~circle.x #0004 MUL2 ~circle.d ADD2 =circle.d
2021-03-22 12:42:48 -04:00
$end
( draw ) ,$seg JSR2
2021-04-14 01:50:01 -04:00
~circle.y ~circle.x -- GTS2 ^$loop JNZ
2021-03-22 12:42:48 -04:00
RTN
$seg
~circle.xc ~circle.x ADD2 =Screen.x ~circle.yc ~circle.y ADD2 =Screen.y ~color =Screen.color
~circle.xc ~circle.x SUB2 =Screen.x ~circle.yc ~circle.y ADD2 =Screen.y ~color =Screen.color
~circle.xc ~circle.x ADD2 =Screen.x ~circle.yc ~circle.y SUB2 =Screen.y ~color =Screen.color
~circle.xc ~circle.x SUB2 =Screen.x ~circle.yc ~circle.y SUB2 =Screen.y ~color =Screen.color
~circle.xc ~circle.y ADD2 =Screen.x ~circle.yc ~circle.x ADD2 =Screen.y ~color =Screen.color
~circle.xc ~circle.y SUB2 =Screen.x ~circle.yc ~circle.x ADD2 =Screen.y ~color =Screen.color
~circle.xc ~circle.y ADD2 =Screen.x ~circle.yc ~circle.x SUB2 =Screen.y ~color =Screen.color
~circle.xc ~circle.y SUB2 =Screen.x ~circle.yc ~circle.x SUB2 =Screen.y ~color =Screen.color
RTN
2021-04-14 15:11:01 -04:00
@cover-pattern ( addr color -- )
( load ) =color =Screen.addr
#0000 ~Screen.height
$ver
( save ) OVR2 =Screen.y
#0000 ~Screen.width
$hor
( save ) OVR2 =Screen.x
( draw ) ~color =Screen.color
( incr ) SWP2 8+ SWP2
OVR2 OVR2 LTH2 ^$hor JNZ
POP2 POP2
( incr ) SWP2 8+ SWP2
OVR2 OVR2 LTH2 ^$ver JNZ
POP2 POP2
RTN
@checker_icn [ f0f0 f0f0 0f0f 0f0f ]