mirror of
https://github.com/blondie7575/WeeGUI.git
synced 2024-12-13 15:30:04 +00:00
- Added view selection and focus states
- Added some API for focus selection - Fixed a bug in selected view table lookup - View creation now selects new view - Refactored and fixed bugs in checkbox rendering - Checkboxes can now be toggled - Basic API for view actions - Convenience routine for painting all views
This commit is contained in:
parent
9924d41080
commit
25e24282b3
99
gui.s
99
gui.s
@ -19,7 +19,8 @@
|
|||||||
; Main
|
; Main
|
||||||
|
|
||||||
main:
|
main:
|
||||||
jsr begin80cols
|
jsr WGInit
|
||||||
|
jsr WG80
|
||||||
;jmp tortureTestPrint
|
;jmp tortureTestPrint
|
||||||
;jmp tortureTestRects
|
;jmp tortureTestRects
|
||||||
|
|
||||||
@ -29,18 +30,39 @@ main:
|
|||||||
sta PARAM0
|
sta PARAM0
|
||||||
lda #>testView
|
lda #>testView
|
||||||
sta PARAM1
|
sta PARAM1
|
||||||
|
jsr WGCreateView
|
||||||
|
|
||||||
|
lda #<testCheck
|
||||||
|
sta PARAM0
|
||||||
|
lda #>testCheck
|
||||||
|
sta PARAM1
|
||||||
|
jsr WGCreateCheckbox
|
||||||
|
|
||||||
|
lda #<testButton1
|
||||||
|
sta PARAM0
|
||||||
|
lda #>testButton1
|
||||||
|
sta PARAM1
|
||||||
jsr WGCreateButton
|
jsr WGCreateButton
|
||||||
|
|
||||||
lda #0
|
lda #<testTitle1
|
||||||
jsr WGSelectView
|
|
||||||
|
|
||||||
lda #<testTitle
|
|
||||||
sta PARAM0
|
sta PARAM0
|
||||||
lda #>testTitle
|
lda #>testTitle1
|
||||||
sta PARAM1
|
sta PARAM1
|
||||||
jsr WGViewSetTitle
|
jsr WGViewSetTitle
|
||||||
|
|
||||||
jsr WGPaintView
|
lda #<testButton2
|
||||||
|
sta PARAM0
|
||||||
|
lda #>testButton2
|
||||||
|
sta PARAM1
|
||||||
|
jsr WGCreateButton
|
||||||
|
|
||||||
|
lda #<testTitle2
|
||||||
|
sta PARAM0
|
||||||
|
lda #>testTitle2
|
||||||
|
sta PARAM1
|
||||||
|
jsr WGViewSetTitle
|
||||||
|
|
||||||
|
jsr WGViewPaintAll
|
||||||
|
|
||||||
; ldx #5
|
; ldx #5
|
||||||
; ldy #0
|
; ldy #0
|
||||||
@ -103,18 +125,50 @@ main:
|
|||||||
|
|
||||||
; jmp tortureTestRects
|
; jmp tortureTestRects
|
||||||
|
|
||||||
loop:
|
keyLoop:
|
||||||
; lda #'Q' + $80
|
lda KBD
|
||||||
; jsr COUT
|
bpl keyLoop
|
||||||
jmp loop
|
sta KBDSTRB
|
||||||
|
|
||||||
|
and #%01111111
|
||||||
|
cmp #9
|
||||||
|
beq keyLoop_focusNext
|
||||||
|
cmp #13
|
||||||
|
beq keyLoop_toggle
|
||||||
|
cmp #32
|
||||||
|
beq keyLoop_toggle
|
||||||
|
|
||||||
|
jmp keyLoop
|
||||||
|
|
||||||
|
keyLoop_focusNext:
|
||||||
|
jsr WGViewFocusNext
|
||||||
|
jmp keyLoop
|
||||||
|
|
||||||
|
keyLoop_toggle:
|
||||||
|
jsr WGViewFocusAction
|
||||||
|
jmp keyLoop
|
||||||
|
|
||||||
rts ; This seems to work for returning to BASIC.SYSTEM, but I don't think it's right
|
rts ; This seems to work for returning to BASIC.SYSTEM, but I don't think it's right
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
; begin80cols
|
; WGInit
|
||||||
|
; Initialization. Should be called once at app startup
|
||||||
|
WGInit:
|
||||||
|
pha
|
||||||
|
|
||||||
|
lda #0
|
||||||
|
sta WG_FOCUSVIEW
|
||||||
|
|
||||||
|
pla
|
||||||
|
rts
|
||||||
|
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
; WG80
|
||||||
; Enables 80 column mode (and enhanced video firmware)
|
; Enables 80 column mode (and enhanced video firmware)
|
||||||
begin80cols:
|
WG80:
|
||||||
lda #$a0
|
lda #$a0
|
||||||
jsr $c300
|
jsr $c300
|
||||||
SETSWITCH TEXTON
|
SETSWITCH TEXTON
|
||||||
@ -158,16 +212,25 @@ read80ColSwitch_40:
|
|||||||
|
|
||||||
|
|
||||||
testView:
|
testView:
|
||||||
; .byte "0007033e13207e" ; 0, 7,3,62,19,126,126
|
.byte "0007033e133e7e" ; 0, 7,3,62,19,62,126
|
||||||
; .byte "00230a"
|
|
||||||
.byte "00230a0f"
|
testCheck:
|
||||||
|
.byte "011004"
|
||||||
|
|
||||||
|
testButton1:
|
||||||
|
.byte "02230a0f"
|
||||||
|
|
||||||
|
testButton2:
|
||||||
|
.byte "03230d0f"
|
||||||
|
|
||||||
testStr:
|
testStr:
|
||||||
; .byte "This is a test of the emergency broadcast system.",0; If this had been a real emergency, you would be dead now.",0 ; 107 chars
|
; .byte "This is a test of the emergency broadcast system.",0; If this had been a real emergency, you would be dead now.",0 ; 107 chars
|
||||||
.byte "@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_ !",34,"#$%&'()*+,-./0123456789:;<=>?`abcdefghijklmno",0
|
.byte "@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_ !",34,"#$%&'()*+,-./0123456789:;<=>?`abcdefghijklmno",0
|
||||||
testStr2:
|
testStr2:
|
||||||
.byte "pqrstuvwxyz{|}~",$ff,0
|
.byte "pqrstuvwxyz{|}~",$ff,0
|
||||||
testTitle:
|
testTitle1:
|
||||||
.byte "Okay",0
|
.byte "Okay",0
|
||||||
|
testTitle2:
|
||||||
|
.byte "Cancel",0
|
||||||
|
|
||||||
|
|
||||||
|
BIN
guidemo.dsk
BIN
guidemo.dsk
Binary file not shown.
20
macros.s
20
macros.s
@ -106,11 +106,6 @@
|
|||||||
|
|
||||||
.macro LDY_ACTIVEVIEW
|
.macro LDY_ACTIVEVIEW
|
||||||
lda WG_ACTIVEVIEW ; Find our new view record
|
lda WG_ACTIVEVIEW ; Find our new view record
|
||||||
and #%00001111
|
|
||||||
asl
|
|
||||||
asl
|
|
||||||
asl
|
|
||||||
asl
|
|
||||||
asl
|
asl
|
||||||
asl
|
asl
|
||||||
asl
|
asl
|
||||||
@ -121,11 +116,6 @@
|
|||||||
|
|
||||||
.macro LDX_ACTIVEVIEW
|
.macro LDX_ACTIVEVIEW
|
||||||
lda WG_ACTIVEVIEW ; Find our new view record
|
lda WG_ACTIVEVIEW ; Find our new view record
|
||||||
and #%00001111
|
|
||||||
asl
|
|
||||||
asl
|
|
||||||
asl
|
|
||||||
asl
|
|
||||||
asl
|
asl
|
||||||
asl
|
asl
|
||||||
asl
|
asl
|
||||||
@ -134,6 +124,16 @@
|
|||||||
.endmacro
|
.endmacro
|
||||||
|
|
||||||
|
|
||||||
|
.macro LDY_FOCUSVIEW
|
||||||
|
lda WG_FOCUSVIEW ; Find our new view record
|
||||||
|
asl
|
||||||
|
asl
|
||||||
|
asl
|
||||||
|
asl ; Records are 16 bytes wide
|
||||||
|
tay
|
||||||
|
.endmacro
|
||||||
|
|
||||||
|
|
||||||
.macro VBL_SYNC ; Synchronize with vertical blanking
|
.macro VBL_SYNC ; Synchronize with vertical blanking
|
||||||
lda #$80
|
lda #$80
|
||||||
macroWaitVBLToFinish:
|
macroWaitVBLToFinish:
|
||||||
|
4
memory.s
4
memory.s
@ -39,6 +39,7 @@ VIEW_STYLE_BUTTON = $03
|
|||||||
COUT = $fded
|
COUT = $fded
|
||||||
BASCALC = $fbc1
|
BASCALC = $fbc1
|
||||||
PRBYTE = $fdda
|
PRBYTE = $fdda
|
||||||
|
RDKEY = $fd0c
|
||||||
|
|
||||||
|
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
@ -57,6 +58,9 @@ WG_LOCALCURSORY:
|
|||||||
WG_ACTIVEVIEW:
|
WG_ACTIVEVIEW:
|
||||||
.byte 0
|
.byte 0
|
||||||
|
|
||||||
|
WG_FOCUSVIEW:
|
||||||
|
.byte 0
|
||||||
|
|
||||||
WG_VIEWCLIP:
|
WG_VIEWCLIP:
|
||||||
; X0,Y0,X1,Y1. Edges of current window, in view space, right span
|
; X0,Y0,X1,Y1. Edges of current window, in view space, right span
|
||||||
.byte 0,0,0,0,0
|
.byte 0,0,0,0,0
|
||||||
|
173
views.s
173
views.s
@ -10,7 +10,7 @@
|
|||||||
|
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
; WGCreateView
|
; WGCreateView
|
||||||
; Creates a new view
|
; Creates and selects a new view
|
||||||
; PARAM0: Pointer to ASCII configuration string (LSB)
|
; PARAM0: Pointer to ASCII configuration string (LSB)
|
||||||
; PARAM1: Pointer to ASCII configuration string (MSB)
|
; PARAM1: Pointer to ASCII configuration string (MSB)
|
||||||
;
|
;
|
||||||
@ -32,6 +32,7 @@ WGCreateView:
|
|||||||
pha
|
pha
|
||||||
|
|
||||||
and #%00001111 ; Find our new view record
|
and #%00001111 ; Find our new view record
|
||||||
|
jsr WGSelectView
|
||||||
asl
|
asl
|
||||||
asl
|
asl
|
||||||
asl
|
asl
|
||||||
@ -104,10 +105,11 @@ WGCreateCheckbox:
|
|||||||
jsr scanHex8
|
jsr scanHex8
|
||||||
|
|
||||||
and #%00001111 ; Find our new view record
|
and #%00001111 ; Find our new view record
|
||||||
|
jsr WGSelectView
|
||||||
asl
|
asl
|
||||||
asl
|
asl
|
||||||
asl
|
asl
|
||||||
asl ; Records are 8 bytes wide
|
asl ; Records are 16 bytes wide
|
||||||
tax
|
tax
|
||||||
|
|
||||||
jsr scanHex8
|
jsr scanHex8
|
||||||
@ -173,10 +175,11 @@ WGCreateButton:
|
|||||||
jsr scanHex8
|
jsr scanHex8
|
||||||
|
|
||||||
and #%00001111 ; Find our new view record
|
and #%00001111 ; Find our new view record
|
||||||
|
jsr WGSelectView
|
||||||
asl
|
asl
|
||||||
asl
|
asl
|
||||||
asl
|
asl
|
||||||
asl ; Records are 8 bytes wide
|
asl ; Records are 16 bytes wide
|
||||||
tax
|
tax
|
||||||
|
|
||||||
jsr scanHex8
|
jsr scanHex8
|
||||||
@ -241,6 +244,7 @@ WGPaintView:
|
|||||||
SAVE_ZPS
|
SAVE_ZPS
|
||||||
|
|
||||||
LDY_ACTIVEVIEW
|
LDY_ACTIVEVIEW
|
||||||
|
|
||||||
lda WG_VIEWRECORDS+4,y ; Cache style information
|
lda WG_VIEWRECORDS+4,y ; Cache style information
|
||||||
sta SCRATCH0
|
sta SCRATCH0
|
||||||
|
|
||||||
@ -263,24 +267,7 @@ WGPaintView:
|
|||||||
bra WGPaintView_done
|
bra WGPaintView_done
|
||||||
|
|
||||||
WGPaintView_check:
|
WGPaintView_check:
|
||||||
lda WG_VIEWRECORDS+9,y ; Render checkbox state
|
jsr paintCheck
|
||||||
beq WGPaintView_done
|
|
||||||
|
|
||||||
lda WG_VIEWRECORDS+0,y
|
|
||||||
sta WG_CURSORX
|
|
||||||
lda WG_VIEWRECORDS+1,y
|
|
||||||
sta WG_CURSORY
|
|
||||||
lda WG_VIEWRECORDS+9,y
|
|
||||||
and #$80
|
|
||||||
bne WGPaintView_checkSelected
|
|
||||||
lda #'D'
|
|
||||||
bra WGPaintView_checkPlot
|
|
||||||
|
|
||||||
WGPaintView_checkSelected:
|
|
||||||
lda #'E'
|
|
||||||
|
|
||||||
WGPaintView_checkPlot:
|
|
||||||
jsr WGPlot
|
|
||||||
bra WGPaintView_done
|
bra WGPaintView_done
|
||||||
|
|
||||||
WGPaintView_button:
|
WGPaintView_button:
|
||||||
@ -293,6 +280,48 @@ WGPaintView_done:
|
|||||||
rts
|
rts
|
||||||
|
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
; paintCheck
|
||||||
|
; Paints the contents of a checkbox
|
||||||
|
; Y: Index into view records of checkbox to paint
|
||||||
|
; Side effects: Clobbers A, S0
|
||||||
|
paintCheck:
|
||||||
|
lda WG_VIEWRECORDS+0,y ; Position cursor
|
||||||
|
sta WG_CURSORX
|
||||||
|
lda WG_VIEWRECORDS+1,y
|
||||||
|
sta WG_CURSORY
|
||||||
|
|
||||||
|
lda WG_VIEWRECORDS+9,y ; Determine our visual state
|
||||||
|
and #$80
|
||||||
|
bne paintCheck_selected
|
||||||
|
|
||||||
|
lda WG_VIEWRECORDS+9,y
|
||||||
|
and #$01
|
||||||
|
beq paintCheck_unselectedUnchecked
|
||||||
|
|
||||||
|
lda #'D'
|
||||||
|
bra paintCheck_plot
|
||||||
|
|
||||||
|
paintCheck_unselectedUnchecked:
|
||||||
|
lda #' '+$80
|
||||||
|
bra paintCheck_plot
|
||||||
|
|
||||||
|
paintCheck_selected:
|
||||||
|
lda WG_VIEWRECORDS+9,y
|
||||||
|
and #$01
|
||||||
|
beq paintCheck_selectedUnchecked
|
||||||
|
|
||||||
|
lda #'E'
|
||||||
|
bra paintCheck_plot
|
||||||
|
|
||||||
|
paintCheck_selectedUnchecked:
|
||||||
|
lda #' '
|
||||||
|
|
||||||
|
paintCheck_plot: ; Paint our state
|
||||||
|
jsr WGPlot
|
||||||
|
rts
|
||||||
|
|
||||||
|
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
; paintButton
|
; paintButton
|
||||||
; Paints the contents of a button
|
; Paints the contents of a button
|
||||||
@ -442,8 +471,8 @@ WGEraseViewContents_done:
|
|||||||
; A: ID
|
; A: ID
|
||||||
;
|
;
|
||||||
WGSelectView:
|
WGSelectView:
|
||||||
SAVE_AXY
|
|
||||||
sta WG_ACTIVEVIEW
|
sta WG_ACTIVEVIEW
|
||||||
|
pha
|
||||||
|
|
||||||
; Initialize cursor to local origin
|
; Initialize cursor to local origin
|
||||||
lda #0
|
lda #0
|
||||||
@ -453,7 +482,78 @@ WGSelectView:
|
|||||||
jsr cacheClipPlanes ; View changed, so clipping cache is stale
|
jsr cacheClipPlanes ; View changed, so clipping cache is stale
|
||||||
|
|
||||||
WGSelectView_done:
|
WGSelectView_done:
|
||||||
RESTORE_AXY
|
pla
|
||||||
|
rts
|
||||||
|
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
; WGViewFocusNext
|
||||||
|
; Shifts focus to the next view
|
||||||
|
; Side effects: Changes selected view, repaints some views
|
||||||
|
;
|
||||||
|
WGViewFocusNext:
|
||||||
|
SAVE_AY
|
||||||
|
|
||||||
|
LDY_FOCUSVIEW ; Unfocus current view
|
||||||
|
lda WG_VIEWRECORDS+9,y
|
||||||
|
and #%01111111
|
||||||
|
sta WG_VIEWRECORDS+9,y
|
||||||
|
|
||||||
|
lda WG_FOCUSVIEW
|
||||||
|
jsr WGSelectView
|
||||||
|
jsr WGPaintView
|
||||||
|
|
||||||
|
inc WG_FOCUSVIEW ; Increment and wrap
|
||||||
|
LDY_FOCUSVIEW
|
||||||
|
lda WG_VIEWRECORDS+2,y
|
||||||
|
bne WGViewFocusNext_focus
|
||||||
|
lda #0
|
||||||
|
sta WG_FOCUSVIEW
|
||||||
|
|
||||||
|
WGViewFocusNext_focus:
|
||||||
|
lda WG_FOCUSVIEW
|
||||||
|
jsr WGSelectView
|
||||||
|
|
||||||
|
lda WG_VIEWRECORDS+9,y
|
||||||
|
ora #%10000000
|
||||||
|
sta WG_VIEWRECORDS+9,y
|
||||||
|
|
||||||
|
jsr WGPaintView
|
||||||
|
|
||||||
|
RESTORE_AY
|
||||||
|
rts
|
||||||
|
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
; WGViewFocusAction
|
||||||
|
; Performs the action of the focused view
|
||||||
|
; Side effects: Changes selected view, Repaints some views
|
||||||
|
;
|
||||||
|
WGViewFocusAction:
|
||||||
|
SAVE_AY
|
||||||
|
|
||||||
|
LDY_FOCUSVIEW
|
||||||
|
lda WG_VIEWRECORDS+4,y ; What kind of view is it?
|
||||||
|
|
||||||
|
cmp #VIEW_STYLE_CHECK
|
||||||
|
beq WGViewFocusAction_toggleCheckbox
|
||||||
|
cmp #VIEW_STYLE_BUTTON
|
||||||
|
beq WGViewFocusAction_buttonClick
|
||||||
|
|
||||||
|
bra WGViewFocusAction_done
|
||||||
|
|
||||||
|
WGViewFocusAction_toggleCheckbox:
|
||||||
|
lda WG_VIEWRECORDS+9,y
|
||||||
|
eor #%00000001
|
||||||
|
sta WG_VIEWRECORDS+9,y
|
||||||
|
lda WG_FOCUSVIEW
|
||||||
|
jsr WGSelectView
|
||||||
|
jsr WGPaintView
|
||||||
|
|
||||||
|
WGViewFocusAction_buttonClick:
|
||||||
|
|
||||||
|
WGViewFocusAction_done:
|
||||||
|
RESTORE_AY
|
||||||
rts
|
rts
|
||||||
|
|
||||||
|
|
||||||
@ -587,6 +687,33 @@ WGScrollY_done:
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
; WGViewPaintAll
|
||||||
|
; Repaints all views
|
||||||
|
; Side effects: Changes selected view
|
||||||
|
;
|
||||||
|
WGViewPaintAll:
|
||||||
|
SAVE_AXY
|
||||||
|
|
||||||
|
ldx #0
|
||||||
|
|
||||||
|
WGViewPaintAll_loop:
|
||||||
|
txa
|
||||||
|
jsr WGSelectView
|
||||||
|
|
||||||
|
LDY_ACTIVEVIEW
|
||||||
|
lda WG_VIEWRECORDS+2,y ; Last view?
|
||||||
|
beq WGViewPaintAll_done
|
||||||
|
|
||||||
|
jsr WGPaintView
|
||||||
|
inx
|
||||||
|
bra WGViewPaintAll_loop
|
||||||
|
|
||||||
|
WGViewPaintAll_done:
|
||||||
|
RESTORE_AXY
|
||||||
|
rts
|
||||||
|
|
||||||
|
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
; cacheClipPlanes
|
; cacheClipPlanes
|
||||||
; Internal routine to cache the clipping planes for the view
|
; Internal routine to cache the clipping planes for the view
|
||||||
|
Loading…
Reference in New Issue
Block a user