gui2: basic start works!

This commit is contained in:
Martin Preuss
2026-03-07 15:29:28 +01:00
parent 7bd83b32b4
commit 92efebccf1
4 changed files with 73 additions and 52 deletions

View File

@@ -199,8 +199,8 @@ onSystemStart:
; Called on every message received ; Called on every message received
onMessageReceived: onMessageReceived:
; ldi zl, LOW(appC03*2) ; lds yl, guiApp
; ldi zh, HIGH(appC03*2) ; lds yh, guiApp+1
; bigcall GuiApp_MsgReceived ; bigcall GuiApp_MsgReceived
clc clc
ret ret
@@ -214,9 +214,9 @@ onMessageReceived:
; Called every 100ms. Add your routine calls here. No arguments, no results. ; Called every 100ms. Add your routine calls here. No arguments, no results.
onEvery100ms: onEvery100ms:
; ldi zl, LOW(appC03*2) lds yl, guiApp
; ldi zh, HIGH(appC03*2) lds yh, guiApp+1
; bigcall GuiApp_Every100ms bigcall GuiApp_Every100ms
ret ret
onEveryMinute: onEveryMinute:
@@ -243,10 +243,19 @@ onEveryLoop:
test: test:
; ldi zl, LOW(appC03*2) clr r16
; ldi zh, HIGH(appC03*2) sts guiApp, r16
; bigcall GuiApp_Init sts guiApp+1, r16
ldi r16, 0
ldi r17, 0
bigcall GuiApp_new
brcs test_ok
bigjmp DEBUG1
test_ok:
sts guiApp, yl
sts guiApp+1, yh
ret ret
@@ -311,9 +320,12 @@ test:
.dseg .dseg
guiApp: .byte 2
heapStart: heapStart:
.equ HEAP_START = heapStart .equ HEAP_START = heapStart
.equ HEAP_SIZE = (SRAM_SIZE-STACK_SIZE)-HEAP_START .equ HEAP_SIZE = (SRAM_SIZE-STACK_SIZE)-HEAP_START

View File

