avr: add touch handler routine to button module.

This commit is contained in:
Martin Preuss
2025-11-22 14:10:06 +01:00
parent d8058dc711
commit dbba5617c7
2 changed files with 128 additions and 40 deletions

View File

@@ -95,53 +95,47 @@ dlgNetStatsOnHide:
dlgNetStatsOnTouch:
mov r16, r18
mov r17, r18
mov yl, xl
mov yh, xh
; check for press change event
andi r17, (1<<DISPLAY_IFLAGS_CHGPRESS_BIT)
breq dlgNetStatsTouch_ret
; press changed
mov r17, r16
andi r17, (1<<DISPLAY_IFLAGS_PRESSED_BIT)
breq dlgNetStatsTouch_up
; touch came down
ldi zl, LOW(dlgNetstats_CloseBtn*2)
ldi zh, HIGH(dlgNetstats_CloseBtn*2)
bigcall Window_IsPointInRect
brcc dlgNetStatsTouch_ret
lds r16, dlgNetstatsFlags
mov r17, r16
andi r17, (1<<DLG_NETSTATS_FLAGS_BUTTON_DOWN_BIT)
brne dlgNetStatsTouch_ret ; already down, jmp
ori r16, (1<<DLG_NETSTATS_FLAGS_BUTTON_DOWN_BIT)
sts dlgNetstatsFlags, r16
ldi zl, LOW(dlgNetstats_CloseBtn*2)
ldi zh, HIGH(dlgNetstats_CloseBtn*2)
bigcall Button_Draw_Down
; check close button
push r18
rcall dlgNetStatsCheckCloseButton
pop r18
brcs dlgNetStatsOnTouch_closeActivated
rjmp dlgNetStatsTouch_ret
dlgNetStatsTouch_up:
; touch came up
lds r16, dlgNetstatsFlags
mov r17, r16
andi r17, (1<<DLG_NETSTATS_FLAGS_BUTTON_DOWN_BIT)
breq dlgNetStatsTouch_ret ; already up, jmp
cbr r16, (1<<DLG_NETSTATS_FLAGS_BUTTON_DOWN_BIT)
sts dlgNetstatsFlags, r16
ldi zl, LOW(dlgNetstats_CloseBtn*2)
ldi zh, HIGH(dlgNetstats_CloseBtn*2)
bigcall Button_Draw_Up
ldi zl, LOW(dlgNetstats_CloseBtn*2)
ldi zh, HIGH(dlgNetstats_CloseBtn*2)
bigcall Window_IsPointInRect
brcc dlgNetStatsTouch_ret
; touch ended over button, TODO
dlgNetStatsOnTouch_closeActivated:
; close activated, TODO
dlgNetStatsTouch_ret:
ret
dlgNetStatsCheckCloseButton:
ldi zl, LOW(dlgNetstats_CloseBtn*2)
ldi zh, HIGH(dlgNetstats_CloseBtn*2)
clr r19
lds r16, dlgNetstatsFlags
sbrc r16, DLG_NETSTATS_FLAGS_BUTTON_DOWN_BIT
sbr r19, (1<<BUTTON_STATE_DOWN_BIT)
bigcall Button_HandleTouch
lds r16, dlgNetstatsFlags
cbr r16, (1<<DLG_NETSTATS_FLAGS_BUTTON_DOWN_BIT)
sbrc r19, 0
sbr r16, (1<<DLG_NETSTATS_FLAGS_BUTTON_DOWN_BIT)
sts dlgNetstatsFlags, r16
clc
sbrs r19, BUTTON_STATE_ACTIVATED_BIT
rjmp dlgNetStatsCheckCloseButton_ret
; button activated
sec
dlgNetStatsCheckCloseButton_ret:
ret
dlgNetStatsOnTimer:
ldd r16, Y+DIALOG_OFFS_OPTIONS
andi r16, (1<<DIALOG_OPT_ACTIVE_BIT)
@@ -226,10 +220,30 @@ DlgNetStats_Show:
; update num
DLGNETSTATS_PRINTLABEL 5*(2+STYLE_WIN_FONT_HEIGHT), dlgNetstats_lUpdate
; draw horizontal line
ldi r16, 4 ; x
mov r4, r16
clr r5
ldi r16, LOW((DISPLAY_HEIGHT-8)-(STYLE_WIN_FONT_HEIGHT+4))
mov r6, r16 ; y
ldi r16, HIGH((DISPLAY_HEIGHT-8)-(STYLE_WIN_FONT_HEIGHT+4))
mov r7, r16
ldi r16, LOW(DISPLAY_WIDTH-8)
mov r8, r16 ; w
ldi r16, HIGH(DISPLAY_WIDTH-8)
mov r9, r16
ldi r16, LOW(STYLE_WIN_FOREGROUND)
mov r2, r16 ; color
ldi r16, HIGH(STYLE_WIN_FOREGROUND)
mov r3, r16
bigcall Display_DrawHLine
; draw "close" button
ldi zl, LOW(dlgNetstats_CloseBtn*2)
ldi zh, HIGH(dlgNetstats_CloseBtn*2)
bigcall Button_Draw_Up
; show values
rcall DlgNetStats_Update
ret
@@ -272,7 +286,8 @@ dlgNetstats_lClose: .db "Close", 0
dlgNetstats_CloseBtn:
.dw ((DISPLAY_WIDTH-((5*STYLE_WIN_FONT_WIDTH)+4))/2) ; 5 = string length ("close")
; .dw ((DISPLAY_WIDTH-((5*STYLE_WIN_FONT_WIDTH)+4))/2) ; 5 = string length ("close")
.dw ((DISPLAY_WIDTH-4-((5*STYLE_WIN_FONT_WIDTH)+4))) ; 5 = string length ("close"), align right
.dw ((DISPLAY_HEIGHT-4)-(STYLE_WIN_FONT_HEIGHT+4))
.dw (5*STYLE_WIN_FONT_WIDTH)+4 ; 5 = string length ("close")
.dw (STYLE_WIN_FONT_HEIGHT+4)

