avr: added text aligning in labels.
This commit is contained in:
@@ -41,10 +41,15 @@
|
||||
.equ WIDGET_SD_SIZE = 1
|
||||
|
||||
; widget opts_lo
|
||||
.equ WIDGETS_OPTSLO_BORDER_BIT = 7
|
||||
.equ WIDGETS_OPTSLO_INPUT_BIT = 6 ; TOUCH, KEY
|
||||
.equ WIDGETS_OPTSLO_TIMER_BIT = 5
|
||||
.equ WIDGETS_OPTSLO_MSGRECV_BIT = 4
|
||||
.equ WIDGET_OPTSLO_BORDER_BIT = 7
|
||||
.equ WIDGET_OPTSLO_INPUT_BIT = 6 ; TOUCH, KEY
|
||||
.equ WIDGET_OPTSLO_TIMER_BIT = 5
|
||||
.equ WIDGET_OPTSLO_MSGRECV_BIT = 4
|
||||
|
||||
.equ WIDGET_OPTSHI_HALIGNRIGHT_BIT = 7
|
||||
.equ WIDGET_OPTSHI_HALIGNCENTER_BIT = 6
|
||||
.equ WIDGET_OPTSHI_VALIGNBOTTOM_BIT = 5
|
||||
.equ WIDGET_OPTSHI_VALIGNCENTER_BIT = 4
|
||||
|
||||
; widget flags
|
||||
.equ WIDGET_FLAGS_ACTIVE_BIT = 7
|
||||
@@ -69,6 +74,12 @@
|
||||
.equ WIDGET_SIGNAL_NEXTFREE = OBJECT_SIGNAL_NEXTFREE+5
|
||||
|
||||
|
||||
; args to Widget_AlignPos
|
||||
.equ WIDGET_1DALIGN_END_BIT = 0
|
||||
.equ WIDGET_1DALIGN_CENTER_BIT = 1
|
||||
.equ WIDGET_1DALIGN_BORDER_BIT = 2
|
||||
|
||||
|
||||
|
||||
; ***************************************************************************
|
||||
; code
|
||||
@@ -121,7 +132,7 @@ Widget_OnTouch:
|
||||
adiw zh:zl, WIDGET_OFFS_OPTS_LO
|
||||
lpm r16, Z
|
||||
sbiw zh:zl, WIDGET_OFFS_OPTS_LO
|
||||
andi r16, (1<<WIDGETS_OPTSLO_INPUT_BIT)
|
||||
andi r16, (1<<WIDGET_OPTSLO_INPUT_BIT)
|
||||
clc
|
||||
breq Widget_OnTouch_ret
|
||||
|
||||
@@ -145,7 +156,7 @@ Widget_OnTouch:
|
||||
|
||||
; check for position inside this widget
|
||||
rcall Widget_LoadDisplayRegs ; (R0-R11)
|
||||
rcall Widget_MakeAbsPos ; (R16, R17)
|
||||
rcall Widget_MakeAbsPos ; (R16, R17) TODO!!!
|
||||
rcall Widget_IsPointInRect ; (R16, R17)
|
||||
sbci r16, 0 ; r16=ff if touched inside, 0 otherwise
|
||||
|
||||
@@ -460,16 +471,20 @@ Widget_SubFlags_ret:
|
||||
; @param Z byte address of widget object (for LPM!)
|
||||
|
||||
Widget_Clear:
|
||||
rcall OBJ_IsObject
|
||||
brcc Widget_Clear_ret
|
||||
|
||||
rcall Widget_LoadDisplayRegs
|
||||
rcall Widget_MakeAbsPos ; (R16, R17)
|
||||
rcall Widget_GetSdramPtr ; (none)
|
||||
adiw zh:zl, WIDGET_OFFS_OPTS_LO ; get OPTS low
|
||||
lpm r14, Z
|
||||
sbiw zh:zl, WIDGET_OFFS_OPTS_LO
|
||||
; adiw zh:zl, WIDGET_OFFS_OPTS_LO ; get OPTS low
|
||||
; lpm r14, Z
|
||||
; sbiw zh:zl, WIDGET_OFFS_OPTS_LO
|
||||
rcall Widget_SelectColors ; (R16)
|
||||
mov r2, r0 ; use background
|
||||
mov r3, r1
|
||||
bigcall Display_FillRect
|
||||
Widget_Clear_ret:
|
||||
ret
|
||||
; @end
|
||||
|
||||
@@ -864,8 +879,8 @@ Widget_Tree_SendTouchSignal:
|
||||
ldi r16, WIDGET_SIGNAL_TOUCH
|
||||
clr r17
|
||||
; only check active widgets
|
||||
ldi r20, (1<<WIDGETS_OPTSLO_INPUT_BIT)
|
||||
ldi r21, (1<<WIDGETS_OPTSLO_INPUT_BIT)
|
||||
ldi r20, (1<<WIDGET_OPTSLO_INPUT_BIT)
|
||||
ldi r21, (1<<WIDGET_OPTSLO_INPUT_BIT)
|
||||
rcall Widget_TreeMatchOptsAndSendSignal
|
||||
ret
|
||||
; @end
|
||||
@@ -881,8 +896,8 @@ Widget_Tree_SendTimerSignal:
|
||||
ldi r16, OBJECT_SIGNAL_TIMER
|
||||
clr r17
|
||||
; only check active widgets
|
||||
ldi r20, (1<<WIDGETS_OPTSLO_TIMER_BIT)
|
||||
ldi r21, (1<<WIDGETS_OPTSLO_TIMER_BIT)
|
||||
ldi r20, (1<<WIDGET_OPTSLO_TIMER_BIT)
|
||||
ldi r21, (1<<WIDGET_OPTSLO_TIMER_BIT)
|
||||
rcall Widget_TreeMatchOptsAndSendSignal
|
||||
ret
|
||||
; @end
|
||||
@@ -899,8 +914,8 @@ Widget_Tree_SendMsgRecvSignal:
|
||||
ldi r16, OBJECT_SIGNAL_RECVMSG
|
||||
clr r17
|
||||
; only check active widgets
|
||||
ldi r20, (1<<WIDGETS_OPTSLO_MSGRECV_BIT)
|
||||
ldi r21, (1<<WIDGETS_OPTSLO_MSGRECV_BIT)
|
||||
ldi r20, (1<<WIDGET_OPTSLO_MSGRECV_BIT)
|
||||
ldi r21, (1<<WIDGET_OPTSLO_MSGRECV_BIT)
|
||||
rcall Widget_TreeMatchOptsAndSendSignal
|
||||
ret
|
||||
; @end
|
||||
@@ -1079,4 +1094,176 @@ Widget_TreeMatchFlagsAndSendSignalToActive_done:
|
||||
|
||||
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
; @routine Widget_AlignPos1D
|
||||
;
|
||||
; one-dimensional routine.
|
||||
;
|
||||
; @param R19:R18 size of target
|
||||
; @param R13:R12 size of object to align
|
||||
; @param
|
||||
; @param R17 opts (bit 0: align end, bit 1: align center, bit 2: account for border)
|
||||
; @return R23:R22 pos
|
||||
; @clobbers r16, r18, r19
|
||||
|
||||
Widget_AlignPos1D:
|
||||
clr r22
|
||||
clr r23
|
||||
|
||||
sbrc r17, WIDGET_1DALIGN_BORDER_BIT
|
||||
rcall Widget_AlignPos1D_subBordersFromSize
|
||||
|
||||
sbrc r17, WIDGET_1DALIGN_END_BIT
|
||||
rcall Widget_AlignPos1D_alignEnd
|
||||
sbrc r17, WIDGET_1DALIGN_CENTER_BIT
|
||||
rcall Widget_AlignPos1D_alignCenter
|
||||
|
||||
sbrc r17, WIDGET_1DALIGN_BORDER_BIT
|
||||
rcall Widget_AlignPos1D_addBordersToPos
|
||||
Widget_AlignPos1D_ret:
|
||||
ret
|
||||
Widget_AlignPos1D_alignEnd:
|
||||
mov r22, r18
|
||||
mov r23, r19
|
||||
sub r22, r12
|
||||
sbc r23, r13
|
||||
brcc Widget_AlignPos1D_ret
|
||||
clr r22
|
||||
clr r23
|
||||
ret
|
||||
Widget_AlignPos1D_alignCenter:
|
||||
rcall Widget_AlignPos1D_alignEnd
|
||||
lsr r23
|
||||
ror r22
|
||||
ret
|
||||
Widget_AlignPos1D_subBordersFromSize:
|
||||
subi r18, 4
|
||||
sbci r19, 0
|
||||
ret
|
||||
Widget_AlignPos1D_addBordersToPos:
|
||||
ldi r16, 2
|
||||
add r22, r16
|
||||
adc r23, r16
|
||||
sub r23, r16
|
||||
ret
|
||||
; @end
|
||||
|
||||
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
; @routine Widget_AlignPosXY
|
||||
;
|
||||
; @param Z byte address of widget object (for LPM!)
|
||||
; @param R13:R12 width of object to align
|
||||
; @return R5:R4 X
|
||||
; @return R7:R6 Y
|
||||
; @clobbers r8, r9, r10, r11, r12, r13, r14, r15, r16, r17, r18, r19, r20, r21, r22, r23, r24, r25
|
||||
|
||||
Widget_AlignPosXY:
|
||||
adiw zh:zl, WIDGET_OFFS_WIDTH_LO
|
||||
lpm r8, Z+ ; WIDTH_LO
|
||||
lpm r9, Z+
|
||||
lpm r10, Z+ ; HEIGHT_LO
|
||||
lpm r11, Z
|
||||
sbiw zh:zl, WIDGET_OFFS_WIDTH_LO+3
|
||||
|
||||
adiw zh:zl, WIDGET_OFFS_OPTS_LO
|
||||
lpm r24, Z+
|
||||
lpm r25, Z
|
||||
sbiw zh:zl, WIDGET_OFFS_OPTS_LO+1
|
||||
|
||||
; align horizontally
|
||||
clr r17
|
||||
sbrc r24, WIDGET_OPTSLO_BORDER_BIT
|
||||
ori r17, (1<<WIDGET_1DALIGN_BORDER_BIT)
|
||||
sbrc r25, WIDGET_OPTSHI_HALIGNRIGHT_BIT
|
||||
ori r17, (1<<WIDGET_1DALIGN_END_BIT)
|
||||
sbrc r25, WIDGET_OPTSHI_HALIGNCENTER_BIT
|
||||
ori r17, (1<<WIDGET_1DALIGN_CENTER_BIT)
|
||||
mov r18, r8 ; widget width
|
||||
mov r19, r9
|
||||
rcall Widget_AlignPos1D ; (r16, r18, r19)
|
||||
mov r4, r22
|
||||
mov r5, r23
|
||||
|
||||
; align vertically
|
||||
clr r17
|
||||
sbrc r24, WIDGET_OPTSLO_BORDER_BIT
|
||||
ori r17, (1<<WIDGET_1DALIGN_BORDER_BIT)
|
||||
sbrc r25, WIDGET_OPTSHI_VALIGNBOTTOM_BIT
|
||||
ori r17, (1<<WIDGET_1DALIGN_END_BIT)
|
||||
sbrc r25, WIDGET_OPTSHI_VALIGNCENTER_BIT
|
||||
ori r17, (1<<WIDGET_1DALIGN_CENTER_BIT)
|
||||
ldi r16, STYLE_WIN_FONT_HEIGHT ; use font height
|
||||
mov r12, r16
|
||||
clr r13
|
||||
mov r18, r10 ; widget height
|
||||
mov r19, r11
|
||||
rcall Widget_AlignPos1D ; (r16, r18, r19)
|
||||
mov r6, r22
|
||||
mov r7, r23
|
||||
|
||||
ret
|
||||
; @end
|
||||
|
||||
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
; @routine Widget_CalcStringWidthSDRAM
|
||||
;
|
||||
; @param X pointer to text in SDRAM
|
||||
; @param R18 char width in px
|
||||
; @return r13:r12 width of string
|
||||
; @clobbers r16
|
||||
|
||||
Widget_CalcStringWidthSDRAM:
|
||||
clr r12
|
||||
clr r13
|
||||
push xl
|
||||
push xh
|
||||
Widget_CalcStringWidthSDRAM_loop:
|
||||
ld r16, X+
|
||||
tst r16
|
||||
breq Widget_CalcStringWidthSDRAM_done
|
||||
add r12, r18
|
||||
adc r13, r18
|
||||
sub r13, r18
|
||||
rjmp Widget_CalcStringWidthSDRAM_loop
|
||||
Widget_CalcStringWidthSDRAM_done:
|
||||
pop xh
|
||||
pop xl
|
||||
ret
|
||||
; @end
|
||||
|
||||
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
; @routine Widget_CalcStringWidthFLASH
|
||||
;
|
||||
; @param Z pointer to text in FLASH
|
||||
; @param R18 char width in px
|
||||
; @return r13:r12 width of string
|
||||
; @clobbers r16
|
||||
|
||||
Widget_CalcStringWidthFLASH:
|
||||
clr r12
|
||||
clr r13
|
||||
push zl
|
||||
push zh
|
||||
Widget_CalcStringWidthFLASH_loop:
|
||||
lpm r16, Z+
|
||||
tst r16
|
||||
breq Widget_CalcStringWidthFLASH_done
|
||||
add r12, r18
|
||||
adc r13, r18
|
||||
sub r13, r18
|
||||
rjmp Widget_CalcStringWidthFLASH_loop
|
||||
Widget_CalcStringWidthFLASH_done:
|
||||
pop zh
|
||||
pop zl
|
||||
ret
|
||||
; @end
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user