@@ -106,6 +106,12 @@ GuiApp_Init:
ldi r16, 0 ; opts_lo ldi r16, 0 ; opts_lo
ldi r17, 0 ; opts_hi ldi r17, 0 ; opts_hi
bigcall RootWindow_new bigcall RootWindow_new
; always visible
ldd r16, Y+OBJECT_OFFS_FLAGS
sbr r16, (1<<WIDGET_FLAGS_VISIBLE_BIT)
std Y+OBJECT_OFFS_FLAGS, r16
mov xl, yl mov xl, yl
mov xh, yh mov xh, yh
pop yh pop yh
@@ -115,6 +121,10 @@ GuiApp_Init:
std Y+GUIAPP_OFFS_ROOTWINDOW_LO, xl std Y+GUIAPP_OFFS_ROOTWINDOW_LO, xl
std Y+GUIAPP_OFFS_ROOTWINDOW_HI, xh std Y+GUIAPP_OFFS_ROOTWINDOW_HI, xh
; debug
std Y+GUIAPP_OFFS_CURRENTWINDOW_LO, xl
std Y+GUIAPP_OFFS_CURRENTWINDOW_HI, xh
ldi r16, GUIAPP_GUITIMER ldi r16, GUIAPP_GUITIMER
std Y+GUIAPP_OFFS_GUITIMER, r16 std Y+GUIAPP_OFFS_GUITIMER, r16
@@ -235,6 +245,7 @@ GuiApp_UngrabTouchEvents_ret:
; ;
; @param Y address of object in SDRAM ; @param Y address of object in SDRAM
; @param CFLAG set if response is not a NULL pointer ; @param CFLAG set if response is not a NULL pointer
; @clobbers none
GuiApp_GetRootWindow: GuiApp_GetRootWindow:
ldd r18, Y+GUIAPP_OFFS_ROOTWINDOW_LO ldd r18, Y+GUIAPP_OFFS_ROOTWINDOW_LO
@@ -430,11 +441,8 @@ guiAppSendTimerEvents:
guiAppCheckSendGuiEvents: guiAppCheckSendGuiEvents:
push yl push yl
push yh push yh
ldd r16, Y+GUIAPP_OFFS_CURRENTWINDOW_LO rcall GuiApp_GetCurrentWindow
ldd yh, Y+GUIAPP_OFFS_CURRENTWINDOW_HI brcc guiAppCheckSendGuiEvents_done
mov yl, r16
or yl, yh
breq guiAppCheckSendGuiEvents_done
ldd r16, Y+GUIAPP_OFFS_GUITIMER ldd r16, Y+GUIAPP_OFFS_GUITIMER
tst r16 tst r16
@@ -444,19 +452,23 @@ guiAppCheckSendGuiEvents:
brne guiAppCheckSendGuiEvents_done brne guiAppCheckSendGuiEvents_done
; timer elapsed, send layout events, draw events ; timer elapsed, send layout events, draw events
ldi r16, WIDGET_SIGNAL_LAYOUT push yl
clr r17 push yh
ldi r20, (1<<WIDGET_FLAGS_VISIBLE_BIT) | (1<<WIDGET_FLAGS_LAYOUT_BIT) mov yl, r18
bigcall OBJ_TreeHandleSignalIfFlagsSet ; (any, !Y) mov yh, r19
ldi r16, WIDGET_SIGNAL_LAYOUT
ldi r16, WIDGET_SIGNAL_DRAW clr r17
clr r17 ldi r20, (1<<WIDGET_FLAGS_VISIBLE_BIT) | (1<<WIDGET_FLAGS_LAYOUT_BIT)
ldi r20, (1<<WIDGET_FLAGS_VISIBLE_BIT) | (1<<WIDGET_FLAGS_DIRTY_BIT) bigcall OBJ_TreeHandleSignalIfFlagsSet ; (any, !Y)
bigcall OBJ_TreeHandleSignalIfFlagsSet ; (any, !Y)
ldi r16, WIDGET_SIGNAL_DRAW
clr r17
ldi r20, (1<<WIDGET_FLAGS_VISIBLE_BIT) | (1<<WIDGET_FLAGS_DIRTY_BIT)
bigcall OBJ_TreeHandleSignalIfFlagsSet ; (any, !Y)
pop yh
pop yl
ldi r16, GUIAPP_GUITIMER ldi r16, GUIAPP_GUITIMER
std Y+GUIAPP_OFFS_GUITIMER, r16 std Y+GUIAPP_OFFS_GUITIMER, r16
guiAppCheckSendGuiEvents_done: guiAppCheckSendGuiEvents_done:
pop yh pop yh
pop yl pop yl
@@ -488,11 +500,8 @@ guiAppSendTouchEvents:
bigcall OBJ_HandleSignal bigcall OBJ_HandleSignal
rjmp guiAppSendTouchEvents_done rjmp guiAppSendTouchEvents_done
guiAppSendTouchEvents_sendToAll: guiAppSendTouchEvents_sendToAll:
ldd r18, Y+GUIAPP_OFFS_CURRENTWINDOW_LO rcall GuiApp_GetCurrentWindow ; r19:r18=current window (none)
ldd r19, Y+GUIAPP_OFFS_CURRENTWINDOW_HI brcc guiAppSendTouchEvents_done
mov r16, r18
or r16, r19
breq guiAppSendTouchEvents_done
; send touch signal ; send touch signal
mov yl, r18 mov yl, r18
mov yh, r19 mov yh, r19
@@ -550,12 +559,9 @@ guiAppSendRootMsgEvents:
guiAppSendRootEventsIfOptsLo: guiAppSendRootEventsIfOptsLo:
push yl push yl
push yh push yh
ldd r18, Y+GUIAPP_OFFS_ROOTWINDOW_LO rcall GuiApp_GetRootWindow ; r19:r18=root window (none)
ldd r19, Y+GUIAPP_OFFS_ROOTWINDOW_HI brcc guiAppSendRootEventsIfOptsLo_done
mov r22, r18 ; send signal to root window and all below
or r22, r21
breq guiAppSendRootEventsIfOptsLo_done
; send touch signal
mov yl, r18 mov yl, r18
mov yh, r19 mov yh, r19
bigcall OBJ_TreeHandleSignalIfMatchingOptsLo bigcall OBJ_TreeHandleSignalIfMatchingOptsLo
@@ -605,6 +611,7 @@ GuiApp_DefaultSignalmap:
; header ; header
.dw Object_DefaultSignalmap ; next table to use .dw Object_DefaultSignalmap ; next table to use
; entries ; entries
.db 0, OBJECT_SIGNAL_TIMER, LOW(GuiApp_OnTimer), HIGH(GuiApp_OnTimer)
.db 0, OBJECT_SIGNAL_DESTROY, LOW(GuiApp_OnDestroy), HIGH(GuiApp_OnDestroy) .db 0, OBJECT_SIGNAL_DESTROY, LOW(GuiApp_OnDestroy), HIGH(GuiApp_OnDestroy)
.db 0, 0, 0, 0 ; end of table .db 0, 0, 0, 0 ; end of table

View File

