gui2: improved signal handling, make use of secondary signal maps.
This commit is contained in:
@@ -89,7 +89,16 @@
|
||||
.equ WIDGET_SIGNAL_DRAW = OBJECT_SIGNAL_NEXTFREE+3
|
||||
.equ WIDGET_SIGNAL_TOUCH = OBJECT_SIGNAL_NEXTFREE+4
|
||||
.equ WIDGET_SIGNAL_CLICKED = OBJECT_SIGNAL_NEXTFREE+5
|
||||
.equ WIDGET_SIGNAL_NEXTFREE = OBJECT_SIGNAL_NEXTFREE+6
|
||||
.equ WIDGET_SIGNAL_SETVALUE = OBJECT_SIGNAL_NEXTFREE+6
|
||||
.equ WIDGET_SIGNAL_GETVALUE = OBJECT_SIGNAL_NEXTFREE+7
|
||||
.equ WIDGET_SIGNAL_KEEPALIVE = OBJECT_SIGNAL_NEXTFREE+8
|
||||
.equ WIDGET_SIGNAL_NEXTFREE = OBJECT_SIGNAL_NEXTFREE+9
|
||||
|
||||
|
||||
; values for signals WIDGET_SIGNAL_SETVALUE and WIDGET_SIGNAL_GETVALUE
|
||||
.equ WIDGET_VALUE_DEFAULT_WIDTH = 1
|
||||
.equ WIDGET_VALUE_DEFAULT_HEIGHT = 2
|
||||
.equ WIDGET_VALUE_NEXTFREE = 3
|
||||
|
||||
|
||||
|
||||
@@ -105,19 +114,24 @@
|
||||
; @param Y address of object in SDRAM
|
||||
; @param r16 value for OBJECT_OFFS_OPTS_LO
|
||||
; @param r17 value for OBJECT_OFFS_OPTS_HI
|
||||
; @param X parent widget (if any)
|
||||
; @clobbers r16, r17, X
|
||||
|
||||
Widget_Init:
|
||||
; 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 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)
|
||||
pop xh
|
||||
pop xl
|
||||
|
||||
; set default signal map
|
||||
ldi r16, LOW(Widget_DefaultSignalmap*2)
|
||||
@@ -125,12 +139,26 @@ Widget_Init:
|
||||
ldi r16, HIGH(Widget_DefaultSignalmap*2)
|
||||
std Y+OBJECT_OFFS_SIGNALMAP_HI, r16
|
||||
|
||||
; set default style
|
||||
; set style
|
||||
mov r16, xl
|
||||
or r16, xh
|
||||
breq Widget_Init_setDefaultStyle
|
||||
; use style from parent
|
||||
adiw xh:xl, WIDGET_OFFS_STYLE_LO
|
||||
ld r16, X+
|
||||
std Y+WIDGET_OFFS_STYLE_LO, r16
|
||||
ld r16, X
|
||||
std Y+WIDGET_OFFS_STYLE_HI, r16
|
||||
sbiw xh:xl, (WIDGET_OFFS_STYLE_LO+1)
|
||||
rjmp Widget_Init_setDefaultSize
|
||||
|
||||
Widget_Init_setDefaultStyle:
|
||||
ldi r16, LOW(Widget_DefaultStyle*2)
|
||||
std Y+WIDGET_OFFS_STYLE_LO, r16
|
||||
ldi r16, HIGH(Widget_DefaultStyle*2)
|
||||
std Y+WIDGET_OFFS_STYLE_HI, r16
|
||||
|
||||
Widget_Init_setDefaultSize:
|
||||
; initial size: 1x1 px
|
||||
ldi r16, 1
|
||||
clr r17
|
||||
@@ -139,6 +167,13 @@ Widget_Init:
|
||||
std Y+WIDGET_OFFS_HEIGHT_LO, r16
|
||||
std Y+WIDGET_OFFS_HEIGHT_HI, r17
|
||||
|
||||
; add to parent (if any)
|
||||
mov r16, xl
|
||||
or r16, xh
|
||||
breq Widget_Init_ret
|
||||
bigcall OBJ_AddChild
|
||||
|
||||
Widget_Init_ret:
|
||||
ret
|
||||
; @end
|
||||
|
||||
@@ -252,6 +287,36 @@ Widget_OnDrawNop:
|
||||
|
||||
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
; @routine Widget_OnGetValue @global
|
||||
;
|
||||
; @param Y address of widget
|
||||
; @param r17 value requested
|
||||
; @param xl param1
|
||||
; @param xh param2
|
||||
; @return CFLAG set if signal handled
|
||||
; @return r19:r18 value
|
||||
; @clobbers any, !Y
|
||||
|
||||
Widget_OnGetValue:
|
||||
cpi r17, WIDGET_VALUE_DEFAULT_WIDTH
|
||||
breq Widget_OnGetValue_getDefaultWidth
|
||||
cpi r17, WIDGET_VALUE_DEFAULT_HEIGHT
|
||||
breq Widget_OnGetValue_getDefaultHeight
|
||||
clc
|
||||
rjmp Widget_OnGetValue_ret
|
||||
|
||||
Widget_OnGetValue_getDefaultWidth:
|
||||
Widget_OnGetValue_getDefaultHeight:
|
||||
ldi r18, 1
|
||||
clr r19
|
||||
sec
|
||||
Widget_OnGetValue_ret:
|
||||
ret
|
||||
; @end
|
||||
|
||||
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
; @routine Widget_Clear @global
|
||||
;
|
||||
@@ -656,8 +721,11 @@ widgetCalcAbsPosAndBorders:
|
||||
; data in FLASH
|
||||
|
||||
Widget_DefaultSignalmap:
|
||||
.db 0, WIDGET_SIGNAL_DRAW, LOW(Widget_OnDraw), HIGH(Widget_OnDraw)
|
||||
.db 0, OBJECT_SIGNAL_DESTROY, LOW(OBJ_OnDestroy), HIGH(OBJ_OnDestroy)
|
||||
; header
|
||||
.dw Object_DefaultSignalmap ; next table to use
|
||||
; entries
|
||||
.db 0, WIDGET_SIGNAL_DRAW, LOW(Widget_OnDraw), HIGH(Widget_OnDraw)
|
||||
.db 0, WIDGET_SIGNAL_GETVALUE, LOW(Widget_OnGetValue), HIGH(Widget_OnGetValue) ; handle any value here
|
||||
.db 0, 0, 0, 0 ; end of table
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user