gui2: mlayout works now (in column mode)!

This commit is contained in:
Martin Preuss
2026-03-23 23:15:38 +01:00
parent e125c4b027
commit 0015a0a06c
3 changed files with 195 additions and 212 deletions

View File

@@ -301,7 +301,7 @@ mLayoutCallbackGridX:
; ---------------------------------------------------------------------------
; @routine mLayoutCallbackGridX
; @routine mLayoutCallbackPackX
;
; @param Y widget
; @param r22 spacing between widgets
@@ -328,6 +328,60 @@ mLayoutCallbackPackX:
; ---------------------------------------------------------------------------
; @routine mLayoutCallbackGridY
;
; @param Y widget
; @param r22 spacing between widgets
; @param X current Y pos
; @clobbers r10-r13, r16-r21
mLayoutCallbackGridY:
ldd r20, Y+WIDGET_OFFS_TMP_LO
ldd r21, Y+WIDGET_OFFS_TMP_HI
std Y+WIDGET_OFFS_Y_LO, xl ; set new Y
std Y+WIDGET_OFFS_Y_HI, xh
add xl, r20 ; add cell width
adc xh, r21
add xl, r22 ; add spacing
adc xh, r22
sub xh, r22
clc
ret
; @end
; ---------------------------------------------------------------------------
; @routine mLayoutCallbackPackY
;
; @param Y widget
; @param r22 spacing between widgets
; @clobbers r10-r13, r16-r21, X
mLayoutCallbackPackY:
ldd r10, Y+WIDGET_OFFS_TMP_LO ; calculated cell width
ldd r11, Y+WIDGET_OFFS_TMP_HI
ldd r12, Y+WIDGET_OFFS_HEIGHT_LO ; default width
ldd r13, Y+WIDGET_OFFS_HEIGHT_HI
ldd r17, Y+WIDGET_OFFS_PACK
lsr r17 ; WIDGET_PACK_VSELF0_BIT = 2 -> shift 2 times right
lsr r17
andi r17, 3
rcall mLayoutPackCell ; R21:R20=relative pos, R19:R18=new size (r16, r17, r18, r19)
ldd xl, Y+WIDGET_OFFS_Y_LO
ldd xh, Y+WIDGET_OFFS_Y_HI
add xl, r20
adc xh, r21
std Y+WIDGET_OFFS_Y_LO, xl
std Y+WIDGET_OFFS_Y_HI, xh
std Y+WIDGET_OFFS_HEIGHT_LO, r18
std Y+WIDGET_OFFS_HEIGHT_HI, r19
ret
; @end
; ---------------------------------------------------------------------------
; @routine mLayoutCallbackPositionY
@@ -347,37 +401,6 @@ add xl, r20
adc xh, r21
clc
ret
ldd r16, Y+OBJECT_OFFS_FLAGS
sbrs r16, WIDGET_FLAGS_VISIBLE_BIT
rjmp mLayoutCallbackPositionY_ret
ldd r10, Y+WIDGET_OFFS_TMP_LO ; calculated cell width
ldd r11, Y+WIDGET_OFFS_TMP_HI
ldd r12, Y+WIDGET_OFFS_HEIGHT_LO ; default height
ldd r13, Y+WIDGET_OFFS_HEIGHT_HI
ldd r17, Y+WIDGET_OFFS_PACK
lsr r17 ; WIDGET_PACK_VSELF0_BIT = 2 -> shift 2 times right
lsr r17
andi r17, 3
push r18
push r19
rcall mLayoutPackCell ; R21:R20=relative pos (r16, r17, r18, r19)
pop r19
pop r18
add r20, xl
adc r21, xh
std Y+WIDGET_OFFS_Y_LO, r20 ; set new Y
std Y+WIDGET_OFFS_Y_HI, r21
; std Y+WIDGET_OFFS_HEIGHT_LO, r12 ; set new height
; std Y+WIDGET_OFFS_HEIGHT_HI, r13
add xl, r18 ; advance Y
adc xh, r19
add xl, r22 ; add spacing
adc xh, r22
sub xh, r22
mLayoutCallbackPositionY_ret:
clc
ret
; @end