rework widgets, refactoring, fixes

This commit is contained in:
Gabor Kiss-Vamosi
2021-02-07 12:37:37 +01:00
parent 2cae4a27c1
commit 063d17d842
53 changed files with 629 additions and 673 deletions
+1 -1
View File
@@ -27,7 +27,7 @@ void lv_ex_btn_1(void)
lv_obj_add_event_cb(btn2, event_handler, NULL);
lv_obj_align(btn2, NULL, LV_ALIGN_CENTER, 0, 40);
lv_obj_add_flag(btn2, LV_OBJ_FLAG_CHECKABLE);
lv_obj_set_height(btn2, LV_SIZE_AUTO);
lv_obj_set_height(btn2, LV_SIZE_CONTENT);
label = lv_label_create(btn2, NULL);
lv_label_set_text(label, "Toggle");
@@ -26,6 +26,7 @@ void lv_keyboard_example_1(void)
ta = lv_textarea_create(lv_scr_act(), NULL);
lv_obj_align(ta, NULL, LV_ALIGN_IN_TOP_LEFT, 10, 10);
lv_obj_add_event_cb(ta, ta_event_cb, kb);
lv_textarea_set_placeholder_text(ta, "Hello");
ta = lv_textarea_create(lv_scr_act(), NULL);
lv_obj_align(ta, NULL, LV_ALIGN_IN_TOP_RIGHT, -10, 10);
@@ -23,7 +23,7 @@ static void lv_spinbox_decrement_event_cb(lv_obj_t * btn, lv_event_t e)
void lv_ex_spinbox_1(void)
{
spinbox = lv_spinbox_create(lv_scr_act());
lv_spinbox_set_range(spinbox, -1000, 90000);
lv_spinbox_set_range(spinbox, -1000, 25000);
lv_spinbox_set_digit_format(spinbox, 5, 2);
lv_spinbox_step_prev(spinbox);
lv_obj_set_width(spinbox, 100);
@@ -36,5 +36,7 @@ void lv_ex_tabview_1(void)
label = lv_label_create(tab3, NULL);
lv_label_set_text(label, "Third tab");
lv_obj_scroll_to_view_recursive(label, LV_ANIM_ON);
}
#endif
@@ -2,7 +2,7 @@
#if LV_USE_TILEVIEW
/**
* Create a 2x2 tile view and allow scrolling on in an "L" shape.
* Create a 2x2 tile view and allow scrolling only in an "L" shape.
* Demonstrate scroll chaining with a long list that
* scrolls the tile view when it cant't be scrolled further.
*/
@@ -16,9 +16,21 @@ void lv_ex_tileview_1(void)
lv_label_set_text(label, "Scroll down");
lv_obj_align(label, NULL, LV_ALIGN_CENTER, 0, 0);
/*Tile2: a list*/
/*Tile2: a button*/
lv_obj_t * tile2 = lv_tileview_add_tile(tv, 0, 1, LV_DIR_TOP | LV_DIR_RIGHT);
lv_obj_t * list = lv_list_create(tile2);
lv_obj_t * btn = lv_btn_create(tile2, NULL);
label = lv_label_create(btn, NULL);
lv_label_set_text(label, "Scroll up or right");
lv_obj_set_size(btn, LV_SIZE_CONTENT, LV_SIZE_CONTENT);
lv_obj_align(btn, NULL, LV_ALIGN_CENTER, 0, 0);
/*Tile3: a list*/
lv_obj_t * tile3 = lv_tileview_add_tile(tv, 1, 1, LV_DIR_LEFT);
lv_obj_t * list = lv_list_create(tile3);
lv_obj_set_size(list, LV_COORD_PCT(100), LV_COORD_PCT(100));
lv_list_add_btn(list, NULL, "One", NULL);
@@ -29,15 +41,9 @@ void lv_ex_tileview_1(void)
lv_list_add_btn(list, NULL, "Six", NULL);
lv_list_add_btn(list, NULL, "Seven", NULL);
lv_list_add_btn(list, NULL, "Eight", NULL);
lv_list_add_btn(list, NULL, "Nine", NULL);
lv_list_add_btn(list, NULL, "Ten", NULL);
/*Tile3: a button*/
lv_obj_t * tile3 = lv_tileview_add_tile(tv, 1, 1, LV_DIR_LEFT);
lv_obj_t * btn = lv_btn_create(tile3, NULL);
lv_obj_align(btn, NULL, LV_ALIGN_CENTER, 0, 0);
label = lv_label_create(btn, NULL);
lv_label_set_text(label, "No scroll up");
lv_obj_align(label, NULL, LV_ALIGN_CENTER, 0, 0);
}
#endif
+5 -5
View File
@@ -6,17 +6,17 @@
static void event_handler(lv_obj_t * obj, lv_event_t event)
{
if(event == LV_EVENT_CLICKED) {
printf("Value: %d\n", lv_obj_get_child_id(obj));
printf("Button: %d\n", lv_obj_get_child_id(obj));
}
}
void lv_ex_win_1(void)
{
lv_obj_t * win = lv_win_create(lv_scr_act(), LV_SIZE_AUTO);
lv_win_add_btn(win, LV_SYMBOL_LEFT, 40, 40, event_handler);
lv_obj_t * win = lv_win_create(lv_scr_act(), 60);
lv_win_add_btn(win, LV_SYMBOL_LEFT, 40, event_handler);
lv_win_add_title(win, "A title");
lv_win_add_btn(win, LV_SYMBOL_RIGHT, 40, 40, event_handler);
lv_win_add_btn(win, LV_SYMBOL_CLOSE, 40, 40, event_handler);
lv_win_add_btn(win, LV_SYMBOL_RIGHT, 40, event_handler);
lv_win_add_btn(win, LV_SYMBOL_CLOSE, 60, event_handler);
lv_obj_t * cont = lv_win_get_content(win); /*Content can be aded here*/
lv_obj_t * label = lv_label_create(cont, NULL);
+3 -1
View File
@@ -1,6 +1,6 @@
/**
* @file lvgl.h
* Include all LittleV GL related headers
* Include all LVGL related headers
*/
#ifndef LVGL_H
@@ -77,6 +77,8 @@ extern "C" {
#include "src/extra/widgets/spinbox/lv_spinbox.h"
#include "src/extra/widgets/spinner/lv_spinner.h"
#include "src/extra/widgets/tabview/lv_tabview.h"
#include "src/extra/widgets/tileview/lv_tileview.h"
#include "src/extra/widgets/win/lv_win.h"
/* LAYOUTS */
#include "src/extra/layouts/flex/lv_flex.h"
+5 -3
View File
@@ -143,6 +143,8 @@ void lv_obj_set_flex_grow(struct _lv_obj_t * obj, uint8_t grow)
if(f->dir == LV_FLEX_FLOW_ROW) lv_obj_set_width(obj, (LV_COORD_SET_LAYOUT(grow)));
else lv_obj_set_height(obj, (LV_COORD_SET_LAYOUT(grow)));
lv_obj_update_layout(parent, obj);
}
/**********************
@@ -166,8 +168,8 @@ static void flex_update(lv_obj_t * cont, lv_obj_t * item)
lv_flex_place_t cross_place = f->track_cross_place;
lv_coord_t * cross_pos = (row ? &abs_y : &abs_x);
if((row && cont->h_set == LV_SIZE_AUTO) ||
(!row && cont->w_set == LV_SIZE_AUTO))
if((row && cont->h_set == LV_SIZE_CONTENT) ||
(!row && cont->w_set == LV_SIZE_CONTENT))
{
cross_place = LV_FLEX_PLACE_START;
}
@@ -241,7 +243,7 @@ static int32_t find_track_end(lv_obj_t * cont, int32_t item_start_id, lv_coord_t
bool row = f->dir == LV_FLEX_FLOW_ROW ? true : false;
bool wrap = f->wrap;
/*Can't wrap if the size if auto (i.e. the size depends on the children)*/
if(wrap && ((row && cont->w_set == LV_SIZE_AUTO) || (!row && cont->h_set == LV_SIZE_AUTO))) {
if(wrap && ((row && cont->w_set == LV_SIZE_CONTENT) || (!row && cont->h_set == LV_SIZE_CONTENT))) {
wrap = false;
}
lv_coord_t(*get_main_size)(const lv_obj_t *) = (row ? lv_obj_get_width : lv_obj_get_height);
+5 -5
View File
@@ -150,7 +150,7 @@ static void full_refresh(lv_obj_t * cont)
}
calc_free(&c);
if(cont->w_set == LV_SIZE_AUTO || cont->h_set == LV_SIZE_AUTO) {
if(cont->w_set == LV_SIZE_CONTENT || cont->h_set == LV_SIZE_CONTENT) {
lv_obj_set_size(cont, cont->w_set, cont->h_set);
}
}
@@ -196,11 +196,11 @@ static void calc(struct _lv_obj_t * cont, _lv_grid_calc_t * calc_out)
lv_coord_t row_gap = lv_obj_get_style_pad_row(cont, LV_PART_MAIN);
bool rev = lv_obj_get_base_dir(cont) == LV_BIDI_DIR_RTL ? true : false;
bool auto_w = cont->w_set == LV_SIZE_AUTO ? true : false;
bool auto_w = cont->w_set == LV_SIZE_CONTENT ? true : false;
lv_coord_t cont_w = lv_obj_get_width_fit(cont);
calc_out->grid_w = grid_place(cont_w, auto_w, g->col_place, col_gap, calc_out->col_num, calc_out->w, calc_out->x, rev);
bool auto_h = cont->h_set == LV_SIZE_AUTO ? true : false;
bool auto_h = cont->h_set == LV_SIZE_CONTENT ? true : false;
lv_coord_t cont_h = lv_obj_get_height_fit(cont);
calc_out->grid_h = grid_place(cont_h, auto_h, g->row_place, row_gap, calc_out->row_num, calc_out->h, calc_out->y, false);
@@ -232,7 +232,7 @@ static void calc_cols(lv_obj_t * cont, _lv_grid_calc_t * c)
uint32_t col_fr_cnt = 0;
lv_coord_t grid_w = 0;
bool auto_w = cont->w_set == LV_SIZE_AUTO ? true : false;
bool auto_w = cont->w_set == LV_SIZE_CONTENT ? true : false;
for(i = 0; i < c->col_num; i++) {
lv_coord_t x = grid->col_dsc[i];
@@ -271,7 +271,7 @@ static void calc_rows(lv_obj_t * cont, _lv_grid_calc_t * c)
uint32_t row_fr_cnt = 0;
lv_coord_t grid_h = 0;
bool auto_h = cont->h_set == LV_SIZE_AUTO ? true : false;
bool auto_h = cont->h_set == LV_SIZE_CONTENT ? true : false;
for(i = 0; i < grid->row_dsc_len; i++) {
+75 -27
View File
@@ -24,7 +24,8 @@
#define RADIUS_DEFAULT LV_DPX(8)
/*SCREEN*/
#define COLOR_SCR (IS_LIGHT ? lv_color_hex(0xf5f8fa) : lv_color_hex(0x444b5a))
//#define COLOR_SCR (IS_LIGHT ? lv_color_hex(0xf5f8fa) : lv_color_hex(0x444b5a))
#define COLOR_SCR (IS_LIGHT ? lv_color_hex(0xf3f6f7) : lv_color_hex(0x444b5a))
#define COLOR_SCR_TEXT (IS_LIGHT ? lv_color_hex(0x3b3e42) : lv_color_hex(0xe7e9ec))
/*BUTTON*/
@@ -62,7 +63,7 @@
#define COLOR_BG_TEXT_DIS (IS_LIGHT ? lv_color_hex3(0xaaa) : lv_color_hex3(0x999))
/*SECONDARY BACKGROUND*/
#define COLOR_GRAY (IS_LIGHT ? lv_color_hex(0xcfd2d4) : lv_color_hex(0x45494d))
#define COLOR_GRAY (IS_LIGHT ? lv_color_hex(0xcccfd1) : lv_color_hex(0x45494d))
#define COLOR_BG_SEC_BORDER (IS_LIGHT ? lv_color_hex(0xdfe7ed) : lv_color_hex(0x404040))
#define COLOR_BG_SEC_TEXT (IS_LIGHT ? lv_color_hex(0x31404f) : lv_color_hex(0xa5a8ad))
#define COLOR_BG_SEC_TEXT_DIS (IS_LIGHT ? lv_color_hex(0xaaaaaa) : lv_color_hex(0xa5a8ad))
@@ -89,7 +90,7 @@ typedef struct {
lv_style_t bg_color_primary;
lv_style_t bg_color_secondary;
lv_style_t bg_color_gray;
lv_style_t bg_color_white;
lv_style_t bg_color_panel;
lv_style_t pressed;
lv_style_t disabled;
lv_style_t pad_zero;
@@ -99,10 +100,8 @@ typedef struct {
lv_style_t pad_small_negative;
lv_style_t line_space_large;
lv_style_t text_align_center;
lv_style_t focus_border;
lv_style_t focus_outline;
lv_style_t edit_outline;
lv_style_t edit_border;
lv_style_t circle;
lv_style_t no_radius;
lv_style_t clip_corner;
@@ -110,7 +109,6 @@ typedef struct {
lv_style_t transition_delayed;
lv_style_t transition_normal;
lv_style_t anim;
lv_style_t line_dashed;
/*Parts*/
lv_style_t knob;
@@ -122,7 +120,7 @@ typedef struct {
#endif
#if LV_USE_CHART
lv_style_t chart_series, chart_ticks;
lv_style_t chart_series, chart_ticks, chart_bg;
#endif
#if LV_USE_CHECKBOX
@@ -239,12 +237,6 @@ static void style_init(void)
lv_style_set_line_color(&styles->card, COLOR_GRAY);
lv_style_set_line_width(&styles->card, LV_DPX(1));
style_init_reset(&styles->focus_border);
lv_style_set_border_color(&styles->focus_border, theme.color_primary);
style_init_reset(&styles->edit_border);
lv_style_set_border_color(&styles->edit_border, theme.color_secondary);
style_init_reset(&styles->focus_outline);
lv_style_set_outline_color(&styles->focus_outline, theme.color_primary);
lv_style_set_outline_width(&styles->focus_outline, OUTLINE_WIDTH);
@@ -321,11 +313,11 @@ static void style_init(void)
lv_style_set_text_color(&styles->bg_color_gray, CARD_TEXT_COLOR);
lv_style_set_content_color(&styles->bg_color_gray, CARD_TEXT_COLOR);
style_init_reset(&styles->bg_color_white);
lv_style_set_bg_color(&styles->bg_color_white, LV_COLOR_WHITE);
lv_style_set_bg_opa(&styles->bg_color_white, LV_OPA_COVER);
lv_style_set_text_color(&styles->bg_color_white, CARD_TEXT_COLOR);
lv_style_set_content_color(&styles->bg_color_white, CARD_TEXT_COLOR);
style_init_reset(&styles->bg_color_panel);
lv_style_set_bg_color(&styles->bg_color_panel, LV_COLOR_WHITE);
lv_style_set_bg_opa(&styles->bg_color_panel, LV_OPA_COVER);
lv_style_set_text_color(&styles->bg_color_panel, CARD_TEXT_COLOR);
lv_style_set_content_color(&styles->bg_color_panel, CARD_TEXT_COLOR);
style_init_reset(&styles->circle);
lv_style_set_radius(&styles->circle, LV_RADIUS_CIRCLE);
@@ -346,10 +338,6 @@ static void style_init(void)
style_init_reset(&styles->anim);
lv_style_set_anim_time(&styles->anim, 200);
style_init_reset(&styles->line_dashed);
lv_style_set_line_dash_width(&styles->line_dashed, LV_DPX(10));
lv_style_set_line_dash_gap(&styles->line_dashed, LV_DPX(10));
#if LV_USE_ARC
style_init_reset(&styles->arc_indic);
lv_style_set_arc_color(&styles->arc_indic, COLOR_GRAY);
@@ -381,6 +369,10 @@ static void style_init(void)
#endif
#if LV_USE_CHART
style_init_reset(&styles->chart_bg);
lv_style_set_line_dash_width(&styles->chart_bg, LV_DPX(10));
lv_style_set_line_dash_gap(&styles->chart_bg, LV_DPX(10));
style_init_reset(&styles->chart_series);
lv_style_set_line_width(&styles->chart_series, LV_DPX(3));
lv_style_set_radius(&styles->chart_series, LV_DPX(1));
@@ -499,6 +491,41 @@ static void theme_apply(lv_theme_t * th, lv_obj_t * obj)
}
if(lv_obj_check_type(obj, &lv_obj)) {
#if LV_USE_TABVIEW
lv_obj_t * parent = lv_obj_get_parent(obj);
/*Tabvew content area*/
if(lv_obj_check_type(parent, &lv_tabview)) {
lv_obj_add_style(obj, LV_PART_MAIN, LV_STATE_DEFAULT, &styles->bg_color_gray);
lv_obj_add_style(obj, LV_PART_MAIN, LV_STATE_DEFAULT, &styles->pad_gap);
return;
}
/*Tabview pages*/
else if(lv_obj_check_type(lv_obj_get_parent(parent), &lv_tabview)) {
lv_obj_add_style(obj, LV_PART_MAIN, LV_STATE_DEFAULT, &styles->scr);
lv_obj_add_style(obj, LV_PART_MAIN, LV_STATE_DEFAULT, &styles->pad_normal);
lv_obj_add_style(obj, LV_PART_SCROLLBAR, LV_STATE_DEFAULT, &styles->scrollbar);
lv_obj_add_style(obj, LV_PART_SCROLLBAR, LV_STATE_SCROLLED, &styles->scrollbar_scrolled);
return;
}
#endif
#if LV_USE_WIN
/*Header*/
if(lv_obj_get_child_id(obj) == 0 && lv_obj_check_type(lv_obj_get_parent(obj), &lv_win)) {
lv_obj_add_style(obj, LV_PART_MAIN, LV_STATE_DEFAULT, &styles->bg_color_gray);
lv_obj_add_style(obj, LV_PART_MAIN, LV_STATE_DEFAULT, &styles->pad_normal);
lv_obj_add_style(obj, LV_PART_MAIN, LV_STATE_DEFAULT, &styles->text_align_center);
return;
}
/*Content*/
else if(lv_obj_get_child_id(obj) == 1 && lv_obj_check_type(lv_obj_get_parent(obj), &lv_win)) {
lv_obj_add_style(obj, LV_PART_MAIN, LV_STATE_DEFAULT, &styles->scr);
lv_obj_add_style(obj, LV_PART_MAIN, LV_STATE_DEFAULT, &styles->pad_normal);
lv_obj_add_style(obj, LV_PART_SCROLLBAR, LV_STATE_DEFAULT, &styles->scrollbar);
lv_obj_add_style(obj, LV_PART_SCROLLBAR, LV_STATE_SCROLLED, &styles->scrollbar_scrolled);
return;
}
#endif
lv_obj_add_style(obj, LV_PART_MAIN, LV_STATE_DEFAULT, &styles->card);
lv_obj_add_style(obj, LV_PART_SCROLLBAR, LV_STATE_DEFAULT, &styles->scrollbar);
lv_obj_add_style(obj, LV_PART_SCROLLBAR, LV_STATE_SCROLLED, &styles->scrollbar_scrolled);
@@ -508,7 +535,7 @@ static void theme_apply(lv_theme_t * th, lv_obj_t * obj)
#if LV_USE_LIST
/*Add different buttons to the lists*/
if(lv_obj_check_type(lv_obj_get_parent(obj), &lv_list)) {
lv_obj_add_style(obj, LV_PART_MAIN, LV_STATE_DEFAULT, &styles->bg_color_white);
lv_obj_add_style(obj, LV_PART_MAIN, LV_STATE_DEFAULT, &styles->bg_color_panel);
lv_obj_add_style(obj, LV_PART_MAIN, LV_STATE_DEFAULT, &styles->list_btn);
lv_obj_add_style(obj, LV_PART_MAIN, LV_STATE_PRESSED, &styles->list_item_grow);
lv_obj_add_style(obj, LV_PART_MAIN, LV_STATE_PRESSED, &styles->pressed);
@@ -536,6 +563,15 @@ static void theme_apply(lv_theme_t * th, lv_obj_t * obj)
lv_obj_add_style(obj, LV_PART_ITEMS, LV_STATE_CHECKED, &styles->bg_color_primary);
return;
}
#endif
#if LV_USE_TABVIEW
if(lv_obj_check_type(lv_obj_get_parent(obj), &lv_tabview)) {
lv_obj_add_style(obj, LV_PART_MAIN, LV_STATE_DEFAULT, &styles->bg_color_panel);
lv_obj_add_style(obj, LV_PART_ITEMS, LV_STATE_DEFAULT, &styles->bg_color_gray);
lv_obj_add_style(obj, LV_PART_ITEMS, LV_STATE_PRESSED, &styles->pressed);
lv_obj_add_style(obj, LV_PART_ITEMS, LV_STATE_CHECKED, &styles->bg_color_panel);
return;
}
#endif
lv_obj_add_style(obj, LV_PART_MAIN, LV_STATE_DEFAULT, &styles->card);
lv_obj_add_style(obj, LV_PART_ITEMS, LV_STATE_DEFAULT, &styles->btn);
@@ -575,7 +611,7 @@ static void theme_apply(lv_theme_t * th, lv_obj_t * obj)
lv_obj_add_style(obj, LV_PART_MAIN, LV_STATE_DEFAULT, &styles->no_radius);
lv_obj_add_style(obj, LV_PART_SCROLLBAR, LV_STATE_DEFAULT, &styles->scrollbar);
lv_obj_add_style(obj, LV_PART_SCROLLBAR, LV_STATE_SCROLLED, &styles->scrollbar_scrolled);
lv_obj_add_style(obj, LV_PART_ITEMS, LV_STATE_DEFAULT, &styles->bg_color_white);
lv_obj_add_style(obj, LV_PART_ITEMS, LV_STATE_DEFAULT, &styles->bg_color_panel);
lv_obj_add_style(obj, LV_PART_ITEMS, LV_STATE_DEFAULT, &styles->table_cell);
lv_obj_add_style(obj, LV_PART_ITEMS, LV_STATE_DEFAULT, &styles->pad_normal);
}
@@ -604,7 +640,7 @@ static void theme_apply(lv_theme_t * th, lv_obj_t * obj)
lv_obj_add_style(obj, LV_PART_INDICATOR, LV_STATE_DEFAULT, &styles->circle);
lv_obj_add_style(obj, LV_PART_INDICATOR, LV_STATE_DISABLED, &styles->disabled);
lv_obj_add_style(obj, LV_PART_KNOB, LV_STATE_DEFAULT, &styles->knob);
lv_obj_add_style(obj, LV_PART_KNOB, LV_STATE_DEFAULT, &styles->bg_color_white);
lv_obj_add_style(obj, LV_PART_KNOB, LV_STATE_DEFAULT, &styles->bg_color_panel);
lv_obj_add_style(obj, LV_PART_KNOB, LV_STATE_DEFAULT, &styles->pad_small_negative);
lv_obj_add_style(obj, LV_PART_KNOB, LV_STATE_DISABLED, &styles->disabled);
}
@@ -613,7 +649,7 @@ static void theme_apply(lv_theme_t * th, lv_obj_t * obj)
#if LV_USE_CHART
else if(lv_obj_check_type(obj, &lv_chart)) {
lv_obj_add_style(obj, LV_PART_MAIN, LV_STATE_DEFAULT, &styles->card);
lv_obj_add_style(obj, LV_PART_MAIN, LV_STATE_DEFAULT, &styles->line_dashed);
lv_obj_add_style(obj, LV_PART_MAIN, LV_STATE_DEFAULT, &styles->chart_bg);
lv_obj_add_style(obj, LV_PART_MAIN, LV_STATE_DEFAULT, &styles->pad_small);
lv_obj_add_style(obj, LV_PART_SCROLLBAR, LV_STATE_DEFAULT, &styles->scrollbar);
lv_obj_add_style(obj, LV_PART_SCROLLBAR, LV_STATE_SCROLLED, &styles->scrollbar_scrolled);
@@ -688,6 +724,7 @@ static void theme_apply(lv_theme_t * th, lv_obj_t * obj)
lv_obj_add_style(obj, LV_PART_SCROLLBAR, LV_STATE_DEFAULT, &styles->scrollbar);
lv_obj_add_style(obj, LV_PART_SCROLLBAR, LV_STATE_SCROLLED, &styles->scrollbar_scrolled);
lv_obj_add_style(obj, LV_PART_MARKER, LV_STATE_FOCUSED, &styles->ta_cursor);
lv_obj_add_style(obj, LV_PART_TEXTAREA_PLACEHOLDER, LV_STATE_DEFAULT, &styles->ta_placeholder);
}
#endif
@@ -706,7 +743,7 @@ static void theme_apply(lv_theme_t * th, lv_obj_t * obj)
lv_obj_add_style(obj, LV_PART_MAIN, LV_STATE_DEFAULT, &styles->scr);
lv_obj_add_style(obj, LV_PART_MAIN, LV_STATE_DEFAULT, &styles->pad_small);
lv_obj_add_style(obj, LV_PART_ITEMS, LV_STATE_DEFAULT, &styles->btn);
lv_obj_add_style(obj, LV_PART_ITEMS, LV_STATE_DEFAULT, &styles->bg_color_white);
lv_obj_add_style(obj, LV_PART_ITEMS, LV_STATE_DEFAULT, &styles->bg_color_panel);
lv_obj_add_style(obj, LV_PART_ITEMS, LV_STATE_PRESSED, &styles->pressed);
lv_obj_add_style(obj, LV_PART_ITEMS, LV_STATE_CHECKED, &styles->bg_color_gray);
}
@@ -732,6 +769,17 @@ static void theme_apply(lv_theme_t * th, lv_obj_t * obj)
lv_obj_add_style(obj, LV_PART_MARKER, LV_STATE_DEFAULT, &styles->bg_color_gray);
}
#endif
#if LV_USE_TILEVIEW
else if(lv_obj_check_type(obj, &lv_tileview)) {
lv_obj_add_style(obj, LV_PART_MAIN, LV_STATE_DEFAULT, &styles->scr);
lv_obj_add_style(obj, LV_PART_SCROLLBAR, LV_STATE_DEFAULT, &styles->scrollbar);
lv_obj_add_style(obj, LV_PART_SCROLLBAR, LV_STATE_SCROLLED, &styles->scrollbar_scrolled);
}
else if(lv_obj_check_type(obj, &lv_tileview_tile)) {
lv_obj_add_style(obj, LV_PART_SCROLLBAR, LV_STATE_DEFAULT, &styles->scrollbar);
lv_obj_add_style(obj, LV_PART_SCROLLBAR, LV_STATE_SCROLLED, &styles->scrollbar_scrolled);
}
#endif
}
/**********************
-2
View File
@@ -209,8 +209,6 @@ bool lv_calendar_get_pressed_date(const lv_obj_t * obj, lv_calendar_date_t * dat
static void my_constructor(lv_obj_t * obj, lv_obj_t * parent, const lv_obj_t * copy)
{
lv_obj_construct_base(obj, parent, copy);
lv_calendar_t * calendar = (lv_calendar_t *) obj;
/*Initialize the allocated 'ext' */
@@ -45,7 +45,7 @@ lv_obj_t * lv_calendar_header_arrow_create(lv_obj_t * parent, lv_obj_t * calenda
const lv_calendar_date_t * cur_date = lv_calendar_get_showed_date(calendar);
lv_coord_t w = lv_obj_get_width(calendar);
lv_obj_set_size(header, w, LV_SIZE_AUTO);
lv_obj_set_size(header, w, LV_SIZE_CONTENT);
lv_obj_set_layout(header, &lv_flex_center_row);
lv_obj_t * mo_prev = lv_btn_create(header, NULL);
-2
View File
@@ -319,8 +319,6 @@ void lv_keyboard_def_event_cb(lv_obj_t * obj, lv_event_t event)
static void my_constructor(lv_obj_t * obj, lv_obj_t * parent, const lv_obj_t * copy)
{
lv_obj_construct_base(obj, parent, copy);
lv_obj_clear_flag(obj, LV_OBJ_FLAG_CLICK_FOCUSABLE);
lv_keyboard_t * keyboard = (lv_keyboard_t *) obj;
+1 -1
View File
@@ -56,7 +56,7 @@ lv_obj_t * lv_msgbox_create(const char * title, const char * txt, const char * b
lv_coord_t w = lv_obj_get_width_fit(parent);
if(w > 2 * LV_DPI_DEF) w = 2 * LV_DPI_DEF;
lv_obj_set_size(mbox, w, LV_SIZE_AUTO);
lv_obj_set_size(mbox, w, LV_SIZE_CONTENT);
lv_obj_set_layout(mbox, &lv_flex_inline);
lv_obj_t * label;
-2
View File
@@ -269,8 +269,6 @@ static void lv_spinbox_constructor(lv_obj_t * obj, lv_obj_t * parent, const lv_o
{
LV_LOG_TRACE("spinbox create started");
lv_obj_construct_base(obj, parent, copy);
lv_spinbox_t * spinbox = (lv_spinbox_t *) obj;
-1
View File
@@ -145,7 +145,6 @@ lv_obj_t * lv_tabview_get_tab_btns(lv_obj_t * tv)
static void lv_tabview_constructor(lv_obj_t * obj, lv_obj_t * parent, const lv_obj_t * copy)
{
lv_obj_construct_base(obj, parent, copy);
lv_tabview_t * tabview = (lv_tabview_t *) obj;
// lv_flex_flow_t flex_dir;
+2
View File
@@ -32,6 +32,8 @@ typedef struct
uint16_t tab_cur;
}lv_tabview_t;
extern const lv_obj_class_t lv_tabview;
/**********************
* GLOBAL PROTOTYPES
**********************/
+63 -65
View File
@@ -16,22 +16,29 @@
/**********************
* TYPEDEFS
**********************/
typedef struct
{
lv_dir_t dir;
}lv_tile_ext_t;
/**********************
* STATIC PROTOTYPES
**********************/
static void lv_tileview_constructor(lv_obj_t * obj, lv_obj_t * parent, const lv_obj_t * copy);
static void lv_tileview_tile_constructor(lv_obj_t * obj, lv_obj_t * parent, const lv_obj_t * copy);
static void tileview_event_cb(lv_obj_t * tv, lv_event_t e);
/**********************
* STATIC VARIABLES
**********************/
static bool inited;
static lv_style_t style_bg;
static lv_style_t style_tile;
const lv_obj_class_t lv_tileview = {.constructor_cb = lv_tileview_constructor,
.base_class = &lv_obj,
.instance_size = sizeof(lv_tileview_t)};
const lv_obj_class_t lv_tileview_tile = {.constructor_cb = lv_tileview_tile_constructor,
.base_class = &lv_obj,
.instance_size = sizeof(lv_tileview_tile_t)};
static lv_dir_t create_dir;
static uint32_t create_col_id;
static uint32_t create_row_id;
/**********************
* MACROS
@@ -49,26 +56,7 @@ static lv_style_t style_tile;
*/
lv_obj_t * lv_tileview_create(lv_obj_t * parent)
{
if(!inited) {
lv_style_init(&style_bg);
lv_style_set_radius(&style_bg, LV_STATE_DEFAULT, 0);
lv_style_set_pad_all(&style_bg, LV_STATE_DEFAULT, 0);
lv_style_init(&style_tile);
lv_style_set_radius(&style_tile, LV_STATE_DEFAULT, 0);
}
lv_obj_t * tileview = lv_obj_create(parent, NULL);
LV_ASSERT_MEM(tileview);
if(tileview == NULL) return NULL;
lv_obj_add_style(tileview, LV_OBJ_PART_MAIN, &style_bg);
lv_obj_set_size(tileview, LV_COORD_PCT(100), LV_COORD_PCT(100));
lv_obj_set_event_cb(tileview, tileview_event_cb);
lv_obj_add_flag(tileview, LV_OBJ_FLAG_SCROLL_STOP);
lv_obj_set_snap_align_x(tileview, LV_SCROLL_SNAP_ALIGN_CENTER);
lv_obj_set_snap_align_y(tileview, LV_SCROLL_SNAP_ALIGN_CENTER);
return tileview;
return lv_obj_create_from_class(&lv_tileview, parent, NULL);
}
/*======================
@@ -77,29 +65,19 @@ lv_obj_t * lv_tileview_create(lv_obj_t * parent)
lv_obj_t * lv_tileview_add_tile(lv_obj_t * tv, uint8_t col_id, uint8_t row_id, lv_dir_t dir)
{
lv_obj_t * tile = lv_obj_create(tv, NULL);
lv_obj_set_size(tile, LV_COORD_PCT(100), LV_COORD_PCT(100));
lv_obj_set_pos(tile, col_id * lv_obj_get_width_fit(tv), row_id * lv_obj_get_height_fit(tv));
lv_obj_add_style(tile, LV_OBJ_PART_MAIN, &style_tile);
lv_tile_ext_t * ext = lv_obj_allocate_ext_attr(tile, sizeof(lv_tile_ext_t));
ext->dir = dir;
if(col_id == 0 && row_id == 0) {
lv_obj_set_scroll_dir(tv, dir);
}
return tile;
create_dir = dir;
create_col_id = col_id;
create_row_id = row_id;
return lv_obj_create_from_class(&lv_tileview_tile, tv, NULL);
}
void lv_obj_set_tile(lv_obj_t * tv, lv_obj_t * tile, lv_anim_enable_t anim_en)
void lv_obj_set_tile(lv_obj_t * tv, lv_obj_t * tile_obj, lv_anim_enable_t anim_en)
{
lv_coord_t tx = lv_obj_get_x(tile);
lv_coord_t ty = lv_obj_get_y(tile);
lv_coord_t tx = lv_obj_get_x(tile_obj);
lv_coord_t ty = lv_obj_get_y(tile_obj);
lv_tile_ext_t * ext = lv_obj_get_ext_attr(tile);
lv_obj_set_scroll_dir(tv, ext->dir);
lv_tileview_tile_t * tile = (lv_tileview_tile_t *) tile_obj;
lv_obj_set_scroll_dir(tv, tile->dir);
lv_obj_scroll_to(tv, tx, ty, anim_en);
}
@@ -111,26 +89,47 @@ void lv_obj_set_tile_id(lv_obj_t * tv, uint32_t col_id, uint32_t row_id, lv_anim
lv_coord_t tx = col_id * w;
lv_coord_t ty = row_id * h;
lv_dir_t dir = LV_DIR_ALL;
lv_obj_t * tile = lv_obj_get_child(tv, NULL);
while(tile) {
lv_coord_t x = lv_obj_get_x(tile);
lv_coord_t y = lv_obj_get_y(tile);
uint32_t i;
for(i = 0; i < lv_obj_get_child_cnt(tv); i++) {
lv_obj_t * tile_obj = lv_obj_get_child(tv, i);
lv_coord_t x = lv_obj_get_x(tile_obj);
lv_coord_t y = lv_obj_get_y(tile_obj);
if(x == tx && y == ty) {
lv_tile_ext_t * ext = lv_obj_get_ext_attr(tile);
dir = ext->dir;
break;
lv_obj_set_tile(tv, tile_obj, anim_en);
return;
}
tile = lv_obj_get_child(tv, tile);
}
lv_obj_set_scroll_dir(tv, dir);
lv_obj_scroll_to(tv, tx, ty, anim_en);
LV_LOG_WARN("No tile found with at (%d,%d) index", col_id, row_id);
}
/**********************
* STATIC FUNCTIONS
**********************/
static void lv_tileview_constructor(lv_obj_t * obj, lv_obj_t * parent, const lv_obj_t * copy)
{
lv_obj_set_size(obj, LV_COORD_PCT(100), LV_COORD_PCT(100));
lv_obj_add_event_cb(obj, tileview_event_cb, NULL);
lv_obj_add_flag(obj, LV_OBJ_FLAG_SCROLL_ONE);
lv_obj_set_snap_align_x(obj, LV_SCROLL_SNAP_ALIGN_CENTER);
lv_obj_set_snap_align_y(obj, LV_SCROLL_SNAP_ALIGN_CENTER);
}
static void lv_tileview_tile_constructor(lv_obj_t * obj, lv_obj_t * parent, const lv_obj_t * copy)
{
lv_obj_set_size(obj, LV_COORD_PCT(100), LV_COORD_PCT(100));
lv_obj_set_pos(obj, create_col_id * lv_obj_get_width_fit(parent), create_row_id * lv_obj_get_height_fit(parent));
lv_tileview_tile_t * tile = (lv_tileview_tile_t *) obj;
tile->dir = create_dir;
if(create_col_id == 0 && create_row_id == 0) {
lv_obj_set_scroll_dir(parent, create_dir);
}
}
static void tileview_event_cb(lv_obj_t * tv, lv_event_t e)
{
if(e == LV_EVENT_SCROLL_END) {
@@ -147,18 +146,17 @@ static void tileview_event_cb(lv_obj_t * tv, lv_event_t e)
lv_dir_t dir = LV_DIR_ALL;
lv_obj_t * tile = lv_obj_get_child(tv, NULL);
while(tile) {
lv_coord_t x = lv_obj_get_x(tile);
lv_coord_t y = lv_obj_get_y(tile);
uint32_t i;
for(i = 0; i < lv_obj_get_child_cnt(tv); i++) {
lv_obj_t * tile_obj = lv_obj_get_child(tv, i);
lv_coord_t x = lv_obj_get_x(tile_obj);
lv_coord_t y = lv_obj_get_y(tile_obj);
if(x == tx && y == ty) {
lv_tile_ext_t * ext = lv_obj_get_ext_attr(tile);
dir = ext->dir;
lv_tileview_tile_t * tile = (lv_tileview_tile_t *) tile_obj;
dir = tile->dir;
break;
}
tile = lv_obj_get_child(tv, tile);
}
lv_obj_set_scroll_dir(tv, dir);
}
}
+11
View File
@@ -24,6 +24,17 @@ extern "C" {
/**********************
* TYPEDEFS
**********************/
typedef struct {
lv_obj_t obj;
}lv_tileview_t;
typedef struct {
lv_obj_t obj;
lv_dir_t dir;
}lv_tileview_tile_t;
extern const lv_obj_class_t lv_tileview;
extern const lv_obj_class_t lv_tileview_tile;
/**********************
* GLOBAL PROTOTYPES
+27 -36
View File
@@ -9,6 +9,7 @@
#include "lv_win.h"
#if LV_USE_WIN
/*********************
* DEFINES
*********************/
@@ -20,12 +21,13 @@
/**********************
* STATIC PROTOTYPES
**********************/
static void lv_win_constructor(lv_obj_t * obj, lv_obj_t * parent, const lv_obj_t * copy);
/**********************
* STATIC VARIABLES
**********************/
static bool inited = false;
const lv_obj_class_t lv_win = {.constructor_cb = lv_win_constructor, .base_class = &lv_obj, .instance_size = sizeof(lv_win_t)};
static lv_coord_t create_header_height;
/**********************
* MACROS
**********************/
@@ -36,52 +38,26 @@ static bool inited = false;
lv_obj_t * lv_win_create(lv_obj_t * parent, lv_coord_t header_height)
{
static lv_style_t style_plain;
if(!inited) {
lv_style_init(&style_plain);
lv_style_set_radius(&style_plain, LV_STATE_DEFAULT, 0);
inited = true;
}
lv_obj_t * win = lv_obj_create(parent, NULL);
lv_obj_set_size(win, lv_obj_get_width(parent), lv_obj_get_height(parent));
lv_obj_set_flex_dir(win, LV_FLEX_DIR_COLUMN);
lv_obj_reset_style_list(win, LV_OBJ_PART_MAIN);
lv_obj_t * header = lv_obj_create(win, NULL);
lv_obj_set_flex_item(header, true);
lv_obj_set_size(header, LV_COORD_PCT(100), header_height);
lv_obj_set_flex_dir(header, LV_FLEX_DIR_ROW);
lv_obj_set_flex_place(header, LV_FLEX_PLACE_START, LV_FLEX_PLACE_CENTER);
// lv_obj_set_flex_gap(header, LV_DPX(2));
lv_obj_add_style(header, LV_OBJ_PART_MAIN, &style_plain);
lv_obj_t * cont = lv_obj_create(win, NULL);
lv_obj_set_flex_item(cont, true);
lv_obj_set_size(cont, LV_COORD_PCT(100), LV_FLEX_GROW(1));
lv_obj_add_style(cont, LV_OBJ_PART_MAIN, &style_plain);
return win;
create_header_height = header_height;
return lv_obj_create_from_class(&lv_win, parent, NULL);
}
lv_obj_t * lv_win_add_title(lv_obj_t * win, const char * txt)
{
lv_obj_t * header = lv_win_get_header(win);
lv_obj_t * title = lv_label_create(header, NULL);
lv_obj_set_flex_item(title, LV_FLEX_PLACE_CENTER);
lv_label_set_long_mode(title, LV_LABEL_LONG_DOT);
lv_label_set_text(title, txt);
lv_obj_set_width(title, LV_FLEX_GROW(1));
lv_obj_set_flex_grow(title, 1);
return title;
}
lv_obj_t * lv_win_add_btn(lv_obj_t * win, const void * icon, lv_coord_t btn_w, lv_coord_t btn_h, lv_event_cb_t event_cb)
lv_obj_t * lv_win_add_btn(lv_obj_t * win, const void * icon, lv_coord_t btn_w, lv_event_cb_t event_cb)
{
lv_obj_t * header = lv_win_get_header(win);
lv_obj_t * btn = lv_btn_create(header, NULL);
lv_obj_set_size(btn, btn_w, btn_h);
lv_obj_set_flex_item(btn, LV_FLEX_PLACE_CENTER);
lv_obj_set_event_cb(btn, event_cb);
lv_obj_set_size(btn, btn_w, LV_COORD_PCT(100));
lv_obj_add_event_cb(btn, event_cb, NULL);
lv_obj_t * img = lv_img_create(btn, NULL);
lv_img_set_src(img, icon);
@@ -92,16 +68,31 @@ lv_obj_t * lv_win_add_btn(lv_obj_t * win, const void * icon, lv_coord_t btn_w, l
lv_obj_t * lv_win_get_header(lv_obj_t * win)
{
return lv_obj_get_child_back(win, NULL);
return lv_obj_get_child(win, 0);
}
lv_obj_t * lv_win_get_content(lv_obj_t * win)
{
return lv_obj_get_child(win, NULL);
return lv_obj_get_child(win, 1);
}
/**********************
* STATIC FUNCTIONS
**********************/
static void lv_win_constructor(lv_obj_t * obj, lv_obj_t * parent, const lv_obj_t * copy)
{
lv_obj_set_size(obj, lv_obj_get_width(parent), lv_obj_get_height(parent));
lv_obj_set_layout(obj, &lv_flex_stacked);
lv_obj_t * header = lv_obj_create(obj, NULL);
lv_obj_set_size(header, LV_COORD_PCT(100), create_header_height);
lv_obj_set_layout(header, &lv_flex_inline);
lv_obj_t * cont = lv_obj_create(obj, NULL);
lv_obj_set_flex_grow(cont, 1);
lv_obj_set_width(cont, LV_COORD_PCT(100));
}
#endif
+7 -2
View File
@@ -13,7 +13,7 @@ extern "C" {
/*********************
* INCLUDES
*********************/
#include "../../../lv_core/lv_obj.h"
#include "../../../lvgl.h"
/*********************
* DEFINES
@@ -22,6 +22,11 @@ extern "C" {
/**********************
* TYPEDEFS
**********************/
typedef struct {
lv_obj_t obj;
}lv_win_t;
extern const lv_obj_class_t lv_win;
/**********************
* GLOBAL PROTOTYPES
@@ -31,7 +36,7 @@ lv_obj_t * lv_win_create(lv_obj_t * parent, lv_coord_t header_height);
lv_obj_t * lv_win_add_title(lv_obj_t * win, const char * txt);
lv_obj_t * lv_win_add_btn(lv_obj_t * win, const void * icon, lv_coord_t btn_w, lv_coord_t btn_h, lv_event_cb_t event_cb);
lv_obj_t * lv_win_add_btn(lv_obj_t * win, const void * icon, lv_coord_t btn_w, lv_event_cb_t event_cb);
lv_obj_t * lv_win_get_header(lv_obj_t * win);
lv_obj_t * lv_win_get_content(lv_obj_t * win);
+4 -4
View File
@@ -82,9 +82,9 @@ void lv_indev_scroll_handler(lv_indev_proc_t * proc)
}
lv_dir_t scroll_dir = lv_obj_get_scroll_dir(scroll_obj);
if((scroll_dir & LV_DIR_LEFT) == 0 && diff_x > 0) diff_x = 0;
if((scroll_dir & LV_DIR_RIGHT) == 0 && diff_x < 0) diff_x = 0;
if((scroll_dir & LV_DIR_TOP) == 0 && diff_y > 0) diff_y = 0;
if((scroll_dir & LV_DIR_LEFT) == 0 && diff_x > 0) diff_x = 0;
if((scroll_dir & LV_DIR_RIGHT) == 0 && diff_x < 0) diff_x = 0;
if((scroll_dir & LV_DIR_TOP) == 0 && diff_y > 0) diff_y = 0;
if((scroll_dir & LV_DIR_BOTTOM) == 0 && diff_y < 0) diff_y = 0;
/*Respect the scroll limit area*/
@@ -552,7 +552,7 @@ static lv_coord_t elastic_diff(lv_obj_t * obj, lv_coord_t diff, lv_coord_t scrol
if(lv_obj_has_flag(obj, LV_OBJ_FLAG_SCROLL_ELASTIC)) {
/*Elastic scroll if scrolled in*/
if(scroll_end < 0) diff = (diff + ELASTIC_SLOWNESS_FACTOR / 2) / ELASTIC_SLOWNESS_FACTOR;
else if(scroll_start < 0) diff = (diff + ELASTIC_SLOWNESS_FACTOR / 2) / ELASTIC_SLOWNESS_FACTOR;
else if(scroll_start < 0) diff = (diff - ELASTIC_SLOWNESS_FACTOR / 2) / ELASTIC_SLOWNESS_FACTOR;
} else {
/*Scroll back to the boundary id required*/
if(scroll_end + diff < 0) diff = - scroll_end;
+3 -2
View File
@@ -552,6 +552,7 @@ lv_obj_t * lv_obj_get_focused_obj(const lv_obj_t * obj)
bool lv_obj_check_type(const lv_obj_t * obj, const void * class_p)
{
if(obj == NULL) return false;
return obj->class_p == class_p ? true : false;
}
@@ -1074,7 +1075,7 @@ static lv_res_t lv_obj_signal(lv_obj_t * obj, lv_signal_t sign, void * param)
else if(sign == LV_SIGNAL_CHILD_CHG) {
lv_obj_update_layout(obj, param);
if(obj->w_set == LV_SIZE_AUTO || obj->h_set == LV_SIZE_AUTO) {
if(obj->w_set == LV_SIZE_CONTENT || obj->h_set == LV_SIZE_CONTENT) {
lv_obj_set_size(obj, obj->w_set, obj->h_set);
}
}
@@ -1110,7 +1111,7 @@ static lv_res_t lv_obj_signal(lv_obj_t * obj, lv_signal_t sign, void * param)
}
}
if(obj->w_set == LV_SIZE_AUTO || obj->h_set == LV_SIZE_AUTO) {
if(obj->w_set == LV_SIZE_CONTENT || obj->h_set == LV_SIZE_CONTENT) {
lv_obj_set_size(obj, obj->w_set, obj->h_set);
}
lv_obj_refresh_ext_draw_size(obj);
+4 -5
View File
@@ -168,7 +168,6 @@ enum {
LV_PART_INDICATOR, /**< Indicator, e.g. for slider, bar, switch, */
LV_PART_KNOB, /**< Like handle to grab to adjust the value */
LV_PART_SELECTED, /**< Indicate the currently selected option or section*/
LV_PART_PLACEHOLDER, /**< A text other element used when the widget is empty*/
LV_PART_ITEMS, /**< Used if the widget has multiple similar elements (e.g. tabel cells)*/
LV_PART_MARKER, /**< Tick box of a check box, cursor of a text area or anything used to mark something*/
@@ -194,16 +193,16 @@ enum {
LV_OBJ_FLAG_SCROLLABLE = (1 << 4), /**< Make the object scrollable*/
LV_OBJ_FLAG_SCROLL_ELASTIC = (1 << 5), /**< Allow scrolling inside but with slower speed*/
LV_OBJ_FLAG_SCROLL_MOMENTUM = (1 << 6), /**< Make the object scroll further when "thrown"*/
LV_OBJ_FLAG_SCROLL_ONE = (1 << 7), /**< Allow scrolling only one snappable children*/
LV_OBJ_FLAG_SCROLL_ONE = (1 << 7), /**< Allow scrolling only one snapable children*/
LV_OBJ_FLAG_SCROLL_CHAIN = (1 << 8), /**< Allow propagating the scroll to a parent */
LV_OBJ_FLAG_SCROLL_ON_FOCUS = (1 << 9), /**< Automatically scroll object to make it visible when focused*/
LV_OBJ_FLAG_SNAPABLE = (1 << 10), /**< If scroll snap is enabled it can snap to this object*/
LV_OBJ_FLAG_SNAPABLE = (1 << 10), /**< If scroll snap is enabled on the parent it can snap to this object*/
LV_OBJ_FLAG_PRESS_LOCK = (1 << 11), /**< Keep the object pressed even if the press slid from the object */
LV_OBJ_FLAG_EVENT_BUBBLE = (1 << 12), /**< Propagate the events to the parent too */
LV_OBJ_FLAG_GESTURE_BUBBLE = (1 << 13), /**< Propagate the gestures to the parent */
LV_OBJ_FLAG_FOCUS_BUBBLE = (1 << 14), /**< Propagate the focus to the parent */
LV_OBJ_FLAG_ADV_HITTEST = (1 << 15), /**< Allow performing more accurate hit (click) test. E.g. on rounded corners. */
LV_OBJ_FLAG_LAYOUTABLE = (1 << 16), /**< MAke the object position-able by the layouts */
LV_OBJ_FLAG_ADV_HITTEST = (1 << 15), /**< Allow performing more accurate hit (click) test. E.g. consider rounded corners. */
LV_OBJ_FLAG_LAYOUTABLE = (1 << 16), /**< Make the object position-able by the layouts */
LV_OBJ_FLAG_LAYOUT_1 = (1 << 24), /** Custom flag, free to use by layouts*/
LV_OBJ_FLAG_LAYOUT_2 = (1 << 25), /** Custom flag, free to use by layouts*/
+22 -15
View File
@@ -24,6 +24,7 @@
/**********************
* STATIC PROTOTYPES
**********************/
static void lv_obj_construct(lv_obj_t * obj, lv_obj_t * parent, const lv_obj_t * copy);
static uint32_t get_instance_size(const lv_obj_class_t * class_p);
/**********************
@@ -49,27 +50,14 @@ lv_obj_t * lv_obj_create_from_class(const lv_obj_class_t * class_p, lv_obj_t * p
while(class_start && class_start->constructor_cb == NULL) class_start = class_start->base_class;
class_start->constructor_cb(obj, parent, copy);
// class_start->constructor_cb(obj, parent, copy);
lv_obj_construct(obj, parent, copy);
if(!copy) lv_theme_apply(obj);
// else lv_style_list_copy(&checkbox->style_indic, &checkbox_copy->style_indic);
return obj;
}
void lv_obj_construct_base(lv_obj_t * obj, lv_obj_t * parent, const lv_obj_t * copy)
{
const lv_obj_class_t * original_class_p = obj->class_p;
/*Don't let the descendant methods run during constructing the ancestor type*/
obj->class_p = obj->class_p->base_class;
obj->class_p->constructor_cb(obj, parent, copy);
/*Restore the original class*/
obj->class_p = original_class_p;
}
lv_res_t lv_obj_signal_base(const lv_obj_class_t * class_p, struct _lv_obj_t * obj, lv_signal_t sign, void * param)
{
@@ -116,6 +104,25 @@ bool lv_obj_is_editable(struct _lv_obj_t * obj)
* STATIC FUNCTIONS
**********************/
static void lv_obj_construct(lv_obj_t * obj, lv_obj_t * parent, const lv_obj_t * copy)
{
const lv_obj_class_t * original_class_p = obj->class_p;
if(obj->class_p->base_class) {
/*Don't let the descendant methods run during constructing the ancestor type*/
obj->class_p = obj->class_p->base_class;
/*Construct the base first*/
lv_obj_construct(obj, parent, copy);
}
/*Restore the original class*/
obj->class_p = original_class_p;
if(obj->class_p->constructor_cb) obj->class_p->constructor_cb(obj, parent, copy);
}
static uint32_t get_instance_size(const lv_obj_class_t * class_p)
{
/*Find a base in which instance size is set*/
-9
View File
@@ -60,15 +60,6 @@ typedef struct _lv_obj_class_t{
*/
struct _lv_obj_t * lv_obj_create_from_class(const struct _lv_obj_class_t * class_p, struct _lv_obj_t * parent, const struct _lv_obj_t * copy);
/**
* Used internally in widget's constructor to construct the base type
* @param obj pointer to the object being constructed
* @param parent pointer to the parent
* @param copy pointer to the object to copy (DEPRECATED will be removed in v9)
*/
void lv_obj_construct_base(struct _lv_obj_t * obj, struct _lv_obj_t * parent, const struct _lv_obj_t * copy);
lv_res_t lv_obj_signal_base(const lv_obj_class_t * class_p, struct _lv_obj_t * obj, lv_signal_t sign, void * param);
lv_draw_res_t lv_obj_draw_base(const lv_obj_class_t * class_p, struct _lv_obj_t * obj, const lv_area_t * clip_area, lv_draw_mode_t mode);
+14 -158
View File
@@ -38,12 +38,6 @@ void lv_obj_move_children_by(lv_obj_t * obj, lv_coord_t x_diff, lv_coord_t y_dif
* GLOBAL FUNCTIONS
**********************/
/**
* Set the relative the position of an object (relative to the parent's top left corner)
* @param obj: pointer to an object
* @param x: new distance from the left side of the parent plus the parent's left padding
* @param y: new distance from the top side of the parent plus the parent's right padding
*/
void lv_obj_set_pos(lv_obj_t * obj, lv_coord_t x, lv_coord_t y)
{
LV_ASSERT_OBJ(obj, MY_CLASS);
@@ -59,11 +53,6 @@ void lv_obj_set_pos(lv_obj_t * obj, lv_coord_t x, lv_coord_t y)
lv_obj_move_to(obj, x, y, true);
}
/**
* Set the x coordinate of a object
* @param obj: pointer to an object
* @param x: new distance from the left side from the parent plus the parent's left padding
*/
void lv_obj_set_x(lv_obj_t * obj, lv_coord_t x)
{
LV_ASSERT_OBJ(obj, MY_CLASS);
@@ -71,11 +60,6 @@ void lv_obj_set_x(lv_obj_t * obj, lv_coord_t x)
lv_obj_set_pos(obj, x, obj->y_set);
}
/**
* Set the y coordinate of a object
* @param obj: pointer to an object
* @param y: new distance from the top of the parent plus the parent's top padding
*/
void lv_obj_set_y(lv_obj_t * obj, lv_coord_t y)
{
LV_ASSERT_OBJ(obj, MY_CLASS);
@@ -83,12 +67,6 @@ void lv_obj_set_y(lv_obj_t * obj, lv_coord_t y)
lv_obj_set_pos(obj, obj->x_set, y);
}
/**
* Set the size of an object.
* @param obj: pointer to an object
* @param w: new width in pixels or `LV_SIZE_AUTO` to set the size to involve all children
* @param h: new height in pixels or `LV_SIZE_AUTO` to set the size to involve all children
*/
void lv_obj_set_size(lv_obj_t * obj, lv_coord_t w, lv_coord_t h)
{
LV_ASSERT_OBJ(obj, MY_CLASS);
@@ -107,16 +85,16 @@ void lv_obj_set_size(lv_obj_t * obj, lv_coord_t w, lv_coord_t h)
if(LV_COORD_IS_LAYOUT(h)) h = lv_obj_get_height(obj);
/*Calculate the required auto sizes*/
bool x_auto = obj->w_set == LV_SIZE_AUTO ? true : false;
bool y_auto = obj->h_set == LV_SIZE_AUTO ? true : false;
bool w_content = obj->w_set == LV_SIZE_CONTENT ? true : false;
bool h_content = obj->h_set == LV_SIZE_CONTENT ? true : false;
/*Be sure the object is not scrolled when it has auto size*/
if(x_auto) lv_obj_scroll_to_x(obj, 0, LV_ANIM_OFF);
if(y_auto) lv_obj_scroll_to_y(obj, 0, LV_ANIM_OFF);
if(w_content) lv_obj_scroll_to_x(obj, 0, LV_ANIM_OFF);
if(h_content) lv_obj_scroll_to_y(obj, 0, LV_ANIM_OFF);
if(x_auto && y_auto) calc_auto_size(obj, &w, &h);
else if(x_auto) calc_auto_size(obj, &w, NULL);
else if(y_auto) calc_auto_size(obj, NULL, &h);
if(w_content && h_content) calc_auto_size(obj, &w, &h);
else if(w_content) calc_auto_size(obj, &w, NULL);
else if(h_content) calc_auto_size(obj, NULL, &h);
/*Calculate the required auto sizes*/
bool pct_w = LV_COORD_IS_PCT(obj->w_set) ? true : false;
@@ -133,11 +111,6 @@ void lv_obj_set_size(lv_obj_t * obj, lv_coord_t w, lv_coord_t h)
refr_size(obj, w, h);
}
/**
* Set the width of an object
* @param obj: pointer to an object
* @param w: new width in pixels or `LV_SIZE_AUTO` to set the size to involve all children
*/
void lv_obj_set_width(lv_obj_t * obj, lv_coord_t w)
{
LV_ASSERT_OBJ(obj, MY_CLASS);
@@ -145,11 +118,6 @@ void lv_obj_set_width(lv_obj_t * obj, lv_coord_t w)
lv_obj_set_size(obj, w, obj->h_set);
}
/**
* Set the height of an object
* @param obj: pointer to an object
* @param h: new height in pixels or `LV_SIZE_AUTO` to set the size to involve all children
*/
void lv_obj_set_height(lv_obj_t * obj, lv_coord_t h)
{
LV_ASSERT_OBJ(obj, MY_CLASS);
@@ -157,11 +125,6 @@ void lv_obj_set_height(lv_obj_t * obj, lv_coord_t h)
lv_obj_set_size(obj, obj->w_set, h);
}
/**
* Set the width reduced by the left and right padding.
* @param obj: pointer to an object
* @param w: the width without paddings in pixels
*/
void lv_obj_set_content_width(lv_obj_t * obj, lv_coord_t w)
{
lv_coord_t pleft = lv_obj_get_style_pad_left(obj, LV_PART_MAIN);
@@ -170,11 +133,6 @@ void lv_obj_set_content_width(lv_obj_t * obj, lv_coord_t w)
lv_obj_set_width(obj, w + pleft + pright);
}
/**
* Set the height reduced by the top and bottom padding.
* @param obj: pointer to an object
* @param h: the height without paddings in pixels
*/
void lv_obj_set_content_height(lv_obj_t * obj, lv_coord_t h)
{
lv_coord_t ptop = lv_obj_get_style_pad_top(obj, LV_PART_MAIN);
@@ -183,11 +141,6 @@ void lv_obj_set_content_height(lv_obj_t * obj, lv_coord_t h)
lv_obj_set_height(obj, h + ptop + pbottom);
}
/**
* Set a layout for an object
* @param obj: pointer to an object
* @param layout: pointer to a layout descriptor to set
*/
void lv_obj_set_layout(lv_obj_t * obj, const void * layout)
{
LV_ASSERT_OBJ(obj, MY_CLASS);
@@ -198,11 +151,6 @@ void lv_obj_set_layout(lv_obj_t * obj, const void * layout)
lv_obj_update_layout(obj, NULL);
}
/**
* Test whether the and object is positioned by a layout or not
* @param obj: pointer to an object to test
* @return true: positioned by a layout; false: not positioned by a layout
*/
bool lv_obj_is_layout_positioned(const lv_obj_t * obj)
{
if(lv_obj_has_flag(obj, LV_OBJ_FLAG_LAYOUTABLE) == false) return false;
@@ -213,32 +161,17 @@ bool lv_obj_is_layout_positioned(const lv_obj_t * obj)
else return false;
}
/**
* Update the layout of an object.
* @param cont: pointer to an object whose children needs to be updated
* @param item: pointer to a child object that triggered the update. Set to `NULL` is not known.
* If not `NULL` the update process should make some optimization
* to update only the required parts of the layout
*/
void lv_obj_update_layout(lv_obj_t * cont, lv_obj_t * item)
void lv_obj_update_layout(lv_obj_t * obj, lv_obj_t * item)
{
if(cont->spec_attr == NULL) return;
if(cont->spec_attr->layout_dsc == NULL) return;
if(cont->spec_attr->child_cnt == 0) return;
if(obj->spec_attr == NULL) return;
if(obj->spec_attr->layout_dsc == NULL) return;
if(obj->spec_attr->child_cnt == 0) return;
const lv_layout_dsc_t * layout = cont->spec_attr->layout_dsc;
const lv_layout_dsc_t * layout = obj->spec_attr->layout_dsc;
if(layout->update_cb == NULL) return;
layout->update_cb(cont, item);
layout->update_cb(obj, item);
}
/**
* Align an object to an other object.
* @param obj: pointer to an object to align
* @param base: pointer to an other object (if NULL `obj`s parent is used). 'obj' will be aligned to it.
* @param align: type of alignment (see 'lv_align_t' enum)
* @param x_ofs: x coordinate offset after alignment
* @param y_ofs: y coordinate offset after alignment
*/
void lv_obj_align(lv_obj_t * obj, const lv_obj_t * base, lv_align_t align, lv_coord_t x_ofs, lv_coord_t y_ofs)
{
LV_ASSERT_OBJ(obj, MY_CLASS);
@@ -362,12 +295,6 @@ void lv_obj_align(lv_obj_t * obj, const lv_obj_t * base, lv_align_t align, lv_co
lv_obj_set_pos(obj, x, y);
}
/**
* Copy the coordinates of an object to an area
* @param obj: pointer to an object
* @param coords: pointer to an area to store the coordinates
*/
void lv_obj_get_coords(const lv_obj_t * obj, lv_area_t * coords)
{
LV_ASSERT_OBJ(obj, MY_CLASS);
@@ -375,14 +302,6 @@ void lv_obj_get_coords(const lv_obj_t * obj, lv_area_t * coords)
lv_area_copy(coords, &obj->coords);
}
/**
* Get the x coordinate of object.
* @param obj: pointer to an object
* @return distance of `obj` from the left side of its parent plus the parent's left padding
* @note Zero return value means the object is on the left padding of the parent, and not on the left edge.
* @note Scrolling of the parent doesn't change the returned value.
* @note The returned value is always the distance from the parent even if `obj` is positioned by a layout.
*/
lv_coord_t lv_obj_get_x(const lv_obj_t * obj)
{
LV_ASSERT_OBJ(obj, MY_CLASS);
@@ -400,14 +319,6 @@ lv_coord_t lv_obj_get_x(const lv_obj_t * obj)
return rel_x;
}
/**
* Get the y coordinate of object.
* @param obj: pointer to an object
* @return distance of `obj` from the top side of its parent plus the parent's top padding
* @note Zero return value means the object is on the top padding of the parent, and not on the top edge.
* @note Scrolling of the parent doesn't change the returned value.
* @note The returned value is always the distance from the parent even if `obj` is positioned by a layout.
*/
lv_coord_t lv_obj_get_y(const lv_obj_t * obj)
{
LV_ASSERT_OBJ(obj, MY_CLASS);
@@ -425,11 +336,6 @@ lv_coord_t lv_obj_get_y(const lv_obj_t * obj)
return rel_y;
}
/**
* Get the width of an object
* @param obj pointer to an object
* @return the width in pixels
*/
lv_coord_t lv_obj_get_width(const lv_obj_t * obj)
{
LV_ASSERT_OBJ(obj, MY_CLASS);
@@ -437,11 +343,6 @@ lv_coord_t lv_obj_get_width(const lv_obj_t * obj)
return lv_area_get_width(&obj->coords);
}
/**
* Get the height of an object
* @param obj pointer to an object
* @return the height in pixels
*/
lv_coord_t lv_obj_get_height(const lv_obj_t * obj)
{
LV_ASSERT_OBJ(obj, MY_CLASS);
@@ -449,11 +350,6 @@ lv_coord_t lv_obj_get_height(const lv_obj_t * obj)
return lv_area_get_height(&obj->coords);
}
/**
* Get that width reduced by the left and right padding.
* @param obj: pointer to an object
* @return the width which still fits into the container without causing overflow (making the object scrollable)
*/
lv_coord_t lv_obj_get_width_fit(const lv_obj_t * obj)
{
LV_ASSERT_OBJ(obj, MY_CLASS);
@@ -464,11 +360,6 @@ lv_coord_t lv_obj_get_width_fit(const lv_obj_t * obj)
return lv_obj_get_width(obj) - left - right;
}
/**
* Get that height reduced by the top an bottom padding.
* @param obj: pointer to an object
* @return the height which still fits into the container without causing overflow (making the object scrollable)
*/
lv_coord_t lv_obj_get_height_fit(const lv_obj_t * obj)
{
LV_ASSERT_OBJ(obj, MY_CLASS);
@@ -479,13 +370,6 @@ lv_coord_t lv_obj_get_height_fit(const lv_obj_t * obj)
return lv_obj_get_height(obj) - top - bottom;
}
/**
* Get the width occupied by the "parts" of the widget. E.g. the width of all columns of a table.
* @param obj: pointer to an objects
* @return the width of the virtually drawn content
* @note This size independent from the real size of the widget.
* It just tells how large the internal ("virtual") content is.
*/
lv_coord_t lv_obj_get_self_width(struct _lv_obj_t * obj)
{
lv_point_t p = {0, LV_COORD_MIN};
@@ -493,13 +377,6 @@ lv_coord_t lv_obj_get_self_width(struct _lv_obj_t * obj)
return p.x;
}
/**
* Get the height occupied by the "parts" of the widget. E.g. the height of all rows of a table.
* @param obj: pointer to an objects
* @return the width of the virtually drawn content
* @note This size independent from the real size of the widget.
* It just tells how large the internal ("virtual") content is.
*/
lv_coord_t lv_obj_get_self_height(struct _lv_obj_t * obj)
{
lv_point_t p = {LV_COORD_MIN, 0};
@@ -507,27 +384,14 @@ lv_coord_t lv_obj_get_self_height(struct _lv_obj_t * obj)
return p.y;
}
/**
* Handle if the size of the internal ("virtual") content of an object has changed.
* @param obj: pointer to an object
* @return false: nothing happened; true: refresh happened
*/
bool lv_obj_handle_self_size_chg(struct _lv_obj_t * obj)
{
if(obj->w_set != LV_SIZE_AUTO && obj->h_set == LV_SIZE_AUTO) return false;
if(obj->w_set != LV_SIZE_CONTENT && obj->h_set == LV_SIZE_CONTENT) return false;
lv_obj_set_size(obj, obj->w_set, obj->h_set);
return true;
}
/**
* Move an object to a given x and y coordinate.
* It's the core function to move objects. User should use `lv_obj_set_pos/x/y/..` etc.
* @param obj: pointer to an object to move
* @param x: the new x coordinate in pixels
* @param y: the new y coordinate in pixels
* @param notify: true: send `LV_SIGNAL_CHILD_CHG` to the parent if `obj` moved; false: do not notify the parent
*/
void lv_obj_move_to(lv_obj_t * obj, lv_coord_t x, lv_coord_t y, bool notify)
{
/*Convert x and y to absolute coordinates*/
@@ -575,14 +439,6 @@ void lv_obj_move_to(lv_obj_t * obj, lv_coord_t x, lv_coord_t y, bool notify)
lv_obj_invalidate(obj);
}
/**
* Reposition the children of an object. (Called recursively)
* It's a low level function and shouldn't be used by the user directly.
* @param obj: pointer to an object which children will be repositioned
* @param x_diff: x coordinate shift
* @param y_diff: y coordinate shift
*/
void lv_obj_move_children_by(lv_obj_t * obj, lv_coord_t x_diff, lv_coord_t y_diff)
{
uint32_t i;
+92 -92
View File
@@ -41,188 +41,188 @@ typedef struct {
/**
* Set the relative the position of an object (relative to the parent's top left corner)
* @param obj: pointer to an object
* @param x: new distance from the left side of the parent plus the parent's left padding
* @param y: new distance from the top side of the parent plus the parent's right padding
* @param obj pointer to an object
* @param x new distance from the left side of the parent plus the parent's left padding
* @param y new distance from the top side of the parent plus the parent's right padding
*/
void lv_obj_set_pos(struct _lv_obj_t * obj, lv_coord_t x, lv_coord_t y);
/**
* Set the x coordinate of a object
* @param obj: pointer to an object
* @param x: new distance from the left side from the parent plus the parent's left padding
* @param obj pointer to an object
* @param x new distance from the left side from the parent plus the parent's left padding
*/
void lv_obj_set_x(struct _lv_obj_t * obj, lv_coord_t x);
/**
* Set the y coordinate of a object
* @param obj: pointer to an object
* @param y: new distance from the top of the parent plus the parent's top padding
* @param obj pointer to an object
* @param y new distance from the top of the parent plus the parent's top padding
*/
void lv_obj_set_y(struct _lv_obj_t * obj, lv_coord_t y);
/**
* Set the size of an object.
* @param obj: pointer to an object
* @param w: the new width
* @param h: the new height
* @note possible values are:
* pixel: simple set the size accordingly
* LV_SIZE_AUTO: to set the size to involve all children in the given direction
* LV_COORD_PCT(x): to set size to a percentage of the parent's content area size (the size without paddings).
* x should be [0..1000] range
* @param obj pointer to an object
* @param w the new width
* @param h the new height
* @note possible values are:
* pixel simple set the size accordingly
* LV_SIZE_CONTENT set the size to involve all children in the given direction
* LV_COORD_PCT(x) to set size in percentage of the parent's content area size (the size without paddings).
* x should be in [0..1000]% range
*/
void lv_obj_set_size(struct _lv_obj_t * obj, lv_coord_t w, lv_coord_t h);
/**
* Set the width of an object
* @param obj: pointer to an object
* @param w: the new width
* @note possible values are:
* pixel: simple set the size accordingly
* LV_SIZE_AUTO: to set the size to involve all children in the given direction
* LV_COORD_PCT(x): to set size to a percentage of the parent's content area size (the size without paddings).
* x should be [0..1000] range
* @param obj pointer to an object
* @param w the new width
* @note possible values are:
* pixel simple set the size accordingly
* LV_SIZE_CONTENT set the size to involve all children in the given direction
* LV_COORD_PCT(x) to set size in percentage of the parent's content area size (the size without paddings).
* x should be in [0..1000]% range
*/
void lv_obj_set_width(struct _lv_obj_t * obj, lv_coord_t w);
/**
* Set the height of an object
* @param obj: pointer to an object
* @param h: the new height
* @note possible values are:
* pixel: simple set the size accordingly
* LV_SIZE_AUTO: to set the size to involve all children in the given direction
* LV_COORD_PCT(x): to set size to a percentage of the parent's content area size (the size without paddings).
* x should be [0..1000] range
* @param obj pointer to an object
* @param h the new height
* @note possible values are:
* pixel simple set the size accordingly
* LV_SIZE_CONTENT set the size to involve all children in the given direction
* LV_COORD_PCT(x) to set size in percentage of the parent's content area size (the size without paddings).
* x should be in [0..1000]% range
*/
void lv_obj_set_height(struct _lv_obj_t * obj, lv_coord_t h);
/**
* Set the width reduced by the left and right padding.
* @param obj: pointer to an object
* @param w: the width without paddings in pixels
* @param obj pointer to an object
* @param w the width without paddings in pixels
*/
void lv_obj_set_content_width(struct _lv_obj_t * obj, lv_coord_t w);
/**
* Set the height reduced by the top and bottom padding.
* @param obj: pointer to an object
* @param h: the height without paddings in pixels
* @param obj pointer to an object
* @param h the height without paddings in pixels
*/
void lv_obj_set_content_height(struct _lv_obj_t * obj, lv_coord_t h);
/**
* Set a layout for an object
* @param obj: pointer to an object
* @param layout: pointer to a layout descriptor to set
* @param obj pointer to an object
* @param layout pointer to a layout descriptor to set
*/
void lv_obj_set_layout(struct _lv_obj_t * obj, const void * layout);
/**
* Test whether the and object is positioned by a layout or not
* @param obj: pointer to an object to test
* @return true: positioned by a layout; false: not positioned by a layout
* @param obj pointer to an object to test
* @return true: positioned by a layout; false: not positioned by a layout
*/
bool lv_obj_is_layout_positioned(const struct _lv_obj_t * obj);
/**
* Update the layout of an object.
* @param cont: pointer to an object whose children needs to be updated
* @param item: pointer to a child object that triggered the update. Set to `NULL` is not known.
* If not `NULL` the update process should make some optimization
* to update only the required parts of the layout
* @param obj pointer to an object whose children needs to be updated
* @param item pointer to a child object that triggered the update. Set to `NULL` is not known.
* If not `NULL` the update process can make some optimization
* to update only the required parts of the layout
*/
void lv_obj_update_layout(struct _lv_obj_t * cont, struct _lv_obj_t * item);
void lv_obj_update_layout(struct _lv_obj_t * obj, struct _lv_obj_t * item);
/**
* Align an object to an other object.
* @param obj: pointer to an object to align
* @param base: pointer to an other object (if NULL `obj`s parent is used). 'obj' will be aligned to it.
* @param align: type of alignment (see 'lv_align_t' enum)
* @param x_ofs: x coordinate offset after alignment
* @param y_ofs: y coordinate offset after alignment
* @param obj pointer to an object to align
* @param base pointer to an other object (if NULL `obj`s parent is used). 'obj' will be aligned to it.
* @param align type of alignment (see 'lv_align_t' enum)
* @param x_ofs x coordinate offset after alignment
* @param y_ofs y coordinate offset after alignment
*/
void lv_obj_align(struct _lv_obj_t * obj, const struct _lv_obj_t * base, lv_align_t align, lv_coord_t x_ofs, lv_coord_t y_ofs);
/**
* Copy the coordinates of an object to an area
* @param obj: pointer to an object
* @param coords: pointer to an area to store the coordinates
* @param obj pointer to an object
* @param coords pointer to an area to store the coordinates
*/
void lv_obj_get_coords(const struct _lv_obj_t * obj, lv_area_t * coords);
/**
* Get the x coordinate of object.
* @param obj: pointer to an object
* @return distance of `obj` from the left side of its parent plus the parent's left padding
* @note Zero return value means the object is on the left padding of the parent, and not on the left edge.
* @note Scrolling of the parent doesn't change the returned value.
* @note The returned value is always the distance from the parent even if `obj` is positioned by a layout.
* @param obj pointer to an object
* @return distance of `obj` from the left side of its parent plus the parent's left padding
* @note Zero return value means the object is on the left padding of the parent, and not on the left edge.
* @note Scrolling of the parent doesn't change the returned value.
* @note The returned value is always the distance from the parent even if `obj` is positioned by a layout.
*/
lv_coord_t lv_obj_get_x(const struct _lv_obj_t * obj);
/**
* Get the y coordinate of object.
* @param obj: pointer to an object
* @return distance of `obj` from the top side of its parent plus the parent's top padding
* @note Zero return value means the object is on the top padding of the parent, and not on the top edge.
* @note Scrolling of the parent doesn't change the returned value.
* @note The returned value is always the distance from the parent even if `obj` is positioned by a layout.
* @param obj pointer to an object
* @return distance of `obj` from the top side of its parent plus the parent's top padding
* @note Zero return value means the object is on the top padding of the parent, and not on the top edge.
* @note Scrolling of the parent doesn't change the returned value.
* @note The returned value is always the distance from the parent even if `obj` is positioned by a layout.
*/
lv_coord_t lv_obj_get_y(const struct _lv_obj_t * obj);
/**
* Get the width of an object
* @param obj pointer to an object
* @return the width in pixels
* @param obj pointer to an object
* @return the width in pixels
*/
lv_coord_t lv_obj_get_width(const struct _lv_obj_t * obj);
/**
* Get the height of an object
* @param obj pointer to an object
* @return the height in pixels
* @param obj pointer to an object
* @return the height in pixels
*/
lv_coord_t lv_obj_get_height(const struct _lv_obj_t * obj);
/**
* Get that width reduced by the left and right padding.
* @param obj: pointer to an object
* @return the width which still fits into the container without causing overflow (making the object scrollable)
* @param obj pointer to an object
* @return the width which still fits into the container without causing overflow (making the object scrollable)
*/
lv_coord_t lv_obj_get_width_fit(const struct _lv_obj_t * obj);
/**
* Get that height reduced by the top an bottom padding.
* @param obj: pointer to an object
* @return the height which still fits into the container without causing overflow (making the object scrollable)
* @param obj pointer to an object
* @return the height which still fits into the container without causing overflow (making the object scrollable)
*/
lv_coord_t lv_obj_get_height_fit(const struct _lv_obj_t * obj);
/**
* Get the width occupied by the "parts" of the widget. E.g. the width of all columns of a table.
* @param obj: pointer to an objects
* @return the width of the virtually drawn content
* @note This size independent from the real size of the widget.
* It just tells how large the internal ("virtual") content is.
* @param obj pointer to an objects
* @return the width of the virtually drawn content
* @note This size independent from the real size of the widget.
* It just tells how large the internal ("virtual") content is.
*/
lv_coord_t lv_obj_get_self_width(struct _lv_obj_t * obj);
/**
* Get the height occupied by the "parts" of the widget. E.g. the height of all rows of a table.
* @param obj: pointer to an objects
* @return the width of the virtually drawn content
* @note This size independent from the real size of the widget.
* It just tells how large the internal ("virtual") content is.
* @param obj pointer to an objects
* @return the width of the virtually drawn content
* @note This size independent from the real size of the widget.
* It just tells how large the internal ("virtual") content is.
*/
lv_coord_t lv_obj_get_self_height(struct _lv_obj_t * obj);
/**
* Handle if the size of the internal ("virtual") content of an object has changed.
* @param obj: pointer to an object
* @return false: nothing happened; true: refresh happened
* @param obj pointer to an object
* @return false: nothing happened; true: refresh happened
*/
bool lv_obj_handle_self_size_chg(struct _lv_obj_t * obj);
@@ -230,52 +230,52 @@ bool lv_obj_handle_self_size_chg(struct _lv_obj_t * obj);
/**
* Mark an area of an object as invalid.
* The area will be truncated to the object's area and marked for redraw.
* @param obj: pointer to an object
* @param area: the area to redraw
* @param obj pointer to an object
* @param area the area to redraw
*/
void lv_obj_invalidate_area(const struct _lv_obj_t * obj, const lv_area_t * area);
/**
* Mark the object as invalid to redrawn its area
* @param obj: pointer to an object
* @param obj pointer to an object
*/
void lv_obj_invalidate(const struct _lv_obj_t * obj);
/**
* Tell whether an area of an object is visible (even partially) now or not
* @param obj: pointer to an object
* @param area: the are to check. The visible part of the area will be written back here.
* @return true: visible; false: not visible (hidden, out of parent, on other screen, etc)
* @param obj pointer to an object
* @param area the are to check. The visible part of the area will be written back here.
* @return true visible; false not visible (hidden, out of parent, on other screen, etc)
*/
bool lv_obj_area_is_visible(const struct _lv_obj_t * obj, lv_area_t * area);
/**
* Tell whether an object is visible (even partially) now or not
* @param obj pointer to an object
* @return true: visible; false: not visible (hidden, out of parent, on other screen, etc)
* @param obj pointer to an object
* @return true: visible; false not visible (hidden, out of parent, on other screen, etc)
*/
bool lv_obj_is_visible(const struct _lv_obj_t * obj);
/**
* Set the size of an extended clickable area
* @param obj pointer to an object
* @param size extended clickable area in all 4 directions [px]
* @param obj pointer to an object
* @param size extended clickable area in all 4 directions [px]
*/
void lv_obj_set_ext_click_area(struct _lv_obj_t * obj, lv_coord_t size);
/**
* Get the an area where to object can be clicked.
* It's the object's normal area plus the extended click area.
* @param obj: pointer to an object
* @param area: store the result area here
* @param obj pointer to an object
* @param area store the result area here
*/
void lv_obj_get_click_area(const struct _lv_obj_t * obj, lv_area_t * area);
/**
* Hit-test an object given a particular point in screen space.
* @param obj object to hit-test
* @param point screen-space point (absolute coordinate)
* @return true: if the object is considered under the point
* @param obj object to hit-test
* @param point screen-space point (absolute coordinate)
* @return true: if the object is considered under the point
*/
bool lv_obj_hit_test(struct _lv_obj_t * obj, const lv_point_t * point);
+33
View File
@@ -30,6 +30,7 @@ void lv_obj_move_children_by(lv_obj_t * obj, lv_coord_t x_diff, lv_coord_t y_dif
**********************/
static void scroll_anim_x_cb(lv_obj_t * obj, lv_anim_value_t v);
static void scroll_anim_y_cb(lv_obj_t * obj, lv_anim_value_t v);
static void scroll_anim_ready_cb(lv_anim_t * a);
/**********************
* STATIC VARIABLES
@@ -252,12 +253,20 @@ void lv_obj_scroll_by(lv_obj_t * obj, lv_coord_t x, lv_coord_t y, lv_anim_enable
lv_anim_t a;
lv_anim_init(&a);
lv_anim_set_var(&a, obj);
lv_anim_set_ready_cb(&a, scroll_anim_ready_cb);
lv_anim_path_t path;
lv_anim_path_init(&path);
lv_anim_path_set_cb(&path, lv_anim_path_ease_out);
if(x) {
lv_res_t res;
res = lv_signal_send(obj, LV_SIGNAL_SCROLL_BEGIN, NULL);
if(res != LV_RES_OK) return;
res = lv_event_send(obj, LV_EVENT_SCROLL_BEGIN, NULL);
if(res != LV_RES_OK) return;
uint32_t t = lv_anim_speed_to_time((lv_disp_get_hor_res(d) * 2) >> 2, 0, x);
if(t < SCROLL_ANIM_TIME_MIN) t = SCROLL_ANIM_TIME_MIN;
if(t > SCROLL_ANIM_TIME_MAX) t = SCROLL_ANIM_TIME_MAX;
@@ -270,6 +279,13 @@ void lv_obj_scroll_by(lv_obj_t * obj, lv_coord_t x, lv_coord_t y, lv_anim_enable
}
if(y) {
lv_res_t res;
res = lv_signal_send(obj, LV_SIGNAL_SCROLL_BEGIN, NULL);
if(res != LV_RES_OK) return;
res = lv_event_send(obj, LV_EVENT_SCROLL_BEGIN, NULL);
if(res != LV_RES_OK) return;
uint32_t t = lv_anim_speed_to_time((lv_disp_get_ver_res(d) * 2) >> 2, 0, y);
if(t < SCROLL_ANIM_TIME_MIN) t = SCROLL_ANIM_TIME_MIN;
if(t > SCROLL_ANIM_TIME_MAX) t = SCROLL_ANIM_TIME_MAX;
@@ -356,6 +372,15 @@ void lv_obj_scroll_to_view(lv_obj_t * obj, lv_anim_enable_t anim_en)
lv_obj_scroll_by(parent, x_scroll, y_scroll, anim_en);
}
void lv_obj_scroll_to_view_recursive(lv_obj_t * obj, lv_anim_enable_t anim_en)
{
lv_obj_t * parent = lv_obj_get_parent(obj);
while(parent) {
lv_obj_scroll_to_view(obj, LV_ANIM_ON);
obj = parent;
parent = lv_obj_get_parent(parent);
}
}
/**********************
* STATIC FUNCTIONS
@@ -370,3 +395,11 @@ static void scroll_anim_y_cb(lv_obj_t * obj, lv_anim_value_t v)
{
_lv_obj_scroll_by_raw(obj, 0, v + lv_obj_get_scroll_y(obj));
}
static void scroll_anim_ready_cb(lv_anim_t * a)
{
lv_res_t res = lv_signal_send(a->var, LV_SIGNAL_SCROLL_END, NULL);
if(res != LV_RES_OK) return;
lv_event_send(a->var, LV_EVENT_SCROLL_END, NULL);
}
+71 -60
View File
@@ -37,7 +37,7 @@ enum {
typedef uint8_t lv_scrollbar_mode_t;
/** Scroll span align options. Tells where to align the object when it's snapped. */
/** Scroll span align options. Tells where to align the snapable children when scroll stops. */
enum {
LV_SCROLL_SNAP_ALIGN_NONE, /**< Do not align, leave where it is */
LV_SCROLL_SNAP_ALIGN_START, /**< Align to to the left/top */
@@ -56,29 +56,29 @@ typedef uint8_t lv_snap_align_t;
/**
* Set how the scrollbars should behave.
* @param obj pointer to an object
* @param mode: LV_SCROLL_MODE_ON/OFF/AUTO/ACTIVE
* @param obj pointer to an object
* @param mode LV_SCROLL_MODE_ON/OFF/AUTO/ACTIVE
*/
void lv_obj_set_scrollbar_mode(struct _lv_obj_t * obj, lv_scrollbar_mode_t mode);
/**
* Set the object in which directions can be scrolled
* @param obj pointer to an object
* @param dir the allow scroll directions. An element or OR-ed values of `lv_dir_t`
* @param obj pointer to an object
* @param dir the allow scroll directions. An element or OR-ed values of `lv_dir_t`
*/
void lv_obj_set_scroll_dir(struct _lv_obj_t * obj, lv_dir_t dir);
/**
* Set where to snap the children when scrolling ends horizontally
* @param obj pointer to an object
* @param align the snap align to set from `lv_snap_align_t`
* @param obj pointer to an object
* @param align the snap align to set from `lv_snap_align_t`
*/
void lv_obj_set_snap_align_x(struct _lv_obj_t * obj, lv_snap_align_t align);
/**
* Set where to snap the children when scrolling ends vertically
* @param obj pointer to an object
* @param align the snap align to set from `lv_snap_align_t`
* @param obj pointer to an object
* @param align the snap align to set from `lv_snap_align_t`
*/
void lv_obj_set_snap_align_y(struct _lv_obj_t * obj, lv_snap_align_t align);
@@ -88,49 +88,49 @@ void lv_obj_set_snap_align_y(struct _lv_obj_t * obj, lv_snap_align_t align);
/**
* Get the current scroll mode (when to hide the scrollbars)
* @param obj pointer to an object
* @return the current scroll mode from `lv_scroll_mode_t`
* @param obj pointer to an object
* @return the current scroll mode from `lv_scroll_mode_t`
*/
lv_scrollbar_mode_t lv_obj_get_scrollbar_mode(const struct _lv_obj_t * obj);
/**
* Get the object in which directions can be scrolled
* @param obj pointer to an object
* @param dir the allow scroll directions. An element or OR-ed values of `lv_dir_t`
* @param obj pointer to an object
* @param dir the allow scroll directions. An element or OR-ed values of `lv_dir_t`
*/
lv_dir_t lv_obj_get_scroll_dir(const struct _lv_obj_t * obj);
/**
* Get where to snap the children when scrolling ends horizontally
* @param obj pointer to an object
* @return the current snap align from `lv_snap_align_t`
* @param obj pointer to an object
* @return the current snap align from `lv_snap_align_t`
*/
lv_snap_align_t lv_obj_get_snap_align_x(const struct _lv_obj_t * obj);
/**
* Get where to snap the children when scrolling ends vertically
* @param obj pointer to an object
* @return the current snap align from `lv_snap_align_t`
* @param obj pointer to an object
* @return the current snap align from `lv_snap_align_t`
*/
lv_snap_align_t lv_obj_get_snap_align_y(const struct _lv_obj_t * obj);
/**
* Get current X scroll position.
* @param obj pointer to an object
* @return the current scroll position from the left edge.
* If the object is not scrolled return 0
* If scrolled return > 0
* If scrolled in (elastic scroll) return < 0
* @param obj pointer to an object
* @return the current scroll position from the left edge.
* If the object is not scrolled return 0
* If scrolled return > 0
* If scrolled in (elastic scroll) return < 0
*/
lv_coord_t lv_obj_get_scroll_x(const struct _lv_obj_t * obj);
/**
* Get current Y scroll position.
* @param obj pointer to an object
* @return the current scroll position from the top edge.
* If the object is not scrolled return 0
* If scrolled return > 0
* If scrolled inside return < 0
* @param obj pointer to an object
* @return the current scroll position from the top edge.
* If the object is not scrolled return 0
* If scrolled return > 0
* If scrolled inside return < 0
*/
lv_coord_t lv_obj_get_scroll_y(const struct _lv_obj_t * obj);
@@ -138,8 +138,8 @@ lv_coord_t lv_obj_get_scroll_y(const struct _lv_obj_t * obj);
* Return the height of the area above the object.
* That is the number of pixels the object can be scrolled down.
* Normally positive but can be negative when scrolled inside.
* @param obj pointer to an object
* @return the scrollable area above the object in pixels
* @param obj pointer to an object
* @return the scrollable area above the object in pixels
*/
lv_coord_t lv_obj_get_scroll_top(struct _lv_obj_t * obj);
@@ -147,8 +147,8 @@ lv_coord_t lv_obj_get_scroll_top(struct _lv_obj_t * obj);
* Return the height of the area below the object.
* That is the number of pixels the object can be scrolled down.
* Normally positive but can be negative when scrolled inside.
* @param obj pointer to an object
* @return the scrollable area below the object in pixels
* @param obj pointer to an object
* @return the scrollable area below the object in pixels
*/
lv_coord_t lv_obj_get_scroll_bottom(struct _lv_obj_t * obj);
@@ -156,8 +156,8 @@ lv_coord_t lv_obj_get_scroll_bottom(struct _lv_obj_t * obj);
* Return the width of the area on the left the object.
* That is the number of pixels the object can be scrolled down.
* Normally positive but can be negative when scrolled inside.
* @param obj pointer to an object
* @return the scrollable area on the left the object in pixels
* @param obj pointer to an object
* @return the scrollable area on the left the object in pixels
*/
lv_coord_t lv_obj_get_scroll_left(struct _lv_obj_t * obj);
@@ -165,16 +165,16 @@ lv_coord_t lv_obj_get_scroll_left(struct _lv_obj_t * obj);
* Return the width of the area on the right the object.
* That is the number of pixels the object can be scrolled down.
* Normally positive but can be negative when scrolled inside.
* @param obj pointer to an object
* @return the scrollable area on the right the object in pixels
* @param obj pointer to an object
* @return the scrollable area on the right the object in pixels
*/
lv_coord_t lv_obj_get_scroll_right(struct _lv_obj_t * obj);
/**
* Get the X and Y coordinates where the scrolling will end for this object if a scrolling animation is in progress.
* In no scrolling animation give the current `x` or `y` scroll position.
* @param obj pointer to an object
* @param end poinr to point to store the result
* @param obj pointer to an object
* @param end poinr to point to store the result
*/
void lv_obj_get_scroll_end(struct _lv_obj_t * obj, lv_point_t * end);
@@ -183,60 +183,71 @@ void lv_obj_get_scroll_end(struct _lv_obj_t * obj, lv_point_t * end);
*====================*/
/**
* The most basic function to scroll by a given amount of pixels
* @param obj pointer to an object to scroll
* @param x pixels to scroll horizontally
* @param y pixels to scroll vertically
* @note > 0 value means scroll right/bottom (show the right/bottom content)
* The most basic function to scroll by a given amount of pixels.
* Used internally.
* @param obj pointer to an object to scroll
* @param x pixels to scroll horizontally
* @param y pixels to scroll vertically
* @note > 0 value means scroll right/bottom (show the more content on the right/bottom)
*/
void _lv_obj_scroll_by_raw(struct _lv_obj_t * obj, lv_coord_t x, lv_coord_t y);
/**
*
* Scroll by a given amount of pixels
* @param obj pointer to an object to scroll
* @param x pixels to scroll horizontally
* @param y pixels to scroll vertically
* @param anim_en LV_ANIM_ON: scroll with animation; LV_ANIM_OFF: scroll immediately
* @note > 0 value means scroll right/bottom (show the right/bottom content)
* @param obj pointer to an object to scroll
* @param x pixels to scroll horizontally
* @param y pixels to scroll vertically
* @param anim_en LV_ANIM_ON: scroll with animation; LV_ANIM_OFF: scroll immediately
* @note > 0 value means scroll right/bottom (show the more content on the right/bottom)
* @note
*/
void lv_obj_scroll_by(struct _lv_obj_t * obj, lv_coord_t x, lv_coord_t y, lv_anim_enable_t anim_en);
/**
* Scroll to a given coordinate on an object.
* `x` and `y` will be limited internally to allow scrolling only on the content area.
* @param obj pointer to an object to scroll
* @param x pixels to scroll horizontally
* @param y pixels to scroll vertically
* @param anim_en LV_ANIM_ON: scroll with animation; LV_ANIM_OFF: scroll immediately
* @param obj pointer to an object to scroll
* @param x pixels to scroll horizontally
* @param y pixels to scroll vertically
* @param anim_en LV_ANIM_ON: scroll with animation; LV_ANIM_OFF: scroll immediately
*/
void lv_obj_scroll_to(struct _lv_obj_t * obj, lv_coord_t x, lv_coord_t y, lv_anim_enable_t anim_en);
/**
* Scroll to a given X coordinate on an object.
* `x` will be limited internally to allow scrolling only on the content area.
* @param obj pointer to an object to scroll
* @param x pixels to scroll horizontally
* @param anim_en LV_ANIM_ON: scroll with animation; LV_ANIM_OFF: scroll immediately
* @param obj pointer to an object to scroll
* @param x pixels to scroll horizontally
* @param anim_en LV_ANIM_ON: scroll with animation; LV_ANIM_OFF: scroll immediately
*/
void lv_obj_scroll_to_x(struct _lv_obj_t * obj, lv_coord_t x, lv_anim_enable_t anim_en);
/**
* Scroll to a given Y coordinate on an object
* `y` will be limited internally to allow scrolling only on the content area.
* @param obj pointer to an object to scroll
* @param y pixels to scroll vertically
* @param anim_en LV_ANIM_ON: scroll with animation; LV_ANIM_OFF: scroll immediately
* @param obj pointer to an object to scroll
* @param y pixels to scroll vertically
* @param anim_en LV_ANIM_ON: scroll with animation; LV_ANIM_OFF: scroll immediately
*/
void lv_obj_scroll_to_y(struct _lv_obj_t * obj, lv_coord_t y, lv_anim_enable_t anim_en);
/**
* Scroll to an object
* @param obj pointer to an object to scroll into view
* @param anim_en LV_ANIM_ON: scroll with animation; LV_ANIM_OFF: scroll immediately
* Scroll to an object until it becomes visible on its parent
* @param obj pointer to an object to scroll into view
* @param anim_en LV_ANIM_ON: scroll with animation; LV_ANIM_OFF: scroll immediately
*/
void lv_obj_scroll_to_view(struct _lv_obj_t * obj, lv_anim_enable_t anim_en);
/**
* Scroll to an object until it becomes visible on its parent.
* Do the same on the parent's parent, and so on.
* Therefore the object will be scrolled into view even it has nested scrollable parents
* @param obj pointer to an object to scroll into view
* @param anim_en LV_ANIM_ON: scroll with animation; LV_ANIM_OFF: scroll immediately
*/
void lv_obj_scroll_to_view_recursive(struct _lv_obj_t * obj, lv_anim_enable_t anim_en);
/**********************
* MACROS
**********************/
+10 -1
View File
@@ -39,6 +39,11 @@ typedef enum {
CACHE_NEED_CHECK = 4,
}cache_t;
/**********************
* GLOBAL PROTOTYPES
**********************/
uint8_t lv_style_get_prop_group(lv_style_prop_t prop);
/**********************
* STATIC PROTOTYPES
**********************/
@@ -60,7 +65,7 @@ static void fade_in_anim_ready(lv_anim_t * a);
/**********************
* STATIC VARIABLES
**********************/
static style_refr = true;
static bool style_refr = true;
/**********************
* MACROS
@@ -484,6 +489,7 @@ static bool get_prop_core(const lv_obj_t * obj, uint8_t part, lv_style_prop_t pr
break;
}
uint8_t group = 1 << lv_style_get_prop_group(prop);
int32_t weight = -1;
lv_state_t state = obj->state;
lv_state_t state_inv = ~state;
@@ -496,6 +502,7 @@ static bool get_prop_core(const lv_obj_t * obj, uint8_t part, lv_style_prop_t pr
if(obj_style->is_trans == false) break;
if(skip_trans) continue;
if(obj_style->part != part) continue;
if((obj_style->style->has_group & group) == 0) continue;
found = lv_style_get_prop(obj_style->style, prop, &value_tmp);
if(found) {
*v = value_tmp;
@@ -507,6 +514,8 @@ static bool get_prop_core(const lv_obj_t * obj, uint8_t part, lv_style_prop_t pr
lv_obj_style_t * obj_style = &obj->style_list.styles[i];
if(obj_style->part != part) continue;
if((obj_style->style->has_group & group) == 0) continue;
/* Be sure the style not specifies other state than the requested.
* E.g. For HOVER+PRESS object state, HOVER style only is OK, but HOVER+FOCUS style is not*/
if((obj_style->state & state_inv)) continue;
+4 -8
View File
@@ -240,6 +240,7 @@ lv_disp_t * lv_obj_get_disp(const lv_obj_t * obj)
lv_obj_t * lv_obj_get_parent(const lv_obj_t * obj)
{
if(obj == NULL) return NULL;
LV_ASSERT_OBJ(obj, MY_CLASS);
return obj->parent;
@@ -305,14 +306,6 @@ static void obj_del_core(lv_obj_t * obj)
/*Remove the animations from this object*/
lv_anim_del(obj, NULL);
// _lv_obj_remove_style_trans(obj);
/*Delete the user data*/
#if LV_USE_USER_DATA
#if LV_USE_USER_DATA_FREE
LV_USER_DATA_FREE(obj);
#endif
#endif
/*Recursively delete the children*/
lv_obj_t * child = lv_obj_get_child(obj, 0);
@@ -323,6 +316,9 @@ static void obj_del_core(lv_obj_t * obj)
lv_event_mark_deleted(obj);
/*Remove all style*/
lv_obj_remove_style(obj, LV_PART_ANY, LV_STATE_ANY, NULL);
/* Reset all input devices if the object to delete is used*/
lv_indev_t * indev = lv_indev_get_next(NULL);
while(indev) {
+1 -1
View File
@@ -248,7 +248,7 @@ void _lv_area_align(const lv_area_t * base, const lv_area_t * to_align, lv_align
#define LV_COORD_PCT(x) LV_COORD_SET_SPEC(x)
#define LV_COORD_IS_PCT(x) ((LV_COORD_IS_SPEC(x) && _LV_COORD_PLAIN(x) <= 1000) ? true : false)
#define LV_COORD_GET_PCT(x) _LV_COORD_PLAIN(x)
#define LV_SIZE_AUTO LV_COORD_SET_SPEC(1001)
#define LV_SIZE_CONTENT LV_COORD_SET_SPEC(1001)
#define LV_SIZE_LAYOUT LV_COORD_SET_SPEC(1002) /*The size is managed by the layout therefore `lv_obj_set_width/height/size()` can't change is*/
#ifdef __cplusplus
+36 -18
View File
@@ -41,7 +41,7 @@
void lv_style_init(lv_style_t * style)
{
#if LV_USE_ASSERT_STYLE
if(style->sentinel == LV_DEBUG_STYLE_SENTINEL_VALUE && style->allocated && style->props_and_values != NULL) {
if(style->sentinel == LV_DEBUG_STYLE_SENTINEL_VALUE && style->allocated && style->values_and_props != NULL) {
LV_LOG_WARN("Style might be already inited. (Potential memory leak)")
}
#endif
@@ -57,7 +57,7 @@ void lv_style_reset(lv_style_t * style)
{
LV_ASSERT_STYLE(style);
if(style->allocated) lv_mem_free(style->props_and_values);
if(style->allocated) lv_mem_free(style->values_and_props);
lv_style_init(style);
}
@@ -82,12 +82,12 @@ bool lv_style_remove_prop(lv_style_t * style, lv_style_prop_t prop)
return false;
}
uint8_t * tmp = style->props_and_values + style->prop_cnt * sizeof(lv_style_value_t);
uint8_t * tmp = style->values_and_props + style->prop_cnt * sizeof(lv_style_value_t);
uint16_t * props = (uint16_t *) tmp;
uint32_t i;
for(i = 0; i < style->prop_cnt; i++) {
if(props[i] == prop) {
lv_style_value_t * values = (lv_style_value_t *)style->props_and_values;
lv_style_value_t * values = (lv_style_value_t *)style->values_and_props;
style->prop_cnt--;
size_t size = style->prop_cnt * (sizeof(lv_style_value_t) + sizeof(uint16_t));
uint8_t * new_values_and_props = lv_mem_alloc(size);
@@ -107,8 +107,8 @@ bool lv_style_remove_prop(lv_style_t * style, lv_style_prop_t prop)
}
}
lv_mem_free(style->props_and_values);
style->props_and_values = new_values_and_props;
lv_mem_free(style->values_and_props);
style->values_and_props = new_values_and_props;
return true;
}
}
@@ -116,15 +116,31 @@ bool lv_style_remove_prop(lv_style_t * style, lv_style_prop_t prop)
return false;
}
/**
* Tell the group of a property. If the a property from a group is set in a style the (1 << group) bit of style->has_group is set.
* It allows early skipping the style if the property is not exists in the style at all.
* @param prop a style property
* @return the group [0..7] 7 means all the custom properties with index > 112
*/
uint8_t lv_style_get_prop_group(lv_style_prop_t prop)
{
uint16_t group = (prop & 0x1FF) >> 4;
if(group > 7) group = 7; /*The MSB marks all the custom properties*/
return (uint8_t)group;
}
void lv_style_set_prop(lv_style_t * style, lv_style_prop_t prop, lv_style_value_t value)
{
uint8_t group = lv_style_get_prop_group(prop);
style->has_group |= 1 << group;
if(style->allocated) {
uint8_t * tmp = style->props_and_values + style->prop_cnt * sizeof(lv_style_value_t);
uint8_t * tmp = style->values_and_props + style->prop_cnt * sizeof(lv_style_value_t);
uint16_t * props = (uint16_t *) tmp;
int32_t i;
for(i = 0; i < style->prop_cnt; i++) {
if(props[i] == prop) {
lv_style_value_t * values = (lv_style_value_t *)style->props_and_values;
lv_style_value_t * values = (lv_style_value_t *)style->values_and_props;
values[i] = value;
return;
}
@@ -132,8 +148,8 @@ void lv_style_set_prop(lv_style_t * style, lv_style_prop_t prop, lv_style_value_
style->prop_cnt++;
size_t size = style->prop_cnt * (sizeof(lv_style_value_t) + sizeof(uint16_t));
style->props_and_values = lv_mem_realloc(style->props_and_values, size);
tmp = style->props_and_values + (style->prop_cnt - 1) * sizeof(lv_style_value_t);
style->values_and_props = lv_mem_realloc(style->values_and_props, size);
tmp = style->values_and_props + (style->prop_cnt - 1) * sizeof(lv_style_value_t);
props = (uint16_t *) tmp;
/*Shift all props to make place for the value before them*/
for(i = style->prop_cnt - 2; i >= 0; i--) {
@@ -141,9 +157,9 @@ void lv_style_set_prop(lv_style_t * style, lv_style_prop_t prop, lv_style_value_
}
/*Go to the new position wit the props*/
tmp = style->props_and_values + (style->prop_cnt) * sizeof(lv_style_value_t);
tmp = style->values_and_props + (style->prop_cnt) * sizeof(lv_style_value_t);
props = (uint16_t *) tmp;
lv_style_value_t * values = (lv_style_value_t *)style->props_and_values;
lv_style_value_t * values = (lv_style_value_t *)style->values_and_props;
/*Set the new property and value*/
props[style->prop_cnt - 1] = prop;
@@ -155,16 +171,16 @@ void lv_style_set_prop(lv_style_t * style, lv_style_prop_t prop, lv_style_value_
}
style->prop_cnt++;
size_t size = style->prop_cnt * (sizeof(lv_style_value_t) + sizeof(uint16_t));
uint8_t * props_and_values = lv_mem_alloc(size);
uint8_t * tmp = props_and_values + (style->prop_cnt) * sizeof(lv_style_value_t);
uint8_t * values_and_props = lv_mem_alloc(size);
uint8_t * tmp = values_and_props + (style->prop_cnt) * sizeof(lv_style_value_t);
uint16_t * props = (uint16_t *) tmp;
lv_style_value_t * values = (lv_style_value_t *)props_and_values;
lv_style_value_t * values = (lv_style_value_t *)values_and_props;
props[0] = style->prop1;
props[1] = prop;
values[0] = style->value1;
values[1] = value;
style->props_and_values = props_and_values;
style->values_and_props = values_and_props;
style->allocated = 1;
} else if (style->prop_cnt == 0) {
@@ -176,13 +192,15 @@ void lv_style_set_prop(lv_style_t * style, lv_style_prop_t prop, lv_style_value_
bool lv_style_get_prop(lv_style_t * style, lv_style_prop_t prop, lv_style_value_t * value)
{
if(style->prop_cnt == 0) return false;
if(style->allocated) {
uint8_t * tmp = style->props_and_values + style->prop_cnt * sizeof(lv_style_value_t);
uint8_t * tmp = style->values_and_props + style->prop_cnt * sizeof(lv_style_value_t);
uint16_t * props = (uint16_t *) tmp;
uint32_t i;
for(i = 0; i < style->prop_cnt; i++) {
if(props[i] == prop) {
lv_style_value_t * values = (lv_style_value_t *)style->props_and_values;
lv_style_value_t * values = (lv_style_value_t *)style->values_and_props;
*value = values[i];
return true;
}
+92 -82
View File
@@ -113,13 +113,15 @@ typedef union {
typedef enum {
LV_STYLE_PROP_INV = 0,
/*Group 0*/
LV_STYLE_RADIUS = 1,
LV_STYLE_CLIP_CORNER = 2,
LV_STYLE_TRANSFORM_WIDTH = 3 | LV_STYLE_PROP_EXT_DRAW,
LV_STYLE_TRANSFORM_HEIGHT = 4 | LV_STYLE_PROP_EXT_DRAW,
LV_STYLE_TRANSFORM_WIDTH = 3 | LV_STYLE_PROP_EXT_DRAW,
LV_STYLE_TRANSFORM_HEIGHT = 4 | LV_STYLE_PROP_EXT_DRAW,
LV_STYLE_TRANSFORM_ZOOM = 5 | LV_STYLE_PROP_EXT_DRAW,
LV_STYLE_TRANSFORM_ANGLE = 6 | LV_STYLE_PROP_EXT_DRAW,
LV_STYLE_OPA = 7 | LV_STYLE_PROP_INHERIT,
LV_STYLE_TRANSFORM_ANGLE = 6 | LV_STYLE_PROP_EXT_DRAW,
LV_STYLE_OPA = 7 | LV_STYLE_PROP_INHERIT,
LV_STYLE_COLOR_FILTER_CB = 8,
LV_STYLE_COLOR_FILTER_OPA = 9,
LV_STYLE_ANIM_TIME = 10,
@@ -127,92 +129,99 @@ typedef enum {
LV_STYLE_SIZE = 12,
LV_STYLE_BLEND_MODE = 13,
LV_STYLE_PAD_TOP = 20 | LV_STYLE_PROP_LAYOUT_REFR,
LV_STYLE_PAD_BOTTOM = 21 | LV_STYLE_PROP_LAYOUT_REFR,
LV_STYLE_PAD_LEFT = 22 | LV_STYLE_PROP_LAYOUT_REFR,
LV_STYLE_PAD_RIGHT = 23 | LV_STYLE_PROP_LAYOUT_REFR,
LV_STYLE_PAD_ROW = 24 | LV_STYLE_PROP_LAYOUT_REFR,
LV_STYLE_PAD_COLUMN = 25 | LV_STYLE_PROP_LAYOUT_REFR,
/*Group 1*/
LV_STYLE_PAD_TOP = 16 | LV_STYLE_PROP_LAYOUT_REFR,
LV_STYLE_PAD_BOTTOM = 17 | LV_STYLE_PROP_LAYOUT_REFR,
LV_STYLE_PAD_LEFT = 18 | LV_STYLE_PROP_LAYOUT_REFR,
LV_STYLE_PAD_RIGHT = 19 | LV_STYLE_PROP_LAYOUT_REFR,
LV_STYLE_PAD_ROW = 20 | LV_STYLE_PROP_LAYOUT_REFR,
LV_STYLE_PAD_COLUMN = 21 | LV_STYLE_PROP_LAYOUT_REFR,
LV_STYLE_BG_COLOR = 30,
LV_STYLE_BG_COLOR_FILTERED = 30 | LV_STYLE_PROP_FILTER,
LV_STYLE_BG_OPA = 31,
LV_STYLE_BG_GRAD_COLOR = 32,
LV_STYLE_BG_GRAD_COLOR_FILTERED = 32 | LV_STYLE_PROP_FILTER,
LV_STYLE_BG_GRAD_DIR = 33,
LV_STYLE_BG_MAIN_STOP = 35,
LV_STYLE_BG_GRAD_STOP = 36,
/*Group 2*/
LV_STYLE_BG_COLOR = 32,
LV_STYLE_BG_COLOR_FILTERED = 32 | LV_STYLE_PROP_FILTER,
LV_STYLE_BG_OPA = 33,
LV_STYLE_BG_GRAD_COLOR = 34,
LV_STYLE_BG_GRAD_COLOR_FILTERED = 34 | LV_STYLE_PROP_FILTER,
LV_STYLE_BG_GRAD_DIR = 35,
LV_STYLE_BG_MAIN_STOP = 36,
LV_STYLE_BG_GRAD_STOP = 37,
LV_STYLE_BG_IMG_SRC = 40,
LV_STYLE_BG_IMG_OPA = 41,
LV_STYLE_BG_IMG_RECOLOR = 42,
LV_STYLE_BG_IMG_RECOLOR_FILTERED = 43 | LV_STYLE_PROP_FILTER,
LV_STYLE_BG_IMG_RECOLOR_OPA = 44,
LV_STYLE_BG_IMG_TILED = 45,
LV_STYLE_BG_IMG_SRC = 38,
LV_STYLE_BG_IMG_OPA = 39,
LV_STYLE_BG_IMG_RECOLOR = 40,
LV_STYLE_BG_IMG_RECOLOR_FILTERED = 40 | LV_STYLE_PROP_FILTER,
LV_STYLE_BG_IMG_RECOLOR_OPA = 41,
LV_STYLE_BG_IMG_TILED = 42,
LV_STYLE_BORDER_COLOR = 50,
LV_STYLE_BORDER_COLOR_FILTERED = 50 | LV_STYLE_PROP_FILTER,
LV_STYLE_BORDER_OPA = 51,
LV_STYLE_BORDER_WIDTH = 52,
LV_STYLE_BORDER_SIDE = 53,
LV_STYLE_BORDER_POST = 54,
LV_STYLE_BORDER_COLOR = 43,
LV_STYLE_BORDER_COLOR_FILTERED = 43 | LV_STYLE_PROP_FILTER,
LV_STYLE_BORDER_OPA = 44,
LV_STYLE_BORDER_WIDTH = 45,
LV_STYLE_BORDER_SIDE = 46,
LV_STYLE_BORDER_POST = 47,
LV_STYLE_TEXT_COLOR = 60 | LV_STYLE_PROP_INHERIT,
LV_STYLE_TEXT_COLOR_FILTERED = 60 | LV_STYLE_PROP_INHERIT | LV_STYLE_PROP_FILTER,
LV_STYLE_TEXT_OPA = 61 | LV_STYLE_PROP_INHERIT,
LV_STYLE_TEXT_FONT = 62 | LV_STYLE_PROP_INHERIT,
LV_STYLE_TEXT_LETTER_SPACE = 63 | LV_STYLE_PROP_INHERIT,
LV_STYLE_TEXT_LINE_SPACE = 64 | LV_STYLE_PROP_INHERIT,
LV_STYLE_TEXT_DECOR = 65 | LV_STYLE_PROP_INHERIT,
LV_STYLE_TEXT_ALIGN = 66 | LV_STYLE_PROP_INHERIT,
/*Group 3*/
LV_STYLE_OUTLINE_WIDTH = 48 | LV_STYLE_PROP_EXT_DRAW,
LV_STYLE_OUTLINE_COLOR = 49,
LV_STYLE_OUTLINE_COLOR_FILTERED = 49 | LV_STYLE_PROP_FILTER,
LV_STYLE_OUTLINE_OPA = 50 | LV_STYLE_PROP_EXT_DRAW,
LV_STYLE_OUTLINE_PAD = 51 | LV_STYLE_PROP_EXT_DRAW,
LV_STYLE_IMG_OPA = 70,
LV_STYLE_IMG_RECOLOR = 71,
LV_STYLE_IMG_RECOLOR_FILTERED = 71 | LV_STYLE_PROP_FILTER,
LV_STYLE_IMG_RECOLOR_OPA = 73,
LV_STYLE_SHADOW_WIDTH = 55 | LV_STYLE_PROP_EXT_DRAW,
LV_STYLE_SHADOW_OFS_X = 56 | LV_STYLE_PROP_EXT_DRAW,
LV_STYLE_SHADOW_OFS_Y = 57 | LV_STYLE_PROP_EXT_DRAW,
LV_STYLE_SHADOW_SPREAD = 58 | LV_STYLE_PROP_EXT_DRAW,
LV_STYLE_SHADOW_COLOR = 59,
LV_STYLE_SHADOW_COLOR_FILTERED = 59 | LV_STYLE_PROP_FILTER,
LV_STYLE_SHADOW_OPA = 60 | LV_STYLE_PROP_EXT_DRAW,
LV_STYLE_OUTLINE_WIDTH = 80 | LV_STYLE_PROP_EXT_DRAW,
LV_STYLE_OUTLINE_COLOR = 81,
LV_STYLE_OUTLINE_COLOR_FILTERED = 81 | LV_STYLE_PROP_FILTER,
LV_STYLE_OUTLINE_OPA = 82 | LV_STYLE_PROP_EXT_DRAW,
LV_STYLE_OUTLINE_PAD = 83 | LV_STYLE_PROP_EXT_DRAW,
LV_STYLE_SHADOW_WIDTH = 90 | LV_STYLE_PROP_EXT_DRAW,
LV_STYLE_SHADOW_OFS_X = 91 | LV_STYLE_PROP_EXT_DRAW,
LV_STYLE_SHADOW_OFS_Y = 92 | LV_STYLE_PROP_EXT_DRAW,
LV_STYLE_SHADOW_SPREAD = 93 | LV_STYLE_PROP_EXT_DRAW,
LV_STYLE_SHADOW_COLOR = 94,
LV_STYLE_SHADOW_COLOR_FILTERED = 94 | LV_STYLE_PROP_FILTER,
LV_STYLE_SHADOW_OPA = 95 | LV_STYLE_PROP_EXT_DRAW,
/*Group 4*/
LV_STYLE_IMG_OPA = 64,
LV_STYLE_IMG_RECOLOR = 65,
LV_STYLE_IMG_RECOLOR_FILTERED = 65 | LV_STYLE_PROP_FILTER,
LV_STYLE_IMG_RECOLOR_OPA = 66,
LV_STYLE_LINE_WIDTH = 100 | LV_STYLE_PROP_EXT_DRAW,
LV_STYLE_LINE_DASH_WIDTH = 101,
LV_STYLE_LINE_DASH_GAP = 102,
LV_STYLE_LINE_ROUNDED = 103,
LV_STYLE_LINE_COLOR = 104,
LV_STYLE_LINE_COLOR_FILTERED = 104 | LV_STYLE_PROP_FILTER,
LV_STYLE_LINE_OPA = 105,
LV_STYLE_LINE_WIDTH = 68 | LV_STYLE_PROP_EXT_DRAW,
LV_STYLE_LINE_DASH_WIDTH = 69,
LV_STYLE_LINE_DASH_GAP = 70,
LV_STYLE_LINE_ROUNDED = 71,
LV_STYLE_LINE_COLOR = 72,
LV_STYLE_LINE_COLOR_FILTERED = 72 | LV_STYLE_PROP_FILTER,
LV_STYLE_LINE_OPA = 73,
LV_STYLE_ARC_WIDTH = 110 | LV_STYLE_PROP_EXT_DRAW,
LV_STYLE_ARC_ROUNDED = 111,
LV_STYLE_ARC_COLOR = 112,
LV_STYLE_ARC_COLOR_FILTERED = 112 | LV_STYLE_PROP_FILTER,
LV_STYLE_ARC_OPA = 113,
LV_STYLE_ARC_IMG_SRC = 114,
LV_STYLE_ARC_WIDTH = 75 | LV_STYLE_PROP_EXT_DRAW,
LV_STYLE_ARC_ROUNDED = 76,
LV_STYLE_ARC_COLOR = 77,
LV_STYLE_ARC_COLOR_FILTERED = 77 | LV_STYLE_PROP_FILTER,
LV_STYLE_ARC_OPA = 78,
LV_STYLE_ARC_IMG_SRC = 79,
LV_STYLE_CONTENT_TEXT = 120 | LV_STYLE_PROP_EXT_DRAW,
LV_STYLE_CONTENT_ALIGN = 121 | LV_STYLE_PROP_EXT_DRAW,
LV_STYLE_CONTENT_OFS_X = 122 | LV_STYLE_PROP_EXT_DRAW,
LV_STYLE_CONTENT_OFS_Y = 123 | LV_STYLE_PROP_EXT_DRAW,
LV_STYLE_CONTENT_FONT = 124 | LV_STYLE_PROP_EXT_DRAW | LV_STYLE_PROP_INHERIT,
LV_STYLE_CONTENT_COLOR = 125 | LV_STYLE_PROP_INHERIT,
LV_STYLE_CONTENT_COLOR_FILTERED = 125 | LV_STYLE_PROP_INHERIT | LV_STYLE_PROP_FILTER,
LV_STYLE_CONTENT_OPA = 126 | LV_STYLE_PROP_EXT_DRAW | LV_STYLE_PROP_INHERIT,
LV_STYLE_CONTENT_LETTER_SPACE = 127 | LV_STYLE_PROP_EXT_DRAW | LV_STYLE_PROP_INHERIT,
LV_STYLE_CONTENT_LINE_SPACE = 128 | LV_STYLE_PROP_EXT_DRAW | LV_STYLE_PROP_INHERIT,
LV_STYLE_CONTENT_DECOR = 129 | LV_STYLE_PROP_EXT_DRAW | LV_STYLE_PROP_INHERIT,
/*Group 5*/
LV_STYLE_TEXT_COLOR = 80 | LV_STYLE_PROP_INHERIT,
LV_STYLE_TEXT_COLOR_FILTERED = 80 | LV_STYLE_PROP_INHERIT | LV_STYLE_PROP_FILTER,
LV_STYLE_TEXT_OPA = 81 | LV_STYLE_PROP_INHERIT,
LV_STYLE_TEXT_FONT = 82 | LV_STYLE_PROP_INHERIT,
LV_STYLE_TEXT_LETTER_SPACE = 83 | LV_STYLE_PROP_INHERIT,
LV_STYLE_TEXT_LINE_SPACE = 84 | LV_STYLE_PROP_INHERIT,
LV_STYLE_TEXT_DECOR = 85 | LV_STYLE_PROP_INHERIT,
LV_STYLE_TEXT_ALIGN = 86 | LV_STYLE_PROP_INHERIT,
_LV_STYLE_LAST_BUILT_IN_PROP = 140,
/*Group 6*/
LV_STYLE_CONTENT_TEXT = 96 | LV_STYLE_PROP_EXT_DRAW,
LV_STYLE_CONTENT_ALIGN = 97 | LV_STYLE_PROP_EXT_DRAW,
LV_STYLE_CONTENT_OFS_X = 98 | LV_STYLE_PROP_EXT_DRAW,
LV_STYLE_CONTENT_OFS_Y = 99 | LV_STYLE_PROP_EXT_DRAW,
LV_STYLE_CONTENT_FONT = 100 | LV_STYLE_PROP_EXT_DRAW | LV_STYLE_PROP_INHERIT,
LV_STYLE_CONTENT_COLOR = 101 | LV_STYLE_PROP_INHERIT,
LV_STYLE_CONTENT_COLOR_FILTERED = 101 | LV_STYLE_PROP_INHERIT | LV_STYLE_PROP_FILTER,
LV_STYLE_CONTENT_OPA = 102 | LV_STYLE_PROP_EXT_DRAW | LV_STYLE_PROP_INHERIT,
LV_STYLE_CONTENT_LETTER_SPACE = 103 | LV_STYLE_PROP_EXT_DRAW | LV_STYLE_PROP_INHERIT,
LV_STYLE_CONTENT_LINE_SPACE = 104 | LV_STYLE_PROP_EXT_DRAW | LV_STYLE_PROP_INHERIT,
LV_STYLE_CONTENT_DECOR = 105 | LV_STYLE_PROP_EXT_DRAW | LV_STYLE_PROP_INHERIT,
_LV_STYLE_LAST_BUILT_IN_PROP = 111,
LV_STYLE_PROP_ALL = 0xFFFF
}lv_style_prop_t;
@@ -251,13 +260,14 @@ typedef struct {
lv_style_value_t value1;
};
struct {
uint8_t * props_and_values;
uint8_t * values_and_props;
};
};
uint16_t prop1;
uint16_t prop_cnt:14;
uint16_t allocated:1;
uint8_t has_group;
uint8_t prop_cnt :7;
uint8_t allocated :1;
} lv_style_t;
/**********************
-2
View File
@@ -484,8 +484,6 @@ static void lv_arc_constructor(lv_obj_t * obj, lv_obj_t * parent, const lv_obj_t
{
LV_LOG_TRACE("lv_arc create started");
lv_obj_construct_base(obj, parent, copy);
lv_arc_t * arc = (lv_arc_t *)obj;
LV_LOG_TRACE("arc create started");
-2
View File
@@ -203,8 +203,6 @@ static void lv_bar_constructor(lv_obj_t * obj, lv_obj_t * parent, const lv_obj_t
{
LV_LOG_TRACE("lv_bar create started");
lv_obj_construct_base(obj, parent, copy);
lv_bar_t * bar = (lv_bar_t *)obj;
bar->min_value = 0;
bar->max_value = 100;
-2
View File
@@ -55,8 +55,6 @@ static void lv_btn_constructor(lv_obj_t * obj, lv_obj_t * parent, const lv_obj_t
{
LV_LOG_TRACE("lv_btn create started");
lv_obj_construct_base(obj, parent, copy);
lv_obj_set_size(obj, LV_DPI_DEF, LV_DPI_DEF / 3);
lv_obj_clear_flag(obj, LV_OBJ_FLAG_SCROLLABLE);
-2
View File
@@ -375,8 +375,6 @@ bool lv_btnmatrix_get_one_checked(const lv_obj_t * obj)
static void lv_btnmatrix_constructor(lv_obj_t * obj, lv_obj_t * parent, const lv_obj_t * copy)
{
lv_obj_construct_base(obj, parent, copy);
lv_btnmatrix_t * btnm = (lv_btnmatrix_t *)obj;
btnm->btn_cnt = 0;
btnm->btn_id_pr = LV_BTNMATRIX_BTN_NONE;
-2
View File
@@ -890,8 +890,6 @@ static void lv_canvas_constructor(lv_obj_t * obj, lv_obj_t * parent, const lv_ob
{
LV_LOG_TRACE("canvas create started");
lv_obj_construct_base(obj, parent, copy);
lv_canvas_t * canvas = (lv_canvas_t *) obj;
/*Initialize the allocated 'ext' */
+2 -4
View File
@@ -493,8 +493,6 @@ static void lv_chart_constructor(lv_obj_t * obj, lv_obj_t * parent, const lv_obj
{
LV_LOG_TRACE("chart create started");
lv_obj_construct_base(obj, parent, copy);
lv_chart_t * chart = (lv_chart_t *) obj;
_lv_ll_init(&chart->series_ll, sizeof(lv_chart_series_t));
@@ -627,7 +625,7 @@ static void draw_div_lines(lv_obj_t * obj, const lv_area_t * clip_area)
lv_coord_t scroll_top = lv_obj_get_scroll_top(obj);
if(chart->hdiv_cnt != 0) {
lv_coord_t y_ofs = obj->coords.y1 + pad_top - scroll_top;
p1.x = obj->coords.x1 + scroll_left;
p1.x = obj->coords.x1;
p2.x = obj->coords.x2;
for(i = 0; i <= chart->hdiv_cnt + 1; i++) {
p1.y = (int32_t)((int32_t)(h - line_dsc.width) * i) / (chart->hdiv_cnt + 1);
@@ -639,7 +637,7 @@ static void draw_div_lines(lv_obj_t * obj, const lv_area_t * clip_area)
if(chart->vdiv_cnt != 0) {
lv_coord_t x_ofs = obj->coords.x1 + pad_left - scroll_left;
p1.y = obj->coords.y1 + scroll_top;
p1.y = obj->coords.y1;
p2.y = obj->coords.y2;
for(i = 0; i <= chart->vdiv_cnt + 1; i++) {
p1.x = (int32_t)((int32_t)(w - line_dsc.width) * i) / (chart->vdiv_cnt + 1);
+2 -2
View File
@@ -181,9 +181,9 @@ uint16_t lv_chart_get_zoom_x(const lv_obj_t * obj);
uint16_t lv_chart_get_zoom_y(const lv_obj_t * obj);
/**
* Set the number of tick lines between two division lines
* Set the number of tick lines on an axis
* @param obj pointer to a chart object
* @param axis an axis which sub tick count should be set
* @param axis an axis which ticks count should be set
* @param major_len length of major ticks
* @param minor_len length of minor ticks
* @param major_cnt number of major ticks on the axis
+1 -3
View File
@@ -111,8 +111,6 @@ static void lv_checkbox_constructor(lv_obj_t * obj, lv_obj_t * parent, const lv_
{
LV_LOG_TRACE("lv_checkbox create started");
lv_obj_construct_base(obj, parent, copy);
lv_checkbox_t * cb = (lv_checkbox_t *) obj;
/*Create the ancestor basic object*/
@@ -122,7 +120,7 @@ static void lv_checkbox_constructor(lv_obj_t * obj, lv_obj_t * parent, const lv_
cb->static_txt = 1;
lv_obj_add_flag(obj, LV_OBJ_FLAG_CLICKABLE);
lv_obj_add_flag(obj, LV_OBJ_FLAG_CHECKABLE);
lv_obj_set_size(obj, LV_SIZE_AUTO, LV_SIZE_AUTO);
lv_obj_set_size(obj, LV_SIZE_CONTENT, LV_SIZE_CONTENT);
}
else {
// const lv_checkbox_t * copy_ext = (const lv_checkbox_t *)copy;
+1 -12
View File
@@ -41,7 +41,6 @@ static lv_draw_res_t lv_dropdown_draw(lv_obj_t * obj, const lv_area_t * clip_are
static lv_res_t lv_dropdown_signal(lv_obj_t * obj, lv_signal_t sign, void * param);
static void lv_dropdown_list_constructor(lv_obj_t * obj, lv_obj_t * parent, const lv_obj_t * copy);
static void lv_dropdown_list_destructor(lv_obj_t * obj);
static lv_draw_res_t lv_dropdown_list_draw(lv_obj_t * obj, const lv_area_t * clip_area, lv_draw_mode_t mode);
static lv_res_t lv_dropdown_list_signal(lv_obj_t * list, lv_signal_t sign, void * param);
@@ -68,7 +67,6 @@ const lv_obj_class_t lv_dropdown = {
const lv_obj_class_t lv_dropdown_list = {
.constructor_cb = lv_dropdown_list_constructor,
.destructor_cb = lv_dropdown_list_destructor,
.signal_cb = lv_dropdown_list_signal,
.draw_cb = lv_dropdown_list_draw,
.instance_size = sizeof(lv_dropdown_list_t),
@@ -421,7 +419,7 @@ void lv_dropdown_open(lv_obj_t * dropdown_obj)
(dropdown->dir == LV_DIR_TOP || dropdown->dir == LV_DIR_BOTTOM)) {
lv_obj_set_width(dropdown->list, lv_obj_get_width(dropdown_obj));
} else {
lv_obj_set_width(dropdown->list, LV_SIZE_AUTO);
lv_obj_set_width(dropdown->list, LV_SIZE_CONTENT);
}
lv_obj_t * label = get_label(dropdown_obj);
@@ -526,8 +524,6 @@ static void lv_dropdown_constructor(lv_obj_t * obj, lv_obj_t * parent, const lv_
{
LV_LOG_TRACE("dropdown create started");
lv_obj_construct_base(obj, parent, copy);
lv_dropdown_t * dropdown = (lv_dropdown_t *) obj;
/*Initialize the allocated 'ext' */
@@ -776,16 +772,9 @@ static lv_draw_res_t lv_dropdown_list_draw(lv_obj_t * list_obj, const lv_area_t
static void lv_dropdown_list_constructor(lv_obj_t * obj, lv_obj_t * parent, const lv_obj_t * copy)
{
lv_obj_construct_base(obj, parent, copy);
lv_label_create(obj, NULL);
}
static void lv_dropdown_list_destructor(lv_obj_t * obj)
{
}
/**
* Signal function of the drop down list
* @param ddlist pointer to a drop down list object
+2 -4
View File
@@ -364,8 +364,6 @@ static void lv_img_constructor(lv_obj_t * obj, lv_obj_t * parent, const lv_obj_t
{
LV_LOG_TRACE("lv_bar create started");
lv_obj_construct_base(obj, parent, copy);
lv_img_t * img = (lv_img_t *)obj;
img->src = NULL;
@@ -388,7 +386,7 @@ static void lv_img_constructor(lv_obj_t * obj, lv_obj_t * parent, const lv_obj_t
/* Enable auto size for non screens
* because image screens are wallpapers
* and must be screen sized*/
if(parent) lv_obj_set_size(obj, LV_SIZE_AUTO, LV_SIZE_AUTO);
if(parent) lv_obj_set_size(obj, LV_SIZE_CONTENT, LV_SIZE_CONTENT);
}
else {
lv_img_t * copy_img = (lv_img_t *) copy;
@@ -526,7 +524,7 @@ static lv_draw_res_t lv_img_draw(lv_obj_t * obj, const lv_area_t * clip_area, lv
lv_draw_label_dsc_init(&label_dsc);
lv_obj_init_draw_label_dsc(obj, LV_PART_MAIN, &label_dsc);
label_dsc.color = lv_obj_get_style_img_recolor(obj, LV_PART_MAIN);
// label_dsc.color = lv_obj_get_style_img_recolor(obj, LV_PART_MAIN);
lv_draw_label(&obj->coords, clip_area, &label_dsc, img->src, NULL);
}
else {
-2
View File
@@ -701,8 +701,6 @@ static void lv_label_constructor(lv_obj_t * obj, lv_obj_t * parent, const lv_obj
{
LV_LOG_TRACE("label create started");
lv_obj_construct_base(obj, parent, copy);
lv_label_t * label = (lv_label_t *)obj;
label->text = NULL;
+1 -3
View File
@@ -108,8 +108,6 @@ static void lv_line_constructor(lv_obj_t * obj, lv_obj_t * parent, const lv_obj_
{
LV_LOG_TRACE("line create started");
lv_obj_construct_base(obj, parent, copy);
/*Create a basic object*/
lv_line_t * line = (lv_line_t *) obj;
line->point_num = 0;
@@ -119,7 +117,7 @@ static void lv_line_constructor(lv_obj_t * obj, lv_obj_t * parent, const lv_obj_
/*Init the new line*/
if(copy == NULL) {
lv_obj_set_size(obj, LV_SIZE_AUTO, LV_SIZE_AUTO);
lv_obj_set_size(obj, LV_SIZE_CONTENT, LV_SIZE_CONTENT);
lv_obj_clear_flag(obj, LV_OBJ_FLAG_CLICKABLE);
}
/*Copy an existing object*/
+1 -3
View File
@@ -284,8 +284,6 @@ uint16_t lv_roller_get_option_cnt(const lv_obj_t * obj)
static void lv_roller_constructor(lv_obj_t * obj, lv_obj_t * parent, const lv_obj_t * copy)
{
lv_obj_construct_base(obj, parent, copy);
lv_roller_t * roller = (lv_roller_t*)obj;
roller->mode = LV_ROLLER_MODE_NORMAL;
@@ -297,7 +295,7 @@ static void lv_roller_constructor(lv_obj_t * obj, lv_obj_t * parent, const lv_ob
if(copy == NULL) {
lv_obj_clear_flag(obj, LV_OBJ_FLAG_SCROLLABLE);
lv_obj_clear_flag(obj, LV_OBJ_FLAG_SCROLL_CHAIN);
lv_obj_set_width(obj, LV_SIZE_AUTO);
lv_obj_set_width(obj, LV_SIZE_CONTENT);
lv_obj_create_from_class(&lv_roller_label, obj, NULL);
lv_roller_set_options(obj, "Option 1\nOption 2\nOption 3\nOption 4\nOption 5", LV_ROLLER_MODE_NORMAL);
-1
View File
@@ -80,7 +80,6 @@ bool lv_slider_is_dragged(const lv_obj_t * obj)
static void lv_slider_constructor(lv_obj_t * obj, lv_obj_t * parent, const lv_obj_t * copy)
{
lv_obj_construct_base(obj, parent, copy);
lv_slider_t * slider = (lv_slider_t *)obj;
/*Initialize the allocated 'slider' */
-2
View File
@@ -78,8 +78,6 @@ static void lv_switch_constructor(lv_obj_t * obj, lv_obj_t * parent, const lv_ob
{
LV_LOG_TRACE("switch create started");
lv_obj_construct_base(obj, parent, copy);
if(copy == NULL) {
lv_obj_clear_flag(obj, LV_OBJ_FLAG_SCROLLABLE);
lv_obj_add_flag(obj, LV_OBJ_FLAG_CHECKABLE);

Some files were not shown because too many files have changed in this diff Show More