gui2: more work (vlayout doesn't work, yet).
This commit is contained in:
@@ -31,6 +31,14 @@ DEBUG2:
|
||||
rjmp DEBUG2
|
||||
|
||||
|
||||
DEBUG3:
|
||||
ldi r19, 50
|
||||
ldi r20, 18
|
||||
ldi r21, 2
|
||||
rcall blinkLed
|
||||
rjmp DEBUG3
|
||||
|
||||
|
||||
|
||||
; @param r19 loop count
|
||||
; @param r20 on time
|
||||
|
||||
@@ -250,16 +250,44 @@ test:
|
||||
ldi r16, 0
|
||||
ldi r17, 0
|
||||
bigcall GuiApp_new
|
||||
brcs test_ok
|
||||
bigjmp DEBUG1
|
||||
|
||||
test_ok:
|
||||
brcc DEBUG_STOP
|
||||
sts guiApp, yl
|
||||
sts guiApp+1, yh
|
||||
|
||||
bigcall GuiApp_GetRootWindow
|
||||
brcc DEBUG_STOP
|
||||
sts rootWindow, r18
|
||||
sts rootWindow+1, r19
|
||||
mov xl, r18
|
||||
mov xh, r19
|
||||
ldi r16, 0 ; OPTS
|
||||
ldi r17, (WIDGET_PACK_FILLED<<WIDGET_PACK_HSELF0_BIT) | (WIDGET_PACK_FILLED<<WIDGET_PACK_VSELF0_BIT) ; PACK
|
||||
ldi r20, LOW(RESSSOURCE_TXT_LIVINGROOM)
|
||||
ldi r21, HIGH(RESSSOURCE_TXT_LIVINGROOM)
|
||||
bigcall MainWindow_new
|
||||
brcc DEBUG_STOP
|
||||
|
||||
sts mainWin1, yl
|
||||
sts mainWin1+1, yh
|
||||
|
||||
ldd r16, Y+OBJECT_OFFS_FLAGS
|
||||
sbr r16, (1<<WIDGET_FLAGS_VISIBLE_BIT) | (1<<WIDGET_FLAGS_LAYOUT_BIT) | (1<<WIDGET_FLAGS_DIRTY_BIT)
|
||||
std Y+OBJECT_OFFS_FLAGS, r16
|
||||
|
||||
ret
|
||||
|
||||
|
||||
|
||||
DEBUG_STOP:
|
||||
bigjmp DEBUG1
|
||||
|
||||
|
||||
DEBUG_STOP2:
|
||||
bigjmp DEBUG2
|
||||
|
||||
DEBUG_STOP3:
|
||||
bigjmp DEBUG3
|
||||
|
||||
|
||||
|
||||
; ***************************************************************************
|
||||
@@ -320,8 +348,10 @@ test_ok:
|
||||
|
||||
.dseg
|
||||
|
||||
guiApp: .byte 2
|
||||
|
||||
guiApp: .byte 2
|
||||
; debug
|
||||
rootWindow: .byte 2
|
||||
mainWin1: .byte 2
|
||||
|
||||
heapStart:
|
||||
|
||||
|
||||
@@ -55,8 +55,7 @@ guiapp_touch_event:
|
||||
;
|
||||
; @return CFLAG set of okay, cleared otherwise
|
||||
; @return Y address of newly created object
|
||||
; @param r16 value for OBJECT_OFFS_OPTS_LO
|
||||
; @param r17 value for OBJECT_OFFS_OPTS_HI
|
||||
; @param r16 value for OBJECT_OFFS_OPTS
|
||||
; @clobbers any
|
||||
|
||||
GuiApp_new:
|
||||
@@ -76,22 +75,13 @@ GuiApp_new_ret:
|
||||
; @routine GuiApp_Init @global
|
||||
;
|
||||
; @param Y address of object in SDRAM
|
||||
; @param r16 value for OBJECT_OFFS_OPTS_LO
|
||||
; @param r17 value for OBJECT_OFFS_OPTS_HI
|
||||
; @param r16 value for OBJECT_OFFS_OPTS
|
||||
; @clobbers r16, r17, X
|
||||
|
||||
GuiApp_Init:
|
||||
; call base class
|
||||
bigcall OBJ_Init ; (r16, r17, X)
|
||||
|
||||
; clear object-specific data
|
||||
mov xl, yl
|
||||
mov xh, yh
|
||||
adiw xh:xl, GUIAPP_OFFS_BEGIN
|
||||
clr r16
|
||||
ldi r17, (GUIAPP_SIZE-GUIAPP_OFFS_BEGIN)
|
||||
bigcall Utils_FillSram ; (r17, X)
|
||||
|
||||
; set default signal map
|
||||
ldi r16, LOW(GuiApp_DefaultSignalmap*2)
|
||||
std Y+OBJECT_OFFS_SIGNALMAP_LO, r16
|
||||
@@ -103,13 +93,13 @@ GuiApp_Init:
|
||||
push yh
|
||||
mov xl, yl
|
||||
mov xh, yh
|
||||
ldi r16, 0 ; opts_lo
|
||||
ldi r17, 0 ; opts_hi
|
||||
ldi r16, 0 ; opts
|
||||
ldi r17, 0 ; pack
|
||||
bigcall RootWindow_new
|
||||
|
||||
; always visible
|
||||
ldd r16, Y+OBJECT_OFFS_FLAGS
|
||||
sbr r16, (1<<WIDGET_FLAGS_VISIBLE_BIT)
|
||||
sbr r16, (1<<WIDGET_FLAGS_VISIBLE_BIT) | (1<<WIDGET_FLAGS_LAYOUT_BIT) | (1<<WIDGET_FLAGS_DIRTY_BIT)
|
||||
std Y+OBJECT_OFFS_FLAGS, r16
|
||||
|
||||
mov xl, yl
|
||||
@@ -245,6 +235,7 @@ GuiApp_UngrabTouchEvents_ret:
|
||||
;
|
||||
; @param Y address of object in SDRAM
|
||||
; @param CFLAG set if response is not a NULL pointer
|
||||
; @return r19:r18 root window
|
||||
; @clobbers none
|
||||
|
||||
GuiApp_GetRootWindow:
|
||||
@@ -377,8 +368,8 @@ GuiApp_OnDestroy:
|
||||
; @clobbers any, !Y
|
||||
|
||||
GuiApp_OnTimer:
|
||||
rcall guiAppCheckTouch ; (any, !Y)
|
||||
rcall guiAppSendTimerEvents ; (any, !Y)
|
||||
; rcall guiAppCheckTouch ; (any, !Y)
|
||||
; rcall guiAppSendTimerEvents ; (any, !Y)
|
||||
rcall guiAppCheckSendGuiEvents ; (any, !Y)
|
||||
sec
|
||||
ret
|
||||
@@ -421,9 +412,9 @@ GuiApp_OnTouch:
|
||||
guiAppSendTimerEvents:
|
||||
ldi r16, OBJECT_SIGNAL_TIMER
|
||||
clr r17
|
||||
ldi r20, (1<<OBJECT_OPTSLO_TIMER_BIT)
|
||||
ldi r21, (1<<OBJECT_OPTSLO_TIMER_BIT)
|
||||
rcall guiAppSendRootEventsIfOptsLo
|
||||
ldi r20, (1<<OBJECT_OPTS_TIMER_BIT)
|
||||
ldi r21, (1<<OBJECT_OPTS_TIMER_BIT)
|
||||
rcall guiAppSendRootEventsIfOpts
|
||||
sec
|
||||
ret
|
||||
; @end
|
||||
@@ -460,7 +451,7 @@ guiAppCheckSendGuiEvents:
|
||||
clr r17
|
||||
ldi r20, (1<<WIDGET_FLAGS_VISIBLE_BIT) | (1<<WIDGET_FLAGS_LAYOUT_BIT)
|
||||
bigcall OBJ_TreeHandleSignalIfFlagsSet ; (any, !Y)
|
||||
|
||||
|
||||
ldi r16, WIDGET_SIGNAL_DRAW
|
||||
clr r17
|
||||
ldi r20, (1<<WIDGET_FLAGS_VISIBLE_BIT) | (1<<WIDGET_FLAGS_DIRTY_BIT)
|
||||
@@ -507,9 +498,9 @@ guiAppSendTouchEvents_sendToAll:
|
||||
mov yh, r19
|
||||
ldi r16, WIDGET_SIGNAL_TOUCH
|
||||
clr r17
|
||||
ldi r20, (1<<WIDGET_OPTSLO_INPUT_BIT)
|
||||
ldi r21, (1<<WIDGET_OPTSLO_INPUT_BIT)
|
||||
bigcall OBJ_TreeHandleSignalIfMatchingOptsLo
|
||||
ldi r20, (1<<WIDGET_OPTS_INPUT_BIT)
|
||||
ldi r21, (1<<WIDGET_OPTS_INPUT_BIT)
|
||||
bigcall OBJ_TreeHandleSignalIfMatchingOpts
|
||||
guiAppSendTouchEvents_done:
|
||||
pop yh
|
||||
pop yl
|
||||
@@ -533,9 +524,9 @@ guiAppSendTouchEvents_done:
|
||||
guiAppSendRootMsgEvents:
|
||||
ldi r16, WIDGET_SIGNAL_TOUCH
|
||||
clr r17
|
||||
ldi r20, (1<<OBJECT_OPTSLO_MSGRECV_BIT)
|
||||
ldi r21, (1<<OBJECT_OPTSLO_MSGRECV_BIT)
|
||||
rcall guiAppSendRootEventsIfOptsLo
|
||||
ldi r20, (1<<OBJECT_OPTS_MSGRECV_BIT)
|
||||
ldi r21, (1<<OBJECT_OPTS_MSGRECV_BIT)
|
||||
rcall guiAppSendRootEventsIfOpts
|
||||
sec
|
||||
ret
|
||||
; @end
|
||||
@@ -543,7 +534,7 @@ guiAppSendRootMsgEvents:
|
||||
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
; @routine guiAppSendRootEventsIfOptsLo
|
||||
; @routine guiAppSendRootEventsIfOpts
|
||||
;
|
||||
; Send events to all widgets with matching OPTS_LO.
|
||||
;
|
||||
@@ -552,20 +543,20 @@ guiAppSendRootMsgEvents:
|
||||
; @param R17 selector
|
||||
; @param xl param1
|
||||
; @param xh param2
|
||||
; @param r20 mask for OBJECT_OFFS_OPTS_LO
|
||||
; @param r21 value for OBJECT_OFFS_OPTS_LO to match
|
||||
; @param r20 mask for OBJECT_OFFS_OPTS
|
||||
; @param r21 value for OBJECT_OFFS_OPTS to match
|
||||
; @clobbers any, !Y
|
||||
|
||||
guiAppSendRootEventsIfOptsLo:
|
||||
guiAppSendRootEventsIfOpts:
|
||||
push yl
|
||||
push yh
|
||||
rcall GuiApp_GetRootWindow ; r19:r18=root window (none)
|
||||
brcc guiAppSendRootEventsIfOptsLo_done
|
||||
brcc guiAppSendRootEventsIfOpts_done
|
||||
; send signal to root window and all below
|
||||
mov yl, r18
|
||||
mov yh, r19
|
||||
bigcall OBJ_TreeHandleSignalIfMatchingOptsLo
|
||||
guiAppSendRootEventsIfOptsLo_done:
|
||||
bigcall OBJ_TreeHandleSignalIfMatchingOpts
|
||||
guiAppSendRootEventsIfOpts_done:
|
||||
pop yh
|
||||
pop yl
|
||||
ret
|
||||
@@ -609,7 +600,7 @@ guiAppCheckTouch_ret:
|
||||
|
||||
GuiApp_DefaultSignalmap:
|
||||
; header
|
||||
.dw Object_DefaultSignalmap ; next table to use
|
||||
.dw Object_DefaultSignalmap*2 ; next table to use
|
||||
; entries
|
||||
.db 0, OBJECT_SIGNAL_TIMER, LOW(GuiApp_OnTimer), HIGH(GuiApp_OnTimer)
|
||||
.db 0, OBJECT_SIGNAL_DESTROY, LOW(GuiApp_OnDestroy), HIGH(GuiApp_OnDestroy)
|
||||
|
||||
@@ -34,8 +34,8 @@
|
||||
; @return CFLAG set of okay, cleared otherwise
|
||||
; @return Y address of newly created object
|
||||
; @param X parent widget
|
||||
; @param r16 value for OBJECT_OFFS_OPTS_LO
|
||||
; @param r17 value for OBJECT_OFFS_OPTS_HI
|
||||
; @param r16 value for OBJECT_OFFS_OPTS
|
||||
; @param r17 value for WIDGET_OFFS_PACK
|
||||
; @param r21:r20 ressource id for title
|
||||
; @clobbers any
|
||||
|
||||
@@ -127,21 +127,21 @@ HLayout_OnGetDefaultWidth:
|
||||
|
||||
HLayout_OnGetDefaultHeight:
|
||||
rcall Layout_SetDefaultHeights
|
||||
rcall Layout_GetMaxTmp
|
||||
rcall Layout_GetMaxTmp ; r19:r18=max tmp value (r20, r21)
|
||||
|
||||
; get outer border
|
||||
ldd zl, Y+WIDGET_OFFS_STYLE_LO
|
||||
ldd zh, Y+WIDGET_OFFS_STYLE_HI
|
||||
adiw zh:zl, WIDGET_STYLE_OFFS_OUTERBORDERSIZE
|
||||
lpm r16, Z
|
||||
clr r17
|
||||
lpm r20, Z
|
||||
clr r21
|
||||
sbiw zh:zl, WIDGET_STYLE_OFFS_OUTERBORDERSIZE
|
||||
|
||||
add r18, r16 ; add outer border (top)
|
||||
adc r19, r17
|
||||
add r18, r20 ; add outer border (top)
|
||||
adc r19, r21
|
||||
|
||||
add r18, r16 ; add outer border (bottom)
|
||||
adc r19, r17
|
||||
add r18, r20 ; add outer border (bottom)
|
||||
adc r19, r21
|
||||
|
||||
sec
|
||||
ret
|
||||
@@ -156,51 +156,6 @@ HLayout_OnGetDefaultHeight:
|
||||
; @clobbers r16, r17, r18, r19, r20, r21, r22, r23, Z
|
||||
|
||||
hLayoutSetX:
|
||||
ldd zl, Y+WIDGET_OFFS_STYLE_LO
|
||||
ldd zh, Y+WIDGET_OFFS_STYLE_HI
|
||||
|
||||
; get spacing
|
||||
adiw zh:zl, WIDGET_STYLE_OFFS_SPACING
|
||||
lpm r22, Z
|
||||
clr r23
|
||||
sbiw zh:zl, WIDGET_STYLE_OFFS_SPACING
|
||||
; get outer border
|
||||
adiw zh:zl, WIDGET_STYLE_OFFS_OUTERBORDERSIZE
|
||||
lpm r20, Z
|
||||
clr r21
|
||||
sbiw zh:zl, WIDGET_STYLE_OFFS_OUTERBORDERSIZE
|
||||
|
||||
push yl
|
||||
push yh
|
||||
bigcall OBJ_GetFirstChild
|
||||
hLayoutSetX_loop:
|
||||
brcc hLayoutSetX_loopEnd
|
||||
mov yl, r18
|
||||
mov yh, r19
|
||||
; set X
|
||||
std Y+WIDGET_OFFS_X_LO, r20
|
||||
std Y+WIDGET_OFFS_X_HI, r21
|
||||
; set width
|
||||
ldd r16, Y+WIDGET_OFFS_TMP_LO
|
||||
ldd r17, Y+WIDGET_OFFS_TMP_HI
|
||||
std Y+WIDGET_OFFS_WIDTH_LO, r16
|
||||
std Y+WIDGET_OFFS_WIDTH_HI, r17
|
||||
; advance r21:r20
|
||||
add r20, r16 ; add widget size
|
||||
adc r21, r17
|
||||
add r20, r22 ; add spacing
|
||||
adc r21, r23
|
||||
|
||||
; force direct children to re-layout and re-draw
|
||||
ldd r16, Y+OBJECT_OFFS_FLAGS
|
||||
ori r16, (1<<WIDGET_FLAGS_DIRTY_BIT) | (1<<WIDGET_FLAGS_LAYOUT_BIT)
|
||||
std Y+OBJECT_OFFS_FLAGS, r16
|
||||
|
||||
rcall OBJ_GetNext
|
||||
rjmp hLayoutSetX_loop
|
||||
hLayoutSetX_loopEnd:
|
||||
pop yh
|
||||
pop yl
|
||||
ret
|
||||
; @end
|
||||
|
||||
@@ -213,87 +168,12 @@ hLayoutSetX_loopEnd:
|
||||
; @clobbers r17, r18, r19, r20, r21, r22, r23, Z
|
||||
|
||||
hLayoutVerticalAdjust:
|
||||
bigcall Layout_SetDefaultHeights
|
||||
|
||||
ldd zl, Y+WIDGET_OFFS_STYLE_LO
|
||||
ldd zh, Y+WIDGET_OFFS_STYLE_HI
|
||||
|
||||
; get outer border
|
||||
adiw zh:zl, WIDGET_STYLE_OFFS_OUTERBORDERSIZE
|
||||
lpm r20, Z
|
||||
clr r21
|
||||
sbiw zh:zl, WIDGET_STYLE_OFFS_OUTERBORDERSIZE
|
||||
|
||||
ldd r22, Y+WIDGET_OFFS_HEIGHT_LO
|
||||
ldd r23, Y+WIDGET_OFFS_HEIGHT_HI
|
||||
sub r22, r20 ; subtract border (top)
|
||||
sbc r23, r21
|
||||
sub r22, r20 ; subtract border (bottom)
|
||||
sbc r23, r21
|
||||
|
||||
push yl
|
||||
push yh
|
||||
bigcall OBJ_GetFirstChild
|
||||
hLayoutVerticalAdjust_loop:
|
||||
brcc hLayoutVerticalAdjust_loopEnd
|
||||
mov yl, r18
|
||||
mov yh, r19
|
||||
std Y+WIDGET_OFFS_Y_LO, r20
|
||||
std Y+WIDGET_OFFS_Y_HI, r21
|
||||
|
||||
ldd r18, Y+WIDGET_OFFS_TMP_LO
|
||||
ldd r19, Y+WIDGET_OFFS_TMP_HI
|
||||
|
||||
ldd r17, Y+OBJECT_OFFS_OPTS_LO
|
||||
sbrs r17, WIDGET_OPTSLO_FILLY_BIT
|
||||
rjmp hLayoutVerticalAdjust_setHeight
|
||||
mov r18, r22 ; increase height to full height
|
||||
mov r19, r23
|
||||
hLayoutVerticalAdjust_setHeight:
|
||||
std Y+WIDGET_OFFS_HEIGHT_LO, r18
|
||||
std Y+WIDGET_OFFS_HEIGHT_HI, r19
|
||||
rcall OBJ_GetNext
|
||||
rjmp hLayoutVerticalAdjust_loop
|
||||
hLayoutVerticalAdjust_loopEnd:
|
||||
pop yh
|
||||
pop yl
|
||||
ret
|
||||
; @end
|
||||
|
||||
|
||||
|
||||
hLayoutHorizontally:
|
||||
rcall Layout_SetDefaultWidths
|
||||
rcall Layout_SumTmpValues ; r21:r20=width
|
||||
|
||||
ldd r22, Y+WIDGET_OFFS_WIDTH_LO
|
||||
ldd r23, Y+WIDGET_OFFS_WIDTH_HI
|
||||
sub r22, r20
|
||||
sbc r23, r21
|
||||
breq hLayoutHorizontally_setX
|
||||
brcs hLayoutHorizontally_setX
|
||||
|
||||
; r23:r22=remaining space to distribute
|
||||
push r22
|
||||
ldi r22, (1<<WIDGET_OPTSLO_FILLX_BIT)
|
||||
rcall LayoutCountExpandableChildren ; r16=number of expandable child widgets
|
||||
pop r22
|
||||
tst r16
|
||||
breq hLayoutHorizontally_setX
|
||||
|
||||
; calc space to add to each expandable child widget and add it
|
||||
mov r20, r22
|
||||
mov r21, r23
|
||||
mov r22, r16
|
||||
clr r23
|
||||
bigcall Utils_Divu16_16_16 ; r17:r16=space per expandable child widget
|
||||
mov r20, r16
|
||||
mov r21, r17
|
||||
ldi r22, (1<<WIDGET_OPTSLO_FILLX_BIT)
|
||||
rcall Layout_AddToTmpOfFillXChildren
|
||||
|
||||
hLayoutHorizontally_setX:
|
||||
rcall hLayoutSetX
|
||||
ret
|
||||
; @end
|
||||
|
||||
@@ -306,7 +186,7 @@ hLayoutHorizontally_setX:
|
||||
|
||||
HLayout_DefaultSignalmap:
|
||||
; header
|
||||
.dw Widget_DefaultSignalmap ; next table to use
|
||||
.dw Widget_DefaultSignalmap*2 ; next table to use
|
||||
; entries
|
||||
.db 0, WIDGET_SIGNAL_LAYOUT, LOW(HLayout_OnLayout), HIGH(HLayout_OnLayout)
|
||||
.db WIDGET_VALUE_DEFAULT_WIDTH, WIDGET_SIGNAL_GETVALUE, LOW(HLayout_OnGetDefaultWidth), HIGH(HLayout_OnGetDefaultWidth)
|
||||
|
||||
@@ -35,8 +35,8 @@
|
||||
; @return CFLAG set of okay, cleared otherwise
|
||||
; @return Y address of newly created object
|
||||
; @param X parent widget
|
||||
; @param r16 value for OBJECT_OFFS_OPTS_LO
|
||||
; @param r17 value for OBJECT_OFFS_OPTS_HI
|
||||
; @param r16 value for OBJECT_OFFS_OPTS
|
||||
; @param r17 value for WIDGET_OFFS_PACK
|
||||
; @param r21:r20 ressource id for label text
|
||||
; @clobbers any
|
||||
|
||||
@@ -62,8 +62,8 @@ Label_new_ret:
|
||||
;
|
||||
; @param Y address of widget
|
||||
; @param X parent widget (if any)
|
||||
; @param r16 value for OBJECT_OFFS_OPTS_LO
|
||||
; @param r17 value for OBJECT_OFFS_OPTS_HI
|
||||
; @param r16 value for OBJECT_OFFS_OPTS
|
||||
; @param r17 value for WIDGET_OFFS_PACK
|
||||
; @param r21:r20 ressource id for label text
|
||||
; @clobbers r16, r17, X
|
||||
|
||||
@@ -72,14 +72,6 @@ Label_Init:
|
||||
push r21
|
||||
; call base class
|
||||
bigcall Widget_Init ; (r16, r17, X)
|
||||
|
||||
; clear widget-specific data
|
||||
mov xl, yl
|
||||
mov xh, yh
|
||||
adiw xh:xl, LABEL_OFFS_BEGIN
|
||||
clr r16
|
||||
ldi r17, (LABEL_SIZE-LABEL_OFFS_BEGIN)
|
||||
bigcall Utils_FillSram ; (r17, X)
|
||||
pop r21
|
||||
pop r20
|
||||
|
||||
@@ -138,8 +130,8 @@ Label_OnDraw:
|
||||
bigcall Widget_Clear
|
||||
rcall labelWriteText
|
||||
|
||||
ldd r16, Y+OBJECT_OFFS_OPTS_LO
|
||||
andi r16, (1<<WIDGET_OPTSLO_BORDER_BIT)
|
||||
ldd r16, Y+OBJECT_OFFS_OPTS
|
||||
andi r16, (1<<WIDGET_OPTS_BORDER_BIT)
|
||||
breq Label_OnDraw_done
|
||||
bigcall Widget_DrawBorder
|
||||
|
||||
@@ -169,10 +161,17 @@ Label_OnGetDefaultWidth:
|
||||
rcall labelCalcTextWidth
|
||||
mov r18, r12
|
||||
mov r19, r13
|
||||
ldi r16, 2 ; add small border around text
|
||||
add r18, r16
|
||||
adc r19, r16
|
||||
sub r19, r16
|
||||
|
||||
; add borders
|
||||
ldd zl, Y+WIDGET_OFFS_STYLE_LO
|
||||
ldd zh, Y+WIDGET_OFFS_STYLE_HI
|
||||
adiw zh:zl, WIDGET_STYLE_OFFS_OUTERBORDERSIZE
|
||||
lpm r20, Z
|
||||
clr r21
|
||||
add r18, r20 ; add border at begin
|
||||
adc r19, r21
|
||||
add r18, r20 ; add border at end
|
||||
adc r19, r21
|
||||
sec
|
||||
ret
|
||||
; @end
|
||||
@@ -183,7 +182,6 @@ Label_OnGetDefaultWidth:
|
||||
; @routine Label_OnGetDefaultHeight @global
|
||||
;
|
||||
; @param Y address of widget
|
||||
; @param r17 value requested
|
||||
; @param xl param1
|
||||
; @param xh param2
|
||||
; @return CFLAG set if signal handled
|
||||
@@ -194,10 +192,17 @@ Label_OnGetDefaultHeight:
|
||||
rcall Widget_GetCharHeight ; R16=char height
|
||||
mov r18, r16
|
||||
clr r19
|
||||
ldi r16, 2 ; add small border around text
|
||||
add r18, r16
|
||||
adc r19, r16
|
||||
sub r19, r16
|
||||
|
||||
; add borders
|
||||
ldd zl, Y+WIDGET_OFFS_STYLE_LO
|
||||
ldd zh, Y+WIDGET_OFFS_STYLE_HI
|
||||
adiw zh:zl, WIDGET_STYLE_OFFS_OUTERBORDERSIZE
|
||||
lpm r20, Z
|
||||
clr r21
|
||||
add r18, r20 ; add border at begin
|
||||
adc r19, r21
|
||||
add r18, r20 ; add border at end
|
||||
adc r19, r21
|
||||
sec
|
||||
ret
|
||||
; @end
|
||||
@@ -231,12 +236,12 @@ labelWriteText_ret:
|
||||
|
||||
labelAlignTextXY:
|
||||
rcall labelCalcTextWidth ; Z=text, R13:R12=text width (r16, r17, r18)
|
||||
rcall Widget_AlignContentX ; (r8, r9, r10, r11, r12, r13, r14, r15, r16, r17, r18, r19, r20, r21, r22, r23, r24, r25)
|
||||
rcall Widget_PackContentX ; R5:R4=X (r17, r18, r19, r20, r21)
|
||||
|
||||
rcall Widget_GetCharHeight ; R16=char height
|
||||
mov r12, r16
|
||||
clr r13
|
||||
rcall Widget_AlignContentY ; (r8, r9, r10, r11, r12, r13, r14, r15, r16, r17, r18, r19, r20, r21, r22, r23, r24, r25)
|
||||
rcall Widget_PackContentY ; R7:R6=Y (r17, r18, r19, r20, r21)
|
||||
ret
|
||||
; @end
|
||||
|
||||
@@ -274,7 +279,7 @@ labelCalcTextWidth_ret:
|
||||
|
||||
Label_DefaultSignalmap:
|
||||
; header
|
||||
.dw Widget_DefaultSignalmap ; next table to use
|
||||
.dw Widget_DefaultSignalmap*2 ; next table to use
|
||||
; entries
|
||||
.db 0, WIDGET_SIGNAL_DRAW, LOW(Label_OnDraw), HIGH(Label_OnDraw)
|
||||
.db WIDGET_VALUE_DEFAULT_WIDTH, WIDGET_SIGNAL_GETVALUE, LOW(Label_OnGetDefaultWidth), HIGH(Label_OnGetDefaultWidth)
|
||||
|
||||
@@ -27,7 +27,8 @@
|
||||
; ---------------------------------------------------------------------------
|
||||
; @routine Layout_SetDefaultWidths
|
||||
;
|
||||
; Set defaultWidth in WIDGET_OFFS_TMP_LO/HI
|
||||
; Set default width in WIDGET_OFFS_TMP_LO/HI of child widgets
|
||||
; Ignores invisible widgets.
|
||||
;
|
||||
; @param Y pointer to widget
|
||||
; @clobbers any, !Y
|
||||
@@ -36,15 +37,19 @@ Layout_SetDefaultWidths:
|
||||
push yl
|
||||
push yh
|
||||
bigcall OBJ_GetFirstChild
|
||||
brcc Layout_SetDefaultWidths_ret
|
||||
Layout_SetDefaultWidths_loop:
|
||||
brcc Layout_SetDefaultWidths_ret
|
||||
mov yl, r18
|
||||
mov yh, r19
|
||||
ldd r18, Y+OBJECT_OFFS_FLAGS
|
||||
sbrs r18, WIDGET_FLAGS_VISIBLE_BIT
|
||||
rjmp Layout_SetDefaultWidths_next
|
||||
bigcall Widget_GetDefaultWidth
|
||||
std Y+WIDGET_OFFS_TMP_LO, r18
|
||||
std Y+WIDGET_OFFS_TMP_HI, r19
|
||||
Layout_SetDefaultWidths_next:
|
||||
rcall OBJ_GetNext
|
||||
rjmp Layout_SetDefaultWidths_loop
|
||||
brcs Layout_SetDefaultWidths_loop
|
||||
Layout_SetDefaultWidths_ret:
|
||||
pop yh
|
||||
pop yl
|
||||
@@ -56,6 +61,9 @@ Layout_SetDefaultWidths_ret:
|
||||
; ---------------------------------------------------------------------------
|
||||
; @routine Layout_SetDefaultHeights
|
||||
;
|
||||
; Set default height in WIDGET_OFFS_TMP_LO/HI of child widgets
|
||||
; Ignores invisible widgets.
|
||||
;
|
||||
; @param Y pointer to widget
|
||||
; @clobbers any, !Y
|
||||
|
||||
@@ -63,15 +71,19 @@ Layout_SetDefaultHeights:
|
||||
push yl
|
||||
push yh
|
||||
bigcall OBJ_GetFirstChild
|
||||
brcc Layout_SetDefaultHeights_ret
|
||||
Layout_SetDefaultHeights_loop:
|
||||
brcc Layout_SetDefaultHeights_ret
|
||||
mov yl, r18
|
||||
mov yh, r19
|
||||
ldd r18, Y+OBJECT_OFFS_FLAGS
|
||||
sbrs r18, WIDGET_FLAGS_VISIBLE_BIT
|
||||
rjmp Layout_SetDefaultHeights_next
|
||||
bigcall Widget_GetDefaultHeight
|
||||
std Y+WIDGET_OFFS_TMP_LO, r18
|
||||
std Y+WIDGET_OFFS_TMP_HI, r19
|
||||
Layout_SetDefaultHeights_next:
|
||||
rcall OBJ_GetNext
|
||||
rjmp Layout_SetDefaultHeights_loop
|
||||
brcs Layout_SetDefaultHeights_loop
|
||||
Layout_SetDefaultHeights_ret:
|
||||
pop yh
|
||||
pop yl
|
||||
@@ -83,6 +95,8 @@ Layout_SetDefaultHeights_ret:
|
||||
; ---------------------------------------------------------------------------
|
||||
; @routine Layout_SumTmpValues
|
||||
;
|
||||
; Ignores invisible widgets.
|
||||
;
|
||||
; @param Y pointer to widget
|
||||
; @return r19:r18 total width of all child widgets plus space between
|
||||
; @clobbers r16, r17, r18, r19, r20, r21, r22, r23, Z
|
||||
@@ -105,20 +119,23 @@ Layout_SumTmpValues:
|
||||
push yl
|
||||
push yh
|
||||
bigcall OBJ_GetFirstChild
|
||||
brcc Layout_SumTmpValues_loopEnd
|
||||
Layout_SumTmpValues_loop:
|
||||
brcc Layout_SumTmpValues_loopEnd
|
||||
mov yl, r18
|
||||
mov yh, r19
|
||||
|
||||
ldd r18, Y+OBJECT_OFFS_FLAGS
|
||||
sbrs r18, WIDGET_FLAGS_VISIBLE_BIT
|
||||
rjmp Layout_SumTmpValues_next
|
||||
ldd r18, Y+WIDGET_OFFS_TMP_LO
|
||||
ldd r19, Y+WIDGET_OFFS_TMP_HI
|
||||
add r20, r18 ; add widget size
|
||||
adc r21, r19
|
||||
add r20, r22 ; add spacing
|
||||
adc r20, r22
|
||||
sub r20, r22
|
||||
adc r21, r22
|
||||
sub r21, r22
|
||||
Layout_SumTmpValues_next:
|
||||
rcall OBJ_GetNext
|
||||
rjmp Layout_SumTmpValues_loop
|
||||
brcs Layout_SumTmpValues_loop
|
||||
Layout_SumTmpValues_loopEnd:
|
||||
mov r16, r20
|
||||
or r16, r21
|
||||
@@ -145,9 +162,11 @@ Layout_SumTmpValues_done:
|
||||
; ---------------------------------------------------------------------------
|
||||
; @routine Layout_GetMaxTmp
|
||||
;
|
||||
; Ignores invisible widgets.
|
||||
;
|
||||
; @param Y pointer to widget
|
||||
; @return r19:r18 maximum value in WIDGET_OFFS_TMP_LO/HI of children
|
||||
; @clobbers any, !Y
|
||||
; @clobbers r20, r21
|
||||
|
||||
Layout_GetMaxTmp:
|
||||
clr r20
|
||||
@@ -159,6 +178,9 @@ Layout_GetMaxTmp_loop:
|
||||
brcc Layout_GetMaxTmp_ret
|
||||
mov yl, r18
|
||||
mov yh, r19
|
||||
ldd r18, Y+OBJECT_OFFS_FLAGS
|
||||
sbrs r18, WIDGET_FLAGS_VISIBLE_BIT
|
||||
rjmp Layout_GetMaxTmp_next
|
||||
ldd r18, Y+WIDGET_OFFS_TMP_LO
|
||||
ldd r19, Y+WIDGET_OFFS_TMP_HI
|
||||
; max
|
||||
@@ -181,34 +203,35 @@ Layout_GetMaxTmp_ret:
|
||||
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
; @routine Layout_AddToTmpOfFillXChildren
|
||||
; @routine LayoutCountChildrenWithPackMode
|
||||
;
|
||||
; @param Y pointer to widget
|
||||
; @param R21:R20 value to add to tmp value of expandable widgets
|
||||
; @param r22 mask for OBJECT_OFFS_OPTS_LO (e.g. 1<<WIDGET_OPTSLO_FILLX_BIT)
|
||||
; @param r22 mask for WIDGET_OFFS_PACK
|
||||
; @param r23 value for WIDGET_OFFS_PACK
|
||||
; @return r16 number of matching children
|
||||
; @clobbers r17, r18, r19
|
||||
|
||||
Layout_AddToTmpOfFillXChildren:
|
||||
LayoutCountChildrenWithPackMode:
|
||||
clr r16
|
||||
push yl
|
||||
push yh
|
||||
bigcall OBJ_GetFirstChild
|
||||
Layout_AddToTmpOfFillXChildren_loop:
|
||||
brcc Layout_AddToTmpOfFillXChildren_done
|
||||
LayoutCountChildrenWithPackMode_loop:
|
||||
brcc LayoutCountChildrenWithPackMode_done
|
||||
mov yl, r18
|
||||
mov yh, r19
|
||||
ldd r17, Y+OBJECT_OFFS_OPTS_LO
|
||||
ldd r17, Y+OBJECT_OFFS_FLAGS
|
||||
sbrs r17, WIDGET_FLAGS_VISIBLE_BIT ; skip invisible widgets
|
||||
rjmp LayoutCountChildrenWithPackMode_next
|
||||
ldd r17, Y+WIDGET_OFFS_PACK
|
||||
eor r17, r23
|
||||
and r17, r22
|
||||
breq Layout_AddToTmpOfFillXChildren_next
|
||||
ldd r16, Y+WIDGET_OFFS_TMP_LO
|
||||
ldd r17, Y+WIDGET_OFFS_TMP_HI
|
||||
add r16, r20
|
||||
adc r17, r21
|
||||
std Y+WIDGET_OFFS_TMP_LO, r16
|
||||
std Y+WIDGET_OFFS_TMP_HI, r17
|
||||
Layout_AddToTmpOfFillXChildren_next:
|
||||
brne LayoutCountChildrenWithPackMode_next
|
||||
inc r16
|
||||
LayoutCountChildrenWithPackMode_next:
|
||||
rcall OBJ_GetNext
|
||||
rjmp Layout_AddToTmpOfFillXChildren_loop
|
||||
Layout_AddToTmpOfFillXChildren_done:
|
||||
rjmp LayoutCountChildrenWithPackMode_loop
|
||||
LayoutCountChildrenWithPackMode_done:
|
||||
pop yh
|
||||
pop yl
|
||||
ret
|
||||
@@ -217,30 +240,71 @@ Layout_AddToTmpOfFillXChildren_done:
|
||||
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
; @routine LayoutCountExpandableChildren
|
||||
; @routine LayoutCountVisibleChildren
|
||||
;
|
||||
; @param Y pointer to widget
|
||||
; @param r22 mask for OBJECT_OFFS_OPTS_LO (e.g. 1<<WIDGET_OPTSLO_FILLX_BIT)
|
||||
; @return r16 number of children with opt WIDGET_OPTSLO_FILLX_BIT
|
||||
; @return r16 number of matching children
|
||||
; @clobbers r17, r18, r19
|
||||
|
||||
LayoutCountExpandableChildren:
|
||||
LayoutCountVisibleChildren:
|
||||
clr r16
|
||||
push yl
|
||||
push yh
|
||||
bigcall OBJ_GetFirstChild
|
||||
LayoutCountExpandableChildren_loop:
|
||||
brcc LayoutCountExpandableChildren_done
|
||||
LayoutCountVisibleChildren_loop:
|
||||
brcc LayoutCountVisibleChildren_done
|
||||
mov yl, r18
|
||||
mov yh, r19
|
||||
ldd r17, Y+OBJECT_OFFS_OPTS_LO
|
||||
and r17, r22
|
||||
breq LayoutCountExpandableChildren_next
|
||||
inc r16
|
||||
LayoutCountExpandableChildren_next:
|
||||
ldd r17, Y+OBJECT_OFFS_FLAGS
|
||||
sbrc r17, WIDGET_FLAGS_VISIBLE_BIT ; skip invisible widgets
|
||||
inc r16
|
||||
LayoutCountVisibleChildren_next:
|
||||
rcall OBJ_GetNext
|
||||
rjmp LayoutCountExpandableChildren_loop
|
||||
LayoutCountExpandableChildren_done:
|
||||
rjmp LayoutCountVisibleChildren_loop
|
||||
LayoutCountVisibleChildren_done:
|
||||
pop yh
|
||||
pop yl
|
||||
ret
|
||||
; @end
|
||||
|
||||
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
; @routine LayoutIncTmpOnMatchingPack
|
||||
;
|
||||
; Ignores invisible widgets.
|
||||
;
|
||||
; @param Y pointer to widget
|
||||
; @param R21:R20 value to add to tmp value of expandable widgets
|
||||
; @param r22 mask for WIDGET_OFFS_PACK
|
||||
; @param r23 value for WIDGET_OFFS_PACK
|
||||
; @clobbers r16, r18, r19
|
||||
|
||||
LayoutIncTmpOnMatchingPack:
|
||||
push yl
|
||||
push yh
|
||||
bigcall OBJ_GetFirstChild
|
||||
brcc LayoutIncTmpOnMatchingPack_done
|
||||
LayoutIncTmpOnMatchingPack_loop:
|
||||
mov yl, r18
|
||||
mov yh, r19
|
||||
ldd r16, Y+OBJECT_OFFS_FLAGS
|
||||
sbrs r16, WIDGET_FLAGS_VISIBLE_BIT ; skip invisible widgets
|
||||
rjmp LayoutIncTmpOnMatchingPack_next
|
||||
ldd r16, Y+WIDGET_OFFS_PACK
|
||||
eor r16, r23
|
||||
and r16, r22
|
||||
brne LayoutIncTmpOnMatchingPack_next
|
||||
ldd r18, Y+WIDGET_OFFS_TMP_LO
|
||||
ldd r19, Y+WIDGET_OFFS_TMP_HI
|
||||
add r18, r20
|
||||
adc r19, r21
|
||||
std Y+WIDGET_OFFS_TMP_LO, r18
|
||||
std Y+WIDGET_OFFS_TMP_HI, r19
|
||||
LayoutIncTmpOnMatchingPack_next:
|
||||
rcall OBJ_GetNext
|
||||
brcs LayoutIncTmpOnMatchingPack_loop
|
||||
LayoutIncTmpOnMatchingPack_done:
|
||||
pop yh
|
||||
pop yl
|
||||
ret
|
||||
@@ -251,5 +315,8 @@ LayoutCountExpandableChildren_done:
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
@@ -10,8 +10,6 @@
|
||||
#ifndef AQH_AVR_GUI2_MAINWINDOW_ASM
|
||||
#define AQH_AVR_GUI2_MAINWINDOW_ASM
|
||||
|
||||
; TODO: base on VLayout!
|
||||
|
||||
|
||||
; ***************************************************************************
|
||||
; defines
|
||||
@@ -35,8 +33,8 @@
|
||||
; @return CFLAG set of okay, cleared otherwise
|
||||
; @return Y address of newly created object
|
||||
; @param X parent widget
|
||||
; @param r16 value for OBJECT_OFFS_OPTS_LO
|
||||
; @param r17 value for OBJECT_OFFS_OPTS_HI
|
||||
; @param r16 value for OBJECT_OFFS_OPTS
|
||||
; @param r17 value for WIDGET_OFFS_PACK
|
||||
; @param r21:r20 ressource id for title
|
||||
; @clobbers any
|
||||
|
||||
@@ -62,6 +60,8 @@ MainWindow_new_ret:
|
||||
;
|
||||
; @param Y address of widget
|
||||
; @param X parent widget (if any)
|
||||
; @param r16 value for OBJECT_OFFS_OPTS
|
||||
; @param r17 value for WIDGET_OFFS_PACK
|
||||
; @param r21:r20 ressource id for title
|
||||
; @clobbers r16, r17, X
|
||||
|
||||
@@ -81,14 +81,14 @@ MainWindow_Init:
|
||||
|
||||
; set style which has no spacing and no borders so needs no drawing because
|
||||
; the children fill the screen completely
|
||||
ldi r16, LOW(MainWindow_DefaultStyle)
|
||||
ldi r16, LOW(MainWindow_DefaultStyle*2)
|
||||
std Y+WIDGET_OFFS_STYLE_LO, r16
|
||||
ldi r16, HIGH(MainWindow_DefaultStyle)
|
||||
ldi r16, HIGH(MainWindow_DefaultStyle*2)
|
||||
std Y+WIDGET_OFFS_STYLE_HI, r16
|
||||
|
||||
; create sub widgets
|
||||
rcall mainWindowCreateTitleWidget
|
||||
rcall mainWindowCreateContentWidget
|
||||
; rcall mainWindowCreateContentWidget
|
||||
|
||||
ret
|
||||
; @end
|
||||
@@ -168,8 +168,9 @@ mainWindowCreateTitleWidget:
|
||||
push yh
|
||||
mov xl, yl
|
||||
mov xh, yh
|
||||
ldi r16, (1<<WIDGET_OPTSLO_FILLX_BIT)
|
||||
ldi r17, (WIDGET_XALIGN_LEFT<<WIDGET_OPTSHI_CONTENT_XALIGN0_BIT) | (WIDGET_YALIGN_CENTER<<WIDGET_OPTSHI_CONTENT_YALIGN0_BIT)
|
||||
ldi r16, 0
|
||||
ldi r17, (WIDGET_PACK_FILLED<<WIDGET_PACK_HSELF0_BIT) | (WIDGET_PACK_BEGIN<<WIDGET_PACK_VSELF0_BIT) | \
|
||||
(WIDGET_PACK_BEGIN <<WIDGET_PACK_HCONTENT0_BIT) | (WIDGET_PACK_CENTER<<WIDGET_PACK_VCONTENT0_BIT)
|
||||
bigcall Label_new
|
||||
brcc mainWindowCreateTitleWidget_done
|
||||
; set style for title widget
|
||||
@@ -199,9 +200,9 @@ mainWindowCreateContentWidget:
|
||||
push yh
|
||||
mov xl, yl
|
||||
mov xh, yh
|
||||
ldi r16, (1<<WIDGET_OPTSLO_FILLX_BIT) | (1<<WIDGET_OPTSLO_FILLY_BIT)
|
||||
ldi r17, 0 ; opts hi
|
||||
bigcall Widget_new
|
||||
ldi r16, 0 ; OPTS
|
||||
ldi r17, (WIDGET_PACK_FILLED<<WIDGET_PACK_HSELF0_BIT) | (WIDGET_PACK_FILLED<<WIDGET_PACK_VSELF0_BIT) ; PACK
|
||||
bigcall VLayout_new
|
||||
brcc mainWindowCreateContentWidget_done
|
||||
; set style for title widget
|
||||
ldi r16, LOW(MainWindow_ContentStyle*2)
|
||||
@@ -223,7 +224,7 @@ mainWindowCreateContentWidget_done:
|
||||
|
||||
MainWindow_DefaultSignalmap:
|
||||
; header
|
||||
.dw VLayout_DefaultSignalmap ; next table to use
|
||||
.dw VLayout_DefaultSignalmap*2 ; next table to use
|
||||
; entries
|
||||
.db 0, WIDGET_SIGNAL_DRAW, LOW(Widget_OnDraw), HIGH(Widget_OnDraw)
|
||||
.db WIDGET_VALUE_DEFAULT_WIDTH, WIDGET_SIGNAL_GETVALUE, LOW(MainWindow_OnGetDefaultWidth), HIGH(MainWindow_OnGetDefaultWidth)
|
||||
|
||||
@@ -51,15 +51,14 @@
|
||||
.equ OBJECT_OFFS_SELECTOR = 7
|
||||
.equ OBJECT_OFFS_TARGET_LO = 8
|
||||
.equ OBJECT_OFFS_TARGET_HI = 9
|
||||
.equ OBJECT_OFFS_OPTS_LO = 10
|
||||
.equ OBJECT_OFFS_OPTS_HI = 11
|
||||
.equ OBJECT_OFFS_SIGNALMAP_LO = 12 ; byte address (for LPM!)
|
||||
.equ OBJECT_OFFS_SIGNALMAP_HI = 13
|
||||
.equ OBJECT_SIZE = 14
|
||||
.equ OBJECT_OFFS_SIGNALMAP_LO = 10 ; byte address (for LPM!)
|
||||
.equ OBJECT_OFFS_SIGNALMAP_HI = 11
|
||||
.equ OBJECT_OFFS_OPTS = 12
|
||||
.equ OBJECT_SIZE = 13
|
||||
|
||||
; object opts_lo
|
||||
.equ OBJECT_OPTSLO_TIMER_BIT = 7
|
||||
.equ OBJECT_OPTSLO_MSGRECV_BIT = 6
|
||||
.equ OBJECT_OPTS_TIMER_BIT = 7
|
||||
.equ OBJECT_OPTS_MSGRECV_BIT = 6
|
||||
|
||||
; SignalMap entries
|
||||
.equ OBJECT_SIGNALMAP_OFFS_HEADER = 0
|
||||
@@ -99,12 +98,21 @@ Object_Alloc:
|
||||
push xh
|
||||
push r16
|
||||
push r17
|
||||
bigcall Heap_Alloc ; X=mem allocated (r16, r17, r18, r19, r24, r25, X)
|
||||
push r24
|
||||
push r25
|
||||
bigcall Heap_Alloc ; X=mem allocated (r16, r17, r18, r19, r24, r25, X)
|
||||
pop r25
|
||||
pop r24
|
||||
pop r17
|
||||
pop r16
|
||||
brcc Object_Alloc_ret
|
||||
mov yl, xl
|
||||
mov yh, xh
|
||||
clr r18
|
||||
Object_Alloc_loop:
|
||||
st X+, r18
|
||||
sbiw r25:r24, 1
|
||||
brne Object_Alloc_loop
|
||||
sec
|
||||
Object_Alloc_ret:
|
||||
pop xh
|
||||
@@ -118,24 +126,12 @@ Object_Alloc_ret:
|
||||
; @routine OBJ_Init @global
|
||||
;
|
||||
; @param Y address of object in SDRAM
|
||||
; @param r16 value for OBJECT_OFFS_OPTS_LO
|
||||
; @param r17 value for OBJECT_OFFS_OPTS_HI
|
||||
; @param r16 value for OBJECT_OFFS_OPTS
|
||||
; @clobbers r16, r17, X
|
||||
|
||||
OBJ_Init:
|
||||
push r16
|
||||
push r17
|
||||
mov xl, yl
|
||||
mov xh, yh
|
||||
clr r16
|
||||
ldi r17, OBJECT_SIZE
|
||||
bigcall Utils_FillSram ; (r17, X)
|
||||
pop r17
|
||||
pop r16
|
||||
|
||||
; set opts
|
||||
std Y+OBJECT_OFFS_OPTS_LO, r16
|
||||
std Y+OBJECT_OFFS_OPTS_HI, r17
|
||||
std Y+OBJECT_OFFS_OPTS, r16
|
||||
|
||||
; set default signal map
|
||||
ldi r16, LOW(Object_DefaultSignalmap*2)
|
||||
@@ -287,8 +283,8 @@ OBJ_GetFirstChild:
|
||||
brne OBJ_GetFirstChild_notNull
|
||||
rjmp OBJ_GetFirstChild_clcRet
|
||||
OBJ_GetFirstChild_notNull:
|
||||
ldd r18, Y+OBJECT_OFFS_PARENT_LO
|
||||
ldd r19, Y+OBJECT_OFFS_PARENT_HI
|
||||
ldd r18, Y+OBJECT_OFFS_CHILD_LO
|
||||
ldd r19, Y+OBJECT_OFFS_CHILD_HI
|
||||
tst r18
|
||||
brne OBJ_GetFirstChild_secRet
|
||||
tst r19
|
||||
@@ -394,7 +390,7 @@ OBJ_AddChild:
|
||||
; ---------------------------------------------------------------------------
|
||||
; @routine objAddObjXAsChildToY
|
||||
;
|
||||
; @param Y object to add to
|
||||
; @param Y designated parent
|
||||
; @param X object to add
|
||||
; @clobbers r18, r19
|
||||
|
||||
@@ -551,7 +547,15 @@ OBJ_HandleSignal_loop:
|
||||
; try this table
|
||||
push zl
|
||||
push zh
|
||||
rcall objHandleSignalWithMap ; (any, !Y)
|
||||
push r16
|
||||
push r17
|
||||
push xl
|
||||
push xh
|
||||
rcall objHandleSignalWithMap ; (any, !Y)
|
||||
pop xh
|
||||
pop xl
|
||||
pop r17
|
||||
pop r16
|
||||
pop zh
|
||||
pop zl
|
||||
brcs OBJ_HandleSignal_ret
|
||||
@@ -608,18 +612,18 @@ OBJ_TreeHandleSignal_done:
|
||||
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
; @routine OBJ_TreeHandleSignalIfMatchingOptsLo @global @recursive
|
||||
; @routine OBJ_TreeHandleSignalIfMatchingOpts @global @recursive
|
||||
;
|
||||
; @param Y address of object
|
||||
; @param R16 signal number
|
||||
; @param R17 selector
|
||||
; @param xl param1
|
||||
; @param xh param2
|
||||
; @param r20 mask for OBJECT_OFFS_OPTS_LO
|
||||
; @param r21 value for OBJECT_OFFS_OPTS_LO to match
|
||||
; @param r20 mask for OBJECT_OFFS_OPTS
|
||||
; @param r21 value for OBJECT_OFFS_OPTS to match
|
||||
; @clobbers any, !R16, !R17, !X, !Y
|
||||
|
||||
OBJ_TreeHandleSignalIfMatchingOptsLo:
|
||||
OBJ_TreeHandleSignalIfMatchingOpts:
|
||||
push yl
|
||||
push yh
|
||||
; call signal handler
|
||||
@@ -627,30 +631,30 @@ OBJ_TreeHandleSignalIfMatchingOptsLo:
|
||||
push r17
|
||||
push xl
|
||||
push xh
|
||||
ldd r18, Y+OBJECT_OFFS_OPTS_LO
|
||||
ldd r18, Y+OBJECT_OFFS_OPTS
|
||||
eor r18, r21
|
||||
and r18, r20
|
||||
brne OBJ_TreeHandleSignalIfMatchingOptsLo_l1
|
||||
brne OBJ_TreeHandleSignalIfMatchingOpts_l1
|
||||
push r20
|
||||
push r21
|
||||
rcall OBJ_HandleSignal ; (any, !Y)
|
||||
pop r21
|
||||
pop r20
|
||||
OBJ_TreeHandleSignalIfMatchingOptsLo_l1:
|
||||
OBJ_TreeHandleSignalIfMatchingOpts_l1:
|
||||
pop xh
|
||||
pop xl
|
||||
pop r17
|
||||
pop r16
|
||||
; handle children
|
||||
rcall OBJ_GetFirstChild ; r19:r18=object (none)
|
||||
OBJ_TreeHandleSignalIfMatchingOptsLo_loop:
|
||||
brcc OBJ_TreeHandleSignalIfMatchingOptsLo_done
|
||||
OBJ_TreeHandleSignalIfMatchingOpts_loop:
|
||||
brcc OBJ_TreeHandleSignalIfMatchingOpts_done
|
||||
mov yl, r18
|
||||
mov yh, r19
|
||||
rcall OBJ_TreeHandleSignalIfMatchingOptsLo ; recursion!
|
||||
rcall OBJ_TreeHandleSignalIfMatchingOpts ; recursion!
|
||||
rcall OBJ_GetNext ; r19:r18=object (none)
|
||||
rjmp OBJ_TreeHandleSignalIfMatchingOptsLo_loop
|
||||
OBJ_TreeHandleSignalIfMatchingOptsLo_done:
|
||||
rjmp OBJ_TreeHandleSignalIfMatchingOpts_loop
|
||||
OBJ_TreeHandleSignalIfMatchingOpts_done:
|
||||
pop yh
|
||||
pop yl
|
||||
ret
|
||||
@@ -678,8 +682,8 @@ OBJ_TreeHandleSignalIfFlagsSet:
|
||||
push xl
|
||||
push xh
|
||||
ldd r18, Y+OBJECT_OFFS_FLAGS
|
||||
and r18, r20
|
||||
eor r18, r20
|
||||
and r18, r20
|
||||
brne OBJ_TreeHandleSignalIfFlagsSet_l1
|
||||
push r20
|
||||
rcall OBJ_HandleSignal ; (any, !Y)
|
||||
|
||||
@@ -33,8 +33,8 @@
|
||||
;
|
||||
; @return CFLAG set of okay, cleared otherwise
|
||||
; @return Y address of newly created object
|
||||
; @param r16 value for OBJECT_OFFS_OPTS_LO
|
||||
; @param r17 value for OBJECT_OFFS_OPTS_HI
|
||||
; @param r16 value for OBJECT_OFFS_OPTS
|
||||
; @param r17 value for WIDGET_OFFS_PACK
|
||||
; @param X pointer to GUIAPP
|
||||
; @clobbers any
|
||||
|
||||
@@ -56,8 +56,8 @@ RootWindow_new_ret:
|
||||
;
|
||||
; @return CFLAG set if okay, cleared otherwise
|
||||
; @param Y address of widget
|
||||
; @param r16 value for OBJECT_OFFS_OPTS_LO
|
||||
; @param r17 value for OBJECT_OFFS_OPTS_HI
|
||||
; @param r16 value for OBJECT_OFFS_OPTS
|
||||
; @param r17 value for WIDGET_OFFS_PACK
|
||||
; @param X pointer to GUIAPP
|
||||
; @clobbers r16, r17, X
|
||||
|
||||
@@ -68,21 +68,13 @@ RootWindow_Init:
|
||||
clr xh
|
||||
; call base class
|
||||
bigcall Widget_Init ; (r16, r17, X)
|
||||
|
||||
; clear widget-specific data
|
||||
mov xl, yl
|
||||
mov xh, yh
|
||||
adiw xh:xl, ROOTWINDOW_OFFS_BEGIN
|
||||
clr r16
|
||||
ldi r17, (ROOTWINDOW_SIZE-ROOTWINDOW_OFFS_BEGIN)
|
||||
bigcall Utils_FillSram ; (r17, X)
|
||||
pop xh
|
||||
pop xl
|
||||
|
||||
std Y+ROOTWINDOW_OFFS_GUIAPP_LO, xl
|
||||
std Y+ROOTWINDOW_OFFS_GUIAPP_HI, xh
|
||||
|
||||
bigcall Widget_SetFullScreen
|
||||
bigcall Widget_SetFullScreen ; (R16)
|
||||
|
||||
; set default signal map
|
||||
ldi r16, LOW(RootWindow_DefaultSignalmap*2)
|
||||
@@ -129,25 +121,26 @@ RootWindow_GetApp:
|
||||
; @clobbers any, !Y
|
||||
|
||||
RootWindow_OnLayout:
|
||||
ldd r20, Y+WIDGET_OFFS_WIDTH_LO
|
||||
ldd r21, Y+WIDGET_OFFS_WIDTH_HI
|
||||
ldd r22, Y+WIDGET_OFFS_HEIGHT_LO
|
||||
ldd r23, Y+WIDGET_OFFS_HEIGHT_HI
|
||||
|
||||
push yl
|
||||
push yh
|
||||
bigcall OBJ_GetFirstChild
|
||||
brcc RootWindow_OnLayout_done
|
||||
RootWindow_OnLayout_loop:
|
||||
brcc RootWindow_OnLayout_ret
|
||||
mov yl, r18
|
||||
mov yh, r19
|
||||
; all children are MainWindow, set to fullscreen
|
||||
bigcall Widget_SetFullScreen
|
||||
bigcall Widget_SetFullScreen ; (R16)
|
||||
rcall OBJ_GetNext
|
||||
rjmp RootWindow_OnLayout_loop
|
||||
RootWindow_OnLayout_ret:
|
||||
brcs RootWindow_OnLayout_loop
|
||||
RootWindow_OnLayout_done:
|
||||
pop yh
|
||||
pop yl
|
||||
|
||||
ldd r17, Y+OBJECT_OFFS_FLAGS
|
||||
cbr r17, (1<<WIDGET_FLAGS_LAYOUT_BIT)
|
||||
std Y+OBJECT_OFFS_FLAGS, r17
|
||||
sec
|
||||
sec
|
||||
ret
|
||||
; @end
|
||||
|
||||
@@ -160,10 +153,10 @@ RootWindow_OnLayout_ret:
|
||||
|
||||
RootWindow_DefaultSignalmap:
|
||||
; header
|
||||
.dw Widget_DefaultSignalmap ; next table to use
|
||||
.dw Widget_DefaultSignalmap*2 ; next table to use
|
||||
; entries
|
||||
; .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_DRAW, LOW(Widget_OnDraw), HIGH(Widget_OnDraw)
|
||||
.db 0, WIDGET_SIGNAL_LAYOUT, LOW(RootWindow_OnLayout), HIGH(RootWindow_OnLayout)
|
||||
.db 0, 0, 0, 0 ; end of table
|
||||
|
||||
|
||||
@@ -15,8 +15,14 @@
|
||||
; defines
|
||||
|
||||
.equ VLAYOUT_OFFS_BEGIN = WIDGET_SIZE
|
||||
; no data for now
|
||||
.equ VLAYOUT_SIZE = VLAYOUT_OFFS_BEGIN+0
|
||||
.equ VLAYOUT_OFFS_MODE = VLAYOUT_OFFS_BEGIN+0
|
||||
.equ VLAYOUT_SIZE = VLAYOUT_OFFS_BEGIN+1
|
||||
|
||||
|
||||
; values for VLAYOUT_OFFS_MODE
|
||||
.equ VLAYOUT_MODE_EXPAND = 0
|
||||
.equ VLAYOUT_MODE_SPREAD = 1
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -34,19 +40,14 @@
|
||||
; @return CFLAG set of okay, cleared otherwise
|
||||
; @return Y address of newly created object
|
||||
; @param X parent widget
|
||||
; @param r16 value for OBJECT_OFFS_OPTS_LO
|
||||
; @param r17 value for OBJECT_OFFS_OPTS_HI
|
||||
; @param r21:r20 ressource id for title
|
||||
; @param r16 value for OBJECT_OFFS_OPTS
|
||||
; @param r17 value for WIDGET_OFFS_PACK
|
||||
; @clobbers any
|
||||
|
||||
VLayout_new:
|
||||
push r20
|
||||
push r21
|
||||
ldi r24, LOW(VLAYOUT_SIZE)
|
||||
ldi r25, HIGH(VLAYOUT_SIZE)
|
||||
bigcall Object_Alloc ; (!r16, !r17, !X)
|
||||
pop r21
|
||||
pop r20
|
||||
ldi r24, LOW(VLAYOUT_SIZE)
|
||||
ldi r25, HIGH(VLAYOUT_SIZE)
|
||||
bigcall Object_Alloc ; (!r16, !r17, !X)
|
||||
brcc VLayout_new_ret
|
||||
rcall VLayout_Init ; (r16, r17, X)
|
||||
sec
|
||||
@@ -61,6 +62,8 @@ VLayout_new_ret:
|
||||
;
|
||||
; @param Y address of widget
|
||||
; @param X parent widget (if any)
|
||||
; @param r16 value for OBJECT_OFFS_OPTS
|
||||
; @param r17 value for WIDGET_OFFS_PACK
|
||||
; @clobbers r16, r17, X
|
||||
|
||||
VLayout_Init:
|
||||
@@ -90,7 +93,7 @@ VLayout_Init:
|
||||
|
||||
VLayout_OnLayout:
|
||||
rcall vLayoutVertically
|
||||
rcall vLayoutHorizontalAdjust
|
||||
rcall vLayoutHorizontally
|
||||
; force re-drawing of this widget, clear layout bit
|
||||
ldd r16, Y+OBJECT_OFFS_FLAGS
|
||||
sbr r16, (1<<WIDGET_FLAGS_DIRTY_BIT)
|
||||
@@ -174,10 +177,13 @@ vLayoutSetY:
|
||||
push yl
|
||||
push yh
|
||||
bigcall OBJ_GetFirstChild
|
||||
brcc vLayoutSetY_loopEnd
|
||||
vLayoutSetY_loop:
|
||||
brcc vLayoutSetY_loopEnd
|
||||
mov yl, r18
|
||||
mov yh, r19
|
||||
ldd r16, Y+OBJECT_OFFS_FLAGS
|
||||
sbrs r16, WIDGET_FLAGS_VISIBLE_BIT
|
||||
rjmp vLayoutSetY_next
|
||||
; set Y
|
||||
std Y+WIDGET_OFFS_Y_LO, r20
|
||||
std Y+WIDGET_OFFS_Y_HI, r21
|
||||
@@ -196,9 +202,9 @@ vLayoutSetY_loop:
|
||||
ldd r16, Y+OBJECT_OFFS_FLAGS
|
||||
ori r16, (1<<WIDGET_FLAGS_DIRTY_BIT) | (1<<WIDGET_FLAGS_LAYOUT_BIT)
|
||||
std Y+OBJECT_OFFS_FLAGS, r16
|
||||
|
||||
vLayoutSetY_next:
|
||||
rcall OBJ_GetNext
|
||||
rjmp vLayoutSetY_loop
|
||||
brcs vLayoutSetY_loop
|
||||
vLayoutSetY_loopEnd:
|
||||
pop yh
|
||||
pop yl
|
||||
@@ -208,54 +214,52 @@ vLayoutSetY_loopEnd:
|
||||
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
; @routine vLayoutHorizontalAdjust
|
||||
; @routine vLayoutHorizontally
|
||||
;
|
||||
; @param Y pointer to widget
|
||||
; @clobbers r17, r18, r19, r20, r21, r22, r23, Z
|
||||
|
||||
vLayoutHorizontalAdjust:
|
||||
bigcall Layout_SetDefaultHeights
|
||||
|
||||
ldd zl, Y+WIDGET_OFFS_STYLE_LO
|
||||
ldd zh, Y+WIDGET_OFFS_STYLE_HI
|
||||
|
||||
; get outer border
|
||||
adiw zh:zl, WIDGET_STYLE_OFFS_OUTERBORDERSIZE
|
||||
lpm r20, Z
|
||||
clr r21
|
||||
sbiw zh:zl, WIDGET_STYLE_OFFS_OUTERBORDERSIZE
|
||||
; @clobbers any, !Y
|
||||
|
||||
vLayoutHorizontally:
|
||||
bigcall Layout_SetDefaultWidths ; (any, !Y)
|
||||
; calc usable width of host widget
|
||||
ldd r22, Y+WIDGET_OFFS_WIDTH_LO
|
||||
ldd r23, Y+WIDGET_OFFS_WIDTH_HI
|
||||
sub r22, r20 ; subtract border (top)
|
||||
sbc r23, r21
|
||||
sub r22, r20 ; subtract border (bottom)
|
||||
sbc r23, r21
|
||||
|
||||
ldd zl, Y+WIDGET_OFFS_STYLE_LO
|
||||
ldd zh, Y+WIDGET_OFFS_STYLE_HI
|
||||
adiw zh:zl, WIDGET_STYLE_OFFS_OUTERBORDERSIZE
|
||||
lpm r18, Z+
|
||||
lpm r19, Z
|
||||
sub r22, r18
|
||||
sbc r23, r19
|
||||
sub r22, r18
|
||||
sbc r23, r19
|
||||
; r23:r22=width of host widget
|
||||
push yl
|
||||
push yh
|
||||
bigcall OBJ_GetFirstChild
|
||||
vLayoutHorizontalAdjust_loop:
|
||||
brcc vLayoutHorizontalAdjust_loopEnd
|
||||
vLayoutHorizontally_loop:
|
||||
brcc vLayoutHorizontally_loopEnd
|
||||
mov yl, r18
|
||||
mov yh, r19
|
||||
std Y+WIDGET_OFFS_X_LO, r20
|
||||
std Y+WIDGET_OFFS_X_HI, r21
|
||||
|
||||
ldd r18, Y+WIDGET_OFFS_TMP_LO
|
||||
ldd r19, Y+WIDGET_OFFS_TMP_HI
|
||||
ldd r12, Y+WIDGET_OFFS_TMP_LO
|
||||
ldd r13, Y+WIDGET_OFFS_TMP_HI
|
||||
|
||||
ldd r17, Y+OBJECT_OFFS_OPTS_LO
|
||||
sbrs r17, WIDGET_OPTSLO_FILLY_BIT
|
||||
rjmp vLayoutHorizontalAdjust_setWidth
|
||||
mov r18, r22 ; increase height to full height
|
||||
mov r19, r23
|
||||
vLayoutHorizontalAdjust_setWidth:
|
||||
std Y+WIDGET_OFFS_WIDTH_LO, r18
|
||||
std Y+WIDGET_OFFS_WIDTH_HI, r19
|
||||
ldd r17, Y+OBJECT_OFFS_OPTS
|
||||
andi r17, (1<<WIDGET_PACK_HSELF1_BIT) | (1<<WIDGET_PACK_HSELF0_BIT)
|
||||
cpi r17, (WIDGET_PACK_FILLED<<WIDGET_PACK_HSELF0_BIT)
|
||||
brne vLayoutHorizontally_setWidth
|
||||
mov r12, r22
|
||||
mov r13, r23
|
||||
vLayoutHorizontally_setWidth:
|
||||
std Y+WIDGET_OFFS_WIDTH_LO, r12
|
||||
std Y+WIDGET_OFFS_WIDTH_HI, r13
|
||||
rcall Widget_PackSelfX ; R5:R4=new pos (r17, r18, r19, r20, r21)
|
||||
std Y+WIDGET_OFFS_X_LO, r4
|
||||
std Y+WIDGET_OFFS_X_HI, r5
|
||||
rcall OBJ_GetNext
|
||||
rjmp vLayoutHorizontalAdjust_loop
|
||||
vLayoutHorizontalAdjust_loopEnd:
|
||||
rjmp vLayoutHorizontally_loop
|
||||
vLayoutHorizontally_loopEnd:
|
||||
pop yh
|
||||
pop yl
|
||||
ret
|
||||
@@ -263,24 +267,50 @@ vLayoutHorizontalAdjust_loopEnd:
|
||||
|
||||
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
; @routine vLayoutVertically
|
||||
;
|
||||
; @param Y pointer to widget
|
||||
; @clobbers any, !Y
|
||||
|
||||
vLayoutVertically:
|
||||
ldd r16, Y+VLAYOUT_OFFS_MODE
|
||||
cpi r16, VLAYOUT_MODE_SPREAD
|
||||
breq vLayoutVertically_spread
|
||||
rjmp vLayoutExpand
|
||||
vLayoutVertically_spread:
|
||||
rjmp vLayoutSpread
|
||||
; @end
|
||||
|
||||
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
; @routine vLayoutExpand
|
||||
;
|
||||
; @param Y pointer to widget
|
||||
; @clobbers any, !Y
|
||||
|
||||
vLayoutExpand:
|
||||
rcall Layout_SetDefaultHeights
|
||||
rcall Layout_SumTmpValues ; r21:r20=width
|
||||
rcall Layout_SumTmpValues ; r19:r18=width+borders
|
||||
|
||||
ldd r22, Y+WIDGET_OFFS_HEIGHT_LO
|
||||
ldd r23, Y+WIDGET_OFFS_HEIGHT_HI
|
||||
sub r22, r20
|
||||
sbc r23, r21
|
||||
breq vLayoutVertically_setY
|
||||
brcs vLayoutVertically_setY
|
||||
sub r22, r18
|
||||
sbc r23, r19 ; r23:r22=(height-usedSpace)=unusedSpace
|
||||
breq vLayoutExpand_setY
|
||||
brcs vLayoutExpand_setY
|
||||
|
||||
; r23:r22=remaining space to distribute
|
||||
push r22
|
||||
ldi r22, (1<<WIDGET_OPTSLO_FILLY_BIT)
|
||||
rcall LayoutCountExpandableChildren ; r16=number of expandable child widgets
|
||||
push r23
|
||||
ldi r22, (1<<WIDGET_PACK_VSELF1_BIT) | (1<<WIDGET_PACK_VSELF0_BIT) ; mask
|
||||
ldi r23, (WIDGET_PACK_FILLED<<WIDGET_PACK_VSELF0_BIT) ; value
|
||||
rcall LayoutCountChildrenWithPackMode ; r16=number of expandable child widgets
|
||||
pop r23
|
||||
pop r22
|
||||
tst r16
|
||||
breq vLayoutVertically_setY
|
||||
breq vLayoutExpand_setY
|
||||
|
||||
; calc space to add to each expandable child widget and add it
|
||||
mov r20, r22
|
||||
@@ -290,17 +320,139 @@ vLayoutVertically:
|
||||
bigcall Utils_Divu16_16_16 ; r17:r16=space per expandable child widget
|
||||
mov r20, r16
|
||||
mov r21, r17
|
||||
|
||||
ldi r22, (1<<WIDGET_OPTSLO_FILLY_BIT)
|
||||
rcall Layout_AddToTmpOfFillXChildren
|
||||
|
||||
vLayoutVertically_setY:
|
||||
ldi r22, (1<<WIDGET_PACK_VSELF1_BIT) | (1<<WIDGET_PACK_VSELF0_BIT) ; mask
|
||||
ldi r23, (WIDGET_PACK_FILLED<<WIDGET_PACK_VSELF0_BIT) ; value
|
||||
bigcall LayoutIncTmpOnMatchingPack
|
||||
|
||||
vLayoutExpand_setY:
|
||||
rcall vLayoutSetY
|
||||
ret
|
||||
; @end
|
||||
|
||||
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
; @routine vLayoutExpand
|
||||
;
|
||||
; @param Y pointer to widget
|
||||
; @clobbers any, !Y
|
||||
|
||||
vLayoutSpread:
|
||||
rcall vLayoutPrepareSpread ; (any, !Y)
|
||||
rcall vLayoutFinalizeSpread ; (r18, r19, X)
|
||||
ret
|
||||
; @end
|
||||
|
||||
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
; @routine vLayoutPrepareSpread
|
||||
;
|
||||
; @param Y pointer to widget
|
||||
; @return X startpos
|
||||
; @return r21:r20 extra space (in pixels)
|
||||
; @return r25:r24 spacing (including extra space)
|
||||
; @clobbers any, !Y
|
||||
|
||||
vLayoutPrepareSpread:
|
||||
rcall Layout_SetDefaultHeights ; (any, !Y)
|
||||
rcall Layout_SumTmpValues ; r21:r20=width+borders
|
||||
|
||||
ldd r18, Y+WIDGET_OFFS_HEIGHT_LO
|
||||
ldd r19, Y+WIDGET_OFFS_HEIGHT_HI
|
||||
sub r18, r20
|
||||
sbc r19, r21
|
||||
mov r20, r18
|
||||
mov r21, r19 ; remaining space
|
||||
|
||||
rcall LayoutCountVisibleChildren ; r16=number of visible child widgets (r17, r18, r19)
|
||||
inc r16
|
||||
mov r22, r16
|
||||
push r22
|
||||
ldi r22, (1<<WIDGET_PACK_VSELF1_BIT) | \
|
||||
(1<<WIDGET_PACK_VSELF0_BIT) ; mask
|
||||
ldi r23, (WIDGET_PACK_FILLED<<WIDGET_PACK_VSELF0_BIT) ; value
|
||||
rcall LayoutCountChildrenWithPackMode ; r16=number of expandable children (r17, r18, r19)
|
||||
pop r22
|
||||
add r22, r16
|
||||
clr r23
|
||||
bigcall Utils_Divu16_16_16 ; r17:r16=space per element
|
||||
mov r20, r18
|
||||
mov r21, r19 ; r21:20=additional space per element
|
||||
|
||||
; get and adjust spacing, setup start pos
|
||||
ldd zl, Y+WIDGET_OFFS_STYLE_LO
|
||||
ldd zh, Y+WIDGET_OFFS_STYLE_HI
|
||||
adiw zh:zl, WIDGET_STYLE_OFFS_OUTERBORDERSIZE
|
||||
lpm xl, Z+ ; border
|
||||
clr xh
|
||||
lpm r24, Z ; spacing
|
||||
clr r25
|
||||
|
||||
add r24, r20 ; add extra space to spacing
|
||||
adc r25, r21
|
||||
|
||||
add xl, r20 ; add extra space to border
|
||||
adc xh, r21
|
||||
|
||||
ret
|
||||
; @end
|
||||
|
||||
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
; @routine vLayoutFinalizeSpread
|
||||
;
|
||||
; @param Y pointer to widget
|
||||
; @param X startpos
|
||||
; @param r21:r20 extra space (in pixels)
|
||||
; @param r25:r24 spacing (including extra space)
|
||||
; @clobbers r18, r19, X
|
||||
|
||||
vLayoutFinalizeSpread:
|
||||
push yl
|
||||
push yh
|
||||
bigcall OBJ_GetFirstChild
|
||||
brcc vLayoutFinalizeSpread_done
|
||||
vLayoutFinalizeSpread_loop:
|
||||
mov yl, r18
|
||||
mov yh, r19
|
||||
ldd r17, Y+OBJECT_OFFS_FLAGS
|
||||
sbrs r17, WIDGET_FLAGS_VISIBLE_BIT ; skip invisible widgets
|
||||
rjmp vLayoutFinalizeSpread_next
|
||||
; store pos
|
||||
std Y+WIDGET_OFFS_Y_LO, xl
|
||||
std Y+WIDGET_OFFS_Y_LO, xh
|
||||
; determine final height of child widget
|
||||
ldd r18, Y+WIDGET_OFFS_TMP_LO
|
||||
ldd r19, Y+WIDGET_OFFS_TMP_LO
|
||||
ldd r16, Y+WIDGET_OFFS_PACK
|
||||
andi r16, (1<<WIDGET_PACK_VSELF1_BIT) | (1<<WIDGET_PACK_VSELF0_BIT)
|
||||
cpi r16, (WIDGET_PACK_FILLED<<WIDGET_PACK_VSELF0_BIT)
|
||||
brne vLayoutFinalizeSpread_setHeight
|
||||
add r18, r20 ; add extra space
|
||||
adc r19, r21
|
||||
vLayoutFinalizeSpread_setHeight:
|
||||
std Y+WIDGET_OFFS_HEIGHT_LO, r18
|
||||
std Y+WIDGET_OFFS_HEIGHT_HI, r19
|
||||
; advance pos
|
||||
add xl, r18 ; add height to current pos
|
||||
adc xh, r19
|
||||
add xl, r24 ; add spacing to current pos
|
||||
adc xh, r25
|
||||
vLayoutFinalizeSpread_next:
|
||||
rcall OBJ_GetNext ; r19:r18=object (none)
|
||||
brcs vLayoutFinalizeSpread_loop
|
||||
vLayoutFinalizeSpread_done:
|
||||
pop yh
|
||||
pop yl
|
||||
ret
|
||||
; @end
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
; ***************************************************************************
|
||||
@@ -308,7 +460,7 @@ vLayoutVertically_setY:
|
||||
|
||||
VLayout_DefaultSignalmap:
|
||||
; header
|
||||
.dw Widget_DefaultSignalmap ; next table to use
|
||||
.dw Widget_DefaultSignalmap*2 ; next table to use
|
||||
; entries
|
||||
.db 0, WIDGET_SIGNAL_LAYOUT, LOW(VLayout_OnLayout), HIGH(VLayout_OnLayout)
|
||||
.db WIDGET_VALUE_DEFAULT_WIDTH, WIDGET_SIGNAL_GETVALUE, LOW(VLayout_OnGetDefaultWidth), HIGH(VLayout_OnGetDefaultWidth)
|
||||
|
||||
@@ -27,9 +27,10 @@
|
||||
.equ WIDGET_OFFS_HEIGHT_HI = WIDGET_OFFS_BEGIN+7
|
||||
.equ WIDGET_OFFS_STYLE_LO = WIDGET_OFFS_BEGIN+8 ; byte address (for LPM!)
|
||||
.equ WIDGET_OFFS_STYLE_HI = WIDGET_OFFS_BEGIN+9
|
||||
.equ WIDGET_OFFS_TMP_LO = WIDGET_OFFS_BEGIN+10
|
||||
.equ WIDGET_OFFS_TMP_HI = WIDGET_OFFS_BEGIN+11
|
||||
.equ WIDGET_SIZE = WIDGET_OFFS_BEGIN+12
|
||||
.equ WIDGET_OFFS_PACK = WIDGET_OFFS_BEGIN+10
|
||||
.equ WIDGET_OFFS_TMP_LO = WIDGET_OFFS_BEGIN+11
|
||||
.equ WIDGET_OFFS_TMP_HI = WIDGET_OFFS_BEGIN+12
|
||||
.equ WIDGET_SIZE = WIDGET_OFFS_BEGIN+13
|
||||
|
||||
; widget style object
|
||||
.equ WIDGET_STYLE_OFFS_FRONTCOL_NORM = 0
|
||||
@@ -48,29 +49,25 @@
|
||||
.equ WIDGET_STYLE_OFFS_CHARHEIGHT = 21
|
||||
.equ WIDGET_STYLE_SIZE = 22
|
||||
|
||||
; widget opts_lo (bits 7 and 6 used by OBJECT_OPTSLO)
|
||||
.equ WIDGET_OPTSLO_INPUT_BIT = 5 ; TOUCH, KEY
|
||||
.equ WIDGET_OPTSLO_BORDER_BIT = 4
|
||||
.equ WIDGET_OPTSLO_FILLX_BIT = 3
|
||||
.equ WIDGET_OPTSLO_FILLY_BIT = 2
|
||||
; widget opts_lo (bits 7 and 6 used by OBJECT_OPTS)
|
||||
.equ WIDGET_OPTS_INPUT_BIT = 5 ; TOUCH, KEY
|
||||
.equ WIDGET_OPTS_BORDER_BIT = 4
|
||||
|
||||
; widget opts_hi
|
||||
.equ WIDGET_OPTSHI_CONTENT_XALIGN1_BIT = 7 ; (2 bit: left, right, center, filled)
|
||||
.equ WIDGET_OPTSHI_CONTENT_XALIGN0_BIT = 6
|
||||
.equ WIDGET_OPTSHI_CONTENT_YALIGN1_BIT = 5 ; (2 bit: top, bottom, center, filled)
|
||||
.equ WIDGET_OPTSHI_CONTENT_YALIGN0_BIT = 4
|
||||
; widget WIDGET_OFFS_PACK
|
||||
.equ WIDGET_PACK_HSELF0_BIT = 0
|
||||
.equ WIDGET_PACK_HSELF1_BIT = 1
|
||||
.equ WIDGET_PACK_VSELF0_BIT = 2
|
||||
.equ WIDGET_PACK_VSELF1_BIT = 3
|
||||
.equ WIDGET_PACK_HCONTENT0_BIT = 4
|
||||
.equ WIDGET_PACK_HCONTENT1_BIT = 5
|
||||
.equ WIDGET_PACK_VCONTENT0_BIT = 6
|
||||
.equ WIDGET_PACK_VCONTENT1_BIT = 7
|
||||
|
||||
; values for WIDGET_OPTSHI_CONTENT_XALIGN (2 bits)
|
||||
.equ WIDGET_XALIGN_LEFT = 0
|
||||
.equ WIDGET_XALIGN_RIGHT = 1
|
||||
.equ WIDGET_XALIGN_CENTER = 2
|
||||
.equ WIDGET_XALIGN_FILLED = 3
|
||||
|
||||
; values for WIDGET_OPTSHI_CONTENT_YALIGN (2 bits)
|
||||
.equ WIDGET_YALIGN_TOP = 0
|
||||
.equ WIDGET_YALIGN_BOTTOM = 1
|
||||
.equ WIDGET_YALIGN_CENTER = 2
|
||||
.equ WIDGET_YALIGN_FILLED = 3
|
||||
; values for WIDGET_OFFS_PACK (2 bits)
|
||||
.equ WIDGET_PACK_BEGIN = 0
|
||||
.equ WIDGET_PACK_END = 1
|
||||
.equ WIDGET_PACK_CENTER = 2
|
||||
.equ WIDGET_PACK_FILLED = 3
|
||||
|
||||
; widget flags
|
||||
.equ WIDGET_FLAGS_VISIBLE_BIT = 7
|
||||
@@ -105,11 +102,6 @@
|
||||
.equ WIDGET_VALUE_DEFAULT_HEIGHT = 2
|
||||
.equ WIDGET_VALUE_NEXTFREE = 3
|
||||
|
||||
; args to Widget_AlignPos
|
||||
.equ WIDGET_1DALIGN_END_BIT = 0
|
||||
.equ WIDGET_1DALIGN_CENTER_BIT = 1
|
||||
.equ WIDGET_1DALIGN_BORDER_BIT = 2
|
||||
|
||||
|
||||
|
||||
; ***************************************************************************
|
||||
@@ -125,8 +117,8 @@
|
||||
; @return CFLAG set of okay, cleared otherwise
|
||||
; @return Y address of newly created object
|
||||
; @param X parent widget
|
||||
; @param r16 value for OBJECT_OFFS_OPTS_LO
|
||||
; @param r17 value for OBJECT_OFFS_OPTS_HI
|
||||
; @param r16 value for OBJECT_OFFS_OPTS
|
||||
; @param r17 value for WIDGET_OFFS_PACK
|
||||
; @clobbers any
|
||||
|
||||
Widget_new:
|
||||
@@ -145,27 +137,23 @@ Widget_new_ret:
|
||||
; @routine Widget_Init @global
|
||||
;
|
||||
; @param Y address of object in SDRAM
|
||||
; @param r16 value for OBJECT_OFFS_OPTS_LO
|
||||
; @param r17 value for OBJECT_OFFS_OPTS_HI
|
||||
; @param r16 value for OBJECT_OFFS_OPTS
|
||||
; @param r17 value for WIDGET_OFFS_PACK
|
||||
; @param X parent widget (if any)
|
||||
; @clobbers r16, r17, X
|
||||
|
||||
Widget_Init:
|
||||
push xl
|
||||
push xh
|
||||
; call base class
|
||||
bigcall OBJ_Init ; (r16, r17, X)
|
||||
|
||||
; clear widget-specific data
|
||||
mov xl, yl
|
||||
mov xh, yh
|
||||
adiw xh:xl, WIDGET_OFFS_BEGIN
|
||||
clr r16
|
||||
ldi r17, (WIDGET_SIZE-WIDGET_OFFS_BEGIN)
|
||||
bigcall Utils_FillSram ; (r17, X)
|
||||
push r17
|
||||
; call base class
|
||||
bigcall OBJ_Init ; (r16, r17, X)
|
||||
pop r17
|
||||
pop xh
|
||||
pop xl
|
||||
|
||||
std Y+WIDGET_OFFS_PACK, r17
|
||||
|
||||
; set default signal map
|
||||
ldi r16, LOW(Widget_DefaultSignalmap*2)
|
||||
std Y+OBJECT_OFFS_SIGNALMAP_LO, r16
|
||||
@@ -754,134 +742,98 @@ Widget_CalcStringWidthFLASH_done:
|
||||
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
; @routine Widget_AlignContentX @global
|
||||
; @routine Widget_PackSelfX @global
|
||||
;
|
||||
; Calc pos according to WIDGET_PACK_HSELF in WIDGET_OFFS_PACK.
|
||||
;
|
||||
; @param Y address of widget
|
||||
; @param R13:R12 width of object to align
|
||||
; @return R5:R4 X
|
||||
; @clobbers r8, r9, r10, r11, r12, r13, r14, r15, r16, r17, r18, r19, r20, r21, r22, r23, r24, r25
|
||||
; @clobbers r17, r18, r19, r20, r21
|
||||
|
||||
Widget_AlignContentX:
|
||||
ldd r8, Y+WIDGET_OFFS_WIDTH_LO
|
||||
ldd r9, Y+WIDGET_OFFS_WIDTH_HI
|
||||
|
||||
ldd r24, Y+OBJECT_OFFS_OPTS_LO
|
||||
ldd r25, Y+OBJECT_OFFS_OPTS_HI
|
||||
|
||||
; align horizontally
|
||||
clr r17
|
||||
sbrc r24, WIDGET_OPTSLO_BORDER_BIT
|
||||
ori r17, (1<<WIDGET_1DALIGN_BORDER_BIT)
|
||||
mov r16, r25
|
||||
andi r16, (1<<WIDGET_OPTSHI_CONTENT_XALIGN1_BIT) | (1<<WIDGET_OPTSHI_CONTENT_XALIGN0_BIT)
|
||||
cpi r16, (WIDGET_XALIGN_RIGHT<<WIDGET_OPTSHI_CONTENT_XALIGN0_BIT)
|
||||
brne Widget_AlignContentX_h1
|
||||
ori r17, (1<<WIDGET_1DALIGN_END_BIT)
|
||||
Widget_AlignContentX_h1:
|
||||
cpi r16, (WIDGET_XALIGN_CENTER<<WIDGET_OPTSHI_CONTENT_XALIGN0_BIT)
|
||||
brne Widget_AlignContentX_h2
|
||||
ori r17, (1<<WIDGET_1DALIGN_CENTER_BIT)
|
||||
Widget_AlignContentX_h2:
|
||||
mov r18, r8 ; widget width
|
||||
mov r19, r9
|
||||
rcall Widget_AlignPos1D ; (r16, r18, r19)
|
||||
mov r4, r22
|
||||
mov r5, r23
|
||||
Widget_PackSelfX:
|
||||
ldd r18, Y+WIDGET_OFFS_WIDTH_LO
|
||||
ldd r19, Y+WIDGET_OFFS_WIDTH_HI
|
||||
ldd r17, Y+WIDGET_OFFS_PACK
|
||||
andi r17, 3 ; WIDGET_PACK_HSELF0_BIT = 0, no shift necessary
|
||||
rcall widgetPack ; r21:r20=new pos (r17, r18, r19)
|
||||
mov r4, r20
|
||||
mov r5, r21
|
||||
ret
|
||||
; @end
|
||||
|
||||
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
; @routine Widget_AlignContentY @global
|
||||
; @routine Widget_PackSelfY @global
|
||||
;
|
||||
; Calc pos according to WIDGET_PACK_VSELF in WIDGET_OFFS_PACK.
|
||||
;
|
||||
; @param Y address of widget
|
||||
; @param R13:R12 height of object to align
|
||||
; @return R7:R6 Y
|
||||
; @clobbers r8, r9, r10, r11, r12, r13, r14, r15, r16, r17, r18, r19, r20, r21, r22, r23, r24, r25
|
||||
; @clobbers r17, r18, r19, r20, r21
|
||||
|
||||
Widget_AlignContentY:
|
||||
ldd r10, Y+WIDGET_OFFS_HEIGHT_LO
|
||||
ldd r11, Y+WIDGET_OFFS_HEIGHT_HI
|
||||
|
||||
ldd r24, Y+OBJECT_OFFS_OPTS_LO
|
||||
ldd r25, Y+OBJECT_OFFS_OPTS_HI
|
||||
|
||||
; align vertically
|
||||
clr r17
|
||||
sbrc r24, WIDGET_OPTSLO_BORDER_BIT
|
||||
ori r17, (1<<WIDGET_1DALIGN_BORDER_BIT)
|
||||
mov r16, r24
|
||||
andi r16, (1<<WIDGET_OPTSHI_CONTENT_YALIGN1_BIT) | (1<<WIDGET_OPTSHI_CONTENT_YALIGN0_BIT)
|
||||
cpi r16, (WIDGET_YALIGN_BOTTOM<<WIDGET_OPTSHI_CONTENT_YALIGN0_BIT)
|
||||
brne Widget_AlignContentY_v1
|
||||
ori r17, (1<<WIDGET_1DALIGN_END_BIT)
|
||||
Widget_AlignContentY_v1:
|
||||
cpi r16, (WIDGET_YALIGN_CENTER<<WIDGET_OPTSHI_CONTENT_YALIGN0_BIT)
|
||||
brne Widget_AlignContentY_v2
|
||||
ori r17, (1<<WIDGET_1DALIGN_CENTER_BIT)
|
||||
Widget_AlignContentY_v2:
|
||||
mov r18, r10 ; widget height
|
||||
mov r19, r11
|
||||
rcall Widget_AlignPos1D ; (r16, r18, r19)
|
||||
mov r6, r22
|
||||
mov r7, r23
|
||||
Widget_PackSelfY:
|
||||
ldd r18, Y+WIDGET_OFFS_HEIGHT_LO
|
||||
ldd r19, 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 widgetPack ; r21:r20=new pos (r17, r18, r19)
|
||||
mov r6, r20
|
||||
mov r7, r21
|
||||
ret
|
||||
; @end
|
||||
|
||||
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
; @routine Widget_AlignPos1D
|
||||
; @routine Widget_PackContentX @global
|
||||
;
|
||||
; one-dimensional routine.
|
||||
; Calc pos according to WIDGET_PACK_HCONTENT in WIDGET_OFFS_PACK.
|
||||
;
|
||||
; @param R19:R18 size of target
|
||||
; @param R13:R12 size of object to align
|
||||
; @param
|
||||
; @param R17 opts (bit 0: align end, bit 1: align center, bit 2: account for border)
|
||||
; @return R23:R22 pos
|
||||
; @clobbers r16, r18, r19
|
||||
; @param Y address of widget
|
||||
; @param R13:R12 width of object to align
|
||||
; @return R5:R4 X
|
||||
; @clobbers r17, r18, r19, r20, r21
|
||||
|
||||
Widget_AlignPos1D:
|
||||
clr r22
|
||||
clr r23
|
||||
Widget_PackContentX:
|
||||
ldd r18, Y+WIDGET_OFFS_WIDTH_LO
|
||||
ldd r19, Y+WIDGET_OFFS_WIDTH_HI
|
||||
ldd r17, Y+WIDGET_OFFS_PACK
|
||||
swap r17 ; WIDGET_PACK_HCONTENT0_BIT = 4 -> shift 4 times right
|
||||
andi r17, 3
|
||||
rcall widgetPack ; r21:r20=new pos (r17, r18, r19)
|
||||
mov r4, r20
|
||||
mov r5, r21
|
||||
ret
|
||||
; @end
|
||||
|
||||
sbrc r17, WIDGET_1DALIGN_BORDER_BIT
|
||||
rcall Widget_AlignPos1D_subBordersFromSize
|
||||
|
||||
sbrc r17, WIDGET_1DALIGN_END_BIT
|
||||
rcall Widget_AlignPos1D_alignEnd
|
||||
sbrc r17, WIDGET_1DALIGN_CENTER_BIT
|
||||
rcall Widget_AlignPos1D_alignCenter
|
||||
|
||||
sbrc r17, WIDGET_1DALIGN_BORDER_BIT
|
||||
rcall Widget_AlignPos1D_addBordersToPos
|
||||
Widget_AlignPos1D_ret:
|
||||
ret
|
||||
Widget_AlignPos1D_alignEnd:
|
||||
mov r22, r18
|
||||
mov r23, r19
|
||||
sub r22, r12
|
||||
sbc r23, r13
|
||||
brcc Widget_AlignPos1D_ret
|
||||
clr r22
|
||||
clr r23
|
||||
ret
|
||||
Widget_AlignPos1D_alignCenter:
|
||||
rcall Widget_AlignPos1D_alignEnd
|
||||
lsr r23
|
||||
ror r22
|
||||
ret
|
||||
Widget_AlignPos1D_subBordersFromSize:
|
||||
subi r18, 4
|
||||
sbci r19, 0
|
||||
ret
|
||||
Widget_AlignPos1D_addBordersToPos:
|
||||
ldi r16, 2
|
||||
add r22, r16
|
||||
adc r23, r16
|
||||
sub r23, r16
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
; @routine Widget_PackContentY @global
|
||||
;
|
||||
; Calc pos according to WIDGET_PACK_VCONTENT in WIDGET_OFFS_PACK.
|
||||
;
|
||||
; @param Y address of widget
|
||||
; @param R13:R12 height of object to align
|
||||
; @return R7:R6 Y
|
||||
; @clobbers r17, r18, r19, r20, r21
|
||||
|
||||
Widget_PackContentY:
|
||||
ldd r18, Y+WIDGET_OFFS_HEIGHT_LO
|
||||
ldd r19, Y+WIDGET_OFFS_HEIGHT_HI
|
||||
ldd r17, Y+WIDGET_OFFS_PACK
|
||||
swap r17 ; WIDGET_PACK_VCONTENT0_BIT = 6 -> shift 6 times right
|
||||
lsr r17
|
||||
lsr r17
|
||||
andi r17, 3
|
||||
rcall widgetPack ; r21:r20=new pos (r17, r18, r19)
|
||||
mov r6, r20
|
||||
mov r7, r21
|
||||
ret
|
||||
; @end
|
||||
|
||||
@@ -1044,6 +996,57 @@ widgetCalcAbsPosAndBorders:
|
||||
|
||||
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
; @routine widgetPack
|
||||
;
|
||||
; @param Y address of widget
|
||||
; @param r19:r18 size of target widget (i.e. width or height)
|
||||
; @param r17 pack mode (see @ref WIDGET_PACK_BEGIN)
|
||||
; @param R13:R12 size of object to pack (i.e. width or height)
|
||||
; @return R21:R20 pos
|
||||
; @clobbers r17, r18, r19
|
||||
|
||||
widgetPack:
|
||||
; subtract borders
|
||||
push zl
|
||||
push zh
|
||||
ldd zl, Y+WIDGET_OFFS_STYLE_LO
|
||||
ldd zh, Y+WIDGET_OFFS_STYLE_HI
|
||||
adiw zh:zl, WIDGET_STYLE_OFFS_OUTERBORDERSIZE
|
||||
lpm r20, Z
|
||||
pop zh
|
||||
pop zl
|
||||
clr r21
|
||||
sub r18, r20 ; subtract border at begin
|
||||
sbc r19, r21
|
||||
sub r18, r20 ; subtract border at end
|
||||
sbc r19, r21
|
||||
|
||||
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
|
||||
widgetPack_end:
|
||||
sub r18, r12
|
||||
sbc r19, r13
|
||||
add r20, r18
|
||||
adc r21, r19
|
||||
rjmp widgetPack_ret
|
||||
widgetPack_center:
|
||||
sub r18, r12
|
||||
sbc r19, r13
|
||||
lsr r19
|
||||
ror r18
|
||||
add r20, r18
|
||||
adc r21, r19
|
||||
rjmp widgetPack_ret
|
||||
widgetPack_ret:
|
||||
ret
|
||||
; @end
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -1052,7 +1055,7 @@ widgetCalcAbsPosAndBorders:
|
||||
|
||||
Widget_DefaultSignalmap:
|
||||
; header
|
||||
.dw Object_DefaultSignalmap ; next table to use
|
||||
.dw Object_DefaultSignalmap*2 ; next table to use
|
||||
; entries
|
||||
.db 0, WIDGET_SIGNAL_DRAW, LOW(Widget_OnDraw), HIGH(Widget_OnDraw)
|
||||
.db 0, WIDGET_SIGNAL_LAYOUT, LOW(Widget_OnLayout), HIGH(Widget_OnLayout)
|
||||
|
||||
Reference in New Issue
Block a user