Optimized various drawing routines in left

This commit is contained in:
neauoire 2021-03-31 11:20:32 -07:00
parent 23521c5a4f
commit 40e5f2b539
2 changed files with 128 additions and 102 deletions

View File

@ -59,7 +59,7 @@
@RESET @RESET
( theme ) #ed0f =System.r #3d0f =System.g #3d0f =System.b ( theme ) #e0fa =System.r #30fa =System.g #30fa =System.b
( load file ) ( load file )
,filepath ,load-file JSR2 ,filepath ,load-file JSR2
@ -75,8 +75,7 @@ BRK
@FRAME @FRAME
( ctrl ) ( ctrl )
~Controller #00 EQU ~lock #00 NEQ #0000 NEQ2 ,$ctrl-end JNZ2
~Controller #00 EQU ~lock #00 NEQ #0000 NEQ2 ,ctrl-end JNZ2
( lock ) #04 =lock ( lock ) #04 =lock
( alt + arrow ) ( alt + arrow )
@ -93,7 +92,7 @@ BRK
POP POP
,clamp-selection JSR2 ,clamp-selection JSR2
,redraw JSR2 ,redraw JSR2
,ctrl-end JMP2 ,$ctrl-end JMP2
$no-alt $no-alt
( ctrl + arrow ) ( ctrl + arrow )
@ -109,7 +108,7 @@ BRK
( jump line ) ,goto-lineend JSR2 $no-cright ( jump line ) ,goto-lineend JSR2 $no-cright
POP POP
,redraw JSR2 ,redraw JSR2
,ctrl-end JMP2 ,$ctrl-end JMP2
$no-ctrl $no-ctrl
( arrow ) ( arrow )
@ -136,11 +135,11 @@ BRK
,redraw JSR2 ,redraw JSR2
$no-arrow $no-arrow
@ctrl-end $ctrl-end
( keys ) ( keys )
~Keys #00 EQU ,no-keys JNZ2 ~Keys #00 EQU ,$no-keys JNZ2
~Keys #08 NEQ ^$no-backspace JNZ ~Keys #08 NEQ ^$no-backspace JNZ
( erase ) ( erase )
@ -152,7 +151,7 @@ BRK
~selection.to ~selection.from SUB2 ++ ,shift-left JSR2 ~selection.to ~selection.from SUB2 ++ ,shift-left JSR2
$erase-end $erase-end
~selection.from -- =selection.from ~selection.from -- =selection.from
,$keys-end JMP2 ^$keys-end JMP
$no-backspace $no-backspace
( insert ) ( insert )
@ -161,19 +160,19 @@ BRK
~selection.from ++ =selection.from ~selection.from ++ =selection.from
$keys-end $keys-end
~selection.from ++ =selection.to ~selection.from ++ =selection.to
( release ) #00 =Keys ( release ) #00 =Keys
,redraw JSR2 ,redraw JSR2
@no-keys $no-keys
( mouse ) ( mouse )
~Mouse.state #00 EQU ,touch-end JNZ2 ~Mouse.state #00 EQU ^$touch-end JNZ
~Mouse.x #0010 LTH2 ,touch-linebar JNZ2 ~Mouse.x #0010 LTH2 ,touch-linebar JNZ2
~Mouse.x ~Screen.width 8- LTH2 ,touch-body JNZ2 ~Mouse.x ~Screen.width 8- LTH2 ,touch-body JNZ2
,touch-scrollbar JMP2 ,touch-scrollbar JMP2
@touch-end $touch-end
~Mouse.state =touch.state ~Mouse.state =touch.state
@ -183,7 +182,49 @@ BRK
BRK BRK
@touch-scrollbar @touch-linebar ( -- )
#0000 =position.x
~Mouse.y 8/ ~scroll.y ADD2 =position.y
,find-selection JSR2 DUP2 =selection.from ++ =selection.to
,goto-linestart JSR2
,redraw JSR2
,draw-cursor JSR2
BRK
@touch-body ( -- )
~Mouse.y 8/ ~scroll.y ADD2 =position.y
~Mouse.x ~textarea.x1 SUB2 #0007 ADD2 #0007 DIV2 =position.x
( chords )
~Mouse.chord #00 EQU ^$no-chords JNZ
~Mouse.chord
DUP #01 NEQ ^$no-chord-cut JNZ
,cut JSR2 ( release ) #00 DUP =Mouse.state =Mouse.chord $no-chord-cut
DUP #10 NEQ ^$no-chord-paste JNZ
,paste JSR2 ( release ) #00 DUP =Mouse.state =Mouse.chord $no-chord-paste
POP
,redraw JSR2
BRK
$no-chords
( drag )
~Mouse.state ~touch.state NEQ ~Controller #0f AND #02 NEQ #0101 EQU2 ^$no-drag JNZ
( on drag )
,find-selection JSR2 ++ =selection.to
,clamp-selection JSR2
^$end JMP
$no-drag
( on click )
,find-selection JSR2 DUP2 =selection.from ++ =selection.to
$end
~Mouse.state =touch.state
,draw-cursor JSR2
,redraw JSR2
BRK
@touch-scrollbar ( -- )
~Mouse.y #0008 GTH2 ^$no-up JNZ ~Mouse.y #0008 GTH2 ^$no-up JNZ
( decr ) ~scroll.y #00 ~scroll.y #0000 NEQ2 SUB2 =scroll.y ( decr ) ~scroll.y #00 ~scroll.y #0000 NEQ2 SUB2 =scroll.y
@ -195,50 +236,11 @@ BRK
$no-down $no-down
~Mouse.y 8- =scroll.y ~Mouse.y 8- =scroll.y
$end $end
~Mouse.state =touch.state
,draw-cursor JSR2
,redraw JSR2 ,redraw JSR2
,touch-end JMP2
RTN BRK
@touch-linebar
~Mouse.y 8/ ~scroll.y ADD2 =position.y #0000 =position.x
,find-selection JSR2 DUP2 =selection.from ++ =selection.to
,redraw JSR2
,touch-end JMP2
RTN
@touch-body
~Mouse.y 8/ ~scroll.y ADD2 =position.y
~Mouse.x ~textarea.x1 SUB2 #0007 ADD2 #0007 DIV2 =position.x
~Mouse.chord #01 NEQ ^$no-chord-cut JNZ
,cut JSR2
( release ) #00 DUP =Mouse.state =Mouse.chord
^$end JMP
$no-chord-cut
~Mouse.chord #10 NEQ ^$no-chord-paste JNZ
,paste JSR2
( release ) #00 DUP =Mouse.state =Mouse.chord
^$end JMP
$no-chord-paste
~Mouse.state #11 EQU ^$end JNZ
~Mouse.state ~touch.state NEQ ~Controller #0f AND #02 NEQ #0101 EQU2 ^$no-drag JNZ
( on drag )
,find-selection JSR2 ++ =selection.to
,clamp-selection JSR2
^$end JMP
$no-drag
( on click )
,find-selection JSR2 DUP2 =selection.from ++ =selection.to
$end
,redraw JSR2
,touch-end JMP2
RTN
@load-file ( path ) @load-file ( path )
@ -267,7 +269,7 @@ RTN
RTN RTN
@shift-left ( length ) @shift-left ( length -- )
=i =i
~selection.from -- =j ( start -> end ) ~selection.from -- =j ( start -> end )
@ -279,7 +281,7 @@ RTN
RTN RTN
@shift-right ( length ) @shift-right ( length -- )
=i =i
~document.eof =j ( end -> start ) ~document.eof =j ( end -> start )
@ -291,7 +293,7 @@ RTN
RTN RTN
@follow-selection @follow-selection ( -- )
~position.y ~scroll.y GTH2 ^$no-up JNZ ~position.y ~scroll.y GTH2 ^$no-up JNZ
~position.y =scroll.y RTN ~position.y =scroll.y RTN
@ -302,14 +304,14 @@ RTN
RTN RTN
@clamp-selection @clamp-selection ( -- )
~selection.from ~selection.to LTH2 RTN? ~selection.from ~selection.to LTH2 RTN?
~selection.from ++ =selection.to ~selection.from ++ =selection.to
RTN RTN
@goto-linestart @goto-linestart ( -- )
$loop $loop
~selection.from -- PEK2 #0a EQU RTN? ~selection.from -- PEK2 #0a EQU RTN?
@ -322,7 +324,7 @@ RTN
RTN RTN
@goto-lineend @goto-lineend ( -- )
$loop $loop
~selection.from PEK2 #0a EQU RTN? ~selection.from PEK2 #0a EQU RTN?
@ -335,7 +337,7 @@ RTN
RTN RTN
@find-wordstart @find-wordstart ( -- )
~selection.to =j ~selection.to =j
$loop $loop
@ -349,7 +351,7 @@ RTN
RTN RTN
@find-wordend @find-wordend ( -- )
~selection.to =j ~selection.to =j
$loop $loop
@ -405,7 +407,7 @@ RTN
RTN RTN
@cut @cut ( -- )
,copy JSR2 ,copy JSR2
~selection.to ~selection.from SUB2 ,shift-left JSR2 ~selection.to ~selection.from SUB2 ,shift-left JSR2
@ -413,7 +415,7 @@ RTN
RTN RTN
@copy ( selection ) @copy ( -- )
#0000 =i ( start ) #0000 =i ( start )
~selection.to ~selection.from SUB2 =j ( end ) ~selection.to ~selection.from SUB2 =j ( end )
@ -425,7 +427,7 @@ RTN
RTN RTN
@paste @paste ( -- )
~clip.len ,shift-right JSR2 ~clip.len ,shift-right JSR2
#0000 =i ( start ) #0000 =i ( start )
@ -465,10 +467,20 @@ RTN
( save/load icons ) ( save/load icons )
~Screen.height 8- =Sprite.y ~Screen.height 8- =Sprite.y
~Screen.width #0018 SUB2 =Sprite.x
~Screen.width #0030 SUB2 =Sprite.x
,eye_icn =Sprite.addr
#02 =Sprite.color
~Screen.width #0028 SUB2 =Sprite.x
,name_icn =Sprite.addr
#02 =Sprite.color
~Screen.width #0020 SUB2 =Sprite.x
,load_icn =Sprite.addr ,load_icn =Sprite.addr
#02 =Sprite.color #02 =Sprite.color
~Screen.width #0010 SUB2 =Sprite.x
~Screen.width #0018 SUB2 =Sprite.x
,save_icn =Sprite.addr ,save_icn =Sprite.addr
#02 =Sprite.color #02 =Sprite.color
@ -495,7 +507,6 @@ RTN
~mouse.x ~Mouse.x NEQ2 ~mouse.x ~Mouse.x NEQ2
~mouse.y ~Mouse.y NEQ2 ~mouse.y ~Mouse.y NEQ2
#0000 EQU2 RTN? ( Return if unchanged ) #0000 EQU2 RTN? ( Return if unchanged )
( clear last cursor ) ( clear last cursor )
@ -512,7 +523,7 @@ RTN
~mouse.x =Sprite.x ~mouse.x =Sprite.x
~mouse.y =Sprite.y ~mouse.y =Sprite.y
,cursor_icn =Sprite.addr ,cursor_icn =Sprite.addr
#13 =Sprite.color #1f ~Mouse.state #01 EQU #0a MUL SUB =Sprite.color
RTN RTN
@ -555,12 +566,12 @@ RTN
( draw line number ) ( draw line number )
#0000 =Sprite.x #0000 =Sprite.x
~scroll.y ~Sprite.y 8/ ADD2 DUP2 SWP POP =k ~scroll.y ~Sprite.y 8/ ADD2 DUP2 SWP POP =k
~position.y EQU2 #03 MUL =l ~position.y EQU2 #05 MUL =l
,font_hex #00 ~k #f0 AND #04 SFT #08 MUL ADD2 =Sprite.addr ,font_hex #00 ~k #f0 AND #04 SFT #08 MUL ADD2 =Sprite.addr
#06 ~l ADD =Sprite.color #04 ~l ADD =Sprite.color
#0008 =Sprite.x #0008 =Sprite.x
,font_hex #00 ~k #0f AND #08 MUL ADD2 =Sprite.addr ,font_hex #00 ~k #0f AND #08 MUL ADD2 =Sprite.addr
#06 ~l ADD =Sprite.color #04 ~l ADD =Sprite.color
#0010 =Sprite.x #0010 =Sprite.x
( incr ) ~Sprite.y 8+ =Sprite.y ( incr ) ~Sprite.y 8+ =Sprite.y
@ -586,29 +597,32 @@ RTN
RTN RTN
@draw-scrollbar @draw-scrollbar ( -- )
,scrollbar_icn ( keeping a copy on stack )
~Screen.width 8- =Sprite.x ~Screen.width 8- =Sprite.x
#0000 =Sprite.y #0008 =Sprite.y
,scrollbar_bg =Sprite.addr DUP2 =Sprite.addr
#0008 ~Screen.height 8-
$loop $loop
( draw ) #08 =Sprite.color ( draw ) #01 =Sprite.color
( incr ) ~Sprite.y 8+ =Sprite.y ( incr ) SWP2 8+ DUP2 =Sprite.y SWP2
~Sprite.y ~Screen.height LTH2 ^$loop JNZ OVR2 OVR2 LTH2 ^$loop JNZ
POP2 POP2
~scroll.y 8+ =Sprite.y
DUP2 #0008 ADD2 =Sprite.addr
( draw ) #01 =Sprite.color
#0000 =Sprite.y #0000 =Sprite.y
,arrowup_icn =Sprite.addr DUP2 #0010 ADD2 =Sprite.addr
( draw ) #08 =Sprite.color ( draw ) #04 =Sprite.color
( at )
~scroll.y 8+ =Sprite.y
,scrollbar_fg =Sprite.addr
( draw ) #08 =Sprite.color
~Screen.height 8- =Sprite.y ~Screen.height 8- =Sprite.y
,arrowdown_icn =Sprite.addr #0018 ADD2 =Sprite.addr
( draw ) #08 =Sprite.color ( draw ) #04 =Sprite.color
RTN RTN
@ -692,15 +706,26 @@ RTN
0000 0032 4c00 0000 3c42 99a1 a199 423c 0000 0032 4c00 0000 3c42 99a1 a199 423c
] ]
( interface )
@eye_icn
[ 0038 4492 2810 0000 ] ( open )
[ 0000 0082 4438 0000 ] ( closed )
@scrollbar_icn
[ aa55 aa55 aa55 aa55 ] ( bg )
[ ffff ffff ffff ffff ] ( fg )
[ 0010 387c fe10 1010 ] ( up )
[ 0010 1010 fe7c 3810 ] ( down )
@name_icn [ 1054 28c6 2854 1000 ]
@load_icn [ feaa d6aa d4aa f400 ]
@save_icn [ fe82 8282 848a f400 ]
@linebreak_icn [ 003e 7474 3414 1400 ] @linebreak_icn [ 003e 7474 3414 1400 ]
@blank_icn [ 0000 0000 0000 0000 ] @blank_icn [ 0000 0000 0000 0000 ]
@cursor_icn [ 80c0 e0f0 f8e0 1000 ] @cursor_icn [ 80c0 e0f0 f8e0 1000 ]
@scrollbar_bg [ aa55 aa55 aa55 aa55 ]
@scrollbar_fg [ ffff ffff ffff ffff ]
@arrowup_icn [ 0010 387c fe10 1010 ]
@arrowdown_icn [ 0010 1010 fe7c 3810 ]
@load_icn [ feaa d6aa d4aa f400 ]
@save_icn [ fe82 8282 848a f400 ]
@filepath1 [ projects/examples/gui.hover.usm 00 ] @filepath1 [ projects/examples/gui.hover.usm 00 ]
@filepath [ projects/software/noodle.usm 00 ] @filepath [ projects/software/noodle.usm 00 ]

