Calc: sort out mouse queries - WIP

This commit is contained in:
Joshua Bell 2017-09-07 20:59:38 -07:00
parent 9c57fa6c92
commit f0189e3d96

View File

@ -122,12 +122,18 @@ L08C4: rts
state: .byte $00 state: .byte $00
.endproc .endproc
L08C6: .byte $00
L08C7: .byte $00,$00,$00
.proc text_pos_params1 keychar: ; this params block is getting reused "creatively"
left: .word 0 keydown := * + 1
base: .word 0 tpp := * + 4
tpp1l := * + 4
tpp1b := * + 6
.proc get_mouse_params
xcoord: .word 0
ycoord: .word 0
elem: .byte 0
id: .byte 0
.word 0 ; ???
.endproc .endproc
.byte $00,$00 .byte $00,$00
@ -551,7 +557,7 @@ L0DC9: A2D_CALL $2A, button_state_params
lda button_state_params::state lda button_state_params::state
cmp #$01 cmp #$01
bne L0DDC bne L0DDC
jsr L0DE6 jsr on_click
jmp L0DC9 jmp L0DC9
L0DDC: cmp #$03 L0DDC: cmp #$03
@ -559,30 +565,33 @@ L0DDC: cmp #$03
jsr L0E6F jsr L0E6F
jmp L0DC9 jmp L0DC9
L0DE6: lda LCBANK1 on_click:
lda LCBANK1 lda LCBANK1
A2D_CALL A2D_GET_MOUSE, L08C6 lda LCBANK1
A2D_CALL A2D_GET_MOUSE, get_mouse_params
lda ROMIN2 lda ROMIN2
lda text_pos_params1::left lda get_mouse_params::elem
cmp #$02 cmp #A2D_ELEM_CLIENT ; Less than CLIENT is MENU or DESKTOP
bcc L0E03 bcc ignore_click
lda text_pos_params1::left+1 lda get_mouse_params::id
cmp #window_id cmp #window_id ; This window?
beq L0E04 beq :+
L0E03: rts
L0E04: lda text_pos_params1::left ignore_click:
cmp #$02 rts
bne L0E13
jsr L0E95 : lda get_mouse_params::elem
bcc L0E03 cmp #A2D_ELEM_CLIENT ; Client area?
bne :+
jsr L0E95 ; try to translate click into key
bcc ignore_click
jmp process_key jmp process_key
L0E13: cmp #$05 : cmp #A2D_ELEM_CLOSE ; Close box?
bne L0E53 bne :+
A2D_CALL A2D_BTN_CLICK, button_click_params A2D_CALL A2D_BTN_CLICK, button_click_params
lda button_click_params::state lda button_click_params::state
beq L0E03 beq ignore_click
exit: lda LCBANK1 exit: lda LCBANK1
lda LCBANK1 lda LCBANK1
A2D_CALL A2D_DESTROY_WINDOW, destroy_window_params A2D_CALL A2D_DESTROY_WINDOW, destroy_window_params
@ -591,19 +600,28 @@ exit: lda LCBANK1
.addr 0 .addr 0
lda ROMIN2 lda ROMIN2
A2D_CALL $1A, L08D5 A2D_CALL $1A, L08D5
ldx #$09
L0E3F: lda L0E4A,x
sta L0020,x
dex
bpl L0E3F
jmp L0020
.proc do_close
;; Copy following routine to ZP and invoke it
zp_stash := $20
ldx #(routine_end - routine)
loop: lda routine,x
sta zp_stash,x
dex
bpl loop
jmp zp_stash
.proc routine
L0E4A: sta RAMRDOFF L0E4A: sta RAMRDOFF
sta RAMWRTOFF sta RAMWRTOFF
jmp exit_da jmp exit_da
.endproc
routine_end := * ; Can't use .sizeof before the .proc definition
.endproc
L0E53: cmp #$03 : cmp #A2D_ELEM_TITLE ; Title bar?
bne L0E03 bne ignore_click
lda #window_id lda #window_id
sta button_state_params::state sta button_state_params::state
lda LCBANK1 lda LCBANK1
@ -614,9 +632,9 @@ L0E53: cmp #$03
rts rts
.proc L0E6F .proc L0E6F
lda L08C7 lda keydown
bne bail bne bail
lda L08C6 ; check key lda keychar ; check key
cmp #$1B ; Escape? cmp #$1B ; Escape?
bne trydel bne trydel
lda L0BC5 lda L0BC5
@ -638,11 +656,11 @@ L0E94: rts ; used by prev/next proc
L0E95: lda #window_id L0E95: lda #window_id
sta button_state_params::state sta button_state_params::state
A2D_CALL $46, button_state_params A2D_CALL $46, button_state_params
lda text_pos_params1::left+1 ; must have alternate meaning here lda tpp1l+1 ; must have alternate meaning here
ora text_pos_params1::base+1 ora tpp1b+1
bne L0E94 bne L0E94
lda text_pos_params1::base ; click y lda tpp1b ; click y
ldx text_pos_params1::left ; click x ldx tpp1l ; click x
border_lt := 1 ; border width pixels (left/top) border_lt := 1 ; border width pixels (left/top)
border_br := 2 ; (bottom/right) border_br := 2 ; (bottom/right)
@ -687,7 +705,7 @@ L0E95: lda #window_id
: cmp #82 ; special case for tall + button : cmp #82 ; special case for tall + button
bcs :+ bcs :+
lda text_pos_params1::left lda tpp1l
cmp #97 cmp #97
bcc miss bcc miss
cmp #116 cmp #116
@ -703,8 +721,8 @@ L0E95: lda #window_id
lda row5_lookup,x lda row5_lookup,x
rts rts
: lda text_pos_params1::left ; special case for wide 0 button : lda tpp1l ; special case for wide 0 button
cmp #12 cmp #col1_left-1
bcc miss bcc miss
cmp #'=' cmp #'='
bcs miss bcs miss
@ -1129,7 +1147,7 @@ check_button:
lda #window_id lda #window_id
sta button_state_params::state sta button_state_params::state
A2D_CALL $46, button_state_params A2D_CALL $46, button_state_params
A2D_CALL A2D_SET_TEXT_POS, text_pos_params1 A2D_CALL A2D_SET_TEXT_POS, tpp
A2D_CALL $13, 0, c13_addr A2D_CALL $13, 0, c13_addr
bne :+ bne :+
lda $FC lda $FC