uxn

Varvara Ordinator, written in ANSI C(SDL2)
git clone https://git.eamoncaddigan.net/uxn.git
Log | Files | Refs | README | LICENSE

commit e15b1ac5d8fbf1140edeba927ff3475481b686a3
parent 261364f20e6cad7fa992c376c1872c69200ad396
Author: neauoire <aliceffekt@gmail.com>
Date:   Thu, 18 Mar 2021 16:05:10 -0700

Progress on noodle

Diffstat:
Mprojects/software/noodle.usm | 215+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--------------
1 file changed, 178 insertions(+), 37 deletions(-)

diff --git a/projects/software/noodle.usm b/projects/software/noodle.usm @@ -1,5 +1,7 @@ ( app/noodle : illustration program + + alt-click - drag canvas TODO - Only draw-canvas when mouse has changed @@ -14,8 +16,9 @@ %8- { #0008 SUB2 } %8+ { #0008 ADD2 } %MOD8 { #0007 AND2 } -;toolbar { x 2 y 2 } -;cursor { x 2 y 2 } +;center { x 2 y 2 } +;toolbar { x1 2 y1 2 x2 2 y2 2 } +;cursor { x 2 y 2 x0 2 y0 2 size 1 drag 1 } ;rect { x1 2 y1 2 x2 2 y2 2 } ;color { byte 1 } ;pos { x 2 y 2 } @@ -25,13 +28,24 @@ |0100 @RESET - #0038 =toolbar.x #0098 =toolbar.y + ( load file ) + ( ,filepath ,load-file JSR2 ) + + ( find screen center ) + ~Screen.width #0002 DIV2 =center.x + ~Screen.height #0002 DIV2 =center.y + + #0010 =canvas.x1 #0016 =canvas.y1 + #0026 =canvas.w #001a =canvas.h ( 380x260 ) + #0010 =toolbar.x1 #0010 =toolbar.y1 - #0010 =canvas.x1 #0020 =canvas.y1 - #0026 =canvas.w #0010 =canvas.h ,fit JSR2 + ,draw-background JSR2 + + ,fit-canvas JSR2 ,draw-titlebar JSR2 - ,draw-toolbar JSR2 + + ,fit-toolbar JSR2 BRK @@ -39,31 +53,75 @@ BRK ,draw-cursor JSR2 - ,$no-touch ~Mouse.state #01 NEQ JMP2? + ( release drag ) + ,$no-release ~Mouse.state #00 EQU ~cursor.drag #01 EQU #0101 NEQ2 JMP2? + #0000 #0000 ~Screen.width ~Screen.height #00 ,fill-rect JSR2 + ~canvas.x1 -- ~canvas.y1 -- ~canvas.x2 ~canvas.y2 #10 ,line-rect JSR2 + ,draw-background JSR2 + ,fit-canvas JSR2 + ,draw-titlebar JSR2 + ,fit-toolbar JSR2 + #00 =cursor.drag + #aa =Console.byte + $no-release + + ,$no-touch ~Mouse.state #00 EQU JMP2? + + ( drag ) + ,$no-drag ~Controller #02 NEQ JMP2? + ~canvas.x1 -- ~canvas.y1 -- ~canvas.x2 ~canvas.y2 #10 ,line-rect JSR2 + ~canvas.x1 ~Mouse.x ~cursor.x0 SUB2 ADD2 =canvas.x1 + ~canvas.y1 ~Mouse.y ~cursor.y0 SUB2 ADD2 =canvas.y1 + ~canvas.w 8* ~canvas.x1 ADD2 =canvas.x2 + ~canvas.h 8* ~canvas.y1 ADD2 =canvas.y2 + ~canvas.x1 -- ~canvas.y1 -- ~canvas.x2 ~canvas.y2 #13 ,line-rect JSR2 + #01 =cursor.drag + ,$touch-end JMP2 + $no-drag + + ( in toolbar ) + ,$no-touch-toolbar ~Mouse.x CLN2r ~toolbar.x1 GTH2 STH2r ~toolbar.x2 LTH2 #0101 NEQ2 JMP2? + ,$no-touch-toolbar ~Mouse.y CLN2r ~toolbar.y1 GTH2 STH2r ~toolbar.y2 LTH2 #0101 NEQ2 JMP2? + ,$no-touch-size ~Mouse.x ~toolbar.x1 SUB2 8/ #0000 NEQ2 JMP2? + ~Mouse.y ~toolbar.y1 SUB2 8/ SWP POP =cursor.size + #00 =Mouse.state + ,draw-toolbar JSR2 + ,$touch-end JMP2 + $no-touch-size + $no-touch-toolbar + + ( in canvas ) + ,$no-touch-canvas ~Mouse.x CLN2r ~canvas.x1 GTH2 STH2r ~canvas.x2 LTH2 #0101 NEQ2 JMP2? + ,$no-touch-canvas ~Mouse.y CLN2r ~canvas.y1 GTH2 STH2r ~canvas.y2 LTH2 #0101 NEQ2 JMP2? + ~Mouse.x ~canvas.x1 SUB2 ~Mouse.y ~canvas.y1 SUB2 ,paint JSR2 + ,$touch-end JMP2 + $no-touch-canvas + + $touch-end - ,$no-paint ~Mouse.x CLN2r ~canvas.x1 GTH2 STH2r ~canvas.x2 LTH2 #0101 NEQ2 JMP2? - ,$no-paint ~Mouse.y CLN2r ~canvas.y1 GTH2 STH2r ~canvas.y2 LTH2 #0101 NEQ2 JMP2? + $no-touch - ~Mouse.x ~canvas.x1 SUB2 ~Mouse.y ~canvas.y1 SUB2 ,paint JSR2 + ~Mouse.x =cursor.x0 + ~Mouse.y =cursor.y0 - ,draw-canvas JSR2 +BRK - $no-paint +@load-file ( path ) - $no-touch + =File.name #8000 =File.length ,data =File.load -BRK +RTN @paint ( x y ) - #0004 SUB2 =pos.y #0004 SUB2 =pos.x + #0004 SUB2 =pos.y #0004 SUB2 =pos.x ( cursor offset ) #00 =px.x #00 =px.y $ver #00 =px.x $hor - ( get bit ) - ,size1_icn #00 ~px.y ADD2 LDR #07 ~px.x SUB SHR #01 AND ( get bit ) + ( addr ) ,size0_icn #00 ~cursor.size 8* ADD2 + ( byte ) #00 ~px.y ADD2 LDR #07 ~px.x SUB SHR #01 AND #00 EQU ,$no-pixel ROT JMP2? ~pos.x #00 ~px.x ADD2 ~pos.y #00 ~px.y ADD2 ,add-pixel JSR2 @@ -74,8 +132,10 @@ BRK ( incr ) ~px.y #01 ADD =px.y ,$ver ~px.y #08 LTH JMP2? -RTN + ,draw-canvas JSR2 + ,draw-toolbar JSR2 +RTN @add-pixel ( x y ) @@ -103,8 +163,6 @@ RTN ( incr ) ~Sprite.y 8+ =Sprite.y ,$ver ~Sprite.y ~canvas.y2 LTH2 JMP2? - ,draw-toolbar JSR2 - RTN @line-rect ( x1 y1 x2 y2 color ) @@ -124,12 +182,26 @@ RTN RTN +@fill-rect ( x1 y1 x2 y2 color ) + + ( load ) =color =rect.y2 =rect.x2 DUP2 =Screen.y =rect.y1 DUP2 =Screen.x =rect.x1 + $ver + ~rect.x1 =Screen.x + $hor + ( draw ) ~color =Screen.color + ( incr ) ~Screen.x ++ =Screen.x + ,$hor ~Screen.x ~rect.x2 LTH2 JMP2? + ( incr ) ~Screen.y ++ =Screen.y + ,$ver ~Screen.y ~rect.y2 LTH2 JMP2? + +RTN + @draw-cursor ~cursor.x ~Mouse.x NEQU2 ~cursor.y ~Mouse.y NEQU2 - #0000 EQU2 RTN? ( Return if unchanged ) + #0000 EQU2 ~Mouse.state #00 NEQ #0101 EQU2 RTN? ( Return if unchanged ) ( clear last cursor ) ~cursor.x =Sprite.x @@ -144,14 +216,14 @@ RTN ( draw new cursor ) ~cursor.x =Sprite.x ~cursor.y =Sprite.y - ,brush_pointer =Sprite.addr + ,brush_pointer #00 ~Controller #02 EQU #0008 MUL2 ADD2 =Sprite.addr #13 =Sprite.color RTN @draw-titlebar - ~canvas.x1 ~canvas.y2 #06 ,filepath + ~canvas.x1 #0001 SUB2 ~canvas.y2 #06 ,filepath ( load ) =label.addr =label.color =Sprite.y =Sprite.x ~label.addr $loop NOP @@ -163,7 +235,7 @@ RTN RTN -@fit +@fit-canvas ~canvas.w 8* ~canvas.x1 ADD2 =canvas.x2 ~canvas.h 8* ~canvas.y1 ADD2 =canvas.y2 @@ -172,33 +244,88 @@ RTN RTN +@fit-toolbar + + ~toolbar.x1 #0010 ADD2 =toolbar.x2 + ~toolbar.y1 #0040 ADD2 =toolbar.y2 + ,draw-toolbar JSR2 + +RTN + @draw-toolbar - ~toolbar.x -- ~toolbar.y -- ~toolbar.x #0010 ADD2 ~toolbar.y #0050 ADD2 #02 ,line-rect JSR2 - ~toolbar.x #0002 SUB2 ~toolbar.y #0002 SUB2 ~toolbar.x #0010 ADD2 ++ ~toolbar.y #0050 ADD2 ++ #01 ,line-rect JSR2 + ~toolbar.x1 -- ~toolbar.y1 -- ~toolbar.x2 ~toolbar.y2 #02 ,line-rect JSR2 + ~toolbar.x1 #0002 SUB2 ~toolbar.y1 #0002 SUB2 ~toolbar.x2 ++ ~toolbar.y2 ++ #01 ,line-rect JSR2 - ~toolbar.x =Sprite.x - ~toolbar.y =Sprite.y + ~toolbar.x1 =Sprite.x + ~toolbar.y1 =Sprite.y ,size0_icn =Sprite.addr ( draw brush sizes ) $sizes - ( draw ) #09 =Sprite.color + + ( draw ) #09 ~Sprite.y ~toolbar.y1 SUB2 8/ SWP POP ~cursor.size EQU #02 MUL ADD =Sprite.color ( incr ) ~Sprite.y 8+ =Sprite.y ( incr ) ~Sprite.addr 8+ =Sprite.addr - ,$sizes ~Sprite.y ~toolbar.y #0040 ADD2 LTH2 JMP2? + ,$sizes ~Sprite.y ~toolbar.y1 #0040 ADD2 LTH2 JMP2? ( draw brush tools ) - ~toolbar.x 8+ =Sprite.x - ~toolbar.y =Sprite.y + ~toolbar.x1 8+ =Sprite.x + ~toolbar.y1 =Sprite.y $brushes ( draw ) #09 =Sprite.color ( incr ) ~Sprite.y 8+ =Sprite.y ( incr ) ~Sprite.addr 8+ =Sprite.addr - ,$brushes ~Sprite.y ~toolbar.y #0040 ADD2 LTH2 JMP2? + ,$brushes ~Sprite.y ~toolbar.y1 #0040 ADD2 LTH2 JMP2? + +RTN + +@draw-background + + ( draw hor line ) + #0000 =Screen.x ~center.y =Screen.y + #0000 ~Screen.width ( from/to ) + $draw-hor NOP + ( draw ) #01 =Screen.color + ( incr ) SWP2 #0002 ADD2 DUP2 =Screen.x SWP2 + OVR2 OVR2 LTH2 ^$draw-hor SWP JMP? + POP2 POP2 + + ( draw ver line ) + ~center.x =Screen.x #0000 =Screen.y + #0000 ~Screen.height ( from/to ) + $draw-ver NOP + ( draw ) #01 =Screen.color + ( incr ) SWP2 #0002 ADD2 DUP2 =Screen.y SWP2 + OVR2 OVR2 LTH2 ^$draw-ver SWP JMP? + POP2 POP2 + + ( draw save/load icons ) + ~Screen.width #0018 SUB2 =Sprite.x + ~Screen.height #0010 SUB2 =Sprite.y + ,load_icn =Sprite.addr + #01 =Sprite.color + ~Screen.width #0010 SUB2 =Sprite.x + ,save_icn =Sprite.addr + #01 =Sprite.color + + ( draw width ) + ~Screen.width #0040 SUB2 =Sprite.x + ,font_hex ~canvas.w #f0 AND #04 SHR #08 MUL ADD2 =Sprite.addr + ( draw ) #02 =Sprite.color + ~Sprite.x 8+ =Sprite.x + ,font_hex ~canvas.w #0f AND #08 MUL ADD2 =Sprite.addr + ( draw ) #02 =Sprite.color + ~Sprite.x 8+ =Sprite.x + ( draw height ) + ,font_hex ~canvas.h #f0 AND #04 SHR #08 MUL ADD2 =Sprite.addr + ( draw ) #02 =Sprite.color + ~Sprite.x 8+ =Sprite.x + ,font_hex ~canvas.h #0f AND #08 MUL ADD2 =Sprite.addr + ( draw ) #02 =Sprite.color RTN @@ -223,9 +350,23 @@ RTN @mode_guideson [ 0000 0082 4438 0000 ] @mode_zoomin [ 3245 8284 4834 0200 ] +@load_icn [ feaa d6aa d4aa f400 ] +@save_icn [ fe82 8282 848a f400 ] -@blank_icn [ 0000 0000 0000 0000 ] -@filepath [ projects/drawings/wtf.chr 00 ] +@blank_icn [ 0000 0000 0000 0000 ] +@filepath [ noodle-io.bit 00 ] + +@font_hex ( 0-F TODO: should pull from @font instead.. ) +[ + 003c 464a 5262 3c00 0018 0808 0808 1c00 + 003c 4202 3c40 7e00 003c 421c 0242 3c00 + 000c 1424 447e 0400 007e 407c 0242 3c00 + 003c 407c 4242 3c00 007e 0204 0810 1000 + 003c 423c 4242 3c00 003c 4242 3e02 3c00 + 003c 4242 7e42 4200 007c 427c 4242 7c00 + 003c 4240 4042 3c00 007c 4242 4242 7c00 + 007e 4078 4040 7e00 007e 4078 4040 4000 +] @font ( specter8-frag font ) [ @@ -280,8 +421,8 @@ RTN ] -|8000 ;canvas { w 2 h 2 x1 2 y1 2 x2 2 y2 2 } -|9000 @data +|2000 ;canvas { w 2 h 2 x1 2 y1 2 x2 2 y2 2 } +|3000 @data [ ] |F000 @ERROR BRK