gui: improved style handling.

This commit is contained in:
Martin Preuss
2026-05-08 10:02:34 +02:00
parent cc65fb8f0b
commit f154146b14
4 changed files with 171 additions and 55 deletions

View File

@@ -104,6 +104,31 @@ Button_Init:
; ---------------------------------------------------------------------------
; @routine Button_OnSetValueStyle @global
;
; @param Y address of widget
; @param X=new style
Button_OnSetValueStyle:
std Y+WIDGET_OFFS_STYLE_LO, xl
std Y+WIDGET_OFFS_STYLE_HI, xh
bigcall OBJ_GetFirstChild
brcc Button_OnSetValueStyle_ret
push yl
push yh
mov yl, r18
mov yh, r19
bigcall Widget_SetStyle ; set style in child
pop yh
pop yl
Button_OnSetValueStyle_ret:
sec
ret
; @end
; ---------------------------------------------------------------------------
; @routine Button_OnTouchBegin @global
;
@@ -340,6 +365,7 @@ Button_DefaultSignalmap:
.db 0, WIDGET_SIGNAL_LAYOUT, LOW(Button_OnLayout), HIGH(Button_OnLayout)
.db WIDGET_VALUE_DEFAULT_WIDTH, WIDGET_SIGNAL_GETVALUE, LOW(Button_OnGetDefaultWidth), HIGH(Button_OnGetDefaultWidth)
.db WIDGET_VALUE_DEFAULT_HEIGHT, WIDGET_SIGNAL_GETVALUE, LOW(Button_OnGetDefaultHeight), HIGH(Button_OnGetDefaultHeight)
.db WIDGET_VALUE_STYLE, WIDGET_SIGNAL_SETVALUE, LOW(Button_OnSetValueStyle), HIGH(Button_OnSetValueStyle)
.db 0, 0, 0, 0 ; end of table

View File

@@ -239,14 +239,17 @@ cWidgetMkChildWidget_typeOk:
; set style (if any)
adiw zh:zl, CWIDGETCFG_OFFS_WIDGET_STYLE_LO
lpm r16, Z+
lpm r17, Z
lpm xl, Z+
lpm xh, Z
sbiw zh:zl, (CWIDGETCFG_OFFS_WIDGET_STYLE_LO+1)
mov r18, r16
or r18, r17
mov r18, xl
or r18, xh
breq cWidgetMkChildWidget_setminmax
std Y+WIDGET_OFFS_STYLE_LO, r16
std Y+WIDGET_OFFS_STYLE_HI, r17
push zl
push zh
bigcall Widget_SetStyle
pop zh
pop zl
cWidgetMkChildWidget_setminmax:
adiw zh:zl, CWIDGETCFG_OFFS_WIDGET_FLAGS
lpm r16, Z

View File

@@ -239,9 +239,9 @@ mainWindowCreateContentWidget:
bigcall VLayout_new
brcc mainWindowCreateContentWidget_done
; set style for title widget
ldi r16, LOW(MainWindow_ContentStyle*2)
ldi r16, LOW(DefaultStyle_Window*2)
std Y+WIDGET_OFFS_STYLE_LO, r16
ldi r16, HIGH(MainWindow_ContentStyle*2)
ldi r16, HIGH(DefaultStyle_Window*2)
std Y+WIDGET_OFFS_STYLE_HI, r16
mainWindowCreateContentWidget_done:
pop yh
@@ -269,57 +269,38 @@ MainWindow_DefaultSignalmap:
MainWindow_DefaultStyle:
.dw DISPLAY_COLOR_BLACK ; frontCol_norm
.dw DISPLAY_COLOR_LIGHTGREY ; backCol_norm
.dw DISPLAY_COLOR_BLACK ; borderCol_norm
.dw DISPLAY_COLOR_WHITE ; shadowCol_norm
.dw STYLE_WIN_FGCOL_NORM ; frontCol_norm
.dw STYLE_WIN_BGCOL_NORM ; backCol_norm
.dw STYLE_WIN_BORDERCOL_NORM ; borderCol_norm
.dw STYLE_WIN_SHADOWCOL_NORM ; shadowCol_norm
.dw DISPLAY_COLOR_WHITE ; frontCol_activated
.dw DISPLAY_COLOR_NAVY ; backCol_activated
.dw DISPLAY_COLOR_BLACK ; borderCol_activated
.dw DISPLAY_COLOR_WHITE ; shadowCol_activated
.db 0, 0 ; outerBorderSize, innerBorderSize
.dw ili9341Font12x16_1*2 ; font
.db 12, 16 ; charWidth, charHeight
.dw STYLE_WIN_FGCOL_ACTIVATED ; frontCol_activated
.dw STYLE_WIN_BGCOL_ACTIVATED ; backCol_activated
.dw STYLE_WIN_BORDERCOL_ACTIVATED ; borderCol_activated
.dw STYLE_WIN_SHADOWCOL_ACTIVATED ; shadowCol_activated
.db 0, 0 ; outerBorderSize, innerBorderSize
.dw (STYLE_WIN_FONT*2) ; font
.db STYLE_WIN_FONT_WIDTH, \
STYLE_WIN_FONT_HEIGHT ; charWidth, charHeight
MainWindow_TitleStyle:
.dw STYLE_WIN_TITLE_FOREGROUND ; frontCol_norm
.dw STYLE_WIN_TITLE_BACKGROUND ; backCol_norm
.dw DISPLAY_COLOR_BLACK ; borderCol_norm
.dw DISPLAY_COLOR_WHITE ; shadowCol_norm
.dw STYLE_TITLE_FGCOL ; frontCol_norm
.dw STYLE_TITLE_BGCOL ; backCol_norm
.dw STYLE_TITLE_BORDERCOL ; borderCol_norm
.dw STYLE_TITLE_SHADOWCOL ; shadowCol_norm
.dw DISPLAY_COLOR_WHITE ; frontCol_activated
.dw DISPLAY_COLOR_NAVY ; backCol_activated
.dw DISPLAY_COLOR_BLACK ; borderCol_activated
.dw DISPLAY_COLOR_WHITE ; shadowCol_activated
.dw STYLE_TITLE_FGCOL ; frontCol_activated
.dw STYLE_TITLE_BGCOL ; backCol_activated
.dw STYLE_TITLE_BORDERCOL ; borderCol_activated
.dw STYLE_TITLE_SHADOWCOL ; shadowCol_activated
.db 2, 1 ; outerBorderSize, innerBorderSize
.dw ili9341Font12x16_1*2 ; font
.db 12, 16 ; charWidth, charHeight
; this is the defining style for most windows because normally
; the style of the parent will be propagated to newly created child widgets.
MainWindow_ContentStyle:
.dw DISPLAY_COLOR_BLACK ; frontCol_norm
.dw DISPLAY_COLOR_LIGHTGREY ; backCol_norm
.dw DISPLAY_COLOR_BLACK ; borderCol_norm
.dw DISPLAY_COLOR_WHITE ; shadowCol_norm
.dw DISPLAY_COLOR_WHITE ; frontCol_activated
.dw DISPLAY_COLOR_NAVY ; backCol_activated
.dw DISPLAY_COLOR_BLACK ; borderCol_activated
.dw DISPLAY_COLOR_WHITE ; shadowCol_activated
.db 2, 1 ; outerBorderSize, innerBorderSize
.dw ili9341Font12x16_1*2 ; font
.db 12, 16 ; charWidth, charHeight
.dw (STYLE_TITLE_FONT*2) ; font
.db STYLE_TITLE_FONT_WIDTH, \
STYLE_TITLE_FONT_HEIGHT ; charWidth, charHeight