txt_get_size added +lv_page_focus handle greater objects then page + LV_SIGNAL_PRESSING added
This commit is contained in:
@@ -267,10 +267,14 @@ void lv_app_win_close(lv_app_inst_t * app)
|
|||||||
{
|
{
|
||||||
if(app->win == NULL) return;
|
if(app->win == NULL) return;
|
||||||
|
|
||||||
|
|
||||||
|
lv_app_kb_close();
|
||||||
|
|
||||||
lv_obj_del(app->win);
|
lv_obj_del(app->win);
|
||||||
app->win = NULL;
|
app->win = NULL;
|
||||||
dm_free(app->win_data);
|
dm_free(app->win_data);
|
||||||
app->win_data = NULL;
|
app->win_data = NULL;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -495,6 +499,8 @@ static lv_action_res_t lv_app_win_close_action(lv_obj_t * close_btn, lv_dispi_t
|
|||||||
lv_obj_t * win = lv_win_get_from_ctrl_btn(close_btn);
|
lv_obj_t * win = lv_win_get_from_ctrl_btn(close_btn);
|
||||||
lv_app_inst_t * app = lv_obj_get_free_p(win);
|
lv_app_inst_t * app = lv_obj_get_free_p(win);
|
||||||
|
|
||||||
|
lv_app_kb_close();
|
||||||
|
|
||||||
#if LV_APP_ANIM_WIN_CLOSE != 0
|
#if LV_APP_ANIM_WIN_CLOSE != 0
|
||||||
lv_obj_anim(app->win, LV_ANIM_FADE | ANIM_OUT, LV_APP_ANIM_WIN_CLOSE, 0, lv_app_win_close_anim_cb);
|
lv_obj_anim(app->win, LV_ANIM_FADE | ANIM_OUT, LV_APP_ANIM_WIN_CLOSE, 0, lv_app_win_close_anim_cb);
|
||||||
lv_app_sc_close(app);
|
lv_app_sc_close(app);
|
||||||
@@ -503,6 +509,7 @@ static lv_action_res_t lv_app_win_close_action(lv_obj_t * close_btn, lv_dispi_t
|
|||||||
return LV_ACTION_RES_INV;
|
return LV_ACTION_RES_INV;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
return LV_ACTION_RES_OK;
|
return LV_ACTION_RES_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -511,6 +518,9 @@ static lv_action_res_t lv_app_win_minim_action(lv_obj_t * close_btn, lv_dispi_t
|
|||||||
{
|
{
|
||||||
lv_obj_t * win = lv_win_get_from_ctrl_btn(close_btn);
|
lv_obj_t * win = lv_win_get_from_ctrl_btn(close_btn);
|
||||||
lv_app_inst_t * app = lv_obj_get_free_p(win);
|
lv_app_inst_t * app = lv_obj_get_free_p(win);
|
||||||
|
|
||||||
|
lv_app_kb_close();
|
||||||
|
|
||||||
/*Make an animation on window open*/
|
/*Make an animation on window open*/
|
||||||
#if LV_APP_ANIM_WIN_OPEN != 0
|
#if LV_APP_ANIM_WIN_OPEN != 0
|
||||||
anim_t a;
|
anim_t a;
|
||||||
@@ -662,6 +672,7 @@ static void lv_app_init_style(void)
|
|||||||
app_style.app_list_style.bg_pages.scrable_rects.opad = 0;
|
app_style.app_list_style.bg_pages.scrable_rects.opad = 0;
|
||||||
app_style.app_list_style.bg_pages.sb_rects.objs.color = COLOR_GRAY;
|
app_style.app_list_style.bg_pages.sb_rects.objs.color = COLOR_GRAY;
|
||||||
app_style.app_list_style.bg_pages.sb_rects.gcolor = COLOR_GRAY;
|
app_style.app_list_style.bg_pages.sb_rects.gcolor = COLOR_GRAY;
|
||||||
|
app_style.app_list_style.bg_pages.sb_width = 8 * LV_DOWNSCALE;
|
||||||
|
|
||||||
/*Shortcut page styles*/
|
/*Shortcut page styles*/
|
||||||
lv_pages_get(LV_PAGES_DEF,&app_style.sc_page_style);
|
lv_pages_get(LV_PAGES_DEF,&app_style.sc_page_style);
|
||||||
@@ -681,8 +692,8 @@ static void lv_app_init_style(void)
|
|||||||
app_style.sc_style.mcolor[LV_BTN_STATE_REL] = COLOR_WHITE;
|
app_style.sc_style.mcolor[LV_BTN_STATE_REL] = COLOR_WHITE;
|
||||||
app_style.sc_style.gcolor[LV_BTN_STATE_REL] = COLOR_MAKE(0x20, 0x30, 0x40);
|
app_style.sc_style.gcolor[LV_BTN_STATE_REL] = COLOR_MAKE(0x20, 0x30, 0x40);
|
||||||
app_style.sc_style.bcolor[LV_BTN_STATE_REL] = COLOR_MAKE(0x40, 0x60, 0x80);
|
app_style.sc_style.bcolor[LV_BTN_STATE_REL] = COLOR_MAKE(0x40, 0x60, 0x80);
|
||||||
app_style.sc_style.mcolor[LV_BTN_STATE_PR] = COLOR_MAKE(0xD0, 0xE0, 0xF0);
|
app_style.sc_style.mcolor[LV_BTN_STATE_PR] = COLOR_MAKE(0xB0, 0xD0, 0xF0);
|
||||||
app_style.sc_style.gcolor[LV_BTN_STATE_PR] = COLOR_MAKE(0x20, 0x30, 0x40);
|
app_style.sc_style.gcolor[LV_BTN_STATE_PR] = COLOR_MAKE(0x00, 0x00, 0x00);
|
||||||
app_style.sc_style.bcolor[LV_BTN_STATE_PR] = COLOR_MAKE(0xB0, 0xD0, 0xF0);
|
app_style.sc_style.bcolor[LV_BTN_STATE_PR] = COLOR_MAKE(0xB0, 0xD0, 0xF0);
|
||||||
app_style.sc_style.rects.bopa = 70;
|
app_style.sc_style.rects.bopa = 70;
|
||||||
app_style.sc_style.rects.bwidth = 1 * LV_STYLE_MULT;
|
app_style.sc_style.rects.bwidth = 1 * LV_STYLE_MULT;
|
||||||
|
|||||||
@@ -21,11 +21,22 @@
|
|||||||
/**********************
|
/**********************
|
||||||
* STATIC PROTOTYPES
|
* STATIC PROTOTYPES
|
||||||
**********************/
|
**********************/
|
||||||
|
static lv_action_res_t lv_app_kb_action(lv_obj_t * btnm, uint16_t i);
|
||||||
|
|
||||||
/**********************
|
/**********************
|
||||||
* STATIC VARIABLES
|
* STATIC VARIABLES
|
||||||
**********************/
|
**********************/
|
||||||
static lv_obj_t * kb_btnm;
|
static lv_obj_t * kb_btnm;
|
||||||
|
static lv_obj_t * kb_win;
|
||||||
|
static lv_obj_t * kb_ta;
|
||||||
|
static const char * kb_map_lc[] = {
|
||||||
|
"\0021#", "\002q", "\002w", "\002e", "\002r", "\002t", "\002y", "\002u", "\002i", "\002o", "\002p", "\003Del", "\n",
|
||||||
|
"\002ABC", "a", "s", "d", "f", "g", "h", "j", "k", "l", "\003Enter", "\n",
|
||||||
|
"*", "-", "z", "x", "c", "v", "b", "n", "m", ".", ",", ";", "\n",
|
||||||
|
"\002Free", "\002<", "\006 ", "\002>", "\002Free", ""
|
||||||
|
};
|
||||||
|
static lv_btnms_t kb_btnms;
|
||||||
|
static bool kb_inited;
|
||||||
|
|
||||||
/**********************
|
/**********************
|
||||||
* MACROS
|
* MACROS
|
||||||
@@ -37,29 +48,57 @@ static lv_obj_t * kb_btnm;
|
|||||||
|
|
||||||
void lv_app_kb_open(lv_obj_t * ta)
|
void lv_app_kb_open(lv_obj_t * ta)
|
||||||
{
|
{
|
||||||
|
if(kb_inited == false) {
|
||||||
|
lv_btnms_get(LV_BTNMS_DEF, &kb_btnms);
|
||||||
|
kb_btnms.rects.opad = 4 + LV_STYLE_MULT;
|
||||||
|
kb_btnms.rects.vpad = 3 + LV_STYLE_MULT;
|
||||||
|
kb_btnms.rects.hpad = 3 + LV_STYLE_MULT;
|
||||||
|
kb_inited = true;
|
||||||
|
}
|
||||||
|
|
||||||
if(kb_btnm != NULL) {
|
if(kb_btnm != NULL) {
|
||||||
lv_app_kb_close();
|
lv_app_kb_close();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
kb_ta = ta;
|
||||||
|
|
||||||
kb_btnm = lv_btnm_create(lv_scr_act(), NULL);
|
kb_btnm = lv_btnm_create(lv_scr_act(), NULL);
|
||||||
lv_obj_set_size(kb_btnm, LV_HOR_RES, LV_VER_RES / 2);
|
lv_obj_set_size(kb_btnm, LV_HOR_RES, LV_VER_RES / 2);
|
||||||
lv_obj_align(kb_btnm, NULL, LV_ALIGN_IN_BOTTOM_MID, 0, 0);
|
lv_obj_align(kb_btnm, NULL, LV_ALIGN_IN_BOTTOM_MID, 0, 0);
|
||||||
|
lv_obj_set_style(kb_btnm, &kb_btnms);
|
||||||
|
lv_btnm_set_map(kb_btnm, kb_map_lc);
|
||||||
|
lv_btnm_set_cb(kb_btnm, lv_app_kb_action);
|
||||||
|
|
||||||
lv_ta_add_text(ta, "alma\n\nkorte\n\ncitrom\nbarack\nbanaaaan\n\n");
|
kb_win = lv_app_get_win_from_obj(kb_ta);
|
||||||
lv_ta_set_cursor_pos(ta, LV_TA_CUR_LAST);
|
lv_obj_set_height(kb_win, LV_VER_RES / 2);
|
||||||
|
lv_obj_set_y(kb_win, 0);
|
||||||
|
|
||||||
lv_obj_t * win = lv_app_get_win_from_obj(ta);
|
// lv_obj_set_height(kb_ta, LV_VER_RES / 2 - 50);
|
||||||
lv_obj_set_height(win, LV_VER_RES / 2);
|
|
||||||
lv_obj_set_y(win, 0);
|
|
||||||
|
|
||||||
lv_page_focus(lv_win_get_content(win), ta, true);
|
lv_ta_add_text(kb_ta, "alma\n\nkorte\n\ncitrom\nbarack\nbanaaaan\n\n");
|
||||||
|
lv_ta_set_cursor_pos(kb_ta, LV_TA_CUR_LAST);
|
||||||
|
|
||||||
|
lv_page_focus(lv_win_get_content(kb_win), kb_ta, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
void lv_app_kb_close(void)
|
void lv_app_kb_close(void)
|
||||||
{
|
{
|
||||||
|
if(kb_btnm == NULL) return;
|
||||||
|
|
||||||
|
lv_obj_set_size(kb_win, LV_HOR_RES, LV_VER_RES);
|
||||||
|
kb_win = NULL;
|
||||||
|
|
||||||
lv_obj_del(kb_btnm);
|
lv_obj_del(kb_btnm);
|
||||||
kb_btnm = NULL;
|
kb_btnm = NULL;
|
||||||
|
|
||||||
|
kb_ta = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static lv_action_res_t lv_app_kb_action(lv_obj_t * btnm, uint16_t i)
|
||||||
|
{
|
||||||
|
lv_ta_add_text(kb_ta, kb_map_lc[i]);
|
||||||
|
lv_page_focus(lv_win_get_content(kb_win), kb_ta, true);
|
||||||
|
return LV_ACTION_RES_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**********************
|
/**********************
|
||||||
|
|||||||
@@ -166,9 +166,9 @@ static void my_win_open(lv_app_inst_t * app, lv_obj_t * win)
|
|||||||
|
|
||||||
lv_obj_t * ta;
|
lv_obj_t * ta;
|
||||||
ta = lv_ta_create(win, NULL);
|
ta = lv_ta_create(win, NULL);
|
||||||
lv_obj_set_size_us(ta, 200, 300);
|
lv_obj_set_size_us(ta, 200, 100);
|
||||||
lv_obj_set_pos_us(ta, 20, 270);
|
lv_obj_set_pos_us(ta, 20, 270);
|
||||||
lv_rect_set_fit(ta, false, true);
|
// lv_rect_set_fit(ta, false, true);
|
||||||
lv_page_set_rel_action(ta, kb_open);
|
lv_page_set_rel_action(ta, kb_open);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -7,6 +7,7 @@
|
|||||||
* INCLUDES
|
* INCLUDES
|
||||||
*********************/
|
*********************/
|
||||||
#include "text.h"
|
#include "text.h"
|
||||||
|
#include "misc/math/math_base.h"
|
||||||
|
|
||||||
/*********************
|
/*********************
|
||||||
* DEFINES
|
* DEFINES
|
||||||
@@ -34,6 +35,37 @@ static bool txt_is_break_char(char letter);
|
|||||||
* GLOBAL FUNCTIONS
|
* GLOBAL FUNCTIONS
|
||||||
**********************/
|
**********************/
|
||||||
|
|
||||||
|
void txt_get_size(point_t * size_res, const char * text, const font_t * font,
|
||||||
|
uint16_t letter_space, uint16_t line_space, cord_t max_width)
|
||||||
|
{
|
||||||
|
uint32_t line_start = 0;
|
||||||
|
uint32_t new_line_start = 0;
|
||||||
|
cord_t act_line_length;
|
||||||
|
uint8_t letter_height = font_get_height(font);
|
||||||
|
size_res->x = 0;
|
||||||
|
size_res->y = 0;
|
||||||
|
|
||||||
|
/*Calc. the height and longest line*/
|
||||||
|
while (text[line_start] != '\0')
|
||||||
|
{
|
||||||
|
new_line_start += txt_get_next_line(&text[line_start], font, letter_space, max_width);
|
||||||
|
size_res->y += letter_height;
|
||||||
|
size_res->y += line_space;
|
||||||
|
|
||||||
|
/*Calculate the the longest line*/
|
||||||
|
act_line_length = txt_get_width(&text[line_start], new_line_start - line_start,
|
||||||
|
font, letter_space);
|
||||||
|
|
||||||
|
size_res->x = max(act_line_length, size_res->x);
|
||||||
|
line_start = new_line_start;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*Correction with the last line space*/
|
||||||
|
if(size_res->y >= 0) {
|
||||||
|
size_res->y -= line_space;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the next line of text. Check line length and break chars too.
|
* Get the next line of text. Check line length and break chars too.
|
||||||
* @param txt a '\0' terminated string
|
* @param txt a '\0' terminated string
|
||||||
|
|||||||
@@ -13,6 +13,7 @@
|
|||||||
#include <lvgl/lv_misc/area.h>
|
#include <lvgl/lv_misc/area.h>
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
#include "font.h"
|
#include "font.h"
|
||||||
|
#include "area.h"
|
||||||
|
|
||||||
/*********************
|
/*********************
|
||||||
* DEFINES
|
* DEFINES
|
||||||
@@ -25,6 +26,8 @@
|
|||||||
/**********************
|
/**********************
|
||||||
* GLOBAL PROTOTYPES
|
* GLOBAL PROTOTYPES
|
||||||
**********************/
|
**********************/
|
||||||
|
void txt_get_size(point_t * size_res, const char * text, const font_t * font,
|
||||||
|
uint16_t letter_space, uint16_t line_space, cord_t max_width);
|
||||||
uint16_t txt_get_next_line(const char * txt, const font_t * font_p, uint16_t letter_space, cord_t max_l);
|
uint16_t txt_get_next_line(const char * txt, const font_t * font_p, uint16_t letter_space, cord_t max_l);
|
||||||
cord_t txt_get_width(const char * txt, uint16_t char_num, const font_t * font_p, uint16_t letter_space);
|
cord_t txt_get_width(const char * txt, uint16_t char_num, const font_t * font_p, uint16_t letter_space);
|
||||||
|
|
||||||
|
|||||||
@@ -249,6 +249,7 @@ static void dispi_proc_press(lv_dispi_t * dispi_p)
|
|||||||
/* The reset can be set in the signal function.
|
/* The reset can be set in the signal function.
|
||||||
* In case of reset query ignore the remaining parts.*/
|
* In case of reset query ignore the remaining parts.*/
|
||||||
if(lv_dispi_reset_qry == false) {
|
if(lv_dispi_reset_qry == false) {
|
||||||
|
pr_obj->signal_f(pr_obj, LV_SIGNAL_PRESSING, dispi_p);
|
||||||
dispi_p->act_obj = pr_obj; /*Save the pressed object*/
|
dispi_p->act_obj = pr_obj; /*Save the pressed object*/
|
||||||
dispi_p->last_obj = dispi_p->act_obj; /*Refresh the last_obj*/
|
dispi_p->last_obj = dispi_p->act_obj; /*Refresh the last_obj*/
|
||||||
|
|
||||||
|
|||||||
@@ -65,6 +65,7 @@ typedef enum
|
|||||||
{
|
{
|
||||||
LV_SIGNAL_CLEANUP,
|
LV_SIGNAL_CLEANUP,
|
||||||
LV_SIGNAL_PRESSED,
|
LV_SIGNAL_PRESSED,
|
||||||
|
LV_SIGNAL_PRESSING,
|
||||||
LV_SIGNAL_PRESS_LOST,
|
LV_SIGNAL_PRESS_LOST,
|
||||||
LV_SIGNAL_RELEASED,
|
LV_SIGNAL_RELEASED,
|
||||||
LV_SIGNAL_LONG_PRESS,
|
LV_SIGNAL_LONG_PRESS,
|
||||||
|
|||||||
@@ -448,9 +448,14 @@ static void lv_btns_init(void)
|
|||||||
lv_btns_def.flags[LV_BTN_STATE_INA].transp= 0;
|
lv_btns_def.flags[LV_BTN_STATE_INA].transp= 0;
|
||||||
lv_btns_def.flags[LV_BTN_STATE_INA].empty = 0;
|
lv_btns_def.flags[LV_BTN_STATE_INA].empty = 0;
|
||||||
|
|
||||||
|
lv_btns_def.rects.objs.color = lv_btns_def.mcolor[LV_BTN_STATE_REL];
|
||||||
|
lv_btns_def.rects.gcolor = lv_btns_def.gcolor[LV_BTN_STATE_REL];
|
||||||
|
lv_btns_def.rects.bcolor = lv_btns_def.bcolor[LV_BTN_STATE_REL];
|
||||||
|
lv_btns_def.rects.objs.transp = 0;
|
||||||
|
lv_btns_def.rects.empty = 0;
|
||||||
|
lv_btns_def.rects.light = 0;
|
||||||
lv_btns_def.rects.bwidth = 2 * LV_STYLE_MULT;
|
lv_btns_def.rects.bwidth = 2 * LV_STYLE_MULT;
|
||||||
lv_btns_def.rects.bopa = 50;
|
lv_btns_def.rects.bopa = 50;
|
||||||
lv_btns_def.rects.light = 8 * LV_STYLE_MULT;
|
|
||||||
lv_btns_def.rects.empty = 0;
|
lv_btns_def.rects.empty = 0;
|
||||||
lv_btns_def.rects.round = 4 * LV_STYLE_MULT;
|
lv_btns_def.rects.round = 4 * LV_STYLE_MULT;
|
||||||
lv_btns_def.rects.hpad = 10 * LV_STYLE_MULT;
|
lv_btns_def.rects.hpad = 10 * LV_STYLE_MULT;
|
||||||
|
|||||||
@@ -159,45 +159,25 @@ void lv_label_set_text(lv_obj_t * label, const char * text)
|
|||||||
/*If 'text" still NULL then nothing to do: return*/
|
/*If 'text" still NULL then nothing to do: return*/
|
||||||
if(text == NULL) return;
|
if(text == NULL) return;
|
||||||
|
|
||||||
uint32_t line_start = 0;
|
cord_t max_w = lv_obj_get_width(label);
|
||||||
uint32_t new_line_start = 0;
|
lv_labels_t * style = lv_obj_get_style(label);
|
||||||
cord_t max_length = lv_obj_get_width(label);
|
const font_t * font = font_get(style->font);
|
||||||
lv_labels_t * labels = lv_obj_get_style(label);
|
|
||||||
const font_t * font = font_get(labels->font);
|
|
||||||
uint8_t letter_height = font_get_height(font);
|
uint8_t letter_height = font_get_height(font);
|
||||||
cord_t new_height = 0;
|
|
||||||
cord_t longest_line = 0;
|
|
||||||
cord_t act_line_length;
|
|
||||||
|
|
||||||
ext->dot_end = LV_LABEL_DOT_END_INV; /*Initialize the dot end index*/
|
ext->dot_end = LV_LABEL_DOT_END_INV; /*Initialize the dot end index*/
|
||||||
|
|
||||||
/*If the width will be expanded set the max length to very big */
|
/*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) {
|
if(ext->long_mode == LV_LABEL_LONG_EXPAND || ext->long_mode == LV_LABEL_LONG_SCROLL) {
|
||||||
max_length = LV_CORD_MAX;
|
max_w = LV_CORD_MAX;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*Calc. the height and longest line*/
|
/*Calc. the height and longest line*/
|
||||||
while (text[line_start] != '\0')
|
point_t size;
|
||||||
{
|
txt_get_size(&size, ext->txt, font, style->letter_space, style->line_space, max_w);
|
||||||
new_line_start += txt_get_next_line(&text[line_start], font, labels->letter_space, max_length);
|
|
||||||
new_height += letter_height;
|
|
||||||
new_height += labels->line_space;
|
|
||||||
|
|
||||||
/*Calculate the the longest line if the width will be expanded*/
|
|
||||||
if(ext->long_mode == LV_LABEL_LONG_EXPAND || ext->long_mode == LV_LABEL_LONG_SCROLL) {
|
|
||||||
act_line_length = txt_get_width(&text[line_start], new_line_start - line_start,
|
|
||||||
font, labels->letter_space);
|
|
||||||
longest_line = max(act_line_length, longest_line);
|
|
||||||
}
|
|
||||||
|
|
||||||
line_start = new_line_start;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*Correction with the last line space*/
|
|
||||||
new_height -= labels->line_space;
|
|
||||||
/*Refresh the full size in expand mode*/
|
/*Refresh the full size in expand mode*/
|
||||||
if(ext->long_mode == LV_LABEL_LONG_EXPAND || ext->long_mode == LV_LABEL_LONG_SCROLL) {
|
if(ext->long_mode == LV_LABEL_LONG_EXPAND || ext->long_mode == LV_LABEL_LONG_SCROLL) {
|
||||||
lv_obj_set_size(label, longest_line, new_height);
|
lv_obj_set_size(label, size.x, size.y);
|
||||||
|
|
||||||
/*Start scrolling if the label is greater then its parent*/
|
/*Start scrolling if the label is greater then its parent*/
|
||||||
if(ext->long_mode == LV_LABEL_LONG_SCROLL) {
|
if(ext->long_mode == LV_LABEL_LONG_SCROLL) {
|
||||||
@@ -244,7 +224,7 @@ void lv_label_set_text(lv_obj_t * label, const char * text)
|
|||||||
}
|
}
|
||||||
/*In break mode only the height can change*/
|
/*In break mode only the height can change*/
|
||||||
else if (ext->long_mode == LV_LABEL_LONG_BREAK) {
|
else if (ext->long_mode == LV_LABEL_LONG_BREAK) {
|
||||||
lv_obj_set_height(label, new_height);
|
lv_obj_set_height(label, size.y);
|
||||||
}
|
}
|
||||||
/*Replace the last 'LV_LABEL_DOT_NUM' characters with dots
|
/*Replace the last 'LV_LABEL_DOT_NUM' characters with dots
|
||||||
* and save these characters*/
|
* and save these characters*/
|
||||||
|
|||||||
@@ -342,15 +342,21 @@ void lv_page_focus(lv_obj_t * page, lv_obj_t * obj, bool anim_en)
|
|||||||
|
|
||||||
bool refr = false;
|
bool refr = false;
|
||||||
|
|
||||||
|
cord_t top_err = -(scrlable_y + obj_y);
|
||||||
|
cord_t bot_err = scrlable_y + obj_y + obj_h - page_h;
|
||||||
|
|
||||||
|
/*If obj is higher then the page focus where the "error" is smaller*/
|
||||||
/*Out of the page on the top*/
|
/*Out of the page on the top*/
|
||||||
if(scrlable_y + obj_y < 0) {
|
if((obj_h <= page_h && top_err > 0) ||
|
||||||
|
(obj_h > page_h && top_err >= bot_err)) {
|
||||||
/*Calculate a new position and to let scrable_rects.vpad space above*/
|
/*Calculate a new position and to let scrable_rects.vpad space above*/
|
||||||
scrlable_y = -(obj_y - style->scrable_rects.vpad - style->bg_rects.vpad);
|
scrlable_y = -(obj_y - style->scrable_rects.vpad - style->bg_rects.vpad);
|
||||||
scrlable_y += style->scrable_rects.vpad;
|
scrlable_y += style->scrable_rects.vpad;
|
||||||
refr = true;
|
refr = true;
|
||||||
}
|
}
|
||||||
/*Out of the page on the bottom*/
|
/*Out of the page on the bottom*/
|
||||||
else if(scrlable_y + obj_y + obj_h > page_h) {
|
else if((obj_h <= page_h && bot_err > 0) ||
|
||||||
|
(obj_h > page_h && top_err < bot_err)) {
|
||||||
/*Calculate a new position and to let scrable_rects.vpad space below*/
|
/*Calculate a new position and to let scrable_rects.vpad space below*/
|
||||||
scrlable_y = -obj_y;
|
scrlable_y = -obj_y;
|
||||||
scrlable_y += page_h - obj_h;
|
scrlable_y += page_h - obj_h;
|
||||||
|
|||||||
@@ -29,6 +29,7 @@ typedef enum
|
|||||||
LV_PAGE_SB_MODE_AUTO,
|
LV_PAGE_SB_MODE_AUTO,
|
||||||
}lv_page_sb_mode_t;
|
}lv_page_sb_mode_t;
|
||||||
|
|
||||||
|
|
||||||
/*Style of page*/
|
/*Style of page*/
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
@@ -63,7 +64,6 @@ typedef struct
|
|||||||
}lv_page_ext_t;
|
}lv_page_ext_t;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**********************
|
/**********************
|
||||||
* GLOBAL PROTOTYPES
|
* GLOBAL PROTOTYPES
|
||||||
**********************/
|
**********************/
|
||||||
|
|||||||
Reference in New Issue
Block a user