gui: improved Label class (can now have a suffix to reduce FLASH usage).
- e.g. light1 and light2 can now share the string but have different suffix - allow for initially empty text
This commit is contained in:
@@ -19,13 +19,17 @@
|
|||||||
.equ LABEL_OFFS_TEXTRES_HI = LABEL_OFFS_BEGIN+1
|
.equ LABEL_OFFS_TEXTRES_HI = LABEL_OFFS_BEGIN+1
|
||||||
.equ LABEL_OFFS_MINWIDTH_LO = LABEL_OFFS_BEGIN+2
|
.equ LABEL_OFFS_MINWIDTH_LO = LABEL_OFFS_BEGIN+2
|
||||||
.equ LABEL_OFFS_MINWIDTH_HI = LABEL_OFFS_BEGIN+3
|
.equ LABEL_OFFS_MINWIDTH_HI = LABEL_OFFS_BEGIN+3
|
||||||
.equ LABEL_SIZE = LABEL_OFFS_BEGIN+4
|
.equ LABEL_OFFS_IDX = LABEL_OFFS_BEGIN+4
|
||||||
|
.equ LABEL_SIZE = LABEL_OFFS_BEGIN+5
|
||||||
|
|
||||||
|
|
||||||
; values
|
; values
|
||||||
.equ LABEL_VALUE_TEXTRES = 1
|
.equ LABEL_VALUE_TEXTRES = WIDGET_VALUE_NEXTFREE+0
|
||||||
.equ LABEL_VALUE_MINWIDTH = 2
|
.equ LABEL_VALUE_IDX = WIDGET_VALUE_NEXTFREE+1
|
||||||
|
.equ LABEL_VALUE_MINWIDTH = WIDGET_VALUE_NEXTFREE+2
|
||||||
|
.equ LABEL_VALUE_NEXTFREE = WIDGET_VALUE_NEXTFREE+3
|
||||||
|
|
||||||
|
.equ LABEL_IDX_SPACING = 8
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -97,6 +101,7 @@ Label_Init:
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#if 0
|
||||||
; ---------------------------------------------------------------------------
|
; ---------------------------------------------------------------------------
|
||||||
; @routine Label_SetTextRessourceId @global
|
; @routine Label_SetTextRessourceId @global
|
||||||
;
|
;
|
||||||
@@ -104,7 +109,7 @@ Label_Init:
|
|||||||
; @param X id of text ressource
|
; @param X id of text ressource
|
||||||
; @clobbers r16, r17, r18, r19
|
; @clobbers r16, r17, r18, r19
|
||||||
|
|
||||||
Label_SetTextRessourceId:
|
xLabel_SetTextRessourceId:
|
||||||
std Y+LABEL_OFFS_TEXTRES_LO, xl
|
std Y+LABEL_OFFS_TEXTRES_LO, xl
|
||||||
std Y+LABEL_OFFS_TEXTRES_HI, xh
|
std Y+LABEL_OFFS_TEXTRES_HI, xh
|
||||||
ldd r16, Y+OBJECT_OFFS_FLAGS
|
ldd r16, Y+OBJECT_OFFS_FLAGS
|
||||||
@@ -115,7 +120,7 @@ Label_SetTextRessourceId:
|
|||||||
bigcall OBJ_AddFlagsUp ; (r17, r18, r19)
|
bigcall OBJ_AddFlagsUp ; (r17, r18, r19)
|
||||||
ret
|
ret
|
||||||
; @end
|
; @end
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -211,15 +216,8 @@ Label_OnGetDefaultHeight:
|
|||||||
Label_OnSetValueTextRes:
|
Label_OnSetValueTextRes:
|
||||||
std Y+LABEL_OFFS_TEXTRES_LO, xl
|
std Y+LABEL_OFFS_TEXTRES_LO, xl
|
||||||
std Y+LABEL_OFFS_TEXTRES_HI, xh
|
std Y+LABEL_OFFS_TEXTRES_HI, xh
|
||||||
|
rcall labelSetDirtyAndLayoutFlags
|
||||||
|
|
||||||
; set dirty flag
|
|
||||||
ldd r16, Y+OBJECT_OFFS_FLAGS
|
|
||||||
ori r16, (1<<WIDGET_FLAGS_DIRTY_BIT)
|
|
||||||
std Y+OBJECT_OFFS_FLAGS, r16
|
|
||||||
|
|
||||||
; force layout of this and all parent widgets
|
|
||||||
ldi r16, (1<<WIDGET_FLAGS_LAYOUT_BIT)
|
|
||||||
bigcall OBJ_AddFlagsUp ; (r17, r18, r19)
|
|
||||||
sec
|
sec
|
||||||
ret
|
ret
|
||||||
; @end
|
; @end
|
||||||
@@ -236,7 +234,36 @@ Label_OnSetValueTextRes:
|
|||||||
Label_OnSetValueMinWidth:
|
Label_OnSetValueMinWidth:
|
||||||
std Y+LABEL_OFFS_MINWIDTH_LO, xl
|
std Y+LABEL_OFFS_MINWIDTH_LO, xl
|
||||||
std Y+LABEL_OFFS_MINWIDTH_HI, xh
|
std Y+LABEL_OFFS_MINWIDTH_HI, xh
|
||||||
|
rcall labelSetDirtyAndLayoutFlags
|
||||||
|
sec
|
||||||
|
ret
|
||||||
|
; @end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
; ---------------------------------------------------------------------------
|
||||||
|
; @routine Label_OnSetValueIdx @global
|
||||||
|
;
|
||||||
|
; @param Y address of widget
|
||||||
|
; @param X id of text ressource
|
||||||
|
; @clobbers none
|
||||||
|
|
||||||
|
Label_OnSetValueIdx:
|
||||||
|
std Y+LABEL_OFFS_IDX, xl
|
||||||
|
rcall labelSetDirtyAndLayoutFlags
|
||||||
|
sec
|
||||||
|
ret
|
||||||
|
; @end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
; ---------------------------------------------------------------------------
|
||||||
|
; @routine labelSetDirtyAndLayoutFlags
|
||||||
|
;
|
||||||
|
; @param Y address of widget
|
||||||
|
; @clobbers r16-r19
|
||||||
|
|
||||||
|
labelSetDirtyAndLayoutFlags:
|
||||||
; set dirty flag
|
; set dirty flag
|
||||||
ldd r16, Y+OBJECT_OFFS_FLAGS
|
ldd r16, Y+OBJECT_OFFS_FLAGS
|
||||||
ori r16, (1<<WIDGET_FLAGS_DIRTY_BIT)
|
ori r16, (1<<WIDGET_FLAGS_DIRTY_BIT)
|
||||||
@@ -245,7 +272,6 @@ Label_OnSetValueMinWidth:
|
|||||||
; force layout of this and all parent widgets
|
; force layout of this and all parent widgets
|
||||||
ldi r16, (1<<WIDGET_FLAGS_LAYOUT_BIT)
|
ldi r16, (1<<WIDGET_FLAGS_LAYOUT_BIT)
|
||||||
bigcall OBJ_AddFlagsUp ; (r17, r18, r19)
|
bigcall OBJ_AddFlagsUp ; (r17, r18, r19)
|
||||||
sec
|
|
||||||
ret
|
ret
|
||||||
; @end
|
; @end
|
||||||
|
|
||||||
@@ -260,6 +286,21 @@ Label_OnSetValueMinWidth:
|
|||||||
labelWriteText:
|
labelWriteText:
|
||||||
rcall labelAlignTextXY ; (r8, r9, r10, r11, r12, r13, r14, r15, r16, r17, r18, r19)
|
rcall labelAlignTextXY ; (r8, r9, r10, r11, r12, r13, r14, r15, r16, r17, r18, r19)
|
||||||
bigcall Widget_DrawTextFlash ; (any, !Y)
|
bigcall Widget_DrawTextFlash ; (any, !Y)
|
||||||
|
ldd r16, Y+LABEL_OFFS_IDX
|
||||||
|
tst r16
|
||||||
|
breq labelWriteText_ret
|
||||||
|
ldi r17, LABEL_IDX_SPACING
|
||||||
|
add r5, r17
|
||||||
|
adc r6, r17
|
||||||
|
sub r6, r17
|
||||||
|
ldi r17, '0'
|
||||||
|
add r16, r17
|
||||||
|
push zl
|
||||||
|
push zh
|
||||||
|
rcall widgetDrawChar ; (any, !Y, !R6, !R7, !R8, !R9, !R10, !R11)
|
||||||
|
pop zh
|
||||||
|
pop zl
|
||||||
|
|
||||||
labelWriteText_ret:
|
labelWriteText_ret:
|
||||||
ret
|
ret
|
||||||
; @end
|
; @end
|
||||||
@@ -304,12 +345,26 @@ labelCalcTextWidth:
|
|||||||
ldi zl, LOW(RESSOURCE_ADDR*2)
|
ldi zl, LOW(RESSOURCE_ADDR*2)
|
||||||
ldi zh, HIGH(RESSOURCE_ADDR*2)
|
ldi zh, HIGH(RESSOURCE_ADDR*2)
|
||||||
bigcall RES_GetRessource ; (r16, r17, r18)
|
bigcall RES_GetRessource ; (r16, r17, r18)
|
||||||
brcc labelCalcTextWidth_ret
|
brcs labelCalcTextWidth_haveText
|
||||||
|
ldi zl, LOW(labelEmptyString*2) ; use empty default text
|
||||||
bigcall Widget_GetCharWidth ; R16=char width
|
ldi zh, HIGH(labelEmptyString*2)
|
||||||
|
labelCalcTextWidth_haveText:
|
||||||
|
bigcall Widget_GetCharWidth ; R16=char width
|
||||||
mov r18, r16
|
mov r18, r16
|
||||||
bigcall Widget_CalcStringWidthFLASH ; r13:r12=size (r16)
|
bigcall Widget_CalcStringWidthFLASH ; r13:r12=size (r16)
|
||||||
sec
|
ldd r16, Y+LABEL_OFFS_IDX
|
||||||
|
tst r16
|
||||||
|
breq labelCalcTextWidth_ret
|
||||||
|
; add spacing
|
||||||
|
ldi r16, LABEL_IDX_SPACING
|
||||||
|
add r12, r16
|
||||||
|
adc r13, r16
|
||||||
|
sub r13, r16
|
||||||
|
; add width of one char
|
||||||
|
rcall Widget_GetCharWidth ; r16=charWidth (none)
|
||||||
|
add r12, r16
|
||||||
|
adc r13, r16
|
||||||
|
sub r13, r16
|
||||||
labelCalcTextWidth_ret:
|
labelCalcTextWidth_ret:
|
||||||
ret
|
ret
|
||||||
; @end
|
; @end
|
||||||
@@ -319,6 +374,10 @@ labelCalcTextWidth_ret:
|
|||||||
; ***************************************************************************
|
; ***************************************************************************
|
||||||
; data in FLASH
|
; data in FLASH
|
||||||
|
|
||||||
|
labelEmptyString:
|
||||||
|
.dw 0
|
||||||
|
|
||||||
|
|
||||||
Label_DefaultSignalmap:
|
Label_DefaultSignalmap:
|
||||||
; header
|
; header
|
||||||
.dw Widget_DefaultSignalmap*2 ; next table to use
|
.dw Widget_DefaultSignalmap*2 ; next table to use
|
||||||
@@ -327,6 +386,7 @@ Label_DefaultSignalmap:
|
|||||||
|
|
||||||
.db LABEL_VALUE_TEXTRES, WIDGET_SIGNAL_SETVALUE, LOW(Label_OnSetValueTextRes), HIGH(Label_OnSetValueTextRes)
|
.db LABEL_VALUE_TEXTRES, WIDGET_SIGNAL_SETVALUE, LOW(Label_OnSetValueTextRes), HIGH(Label_OnSetValueTextRes)
|
||||||
.db LABEL_VALUE_MINWIDTH, WIDGET_SIGNAL_SETVALUE, LOW(Label_OnSetValueMinWidth), HIGH(Label_OnSetValueMinWidth)
|
.db LABEL_VALUE_MINWIDTH, WIDGET_SIGNAL_SETVALUE, LOW(Label_OnSetValueMinWidth), HIGH(Label_OnSetValueMinWidth)
|
||||||
|
.db LABEL_VALUE_IDX, WIDGET_SIGNAL_SETVALUE, LOW(Label_OnSetValueIdx), HIGH(Label_OnSetValueIdx)
|
||||||
.db WIDGET_VALUE_DEFAULT_WIDTH, WIDGET_SIGNAL_GETVALUE, LOW(Label_OnGetDefaultWidth), HIGH(Label_OnGetDefaultWidth)
|
.db WIDGET_VALUE_DEFAULT_WIDTH, WIDGET_SIGNAL_GETVALUE, LOW(Label_OnGetDefaultWidth), HIGH(Label_OnGetDefaultWidth)
|
||||||
.db WIDGET_VALUE_DEFAULT_HEIGHT, WIDGET_SIGNAL_GETVALUE, LOW(Label_OnGetDefaultHeight), HIGH(Label_OnGetDefaultHeight)
|
.db WIDGET_VALUE_DEFAULT_HEIGHT, WIDGET_SIGNAL_GETVALUE, LOW(Label_OnGetDefaultHeight), HIGH(Label_OnGetDefaultHeight)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user