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
d553dcf3
Commit
d553dcf3
authored
Jan 10, 2017
by
Kiss-Vamosi Gabor
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
lv_gauge: add txt attribute to show printf-like formatted text
parent
01d0e925
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
46 additions
and
12 deletions
+46
-12
lv_gauge.c
lv_objx/lv_gauge.c
+42
-10
lv_gauge.h
lv_objx/lv_gauge.h
+4
-2
No files found.
lv_objx/lv_gauge.c
View file @
d553dcf3
...
...
@@ -12,6 +12,7 @@
#include "lv_gauge.h"
#include <stdio.h>
#include <string.h>
#include "../lv_draw/lv_draw.h"
#include "../lv_misc/text.h"
#include "misc/math/trigo.h"
...
...
@@ -74,6 +75,7 @@ lv_obj_t * lv_gauge_create(lv_obj_t * par, lv_obj_t * copy)
ext
->
needle_num
=
1
;
ext
->
low_critical
=
0
;
ext
->
values
=
NULL
;
ext
->
txt
=
NULL
;
if
(
ancestor_design_f
==
NULL
)
ancestor_design_f
=
lv_obj_get_design_f
(
new_gauge
);
...
...
@@ -84,6 +86,7 @@ lv_obj_t * lv_gauge_create(lv_obj_t * par, lv_obj_t * copy)
/*Init the new gauge gauge*/
if
(
copy
==
NULL
)
{
lv_gauge_set_needle_num
(
new_gauge
,
1
);
lv_gauge_set_text
(
new_gauge
,
"%d"
);
lv_obj_set_size
(
new_gauge
,
LV_GAUGE_DEF_WIDTH
,
LV_GAUGE_DEF_HEIGHT
);
lv_obj_set_style
(
new_gauge
,
lv_gauges_get
(
LV_GAUGES_DEF
,
NULL
));
}
...
...
@@ -94,6 +97,7 @@ lv_obj_t * lv_gauge_create(lv_obj_t * par, lv_obj_t * copy)
ext
->
max
=
copy_ext
->
max
;
ext
->
low_critical
=
copy_ext
->
low_critical
;
lv_gauge_set_needle_num
(
new_gauge
,
lv_gauge_get_needle_num
(
copy
));
lv_gauge_set_text
(
new_gauge
,
lv_gauge_get_text
(
copy
));
uint8_t
i
;
for
(
i
=
0
;
i
<
ext
->
needle_num
;
i
++
)
{
...
...
@@ -196,6 +200,24 @@ void lv_gauge_set_value(lv_obj_t * gauge, uint8_t needle, int16_t value)
}
/**
* Set text on a gauge
* @param gauge pinter to a gauge object
* @param txt a printf like format string
* with 1 place for a number (e.g. "Value: %d");
*/
void
lv_gauge_set_text
(
lv_obj_t
*
gauge
,
const
char
*
txt
)
{
lv_gauge_ext_t
*
ext
=
lv_obj_get_ext
(
gauge
);
if
(
ext
->
txt
!=
NULL
)
dm_free
(
ext
->
txt
);
ext
->
txt
=
dm_alloc
(
strlen
(
txt
)
+
1
);
strcpy
(
ext
->
txt
,
txt
);
lv_obj_inv
(
gauge
);
}
/**
* Set which value is more critical (lower or higher)
* @param gauge pointer to a gauge object
* @param low false: higher / true: lower value is more critical
...
...
@@ -207,9 +229,9 @@ void lv_gauge_set_low_critical(lv_obj_t * gauge, bool low)
ext
->
low_critical
=
low
==
false
?
0
:
1
;
lv_obj_inv
(
gauge
);
}
/*=====================
* Getter functions
*====================*/
...
...
@@ -235,13 +257,24 @@ int16_t lv_gauge_get_value(lv_obj_t * gauge, uint8_t needle)
{
lv_gauge_ext_t
*
ext
=
lv_obj_get_ext
(
gauge
);
if
(
needle
>=
ext
->
needle_num
)
return
0
;
if
(
needle
>=
ext
->
needle_num
)
return
ext
->
min
;
return
ext
->
values
[
needle
];
}
/**
* Get the text of a gauge
* @param gauge pointer to gauge
* @return the set text. (not with the current value)
*/
const
char
*
lv_gauge_get_text
(
lv_obj_t
*
gauge
)
{
lv_gauge_ext_t
*
ext
=
lv_obj_get_ext
(
gauge
);
return
ext
->
txt
;
}
/**
* Get which value is more critical (lower or higher)
* @param gauge pointer to a gauge object
* @param low false: higher / true: lower value is more critical
...
...
@@ -251,7 +284,6 @@ bool lv_gauge_get_low_critical(lv_obj_t * gauge)
lv_gauge_ext_t
*
ext
=
lv_obj_get_ext
(
gauge
);
return
ext
->
low_critical
==
0
?
false
:
true
;
}
/**
...
...
@@ -418,7 +450,8 @@ static void lv_gauge_draw_needle(lv_obj_t * gauge, const area_t * mask)
p_mid
.
y
=
y_ofs
;
for
(
i
=
0
;
i
<
ext
->
needle_num
;
i
++
)
{
/*Calculate the end point of a needle*/
int16_t
needle_angle
=
ext
->
values
[
i
]
*
style
->
scale_angle
/
(
ext
->
max
-
ext
->
min
)
+
angle_ofs
;
int16_t
needle_angle
=
(
ext
->
values
[
i
]
-
ext
->
min
)
*
style
->
scale_angle
/
(
ext
->
max
-
ext
->
min
)
+
angle_ofs
;
p_end
.
y
=
(
trigo_sin
(
needle_angle
)
*
r
)
/
TRIGO_SIN_MAX
+
y_ofs
;
p_end
.
x
=
(
trigo_sin
(
needle_angle
+
90
)
*
r
)
/
TRIGO_SIN_MAX
+
x_ofs
;
...
...
@@ -449,9 +482,9 @@ static void lv_gauge_draw_needle(lv_obj_t * gauge, const area_t * mask)
lv_draw_rect
(
&
nm_cord
,
mask
,
&
nm
,
OPA_100
);
/*Write the critical value if enabled*/
if
(
style
->
value_show
!=
0
)
{
if
(
ext
->
txt
[
0
]
!=
'\0'
)
{
char
value_txt
[
16
];
sprintf
(
value_txt
,
"%d"
,
critical_value
);
sprintf
(
value_txt
,
ext
->
txt
,
critical_value
);
area_t
label_cord
;
point_t
label_size
;
...
...
@@ -489,8 +522,8 @@ static void lv_gauges_init(void)
lv_labels_get
(
LV_LABELS_DEF
,
&
lv_gauges_def
.
value_labels
);
lv_gauges_def
.
value_labels
.
objs
.
color
=
COLOR_WHITE
;
lv_gauges_def
.
value_labels
.
letter_space
=
6
*
LV_DOWNSCALE
;
lv_gauges_def
.
value_labels
.
font
=
FONT_DEJAVU_60
;
lv_gauges_def
.
value_labels
.
letter_space
=
3
*
LV_DOWNSCALE
;
lv_gauges_def
.
value_labels
.
mid
=
1
;
lv_lines_get
(
LV_LINES_DEF
,
&
lv_gauges_def
.
needle_lines
);
lv_gauges_def
.
needle_lines
.
objs
.
color
=
COLOR_WHITE
;
...
...
@@ -507,7 +540,6 @@ static void lv_gauges_init(void)
lv_gauges_def
.
scale_pad
=
20
*
LV_DOWNSCALE
;
lv_gauges_def
.
scale_label_num
=
6
;
lv_gauges_def
.
scale_angle
=
220
;
lv_gauges_def
.
value_show
=
1
;
}
#endif
lv_objx/lv_gauge.h
View file @
d553dcf3
...
...
@@ -53,7 +53,6 @@ typedef struct
opa_t
needle_opa
;
/*Opacity of the needles*/
/*Value text settings*/
lv_labels_t
value_labels
;
/*Style of the value label*/
uint8_t
value_show
:
1
;
/*1: draw a label woth the most critical value*/
}
lv_gauges_t
;
/*Built-in styles of gauge*/
...
...
@@ -70,6 +69,7 @@ typedef struct
int16_t
min
;
int16_t
max
;
int16_t
*
values
;
char
*
txt
;
uint8_t
needle_num
;
uint8_t
low_critical
:
1
;
/*0: the higher value is more critical, 1: the lower value is more critical*/
}
lv_gauge_ext_t
;
...
...
@@ -81,13 +81,15 @@ lv_obj_t * lv_gauge_create(lv_obj_t * par, lv_obj_t * copy);
bool
lv_gauge_signal
(
lv_obj_t
*
gauge
,
lv_signal_t
sign
,
void
*
param
);
lv_gauges_t
*
lv_gauges_get
(
lv_gauges_builtin_t
style
,
lv_gauges_t
*
copy
);
void
lv_gauge_set_value
(
lv_obj_t
*
gauge
,
uint8_t
needle
,
int16_t
value
)
void
lv_gauge_set_value
(
lv_obj_t
*
gauge
,
uint8_t
needle
,
int16_t
value
)
;
void
lv_gauge_set_needle_num
(
lv_obj_t
*
gauge
,
uint8_t
num
);
void
lv_gauge_set_range
(
lv_obj_t
*
gauge
,
int16_t
min
,
int16_t
max
);
void
lv_gauge_set_text
(
lv_obj_t
*
gauge
,
const
char
*
txt
);
void
lv_gauge_set_low_critical
(
lv_obj_t
*
gauge
,
bool
low
);
uint8_t
lv_gauge_get_needle_num
(
lv_obj_t
*
gauge
);
int16_t
lv_gauge_get_value
(
lv_obj_t
*
gauge
,
uint8_t
needle
);
const
char
*
lv_gauge_get_text
(
lv_obj_t
*
gauge
);
bool
lv_gauge_get_low_critical
(
lv_obj_t
*
gauge
);
/**********************
...
...
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