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