mirror of
https://github.com/lvgl/lvgl.git
synced 2026-06-01 00:51:49 +08:00
Merge branch 'dev-6.1' into feat-cpicker
This commit is contained in:
@@ -93,7 +93,7 @@ You can use the [Simulators](https://docs.littlevgl.com/en/html/get-started/pc-s
|
|||||||
|
|
||||||
1. [Download](https://littlevgl.com/download) or [Clone](https://github.com/littlevgl/lvgl) the library
|
1. [Download](https://littlevgl.com/download) or [Clone](https://github.com/littlevgl/lvgl) the library
|
||||||
2. Copy the `lvgl` folder into your project
|
2. Copy the `lvgl` folder into your project
|
||||||
3. Copy `lvgl/lv_conf_templ.h` as `lv_conf.h` next to the `lvgl` folder and set at least `LV_HOR_RES_MAX`, `LV_VER_RES_MAX` and `LV_COLOR_DEPTH`.
|
3. Copy `lvgl/lv_conf_template.h` as `lv_conf.h` next to the `lvgl` folder and set at least `LV_HOR_RES_MAX`, `LV_VER_RES_MAX` and `LV_COLOR_DEPTH`.
|
||||||
4. Include `lvgl/lvgl.h` where you need to use LittlevGL related functions.
|
4. Include `lvgl/lvgl.h` where you need to use LittlevGL related functions.
|
||||||
5. Call `lv_tick_inc(x)` every `x` milliseconds **in a Timer or Task** (`x` should be between 1 and 10). It is required for the internal timing of LittlevGL.
|
5. Call `lv_tick_inc(x)` every `x` milliseconds **in a Timer or Task** (`x` should be between 1 and 10). It is required for the internal timing of LittlevGL.
|
||||||
6. Call `lv_init()`
|
6. Call `lv_init()`
|
||||||
|
|||||||
@@ -196,6 +196,12 @@ typedef void * lv_img_decoder_user_data_t;
|
|||||||
* font's bitmaps */
|
* font's bitmaps */
|
||||||
#define LV_ATTRIBUTE_LARGE_CONST
|
#define LV_ATTRIBUTE_LARGE_CONST
|
||||||
|
|
||||||
|
/* Export integer constant to binding.
|
||||||
|
* This macro is used with constants in the form of LV_<CONST> that
|
||||||
|
* should also appear on lvgl binding API such as Micropython
|
||||||
|
*/
|
||||||
|
#define LV_EXPORT_CONST_INT(int_value)
|
||||||
|
|
||||||
/*===================
|
/*===================
|
||||||
* HAL settings
|
* HAL settings
|
||||||
*==================*/
|
*==================*/
|
||||||
|
|||||||
Regular → Executable
+5
-1
@@ -1,3 +1,5 @@
|
|||||||
|
#!/usr/bin/env python3.6
|
||||||
|
|
||||||
'''
|
'''
|
||||||
Generates a checker file for lv_conf.h from lv_conf_templ.h define all the not defined values
|
Generates a checker file for lv_conf.h from lv_conf_templ.h define all the not defined values
|
||||||
'''
|
'''
|
||||||
@@ -34,9 +36,11 @@ for i in fin.read().splitlines():
|
|||||||
if '/*--END OF LV_CONF_H--*/' in i: break
|
if '/*--END OF LV_CONF_H--*/' in i: break
|
||||||
|
|
||||||
r = re.search(r'^ *# *define ([^\s]+).*$', i)
|
r = re.search(r'^ *# *define ([^\s]+).*$', i)
|
||||||
|
|
||||||
if r:
|
if r:
|
||||||
|
line = re.sub('\(.*?\)', '', r[1], 1) #remove parentheses from macros
|
||||||
fout.write(
|
fout.write(
|
||||||
f'#ifndef {r[1]}\n'
|
f'#ifndef {line}\n'
|
||||||
f'{i}\n'
|
f'{i}\n'
|
||||||
'#endif\n'
|
'#endif\n'
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -266,6 +266,14 @@
|
|||||||
#define LV_ATTRIBUTE_LARGE_CONST
|
#define LV_ATTRIBUTE_LARGE_CONST
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* Export integer constant to binding.
|
||||||
|
* This macro is used with constants in the form of LV_<CONST> that
|
||||||
|
* should also appear on lvgl binding API such as Micropython
|
||||||
|
*/
|
||||||
|
#ifndef LV_EXPORT_CONST_INT
|
||||||
|
#define LV_EXPORT_CONST_INT(int_value)
|
||||||
|
#endif
|
||||||
|
|
||||||
/*===================
|
/*===================
|
||||||
* HAL settings
|
* HAL settings
|
||||||
*==================*/
|
*==================*/
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ CSRCS += lv_disp.c
|
|||||||
CSRCS += lv_obj.c
|
CSRCS += lv_obj.c
|
||||||
CSRCS += lv_refr.c
|
CSRCS += lv_refr.c
|
||||||
CSRCS += lv_style.c
|
CSRCS += lv_style.c
|
||||||
|
CSRCS += lv_debug.c
|
||||||
|
|
||||||
DEPPATH += --dep-path $(LVGL_DIR)/lvgl/src/lv_core
|
DEPPATH += --dep-path $(LVGL_DIR)/lvgl/src/lv_core
|
||||||
VPATH += :$(LVGL_DIR)/lvgl/src/lv_core
|
VPATH += :$(LVGL_DIR)/lvgl/src/lv_core
|
||||||
|
|||||||
+2
-16
@@ -22,6 +22,7 @@
|
|||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include "../lv_misc/lv_gc.h"
|
#include "../lv_misc/lv_gc.h"
|
||||||
|
#include "../lv_misc/lv_math.h"
|
||||||
|
|
||||||
#if defined(LV_GC_INCLUDE)
|
#if defined(LV_GC_INCLUDE)
|
||||||
#include LV_GC_INCLUDE
|
#include LV_GC_INCLUDE
|
||||||
@@ -1115,21 +1116,6 @@ void lv_obj_set_auto_realign(lv_obj_t * obj, bool en)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
#if LV_USE_EXT_CLICK_AREA == LV_EXT_CLICK_AREA_TINY
|
|
||||||
/**
|
|
||||||
* Set the size of an extended clickable area
|
|
||||||
* @param obj pointer to an object
|
|
||||||
* @param w extended width to both sides
|
|
||||||
* @param h extended height to both sides
|
|
||||||
*/
|
|
||||||
void lv_obj_set_ext_click_area(lv_obj_t * obj, uint8_t w, uint8_t h)
|
|
||||||
{
|
|
||||||
LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
|
|
||||||
|
|
||||||
obj->ext_click_pad_hor = w;
|
|
||||||
obj->ext_click_pad_ver = h;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set the size of an extended clickable area
|
* Set the size of an extended clickable area
|
||||||
@@ -1913,7 +1899,7 @@ lv_coord_t lv_obj_get_ext_click_pad_bottom(const lv_obj_t * obj)
|
|||||||
LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
|
LV_ASSERT_OBJ(obj, LV_OBJX_NAME);
|
||||||
|
|
||||||
#if LV_USE_EXT_CLICK_AREA == LV_EXT_CLICK_AREA_TINY
|
#if LV_USE_EXT_CLICK_AREA == LV_EXT_CLICK_AREA_TINY
|
||||||
return obj->ext_click_pad_ver
|
return obj->ext_click_pad_ver;
|
||||||
#elif LV_USE_EXT_CLICK_AREA == LV_EXT_CLICK_AREA_FULL
|
#elif LV_USE_EXT_CLICK_AREA == LV_EXT_CLICK_AREA_FULL
|
||||||
return obj->ext_click_pad.y2;
|
return obj->ext_click_pad.y2;
|
||||||
#else
|
#else
|
||||||
|
|||||||
@@ -25,6 +25,8 @@ extern "C" {
|
|||||||
#define LV_RADIUS_CIRCLE (LV_COORD_MAX) /**< A very big radius to always draw as circle*/
|
#define LV_RADIUS_CIRCLE (LV_COORD_MAX) /**< A very big radius to always draw as circle*/
|
||||||
#define LV_STYLE_DEGUG_SENTINEL_VALUE 0x12345678
|
#define LV_STYLE_DEGUG_SENTINEL_VALUE 0x12345678
|
||||||
|
|
||||||
|
LV_EXPORT_CONST_INT(LV_RADIUS_CIRCLE);
|
||||||
|
|
||||||
/**********************
|
/**********************
|
||||||
* TYPEDEFS
|
* TYPEDEFS
|
||||||
**********************/
|
**********************/
|
||||||
|
|||||||
@@ -8,6 +8,8 @@
|
|||||||
*********************/
|
*********************/
|
||||||
#include "../lv_core/lv_debug.h"
|
#include "../lv_core/lv_debug.h"
|
||||||
#include "lv_img_cache.h"
|
#include "lv_img_cache.h"
|
||||||
|
#include "lv_img_decoder.h"
|
||||||
|
#include "lv_draw_img.h"
|
||||||
#include "../lv_hal/lv_hal_tick.h"
|
#include "../lv_hal/lv_hal_tick.h"
|
||||||
#include "../lv_misc/lv_gc.h"
|
#include "../lv_misc/lv_gc.h"
|
||||||
|
|
||||||
@@ -80,7 +82,15 @@ lv_img_cache_entry_t * lv_img_cache_open(const void * src, const lv_style_t * st
|
|||||||
/*Is the image cached?*/
|
/*Is the image cached?*/
|
||||||
lv_img_cache_entry_t * cached_src = NULL;
|
lv_img_cache_entry_t * cached_src = NULL;
|
||||||
for(i = 0; i < entry_cnt; i++) {
|
for(i = 0; i < entry_cnt; i++) {
|
||||||
if(cache[i].dec_dsc.src == src) {
|
bool match = false;
|
||||||
|
lv_img_src_t src_type = lv_img_src_get_type(cache[i].dec_dsc.src);
|
||||||
|
if(src_type == LV_IMG_SRC_VARIABLE) {
|
||||||
|
if(cache[i].dec_dsc.src == src) match = true;
|
||||||
|
} else if(src_type == LV_IMG_SRC_FILE) {
|
||||||
|
if(strcmp(cache[i].dec_dsc.src, src) == 0) match = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(match) {
|
||||||
/* If opened increment its life.
|
/* If opened increment its life.
|
||||||
* Image difficult to open should live longer to keep avoid frequent their recaching.
|
* Image difficult to open should live longer to keep avoid frequent their recaching.
|
||||||
* Therefore increase `life` with `time_to_open`*/
|
* Therefore increase `life` with `time_to_open`*/
|
||||||
|
|||||||
@@ -120,10 +120,17 @@ lv_res_t lv_img_decoder_get_info(const char * src, lv_img_header_t * header)
|
|||||||
lv_res_t lv_img_decoder_open(lv_img_decoder_dsc_t * dsc, const void * src, const lv_style_t * style)
|
lv_res_t lv_img_decoder_open(lv_img_decoder_dsc_t * dsc, const void * src, const lv_style_t * style)
|
||||||
{
|
{
|
||||||
dsc->style = style;
|
dsc->style = style;
|
||||||
dsc->src = src;
|
|
||||||
dsc->src_type = lv_img_src_get_type(src);
|
dsc->src_type = lv_img_src_get_type(src);
|
||||||
dsc->user_data = NULL;
|
dsc->user_data = NULL;
|
||||||
|
|
||||||
|
if(dsc->src_type == LV_IMG_SRC_FILE) {
|
||||||
|
uint16_t fnlen = strlen(src);
|
||||||
|
dsc->src = lv_mem_alloc(fnlen + 1);
|
||||||
|
strcpy((char *)dsc->src, src);
|
||||||
|
} else {
|
||||||
|
dsc->src = src;
|
||||||
|
}
|
||||||
|
|
||||||
lv_res_t res = LV_RES_INV;
|
lv_res_t res = LV_RES_INV;
|
||||||
|
|
||||||
lv_img_decoder_t * d;
|
lv_img_decoder_t * d;
|
||||||
@@ -177,6 +184,11 @@ void lv_img_decoder_close(lv_img_decoder_dsc_t * dsc)
|
|||||||
{
|
{
|
||||||
if(dsc->decoder) {
|
if(dsc->decoder) {
|
||||||
if(dsc->decoder->close_cb) dsc->decoder->close_cb(dsc->decoder, dsc);
|
if(dsc->decoder->close_cb) dsc->decoder->close_cb(dsc->decoder, dsc);
|
||||||
|
|
||||||
|
if(dsc->src_type == LV_IMG_SRC_FILE) {
|
||||||
|
lv_mem_free(dsc->src);
|
||||||
|
dsc->src = NULL;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ typedef struct
|
|||||||
uint8_t box_w; /**< Width of the glyph's bounding box*/
|
uint8_t box_w; /**< Width of the glyph's bounding box*/
|
||||||
uint8_t box_h; /**< Height of the glyph's bounding box*/
|
uint8_t box_h; /**< Height of the glyph's bounding box*/
|
||||||
int8_t ofs_x; /**< x offset of the bounding box*/
|
int8_t ofs_x; /**< x offset of the bounding box*/
|
||||||
uint8_t ofs_y; /**< y offset of the bounding box. Measured from the top of the line*/
|
int8_t ofs_y; /**< y offset of the bounding box. Measured from the top of the line*/
|
||||||
}lv_font_fmt_txt_glyph_dsc_t;
|
}lv_font_fmt_txt_glyph_dsc_t;
|
||||||
|
|
||||||
|
|
||||||
@@ -141,7 +141,7 @@ typedef struct {
|
|||||||
3. value = class_pair_values[(left_class-1)*right_class_cnt + (righ_class-1)]
|
3. value = class_pair_values[(left_class-1)*right_class_cnt + (righ_class-1)]
|
||||||
*/
|
*/
|
||||||
|
|
||||||
const uint8_t * class_pair_values; /*left_class_num * right_class_num value*/
|
const int8_t * class_pair_values; /*left_class_num * right_class_num value*/
|
||||||
const uint8_t * left_class_mapping; /*Map the glyph_ids to classes: index -> glyph_id -> class_id*/
|
const uint8_t * left_class_mapping; /*Map the glyph_ids to classes: index -> glyph_id -> class_id*/
|
||||||
const uint8_t * right_class_mapping; /*Map the glyph_ids to classes: index -> glyph_id -> class_id*/
|
const uint8_t * right_class_mapping; /*Map the glyph_ids to classes: index -> glyph_id -> class_id*/
|
||||||
uint8_t left_class_cnt;
|
uint8_t left_class_cnt;
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
#include "lvgl/lvgl.h"
|
#include "../../lvgl.h"
|
||||||
|
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
* Size: 12 px
|
* Size: 12 px
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
#include "lvgl/lvgl.h"
|
#include "../../lvgl.h"
|
||||||
|
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
* Size: 16 px
|
* Size: 16 px
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
#include "lvgl/lvgl.h"
|
#include "../../lvgl.h"
|
||||||
|
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
* Size: 22 px
|
* Size: 22 px
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
#include "lvgl/lvgl.h"
|
#include "../../lvgl.h"
|
||||||
|
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
* Size: 28 px
|
* Size: 28 px
|
||||||
|
|||||||
@@ -311,7 +311,7 @@ static LV_ATTRIBUTE_LARGE_CONST const uint8_t gylph_bitmap[] = {
|
|||||||
* GLYPH DESCRIPTION
|
* GLYPH DESCRIPTION
|
||||||
*--------------------*/
|
*--------------------*/
|
||||||
|
|
||||||
static lv_font_fmt_txt_glyph_dsc_t glyph_dsc[] = {
|
static const lv_font_fmt_txt_glyph_dsc_t glyph_dsc[] = {
|
||||||
{.bitmap_index = 0, .adv_w = 0, .box_h = 0, .box_w = 0, .ofs_x = 0, .ofs_y = 0} /* id = 0 reserved */,
|
{.bitmap_index = 0, .adv_w = 0, .box_h = 0, .box_w = 0, .ofs_x = 0, .ofs_y = 0} /* id = 0 reserved */,
|
||||||
{.bitmap_index = 0, .adv_w = 128, .box_h = 0, .box_w = 0, .ofs_x = 0, .ofs_y = 0},
|
{.bitmap_index = 0, .adv_w = 128, .box_h = 0, .box_w = 0, .ofs_x = 0, .ofs_y = 0},
|
||||||
{.bitmap_index = 0, .adv_w = 128, .box_h = 7, .box_w = 1, .ofs_x = 3, .ofs_y = -1},
|
{.bitmap_index = 0, .adv_w = 128, .box_h = 7, .box_w = 1, .ofs_x = 3, .ofs_y = -1},
|
||||||
@@ -460,4 +460,3 @@ lv_font_t lv_font_unscii_8 = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
#endif /*#if LV_FONT_UNSCII_8*/
|
#endif /*#if LV_FONT_UNSCII_8*/
|
||||||
|
|
||||||
|
|||||||
@@ -138,7 +138,7 @@ lv_disp_t * lv_disp_drv_register(lv_disp_drv_t * driver)
|
|||||||
|
|
||||||
disp->act_scr = lv_obj_create(NULL, NULL); /*Create a default screen on the display*/
|
disp->act_scr = lv_obj_create(NULL, NULL); /*Create a default screen on the display*/
|
||||||
disp->top_layer = lv_obj_create(NULL, NULL); /*Create top layer on the display*/
|
disp->top_layer = lv_obj_create(NULL, NULL); /*Create top layer on the display*/
|
||||||
disp->sys_layer = lv_obj_create(NULL, NULL); /*Create top layer on the display*/
|
disp->sys_layer = lv_obj_create(NULL, NULL); /*Create sys layer on the display*/
|
||||||
lv_obj_set_style(disp->top_layer, &lv_style_transp);
|
lv_obj_set_style(disp->top_layer, &lv_style_transp);
|
||||||
lv_obj_set_style(disp->sys_layer, &lv_style_transp);
|
lv_obj_set_style(disp->sys_layer, &lv_style_transp);
|
||||||
|
|
||||||
|
|||||||
@@ -29,6 +29,9 @@ extern "C" {
|
|||||||
#define LV_COORD_MAX ((lv_coord_t)((uint32_t)((uint32_t)1 << (8 * sizeof(lv_coord_t) - 1)) - 1000))
|
#define LV_COORD_MAX ((lv_coord_t)((uint32_t)((uint32_t)1 << (8 * sizeof(lv_coord_t) - 1)) - 1000))
|
||||||
#define LV_COORD_MIN (-LV_COORD_MAX)
|
#define LV_COORD_MIN (-LV_COORD_MAX)
|
||||||
|
|
||||||
|
LV_EXPORT_CONST_INT(LV_COORD_MAX);
|
||||||
|
LV_EXPORT_CONST_INT(LV_COORD_MIN);
|
||||||
|
|
||||||
/**********************
|
/**********************
|
||||||
* TYPEDEFS
|
* TYPEDEFS
|
||||||
**********************/
|
**********************/
|
||||||
|
|||||||
@@ -26,13 +26,14 @@ extern "C" {
|
|||||||
|
|
||||||
/*Possible log level. For compatibility declare it independently from `LV_USE_LOG`*/
|
/*Possible log level. For compatibility declare it independently from `LV_USE_LOG`*/
|
||||||
|
|
||||||
#define LV_LOG_LEVEL_TRACE 0 /**< A lot of logs to give detailed information*/
|
enum {
|
||||||
#define LV_LOG_LEVEL_INFO 1 /**< Log important events*/
|
LV_LOG_LEVEL_TRACE = 0, /**< A lot of logs to give detailed information*/
|
||||||
#define LV_LOG_LEVEL_WARN 2 /**< Log if something unwanted happened but didn't caused problem*/
|
LV_LOG_LEVEL_INFO = 1, /**< Log important events*/
|
||||||
#define LV_LOG_LEVEL_ERROR 3 /**< Only critical issue, when the system may fail*/
|
LV_LOG_LEVEL_WARN = 2, /**< Log if something unwanted happened but didn't caused problem*/
|
||||||
#define LV_LOG_LEVEL_NONE 4 /**< Do not log anything*/
|
LV_LOG_LEVEL_ERROR = 3, /**< Only critical issue, when the system may fail*/
|
||||||
#define _LV_LOG_LEVEL_NUM 5 /**< Number of log levels */
|
LV_LOG_LEVEL_NONE = 4, /**< Do not log anything*/
|
||||||
|
_LV_LOG_LEVEL_NUM = 5 /**< Number of log levels */
|
||||||
|
};
|
||||||
typedef int8_t lv_log_level_t;
|
typedef int8_t lv_log_level_t;
|
||||||
|
|
||||||
#if LV_USE_LOG
|
#if LV_USE_LOG
|
||||||
|
|||||||
@@ -43,6 +43,11 @@ extern "C" {
|
|||||||
/** log2(LV_BAR_ANIM_STATE_END) used to normalize data*/
|
/** log2(LV_BAR_ANIM_STATE_END) used to normalize data*/
|
||||||
#define LV_BAR_ANIM_STATE_NORM 8
|
#define LV_BAR_ANIM_STATE_NORM 8
|
||||||
|
|
||||||
|
LV_EXPORT_CONST_INT(LV_BAR_ANIM_STATE_START);
|
||||||
|
LV_EXPORT_CONST_INT(LV_BAR_ANIM_STATE_END);
|
||||||
|
LV_EXPORT_CONST_INT(LV_BAR_ANIM_STATE_INV);
|
||||||
|
LV_EXPORT_CONST_INT(LV_BAR_ANIM_STATE_NORM);
|
||||||
|
|
||||||
/**********************
|
/**********************
|
||||||
* TYPEDEFS
|
* TYPEDEFS
|
||||||
**********************/
|
**********************/
|
||||||
|
|||||||
@@ -363,7 +363,7 @@ uint16_t lv_btn_get_ink_out_time(const lv_obj_t * btn)
|
|||||||
|
|
||||||
#if LV_USE_ANIMATION && LV_BTN_INK_EFFECT
|
#if LV_USE_ANIMATION && LV_BTN_INK_EFFECT
|
||||||
lv_btn_ext_t * ext = lv_obj_get_ext_attr(btn);
|
lv_btn_ext_t * ext = lv_obj_get_ext_attr(btn);
|
||||||
return ext->ink_in_time;
|
return ext->ink_out_time;
|
||||||
#else
|
#else
|
||||||
(void)btn; /*Unused*/
|
(void)btn; /*Unused*/
|
||||||
return 0;
|
return 0;
|
||||||
|
|||||||
@@ -244,7 +244,7 @@ void lv_btnm_set_map(const lv_obj_t * btnm, const char * map[])
|
|||||||
btn_i++;
|
btn_i++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
act_y += btn_h + style_bg->body.padding.inner;
|
act_y += btn_h + style_bg->body.padding.inner + 1;
|
||||||
|
|
||||||
if(strlen(map_p_tmp[btn_cnt]) == 0) break; /*Break on end of map*/
|
if(strlen(map_p_tmp[btn_cnt]) == 0) break; /*Break on end of map*/
|
||||||
map_p_tmp = &map_p_tmp[btn_cnt + 1]; /*Set the map to the next line*/
|
map_p_tmp = &map_p_tmp[btn_cnt + 1]; /*Set the map to the next line*/
|
||||||
|
|||||||
@@ -31,6 +31,8 @@ extern "C" {
|
|||||||
#define LV_BTNM_WIDTH_MASK 0x0007
|
#define LV_BTNM_WIDTH_MASK 0x0007
|
||||||
#define LV_BTNM_BTN_NONE 0xFFFF
|
#define LV_BTNM_BTN_NONE 0xFFFF
|
||||||
|
|
||||||
|
LV_EXPORT_CONST_INT(LV_BTNM_BTN_NONE);
|
||||||
|
|
||||||
/**********************
|
/**********************
|
||||||
* TYPEDEFS
|
* TYPEDEFS
|
||||||
**********************/
|
**********************/
|
||||||
|
|||||||
@@ -695,9 +695,35 @@ void lv_canvas_draw_line(lv_obj_t * canvas, const lv_point_t * points, uint32_t
|
|||||||
lv_disp_t * refr_ori = lv_refr_get_disp_refreshing();
|
lv_disp_t * refr_ori = lv_refr_get_disp_refreshing();
|
||||||
lv_refr_set_disp_refreshing(&disp);
|
lv_refr_set_disp_refreshing(&disp);
|
||||||
|
|
||||||
|
lv_style_t circle_style_tmp; /*If rounded...*/
|
||||||
|
if(style->line.rounded) {
|
||||||
|
lv_style_copy(&circle_style_tmp, style);
|
||||||
|
circle_style_tmp.body.radius = LV_RADIUS_CIRCLE;
|
||||||
|
circle_style_tmp.body.main_color = style->line.color;
|
||||||
|
circle_style_tmp.body.grad_color = style->line.color;
|
||||||
|
circle_style_tmp.body.opa = style->line.opa;
|
||||||
|
}
|
||||||
|
lv_area_t circle_area;
|
||||||
uint32_t i;
|
uint32_t i;
|
||||||
for(i = 0; i < point_cnt - 1; i++) {
|
for(i = 0; i < point_cnt - 1; i++) {
|
||||||
lv_draw_line(&points[i], &points[i + 1], &mask, style, LV_OPA_COVER);
|
lv_draw_line(&points[i], &points[i + 1], &mask, style, LV_OPA_COVER);
|
||||||
|
|
||||||
|
/*Draw circle on the joints if enabled*/
|
||||||
|
if(style->line.rounded) {
|
||||||
|
circle_area.x1 = points[i].x - ((style->line.width - 1) >> 1) - ((style->line.width - 1) & 0x1);
|
||||||
|
circle_area.y1 = points[i].y - ((style->line.width - 1) >> 1) - ((style->line.width - 1) & 0x1);
|
||||||
|
circle_area.x2 = points[i].x + ((style->line.width - 1) >> 1);
|
||||||
|
circle_area.y2 = points[i].y + ((style->line.width - 1) >> 1);
|
||||||
|
lv_draw_rect(&circle_area, &mask, &circle_style_tmp, LV_OPA_COVER);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/*Draw circle on the last point too if enabled*/
|
||||||
|
if(style->line.rounded) {
|
||||||
|
circle_area.x1 = points[i].x - ((style->line.width - 1) >> 1) - ((style->line.width - 1) & 0x1);
|
||||||
|
circle_area.y1 = points[i].y - ((style->line.width - 1) >> 1) - ((style->line.width - 1) & 0x1);
|
||||||
|
circle_area.x2 = points[i].x + ((style->line.width - 1) >> 1);
|
||||||
|
circle_area.y2 = points[i].y + ((style->line.width - 1) >> 1);
|
||||||
|
lv_draw_rect(&circle_area, &mask, &circle_style_tmp, LV_OPA_COVER);
|
||||||
}
|
}
|
||||||
|
|
||||||
lv_refr_set_disp_refreshing(refr_ori);
|
lv_refr_set_disp_refreshing(refr_ori);
|
||||||
|
|||||||
@@ -1270,7 +1270,7 @@ static void lv_chart_draw_y_ticks(lv_obj_t * chart, const lv_area_t * mask, uint
|
|||||||
const lv_style_t * style = lv_obj_get_style(chart);
|
const lv_style_t * style = lv_obj_get_style(chart);
|
||||||
lv_opa_t opa_scale = lv_obj_get_opa_scale(chart);
|
lv_opa_t opa_scale = lv_obj_get_opa_scale(chart);
|
||||||
|
|
||||||
uint8_t i, j;
|
uint8_t i;
|
||||||
uint8_t num_of_labels;
|
uint8_t num_of_labels;
|
||||||
uint8_t num_scale_ticks;
|
uint8_t num_scale_ticks;
|
||||||
int8_t major_tick_len, minor_tick_len;
|
int8_t major_tick_len, minor_tick_len;
|
||||||
@@ -1396,8 +1396,7 @@ static void lv_chart_draw_x_ticks(lv_obj_t * chart, const lv_area_t * mask)
|
|||||||
const lv_style_t * style = lv_obj_get_style(chart);
|
const lv_style_t * style = lv_obj_get_style(chart);
|
||||||
lv_opa_t opa_scale = lv_obj_get_opa_scale(chart);
|
lv_opa_t opa_scale = lv_obj_get_opa_scale(chart);
|
||||||
|
|
||||||
uint8_t i, j;
|
uint8_t i;
|
||||||
uint8_t list_index;
|
|
||||||
uint8_t num_of_labels;
|
uint8_t num_of_labels;
|
||||||
uint8_t num_scale_ticks;
|
uint8_t num_scale_ticks;
|
||||||
uint8_t major_tick_len, minor_tick_len;
|
uint8_t major_tick_len, minor_tick_len;
|
||||||
|
|||||||
@@ -34,6 +34,9 @@ extern "C" {
|
|||||||
/**Automatically calculate the tick length*/
|
/**Automatically calculate the tick length*/
|
||||||
#define LV_CHART_TICK_LENGTH_AUTO 255
|
#define LV_CHART_TICK_LENGTH_AUTO 255
|
||||||
|
|
||||||
|
LV_EXPORT_CONST_INT(LV_CHART_POINT_DEF);
|
||||||
|
LV_EXPORT_CONST_INT(LV_CHART_TICK_LENGTH_AUTO);
|
||||||
|
|
||||||
/**********************
|
/**********************
|
||||||
* TYPEDEFS
|
* TYPEDEFS
|
||||||
**********************/
|
**********************/
|
||||||
|
|||||||
@@ -135,7 +135,6 @@ lv_obj_t * lv_gauge_create(lv_obj_t * par, const lv_obj_t * copy)
|
|||||||
void lv_gauge_set_needle_count(lv_obj_t * gauge, uint8_t needle_cnt, const lv_color_t colors[])
|
void lv_gauge_set_needle_count(lv_obj_t * gauge, uint8_t needle_cnt, const lv_color_t colors[])
|
||||||
{
|
{
|
||||||
LV_ASSERT_OBJ(gauge, LV_OBJX_NAME);
|
LV_ASSERT_OBJ(gauge, LV_OBJX_NAME);
|
||||||
LV_ASSERT_NULL(colors);
|
|
||||||
|
|
||||||
lv_gauge_ext_t * ext = lv_obj_get_ext_attr(gauge);
|
lv_gauge_ext_t * ext = lv_obj_get_ext_attr(gauge);
|
||||||
|
|
||||||
|
|||||||
@@ -163,15 +163,20 @@ void lv_img_set_src(lv_obj_t * img, const void * src_img)
|
|||||||
} else if(src_type == LV_IMG_SRC_FILE || src_type == LV_IMG_SRC_SYMBOL) {
|
} else if(src_type == LV_IMG_SRC_FILE || src_type == LV_IMG_SRC_SYMBOL) {
|
||||||
/* If the new and the old src are the same then it was only a refresh.*/
|
/* If the new and the old src are the same then it was only a refresh.*/
|
||||||
if(ext->src != src_img) {
|
if(ext->src != src_img) {
|
||||||
/*If memory was allocated because of the previous `src_type` then free it*/
|
const void * old_src = NULL;
|
||||||
|
/* If memory was allocated because of the previous `src_type` then save its pointer and free after allocation.
|
||||||
|
* It's important to allocate first to be sure the new data will be on a new address.
|
||||||
|
* Else `img_cache` wouldn't see the change in source.*/
|
||||||
if(ext->src_type == LV_IMG_SRC_FILE || ext->src_type == LV_IMG_SRC_SYMBOL) {
|
if(ext->src_type == LV_IMG_SRC_FILE || ext->src_type == LV_IMG_SRC_SYMBOL) {
|
||||||
lv_mem_free(ext->src);
|
old_src = ext->src;
|
||||||
}
|
}
|
||||||
char * new_str = lv_mem_alloc(strlen(src_img) + 1);
|
char * new_str = lv_mem_alloc(strlen(src_img) + 1);
|
||||||
LV_ASSERT_MEM(new_str);
|
LV_ASSERT_MEM(new_str);
|
||||||
if(new_str == NULL) return;
|
if(new_str == NULL) return;
|
||||||
strcpy(new_str, src_img);
|
strcpy(new_str, src_img);
|
||||||
ext->src = new_str;
|
ext->src = new_str;
|
||||||
|
|
||||||
|
if(old_src) lv_mem_free(old_src);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -35,6 +35,10 @@ extern "C" {
|
|||||||
#define LV_LABEL_POS_LAST 0xFFFF
|
#define LV_LABEL_POS_LAST 0xFFFF
|
||||||
#define LV_LABEL_TEXT_SEL_OFF 0xFFFF
|
#define LV_LABEL_TEXT_SEL_OFF 0xFFFF
|
||||||
|
|
||||||
|
LV_EXPORT_CONST_INT(LV_LABEL_DOT_NUM);
|
||||||
|
LV_EXPORT_CONST_INT(LV_LABEL_POS_LAST);
|
||||||
|
LV_EXPORT_CONST_INT(LV_LABEL_TEXT_SEL_OFF);
|
||||||
|
|
||||||
/**********************
|
/**********************
|
||||||
* TYPEDEFS
|
* TYPEDEFS
|
||||||
**********************/
|
**********************/
|
||||||
|
|||||||
@@ -237,11 +237,13 @@ static bool lv_line_design(lv_obj_t * line, const lv_area_t * mask, lv_design_mo
|
|||||||
uint16_t i;
|
uint16_t i;
|
||||||
|
|
||||||
lv_style_t circle_style_tmp; /*If rounded...*/
|
lv_style_t circle_style_tmp; /*If rounded...*/
|
||||||
|
if(style->line.rounded) {
|
||||||
lv_style_copy(&circle_style_tmp, style);
|
lv_style_copy(&circle_style_tmp, style);
|
||||||
circle_style_tmp.body.radius = LV_RADIUS_CIRCLE;
|
circle_style_tmp.body.radius = LV_RADIUS_CIRCLE;
|
||||||
circle_style_tmp.body.main_color = style->line.color;
|
circle_style_tmp.body.main_color = style->line.color;
|
||||||
circle_style_tmp.body.grad_color = style->line.color;
|
circle_style_tmp.body.grad_color = style->line.color;
|
||||||
circle_style_tmp.body.opa = style->line.opa;
|
circle_style_tmp.body.opa = style->line.opa;
|
||||||
|
}
|
||||||
lv_area_t circle_area;
|
lv_area_t circle_area;
|
||||||
|
|
||||||
/*Read all points and draw the lines*/
|
/*Read all points and draw the lines*/
|
||||||
|
|||||||
@@ -406,9 +406,11 @@ static void lv_spinbox_updatevalue(lv_obj_t * spinbox)
|
|||||||
memset(buf, 0, sizeof(buf));
|
memset(buf, 0, sizeof(buf));
|
||||||
char * buf_p = buf;
|
char * buf_p = buf;
|
||||||
|
|
||||||
|
if (ext->range_min < 0) { // hide sign if there are only positive values
|
||||||
/*Add the sign*/
|
/*Add the sign*/
|
||||||
(*buf_p) = ext->value >= 0 ? '+' : '-';
|
(*buf_p) = ext->value >= 0 ? '+' : '-';
|
||||||
buf_p++;
|
buf_p++;
|
||||||
|
}
|
||||||
|
|
||||||
int i;
|
int i;
|
||||||
/*padding left*/
|
/*padding left*/
|
||||||
|
|||||||
@@ -39,6 +39,8 @@ extern "C" {
|
|||||||
*********************/
|
*********************/
|
||||||
#define LV_TA_CURSOR_LAST (0x7FFF) /*Put the cursor after the last character*/
|
#define LV_TA_CURSOR_LAST (0x7FFF) /*Put the cursor after the last character*/
|
||||||
|
|
||||||
|
LV_EXPORT_CONST_INT(LV_TA_CURSOR_LAST);
|
||||||
|
|
||||||
/**********************
|
/**********************
|
||||||
* TYPEDEFS
|
* TYPEDEFS
|
||||||
**********************/
|
**********************/
|
||||||
|
|||||||
@@ -746,21 +746,19 @@ static lv_res_t lv_tabview_signal(lv_obj_t * tabview, lv_signal_t sign, void * p
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(sign == LV_SIGNAL_FOCUS) {
|
if(sign == LV_SIGNAL_FOCUS) {
|
||||||
|
|
||||||
|
|
||||||
lv_indev_type_t indev_type = lv_indev_get_type(lv_indev_get_act());
|
lv_indev_type_t indev_type = lv_indev_get_type(lv_indev_get_act());
|
||||||
/*With ENCODER select the first button only in edit mode*/
|
/*With ENCODER select the first button only in edit mode*/
|
||||||
if(indev_type == LV_INDEV_TYPE_ENCODER) {
|
if(indev_type == LV_INDEV_TYPE_ENCODER) {
|
||||||
#if LV_USE_GROUP
|
#if LV_USE_GROUP
|
||||||
lv_group_t * g = lv_obj_get_group(tabview);
|
lv_group_t * g = lv_obj_get_group(tabview);
|
||||||
if(lv_group_get_editing(g)) {
|
if(lv_group_get_editing(g)) {
|
||||||
lv_btnm_ext_t * btnm_ext = lv_obj_get_ext_attr(ext->btns);
|
lv_btnm_set_pressed(ext->btns, ext->tab_cur);
|
||||||
btnm_ext->btn_id_pr = 0;
|
|
||||||
lv_obj_invalidate(ext->btns);
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
} else {
|
} else {
|
||||||
lv_btnm_ext_t * btnm_ext = lv_obj_get_ext_attr(ext->btns);
|
lv_btnm_set_pressed(ext->btns, ext->tab_cur);
|
||||||
btnm_ext->btn_id_pr = 0;
|
|
||||||
lv_obj_invalidate(ext->btns);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if(sign == LV_SIGNAL_GET_EDITABLE) {
|
} else if(sign == LV_SIGNAL_GET_EDITABLE) {
|
||||||
|
|||||||
@@ -254,6 +254,8 @@ void lv_win_set_content_size(lv_obj_t * win, lv_coord_t w, lv_coord_t h)
|
|||||||
|
|
||||||
lv_win_ext_t * ext = lv_obj_get_ext_attr(win);
|
lv_win_ext_t * ext = lv_obj_get_ext_attr(win);
|
||||||
h += lv_obj_get_height(ext->header);
|
h += lv_obj_get_height(ext->header);
|
||||||
|
|
||||||
|
lv_obj_set_size(win, w, h);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in New Issue
Block a user