@@ -162,14 +162,16 @@ RootWindow_DefaultSignalmap:
; header ; header
.dw Widget_DefaultSignalmap ; next table to use .dw Widget_DefaultSignalmap ; next table to use
; entries ; entries
.db 0, WIDGET_SIGNAL_DRAW, LOW(Widget_OnDrawNop), HIGH(Widget_OnDrawNop) ; .db 0, WIDGET_SIGNAL_DRAW, LOW(Widget_OnDrawNop), HIGH(Widget_OnDrawNop)
.db 0, WIDGET_SIGNAL_DRAW, LOW(Widget_OnDraw), HIGH(Widget_OnDraw)
.db 0, WIDGET_SIGNAL_LAYOUT, LOW(RootWindow_OnLayout), HIGH(RootWindow_OnLayout) .db 0, WIDGET_SIGNAL_LAYOUT, LOW(RootWindow_OnLayout), HIGH(RootWindow_OnLayout)
.db 0, 0, 0, 0 ; end of table .db 0, 0, 0, 0 ; end of table
RootWindow_DefaultStyle: RootWindow_DefaultStyle:
.dw DISPLAY_COLOR_BLACK ; frontCol_norm .dw DISPLAY_COLOR_BLACK ; frontCol_norm
.dw DISPLAY_COLOR_LIGHTGREY ; backCol_norm ; .dw DISPLAY_COLOR_LIGHTGREY ; backCol_norm
.dw DISPLAY_COLOR_YELLOW ; backCol_norm
.dw DISPLAY_COLOR_BLACK ; borderCol_norm .dw DISPLAY_COLOR_BLACK ; borderCol_norm
.dw DISPLAY_COLOR_WHITE ; shadowCol_norm .dw DISPLAY_COLOR_WHITE ; shadowCol_norm

View File

@@ -33,20 +33,20 @@
; widget style object ; widget style object
.equ WIDGET_STYLE_OFFS_FRONTCOL_NORM = 0 .equ WIDGET_STYLE_OFFS_FRONTCOL_NORM = 0
.equ WIDGET_STYLE_OFFS_BACKCOL_NORM = 1 .equ WIDGET_STYLE_OFFS_BACKCOL_NORM = 2
.equ WIDGET_STYLE_OFFS_BORDERCOL_NORM = 2 .equ WIDGET_STYLE_OFFS_BORDERCOL_NORM = 4
.equ WIDGET_STYLE_OFFS_SHADOWCOL_NORM = 3 .equ WIDGET_STYLE_OFFS_SHADOWCOL_NORM = 6
.equ WIDGET_STYLE_OFFS_FRONTCOL_ACTIVATED = 4 .equ WIDGET_STYLE_OFFS_FRONTCOL_ACTIVATED = 8
.equ WIDGET_STYLE_OFFS_BACKCOL_ACTIVATED = 5 .equ WIDGET_STYLE_OFFS_BACKCOL_ACTIVATED = 10
.equ WIDGET_STYLE_OFFS_BORDERCOL_ACTIVATED = 6 .equ WIDGET_STYLE_OFFS_BORDERCOL_ACTIVATED = 12
.equ WIDGET_STYLE_OFFS_SHADOWCOL_ACTIVATED = 7 .equ WIDGET_STYLE_OFFS_SHADOWCOL_ACTIVATED = 14
.equ WIDGET_STYLE_OFFS_OUTERBORDERSIZE = 8 .equ WIDGET_STYLE_OFFS_OUTERBORDERSIZE = 16
.equ WIDGET_STYLE_OFFS_SPACING = 9 .equ WIDGET_STYLE_OFFS_SPACING = 17
.equ WIDGET_STYLE_OFFS_FONT_LO = 10 .equ WIDGET_STYLE_OFFS_FONT_LO = 18
.equ WIDGET_STYLE_OFFS_FONT_HI = 11 .equ WIDGET_STYLE_OFFS_FONT_HI = 19
.equ WIDGET_STYLE_OFFS_CHARWIDTH = 12 .equ WIDGET_STYLE_OFFS_CHARWIDTH = 20
.equ WIDGET_STYLE_OFFS_CHARHEIGHT = 13 .equ WIDGET_STYLE_OFFS_CHARHEIGHT = 21
.equ WIDGET_STYLE_SIZE = 14 .equ WIDGET_STYLE_SIZE = 22
; widget opts_lo (bits 7 and 6 used by OBJECT_OPTSLO) ; widget opts_lo (bits 7 and 6 used by OBJECT_OPTSLO)
.equ WIDGET_OPTSLO_INPUT_BIT = 5 ; TOUCH, KEY .equ WIDGET_OPTSLO_INPUT_BIT = 5 ; TOUCH, KEY