static void ssd1306_task(void *pvParameters) { printf("%s: Started user interface task\n", __FUNCTION__); vTaskDelay(SECOND); ssd1306_set_whole_display_lighting(&dev, false); //Set a style for the obj lv_style_copy(&style, &lv_style_transp); style.text.font = &lv_font_dejavu_10; /*Unicode and symbol fonts already assigned by the library*/ style.text.color.full = 1; style.text.opa = 255; style.body.main_color.full = 0; style.body.grad_color.full = 0; style.body.shadow.color.full = 0; style.body.border.color.full = 0; style.body.empty = 1; style.image.color.full = 1; style.image.intense = 255; style.image.opa = 255; style.line.color.full = 1; style.line.opa = 255; style.line.width = 1; style.line.rounded = false; //Create main screen obj lv_obj_t * scr = lv_obj_create(NULL, NULL); lv_scr_load(scr); lv_obj_set_style(scr, &style); //Create a simple label label = lv_label_create(lv_scr_act(), NULL); lv_obj_set_style(label, &style); lv_obj_align(label, lv_scr_act(), LV_ALIGN_IN_TOP_LEFT, 0, 0); lv_label_set_long_mode(label, LV_LABEL_LONG_BREAK); lv_label_set_align(label, LV_LABEL_ALIGN_CENTER); lv_label_set_text(label, "lvgl work with esp-open-rtos"); lv_obj_set_width(label, LV_HOR_RES); while (1) { /*draw system call */ lv_task_handler(); vTaskDelay(1); } }
/** * Create a led objects * @param par pointer to an object, it will be the parent of the new led * @param copy pointer to a led object, if not NULL then the new object will be copied from it * @return pointer to the created led */ lv_obj_t * lv_led_create(lv_obj_t * par, lv_obj_t * copy) { /*Create the ancestor basic object*/ lv_obj_t * new_led = lv_obj_create(par, copy); dm_assert(new_led); /*Allocate the object type specific extended data*/ lv_led_ext_t * ext = lv_obj_alloc_ext(new_led, sizeof(lv_led_ext_t)); dm_assert(ext); ext->bright = LV_LED_BRIGHT_ON; if(ancestor_design_f == NULL) ancestor_design_f = lv_obj_get_design_f(new_led); lv_obj_set_signal_f(new_led, lv_led_signal); lv_obj_set_design_f(new_led, lv_led_design); /*Init the new led object*/ if(copy == NULL) { lv_obj_set_style(new_led, lv_style_get(LV_STYLE_PRETTY_COLOR, NULL)); lv_obj_set_size(new_led, LV_LED_WIDTH_DEF, LV_LED_HEIGHT_DEF); } /*Copy an existing object*/ else { lv_led_ext_t * copy_ext = lv_obj_get_ext(copy); ext->bright = copy_ext->bright; /*Refresh the style with new signal function*/ lv_obj_refr_style(new_led); } return new_led; }
/** * Create a template objects * @param par pointer to an object, it will be the parent of the new template * @param copy pointer to a template object, if not NULL then the new object will be copied from it * @return pointer to the created template */ lv_obj_t * lv_templ_create(lv_obj_t * par, lv_obj_t * copy) { /*Create the ancestor of template*/ /*TODO modify it to the ancestor create function */ lv_obj_t * new_templ = lv_ANCESTOR_create(par, copy); dm_assert(new_templ); /*Allocate the template type specific extended data*/ lv_templ_ext_t * ext = lv_obj_alloc_ext(new_templ, sizeof(lv_templ_ext_t)); dm_assert(ext); /*Initialize the allocated 'ext' */ ext->xyz = 0; /*The signal and design functions are not copied so set them here*/ lv_obj_set_signal_f(new_templ, lv_templ_signal); lv_obj_set_design_f(new_templ, lv_templ_design); /*Init the new template template*/ if(copy == NULL) { lv_obj_set_style(new_templ, lv_style_get(LV_STYLE_PRETTY, NULL)); } /*Copy an existing template*/ else { lv_templ_ext_t * copy_ext = lv_obj_get_ext(copy); /*Refresh the style with new signal function*/ lv_obj_refr_style(new_templ); } return new_templ; }
/** * Set a style of a roller * @param roller pointer to a roller object * @param type which style should be set * @param style pointer to a style */ void lv_roller_set_style(lv_obj_t *roller, lv_roller_style_t type, lv_style_t *style) { switch (type) { case LV_ROLLER_STYLE_BG: lv_obj_set_style(roller, style); break; case LV_ROLLER_STYLE_SEL: lv_ddlist_set_style(roller, LV_DDLIST_STYLE_SEL, style); break; } }
/** * Open a shortcut for an application * @param app pointer to an application * @param sc pointer to an object where the application * can create content of the shortcut */ static void my_sc_open(lv_app_inst_t * app, lv_obj_t * sc) { my_sc_data_t * sc_data = app->sc_data; my_app_data_t * app_data = app->app_data; sc_data->label = lv_label_create(sc, NULL); lv_obj_set_style(sc_data->label, &style_sc_label); lv_label_set_text(sc_data->label, fs_get_last(app_data->path)); lv_obj_align(sc_data->label, NULL, LV_ALIGN_CENTER, 0, 0); }
/** * Set a style of a page * @param page pointer to a page object * @param type which style should be set * @param style pointer to a style * */ void lv_page_set_style(lv_obj_t *page, lv_page_style_t type, lv_style_t *style) { lv_page_ext_t * ext = lv_obj_get_ext_attr(page); switch (type) { case LV_PAGE_STYLE_BG: lv_obj_set_style(page, style); break; case LV_PAGE_STYLE_SCRL: lv_obj_set_style(ext->scrl, style); break; case LV_PAGE_STYLE_SB: ext->sb.style = style; lv_area_set_height(&ext->sb.hor_area, ext->sb.style->body.padding.inner); lv_area_set_width(&ext->sb.ver_area, ext->sb.style->body.padding.inner); lv_page_sb_refresh(page); lv_obj_refresh_ext_size(page); lv_obj_invalidate(page); break; } }
/** * Create an mpty list on the window. 'win_load_file_list' will fill it. * @param app pointer to a Files application */ static void win_create_list(lv_app_inst_t * app) { my_win_data_t * win_data = app->win_data; /*Delete the previous list*/ if(win_data->file_list != NULL) { lv_obj_del(win_data->file_list); } /*Create a new list*/ win_data->file_list = lv_list_create(app->win, NULL); lv_obj_set_width(win_data->file_list, lv_win_get_width(app->win)); lv_list_set_style_img(win_data->file_list, &style_btn_symbol); lv_obj_set_style(lv_page_get_scrl(win_data->file_list), lv_style_get(LV_STYLE_TRANSP_TIGHT, NULL)); lv_obj_set_drag_parent(win_data->file_list, true); lv_obj_set_drag_parent(lv_page_get_scrl(win_data->file_list), true); lv_cont_set_fit(win_data->file_list, false, true); lv_cont_set_layout(lv_page_get_scrl(win_data->file_list), LV_CONT_LAYOUT_COL_L); }
/********************** * STATIC FUNCTIONS **********************/ static void create_tab1(lv_theme_t * th, lv_obj_t *parent) { lv_page_set_scrl_layout(parent, LV_LAYOUT_PRETTY); static lv_style_t h_style; lv_style_copy(&h_style, &lv_style_transp); h_style.body.padding.inner = LV_DPI / 4; h_style.body.padding.hor = LV_DPI / 4; h_style.body.padding.ver = LV_DPI / 6; lv_obj_t *h = lv_cont_create(parent, NULL); lv_obj_set_style(h, &h_style); lv_obj_set_click(h, false); lv_cont_set_fit(h, true, true); lv_cont_set_layout(h, LV_LAYOUT_COL_M); lv_obj_t *btn = lv_btn_create(h, NULL); lv_btn_set_style(btn, LV_BTN_STYLE_REL, th->btn.rel); lv_btn_set_style(btn, LV_BTN_STYLE_PR, th->btn.pr); lv_btn_set_style(btn, LV_BTN_STYLE_TGL_REL, th->btn.tgl_rel); lv_btn_set_style(btn, LV_BTN_STYLE_TGL_PR, th->btn.tgl_pr); lv_btn_set_style(btn, LV_BTN_STYLE_INA, th->btn.ina); lv_btn_set_fit(btn, true, true); lv_btn_set_toggle(btn, true); lv_obj_t *btn_label = lv_label_create(btn, NULL); lv_label_set_text(btn_label, "Button"); btn = lv_btn_create(h, btn); lv_btn_toggle(btn); btn_label = lv_label_create(btn, NULL); lv_label_set_text(btn_label, "Toggled"); btn = lv_btn_create(h, btn); lv_btn_set_state(btn, LV_BTN_STATE_INA); btn_label = lv_label_create(btn, NULL); lv_label_set_text(btn_label, "Inactive"); lv_obj_t *label = lv_label_create(h, NULL); lv_label_set_text(label, "Primary"); lv_obj_set_style(label, th->label.prim); label = lv_label_create(h, NULL); lv_label_set_text(label, "Secondary"); lv_obj_set_style(label, th->label.sec); label = lv_label_create(h, NULL); lv_label_set_text(label, "Hint"); lv_obj_set_style(label, th->label.hint); static const char *btnm_str[] = {"1", "2", "3", SYMBOL_OK, SYMBOL_CLOSE, ""}; lv_obj_t *btnm = lv_btnm_create(h, NULL); lv_obj_set_size(btnm,LV_HOR_RES / 4, 2 * LV_DPI / 3); lv_btnm_set_map(btnm, btnm_str); lv_btnm_set_toggle(btnm, true, 3); h = lv_cont_create(parent, h); lv_obj_t *sw_h = lv_cont_create(h, NULL); lv_cont_set_style(sw_h, &lv_style_transp); lv_cont_set_fit(sw_h, false, true); lv_obj_set_width(sw_h, LV_HOR_RES / 4); lv_cont_set_layout(sw_h, LV_LAYOUT_PRETTY); lv_obj_t *sw = lv_sw_create(sw_h, NULL); sw = lv_sw_create(sw_h, sw); lv_sw_on(sw); lv_obj_t *bar = lv_bar_create(h, NULL); lv_bar_set_value(bar, 70); lv_obj_t *slider = lv_slider_create(h, NULL); lv_bar_set_value(slider, 70); lv_obj_t *line = lv_line_create(h, NULL); static const lv_point_t line_p[] = {{0,0},{LV_HOR_RES / 5, 0}}; lv_line_set_points(line, line_p, 2); lv_line_set_style(line, th->line.decor); lv_obj_t *ta = lv_ta_create(h, NULL); lv_obj_set_style(ta, th->ta.oneline); lv_ta_set_text(ta, "Some text"); lv_ta_set_one_line(ta, true); lv_obj_t *cb = lv_cb_create(h, NULL); cb = lv_cb_create(h, cb); lv_btn_set_state(cb, LV_BTN_STATE_TGL_REL); lv_obj_t *ddlist = lv_ddlist_create(h, NULL); lv_ddlist_open(ddlist, false); lv_ddlist_set_selected(ddlist, 1); h = lv_cont_create(parent, h); lv_obj_t * list = lv_list_create(h, NULL); lv_obj_t *list_btn; list_btn = lv_list_add(list, SYMBOL_GPS, "GPS", NULL); lv_obj_set_size(list, LV_HOR_RES / 4, LV_VER_RES / 2); lv_btn_set_toggle(list_btn, true); lv_list_add(list, SYMBOL_WIFI, "WiFi", NULL); lv_list_add(list, SYMBOL_GPS, "GPS", NULL); lv_list_add(list, SYMBOL_AUDIO, "Audio", NULL); lv_list_add(list, SYMBOL_VIDEO, "Video", NULL); lv_list_add(list, SYMBOL_CALL, "Call", NULL); lv_list_add(list, SYMBOL_BELL, "Bell", NULL); lv_list_add(list, SYMBOL_FILE, "File", NULL); lv_list_add(list, SYMBOL_EDIT, "Edit", NULL); lv_list_add(list, SYMBOL_CUT, "Cut", NULL); lv_list_add(list, SYMBOL_COPY, "Copy", NULL); lv_obj_t *roller = lv_roller_create(h, NULL); lv_roller_set_options(roller, "Monday\nTuesday\nWednesday\nThursday\nFriday\nSaturday\nSunday"); lv_roller_set_selected(roller, 1, false); lv_roller_set_visible_row_count(roller, 3); }
/** * Create objects to configure the applications * @param app pointer to an application which settings should be created * @param conf_win pointer to a window where the objects can be created * (the window has the proper layout) */ static void my_conf_open(lv_app_inst_t * app, lv_obj_t * conf_win) { my_app_data_t * app_data = app->app_data; /*Create check boxes*/ lv_obj_t * cb; /*Send file name check box*/ cb = lv_cb_create(conf_win, NULL); lv_cb_set_text(cb, "Send file name"); lv_obj_set_free_num(cb, SEND_SETTINGS_FN); lv_obj_set_free_p(cb, app); lv_btn_set_rel_action(cb, win_send_settings_element_rel_action); if(app_data->send_fn != 0) lv_btn_set_state(cb, LV_BTN_STATE_TREL); else lv_btn_set_state(cb, LV_BTN_STATE_REL); /*Send size check box*/ cb = lv_cb_create(conf_win, cb); lv_cb_set_text(cb, "Send size"); lv_obj_set_free_num(cb, SEND_SETTINGS_SIZE); if(app_data->send_size != 0) lv_btn_set_state(cb, LV_BTN_STATE_TREL); else lv_btn_set_state(cb, LV_BTN_STATE_REL); /*Send CRC check box*/ cb = lv_cb_create(conf_win, cb); lv_cb_set_text(cb, "Send CRC"); lv_obj_set_free_num(cb, SEND_SETTINGS_CRC); if(app_data->send_crc != 0) lv_btn_set_state(cb, LV_BTN_STATE_TREL); else lv_btn_set_state(cb, LV_BTN_STATE_REL); /*Create a text area to type chunk size*/ lv_obj_t * val_set_h; val_set_h = lv_cont_create(conf_win, NULL); lv_obj_set_style(val_set_h, lv_style_get(LV_STYLE_PLAIN_COLOR, NULL)); lv_obj_set_click(val_set_h, false); lv_cont_set_fit(val_set_h, true, true); lv_cont_set_layout(val_set_h, LV_CONT_LAYOUT_ROW_M); lv_obj_t * label; label = lv_label_create(val_set_h, NULL); lv_label_set_text(label, "Chunk size"); lv_obj_t * ta; char buf[32]; ta = lv_ta_create(val_set_h, NULL); lv_cont_set_fit(ta, false, true); lv_obj_set_free_num(ta, SEND_SETTINGS_CHUNK_SIZE); lv_obj_set_free_p(ta, app); lv_page_set_rel_action(ta, win_send_settings_element_rel_action); sprintf(buf, "%d", app_data->chunk_size); lv_ta_set_text(ta, buf); /*Create a text area to type the chunk delay*/ val_set_h = lv_cont_create(conf_win, val_set_h); label = lv_label_create(val_set_h, NULL); lv_label_set_text(label, "Inter-chunk delay"); ta = lv_ta_create(val_set_h, ta); lv_obj_set_free_num(ta, SEND_SETTINGS_CHUNK_DELAY); sprintf(buf, "%d", app_data->chunk_delay); lv_ta_set_text(ta, buf); }