View File

@ -74,7 +74,7 @@
~theme.r0 =System.r ~theme.g0 =System.g ~theme.b0 =System.b ~theme.r0 =System.r ~theme.g0 =System.g ~theme.b0 =System.b
( default canvas ) ( default canvas )
#002a =canvas.w #001a =canvas.h #002a =canvas.w #0018 =canvas.h
( default brush ) ( default brush )
#04 =brush.size #00 =brush.patt #00 =brush.tool #04 =brush.size #00 =brush.patt #00 =brush.tool
@ -792,7 +792,7 @@ RTN
( draw save/load/guides icons ) ( draw save/load/guides icons )
~Screen.height #0010 SUB2 =Sprite.y ~Screen.height #0010 SUB2 =Sprite.y
~Screen.width #0028 SUB2 =Sprite.x ~Screen.width #0028 SUB2 =Sprite.x
,eye #00 ~document.presentation #08 MUL ADD2 =Sprite.addr ,eye_icn #00 ~document.presentation #08 MUL ADD2 =Sprite.addr
#03 =Sprite.color #03 =Sprite.color
~Sprite.x 8+ =Sprite.x ~Sprite.x 8+ =Sprite.x
,filestate_icn =Sprite.addr ,filestate_icn =Sprite.addr
@ -941,14 +941,15 @@ RTN
[ 80c0 e0f0 f8e0 1000 ] [ 80c0 e0f0 f8e0 1000 ]
[ 4040 4070 f8f8 f870 ] [ 4040 4070 f8f8 f870 ]
@eye @eye_icn
[ 0038 4492 2810 0000 ] ( open ) [ 0038 4492 2810 0000 ] ( open )
[ 0000 0082 4438 0000 ] ( closed ) [ 0000 0082 4438 0000 ] ( closed )
@filestate_icn [ 1054 28c6 2854 1000 ]
@load_icn [ feaa d6aa d4aa f400 ] @load_icn [ feaa d6aa d4aa f400 ]
@save_icn [ fe82 8282 848a f400 ] @save_icn [ fe82 8282 848a f400 ]
@blank_icn [ 0000 0000 0000 0000 ] @blank_icn [ 0000 0000 0000 0000 ]
@filestate_icn [ 1054 28c6 2854 1000 ] ( TODO, add to background! )
@untitled_txt [ untitled.bit 00 ] @untitled_txt [ untitled.bit 00 ]
@font_hex ( 0-F TODO: should pull from @font instead.. ) @font_hex ( 0-F TODO: should pull from @font instead.. )