gui2: main windows basically work now!

This commit is contained in:
Martin Preuss
2026-03-09 13:56:51 +01:00
parent e3ae1f9b35
commit cc7f2dc1db
6 changed files with 251 additions and 53 deletions

View File

@@ -193,6 +193,11 @@ Widget_Init_setDefaultSize:
or r16, xh
breq Widget_Init_ret
bigcall OBJ_AddChild ; (r18, r19)
; parent needs to layout with the new child
adiw xh:xl, OBJECT_OFFS_FLAGS
ld r16, X
sbr r16, (1<<WIDGET_FLAGS_LAYOUT_BIT)
sbiw xh:xl, OBJECT_OFFS_FLAGS
; preset flags
ldd r16, Y+OBJECT_OFFS_FLAGS
@@ -401,6 +406,40 @@ Widget_OnLayout:
; @end
; ---------------------------------------------------------------------------
; @routine Widget_OnShow @global
;
; @param Y address of widget
; @return CFLAG set if signal handled
; @clobbers any, !Y
Widget_OnShow:
ldd r16, Y+OBJECT_OFFS_FLAGS
sbr r16, (1<<WIDGET_FLAGS_VISIBLE_BIT) | (1<<WIDGET_FLAGS_DIRTY_BIT) | (1<<WIDGET_FLAGS_LAYOUT_BIT)
std Y+OBJECT_OFFS_FLAGS, r16
sec
ret
; @end
; ---------------------------------------------------------------------------
; @routine Widget_OnHide @global
;
; @param Y address of widget
; @return CFLAG set if signal handled
; @clobbers any, !Y
Widget_OnHide:
ldd r16, Y+OBJECT_OFFS_FLAGS
cbr r16, (1<<WIDGET_FLAGS_VISIBLE_BIT)
std Y+OBJECT_OFFS_FLAGS, r16
sec
ret
; @end
; ---------------------------------------------------------------------------
; @routine Widget_OnGetValue @global
;
@@ -1023,14 +1062,14 @@ widgetPack:
sub r18, r20 ; subtract border at begin
sbc r19, r21
sub r18, r20 ; subtract border at end
sbc r19, r21
sbc r19, r21 ; r19:r18=host size - (border*2)
andi r17, 3 ; only 2 bits pack mode
cpi r17, WIDGET_PACK_END
breq widgetPack_end
cpi r17, WIDGET_PACK_CENTER
breq widgetPack_center
rjmp widgetPack_ret ; begin/filled, align at begin
rjmp widgetPack_ret ; begin/filled, align at begin
widgetPack_end:
sub r18, r12
sbc r19, r13
@@ -1063,6 +1102,8 @@ Widget_DefaultSignalmap:
.db 0, WIDGET_SIGNAL_DRAW, LOW(Widget_OnDraw), HIGH(Widget_OnDraw)
.db 0, WIDGET_SIGNAL_LAYOUT, LOW(Widget_OnLayout), HIGH(Widget_OnLayout)
.db 0, WIDGET_SIGNAL_GETVALUE, LOW(Widget_OnGetValue), HIGH(Widget_OnGetValue) ; handle any value here
.db 0, WIDGET_SIGNAL_SHOW, LOW(Widget_OnShow), HIGH(Widget_OnShow)
.db 0, WIDGET_SIGNAL_HIDE, LOW(Widget_OnHide), HIGH(Widget_OnHide)
.db 0, 0, 0, 0 ; end of table