avr: take all parents pos into account when calculating abs pos

allows for positions relative to parent in widget tables.
This commit is contained in:
Martin Preuss
2026-01-15 17:27:56 +01:00
parent 55292bddf1
commit 99739325df
2 changed files with 26 additions and 21 deletions

View File

@@ -180,7 +180,7 @@ testWinBodyImg1_flashdata:
; WIDGET ; WIDGET
.db 0, 0 ; opts lo, hi .db 0, 0 ; opts lo, hi
.dw 4 ; X .dw 4 ; X
.dw STYLE_WIN_TITLE_HEIGHT+6 ; Y .dw 6 ; Y
.dw 96 ; W .dw 96 ; W
.dw 96 ; H .dw 96 ; H
.dw STYLE_WIN_FOREGROUND ; front color .dw STYLE_WIN_FOREGROUND ; front color
@@ -208,7 +208,7 @@ testWinBodyImg2_flashdata:
; WIDGET ; WIDGET
.db 0, 0 ; opts lo, hi .db 0, 0 ; opts lo, hi
.dw 104 ; X .dw 104 ; X
.dw STYLE_WIN_TITLE_HEIGHT+6 ; Y .dw 6 ; Y
.dw 96 ; W .dw 96 ; W
.dw 96 ; H .dw 96 ; H
.dw STYLE_WIN_FOREGROUND ; front color .dw STYLE_WIN_FOREGROUND ; front color
@@ -236,7 +236,7 @@ testWinBodyImg3_flashdata:
; WIDGET ; WIDGET
.db 0, 0 ; opts lo, hi .db 0, 0 ; opts lo, hi
.dw 212 ; X .dw 212 ; X
.dw STYLE_WIN_TITLE_HEIGHT+6 ; Y .dw 6 ; Y
.dw 96 ; W .dw 96 ; W
.dw 96 ; H .dw 96 ; H
.dw STYLE_WIN_FOREGROUND ; front color .dw STYLE_WIN_FOREGROUND ; front color

View File

@@ -466,15 +466,27 @@ Widget_SelectColors_ret:
Widget_MakeAbsPos: Widget_MakeAbsPos:
push zl push zl
push zh push zh
adiw zh:zl, WIDGET_OFFS_X_LO push r18
lpm r16, Z+ push r19
lpm r17, Z+ Widget_MakeAbsPos_loop:
add r4, r16 ; adjust X adiw zh:zl, WIDGET_OFFS_X_LO
adc r5, r17 lpm r16, Z+
lpm r16, Z+ lpm r17, Z+
lpm r17, Z+ add r4, r16 ; adjust X
add r6, r16 ; adjust Y adc r5, r17
adc r7, r17 lpm r16, Z+
lpm r17, Z
add r6, r16 ; adjust Y
adc r7, r17
sbiw zh:zl, WIDGET_OFFS_X_LO+3
rcall OBJ_GetParent
brcc Widget_MakeAbsPos_loopEnd
mov zl, r18
mov zh, r19
rjmp Widget_MakeAbsPos_loop
Widget_MakeAbsPos_loopEnd:
pop r19
pop r18
pop zh pop zh
pop zl pop zl
ret ret
@@ -612,15 +624,8 @@ Widget_DrawColoredTextFlash_loopEnd:
widgetCalcAbsPosAndBorders: widgetCalcAbsPosAndBorders:
push zl push zl
push zh push zh
adiw zh:zl, WIDGET_OFFS_X_LO rcall Widget_MakeAbsPos ; (R16, R17)
lpm r16, Z+ ; widget X adiw zh:zl, WIDGET_OFFS_WIDTH_LO
lpm r17, Z+
add r4, r16 ; adjust X
adc r5, r17
lpm r16, Z+ ; widget Y
lpm r17, Z+
add r6, r16 ; adjust Y
adc r7, r17
lpm r8, Z+ ; WIDTH_LO lpm r8, Z+ ; WIDTH_LO
lpm r9, Z+ lpm r9, Z+
add r8, r4 ; convert width to first pos right of widget add r8, r4 ; convert width to first pos right of widget