avr: added text aligning in labels.
This commit is contained in:
@@ -201,7 +201,7 @@ winSensorWatch1:
|
|||||||
.dw 0 ; selector (ony lower 8 bits used)
|
.dw 0 ; selector (ony lower 8 bits used)
|
||||||
.dw winSensorWatch1_signalmap*2 ; signal map
|
.dw winSensorWatch1_signalmap*2 ; signal map
|
||||||
; WIDGET
|
; WIDGET
|
||||||
.db (1<<WIDGETS_OPTSLO_MSGRECV_BIT), 0 ; opts lo, hi
|
.db (1<<WIDGET_OPTSLO_MSGRECV_BIT), 0 ; opts lo, hi
|
||||||
.dw 4 ; X
|
.dw 4 ; X
|
||||||
.dw 4 ; Y
|
.dw 4 ; Y
|
||||||
.dw 100 ; W (image=96, 2 px borders)
|
.dw 100 ; W (image=96, 2 px borders)
|
||||||
@@ -232,17 +232,17 @@ winSensorWatch1Title:
|
|||||||
.dw 0 ; selector (ony lower 8 bits used)
|
.dw 0 ; selector (ony lower 8 bits used)
|
||||||
.dw winSensorWatch1Title_signalmap*2 ; signal map
|
.dw winSensorWatch1Title_signalmap*2 ; signal map
|
||||||
; WIDGET
|
; WIDGET
|
||||||
.db 0, 0 ; opts lo, hi
|
.db 0, (1<<WIDGET_OPTSHI_HALIGNCENTER_BIT) ; opts lo, hi
|
||||||
.dw 2 ; X
|
.dw 2 ; X
|
||||||
.dw 1 ; Y
|
.dw 1 ; Y
|
||||||
.dw 96 ; W
|
.dw 96 ; W
|
||||||
.dw STYLE_WIN_FONT_HEIGHT+2 ; H
|
.dw STYLE_WIN_FONT_HEIGHT+2 ; H
|
||||||
.dw STYLE_WIN_FOREGROUND ; front color
|
.dw STYLE_WIN_FOREGROUND ; front color
|
||||||
.dw STYLE_WIN_BACKGROUND ; back color
|
.dw STYLE_WIN_BACKGROUND ; back color
|
||||||
.dw STYLE_WIN_FONT*2 ; font
|
.dw STYLE_WIN_FONT*2 ; font
|
||||||
.dw winSensorWatch1Title_ramdata ; ptr to SDRAM
|
.dw winSensorWatch1Title_ramdata ; ptr to SDRAM
|
||||||
; LABEL
|
; LABEL
|
||||||
.dw winSensorWatch1Title_text*2 ; text
|
.dw winSensorWatch1Title_text*2 ; text
|
||||||
|
|
||||||
winSensorWatch1Title_text:
|
winSensorWatch1Title_text:
|
||||||
.db "CO2", 0
|
.db "CO2", 0
|
||||||
@@ -285,25 +285,25 @@ winSensorWatch1Image_signalmap:
|
|||||||
|
|
||||||
winSensorWatch1Value:
|
winSensorWatch1Value:
|
||||||
; OBJECT
|
; OBJECT
|
||||||
.db 0x55, 0xaa ; magic
|
.db 0x55, 0xaa ; magic
|
||||||
.dw 0 ; next
|
.dw 0 ; next
|
||||||
.dw winSensorWatch1*2 ; parent
|
.dw winSensorWatch1*2 ; parent
|
||||||
.dw 0 ; first child
|
.dw 0 ; first child
|
||||||
.dw 0 ; target
|
.dw 0 ; target
|
||||||
.dw 0 ; selector (ony lower 8 bits used)
|
.dw 0 ; selector (ony lower 8 bits used)
|
||||||
.dw winSensorWatch1Value_signalmap*2 ; signal map
|
.dw winSensorWatch1Value_signalmap*2 ; signal map
|
||||||
; WIDGET
|
; WIDGET
|
||||||
.db 0, 0 ; opts lo, hi
|
.db 0, (1<<WIDGET_OPTSHI_HALIGNCENTER_BIT) ; opts lo, hi
|
||||||
.dw 2 ; X
|
.dw 2 ; X
|
||||||
.dw STYLE_WIN_FONT_HEIGHT+2+96+2 ; Y
|
.dw STYLE_WIN_FONT_HEIGHT+2+96+2 ; Y
|
||||||
.dw 96 ; W
|
.dw 96 ; W
|
||||||
.dw STYLE_WIN_FONT_HEIGHT+2 ; H
|
.dw STYLE_WIN_FONT_HEIGHT+4 ; H
|
||||||
.dw STYLE_WIN_FOREGROUND ; front color
|
.dw STYLE_WIN_FOREGROUND ; front color
|
||||||
.dw STYLE_WIN_BACKGROUND ; back color
|
.dw STYLE_WIN_BACKGROUND ; back color
|
||||||
.dw STYLE_WIN_FONT*2 ; font
|
.dw STYLE_WIN_FONT*2 ; font
|
||||||
.dw winSensorWatch1Value_ramdata ; ptr to SDRAM
|
.dw winSensorWatch1Value_ramdata ; ptr to SDRAM
|
||||||
; VALUELABEL
|
; VALUELABEL
|
||||||
.db 0, 0 ; num of post-komma digits
|
.db 0, 0 ; num of post-komma digits
|
||||||
|
|
||||||
|
|
||||||
winSensorWatch1Value_signalmap:
|
winSensorWatch1Value_signalmap:
|
||||||
|
|||||||
@@ -50,7 +50,7 @@ Label_OnDraw:
|
|||||||
rcall labelWriteText
|
rcall labelWriteText
|
||||||
|
|
||||||
mov r16, r14
|
mov r16, r14
|
||||||
andi r16, (1<<WIDGETS_OPTSLO_BORDER_BIT)
|
andi r16, (1<<WIDGET_OPTSLO_BORDER_BIT)
|
||||||
breq Label_OnDraw_done
|
breq Label_OnDraw_done
|
||||||
ldi r16, LOW(STYLE_BUTTON_COL_BORDER)
|
ldi r16, LOW(STYLE_BUTTON_COL_BORDER)
|
||||||
mov r2, r16
|
mov r2, r16
|
||||||
@@ -79,26 +79,30 @@ Label_OnDraw_ret:
|
|||||||
; @clobbers any, !Z
|
; @clobbers any, !Z
|
||||||
|
|
||||||
labelWriteText:
|
labelWriteText:
|
||||||
clr r4
|
push zl
|
||||||
clr r5
|
push zh
|
||||||
clr r6
|
adiw zh:zl, LABEL_OFFS_TEXT_LO
|
||||||
clr r7
|
lpm r16, Z+
|
||||||
mov r16, r14
|
lpm zh, Z
|
||||||
andi r16, (1<<WIDGETS_OPTSLO_BORDER_BIT)
|
mov zl, r16
|
||||||
breq labelWriteText_draw
|
or r16, zh
|
||||||
ldi r16, 2
|
breq labelWriteText_noText
|
||||||
clr r17
|
|
||||||
add r4, r16 ; x+=2
|
ldi r18, STYLE_WIN_FONT_WIDTH
|
||||||
adc r5, r17
|
rcall Widget_CalcStringWidthFLASH ; r13:r12=string width
|
||||||
add r6, r16 ; y+=2
|
pop zh
|
||||||
adc r7, r17
|
pop zl
|
||||||
labelWriteText_draw:
|
rcall Widget_AlignPosXY ; (r8, r9, r10, r11, r12, r13, r14, r15, r16, r17, r18, r19)
|
||||||
adiw zh:zl, LABEL_OFFS_TEXT_LO
|
adiw zh:zl, LABEL_OFFS_TEXT_LO
|
||||||
lpm r12, Z+
|
lpm r12, Z+
|
||||||
lpm r13, Z
|
lpm r13, Z
|
||||||
sbiw zh:zl, LABEL_OFFS_TEXT_LO+1
|
sbiw zh:zl, LABEL_OFFS_TEXT_LO+1
|
||||||
bigcall Widget_DrawTextFlash
|
bigcall Widget_DrawTextFlash
|
||||||
ret
|
ret
|
||||||
|
labelWriteText_noText:
|
||||||
|
pop zh
|
||||||
|
pop zl
|
||||||
|
ret
|
||||||
; @end
|
; @end
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -24,7 +24,7 @@
|
|||||||
; the value received and also shows the value beloe the image.
|
; the value received and also shows the value beloe the image.
|
||||||
;
|
;
|
||||||
; Please note that this widget needs to have the option bit
|
; Please note that this widget needs to have the option bit
|
||||||
; "WIDGETS_OPTSLO_MSGRECV_BIT" set in order to receive MsgReceived signals.
|
; "WIDGET_OPTSLO_MSGRECV_BIT" set in order to receive MsgReceived signals.
|
||||||
;
|
;
|
||||||
; ***************************************************************************
|
; ***************************************************************************
|
||||||
|
|
||||||
|
|||||||
@@ -15,17 +15,17 @@
|
|||||||
; defines
|
; defines
|
||||||
|
|
||||||
; IMGVIEW in flash
|
; IMGVIEW in flash
|
||||||
.equ VLABEL_OFFS_VLABEL = WIDGET_SIZE
|
.equ VLABEL_OFFS_VLABEL = WIDGET_SIZE
|
||||||
.equ VLABEL_OFFS_POSTKOMMADIGITS = VLABEL_OFFS_VLABEL+0
|
.equ VLABEL_OFFS_POSTKOMMADIGITS = VLABEL_OFFS_VLABEL+0
|
||||||
.equ VLABEL_OFFS_RESERVED = VLABEL_OFFS_VLABEL+1
|
.equ VLABEL_OFFS_RESERVED = VLABEL_OFFS_VLABEL+1
|
||||||
.equ VLABEL_SIZE = VLABEL_OFFS_VLABEL+2
|
.equ VLABEL_SIZE = VLABEL_OFFS_VLABEL+2
|
||||||
|
|
||||||
|
|
||||||
; SDRAM data for IMGVIEW
|
; SDRAM data for IMGVIEW
|
||||||
.equ VLABEL_SD_OFFS_VLABEL = WIDGET_SD_SIZE
|
.equ VLABEL_SD_OFFS_VLABEL = WIDGET_SD_SIZE
|
||||||
.equ VLABEL_SD_OFFS_VALUE_LO = VLABEL_SD_OFFS_VLABEL+0
|
.equ VLABEL_SD_OFFS_VALUE_LO = VLABEL_SD_OFFS_VLABEL+0
|
||||||
.equ VLABEL_SD_OFFS_VALUE_HI = VLABEL_SD_OFFS_VLABEL+1
|
.equ VLABEL_SD_OFFS_VALUE_HI = VLABEL_SD_OFFS_VLABEL+1
|
||||||
.equ VLABEL_SD_SIZE = VLABEL_SD_OFFS_VLABEL+2
|
.equ VLABEL_SD_SIZE = VLABEL_SD_OFFS_VLABEL+2
|
||||||
|
|
||||||
|
|
||||||
; signals
|
; signals
|
||||||
@@ -102,16 +102,18 @@ ValueLabel_OnDraw:
|
|||||||
andi r16, (1<<WIDGET_FLAGS_DIRTY_BIT)
|
andi r16, (1<<WIDGET_FLAGS_DIRTY_BIT)
|
||||||
breq ValueLabel_OnDraw_ret
|
breq ValueLabel_OnDraw_ret
|
||||||
|
|
||||||
|
bigcall Widget_Clear
|
||||||
|
|
||||||
adiw zh:zl, WIDGET_OFFS_OPTS_LO ; get OPTS low
|
adiw zh:zl, WIDGET_OFFS_OPTS_LO ; get OPTS low
|
||||||
lpm r14, Z
|
lpm r14, Z
|
||||||
sbiw zh:zl, WIDGET_OFFS_OPTS_LO
|
sbiw zh:zl, WIDGET_OFFS_OPTS_LO
|
||||||
|
|
||||||
bigcall Widget_Clear
|
push r14
|
||||||
rcall valueLabelWriteValue
|
rcall valueLabelWriteValue
|
||||||
|
pop r14
|
||||||
|
|
||||||
mov r16, r14
|
sbrs r14, WIDGET_OPTSLO_BORDER_BIT
|
||||||
andi r16, (1<<WIDGETS_OPTSLO_BORDER_BIT)
|
rjmp ValueLabel_OnDraw_done
|
||||||
breq ValueLabel_OnDraw_done
|
|
||||||
ldi r16, LOW(STYLE_BUTTON_COL_BORDER)
|
ldi r16, LOW(STYLE_BUTTON_COL_BORDER)
|
||||||
mov r2, r16
|
mov r2, r16
|
||||||
ldi r16, HIGH(STYLE_BUTTON_COL_BORDER)
|
ldi r16, HIGH(STYLE_BUTTON_COL_BORDER)
|
||||||
@@ -142,26 +144,17 @@ valueLabelWriteValue:
|
|||||||
push zl
|
push zl
|
||||||
push zh
|
push zh
|
||||||
bigcall Widget_GetSdramPtr ; (none)
|
bigcall Widget_GetSdramPtr ; (none)
|
||||||
|
; convert value to string
|
||||||
ldd r20, Y+VLABEL_SD_OFFS_VALUE_LO
|
ldd r20, Y+VLABEL_SD_OFFS_VALUE_LO
|
||||||
ldd r21, Y+VLABEL_SD_OFFS_VALUE_HI
|
ldd r21, Y+VLABEL_SD_OFFS_VALUE_HI
|
||||||
adiw zh:zl, VLABEL_OFFS_POSTKOMMADIGITS
|
adiw zh:zl, VLABEL_OFFS_POSTKOMMADIGITS
|
||||||
lpm r24, Z
|
lpm r24, Z
|
||||||
sbiw zh:zl, VLABEL_OFFS_POSTKOMMADIGITS
|
sbiw zh:zl, VLABEL_OFFS_POSTKOMMADIGITS
|
||||||
rcall IntToAscii ; X=pointer to text
|
rcall IntToAscii ; X=pointer to text
|
||||||
clr r4 ; X
|
; align according to string size
|
||||||
clr r5
|
ldi r18, STYLE_WIN_FONT_WIDTH
|
||||||
clr r6 ; Y
|
rcall Widget_CalcStringWidthSDRAM ; r13:r12=string width
|
||||||
clr r7
|
rcall Widget_AlignPosXY ; (r8, r9, r10, r11, r12, r13, r14, r15, r16, r17, r18, r19)
|
||||||
mov r16, r14
|
|
||||||
andi r16, (1<<WIDGETS_OPTSLO_BORDER_BIT)
|
|
||||||
breq valueLabelWriteValue_draw
|
|
||||||
ldi r16, 2
|
|
||||||
clr r17
|
|
||||||
add r4, r16 ; x+=2
|
|
||||||
adc r5, r17
|
|
||||||
add r6, r16 ; y+=2
|
|
||||||
adc r7, r17
|
|
||||||
valueLabelWriteValue_draw:
|
|
||||||
bigcall Widget_DrawTextSDRAM
|
bigcall Widget_DrawTextSDRAM
|
||||||
pop zh
|
pop zh
|
||||||
pop zl
|
pop zl
|
||||||
@@ -172,6 +165,5 @@ valueLabelWriteValue_draw:
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
@@ -41,10 +41,15 @@
|
|||||||
.equ WIDGET_SD_SIZE = 1
|
.equ WIDGET_SD_SIZE = 1
|
||||||
|
|
||||||
; widget opts_lo
|
; widget opts_lo
|
||||||
.equ WIDGETS_OPTSLO_BORDER_BIT = 7
|
.equ WIDGET_OPTSLO_BORDER_BIT = 7
|
||||||
.equ WIDGETS_OPTSLO_INPUT_BIT = 6 ; TOUCH, KEY
|
.equ WIDGET_OPTSLO_INPUT_BIT = 6 ; TOUCH, KEY
|
||||||
.equ WIDGETS_OPTSLO_TIMER_BIT = 5
|
.equ WIDGET_OPTSLO_TIMER_BIT = 5
|
||||||
.equ WIDGETS_OPTSLO_MSGRECV_BIT = 4
|
.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
|
; widget flags
|
||||||
.equ WIDGET_FLAGS_ACTIVE_BIT = 7
|
.equ WIDGET_FLAGS_ACTIVE_BIT = 7
|
||||||
@@ -69,6 +74,12 @@
|
|||||||
.equ WIDGET_SIGNAL_NEXTFREE = OBJECT_SIGNAL_NEXTFREE+5
|
.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
|
; code
|
||||||
@@ -121,7 +132,7 @@ Widget_OnTouch:
|
|||||||
adiw zh:zl, WIDGET_OFFS_OPTS_LO
|
adiw zh:zl, WIDGET_OFFS_OPTS_LO
|
||||||
lpm r16, Z
|
lpm r16, Z
|
||||||
sbiw zh:zl, WIDGET_OFFS_OPTS_LO
|
sbiw zh:zl, WIDGET_OFFS_OPTS_LO
|
||||||
andi r16, (1<<WIDGETS_OPTSLO_INPUT_BIT)
|
andi r16, (1<<WIDGET_OPTSLO_INPUT_BIT)
|
||||||
clc
|
clc
|
||||||
breq Widget_OnTouch_ret
|
breq Widget_OnTouch_ret
|
||||||
|
|
||||||
@@ -145,7 +156,7 @@ Widget_OnTouch:
|
|||||||
|
|
||||||
; check for position inside this widget
|
; check for position inside this widget
|
||||||
rcall Widget_LoadDisplayRegs ; (R0-R11)
|
rcall Widget_LoadDisplayRegs ; (R0-R11)
|
||||||
rcall Widget_MakeAbsPos ; (R16, R17)
|
rcall Widget_MakeAbsPos ; (R16, R17) TODO!!!
|
||||||
rcall Widget_IsPointInRect ; (R16, R17)
|
rcall Widget_IsPointInRect ; (R16, R17)
|
||||||
sbci r16, 0 ; r16=ff if touched inside, 0 otherwise
|
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!)
|
; @param Z byte address of widget object (for LPM!)
|
||||||
|
|
||||||
Widget_Clear:
|
Widget_Clear:
|
||||||
|
rcall OBJ_IsObject
|
||||||
|
brcc Widget_Clear_ret
|
||||||
|
|
||||||
rcall Widget_LoadDisplayRegs
|
rcall Widget_LoadDisplayRegs
|
||||||
rcall Widget_MakeAbsPos ; (R16, R17)
|
rcall Widget_MakeAbsPos ; (R16, R17)
|
||||||
rcall Widget_GetSdramPtr ; (none)
|
rcall Widget_GetSdramPtr ; (none)
|
||||||
adiw zh:zl, WIDGET_OFFS_OPTS_LO ; get OPTS low
|
; adiw zh:zl, WIDGET_OFFS_OPTS_LO ; get OPTS low
|
||||||
lpm r14, Z
|
; lpm r14, Z
|
||||||
sbiw zh:zl, WIDGET_OFFS_OPTS_LO
|
; sbiw zh:zl, WIDGET_OFFS_OPTS_LO
|
||||||
rcall Widget_SelectColors ; (R16)
|
rcall Widget_SelectColors ; (R16)
|
||||||
mov r2, r0 ; use background
|
mov r2, r0 ; use background
|
||||||
mov r3, r1
|
mov r3, r1
|
||||||
bigcall Display_FillRect
|
bigcall Display_FillRect
|
||||||
|
Widget_Clear_ret:
|
||||||
ret
|
ret
|
||||||
; @end
|
; @end
|
||||||
|
|
||||||
@@ -864,8 +879,8 @@ Widget_Tree_SendTouchSignal:
|
|||||||
ldi r16, WIDGET_SIGNAL_TOUCH
|
ldi r16, WIDGET_SIGNAL_TOUCH
|
||||||
clr r17
|
clr r17
|
||||||
; only check active widgets
|
; only check active widgets
|
||||||
ldi r20, (1<<WIDGETS_OPTSLO_INPUT_BIT)
|
ldi r20, (1<<WIDGET_OPTSLO_INPUT_BIT)
|
||||||
ldi r21, (1<<WIDGETS_OPTSLO_INPUT_BIT)
|
ldi r21, (1<<WIDGET_OPTSLO_INPUT_BIT)
|
||||||
rcall Widget_TreeMatchOptsAndSendSignal
|
rcall Widget_TreeMatchOptsAndSendSignal
|
||||||
ret
|
ret
|
||||||
; @end
|
; @end
|
||||||
@@ -881,8 +896,8 @@ Widget_Tree_SendTimerSignal:
|
|||||||
ldi r16, OBJECT_SIGNAL_TIMER
|
ldi r16, OBJECT_SIGNAL_TIMER
|
||||||
clr r17
|
clr r17
|
||||||
; only check active widgets
|
; only check active widgets
|
||||||
ldi r20, (1<<WIDGETS_OPTSLO_TIMER_BIT)
|
ldi r20, (1<<WIDGET_OPTSLO_TIMER_BIT)
|
||||||
ldi r21, (1<<WIDGETS_OPTSLO_TIMER_BIT)
|
ldi r21, (1<<WIDGET_OPTSLO_TIMER_BIT)
|
||||||
rcall Widget_TreeMatchOptsAndSendSignal
|
rcall Widget_TreeMatchOptsAndSendSignal
|
||||||
ret
|
ret
|
||||||
; @end
|
; @end
|
||||||
@@ -899,8 +914,8 @@ Widget_Tree_SendMsgRecvSignal:
|
|||||||
ldi r16, OBJECT_SIGNAL_RECVMSG
|
ldi r16, OBJECT_SIGNAL_RECVMSG
|
||||||
clr r17
|
clr r17
|
||||||
; only check active widgets
|
; only check active widgets
|
||||||
ldi r20, (1<<WIDGETS_OPTSLO_MSGRECV_BIT)
|
ldi r20, (1<<WIDGET_OPTSLO_MSGRECV_BIT)
|
||||||
ldi r21, (1<<WIDGETS_OPTSLO_MSGRECV_BIT)
|
ldi r21, (1<<WIDGET_OPTSLO_MSGRECV_BIT)
|
||||||
rcall Widget_TreeMatchOptsAndSendSignal
|
rcall Widget_TreeMatchOptsAndSendSignal
|
||||||
ret
|
ret
|
||||||
; @end
|
; @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
|
#endif
|
||||||
|
|||||||
Reference in New Issue
Block a user