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_MINWIDTH_LO = LABEL_OFFS_BEGIN+2
|
||||
.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
|
||||
.equ LABEL_VALUE_TEXTRES = 1
|
||||
.equ LABEL_VALUE_MINWIDTH = 2
|
||||
.equ LABEL_VALUE_TEXTRES = WIDGET_VALUE_NEXTFREE+0
|
||||
.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
|
||||
;
|
||||
@@ -104,7 +109,7 @@ Label_Init:
|
||||
; @param X id of text ressource
|
||||
; @clobbers r16, r17, r18, r19
|
||||
|
||||
Label_SetTextRessourceId:
|
||||
xLabel_SetTextRessourceId:
|
||||
std Y+LABEL_OFFS_TEXTRES_LO, xl
|
||||
std Y+LABEL_OFFS_TEXTRES_HI, xh
|
||||
ldd r16, Y+OBJECT_OFFS_FLAGS
|
||||
@@ -115,7 +120,7 @@ Label_SetTextRessourceId:
|
||||
bigcall OBJ_AddFlagsUp ; (r17, r18, r19)
|
||||
ret
|
||||
; @end
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
@@ -211,15 +216,8 @@ Label_OnGetDefaultHeight:
|
||||
Label_OnSetValueTextRes:
|
||||
std Y+LABEL_OFFS_TEXTRES_LO, xl
|
||||
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
|
||||
ret
|
||||
; @end
|
||||
@@ -236,7 +234,36 @@ Label_OnSetValueTextRes:
|
||||
Label_OnSetValueMinWidth:
|
||||
std Y+LABEL_OFFS_MINWIDTH_LO, xl
|
||||
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
|
||||
ldd r16, Y+OBJECT_OFFS_FLAGS
|
||||
ori r16, (1<<WIDGET_FLAGS_DIRTY_BIT)
|
||||
@@ -245,7 +272,6 @@ Label_OnSetValueMinWidth:
|
||||
; force layout of this and all parent widgets
|
||||
ldi r16, (1<<WIDGET_FLAGS_LAYOUT_BIT)
|
||||
bigcall OBJ_AddFlagsUp ; (r17, r18, r19)
|
||||
sec
|
||||
ret
|
||||
; @end
|
||||
|
||||
@@ -260,6 +286,21 @@ Label_OnSetValueMinWidth:
|
||||
labelWriteText:
|
||||
rcall labelAlignTextXY ; (r8, r9, r10, r11, r12, r13, r14, r15, r16, r17, r18, r19)
|
||||
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:
|
||||
ret
|
||||
; @end
|
||||
@@ -304,12 +345,26 @@ labelCalcTextWidth:
|
||||
ldi zl, LOW(RESSOURCE_ADDR*2)
|
||||
ldi zh, HIGH(RESSOURCE_ADDR*2)
|
||||
bigcall RES_GetRessource ; (r16, r17, r18)
|
||||
brcc labelCalcTextWidth_ret
|
||||
|
||||
bigcall Widget_GetCharWidth ; R16=char width
|
||||
brcs labelCalcTextWidth_haveText
|
||||
ldi zl, LOW(labelEmptyString*2) ; use empty default text
|
||||
ldi zh, HIGH(labelEmptyString*2)
|
||||
labelCalcTextWidth_haveText:
|
||||
bigcall Widget_GetCharWidth ; R16=char width
|
||||
mov r18, 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:
|
||||
ret
|
||||
; @end
|
||||
@@ -319,6 +374,10 @@ labelCalcTextWidth_ret:
|
||||
; ***************************************************************************
|
||||
; data in FLASH
|
||||
|
||||
labelEmptyString:
|
||||
.dw 0
|
||||
|
||||
|
||||
Label_DefaultSignalmap:
|
||||
; header
|
||||
.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_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_HEIGHT, WIDGET_SIGNAL_GETVALUE, LOW(Label_OnGetDefaultHeight), HIGH(Label_OnGetDefaultHeight)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user