gui2: fixed problems with layouts
need to look into spread mode, too.
This commit is contained in:
@@ -523,7 +523,7 @@ Widget_OnDraw:
|
||||
sbrs r17, WIDGET_OPTS_BORDER_BIT
|
||||
rjmp Widget_OnDraw_ret
|
||||
bigcall Widget_DrawBorder
|
||||
|
||||
|
||||
Widget_OnDraw_ret:
|
||||
sec
|
||||
ret
|
||||
@@ -719,6 +719,17 @@ Widget_OnTouch_done:
|
||||
Widget_Clear:
|
||||
rcall Widget_LoadDimsForFullWidget ; (none)
|
||||
rcall Widget_MakeAbsPos ; (r16, r17, r18, r19)
|
||||
rcall Widget_ValidateDims ; (r16, r17)
|
||||
tst r16
|
||||
breq Widget_Clear_l1
|
||||
ldi r16, LOW(DISPLAY_COLOR_RED)
|
||||
mov r2, r16
|
||||
ldi r16, HIGH(DISPLAY_COLOR_RED)
|
||||
mov r3, r16
|
||||
bigcall Display_FillRect
|
||||
ret
|
||||
Widget_Clear_l1:
|
||||
|
||||
rcall Widget_SelectColors ; (R16)
|
||||
mov r2, r0 ; use background
|
||||
mov r3, r1
|
||||
@@ -927,6 +938,109 @@ Widget_MakeAbsPos_loopEnd:
|
||||
|
||||
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
; @routine Widget_ValidateDims @global
|
||||
;
|
||||
; @param Y address of widget
|
||||
; @param r5:r4 X0
|
||||
; @param r7:r6 Y0
|
||||
; @param r9:r8 X1/W
|
||||
; @param r11:r10 Y1/H
|
||||
; @return r16 1 if dims modified, 0 if dims where within display range
|
||||
; @clobbers r16, r17
|
||||
|
||||
Widget_ValidateDims:
|
||||
push r18
|
||||
clr r18
|
||||
ldi r16, LOW(DISPLAY_WIDTH) ; check X
|
||||
ldi r17, HIGH(DISPLAY_WIDTH)
|
||||
cp r4, r16
|
||||
cpc r5, r17
|
||||
brcs Widget_ValidateDims_width
|
||||
ldi r18, 1
|
||||
clr r4
|
||||
clr r5
|
||||
Widget_ValidateDims_width:
|
||||
sub r16, r4 ; calculate remaining width from pos on
|
||||
sbc r17, r5
|
||||
cp r16, r8
|
||||
cpc r17, r9
|
||||
brcc Widget_ValidateDims_y
|
||||
ldi r18, 1
|
||||
mov r8, r16
|
||||
mov r9, r17
|
||||
Widget_ValidateDims_y:
|
||||
ldi r16, LOW(DISPLAY_HEIGHT) ; check Y
|
||||
ldi r17, HIGH(DISPLAY_HEIGHT)
|
||||
cp r6, r16
|
||||
cpc r7, r17
|
||||
brcs Widget_ValidateDims_height
|
||||
ldi r18, 1
|
||||
clr r6
|
||||
clr r7
|
||||
Widget_ValidateDims_height:
|
||||
sub r16, r6 ; calculate remaining width from pos on
|
||||
sbc r17, r7
|
||||
cp r16, r10
|
||||
cpc r17, r11
|
||||
brcc Widget_ValidateDims_ret
|
||||
ldi r18, 1
|
||||
mov r10, r16
|
||||
mov r11, r17
|
||||
Widget_ValidateDims_ret:
|
||||
mov r16, r18
|
||||
pop r18
|
||||
ret
|
||||
; @end
|
||||
|
||||
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
; @routine Widget_CheckDims @global
|
||||
;
|
||||
; @param Y address of widget
|
||||
; @clobbers r16, r17, r18, r19
|
||||
|
||||
Widget_CheckDims:
|
||||
ldi r18, LOW(DISPLAY_WIDTH) ; check X
|
||||
ldi r19, HIGH(DISPLAY_WIDTH)
|
||||
ldd r16, Y+WIDGET_OFFS_X_LO
|
||||
ldd r17, Y+WIDGET_OFFS_X_HI
|
||||
cp r16, r18
|
||||
cpc r17, r19
|
||||
brcc Widget_CheckDims_invalid
|
||||
sub r18, r16
|
||||
sbc r19, r17
|
||||
ldd r16, Y+WIDGET_OFFS_WIDTH_LO
|
||||
ldd r17, Y+WIDGET_OFFS_WIDTH_HI
|
||||
cp r18, r16
|
||||
cpc r19, r17
|
||||
brcs Widget_CheckDims_invalid
|
||||
|
||||
ldi r18, LOW(DISPLAY_HEIGHT) ; check Y
|
||||
ldi r19, HIGH(DISPLAY_HEIGHT)
|
||||
ldd r16, Y+WIDGET_OFFS_Y_LO
|
||||
ldd r17, Y+WIDGET_OFFS_Y_HI
|
||||
cp r16, r18
|
||||
cpc r17, r19
|
||||
brcc Widget_CheckDims_invalid
|
||||
sub r18, r16
|
||||
sbc r19, r17
|
||||
ldd r16, Y+WIDGET_OFFS_HEIGHT_LO
|
||||
ldd r17, Y+WIDGET_OFFS_HEIGHT_HI
|
||||
cp r18, r16
|
||||
cpc r19, r17
|
||||
brcs Widget_CheckDims_invalid
|
||||
; done, all okay so far
|
||||
sec
|
||||
rjmp Widget_CheckDims_ret
|
||||
Widget_CheckDims_invalid:
|
||||
clc
|
||||
Widget_CheckDims_ret:
|
||||
ret
|
||||
; @end
|
||||
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
; @routine Widget_SelectColors @global
|
||||
;
|
||||
|
||||
Reference in New Issue
Block a user