diff --git a/avr/modules/lcd2/gui2/base/widget.asm b/avr/modules/lcd2/gui2/base/widget.asm index ff957d0..fbfaec0 100644 --- a/avr/modules/lcd2/gui2/base/widget.asm +++ b/avr/modules/lcd2/gui2/base/widget.asm @@ -16,18 +16,18 @@ ; Widget in flash -.equ WIDGET_OFFS_WIDGET = OBJECT_SIZE -.equ WIDGET_OFFS_X_LO = WIDGET_OFFS_WIDGET+0 -.equ WIDGET_OFFS_X_HI = WIDGET_OFFS_WIDGET+1 -.equ WIDGET_OFFS_Y_LO = WIDGET_OFFS_WIDGET+2 -.equ WIDGET_OFFS_Y_HI = WIDGET_OFFS_WIDGET+3 -.equ WIDGET_OFFS_WIDTH_LO = WIDGET_OFFS_WIDGET+4 -.equ WIDGET_OFFS_WIDTH_HI = WIDGET_OFFS_WIDGET+5 -.equ WIDGET_OFFS_HEIGHT_LO = WIDGET_OFFS_WIDGET+6 -.equ WIDGET_OFFS_HEIGHT_HI = WIDGET_OFFS_WIDGET+7 -.equ WIDGET_OFFS_STYLE_LO = WIDGET_OFFS_WIDGET+8 ; byte address (for LPM!) -.equ WIDGET_OFFS_STYLE_HI = WIDGET_OFFS_WIDGET+9 -.equ WIDGET_SIZE = WIDGET_OFFS_WIDGET+10 +.equ WIDGET_OFFS_BEGIN = OBJECT_SIZE +.equ WIDGET_OFFS_X_LO = WIDGET_OFFS_BEGIN+0 +.equ WIDGET_OFFS_X_HI = WIDGET_OFFS_BEGIN+1 +.equ WIDGET_OFFS_Y_LO = WIDGET_OFFS_BEGIN+2 +.equ WIDGET_OFFS_Y_HI = WIDGET_OFFS_BEGIN+3 +.equ WIDGET_OFFS_WIDTH_LO = WIDGET_OFFS_BEGIN+4 +.equ WIDGET_OFFS_WIDTH_HI = WIDGET_OFFS_BEGIN+5 +.equ WIDGET_OFFS_HEIGHT_LO = WIDGET_OFFS_BEGIN+6 +.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_SIZE = WIDGET_OFFS_BEGIN+10 ; widget style object .equ WIDGET_STYLE_OFFS_FRONTCOL_NORM = 0 @@ -103,6 +103,8 @@ ; @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 ; @clobbers r16, r17, X Widget_Init: @@ -112,9 +114,9 @@ Widget_Init: ; clear widget-specific data mov xl, yl mov xh, yh - adiw xh:xl, WIDGET_OFFS_WIDGET + adiw xh:xl, WIDGET_OFFS_BEGIN clr r16 - ldi r17, (WIDGET_SIZE-WIDGET_OFFS_WIDGET) + ldi r17, (WIDGET_SIZE-WIDGET_OFFS_BEGIN) bigcall Utils_FillSram ; (r17, X) ; set default signal map @@ -129,6 +131,14 @@ Widget_Init: ldi r16, HIGH(Widget_DefaultStyle*2) std Y+WIDGET_OFFS_STYLE_HI, r16 + ; initial size: 1x1 px + ldi r16, 1 + clr r17 + std Y+WIDGET_OFFS_WIDTH_LO, r16 + std Y+WIDGET_OFFS_WIDTH_HI, r17 + std Y+WIDGET_OFFS_HEIGHT_LO, r16 + std Y+WIDGET_OFFS_HEIGHT_HI, r17 + ret ; @end @@ -146,6 +156,48 @@ Widget_Fini: +; --------------------------------------------------------------------------- +; @routine Widget_Resize @global +; +; @param Y address of widget +; @param r9:r8 W +; @param r11:r10 H +; @clobbers r16 + +Widget_Resize: + std Y+WIDGET_OFFS_WIDTH_LO, r8 + std Y+WIDGET_OFFS_WIDTH_HI, r9 + std Y+WIDGET_OFFS_HEIGHT_LO, r10 + std Y+WIDGET_OFFS_HEIGHT_HI, r11 + ldd r16, Y+OBJECT_OFFS_FLAGS + ori r16, (1<