Checkpoint, implemented slider graphics on palette edit screen
This commit is contained in:
parent
d3f13ef67f
commit
2e4760cd18
|
@ -78,3 +78,75 @@
|
|||
RETURN
|
||||
&colour $1 &width $2
|
||||
|
||||
@draw_slider ( value active? -- )
|
||||
( use 3012 for flashing active state, if needed )
|
||||
|
||||
STH* SWPr r/SCREEN.X? #01 /SCREEN.AUTO! ( | active? value x* )
|
||||
( Draw slider background )
|
||||
;&slider_bg /SCREEN.ADDR! #0800 ( total i | active? value x* )
|
||||
&loop
|
||||
COL_2012 /SCREEN.SPRITE!
|
||||
INC GTHk ,&loop JCN
|
||||
POP* ( | active? value x* )
|
||||
( Draw slider end caps )
|
||||
;&slider_cap /SCREEN.ADDR!
|
||||
STHkr* #0001 SUB* /SCREEN.X! ( | active? value x* )
|
||||
COL_2012 /SCREEN.SPRITE!
|
||||
STHkr* #003d ADD* /SCREEN.X! ( | active? value x* )
|
||||
COL_2012_X /SCREEN.SPRITE! ( | active? value x* )
|
||||
( Draw slider indicator )
|
||||
STHkr* SWPr* #00 STHr ( x* value* | x* active? )
|
||||
MUL4 ADD* INC* INCk* INC* /SCREEN.X! ( sx* | x* active? )
|
||||
COL_0 #0007 ;draw_vertical_line CALL
|
||||
/SCREEN.X! /SCREEN.Y? INCk* /SCREEN.Y! ( y* | x* active? )
|
||||
STHr COL_0 COL_2 CHOOSE
|
||||
#0005 DUP* ;draw_capsule CALL
|
||||
COL_0 #0005 DUP* ;draw_capsule_outline CALL
|
||||
( Clean up and return )
|
||||
/SCREEN.Y! r/SCREEN.X! #00 /SCREEN.AUTO! ( -- )
|
||||
RETURN
|
||||
|
||||
&slider_cap e0c0 8880 88c0 e0ff 1f3f 7760 773f 1f00
|
||||
&slider_bg 0000 1100 1100 00ff ffff ee00 eeff ff00
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@draw_slider_old ( value active? -- )
|
||||
( use 3012 for flashing active state, if needed )
|
||||
|
||||
( If active, draw the expanded style, else draw the collapsed style )
|
||||
DUP ;&collapsed_bg ;&expanded_bg CHOOSE* /SCREEN.ADDR!
|
||||
;&collapsed_cap ;&expanded_cap CHOOSE* ,&cap STR*
|
||||
|
||||
STH r/SCREEN.X? #01 /SCREEN.AUTO! ( | value x* )
|
||||
( Draw slider background )
|
||||
#0800 ( total i | value x* )
|
||||
&loop
|
||||
COL_2012 /SCREEN.SPRITE!
|
||||
INC GTHk ,&loop JCN
|
||||
POP* ( | value x* )
|
||||
( Draw slider end caps )
|
||||
[ LIT* &cap $2 ] /SCREEN.ADDR!
|
||||
STHkr* DEC* DUP* /SCREEN.X! ( x* | value x* )
|
||||
COL_2012 /SCREEN.SPRITE!
|
||||
#003d ADD* /SCREEN.X! ( | value x* )
|
||||
COL_2012_X /SCREEN.SPRITE! ( | value x* )
|
||||
( Draw slider indicator )
|
||||
STHkr* ROTr #00 STHr ( x* 00 value | x* )
|
||||
MUL4 ADD* INC* DUPk* /SCREEN.X! ( sx* sx* | x* )
|
||||
COL_1 #0005 #0007 ;draw_capsule_outline CALL
|
||||
#0002 ADD* /SCREEN.X! ( sx* | x* )
|
||||
COL_0 #0007 ;draw_vertical_line CALL
|
||||
/SCREEN.X! /SCREEN.Y? INCk* /SCREEN.Y! ( y* | x* )
|
||||
COL_2 #0005 DUP* ;draw_capsule CALL
|
||||
COL_0 #0005 DUP* ;draw_capsule_outline CALL
|
||||
( Clean up and return )
|
||||
/SCREEN.Y! r/SCREEN.X! #00 /SCREEN.AUTO! ( -- )
|
||||
RETURN
|
||||
|
||||
&expanded_cap e0c0 8880 88c0 e0ff 1f3f 7760 773f 1f00
|
||||
&expanded_bg 0000 1100 1100 00ff ffff ee00 eeff ff00
|
||||
&collapsed_cap ffff c080 c0ff ffff 0000 3f60 3f00 0000
|
||||
&collapsed_bg ffff 0000 00ff ffff 0000 ff00 ff00 0000
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
@fill_screen_with_halftone ( sprite_colour -- )
|
||||
;sprite/halftone ( sprite_colour sprite_addr )
|
||||
,fill_screen_with_sprite JMP
|
||||
|
||||
|
||||
@clear_foreground ( -- )
|
||||
COL_00_FG ( sprite_colour )
|
||||
@fill_screen_with_colour ( sprite_colour -- )
|
||||
|
|
216
tungsten2.tal
216
tungsten2.tal
|
@ -40,6 +40,9 @@
|
|||
%/V.BRUSH2.PATTERN { #1d } %/V.BRUSH2.PATTERN? { #1d LDZ } %/V.BRUSH2.PATTERN! { #1d STZ }
|
||||
%/V.BRUSH3.PATTERN { #1e } %/V.BRUSH3.PATTERN? { #1e LDZ } %/V.BRUSH3.PATTERN! { #1e STZ }
|
||||
|
||||
( The index of the colour that's currently selected in the colour palette editor )
|
||||
%/V.ACTIVE_COLOUR { #1f } %/V.ACTIVE_COLOUR? { #1f LDZ } %/V.ACTIVE_COLOUR! { #1f STZ }
|
||||
|
||||
|
||||
%TOOL_COUNT? { #07 }
|
||||
|
||||
|
@ -52,17 +55,88 @@
|
|||
( Seed default palettes for canvas and UI )
|
||||
#1c8d /V.CANVAS.RED! #1619 /V.CANVAS.GREEN! #1010 /V.CANVAS.BLUE!
|
||||
( TODO: Remove this line )
|
||||
#1d4a /V.UI.RED! #2d69 /V.UI.GREEN! #3978 /V.UI.BLUE!
|
||||
#1d44 /V.UI.RED! #2d68 /V.UI.GREEN! #397a /V.UI.BLUE!
|
||||
#1d24 /V.UI.RED! #2d8a /V.UI.GREEN! #3946 /V.UI.BLUE!
|
||||
|
||||
#1d22 /V.UI.RED! #2d8b /V.UI.GREEN! #3946 /V.UI.BLUE!
|
||||
;recenter_canvas CALL
|
||||
;tool_screen GOTO
|
||||
;colour_screen GOTO
|
||||
|
||||
~_user_interface_framework.tal
|
||||
|
||||
( ---------------------------------------------------------------------------- )
|
||||
( P R O G R A M S C R E E N S )
|
||||
|
||||
|
||||
@colour_screen
|
||||
;ui__clear CALL
|
||||
( Draw static elements )
|
||||
COL_30 ;fill_screen_with_colour CALL
|
||||
#0000 DUP* /SCREEN.X! /SCREEN.Y!
|
||||
COL_0 #0080 /SCREEN.HEIGHT? ;draw_rect_filled CALL
|
||||
#0080 /SCREEN.X! COL_1 /SCREEN.HEIGHT? ;draw_vertical_line CALL
|
||||
#0018 /SCREEN.X! #0008 /SCREEN.Y!
|
||||
COL_T1 ;&title_text ;draw_text CALL
|
||||
#0019 /SCREEN.X! #0048 /SCREEN.Y!
|
||||
COL_T1 ;&red_text ;draw_text CALL
|
||||
#0058 /SCREEN.Y!
|
||||
COL_T1 ;&green_text ;draw_text CALL
|
||||
#0068 /SCREEN.Y!
|
||||
COL_T1 ;&blue_text ;draw_text CALL
|
||||
|
||||
|
||||
( Register change callbacks )
|
||||
#00 ;colour_screen__change__colour
|
||||
#01 ;ui__register_change_callbacks CALL
|
||||
|
||||
( Register draw callbacks )
|
||||
#00 ;colour_screen__draw__colours
|
||||
#01 ;colour_screen__draw__red
|
||||
#02 ;colour_screen__draw__green
|
||||
#03 ;colour_screen__draw__blue
|
||||
#04 ;ui__register_draw_callbacks CALL
|
||||
|
||||
|
||||
#0004 ;ui__run GOTO
|
||||
&title_text "CHANGE <SPACE> "COLOURS <NULL>
|
||||
&red_text "R <NULL>
|
||||
&green_text "G <NULL>
|
||||
&blue_text "B <NULL>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@colour_screen__change__colour ( delta )
|
||||
/V.ACTIVE_COLOUR #04 ;change_variable CALLRETURN
|
||||
|
||||
|
||||
@colour_screen__draw__colours ( active? )
|
||||
#0013 /SCREEN.X! #0020 /SCREEN.Y!
|
||||
/V.ACTIVE_COLOUR? DUP ROT
|
||||
;draw_colour_swatch CALL
|
||||
;load_merged_palette CALLRETURN
|
||||
@colour_screen__draw__red ( active? )
|
||||
#0024 /SCREEN.X! #0060 /SCREEN.Y!
|
||||
#04 SWP ;draw_slider CALLRETURN
|
||||
@colour_screen__draw__green ( active? )
|
||||
#0024 /SCREEN.X! #006a /SCREEN.Y!
|
||||
#04 SWP ;draw_slider CALLRETURN
|
||||
@colour_screen__draw__blue ( active? )
|
||||
#0024 /SCREEN.X! #0075 /SCREEN.Y!
|
||||
#04 SWP ;draw_slider CALLRETURN
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@canvas_screen
|
||||
;ui__clear CALL
|
||||
;canvas_colour_palette ;ui__load_colour_palette CALL
|
||||
|
@ -151,21 +225,8 @@
|
|||
;draw_canvas CALLRETURN
|
||||
|
||||
|
||||
|
||||
( Draws a capsule, either empty, half-filled, or solid filled )
|
||||
( Doesn't preserve coordinates )
|
||||
( States: unselected, inactive selected, and active selected )
|
||||
@draw_colour
|
||||
;sprite/capsule_half /SCREEN.ADDR!
|
||||
;brush_pattern/2 /SCREEN.ADDR!
|
||||
#0001 /SCREEN.AUTO!
|
||||
COL_T2 /SCREEN.SPRITE!
|
||||
COL_T2_X /SCREEN.SPRITE!
|
||||
/SCREEN.AUTO! RETURN
|
||||
|
||||
@tool_screen
|
||||
;ui__clear CALL
|
||||
;ui_colour_palette ;ui__load_colour_palette CALL
|
||||
|
||||
( Draw non-interactive elements )
|
||||
COL_0 ;fill_screen_with_colour CALL
|
||||
|
@ -210,60 +271,79 @@
|
|||
|
||||
|
||||
@tool_screen__change__tool ( delta -- )
|
||||
/V.ACTIVE_TOOL TOOL_COUNT? ,change__variable JMP
|
||||
/V.ACTIVE_TOOL TOOL_COUNT? ,change_variable JMP
|
||||
@tool_screen__change__colour ( delta -- )
|
||||
/V.BRUSH1.COLOUR #04 ,change__variable JMP
|
||||
/V.BRUSH1.COLOUR #04 ,change_variable JMP
|
||||
@tool_screen__change__shape ( delta -- )
|
||||
/V.BRUSH1.SHAPE #08 ,change__variable JMP
|
||||
/V.BRUSH1.SHAPE #08 ,change_variable JMP
|
||||
@tool_screen__change__pattern ( delta -- )
|
||||
/V.BRUSH1.PATTERN #08 ( ... jump elided ... )
|
||||
@change__variable ( delta var_addr count -- )
|
||||
@change_variable ( delta var_addr count -- )
|
||||
STH LDZk ROT ADD STHr ;clamp CALL SWP STZ RETURN
|
||||
|
||||
|
||||
@tool_screen__draw__colours ( active? )
|
||||
#0013 CENTER_LEFT! #0005 CENTER_DOWN!
|
||||
STH #0400 ( total i | active? )
|
||||
&loop
|
||||
DUP /V.BRUSH1.COLOUR? EQU ( total i selected? | active? )
|
||||
STHkr COL_2 COL_3 CHOOSE ( total i selected? col | active? )
|
||||
COL_1 SWP CHOOSE ( total i col | active? )
|
||||
#0015 #0008 ;draw_capsule CALL ( total i | active? )
|
||||
STHkr NOT ,&skip JCN
|
||||
COL_1 #0015 #0008 ;draw_capsule_outline CALL
|
||||
&skip
|
||||
#0017 MOVE_RIGHT
|
||||
INC NEQk ,&loop JCN
|
||||
POP* POPr
|
||||
RETURN
|
||||
/V.BRUSH1.COLOUR? SWP DUP*
|
||||
;draw_colour_swatch CALL
|
||||
( Either load regular UI palette, or replace colour 0x03 )
|
||||
;load_merged_palette JCN* POP
|
||||
;ui_colour_palette ;ui__load_colour_palette GOTO
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
( TODO: Find a way to share code between these two, there's 300 bytes of code here )
|
||||
@tool_screen__draw__shapes ( active? )
|
||||
#0010 CENTER_LEFT! #0013 CENTER_DOWN!
|
||||
;brush_shape /SCREEN.ADDR!
|
||||
/V.BRUSH1.SHAPE #0013 ;draw_sprite_row JMP*
|
||||
@tool_screen__draw__patterns ( active? )
|
||||
;brush_pattern /SCREEN.ADDR!
|
||||
/V.BRUSH1.PATTERN #0021 ( ... jump elided ... )
|
||||
@draw_sprite_row ( active? variable down* )
|
||||
CENTER_DOWN! #0010 CENTER_LEFT!
|
||||
#05 /SCREEN.AUTO! ,&variable STR #0800 ( active? total i )
|
||||
#05 /SCREEN.AUTO! #0800 ( active? total i )
|
||||
&loop
|
||||
DUP [ LIT &variable $1 ] LDZ EQU ( active? total i selected? )
|
||||
DUP /V.BRUSH1.SHAPE? EQU ( active? total i selected? )
|
||||
OVR* POP ( active? total i selected? active? )
|
||||
COL_12 COL_13 CHOOSE COL_10 SWP CHOOSE ( active? total i colour )
|
||||
/SCREEN.SPRITE! #0003 MOVE_RIGHT ( active? total i )
|
||||
INC NEQk ,&loop JCN ( active? total i+1 )
|
||||
POP* POP #00 /SCREEN.AUTO!
|
||||
#005a MOVE_LEFT #0002 MOVE_UP
|
||||
#00 /SCREEN.AUTO! POP* #0800
|
||||
&loop_two
|
||||
DUP /V.BRUSH1.SHAPE? EQU ( active? total i selected? )
|
||||
OVR* POP
|
||||
COL_2 COL_3 CHOOSE COL_1 SWP CHOOSE
|
||||
#000b #000b ;draw_capsule_outline CALL
|
||||
#000b MOVE_RIGHT
|
||||
INC NEQk ,&loop_two JCN
|
||||
POP* POP
|
||||
RETURN
|
||||
@tool_screen__draw__patterns ( active? )
|
||||
#0010 CENTER_LEFT! #0021 CENTER_DOWN!
|
||||
;brush_pattern /SCREEN.ADDR!
|
||||
#05 /SCREEN.AUTO! #0800 ( active? total i )
|
||||
&loop_one
|
||||
DUP /V.BRUSH1.PATTERN? EQU ( active? total i selected? )
|
||||
OVR* POP ( active? total i selected? active? )
|
||||
COL_02 COL_03 CHOOSE COL_10 SWP CHOOSE ( active? total i colour )
|
||||
/SCREEN.SPRITE! #0003 MOVE_RIGHT ( active? total i )
|
||||
INC NEQk ,&loop_one JCN ( active? total i+1 )
|
||||
( Draw outlines )
|
||||
#0059 MOVE_LEFT #0001 MOVE_UP
|
||||
#00 /SCREEN.AUTO! POP* #0800
|
||||
&loop_two
|
||||
DUP /V.BRUSH1.PATTERN? EQU ( active? total i selected? )
|
||||
OVR* POP
|
||||
COL_2 COL_3 CHOOSE COL_0 SWP CHOOSE
|
||||
#000a #000a ;draw_capsule_outline CALL
|
||||
#000b MOVE_RIGHT
|
||||
INC NEQk ,&loop_two JCN
|
||||
POP* POP
|
||||
RETURN
|
||||
|
||||
|
||||
|
||||
@tool_screen__draw__tools ( active? )
|
||||
( TODO: Have the icon that the mouse is currently hovering over be
|
||||
rendered in the chosen-but-not-active colour. Figure out how to do this
|
||||
for all UI elements. Colours, for example. )
|
||||
|
||||
( Choose between the real active tool and an impossible tool number )
|
||||
( TODO: This is needlessly complicated )
|
||||
#ff /V.ACTIVE_TOOL? CHOOSE ,&active_tool STR
|
||||
( Draw a label on top, containing the name of the active tool )
|
||||
#0040 CENTER_LEFT! #002f CENTER_UP!
|
||||
|
@ -275,10 +355,11 @@
|
|||
/SCREEN.X! #001b ;draw_capsule CALL ( -- )
|
||||
( Draw each of the large tool icons )
|
||||
TOOL_COUNT? #00 ( total i )
|
||||
&loop DUPk [ LIT &active_tool $1 ] EQU
|
||||
;draw_tool_palette_icon CALL
|
||||
INC GTHk ,&loop JCN
|
||||
&end POP* RETURN
|
||||
&loop
|
||||
DUPk [ LIT &active_tool $1 ] EQU
|
||||
;draw_tool_palette_icon CALL
|
||||
INC GTHk ,&loop JCN
|
||||
POP* RETURN
|
||||
|
||||
|
||||
@get_tool_name ( index -- text_addr* )
|
||||
|
@ -403,7 +484,7 @@
|
|||
|
||||
( Render the canvas to the screen )
|
||||
@draw_canvas ( -- )
|
||||
COL_20 ;fill_screen_with_colour CALL ( -- )
|
||||
COL_20 ;fill_screen_with_halftone CALL ( -- )
|
||||
#05 /SCREEN.AUTO! ( -- )
|
||||
/V.CANVAS.Y? /SCREEN.Y! ( -- )
|
||||
;canvas_buffer /SCREEN.ADDR! ( -- )
|
||||
|
@ -420,6 +501,34 @@
|
|||
&end ( 0* )
|
||||
/SCREEN.AUTO! POP RETURN ( -- )
|
||||
|
||||
( Draw four boxes, with the nth box filled with colour #3 )
|
||||
@draw_colour_swatch ( n active? -- )
|
||||
STH* #0400 ( total i | n active? )
|
||||
&loop
|
||||
DUP OVRr STHr EQU ( total i nth? | n active? )
|
||||
STHkr COL_2 COL_3 CHOOSE ( total i nth? col | n active? )
|
||||
COL_1 SWP CHOOSE ( total i col | n active? )
|
||||
#0015 #0008 ;draw_capsule CALL ( total i | n active? )
|
||||
STHkr NOT ,&skip JCN ( total i | n active? )
|
||||
COL_1 #0015 #0008 ;draw_capsule_outline CALL
|
||||
&skip
|
||||
#0017 MOVE_RIGHT
|
||||
INC NEQk ,&loop JCN
|
||||
POP* POPr* RETURN
|
||||
|
||||
@load_merged_palette ( ui_colour )
|
||||
#03 SWP SUB MUL4 STH #0300 ( total i | sft )
|
||||
&loop_colour
|
||||
DUPk ADD STHk ( total i i*2 | sft i*2 )
|
||||
.canvas_colour_palette ADD LDZ* ( total i channel* | sft i*2 )
|
||||
OVRr STHr SFT* #000f AND* ( total i col3* | sft i*2 )
|
||||
.ui_colour_palette STHkr ADD LDZ* ( total i col3* chan* | sft i*2 )
|
||||
#fff0 AND* ORA* ( total i channel* | sft i*2 )
|
||||
/SYSTEM.RED STHr ADD DEO* ( total i | sft )
|
||||
INC GTHk ,&loop_colour JCN
|
||||
POP* POPr RETURN
|
||||
|
||||
|
||||
|
||||
|
||||
~_fill_screen.tal
|
||||
|
@ -471,15 +580,14 @@
|
|||
&3 1122 4488 1122 4488 ( 1/4 left-diag )
|
||||
&4 8844 2211 8844 2211 ( 1/4 right-diag )
|
||||
&5 aaaa aaaa aaaa aaaa ( 1/2 vertical )
|
||||
&6 5555 5555 5555 5555 ( 1/2 horizontal )
|
||||
&6 ff00 ff00 ff00 ff00 ( 1/2 horizontal )
|
||||
&7 0044 0011 0044 0011 ( 1/8 sparse )
|
||||
&8 40a0 4000 0000 0000 ( 1/16 clumps )
|
||||
|
||||
@sprite
|
||||
&left_chevron 1030 70f0 7030 1000
|
||||
&cursor 80c0 e0f0 f8e0 1000
|
||||
&capsule_half 7f80 8080 8080 807f
|
||||
&capsule_right 7f80 8080 8080 807f
|
||||
&halftone aa55 aa55 aa55 aa55
|
||||
&blank 0000 0000 0000 0000
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue