texts inside labels now work.

This commit is contained in:
Martin Preuss
2026-01-13 00:00:19 +01:00
parent caa2a92722
commit edb8e7b859
4 changed files with 74 additions and 36 deletions

View File

@@ -508,7 +508,11 @@ Widget_FillRect:
; @clobbers any, !Z
Widget_DrawBorder:
rcall Widget_LoadDisplayRegs
clr r6
clr r7
clr r8
clr r9
rcall Widget_MakeAbsPos ; (R16, R17)
bigcall Display_DrawRect
ret
; @end
@@ -525,7 +529,6 @@ Widget_DrawBorder:
; @clobbers any, !Z
Widget_DrawTextFlash:
rcall Widget_LoadDisplayRegs
rcall Widget_GetSdramPtr ; (none)
rcall Widget_SelectColors
rjmp Widget_DrawColoredTextFlash
@@ -546,23 +549,24 @@ Widget_DrawTextFlash:
Widget_DrawColoredTextFlash:
rcall widgetCalcAbsPosAndBorders
push zl
push zh
mov zl, r12
mov zh, r13
Widget_DrawColoredTextFlash_loop:
push zl
push zh
mov zl, r12
mov zh, r13
lpm r16, Z
tst r16
breq Widget_DrawColoredTextFlash_loopEnd
rcall widgetDrawChar
brcc Widget_DrawColoredTextFlash_loopEnd
adiw zh:zl, 1
rjmp Widget_DrawColoredTextFlash_loop
pop zh
pop zl
tst r16
breq Widget_DrawColoredTextFlash_loopEnd
rcall widgetDrawChar
brcc Widget_DrawColoredTextFlash_loopEnd
ldi r16, 1
add r12, r16
adc r13, r12
sub r13, r12
rjmp Widget_DrawColoredTextFlash_loop
Widget_DrawColoredTextFlash_loopEnd:
mov r12, zl
mov r13, zh
pop zh
pop zl
ret
; @end
@@ -585,11 +589,11 @@ widgetCalcAbsPosAndBorders:
push zl
push zh
adiw zh:zl, WIDGET_OFFS_X_LO
lpm r16, Z+
lpm r16, Z+ ; widget X
lpm r17, Z+
add r4, r16 ; adjust X
adc r5, r17
lpm r16, Z+
lpm r16, Z+ ; widget Y
lpm r17, Z+
add r6, r16 ; adjust Y
adc r7, r17
@@ -624,26 +628,29 @@ widgetDrawChar:
push zl
push zh
; save R16 (char to write)
mov r12, r16
mov r14, r16
; get font to Z
adiw zh:zl, WIDGET_OFFS_FONT_LO
lpm r18, Z+
lpm zh, Z
mov zl, r18
or r18, zh
clc
breq widgetDrawChar_done
; check whether the char fits inside window
bigcall FONT_GetCharWidth ; r16=char width
clr r17
add r16, r4 ; char width+X
adc r17, r5
sub r16, r8 ; check against window width
sbc r17, r9
brcc widgetDrawChar_ret ; not fit, jmp
brcc widgetDrawChar_done ; not fit, jmp
; actually draw char
mov r16, r12
mov r16, r14
push r8
push r9
push r10
@@ -657,10 +664,11 @@ widgetDrawChar:
add r4, r18 ; increment X
adc r5, r16
sec ; write succeeded
widgetDrawChar_ret:
widgetDrawChar_done:
pop zh
pop zl
ret
; @end