diff --git a/projects/examples/gui/button.tal b/projects/examples/gui/button.tal index 7bf6ec1..1fddb60 100644 --- a/projects/examples/gui/button.tal +++ b/projects/examples/gui/button.tal @@ -17,7 +17,7 @@ #0058 DUP2 .Screen/width DEO2 .Screen/height DEO2 ;on-mouse .Mouse/vector DEO2 - ;button-chr + button/ BRK @meta $1 @@ -26,32 +26,43 @@ ( auth ) "By 20 "Devine 20 "Lu 20 "Linvega 0a ( date ) "15 20 "Jan 20 "2025 $2 +@on-mouse ( -> ) + update-focus BRK + @on-frame ( -> ) + BRK [ LIT2 18 &time $1 ] INCk ,&time STR EQU ?{ BRK } #0000 .Screen/vector DEO2 - ;button-chr/up + ;button-chr/up button/ [ LIT2 "! 18 ] DEO BRK -@on-mouse ( -> ) +( +@|drawing ) + +@update-focus ( -- ) - .Mouse/state DEI ?{ BRK } - .Mouse/x DEI2 .Mouse/y DEI2 within-button ?{ BRK } - ;button-chr/down - ;on-frame .Screen/vector DEO2 - #10 ;on-frame/time STA - BRK + .Mouse/x DEI2 .Mouse/y DEI2 button/is-within ?{ ;on-mouse ! } + ;button/on-mouse ! + +@ ( vector* -- ) + DUP2 [ LIT2 &last $2 ] NEQ2 ?{ POP2 JMP2r } + DUP2 .Mouse/vector DEO2 + ,&last STR2 !button/ -@within-button ( x* y* -- f ) +@button/is-within ( x* y* -- f ) #0020 SUB2 #0018 LTH2 STH #0020 SUB2 #0018 LTH2 STHr AND JMP2r -( -@|drawing ) +@button/ ( -- ) + .Mouse/vector DEI2 ;button/on-mouse EQU2 ?{ ;button-chr/up !button/ } + ;button-chr/hover !button/ +@button/on-mouse ( -> ) + update-focus BRK -@ ( addr* -- ) +@button/ ( addr* -- ) [ LIT2 26 -Screen/auto ] DEO #0020 DUP2 .Screen/x DEO2 .Screen/y DEO2 @@ -75,6 +86,14 @@ .Screen/sprite DEOk DEO JMP2r +@ ( short* -: ) + SWP /b + &b ( byte -: ) + DUP #04 SFT /c + &c ( byte -: ) + #0f AND DUP #09 GTH #27 MUL ADD [ LIT "0 ] ADD #18 DEO + JMP2r + ( @|assets )