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
c0715b4c
Commit
c0715b4c
authored
Oct 05, 2017
by
Gabor Kiss-Vamosi
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
rever reset
parent
d6ccc489
Hide whitespace changes
Inline
Side-by-side
Showing
26 changed files
with
278 additions
and
255 deletions
+278
-255
lv_app_sysmon.c
lv_appx/lv_app_sysmon.c
+1
-1
lv_conf_templ.h
lv_conf_templ.h
+0
-1
lv_draw.c
lv_draw/lv_draw.c
+15
-13
lv_draw_rbasic.c
lv_draw/lv_draw_rbasic.c
+11
-11
lv_draw_vbasic.c
lv_draw/lv_draw_vbasic.c
+11
-9
lv_draw_vbasic.h
lv_draw/lv_draw_vbasic.h
+1
-1
lv_dispi.c
lv_obj/lv_dispi.c
+20
-18
lv_obj.c
lv_obj/lv_obj.c
+25
-23
lv_obj.h
lv_obj/lv_obj.h
+1
-1
lv_refr.c
lv_obj/lv_refr.c
+3
-3
lv_vdb.c
lv_obj/lv_vdb.c
+3
-3
lv_btnm.c
lv_objx/lv_btnm.c
+10
-3
lv_btnm.h
lv_objx/lv_btnm.h
+12
-6
lv_ddlist.c
lv_objx/lv_ddlist.c
+40
-27
lv_ddlist.h
lv_objx/lv_ddlist.h
+17
-8
lv_kb.c
lv_objx/lv_kb.c
+4
-4
lv_label.c
lv_objx/lv_label.c
+54
-69
lv_label.h
lv_objx/lv_label.h
+15
-6
lv_list.c
lv_objx/lv_list.c
+0
-19
lv_list.h
lv_objx/lv_list.h
+0
-7
lv_objx_templ.c
lv_objx/lv_objx_templ.c
+4
-3
lv_objx_templ.h
lv_objx/lv_objx_templ.h
+4
-3
lv_ta.c
lv_objx/lv_ta.c
+22
-13
lv_ta.h
lv_objx/lv_ta.h
+1
-1
lv_tabview.c
lv_objx/lv_tabview.c
+3
-2
lvgl.h
lvgl.h
+1
-0
No files found.
lv_appx/lv_app_sysmon.c
View file @
c0715b4c
...
...
@@ -14,7 +14,7 @@
#include "misc/os/idle.h"
#include "lvgl/lv_objx/lv_chart.h"
#include "lvgl/lv_app/lv_app_util/lv_app_notice.h"
#include "hal/systick/systick.h"
#include "
../
hal/systick/systick.h"
/*********************
* DEFINES
...
...
lv_conf_templ.h
View file @
c0715b4c
...
...
@@ -134,7 +134,6 @@
/*Text area (dependencies: lv_label, lv_page)*/
#define USE_LV_TA 1
#if USE_LV_TA != 0
#define LV_TA_MAX_LENGTH 256
#define LV_TA_CUR_BLINK_TIME 400 /*ms*/
#define LV_TA_PWD_SHOW_TIME 1500 /*ms*/
#endif
...
...
lv_draw/lv_draw.c
View file @
c0715b4c
...
...
@@ -6,17 +6,17 @@
/*********************
* INCLUDES
*********************/
#include <misc/gfx/circ.h>
#include "lv_conf.h"
#include <stdio.h>
#include <stdbool.h>
#include "misc/gfx/text.h"
#include "lv_draw.h"
#include "misc/fs/fsint.h"
#include "misc/math/math_base.h"
#include "lv_draw_rbasic.h"
#include "lv_draw_vbasic.h"
#include "misc/gfx/text.h"
#include "misc/gfx/circ.h"
#include "misc/fs/fsint.h"
#include "misc/math/math_base.h"
#include "misc/fs/ufs/ufs.h"
#include "../lv_objx/lv_img.h"
...
...
@@ -64,14 +64,14 @@ static void point_swap(point_t * p1, point_t * p2);
#if LV_VDB_SIZE != 0
static
void
(
*
px_fp
)(
cord_t
x
,
cord_t
y
,
const
area_t
*
mask_p
,
color_t
color
,
opa_t
opa
)
=
lv_vpx
;
static
void
(
*
fill_fp
)(
const
area_t
*
cords_p
,
const
area_t
*
mask_p
,
color_t
color
,
opa_t
opa
)
=
lv_vfill
;
static
void
(
*
letter_fp
)(
const
point_t
*
pos_p
,
const
area_t
*
mask_p
,
const
font_t
*
font_p
,
uint
8
_t
letter
,
color_t
color
,
opa_t
opa
)
=
lv_vletter
;
static
void
(
*
letter_fp
)(
const
point_t
*
pos_p
,
const
area_t
*
mask_p
,
const
font_t
*
font_p
,
uint
32
_t
letter
,
color_t
color
,
opa_t
opa
)
=
lv_vletter
;
#if USE_FSINT != 0
static
void
(
*
map_fp
)(
const
area_t
*
cords_p
,
const
area_t
*
mask_p
,
const
color_t
*
map_p
,
opa_t
opa
,
bool
transp
,
bool
upscale
,
color_t
recolor
,
opa_t
recolor_opa
)
=
lv_vmap
;
#endif
#else
static
void
(
*
px_fp
)(
cord_t
x
,
cord_t
y
,
const
area_t
*
mask_p
,
color_t
color
,
opa_t
opa
)
=
lv_rpx
;
static
void
(
*
fill_fp
)(
const
area_t
*
cords_p
,
const
area_t
*
mask_p
,
color_t
color
,
opa_t
opa
)
=
lv_rfill
;
static
void
(
*
letter_fp
)(
const
point_t
*
pos_p
,
const
area_t
*
mask_p
,
const
font_t
*
font_p
,
uint
8
_t
letter
,
color_t
color
,
opa_t
opa
)
=
lv_rletter
;
static
void
(
*
letter_fp
)(
const
point_t
*
pos_p
,
const
area_t
*
mask_p
,
const
font_t
*
font_p
,
uint
32
_t
letter
,
color_t
color
,
opa_t
opa
)
=
lv_rletter
;
#if USE_LV_IMG != 0 && USE_FSINT != 0
static
void
(
*
map_fp
)(
const
area_t
*
cords_p
,
const
area_t
*
mask_p
,
const
color_t
*
map_p
,
opa_t
opa
,
bool
transp
,
bool
upscale
,
color_t
recolor
,
opa_t
recolor_opa
)
=
lv_rmap
;
#endif
...
...
@@ -280,13 +280,15 @@ void lv_draw_label(const area_t * cords_p,const area_t * mask_p, const lv_style_
}
/*Write all letter of a line*/
cmd_state
=
CMD_STATE_WAIT
;
for
(
i
=
line_start
;
i
<
line_end
;
i
++
)
{
i
=
line_start
;
uint32_t
letter
;
while
(
i
<
line_end
)
{
letter
=
txt_utf8_next
(
txt
,
&
i
);
/*Handle the re-color command*/
if
((
flag
&
TXT_FLAG_RECOLOR
)
!=
0
)
{
if
(
txt
[
i
]
==
TXT_RECOLOR_CMD
)
{
if
(
letter
==
TXT_RECOLOR_CMD
)
{
if
(
cmd_state
==
CMD_STATE_WAIT
)
{
/*Start char*/
par_start
=
i
+
1
;
par_start
=
i
+
txt_utf8_size
(
txt
[
i
])
;
cmd_state
=
CMD_STATE_PAR
;
continue
;
}
else
if
(
cmd_state
==
CMD_STATE_PAR
)
{
/*Other start char in parameter escaped cmd. char */
...
...
@@ -299,7 +301,7 @@ void lv_draw_label(const area_t * cords_p,const area_t * mask_p, const lv_style_
/*Skip the color parameter and wait the space after it*/
if
(
cmd_state
==
CMD_STATE_PAR
)
{
if
(
txt
[
i
]
==
' '
)
{
if
(
letter
==
' '
)
{
/*Get the parameter*/
if
(
i
-
par_start
==
LABEL_RECOLOR_PAR_LENGTH
)
{
char
buf
[
LABEL_RECOLOR_PAR_LENGTH
+
1
];
...
...
@@ -320,9 +322,9 @@ void lv_draw_label(const area_t * cords_p,const area_t * mask_p, const lv_style_
color_t
color
=
style
->
ccolor
;
if
(
cmd_state
==
CMD_STATE_IN
)
color
=
recolor
;
letter_fp
(
&
pos
,
mask_p
,
font
,
txt
[
i
]
,
color
,
style
->
opa
);
letter_fp
(
&
pos
,
mask_p
,
font
,
letter
,
color
,
style
->
opa
);
pos
.
x
+=
(
font_get_width
(
font
,
txt
[
i
]
)
>>
FONT_ANTIALIAS
)
+
style
->
letter_space
;
pos
.
x
+=
(
font_get_width
(
font
,
letter
)
>>
FONT_ANTIALIAS
)
+
style
->
letter_space
;
}
/*Go to next line*/
...
...
lv_draw/lv_draw_rbasic.c
View file @
c0715b4c
...
...
@@ -8,7 +8,7 @@
*********************/
#include "lv_draw_rbasic.h"
#include "lv_conf.h"
#include "
hal/disp/
disp.h"
#include "
../hal/disp/hal_
disp.h"
#include "misc/gfx/font.h"
/*********************
...
...
@@ -77,7 +77,7 @@ void lv_rfill(const area_t * cords_p, const area_t * mask_p,
if
(
union_ok
!=
false
){
disp_fill
(
masked_area
.
x1
,
masked_area
.
y1
,
masked_area
.
x2
,
masked_area
.
y2
,
color
);
//TODO
disp_fill(masked_area.x1, masked_area.y1, masked_area.x2, masked_area.y2, color);
}
}
...
...
@@ -95,6 +95,7 @@ void lv_rletter(const point_t * pos_p, const area_t * mask_p,
color_t
color
,
opa_t
opa
)
{
uint8_t
w
=
font_get_width
(
font_p
,
letter
);
const
uint8_t
*
bitmap_p
=
font_get_bitmap
(
font_p
,
letter
);
uint8_t
col
,
col_sub
,
row
;
...
...
@@ -110,15 +111,14 @@ void lv_rletter(const point_t * pos_p, const area_t * mask_p,
col_sub
=
8
;
}
}
/*Correction if the letter is short*/
bitmap_p
+=
font_p
->
width_byte
-
((
w
>>
3
)
+
1
);
/*Go to the next row*/
bitmap_p
++
;
}
#else
uint8_t
width_byte
=
w
>>
3
;
/*Width in bytes (e.g. w = 11 -> 2 bytes wide)*/
if
(
w
&
0x7
)
width_byte
++
;
const
uint8_t
*
map1_p
=
bitmap_p
;
const
uint8_t
*
map2_p
=
bitmap_p
+
font_p
->
width_byte
;
const
uint8_t
*
map2_p
=
bitmap_p
+
width_byte
;
uint8_t
px_cnt
;
uint8_t
col_byte_cnt
;
for
(
row
=
0
;
row
<
(
font_p
->
height_row
>>
1
);
row
++
)
{
...
...
@@ -152,10 +152,10 @@ void lv_rletter(const point_t * pos_p, const area_t * mask_p,
}
}
map1_p
+=
font_p
->
width_byte
;
map2_p
+=
font_p
->
width_byte
;
map1_p
+=
font_p
->
width_byte
-
col_byte_cnt
;
map2_p
+=
font_p
->
width_byte
-
col_byte_cnt
;
map1_p
+=
width_byte
;
map2_p
+=
width_byte
;
map1_p
+=
width_byte
-
col_byte_cnt
;
map2_p
+=
width_byte
-
col_byte_cnt
;
}
#endif
}
...
...
@@ -192,7 +192,7 @@ void lv_rmap(const area_t * cords_p, const area_t * mask_p,
cord_t
row
;
cord_t
mask_w
=
area_get_width
(
&
masked_a
)
-
1
;
for
(
row
=
0
;
row
<
area_get_height
(
&
masked_a
);
row
++
)
{
disp_map
(
masked_a
.
x1
,
masked_a
.
y1
+
row
,
masked_a
.
x1
+
mask_w
,
masked_a
.
y1
+
row
,
map_p
);
//TODO
disp_map(masked_a.x1, masked_a.y1 + row, masked_a.x1 + mask_w, masked_a.y1 + row, map_p);
map_p
+=
map_width
;
}
...
...
lv_draw/lv_draw_vbasic.c
View file @
c0715b4c
...
...
@@ -10,7 +10,7 @@
#include "misc/gfx/area.h"
#include "misc/gfx/font.h"
#include "misc/gfx/color.h"
#include "
hal/disp/
disp.h"
#include "
../hal/disp/hal_
disp.h"
#if LV_VDB_SIZE != 0
...
...
@@ -148,7 +148,7 @@ void lv_vfill(const area_t * cords_p, const area_t * mask_p,
* @param opa opacity of letter (0..255)
*/
void
lv_vletter
(
const
point_t
*
pos_p
,
const
area_t
*
mask_p
,
const
font_t
*
font_p
,
uint
8
_t
letter
,
const
font_t
*
font_p
,
uint
32
_t
letter
,
color_t
color
,
opa_t
opa
)
{
if
(
font_p
==
NULL
)
return
;
...
...
@@ -170,6 +170,8 @@ void lv_vletter(const point_t * pos_p, const area_t * mask_p,
cord_t
col
,
row
;
uint8_t
col_bit
;
uint8_t
col_byte_cnt
;
uint8_t
width_byte
=
letter_w
>>
3
;
/*Width in bytes (e.g. w = 11 -> 2 bytes wide)*/
if
(
letter_w
&
0x7
)
width_byte
++
;
/* Calculate the col/row start/end on the map
* If font anti alaiassing is enabled use the reduced letter sizes*/
...
...
@@ -186,13 +188,13 @@ void lv_vletter(const point_t * pos_p, const area_t * mask_p,
vdb_buf_tmp
+=
(
row_start
*
vdb_width
)
+
col_start
;
/*Move on the map too*/
map_p
+=
((
row_start
<<
FONT_ANTIALIAS
)
*
font_p
->
width_byte
)
+
((
col_start
<<
FONT_ANTIALIAS
)
>>
3
);
map_p
+=
((
row_start
<<
FONT_ANTIALIAS
)
*
width_byte
)
+
((
col_start
<<
FONT_ANTIALIAS
)
>>
3
);
#if FONT_ANTIALIAS != 0
opa_t
opa_tmp
=
opa
;
if
(
opa_tmp
!=
OPA_COVER
)
opa_tmp
=
opa_tmp
>>
2
;
/*Opacity per pixel (used when sum the pixels)*/
const
uint8_t
*
map1_p
=
map_p
;
const
uint8_t
*
map2_p
=
map_p
+
font_p
->
width_byte
;
const
uint8_t
*
map2_p
=
map_p
+
width_byte
;
uint8_t
px_cnt
;
for
(
row
=
row_start
;
row
<
row_end
;
row
++
)
{
col_byte_cnt
=
0
;
...
...
@@ -228,10 +230,10 @@ void lv_vletter(const point_t * pos_p, const area_t * mask_p,
vdb_buf_tmp
++
;
}
map1_p
+=
font_p
->
width_byte
;
map2_p
+=
font_p
->
width_byte
;
map1_p
+=
font_p
->
width_byte
-
col_byte_cnt
;
map2_p
+=
font_p
->
width_byte
-
col_byte_cnt
;
map1_p
+=
width_byte
;
map2_p
+=
width_byte
;
map1_p
+=
width_byte
-
col_byte_cnt
;
map2_p
+=
width_byte
-
col_byte_cnt
;
vdb_buf_tmp
+=
vdb_width
-
((
col_end
)
-
(
col_start
));
/*Next row in VDB*/
}
#else
...
...
@@ -255,7 +257,7 @@ void lv_vletter(const point_t * pos_p, const area_t * mask_p,
}
}
map_p
+=
font_p
->
width_byte
-
col_byte_cnt
;
map_p
+=
width_byte
-
col_byte_cnt
;
vdb_buf_tmp
+=
vdb_width
-
(
col_end
-
col_start
);
/*Next row in VDB*/
}
#endif
...
...
lv_draw/lv_draw_vbasic.h
View file @
c0715b4c
...
...
@@ -54,7 +54,7 @@ void lv_vfill(const area_t * cords_p, const area_t * mask_p,
* @param opa opacity of letter (0..255)
*/
void
lv_vletter
(
const
point_t
*
pos_p
,
const
area_t
*
mask_p
,
const
font_t
*
font_p
,
uint
8
_t
letter
,
const
font_t
*
font_p
,
uint
32
_t
letter
,
color_t
color
,
opa_t
opa
);
/**
...
...
lv_obj/lv_dispi.c
View file @
c0715b4c
...
...
@@ -12,8 +12,8 @@
#include "misc/math/math_base.h"
#include "lv_dispi.h"
#include "../lv_draw/lv_draw_rbasic.h"
#include "
hal/indev/
indev.h"
#include "hal/systick/systick.h"
#include "
../hal/indev/hal_
indev.h"
#include "
../
hal/systick/systick.h"
#include "lv_obj.h"
/*********************
...
...
@@ -41,7 +41,7 @@ static void dispi_drag_throw(lv_dispi_t * dispi_p);
static
ptask_t
*
dispi_task_p
;
static
bool
lv_dispi_reset_qry
;
static
bool
lv_dispi_reset_now
;
static
lv_dispi_t
dispi_array
[
INDEV_NUM
];
static
lv_dispi_t
dispi_array
[
2
];
/**********************
* MACROS
...
...
@@ -90,8 +90,8 @@ void lv_dispi_reset(void)
void
lv_dispi_reset_lpr
(
lv_dispi_t
*
dispi
)
{
dispi
->
long_press_sent
=
0
;
dispi
->
lpr_rep_time_stamp
=
sys
tick_get
();
dispi
->
press_time_stamp
=
sys
tick_get
();
dispi
->
lpr_rep_time_stamp
=
lv_hal_
tick_get
();
dispi
->
press_time_stamp
=
lv_hal_
tick_get
();
}
/**
...
...
@@ -145,14 +145,16 @@ void lv_dispi_wait_release(lv_dispi_t * dispi)
*/
static
void
dispi_task
(
void
*
param
)
{
cord_t
x
;
cord_t
y
;
uint8_t
i
;
for
(
i
=
0
;
i
<
INDEV_NUM
;
i
++
)
{
dispi_array
[
i
].
pressed
=
indev_get
(
i
,
&
x
,
&
y
);
dispi_proc_point
(
&
dispi_array
[
i
],
x
,
y
);
}
lv_hal_indev_data_t
data
;
lv_indev_t
*
drv
;
drv
=
lv_hal_indev_next
(
NULL
);
while
(
drv
)
{
drv
->
drv
.
get_data
(
&
data
);
drv
->
dispi
.
pressed
=
data
.
state
;
dispi_proc_point
(
&
drv
->
dispi
,
data
.
point
.
x
,
data
.
point
.
y
);
drv
=
lv_hal_indev_next
(
drv
);
}
/*If reset query occurred in this round then set a flag to
* ask the dispis to reset themself in the next round */
...
...
@@ -251,7 +253,7 @@ static void dispi_proc_press(lv_dispi_t * dispi_p)
if
(
pr_obj
!=
NULL
)
{
/* Save the time when the obj pressed.
* It is necessary to count the long press time.*/
dispi_p
->
press_time_stamp
=
sys
tick_get
();
dispi_p
->
press_time_stamp
=
lv_hal_
tick_get
();
dispi_p
->
long_press_sent
=
0
;
dispi_p
->
drag_range_out
=
0
;
dispi_p
->
drag_in_prog
=
0
;
...
...
@@ -298,22 +300,22 @@ static void dispi_proc_press(lv_dispi_t * dispi_p)
/*If there is no drag then check for long press time*/
if
(
dispi_p
->
drag_in_prog
==
0
&&
dispi_p
->
long_press_sent
==
0
)
{
/*Send a signal about the long press if enough time elapsed*/
if
(
sys
tick_elaps
(
dispi_p
->
press_time_stamp
)
>
LV_DISPI_LONG_PRESS_TIME
)
{
if
(
lv_hal_
tick_elaps
(
dispi_p
->
press_time_stamp
)
>
LV_DISPI_LONG_PRESS_TIME
)
{
pr_obj
->
signal_f
(
pr_obj
,
LV_SIGNAL_LONG_PRESS
,
dispi_p
);
/*Mark the signal sending to do not send it again*/
dispi_p
->
long_press_sent
=
1
;
/*Save the long press time stamp for the long press repeat handler*/
dispi_p
->
lpr_rep_time_stamp
=
sys
tick_get
();
dispi_p
->
lpr_rep_time_stamp
=
lv_hal_
tick_get
();
}
}
/*Send long press repeated signal*/
if
(
dispi_p
->
drag_in_prog
==
0
&&
dispi_p
->
long_press_sent
==
1
)
{
/*Send a signal about the long press repeate if enough time elapsed*/
if
(
sys
tick_elaps
(
dispi_p
->
lpr_rep_time_stamp
)
>
LV_DISPI_LONG_PRESS_REP_TIME
)
{
if
(
lv_hal_
tick_elaps
(
dispi_p
->
lpr_rep_time_stamp
)
>
LV_DISPI_LONG_PRESS_REP_TIME
)
{
pr_obj
->
signal_f
(
pr_obj
,
LV_SIGNAL_LONG_PRESS_REP
,
dispi_p
);
dispi_p
->
lpr_rep_time_stamp
=
sys
tick_get
();
dispi_p
->
lpr_rep_time_stamp
=
lv_hal_
tick_get
();
}
}
...
...
lv_obj/lv_obj.c
View file @
c0715b4c
...
...
@@ -16,7 +16,7 @@
#include "lv_group.h"
#include "../lv_app/lv_app.h"
#include "misc/gfx/anim.h"
#include "
hal/indev/
indev.h"
#include "
../hal/indev/hal_
indev.h"
#include <stdint.h>
#include <string.h>
...
...
@@ -293,24 +293,25 @@ void lv_obj_del(lv_obj_t * obj)
/*Delete the base objects*/
if
(
obj
->
ext
!=
NULL
)
dm_free
(
obj
->
ext
);
dm_free
(
obj
);
/*Free the object itself*/
/* Reset all display input (dispi) if
* the currently pressed object is deleted too*/
lv_dispi_t
*
dispi_array
=
lv_dispi_get_array
();
lv_obj_t
*
dpar
;
uint8_t
d
;
for
(
d
=
0
;
d
<
INDEV_NUM
;
d
++
)
{
dpar
=
obj
;
while
(
dpar
!=
NULL
)
{
if
(
dispi_array
[
d
].
act_obj
==
dpar
||
dispi_array
[
d
].
last_obj
==
dpar
)
{
lv_dispi_reset
();
break
;
}
else
{
dpar
=
lv_obj_get_parent
(
dpar
);
}
}
}
// TODO Update with the new HAL
// /* Reset all display input (dispi) if
// * the currently pressed object is deleted too*/
// lv_dispi_t * dispi_array = lv_dispi_get_array();
// lv_obj_t * dpar;
// uint8_t d;
// for(d = 0; d < INDEV_NUM; d++) {
// dpar = obj;
// while(dpar != NULL) {
// if(dispi_array[d].act_obj == dpar ||
// dispi_array[d].last_obj == dpar) {
// lv_dispi_reset();
// break;
// } else {
// dpar = lv_obj_get_parent(dpar);
// }
// }
// }
/*Send a signal to the parent to notify it about the child delete*/
if
(
par
!=
NULL
)
{
...
...
@@ -1525,13 +1526,14 @@ static void lv_child_refr_style(lv_obj_t * obj)
lv_obj_t
*
child
=
lv_obj_get_child
(
obj
,
NULL
);
while
(
child
!=
NULL
)
{
if
(
child
->
style_p
==
NULL
)
{
lv_child_refr_style
(
child
);
/*Check children too*/
lv_obj_refr_style
(
obj
);
/*Send a style change signal to the object*/
}
else
if
(
child
->
style_p
->
glass
)
{
/*Children with 'glass' parent might be effected if their style == NULL*/
lv_child_refr_style
(
child
);
}
child
=
lv_obj_get_child
(
obj
,
child
);
child
=
lv_obj_get_child
(
child
,
NULL
);
}
/*Send a style change signal to the object*/
lv_obj_refr_style
(
obj
);
}
/**
...
...
lv_obj/lv_obj.h
View file @
c0715b4c
...
...
@@ -14,9 +14,9 @@ extern "C" {
* INCLUDES
*********************/
#include "lv_conf.h"
#include <misc/gfx/area.h>
#include <stddef.h>
#include <stdbool.h>
#include "misc/gfx/area.h"
#include "misc/mem/dyn_mem.h"
#include "misc/mem/linked_list.h"
#include "misc/gfx/color.h"
...
...
lv_obj/lv_refr.c
View file @
c0715b4c
...
...
@@ -12,7 +12,7 @@
#include "misc/mem/fifo.h"
#include "lv_refr.h"
#include "lv_vdb.h"
#include "hal/systick/systick.h"
#include "
../
hal/systick/systick.h"
/*********************
* DEFINES
...
...
@@ -147,7 +147,7 @@ void lv_refr_set_monitor_cb(void (*cb)(uint32_t, uint32_t))
static
void
lv_refr_task
(
void
*
param
)
{
uint32_t
start
=
sys
tick_get
();
uint32_t
start
=
lv_hal_
tick_get
();
lv_refr_join_area
();
...
...
@@ -162,7 +162,7 @@ static void lv_refr_task(void * param)
* therefore be sure the inv_buf is cleared prior to it*/
if
(
refr_done
!=
false
)
{
if
(
monitor_cb
!=
NULL
)
{
monitor_cb
(
sys
tick_elaps
(
start
),
px_num
);
monitor_cb
(
lv_hal_
tick_elaps
(
start
),
px_num
);
}
}
}
...
...
lv_obj/lv_vdb.c
View file @
c0715b4c
...
...
@@ -5,7 +5,7 @@
#include "lv_conf.h"
#if LV_VDB_SIZE != 0
#include "
hal/disp/
disp.h"
#include "
../hal/disp/hal_
disp.h"
#include <stddef.h>
#include "lv_vdb.h"
...
...
@@ -105,7 +105,7 @@ void lv_vdb_flush(void)
* -----------------------------
* in1_buf |2,2|6,8| 3,7
* in2_buf |4,4|7,7| 1,2
*
--------- ==>
* --------- ==>
* in1_buf |1,1|1,3|
* in2_buf |1,1|1,3|
* */
...
...
@@ -146,7 +146,7 @@ void lv_vdb_flush(void)
/* Now the full the VDB is filtered and the result is stored in the first quarter of it
* Write out the filtered map to the display*/
disp_map
(
vdb_act
->
area
.
x1
>>
1
,
vdb_act
->
area
.
y1
>>
1
,
vdb_act
->
area
.
x2
>>
1
,
vdb_act
->
area
.
y2
>>
1
,
vdb_act
->
buf
);
hal_
disp_map
(
vdb_act
->
area
.
x1
>>
1
,
vdb_act
->
area
.
y1
>>
1
,
vdb_act
->
area
.
x2
>>
1
,
vdb_act
->
area
.
y2
>>
1
,
vdb_act
->
buf
);
#endif
}
...
...
lv_objx/lv_btnm.c
View file @
c0715b4c
...
...
@@ -353,14 +353,21 @@ void lv_btnm_set_tgl(lv_obj_t * btnm, bool en, uint16_t id)
/**
* Set the styles of the buttons of the button matrix
* @param btnm pointer to a button matrix object
* @param state style in this state (LV_BTN_STATE_PR or LV_BTN_STATE_REL)
* @param style pointer to style
* @param rel pointer to a style for releases state
* @param pr pointer to a style for pressed state
* @param trel pointer to a style for toggled releases state
* @param tpr pointer to a style for toggled pressed state
* @param ina pointer to a style for inactive state
*/
void
lv_btnm_set_styles_btn
(
lv_obj_t
*
btnm
,
lv_style_t
*
rel
,
lv_style_t
*
pr
)
void
lv_btnm_set_styles_btn
(
lv_obj_t
*
btnm
,
lv_style_t
*
rel
,
lv_style_t
*
pr
,
lv_style_t
*
trel
,
lv_style_t
*
tpr
,
lv_style_t
*
ina
)
{
lv_btnm_ext_t
*
ext
=
lv_obj_get_ext
(
btnm
);
ext
->
style_btn_rel
=
rel
;
ext
->
style_btn_pr
=
pr
;
ext
->
style_btn_trel
=
trel
;
ext
->
style_btn_tpr
=
tpr
;
ext
->
style_btn_ina
=
ina
;
lv_obj_inv
(
btnm
);
...
...
lv_objx/lv_btnm.h
View file @
c0715b4c
...
...
@@ -47,8 +47,9 @@ typedef struct
lv_btnm_callback_t
cb
;
/*A function to call when a button is releases*/
lv_style_t
*
style_btn_rel
;
/*Style of the released buttons*/
lv_style_t
*
style_btn_pr
;
/*Style of the pressed buttons*/
lv_style_t
*
style_btn_trel
;
/*Style of the released buttons*/
lv_style_t
*
style_btn_tpr
;
/*Style of the pressed buttons*/
lv_style_t
*
style_btn_trel
;
/*Style of the toggled released buttons*/
lv_style_t
*
style_btn_tpr
;
/*Style of the toggled pressed buttons*/
lv_style_t
*
style_btn_ina
;
/*Style of the inactive buttons*/
uint8_t
tgl
:
1
;
/*Enable toggling*/
}
lv_btnm_ext_t
;
...
...
@@ -100,13 +101,18 @@ void lv_btnm_set_action(lv_obj_t * btnm, lv_btnm_callback_t cb);
*/
void
lv_btnm_set_tgl
(
lv_obj_t
*
btnm
,
bool
en
,
uint16_t
id
);
/**
* Set the styles of the buttons of the button matr
o
x
* Set the styles of the buttons of the button matr
i
x
* @param btnm pointer to a button matrix object
* @param state style in this state (LV_BTN_STATE_PR or LV_BTN_STATE_REL)
* @param style pointer to style
* @param rel pointer to a style for releases state
* @param pr pointer to a style for pressed state
* @param trel pointer to a style for toggled releases state
* @param tpr pointer to a style for toggled pressed state
* @param ina pointer to a style for inactive state
*/
void
lv_btnm_set_styles_btn
(
lv_obj_t
*
btnm
,
lv_style_t
*
rel
,
lv_style_t
*
pr
);
void
lv_btnm_set_styles_btn
(
lv_obj_t
*
btnm
,
lv_style_t
*
rel
,
lv_style_t
*
pr
,
lv_style_t
*
trel
,
lv_style_t
*
tpr
,
lv_style_t
*
ina
);
/**
* Get the current map of a button matrix
...
...
lv_objx/lv_ddlist.c
View file @
c0715b4c
...
...
@@ -70,7 +70,7 @@ lv_obj_t * lv_ddlist_create(lv_obj_t * par, lv_obj_t * copy)
ext
->
opt_label
=
NULL
;
ext
->
cb
=
NULL
;
ext
->
opened
=
0
;
ext
->
auto_size
=
0
;
ext
->
fix_height
=
0
;
ext
->
sel_opt
=
0
;
ext
->
num_opt
=
0
;
ext
->
anim_time
=
LV_DDLIST_DEF_ANIM_TIME
;
...
...
@@ -86,7 +86,7 @@ lv_obj_t * lv_ddlist_create(lv_obj_t * par, lv_obj_t * copy)
if
(
copy
==
NULL
)
{
lv_obj_t
*
scrl
=
lv_page_get_scrl
(
new_ddlist
);
lv_obj_set_drag
(
scrl
,
false
);
lv_obj_set_style
(
scrl
,
lv_style_get
(
LV_STYLE_TRANSP
,
NULL
));
;
lv_obj_set_style
(
scrl
,
lv_style_get
(
LV_STYLE_TRANSP
,
NULL
));
lv_cont_set_fit
(
scrl
,
true
,
true
);
ext
->
opt_label
=
lv_label_create
(
new_ddlist
,
NULL
);
...
...
@@ -102,7 +102,7 @@ lv_obj_t * lv_ddlist_create(lv_obj_t * par, lv_obj_t * copy)
ext
->
opt_label
=
lv_label_create
(
new_ddlist
,
copy_ext
->
opt_label
);
lv_label_set_text
(
ext
->
opt_label
,
lv_label_get_text
(
copy_ext
->
opt_label
));
ext
->
sel_opt
=
copy_ext
->
sel_opt
;
ext
->
auto_size
=
copy_ext
->
auto_size
;
ext
->
fix_height
=
copy_ext
->
fix_height
;
ext
->
cb
=
copy_ext
->
cb
;
ext
->
num_opt
=
copy_ext
->
num_opt
;
...
...
@@ -131,8 +131,6 @@ bool lv_ddlist_signal(lv_obj_t * ddlist, lv_signal_t sign, void * param)
* make the object specific signal handling */
if
(
valid
!=
false
)
{
if
(
sign
==
LV_SIGNAL_STYLE_CHG
)
{
lv_ddlist_ext_t
*
ext
=
lv_obj_get_ext
(
ddlist
);
lv_obj_set_style
(
ext
->
opt_label
,
lv_obj_get_style
(
ddlist
));
lv_ddlist_refr_size
(
ddlist
,
0
);
}
else
if
(
sign
==
LV_SIGNAL_FOCUS
)
{
lv_ddlist_ext_t
*
ext
=
lv_obj_get_ext
(
ddlist
);
...
...
@@ -195,8 +193,8 @@ void lv_ddlist_set_options(lv_obj_t * ddlist, const char ** options)
lv_label_set_text
(
ext
->
opt_label
,
""
);
uint16_t
i
=
0
;
while
(
options
[
i
][
0
]
!=
'\0'
)
{
lv_label_
append_text
(
ext
->
opt_label
,
options
[
i
]);
if
(
options
[
i
+
1
][
0
]
!=
'\0'
)
lv_label_
append_text
(
ext
->
opt_label
,
"
\n
"
);
lv_label_
ins_text
(
ext
->
opt_label
,
LV_LABEL_POS_LAST
,
options
[
i
]);
if
(
options
[
i
+
1
][
0
]
!=
'\0'
)
lv_label_
ins_text
(
ext
->
opt_label
,
LV_LABEL_POS_LAST
,
"
\n
"
);
i
++
;
}
...
...
@@ -235,11 +233,13 @@ void lv_ddlist_set_selected(lv_obj_t * ddlist, uint16_t sel_opt)
{
lv_ddlist_ext_t
*
ext
=
lv_obj_get_ext
(
ddlist
);
ext
->
sel_opt
=
sel_opt
;
ext
->
sel_opt
=
sel_opt
<
ext
->
num_opt
?
sel_opt
:
ext
->
num_opt
-
1
;
/*Move the list to show the current option*/
if
(
ext
->
opened
==
0
)
{
lv_ddlist_pos_act_option
(
ddlist
);
}
else
{
lv_obj_inv
(
ddlist
);
}
}
...
...
@@ -255,15 +255,16 @@ void lv_ddlist_set_action(lv_obj_t * ddlist, lv_action_t cb)
}
/**
* Set the
auto size attribute. If enabled the height will reduced to be visible on the parent
.
* I
n this case the drop down list can be scroll
ed.
* Set the
fix height value
.
* I
f 0 then the opened ddlist will be auto. sized else the set height will be appli
ed.
* @param ddlist pointer to a drop down list
* @param
auto_size true: enable auto size, false: disable
* @param
h the height when the list is opened (0: auto size)
*/
void
lv_ddlist_set_
auto_size
(
lv_obj_t
*
ddlist
,
bool
auto_size
)
void
lv_ddlist_set_
fix_height
(
lv_obj_t
*
ddlist
,
cord_t
h
)
{
lv_ddlist_ext_t
*
ext
=
lv_obj_get_ext
(
ddlist
);
ext
->
auto_size
=
auto_size
==
false
?
0
:
1
;
ext
->
fix_height
=
h
;
lv_ddlist_refr_size
(
ddlist
,
0
);
}
/**
...
...
@@ -288,6 +289,20 @@ void lv_ddlist_set_style_select(lv_obj_t * ddlist, lv_style_t * style)
ext
->
style_sel
=
style
;
}
/**
* Open or Collapse the drop down list
* @param ddlist pointer to drop down list object
* @param state true: open; false: collapse
* @param anim true: use animations; false: not use animations
*/
void
lv_ddlist_open
(
lv_obj_t
*
ddlist
,
bool
state
,
bool
anim
)
{
lv_ddlist_ext_t
*
ext
=
lv_obj_get_ext
(
ddlist
);
ext
->
opened
=
state
?
1
:
0
;
lv_ddlist_refr_size
(
ddlist
,
anim
?
ext
->
anim_time
:
0
);
}
/*=====================
* Getter functions
*====================*/
...
...
@@ -341,14 +356,14 @@ void lv_ddlist_get_selected_str(lv_obj_t * ddlist, char * buf)
}
/**
* Get the
auto size attribut
e.
* Get the
fix height valu
e.
* @param ddlist pointer to a drop down list object
* @return t
rue: the auto_size is enabled, false: disabled
* @return t
he height if the ddlist is opened (0: auto size)
*/
bool
lv_ddlist_get_auto_size
(
lv_obj_t
*
ddlist
,
bool
auto_size
)
cord_t
lv_ddlist_get_fix_height
(
lv_obj_t
*
ddlist
)
{
lv_ddlist_ext_t
*
ext
=
lv_obj_get_ext
(
ddlist
);
return
ext
->
auto_size
==
0
?
false
:
true
;
return
ext
->
fix_height
;
}
/**
...
...
@@ -469,7 +484,7 @@ static lv_action_res_t lv_ddlist_rel_action(lv_obj_t * ddlist, lv_dispi_t * disp
}
/**
* Refresh the size of drop down list according its status (open or closed)
* Refresh the size of drop down list according
to
its status (open or closed)
* @param ddlist pointer to a drop down list object
* @param anim_time animations time for open/close [ms]
*/
...
...
@@ -478,13 +493,9 @@ static void lv_ddlist_refr_size(lv_obj_t * ddlist, uint16_t anim_time)
lv_ddlist_ext_t
*
ext
=
lv_obj_get_ext
(
ddlist
);
lv_style_t
*
style
=
lv_obj_get_style
(
ddlist
);
cord_t
new_height
;
if
(
ext
->
opened
!=
0
)
{
/*Open the list*/
new_height
=
lv_obj_get_height
(
lv_page_get_scrl
(
ddlist
))
+
2
*
style
->
vpad
;
lv_obj_t
*
parent
=
lv_obj_get_parent
(
ddlist
);
/*Reduce the height if enabled and required*/
if
(
ext
->
auto_size
!=
0
&&
new_height
+
ddlist
->
cords
.
y1
>
parent
->
cords
.
y2
)
{
new_height
=
parent
->
cords
.
y2
-
ddlist
->
cords
.
y1
;
}
if
(
ext
->
opened
)
{
/*Open the list*/
if
(
ext
->
fix_height
==
0
)
new_height
=
lv_obj_get_height
(
lv_page_get_scrl
(
ddlist
))
+
2
*
style
->
vpad
;
else
new_height
=
ext
->
fix_height
;
}
else
{
/*Close the list*/
const
font_t
*
font
=
style
->
font
;
lv_style_t
*
label_style
=
lv_obj_get_style
(
ext
->
opt_label
);
...
...
@@ -525,9 +536,11 @@ static void lv_ddlist_pos_act_option(lv_obj_t * ddlist)
cord_t
font_h
=
font_get_height
(
font
)
>>
FONT_ANTIALIAS
;
lv_style_t
*
label_style
=
lv_obj_get_style
(
ext
->
opt_label
);
lv_obj_t
*
scrl
=
lv_page_get_scrl
(
ddlist
);
lv_style_t
*
style_scrl
=
lv_obj_get_style
(
scrl
);
lv_obj_set_y
(
scrl
,
-
(
ext
->
sel_opt
*
(
font_h
+
label_style
->
line_space
)
-
label_style
->
line_space
)
-
style_scrl
->
hpad
);
cord_t
h
=
lv_obj_get_height
(
ddlist
);
cord_t
line_y1
=
ext
->
sel_opt
*
(
font_h
+
label_style
->
line_space
)
+
ext
->
opt_label
->
cords
.
y1
-
scrl
->
cords
.
y1
;
lv_obj_set_y
(
scrl
,
-
line_y1
+
(
h
-
font_h
)
/
2
);
}
...
...
lv_objx/lv_ddlist.h
View file @
c0715b4c
...
...
@@ -48,7 +48,7 @@ typedef struct
uint16_t
sel_opt
;
/*Index of the current option*/
uint16_t
anim_time
;
/*Open/Close animation time [ms]*/
uint8_t
opened
:
1
;
/*1: The list is opened*/
uint8_t
auto_size
:
1
;
/*1: Set height to show all options. 0: Set height maximum to the parent bottom
*/
cord_t
fix_height
;
/*Height if the ddlist is opened. (0: auto-size)
*/
}
lv_ddlist_ext_t
;
...
...
@@ -99,12 +99,12 @@ void lv_ddlist_set_selected(lv_obj_t * ddlist, uint16_t sel_opt);
void
lv_ddlist_set_action
(
lv_obj_t
*
ddlist
,
lv_action_t
cb
);
/**
* Set the
auto size attribute. If enabled the height will reduced to be visible on the parent
.
* I
n this case the drop down list can be scroll
ed.
* Set the
fix height value
.
* I
f 0 then the opened ddlist will be auto. sized else the set height will be appli
ed.
* @param ddlist pointer to a drop down list
* @param
auto_size true: enable auto size, false: disable
* @param
h the height when the list is opened (0: auto size)
*/
void
lv_ddlist_set_
auto_size
(
lv_obj_t
*
ddlist
,
bool
auto_size
);
void
lv_ddlist_set_
fix_height
(
lv_obj_t
*
ddlist
,
cord_t
h
);
/**
* Set the style of the rectangle on the selected option
...
...
@@ -114,6 +114,14 @@ void lv_ddlist_set_auto_size(lv_obj_t * ddlist, bool auto_size);
void
lv_ddlist_set_style_select
(
lv_obj_t
*
ddlist
,
lv_style_t
*
style
);
/**
* Open or Collapse the drop down list
* @param ddlist pointer to drop down list object
* @param state true: open; false: collapse
* @param anim true: use animations; false: not use animations
*/
void
lv_ddlist_open
(
lv_obj_t
*
ddlist
,
bool
state
,
bool
anim
);
/**
* Get the options of a drop down list
* @param ddlist pointer to drop down list object
* @return the options separated by '\n'-s (E.g. "Option1\nOption2\nOption3")
...
...
@@ -134,12 +142,13 @@ uint16_t lv_ddlist_get_selected(lv_obj_t * ddlist);
*/
void
lv_ddlist_get_selected_str
(
lv_obj_t
*
ddlist
,
char
*
buf
);
/**
* Get the
auto size attribut
e.
* Get the
fix height valu
e.
* @param ddlist pointer to a drop down list object
* @return t
rue: the auto_size is enabled, false: disabled
* @return t
he height if the ddlist is opened (0: auto size)
*/
bool
lv_ddlist_get_auto_size
(
lv_obj_t
*
ddlist
,
bool
auto_size
);
cord_t
lv_ddlist_get_fix_height
(
lv_obj_t
*
ddlist
);
/**
* Get the style of the rectangle on the selected option
...
...
lv_objx/lv_kb.c
View file @
c0715b4c
/**
* @file lv_kb.c
*
...
...
@@ -15,7 +16,6 @@
/*********************
* DEFINES
*********************/
/**********************
* TYPEDEFS
**********************/
...
...
@@ -80,7 +80,6 @@ static const char * kb_map_num[] = {
lv_obj_t
*
lv_kb_create
(
lv_obj_t
*
par
,
lv_obj_t
*
copy
)
{
/*Create the ancestor of keyboard*/
/*TODO modify it to the ancestor create function */
lv_obj_t
*
new_kb
=
lv_btnm_create
(
par
,
copy
);
dm_assert
(
new_kb
);
...
...
@@ -214,6 +213,7 @@ void lv_kb_set_close_action(lv_obj_t * kb, lv_action_t action)
ext
->
close_action
=
action
;
}
/*=====================
* Getter functions
*====================*/
...
...
@@ -362,10 +362,10 @@ static lv_action_res_t lv_app_kb_action(lv_obj_t * kb, uint16_t i)
lv_ta_set_cursor_pos
(
ext
->
ta
,
cur
+
1
);
}
}
else
if
(
strcmp
(
txt
,
"Hide"
)
==
0
)
{
//lv_app_kb_close(false
);
if
(
ext
->
close_action
)
ext
->
close_action
(
kb
,
NULL
);
return
LV_ACTION_RES_INV
;
}
else
if
(
strcmp
(
txt
,
"Ok"
)
==
0
)
{
//lv_app_kb_close(true
);
if
(
ext
->
ok_action
)
ext
->
ok_action
(
kb
,
NULL
);
return
LV_ACTION_RES_INV
;
}
else
{
lv_ta_add_text
(
ext
->
ta
,
txt
);
...
...
lv_objx/lv_label.c
View file @
c0715b4c
...
...
@@ -10,6 +10,7 @@
#if USE_LV_LABEL != 0
#include "misc/gfx/color.h"
#include "misc/gfx/text.h"
#include "misc/math/math_base.h"
#include "lv_label.h"
#include "../lv_obj/lv_obj.h"
...
...
@@ -165,22 +166,28 @@ void lv_label_set_text(lv_obj_t * label, const char * text)
lv_label_ext_t
*
ext
=
lv_obj_get_ext
(
label
);
/*If t
rying to set its own text or the t
ext is NULL then refresh */
if
(
text
==
ext
->
txt
||
text
==
NULL
)
{
/*If text is NULL then refresh */
if
(
text
==
NULL
)
{
lv_label_refr_text
(
label
);
return
;
}
/*Allocate space for the new text*/
uint32_t
len
=
strlen
(
text
)
+
1
;
if
(
ext
->
txt
!=
NULL
&&
ext
->
static_txt
==
0
)
{
dm_free
(
ext
->
txt
);
ext
->
txt
=
NULL
;
if
(
ext
->
txt
==
text
)
{
/*If set its own text then reallocate it (maybe its size changed)*/
ext
->
txt
=
dm_realloc
(
ext
->
txt
,
strlen
(
ext
->
txt
)
+
1
);
}
else
{
/*Allocate space for the new text*/
uint32_t
len
=
strlen
(
text
)
+
1
;
if
(
ext
->
txt
!=
NULL
&&
ext
->
static_txt
==
0
)
{
dm_free
(
ext
->
txt
);
ext
->
txt
=
NULL
;
}
ext
->
txt
=
dm_alloc
(
len
);
strcpy
(
ext
->
txt
,
text
);
ext
->
static_txt
=
0
;
/*Now the text is dynamically allocated*/
}
ext
->
txt
=
dm_alloc
(
len
);
strcpy
(
ext
->
txt
,
text
);
ext
->
static_txt
=
0
;
/*Now the text is dynamically allocated*/
lv_label_refr_text
(
label
);
}
/**
...
...
@@ -238,11 +245,14 @@ void lv_label_set_text_static(lv_obj_t * label, const char * text)
}
/**
*
Append
a text to the label. The label current label text can not be static.
*
Insert
a text to the label. The label current label text can not be static.
* @param label pointer to label object
* @param text pointe rto the new text
* @param pos character index to insert
* 0: before first char.
* LV_LABEL_POS_LAST: after last char.
* @param txt pointer to the text to insert
*/
void
lv_label_
append_text
(
lv_obj_t
*
label
,
const
char
*
te
xt
)
void
lv_label_
ins_text
(
lv_obj_t
*
label
,
uint32_t
pos
,
const
char
*
t
xt
)
{
lv_label_ext_t
*
ext
=
lv_obj_get_ext
(
label
);
...
...
@@ -253,11 +263,19 @@ void lv_label_append_text(lv_obj_t * label, const char * text)
/*Allocate space for the new text*/
uint32_t
old_len
=
strlen
(
ext
->
txt
);
uint32_t
app_len
=
strlen
(
te
xt
);
uint32_t
new_len
=
app
_len
+
old_len
;
uint32_t
ins_len
=
strlen
(
t
xt
);
uint32_t
new_len
=
ins
_len
+
old_len
;
ext
->
txt
=
dm_realloc
(
ext
->
txt
,
new_len
+
1
);
memcpy
(
ext
->
txt
+
old_len
,
text
,
app_len
);
ext
->
txt
[
new_len
]
=
'\0'
;
if
(
pos
==
LV_LABEL_POS_LAST
)
{
#if TXT_UTF8 == 0
pos
=
old_len
;
#else
pos
=
txt_len
(
ext
->
txt
);
#endif
}
txt_ins
(
ext
->
txt
,
pos
,
txt
);
lv_label_refr_text
(
label
);
}
...
...
@@ -271,15 +289,6 @@ void lv_label_set_long_mode(lv_obj_t * label, lv_label_long_mode_t long_mode)
{
lv_label_ext_t
*
ext
=
lv_obj_get_ext
(
label
);
/*When changing from dot mode reload the characters replaced by dots*/
if
(
ext
->
long_mode
==
LV_LABEL_LONG_DOTS
&&
ext
->
dot_end
!=
LV_LABEL_DOT_END_INV
)
{
uint8_t
i
;
for
(
i
=
0
;
i
<
LV_LABEL_DOT_NUM
+
1
;
i
++
)
{
ext
->
txt
[
ext
->
dot_end
-
LV_LABEL_DOT_NUM
+
i
]
=
ext
->
dot_tmp
[
i
];
}
}
/*Delete the old animation (if exists)*/
anim_del
(
label
,
(
anim_fp_t
)
lv_obj_set_x
);
anim_del
(
label
,
(
anim_fp_t
)
lv_obj_set_y
);
...
...
@@ -363,7 +372,7 @@ bool lv_label_get_recolor(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
)
* @param index index of the letter
[0 ... text length]. Expressed in character index, not byte index (different in UTF-8
)
* @param pos store the result here (E.g. index = 0 gives 0;0 coordinates)
*/
void
lv_label_get_letter_pos
(
lv_obj_t
*
label
,
uint16_t
index
,
point_t
*
pos
)
...
...
@@ -388,6 +397,8 @@ void lv_label_get_letter_pos(lv_obj_t * label, uint16_t index, point_t * pos)
max_w
=
CORD_MAX
;
}
index
=
txt_utf8_get_id
(
txt
,
index
);
/*Search the line of the index letter */
;
while
(
txt
[
new_line_start
]
!=
'\0'
)
{
new_line_start
+=
txt_get_next_line
(
&
txt
[
line_start
],
font
,
style
->
letter_space
,
max_w
,
flag
);
...
...
@@ -397,6 +408,7 @@ void lv_label_get_letter_pos(lv_obj_t * label, uint16_t index, point_t * pos)
line_start
=
new_line_start
;
}
/*If the last character is line break then go to the next line*/
if
((
txt
[
index
-
1
]
==
'\n'
||
txt
[
index
-
1
]
==
'\r'
)
&&
txt
[
index
]
==
'\0'
)
{
y
+=
letter_height
+
style
->
line_space
;
line_start
=
index
;
...
...
@@ -404,16 +416,20 @@ void lv_label_get_letter_pos(lv_obj_t * label, uint16_t index, point_t * pos)
/*Calculate the x coordinate*/
cord_t
x
=
0
;
uint32_t
i
;
uint32_t
i
=
line_start
;
uint32_t
cnt
=
line_start
;
/*Count the letter (in UTF-8 1 letter not 1 byte)*/
txt_cmd_state_t
cmd_state
=
TXT_CMD_STATE_WAIT
;
for
(
i
=
line_start
;
i
<
index
;
i
++
)
{
uint32_t
letter
;
while
(
cnt
<
index
)
{
cnt
+=
txt_utf8_size
(
txt
[
i
]);
letter
=
txt_utf8_next
(
txt
,
&
i
);
/*Handle the recolor command*/
if
((
flag
&
TXT_FLAG_RECOLOR
)
!=
0
)
{
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
,
txt
[
i
]
)
>>
FONT_ANTIALIAS
)
+
style
->
letter_space
;
x
+=
(
font_get_width
(
font
,
letter
)
>>
FONT_ANTIALIAS
)
+
style
->
letter_space
;
}
if
(
style
->
txt_align
==
LV_TXT_ALIGN_MID
)
{
...
...
@@ -474,8 +490,10 @@ uint16_t lv_label_get_letter_on(lv_obj_t * label, point_t * pos)
}
txt_cmd_state_t
cmd_state
=
TXT_CMD_STATE_WAIT
;
uint16_t
i
;
for
(
i
=
line_start
;
i
<
new_line_start
-
1
;
i
++
)
{
uint32_t
i
=
line_start
;
uint32_t
letter
;
while
(
i
<
new_line_start
-
1
)
{
letter
=
txt_utf8_next
(
txt
,
&
i
);
/*Handle the recolor command*/
if
((
flag
&
TXT_FLAG_RECOLOR
)
!=
0
)
{
if
(
txt_is_cmd
(
&
cmd_state
,
txt
[
i
])
!=
false
)
{
...
...
@@ -483,8 +501,8 @@ uint16_t lv_label_get_letter_on(lv_obj_t * label, point_t * pos)
}
}
x
+=
(
font_get_width
(
font
,
txt
[
i
]
)
>>
FONT_ANTIALIAS
)
+
style
->
letter_space
;
if
(
pos
->
x
<
x
)
break
;
x
+=
(
font_get_width
(
font
,
letter
)
>>
FONT_ANTIALIAS
)
+
style
->
letter_space
;
if
(
pos
->
x
<
x
)
break
;
/*Get the position*/
}
return
i
;
...
...
@@ -660,40 +678,7 @@ static void lv_label_refr_text(lv_obj_t * label)
else
if
(
ext
->
long_mode
==
LV_LABEL_LONG_BREAK
)
{
lv_obj_set_height
(
label
,
size
.
y
);
}
/*Replace the last 'LV_LABEL_DOT_NUM' characters with dots
* and save these characters*/
else
if
(
ext
->
long_mode
==
LV_LABEL_LONG_DOTS
)
{
point_t
point
;
point
.
x
=
lv_obj_get_width
(
label
)
-
1
;
point
.
y
=
lv_obj_get_height
(
label
)
-
1
;
uint16_t
index
=
lv_label_get_letter_on
(
label
,
&
point
);
if
(
index
<
strlen
(
ext
->
txt
)
-
1
)
{
/* Change the last 'LV_LABEL_DOT_NUM' to dots
* (if there are at least 'LV_LABEL_DOT_NUM' characters*/
if
(
index
>
LV_LABEL_DOT_NUM
)
{
uint8_t
i
;
for
(
i
=
0
;
i
<
LV_LABEL_DOT_NUM
;
i
++
)
{
ext
->
dot_tmp
[
i
]
=
ext
->
txt
[
index
-
LV_LABEL_DOT_NUM
+
i
];
ext
->
txt
[
index
-
LV_LABEL_DOT_NUM
+
i
]
=
'.'
;
}
/*The last character is '\0'. Save this character from the text too.*/
ext
->
dot_tmp
[
i
]
=
ext
->
txt
[
index
];
ext
->
txt
[
index
]
=
'\0'
;
}
/*Else with short text change all characters to dots*/
else
{
uint8_t
i
;
for
(
i
=
0
;
i
<
LV_LABEL_DOT_NUM
;
i
++
)
{
ext
->
txt
[
i
]
=
'.'
;
}
ext
->
txt
[
i
]
=
'\0'
;
}
/*Save the dot end index*/
ext
->
dot_end
=
index
;
}
}
lv_obj_inv
(
label
);
}
...
...
lv_objx/lv_label.h
View file @
c0715b4c
...
...
@@ -19,12 +19,13 @@ extern "C" {
#include "../lv_obj/lv_obj.h"
#include "misc/gfx/font.h"
#include "misc/gfx/text.h"
#include "misc/gfx/fonts/symbol_def.h"
/*********************
* DEFINES
*********************/
#define LV_LABEL_DOT_NUM 3
#define LV_LABEL_POS_LAST 0xFFFF
/**********************
* TYPEDEFS
**********************/
...
...
@@ -34,7 +35,6 @@ typedef enum
{
LV_LABEL_LONG_EXPAND
,
/*Expand the object size to the text size*/
LV_LABEL_LONG_BREAK
,
/*Keep the object width, break the too long lines and expand the object height*/
LV_LABEL_LONG_DOTS
,
/*Keep the object size, break the text and write dots in the last line*/
LV_LABEL_LONG_SCROLL
,
/*Expand the object size and scroll the text on the parent (move the label object)*/
LV_LABEL_LONG_ROLL
,
/*Keep the size and roll the text infinitely*/
}
lv_label_long_mode_t
;
...
...
@@ -46,7 +46,11 @@ typedef struct
/*New data for this type */
char
*
txt
;
/*Text of the label*/
lv_label_long_mode_t
long_mode
;
/*Determinate what to do with the long texts*/
#if TXT_UTF8 == 0
char
dot_tmp
[
LV_LABEL_DOT_NUM
+
1
];
/*Store the character which are replaced by dots (Handled by the library)*/
#else
uint32_t
dot_tmp
[
LV_LABEL_DOT_NUM
+
1
];
/*Store the character which are replaced by dots (Handled by the library)*/
#endif
uint16_t
dot_end
;
/*The text end position in dot mode (Handled by the library)*/
point_t
offset
;
/*Text draw position offset*/
uint8_t
static_txt
:
1
;
/*Flag to indicate the text is static*/
...
...
@@ -100,11 +104,16 @@ void lv_label_set_text_array(lv_obj_t * label, const char * array, uint16_t size
void
lv_label_set_text_static
(
lv_obj_t
*
label
,
const
char
*
text
);
/**
*
Append
a text to the label. The label current label text can not be static.
*
Insert
a text to the label. The label current label text can not be static.
* @param label pointer to label object
* @param text pointe rto the new text
*/
void
lv_label_append_text
(
lv_obj_t
*
label
,
const
char
*
text
);
* @param pos character index to insert
* 0: before first char.
* LV_LABEL_POS_LAST: after last char.
* < 0: count from the end
* -1: before the last char.
* @param txt pointer to the text to insert
*/
void
lv_label_ins_text
(
lv_obj_t
*
label
,
uint32_t
pos
,
const
char
*
txt
);
/**
* Set the behavior of the label with longer text then the object size
...
...
lv_objx/lv_list.c
View file @
c0715b4c
...
...
@@ -349,25 +349,6 @@ void lv_list_set_sb_out(lv_obj_t * list, bool out)
ext
->
sb_out
=
out
==
false
?
0
:
1
;
}
/**
* Enable or disable the text rolling on a list element
* @param liste pinter to list element
* @param en true: enable text scrolling, false: disable text scrolling
*/
void
lv_list_set_element_text_roll
(
lv_obj_t
*
liste
,
bool
en
)
{
lv_obj_t
*
label
=
lv_list_get_element_label
(
liste
);
if
(
label
==
NULL
)
return
;
if
(
en
==
false
)
{
lv_label_set_long_mode
(
label
,
LV_LABEL_LONG_DOTS
);
}
else
{
lv_obj_set_width
(
label
,
liste
->
cords
.
x2
-
label
->
cords
.
x1
);
lv_label_set_long_mode
(
label
,
LV_LABEL_LONG_ROLL
);
}
}
/**
* Set styles of the list elements of a list in each state
...
...
lv_objx/lv_list.h
View file @
c0715b4c
...
...
@@ -104,13 +104,6 @@ void lv_list_down(lv_obj_t * list);
void
lv_list_set_sb_out
(
lv_obj_t
*
list
,
bool
out
);
/**
* Enable or disable the text rolling on a list element
* @param liste pinter to list element
* @param en true: enable text scrolling, false: disable text scrolling
*/
void
lv_list_set_element_text_roll
(
lv_obj_t
*
liste
,
bool
en
);
/**
* Set styles of the list elements of a list in each state
* @param list pointer to list object
* @param rel pointer to a style for releases state
...
...
lv_objx/lv_objx_templ.c
View file @
c0715b4c
...
...
@@ -3,9 +3,10 @@
*
*/
/*Search an replace: template -> object normal name with lower case (e.g. button, label etc.)
* templ -> object short name with lower case(e.g. btn, label etc)
* TEMPL -> object short name with upper case (e.g. BTN, LABEL etc.)
/* TODO Remove these instructions
* Search an replace: template -> object normal name with lower case (e.g. button, label etc.)
* templ -> object short name with lower case(e.g. btn, label etc)
* TEMPL -> object short name with upper case (e.g. BTN, LABEL etc.)
*
*/
...
...
lv_objx/lv_objx_templ.h
View file @
c0715b4c
...
...
@@ -4,9 +4,10 @@
*/
/*Search an replace: template -> object normal name with lower case (e.g. button, label etc.)
* templ -> object short name with lower case(e.g. btn, label etc)
* TEMPL -> object short name with upper case (e.g. BTN, LABEL etc.)
/* TODO Remove these instructions
* Search an replace: template -> object normal name with lower case (e.g. button, label etc.)
* templ -> object short name with lower case(e.g. btn, label etc)
* TEMPL -> object short name with upper case (e.g. BTN, LABEL etc.)
*
*/
...
...
lv_objx/lv_ta.c
View file @
c0715b4c
...
...
@@ -14,6 +14,7 @@
#include "../lv_obj/lv_group.h"
#include "../lv_draw/lv_draw.h"
#include "misc/gfx/anim.h"
#include "misc/gfx/text.h"
#include "misc/math/math_base.h"
/*********************
...
...
@@ -244,7 +245,7 @@ bool lv_ta_scrl_signal(lv_obj_t * scrl, lv_signal_t sign, void * param)
* @param ta pointer to a text area object
* @param c a character
*/
void
lv_ta_add_char
(
lv_obj_t
*
ta
,
char
c
)
void
lv_ta_add_char
(
lv_obj_t
*
ta
,
uint32_t
c
)
{
lv_ta_ext_t
*
ext
=
lv_obj_get_ext
(
ta
);
...
...
@@ -305,7 +306,6 @@ void lv_ta_add_char(lv_obj_t * ta, char c)
void
lv_ta_add_text
(
lv_obj_t
*
ta
,
const
char
*
txt
)
{
lv_ta_ext_t
*
ext
=
lv_obj_get_ext
(
ta
);
const
char
*
label_txt
=
lv_label_get_text
(
ext
->
label
);
uint16_t
label_len
=
strlen
(
label_txt
);
uint16_t
txt_len
=
strlen
(
txt
);
...
...
@@ -325,7 +325,6 @@ void lv_ta_add_text(lv_obj_t * ta, const char * txt)
lv_label_set_text
(
ext
->
label
,
buf
);
if
(
ext
->
pwd_mode
!=
0
)
{
ext
->
pwd_tmp
=
dm_realloc
(
ext
->
pwd_tmp
,
strlen
(
ext
->
pwd_tmp
)
+
txt_len
+
1
);
dm_assert
(
ext
->
pwd_tmp
);
...
...
@@ -816,7 +815,7 @@ static bool lv_ta_design(lv_obj_t * ta, const area_t * masp, lv_design_mode_t mo
/**
* An extended scrollable design of the page. Calls the normal design function and draws a cursor.
* @param scrl pointer to the scrollabl
a
part of the Text area
* @param scrl pointer to the scrollabl
e
part of the Text area
* @param mask the object will be drawn only in this area
* @param mode LV_DESIGN_COVER_CHK: only check if the object fully covers the 'mask_p' area
* (return 'true' if yes)
...
...
@@ -865,30 +864,40 @@ static bool lv_ta_scrling_design(lv_obj_t * scrl, const area_t * mask, lv_design
uint16_t
cur_pos
=
lv_ta_get_cursor_pos
(
ta
);
const
char
*
txt
=
lv_label_get_text
(
ta_ext
->
label
);
cord_t
letter_h
=
font_get_height
(
label_style
->
font
)
>>
FONT_ANTIALIAS
;
uint32_t
byte_pos
;
#if TXT_UTF8 != 0
byte_pos
=
txt_utf8_get_id
(
txt
,
cur_pos
);
#else
byte_pos
=
cur_pos
;
#endif
/*Set letter_w (set not 0 on non printable but valid chars)*/
uint32_t
letter
=
txt_utf8_next
(
&
txt
[
byte_pos
],
NULL
);
cord_t
letter_h
=
font_get_height
(
label_style
->
font
)
>>
FONT_ANTIALIAS
;
/*Set letter_w (set not 0 on non printable but valid chars)*/
cord_t
letter_w
;
if
(
txt
[
cur_pos
]
==
'\0'
||
txt
[
cur_pos
]
==
'\n'
||
txt
[
cur_pos
]
==
'\r'
)
{
if
(
letter
==
'\0'
||
letter
==
'\n'
||
letter
==
'\r'
)
{
letter_w
=
font_get_width
(
label_style
->
font
,
' '
);
}
else
{
letter_w
=
font_get_width
(
label_style
->
font
,
txt
[
cur_pos
]
);
letter_w
=
font_get_width
(
label_style
->
font
,
letter
);
}
point_t
letter_pos
;
lv_label_get_letter_pos
(
ta_ext
->
label
,
cur_pos
,
&
letter_pos
);
/*If the cursor is out of the text (most right)
draw it to the next line*/
if
(
letter_pos
.
x
+
ta_ext
->
label
->
cords
.
x1
+
letter_w
>
ta_ext
->
label
->
cords
.
x2
&&
ta_ext
->
one_line
==
0
)
{
/*If the cursor is out of the text (most right) draw it to the next line*/
if
(
letter_pos
.
x
+
ta_ext
->
label
->
cords
.
x1
+
letter_w
>
ta_ext
->
label
->
cords
.
x2
&&
ta_ext
->
one_line
==
0
)
{
letter_pos
.
x
=
0
;
letter_pos
.
y
+=
letter_h
+
label_style
->
line_space
;
if
(
txt
[
cur_pos
]
!=
'\0'
)
cur_pos
++
;
if
(
letter
!=
'\0'
){
byte_pos
+=
txt_utf8_size
(
txt
[
byte_pos
]);
letter
=
txt_utf8_next
(
&
txt
[
byte_pos
],
NULL
);
}
if
(
txt
[
cur_pos
]
==
'\0'
||
txt
[
cur_pos
]
==
'\n'
||
txt
[
cur_pos
]
==
'\r'
)
{
if
(
letter
==
'\0'
||
letter
==
'\n'
||
letter
==
'\r'
)
{
letter_w
=
font_get_width
(
label_style
->
font
,
' '
);
}
else
{
letter_w
=
font_get_width
(
label_style
->
font
,
txt
[
cur_pos
]
);
letter_w
=
font_get_width
(
label_style
->
font
,
letter
);
}
}
...
...
lv_objx/lv_ta.h
View file @
c0715b4c
...
...
@@ -97,7 +97,7 @@ bool lv_ta_scrl_signal(lv_obj_t * scrl, lv_signal_t sign, void * param);
* @param ta pointer to a text area object
* @param c a character
*/
void
lv_ta_add_char
(
lv_obj_t
*
ta
,
char
c
);
void
lv_ta_add_char
(
lv_obj_t
*
ta
,
uint32_t
c
);
/**
* Insert a text to the current cursor position
...
...
lv_objx/lv_tabview.c
View file @
c0715b4c
...
...
@@ -151,10 +151,11 @@ bool lv_tabview_signal(lv_obj_t * tabview, lv_signal_t sign, void * param)
/* The object can be deleted so check its validity and then
* make the object specific signal handling */
if
(
valid
!=
false
)
{
lv_tabview_ext_t
*
ext
=
lv_obj_get_ext
(
tabview
);
if
(
sign
==
LV_SIGNAL_CLEANUP
)
{
/*Nothing to cleanup. (No dynamically allocated memory in 'ext')*/
dm_free
(
ext
->
tab_name_ptr
);
ext
->
tab_name_ptr
=
NULL
;
}
else
if
(
sign
==
LV_SIGNAL_CORD_CHG
)
{
lv_tabview_ext_t
*
ext
=
lv_obj_get_ext
(
tabview
);
if
(
ext
->
content
!=
NULL
&&
(
lv_obj_get_width
(
tabview
)
!=
area_get_width
(
param
)
||
lv_obj_get_height
(
tabview
)
!=
area_get_height
(
param
)))
...
...
lvgl.h
View file @
c0715b4c
...
...
@@ -33,6 +33,7 @@ extern "C" {
#include "lv_objx/lv_btnm.h"
#include "lv_objx/lv_kb.h"
#include "lv_objx/lv_ddlist.h"
#include "lv_objx/lv_roller.h"
#include "lv_objx/lv_ta.h"
#include "lv_objx/lv_win.h"
#include "lv_objx/lv_tabview.h"
...
...
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