110 lines
2.5 KiB
NASM
110 lines
2.5 KiB
NASM
; ***************************************************************************
|
|
; copyright : (C) 2026 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_GUI2_LABEL_ASM
|
|
#define AQH_AVR_GUI2_LABEL_ASM
|
|
|
|
|
|
; ***************************************************************************
|
|
; defines
|
|
|
|
; Label in flash
|
|
.equ LABEL_OFFS_LABEL = WIDGET_SIZE
|
|
.equ LABEL_OFFS_TEXT_LO = LABEL_OFFS_LABEL+0
|
|
.equ LABEL_OFFS_TEXT_HI = LABEL_OFFS_LABEL+1
|
|
.equ LABEL_SIZE = LABEL_OFFS_LABEL+2
|
|
|
|
|
|
|
|
; ***************************************************************************
|
|
; code
|
|
|
|
.cseg
|
|
|
|
|
|
; ---------------------------------------------------------------------------
|
|
; @routine Label_OnDraw @global
|
|
;
|
|
; @param Z byte address of object (for LPM!)
|
|
; @param xl param1
|
|
; @param xh param2
|
|
; @clobbers any, !Z
|
|
|
|
Label_OnDraw:
|
|
bigcall Widget_GetSdramPtr ; (none)
|
|
ldd r16, Y+WIDGET_SD_OFFS_FLAGS
|
|
andi r16, (1<<WIDGET_FLAGS_DIRTY_BIT)
|
|
breq Label_OnDraw_ret
|
|
|
|
adiw zh:zl, WIDGET_OFFS_OPTS_LO ; get OPTS low
|
|
lpm r14, Z
|
|
sbiw zh:zl, WIDGET_OFFS_OPTS_LO
|
|
|
|
rcall Widget_Clear
|
|
rcall labelWriteText
|
|
mov r16, r14
|
|
andi r16, (1<<WIDGETS_OPTSLO_BORDER_BIT)
|
|
breq Label_OnDraw_done
|
|
|
|
ldi r16, LOW(STYLE_BUTTON_COL_BORDER)
|
|
mov r2, r16
|
|
ldi r16, HIGH(STYLE_BUTTON_COL_BORDER)
|
|
mov r3, r16
|
|
bigcall Widget_DrawBorder
|
|
|
|
Label_OnDraw_done:
|
|
bigcall Widget_GetSdramPtr ; (none)
|
|
ldd r16, Y+WIDGET_SD_OFFS_FLAGS
|
|
cbr r16, (1<<WIDGET_FLAGS_DIRTY_BIT)
|
|
std Y+WIDGET_SD_OFFS_FLAGS, r16
|
|
|
|
Label_OnDraw_ret:
|
|
sec
|
|
ret
|
|
; @end
|
|
|
|
|
|
|
|
; ---------------------------------------------------------------------------
|
|
; @routine labelWriteText
|
|
;
|
|
; @param Z byte address of object (for LPM!)
|
|
; @param R1:R0 background color
|
|
; @param R3:R2 foreground color
|
|
; @param R14 opts low
|
|
; @clobbers any, !Z
|
|
|
|
labelWriteText:
|
|
clr r4
|
|
clr r5
|
|
clr r6
|
|
clr r7
|
|
mov r16, r14
|
|
andi r16, (1<<WIDGETS_OPTSLO_BORDER_BIT)
|
|
breq labelWriteText_draw
|
|
ldi r16, 2
|
|
clr r17
|
|
add r4, r16 ; x+=2
|
|
adc r5, r17
|
|
add r6, r16 ; y+=2
|
|
adc r7, r17
|
|
labelWriteText_draw:
|
|
adiw zh:zl, LABEL_OFFS_TEXT_LO
|
|
lpm r12, Z+
|
|
lpm r13, Z
|
|
sbiw zh:zl, LABEL_OFFS_TEXT_LO+1
|
|
bigcall Widget_DrawTextFlash
|
|
ret
|
|
; @end
|
|
|
|
|
|
|
|
#endif
|
|
|