View File

@@ -11,6 +11,11 @@
#define AQH_AVR_GUI_BUTTON_ASM
.equ BUTTON_STATE_DOWN_BIT = 0
.equ BUTTON_STATE_ACTIVATED_BIT = 1
.cseg
@@ -47,6 +52,74 @@ Button_Draw_Down:
; ---------------------------------------------------------------------------
; @routine Button_HandleTouch @global
;
; @param r18 flags
; @param r19 current state of button (bit 0: pressed, bit 1: activated)
; @param r5:r4 x
; @param r7:r6 Y
; @param Z pointer to button data in FLASH
; @return r19 new state of button (0=normal, 1=pressed)
Button_HandleTouch:
cbr r19, (1<<BUTTON_STATE_ACTIVATED_BIT) ; clear activated bit
; check for press change event
mov r17, r18
andi r17, (1<<DISPLAY_IFLAGS_CHGPRESS_BIT)
breq Button_HandleTouch_ret
; press changed
mov r17, r18
andi r17, (1<<DISPLAY_IFLAGS_PRESSED_BIT)
breq Button_HandleTouch_up
; touch came down
push zl
push zh
push r19
bigcall Window_IsPointInRect
pop r19
pop zh
pop zl
brcc Button_HandleTouch_ret
tst r19
brne Button_HandleTouch_ret ; already down, jmp
sbr r19, (1<<BUTTON_STATE_DOWN_BIT) ; button now down
push zl
push zh
push r19
rcall Button_Draw_Down
pop r19
pop zh
pop zl
rjmp Button_HandleTouch_ret
Button_HandleTouch_up:
; touch came up
tst r19
breq Button_HandleTouch_ret ; already up, jmp
cbr r19, (1<<BUTTON_STATE_DOWN_BIT)
push zl
push zh
push r19
rcall Button_Draw_Up
pop r19
pop zh
pop zl
push zl
push zh
push r19
bigcall Window_IsPointInRect
pop r19
pop zh
pop zl
brcc Button_HandleTouch_ret
; touch ended over button
sbr r19, (1<<BUTTON_STATE_ACTIVATED_BIT) ; set activated bit
Button_HandleTouch_ret:
ret
; @end
; ---------------------------------------------------------------------------
; @routine buttonDraw
;