avr: more work on gui.

This commit is contained in:
Martin Preuss
2026-04-21 00:01:15 +02:00
parent 8c567c3a87
commit 93aa9b46c3
13 changed files with 1475 additions and 60 deletions

View File

@@ -17,7 +17,14 @@
.equ LABEL_OFFS_BEGIN = WIDGET_SIZE
.equ LABEL_OFFS_TEXTRES_LO = LABEL_OFFS_BEGIN+0
.equ LABEL_OFFS_TEXTRES_HI = LABEL_OFFS_BEGIN+1
.equ LABEL_SIZE = LABEL_OFFS_BEGIN+2
.equ LABEL_OFFS_MINWIDTH_LO = LABEL_OFFS_BEGIN+2
.equ LABEL_OFFS_MINWIDTH_HI = LABEL_OFFS_BEGIN+3
.equ LABEL_SIZE = LABEL_OFFS_BEGIN+4
; values
.equ LABEL_VALUE_TEXTRES = 1
.equ LABEL_VALUE_MINWIDTH = 2
@@ -150,9 +157,6 @@ Label_OnDraw_ret:
; @routine Label_OnGetDefaultWidth @global
;
; @param Y address of widget
; @param r17 value requested
; @param xl param1
; @param xh param2
; @return CFLAG set if signal handled
; @return r19:r18 value
; @clobbers any, !Y
@@ -161,6 +165,14 @@ Label_OnGetDefaultWidth:
rcall labelCalcTextWidth
mov r18, r12
mov r19, r13
ldd r16, Y+LABEL_OFFS_MINWIDTH_LO
ldd r17, Y+LABEL_OFFS_MINWIDTH_HI
cp r18, r16
cpc r19, r17
brcc Label_OnGetDefaultWidth_addBorders
mov r18, r16
mov r19, r17
Label_OnGetDefaultWidth_addBorders:
bigcall Widget_AddOuterStyleBorders ; (r20, r21)
sec
ret
@@ -190,7 +202,57 @@ Label_OnGetDefaultHeight:
; ---------------------------------------------------------------------------
; @routine Label_OnDraw @global
; @routine Label_OnSetValueTextRes @global
;
; @param Y address of widget
; @param X id of text ressource
; @clobbers r16, r17, r18, r19
Label_OnSetValueTextRes:
std Y+LABEL_OFFS_TEXTRES_LO, xl
std Y+LABEL_OFFS_TEXTRES_HI, xh
; set dirty flag
ldd r16, Y+OBJECT_OFFS_FLAGS
ori r16, (1<<WIDGET_FLAGS_DIRTY_BIT)
std Y+OBJECT_OFFS_FLAGS, r16
; force layout of this and all parent widgets
ldi r16, (1<<WIDGET_FLAGS_LAYOUT_BIT)
bigcall OBJ_AddFlagsUp ; (r17, r18, r19)
sec
ret
; @end
; ---------------------------------------------------------------------------
; @routine Label_OnSetValueMinWidth @global
;
; @param Y address of widget
; @param X id of text ressource
; @clobbers r16, r17, r18, r19
Label_OnSetValueMinWidth:
std Y+LABEL_OFFS_MINWIDTH_LO, xl
std Y+LABEL_OFFS_MINWIDTH_HI, xh
; set dirty flag
ldd r16, Y+OBJECT_OFFS_FLAGS
ori r16, (1<<WIDGET_FLAGS_DIRTY_BIT)
std Y+OBJECT_OFFS_FLAGS, r16
; force layout of this and all parent widgets
ldi r16, (1<<WIDGET_FLAGS_LAYOUT_BIT)
bigcall OBJ_AddFlagsUp ; (r17, r18, r19)
sec
ret
; @end
; ---------------------------------------------------------------------------
; @routine labelWriteText
;
; @param Y address of widget
; @clobbers any, !Y
@@ -262,6 +324,9 @@ Label_DefaultSignalmap:
.dw Widget_DefaultSignalmap*2 ; next table to use
; entries
.db 0, WIDGET_SIGNAL_DRAW, LOW(Label_OnDraw), HIGH(Label_OnDraw)
.db LABEL_VALUE_TEXTRES, WIDGET_SIGNAL_SETVALUE, LOW(Label_OnSetValueTextRes), HIGH(Label_OnSetValueTextRes)
.db LABEL_VALUE_MINWIDTH, WIDGET_SIGNAL_SETVALUE, LOW(Label_OnSetValueMinWidth), HIGH(Label_OnSetValueMinWidth)
.db WIDGET_VALUE_DEFAULT_WIDTH, WIDGET_SIGNAL_GETVALUE, LOW(Label_OnGetDefaultWidth), HIGH(Label_OnGetDefaultWidth)
.db WIDGET_VALUE_DEFAULT_HEIGHT, WIDGET_SIGNAL_GETVALUE, LOW(Label_OnGetDefaultHeight), HIGH(Label_OnGetDefaultHeight)