BigW Consortium Gitlab
Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
L
lvgl
Project
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Open sidebar
Forest Godfrey
lvgl
Commits
06cea6ed
Commit
06cea6ed
authored
Jun 13, 2017
by
Gabor
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
label pwd mode added
parent
26325e5e
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
71 additions
and
19 deletions
+71
-19
lv_app_kb.c
lv_app/lv_app_util/lv_app_kb.c
+1
-1
lv_draw.c
lv_draw/lv_draw.c
+9
-3
lv_label.c
lv_objx/lv_label.c
+46
-15
lv_label.h
lv_objx/lv_label.h
+15
-0
No files found.
lv_app/lv_app_util/lv_app_kb.c
View file @
06cea6ed
...
...
@@ -199,8 +199,8 @@ void lv_app_kb_close(bool ok)
}
else
{
lv_obj_del
(
kb_btnm
);
}
kb_btnm
=
NULL
;
kb_btnm
=
NULL
;
kb_ta
=
NULL
;
}
...
...
lv_draw/lv_draw.c
View file @
06cea6ed
...
...
@@ -298,9 +298,15 @@ void lv_draw_label(const area_t * cords_p,const area_t * mask_p, const lv_style_
}
}
if
(
cmd_state
==
CMD_STATE_IN
)
letter_fp
(
&
pos
,
mask_p
,
font
,
txt
[
i
],
recolor
,
style
->
opa
);
else
letter_fp
(
&
pos
,
mask_p
,
font
,
txt
[
i
],
style
->
ccolor
,
style
->
opa
);
pos
.
x
+=
(
font_get_width
(
font
,
txt
[
i
])
>>
FONT_ANTIALIAS
)
+
style
->
letter_space
;
char
letter
=
txt
[
i
];
color_t
color
=
style
->
ccolor
;
if
((
flag
&
TXT_FLAG_PWD
)
!=
0
&&
txt
[
i
+
1
]
!=
'\0'
)
letter
=
'*'
;
if
(
cmd_state
==
CMD_STATE_IN
)
color
=
recolor
;
letter_fp
(
&
pos
,
mask_p
,
font
,
letter
,
color
,
style
->
opa
);
if
((
flag
&
TXT_FLAG_PWD
)
==
0
||
txt
[
i
+
1
]
==
'\0'
)
pos
.
x
+=
(
font_get_width
(
font
,
txt
[
i
])
>>
FONT_ANTIALIAS
)
+
style
->
letter_space
;
else
pos
.
x
+=
(
font_get_width
(
font
,
'*'
)
>>
FONT_ANTIALIAS
)
+
style
->
letter_space
;
}
/*Go to next line*/
line_start
=
line_end
;
...
...
lv_objx/lv_label.c
View file @
06cea6ed
...
...
@@ -81,6 +81,7 @@ lv_obj_t * lv_label_create(lv_obj_t * par, lv_obj_t * copy)
ext
->
txt
=
NULL
;
ext
->
static_txt
=
0
;
ext
->
recolor
=
0
;
ext
->
pwd
=
0
;
ext
->
dot_end
=
LV_LABEL_DOT_END_INV
;
ext
->
long_mode
=
LV_LABEL_LONG_EXPAND
;
...
...
@@ -300,6 +301,20 @@ void lv_label_set_recolor(lv_obj_t * label, bool recolor)
lv_label_refr_text
(
label
);
}
/**
* Enable the password mode
* @param label pointer to a label object
* @param pwd true: enable password mode, false: disable
*/
void
lv_label_set_pwd_mode
(
lv_obj_t
*
label
,
bool
pwd
)
{
lv_label_ext_t
*
ext
=
lv_obj_get_ext
(
label
);
ext
->
pwd
=
pwd
==
false
?
0
:
1
;
lv_label_refr_text
(
label
);
}
/*=====================
* Getter functions
*====================*/
...
...
@@ -336,7 +351,17 @@ bool lv_label_get_recolor(lv_obj_t * label)
{
lv_label_ext_t
*
ext
=
lv_obj_get_ext
(
label
);
return
ext
->
recolor
==
0
?
false
:
true
;
}
/**
* Get the password mode
* @param label pointer to a label object
* @return true: password mode is enabled, false: disable
*/
bool
lv_label_get_pwd_mode
(
lv_obj_t
*
label
)
{
lv_label_ext_t
*
ext
=
lv_obj_get_ext
(
label
);
return
ext
->
pwd
==
0
?
false
:
true
;
}
/**
...
...
@@ -347,7 +372,7 @@ bool lv_label_get_recolor(lv_obj_t * label)
*/
void
lv_label_get_letter_pos
(
lv_obj_t
*
label
,
uint16_t
index
,
point_t
*
pos
)
{
const
char
*
t
e
xt
=
lv_label_get_text
(
label
);
const
char
*
txt
=
lv_label_get_text
(
label
);
lv_label_ext_t
*
ext
=
lv_obj_get_ext
(
label
);
uint32_t
line_start
=
0
;
uint32_t
new_line_start
=
0
;
...
...
@@ -359,6 +384,7 @@ void lv_label_get_letter_pos(lv_obj_t * label, uint16_t index, point_t * pos)
txt_flag_t
flag
=
TXT_FLAG_NONE
;
if
(
ext
->
recolor
!=
0
)
flag
|=
TXT_FLAG_RECOLOR
;
if
(
ext
->
pwd
!=
0
)
flag
|=
TXT_FLAG_PWD
;
/*If the width will be expanded the set the max length to very big */
if
(
ext
->
long_mode
==
LV_LABEL_LONG_EXPAND
||
ext
->
long_mode
==
LV_LABEL_LONG_SCROLL
)
{
...
...
@@ -366,15 +392,15 @@ void lv_label_get_letter_pos(lv_obj_t * label, uint16_t index, point_t * pos)
}
/*Search the line of the index letter */
;
while
(
t
e
xt
[
new_line_start
]
!=
'\0'
)
{
new_line_start
+=
txt_get_next_line
(
&
t
e
xt
[
line_start
],
font
,
style
->
letter_space
,
max_w
,
flag
);
if
(
index
<
new_line_start
||
t
e
xt
[
new_line_start
]
==
'\0'
)
break
;
/*The line of 'index' letter begins at 'line_start'*/
while
(
txt
[
new_line_start
]
!=
'\0'
)
{
new_line_start
+=
txt_get_next_line
(
&
txt
[
line_start
],
font
,
style
->
letter_space
,
max_w
,
flag
);
if
(
index
<
new_line_start
||
txt
[
new_line_start
]
==
'\0'
)
break
;
/*The line of 'index' letter begins at 'line_start'*/
y
+=
letter_height
+
style
->
line_space
;
line_start
=
new_line_start
;
}
if
((
t
ext
[
index
-
1
]
==
'\n'
||
text
[
index
-
1
]
==
'\r'
)
&&
te
xt
[
index
]
==
'\0'
)
{
if
((
t
xt
[
index
-
1
]
==
'\n'
||
txt
[
index
-
1
]
==
'\r'
)
&&
t
xt
[
index
]
==
'\0'
)
{
y
+=
letter_height
+
style
->
line_space
;
line_start
=
index
;
}
...
...
@@ -386,17 +412,17 @@ void lv_label_get_letter_pos(lv_obj_t * label, uint16_t index, point_t * pos)
for
(
i
=
line_start
;
i
<
index
;
i
++
)
{
/*Handle the recolor command*/
if
((
flag
&
TXT_FLAG_RECOLOR
)
!=
0
)
{
if
(
txt_is_cmd
(
&
cmd_state
,
t
e
xt
[
i
])
!=
false
)
{
if
(
txt_is_cmd
(
&
cmd_state
,
txt
[
i
])
!=
false
)
{
continue
;
/*Skip the letter is it is part of a command*/
}
}
x
+=
(
font_get_width
(
font
,
text
[
i
]
)
>>
FONT_ANTIALIAS
)
+
style
->
letter_space
;
if
((
flag
&
TXT_FLAG_PWD
)
==
0
||
txt
[
i
+
1
]
==
'\0'
)
x
+=
(
font_get_width
(
font
,
txt
[
i
])
>>
FONT_ANTIALIAS
)
+
style
->
letter_space
;
else
x
+=
(
font_get_width
(
font
,
'*'
)
>>
FONT_ANTIALIAS
)
+
style
->
letter_space
;
}
if
(
style
->
txt_align
==
LV_TXT_ALIGN_MID
)
{
cord_t
line_w
;
line_w
=
txt_get_width
(
&
t
e
xt
[
line_start
],
new_line_start
-
line_start
,
line_w
=
txt_get_width
(
&
txt
[
line_start
],
new_line_start
-
line_start
,
font
,
style
->
letter_space
,
flag
);
x
+=
lv_obj_get_width
(
label
)
/
2
-
line_w
/
2
;
}
...
...
@@ -414,7 +440,7 @@ void lv_label_get_letter_pos(lv_obj_t * label, uint16_t index, point_t * pos)
*/
uint16_t
lv_label_get_letter_on
(
lv_obj_t
*
label
,
point_t
*
pos
)
{
const
char
*
t
e
xt
=
lv_label_get_text
(
label
);
const
char
*
txt
=
lv_label_get_text
(
label
);
lv_label_ext_t
*
ext
=
lv_obj_get_ext
(
label
);
uint32_t
line_start
=
0
;
uint32_t
new_line_start
=
0
;
...
...
@@ -426,6 +452,7 @@ uint16_t lv_label_get_letter_on(lv_obj_t * label, point_t * pos)
txt_flag_t
flag
=
TXT_FLAG_NONE
;
if
(
ext
->
recolor
!=
0
)
flag
|=
TXT_FLAG_RECOLOR
;
if
(
ext
->
pwd
!=
0
)
flag
|=
TXT_FLAG_PWD
;
/*If the width will be expanded set the max length to very big */
if
(
ext
->
long_mode
==
LV_LABEL_LONG_EXPAND
||
ext
->
long_mode
==
LV_LABEL_LONG_SCROLL
)
{
...
...
@@ -433,8 +460,8 @@ uint16_t lv_label_get_letter_on(lv_obj_t * label, point_t * pos)
}
/*Search the line of the index letter */
;
while
(
t
e
xt
[
line_start
]
!=
'\0'
)
{
new_line_start
+=
txt_get_next_line
(
&
t
e
xt
[
line_start
],
font
,
style
->
letter_space
,
max_w
,
flag
);
while
(
txt
[
line_start
]
!=
'\0'
)
{
new_line_start
+=
txt_get_next_line
(
&
txt
[
line_start
],
font
,
style
->
letter_space
,
max_w
,
flag
);
if
(
pos
->
y
<=
y
+
letter_height
+
style
->
line_space
)
break
;
/*The line is found ('line_start')*/
y
+=
letter_height
+
style
->
line_space
;
line_start
=
new_line_start
;
...
...
@@ -444,7 +471,7 @@ uint16_t lv_label_get_letter_on(lv_obj_t * label, point_t * pos)
cord_t
x
=
0
;
if
(
style
->
txt_align
==
LV_TXT_ALIGN_MID
)
{
cord_t
line_w
;
line_w
=
txt_get_width
(
&
t
e
xt
[
line_start
],
new_line_start
-
line_start
,
line_w
=
txt_get_width
(
&
txt
[
line_start
],
new_line_start
-
line_start
,
font
,
style
->
letter_space
,
flag
);
x
+=
lv_obj_get_width
(
label
)
/
2
-
line_w
/
2
;
}
...
...
@@ -454,12 +481,14 @@ uint16_t lv_label_get_letter_on(lv_obj_t * label, point_t * pos)
for
(
i
=
line_start
;
i
<
new_line_start
-
1
;
i
++
)
{
/*Handle the recolor command*/
if
((
flag
&
TXT_FLAG_RECOLOR
)
!=
0
)
{
if
(
txt_is_cmd
(
&
cmd_state
,
t
e
xt
[
i
])
!=
false
)
{
if
(
txt_is_cmd
(
&
cmd_state
,
txt
[
i
])
!=
false
)
{
continue
;
/*Skip the letter is it is part of a command*/
}
}
x
+=
(
font_get_width
(
font
,
text
[
i
])
>>
FONT_ANTIALIAS
)
+
style
->
letter_space
;
if
((
flag
&
TXT_FLAG_PWD
)
==
0
||
txt
[
i
+
1
]
==
'\0'
)
x
+=
(
font_get_width
(
font
,
txt
[
i
])
>>
FONT_ANTIALIAS
)
+
style
->
letter_space
;
else
x
+=
(
font_get_width
(
font
,
'*'
)
>>
FONT_ANTIALIAS
)
+
style
->
letter_space
;
if
(
pos
->
x
<
x
)
break
;
}
...
...
@@ -495,6 +524,7 @@ static bool lv_label_design(lv_obj_t * label, const area_t * mask, lv_design_mod
lv_label_ext_t
*
ext
=
lv_obj_get_ext
(
label
);
txt_flag_t
flag
=
TXT_FLAG_NONE
;
if
(
ext
->
recolor
!=
0
)
flag
|=
TXT_FLAG_RECOLOR
;
if
(
ext
->
pwd
!=
0
)
flag
|=
TXT_FLAG_PWD
;
lv_draw_label
(
&
cords
,
mask
,
lv_obj_get_style
(
label
),
ext
->
txt
,
flag
);
...
...
@@ -529,6 +559,7 @@ static void lv_label_refr_text(lv_obj_t * label)
point_t
size
;
txt_flag_t
flag
=
TXT_FLAG_NONE
;
if
(
ext
->
recolor
!=
0
)
flag
|=
TXT_FLAG_RECOLOR
;
if
(
ext
->
pwd
!=
0
)
flag
|=
TXT_FLAG_PWD
;
txt_get_size
(
&
size
,
ext
->
txt
,
font
,
style
->
letter_space
,
style
->
line_space
,
max_w
,
flag
);
/*Refresh the full size in expand mode*/
...
...
lv_objx/lv_label.h
View file @
06cea6ed
...
...
@@ -45,6 +45,7 @@ typedef struct
uint16_t
dot_end
;
/*The text end position in dot mode (Handled by the library)*/
uint8_t
static_txt
:
1
;
/*Flag to indicate the text is static*/
uint8_t
recolor
:
1
;
/*Enable in-line letter re-coloring*/
uint8_t
pwd
:
1
;
/*Convert letters to '*' when draw*/
}
lv_label_ext_t
;
/**********************
...
...
@@ -113,6 +114,13 @@ void lv_label_set_long_mode(lv_obj_t * label, lv_label_long_mode_t long_mode);
void
lv_label_set_recolor
(
lv_obj_t
*
label
,
bool
recolor
);
/**
* Enable the password mode
* @param label pointer to a label object
* @param pwd true: enable password mode, false: disable
*/
void
lv_label_set_pwd_mode
(
lv_obj_t
*
label
,
bool
pwd
);
/**
* Get the text of a label
* @param label pointer to a label object
* @return the text of the label
...
...
@@ -134,6 +142,13 @@ lv_label_long_mode_t lv_label_get_long_mode(lv_obj_t * label);
bool
lv_label_get_recolor
(
lv_obj_t
*
label
);
/**
* Get the password mode
* @param label pointer to a label object
* @return true: password mode is enabled, false: disable
*/
bool
lv_label_get_pwd_mode
(
lv_obj_t
*
label
);
/**
* Get the relative x and y coordinates of a letter
* @param label pointer to a label object
* @param index index of the letter (0 ... text length)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment