From ceaf0e0ee50139b8f8f73d6abca252f4c8f5e4ae Mon Sep 17 00:00:00 2001 From: Martin Preuss Date: Mon, 17 Nov 2025 23:02:55 +0100 Subject: [PATCH] started working on buttons. --- avr/modules/lcd2/gui/button.asm | 145 ++++++++++++++++++++++++++++++++ 1 file changed, 145 insertions(+) create mode 100644 avr/modules/lcd2/gui/button.asm diff --git a/avr/modules/lcd2/gui/button.asm b/avr/modules/lcd2/gui/button.asm new file mode 100644 index 0000000..3c4f6d1 --- /dev/null +++ b/avr/modules/lcd2/gui/button.asm @@ -0,0 +1,145 @@ +; *************************************************************************** +; copyright : (C) 2025 by Martin Preuss +; email : martin@libchipcard.de +; +; *************************************************************************** +; * This file is part of the project "AqHome". * +; * Please see toplevel file COPYING of that project for license details. * +; *************************************************************************** + +#ifndef AQH_AVR_GUI_BUTTON_ASM +#define AQH_AVR_GUI_BUTTON_ASM + + +.cseg + + +; --------------------------------------------------------------------------- +; @routine Button_Draw_Up @global +; +; Draw button in state "UP". +; +; @param Y pointer to window in SDRAM +; @param Z pointer to button data in FLASH (byte address for LPM) +; @clobbers any, !Y + +Button_Draw_Up: + clr r14 + rjmp buttonDraw +; @end + + + +; --------------------------------------------------------------------------- +; @routine Button_Draw_Down @global +; +; Draw button in state "DOWN". +; +; @param Y pointer to window in SDRAM +; @param Z pointer to button data in FLASH (byte address for LPM) +; @clobbers any, !Y + +Button_Draw_Down: + ldi r16, 1 + mov r14, r16 + rjmp buttonDraw +; @end + + + +; --------------------------------------------------------------------------- +; @routine buttonDraw +; +; @param Y pointer to window in SDRAM +; @param Z pointer to button data in FLASH (byte address for LPM) +; @param r14 0 if normal, 1 if pressed state +; @clobbers any, !Y + +buttonDraw: + lpm r4, Z+ ; X + lpm r5, Z+ + lpm r6, Z+ ; Y + lpm r7, Z+ + lpm r8, Z+ ; W + lpm r9, Z+ + lpm r10, Z+ ; H + lpm r11, Z+ + + ; clear background + push zl + push zh + tst r14 + brne buttonDraw_bgDown + ldi r16, LOW(STYLE_BUTTON_COL_BG_NORM) + mov r2, r16 + ldi r16, HIGH(STYLE_BUTTON_COL_BG_NORM) + mov r3, r16 + rjmp buttonDraw_bgFill +buttonDraw_bgDown: + ldi r16, LOW(STYLE_BUTTON_COL_BG_PRESSED) + mov r2, r16 + ldi r16, HIGH(STYLE_BUTTON_COL_BG_PRESSED) + mov r3, r16 +buttonDraw_bgFill: + bigcall Display_FillRect + pop zh + pop zl + + ; draw border + push zl + push zh + ldi r16, LOW(STYLE_BUTTON_COL_BORDER) + mov r2, r16 + ldi r16, HIGH(STYLE_BUTTON_COL_BORDER) + mov r3, r16 + bigcall Display_DrawRect + pop zh + pop zl + + ldi r16, 2 + clr r17 + add r4, r16 ; x+=2 + adc r5, r17 + add r6, r16 ; y+=2 + adc r7, r17 + + lpm r16, Z+ ; text + lpm r17, Z+ + mov zl, r16 + mov zh, r17 + + ; set text colors + tst r14 + brne buttonDraw_textDown + ; set background color + ldi r16, LOW(STYLE_BUTTON_COL_BG_NORM) + mov r0, r16 + ldi r16, HIGH(STYLE_BUTTON_COL_BG_NORM) + mov r1, r16 + ; set foreground color + ldi r16, LOW(STYLE_BUTTON_COL_FG_NORM) + mov r2, r16 + ldi r16, HIGH(STYLE_BUTTON_COL_FG_NORM) + mov r3, r16 + rjmp buttonDraw_textDraw +buttonDraw_textDown: + ; set background color + ldi r16, LOW(STYLE_BUTTON_COL_BG_PRESSED) + mov r0, r16 + ldi r16, HIGH(STYLE_BUTTON_COL_BG_PRESSED) + mov r1, r16 + + ; set foreground color + ldi r16, LOW(STYLE_BUTTON_COL_FG_PRESSED) + mov r2, r16 + ldi r16, HIGH(STYLE_BUTTON_COL_FG_PRESSED) + mov r3, r16 +buttonDraw_textDraw: + bigcall Window_DrawColorTextFlash + ret +; @end + + + + +#endif