Files
lvgl/demos/smartwatch/lv_demo_smartwatch.c
2025-01-21 15:34:03 -03:00

584 lines
22 KiB
C

/**
* @file lv_demo_smartwatch.c
* Smartwatch general functions.
*/
/*********************
* INCLUDES
*********************/
#include "lv_demo_smartwatch.h"
#if LV_USE_DEMO_SMARTWATCH
#include "lv_demo_smartwatch_private.h"
#include "lv_demo_smartwatch_home.h"
#include "lv_demo_smartwatch_list.h"
#include "lv_demo_smartwatch_notifications.h"
#include "lv_demo_smartwatch_settings.h"
#include "lv_demo_smartwatch_control.h"
#include "lv_demo_smartwatch_weather.h"
#include "lv_demo_smartwatch_qr.h"
#include "lv_demo_smartwatch_easter_egg.h"
/*********************
* DEFINES
*********************/
/**********************
* TYPEDEFS
**********************/
/**********************
* STATIC PROTOTYPES
**********************/
static void create_dialog_window(void);
static void create_scroll_hints(void);
static void lv_demo_obj_set_hidden(lv_obj_t * obj, bool state);
static void dialog_close_event_cb(lv_event_t * e);
static void lv_create_home_tile(void);
static void home_tileview_event_cb(lv_event_t * e);
static lv_anim_t * obj_set_opacity_anim(lv_obj_t * obj);
static void anim_set_opacity_cb(lv_anim_t * a, int32_t v);
/**********************
* STATIC VARIABLES
**********************/
static lv_theme_t * theme_original;
static bool circular_scroll;
static bool show_scroll_hints;
static bool load_app_list;
static bool first_load;
static lv_scrollbar_mode_t scrollbar_mode;
static lv_obj_t * home_tile;
static lv_obj_t * dialog_parent;
static lv_obj_t * dialog_window;
static lv_obj_t * dialog_panel;
static lv_obj_t * dialog_title;
static lv_obj_t * dialog_message;
static lv_obj_t * dialog_close;
static lv_obj_t * dialog_close_label;
static lv_obj_t * hint_panel;
static lv_obj_t * hint_up;
static lv_obj_t * hint_down;
static lv_obj_t * hint_left;
static lv_obj_t * hint_right;
static lv_anim_t * anim_up;
static lv_anim_t * anim_down;
static lv_anim_t * anim_left;
static lv_anim_t * anim_right;
/**********************
* GLOBAL VARIABLES
**********************/
/**********************
* MACROS
**********************/
/**********************
* GLOBAL FUNCTIONS
**********************/
void lv_demo_smartwatch(void)
{
/*Use the simple the to make styling simpler*/
lv_display_t * display = lv_display_get_default();
theme_original = lv_display_get_theme(display);
lv_theme_t * theme = lv_theme_default_init(display, lv_palette_main(LV_PALETTE_BLUE), lv_palette_main(LV_PALETTE_RED),
true, LV_FONT_DEFAULT);
lv_display_set_theme(display, theme);
create_dialog_window();
create_scroll_hints();
lv_create_home_tile();
lv_demo_smartwatch_set_circular_scroll(true);
lv_demo_smartwatch_control_create(home_tile);
lv_demo_smartwatch_home_create(home_tile);
lv_demo_smartwatch_list_create(home_tile);
lv_tileview_set_tile_by_index(home_tile, 0, 1, LV_ANIM_OFF);
lv_demo_smartwatch_notifications_create();
lv_demo_smartwatch_settings_create();
lv_demo_smartwatch_weather_create();
lv_demo_smartwatch_qr_create();
lv_demo_smartwatch_easter_egg_create();
lv_demo_smartwatch_set_default_scrollbar_mode(LV_SCROLLBAR_MODE_OFF);
lv_demo_smartwatch_set_default_hints_state(true);
lv_demo_smartwatch_set_default_brightness(100);
/* load the logo screen immediately, more like a boot logo */
lv_demo_smartwatch_easter_egg_load(LV_SCR_LOAD_ANIM_FADE_IN, 0, 0);
/* load the home screen after 2500ms */
lv_demo_smartwatch_home_load(LV_SCR_LOAD_ANIM_FADE_IN, 500, 2500);
}
void lv_demo_smartwatch_scroll_event(lv_event_t * e)
{
lv_event_code_t event_code = lv_event_get_code(e);
lv_obj_t * list = lv_event_get_target(e);
if(event_code == LV_EVENT_SCROLL) {
lv_area_t list_a;
lv_obj_get_coords(list, &list_a);
lv_coord_t list_y_center = list_a.y1 + lv_area_get_height(&list_a) / 2;
lv_coord_t r = lv_obj_get_height(list) * 7 / 10;
uint32_t i;
uint32_t child_cnt = lv_obj_get_child_count(list);
for(i = 0; i < child_cnt; i++) {
lv_obj_t * child = lv_obj_get_child(list, i);
lv_area_t child_a;
lv_obj_get_coords(child, &child_a);
lv_coord_t child_y_center = child_a.y1 + lv_area_get_height(&child_a) / 2;
lv_coord_t diff_y = child_y_center - list_y_center;
diff_y = LV_ABS(diff_y);
/*Get the x of diff_y on a circle.*/
lv_coord_t x;
/*If diff_y is out of the circle use the last point of the circle (the radius)*/
if(diff_y >= r) {
x = r;
}
else {
/*Use Pythagoras theorem to get x from radius and y*/
uint32_t x_sqr = r * r - diff_y * diff_y;
lv_sqrt_res_t res;
lv_sqrt(x_sqr, &res, 0x8000); /*Use lvgl's built in sqrt root function*/
x = r - res.i;
}
/*Translate the item by the calculated X coordinate*/
lv_obj_set_style_translate_x(child, circular_scroll ? x : 0, 0);
}
}
}
void lv_demo_smartwatch_show_dialog(const char * title, const char * message)
{
lv_obj_t * active_screen = lv_screen_active();
if(lv_obj_check_type(active_screen, &lv_tileview_class)) {
/* attach the dialog window to the current active tile */
lv_obj_set_parent(dialog_window, lv_tileview_get_tile_active(active_screen));
}
else {
/* attach the dialog window to current active screen */
lv_obj_set_parent(dialog_window, active_screen);
}
lv_label_set_text(dialog_title, title);
lv_label_set_text(dialog_message, message);
lv_obj_remove_flag(dialog_window, LV_OBJ_FLAG_HIDDEN); /* show the dialog */
lv_obj_scroll_to_y(dialog_window, 0, LV_ANIM_ON);
}
void lv_demo_smartwatch_set_load_app_list(bool state)
{
load_app_list = state;
}
bool lv_demo_smartwatch_get_load_app_list(void)
{
return load_app_list;
}
lv_obj_t * lv_demo_smartwatch_get_tileview(void)
{
return home_tile;
}
void lv_demo_smartwatch_home_load(lv_screen_load_anim_t anim_type, uint32_t time, uint32_t delay)
{
lv_screen_load_anim(home_tile, anim_type, time, delay, false);
}
void lv_demo_smartwatch_load_home_watchface(void)
{
lv_obj_t * active_screen = lv_screen_active();
if(active_screen != home_tile) {
lv_screen_load_anim(home_tile, LV_SCR_LOAD_ANIM_FADE_IN, 500, 0, false);
}
if(lv_tileview_get_tile_active(home_tile) != lv_demo_smartwatch_get_tile_home()) {
lv_tileview_set_tile_by_index(home_tile, 0, 1, LV_ANIM_OFF);
}
}
lv_scrollbar_mode_t lv_demo_smartwatch_get_scrollbar_mode(void)
{
return scrollbar_mode;
}
void lv_demo_smartwatch_set_scrollbar_mode(lv_scrollbar_mode_t mode)
{
scrollbar_mode = mode;
}
void lv_demo_smartwatch_set_circular_scroll(bool state)
{
circular_scroll = state;
}
void lv_demo_smartwatch_set_scroll_hint(bool state)
{
show_scroll_hints = state;
}
bool lv_demo_smartwatch_get_scroll_hint(void)
{
return show_scroll_hints;
}
void lv_demo_smartwatch_show_scroll_hint(lv_dir_t dir)
{
if(!show_scroll_hints) {
/* scroll hints are disabled, make sure hint panel is hidden */
lv_demo_obj_set_hidden(hint_panel, true);
return;
}
lv_demo_obj_set_hidden(hint_up, (dir & LV_DIR_TOP) != LV_DIR_TOP);
lv_demo_obj_set_hidden(hint_down, (dir & LV_DIR_BOTTOM) != LV_DIR_BOTTOM);
lv_demo_obj_set_hidden(hint_left, (dir & LV_DIR_LEFT) != LV_DIR_LEFT);
lv_demo_obj_set_hidden(hint_right, (dir & LV_DIR_RIGHT) != LV_DIR_RIGHT);
lv_obj_t * active_screen = lv_screen_active();
if(lv_obj_check_type(active_screen, &lv_tileview_class)) {
/* attach the hint panel to the current active tile */
lv_obj_set_parent(hint_panel, lv_tileview_get_tile_active(active_screen));
}
else {
/* attach the hint panel to current active screen */
lv_obj_set_parent(hint_panel, active_screen);
}
lv_demo_obj_set_hidden(hint_panel, dir == LV_DIR_NONE);
/* Delete animations if they exist*/
lv_anim_delete(hint_up, NULL);
lv_anim_delete(hint_down, NULL);
lv_anim_delete(hint_left, NULL);
lv_anim_delete(hint_right, NULL);
/* Set max opacity to make icons visible */
lv_obj_set_style_opa(hint_down, 255, LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_opa(hint_up, 255, LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_opa(hint_left, 255, LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_opa(hint_right, 255, LV_PART_MAIN | LV_STATE_DEFAULT);
if(dir != LV_DIR_NONE) {
anim_up = obj_set_opacity_anim(hint_up);
anim_down = obj_set_opacity_anim(hint_down);
anim_left = obj_set_opacity_anim(hint_left);
anim_right = obj_set_opacity_anim(hint_right);
}
}
/**********************
* STATIC FUNCTIONS
**********************/
static void home_tileview_event_cb(lv_event_t * e)
{
lv_event_code_t event_code = lv_event_get_code(e);
if(event_code == LV_EVENT_SCREEN_LOADED) {
if(!first_load) {
first_load = true;
/* run the analog seconds animation on first load */
lv_demo_smartwatch_face_update_seconds(0);
}
/* show the possible scroll directions hint */
if(lv_tileview_get_tile_active(home_tile) == lv_demo_smartwatch_get_tile_home()) {
lv_demo_smartwatch_show_home_hint(true);
}
else if(lv_tileview_get_tile_active(home_tile) == lv_demo_smartwatch_get_tile_app_list()) {
lv_demo_smartwatch_show_scroll_hint(LV_DIR_LEFT);
}
else if(lv_tileview_get_tile_active(home_tile) == lv_demo_smartwatch_get_tile_control()) {
lv_demo_smartwatch_show_scroll_hint(LV_DIR_TOP | LV_DIR_BOTTOM);
}
}
if(event_code == LV_EVENT_SCREEN_LOAD_START) {
lv_obj_set_scrollbar_mode(home_tile, lv_demo_smartwatch_get_scrollbar_mode());
lv_demo_smartwatch_app_list_loading();
}
if(event_code == LV_EVENT_VALUE_CHANGED) {
if(lv_tileview_get_tile_active(home_tile) == lv_demo_smartwatch_get_tile_home()) {
lv_demo_smartwatch_show_home_hint(true);
}
else if(lv_tileview_get_tile_active(home_tile) == lv_demo_smartwatch_get_tile_app_list()) {
lv_demo_smartwatch_show_scroll_hint(LV_DIR_LEFT);
}
else if(lv_tileview_get_tile_active(home_tile) == lv_demo_smartwatch_get_tile_control()) {
lv_demo_smartwatch_show_scroll_hint(LV_DIR_TOP | LV_DIR_BOTTOM);
}
}
if(lv_tileview_get_tile_active(home_tile) == lv_demo_smartwatch_get_tile_home() && lv_screen_active() == home_tile) {
if(event_code == LV_EVENT_GESTURE && lv_indev_get_gesture_dir(lv_indev_active()) == LV_DIR_RIGHT) {
lv_demo_smartwatch_set_load_app_list(false); /* flag was not open from app list */
lv_demo_smartwatch_notifications_load(LV_SCR_LOAD_ANIM_OVER_RIGHT, 500, 0);
}
if(event_code == LV_EVENT_GESTURE && lv_indev_get_gesture_dir(lv_indev_active()) == LV_DIR_TOP) {
lv_demo_smartwatch_set_load_app_list(false); /* flag was not open from app list */
lv_demo_smartwatch_weather_load(LV_SCR_LOAD_ANIM_MOVE_TOP, 500, 0);
}
}
if(lv_tileview_get_tile_active(home_tile) == lv_demo_smartwatch_get_tile_control() && lv_screen_active() == home_tile) {
if(event_code == LV_EVENT_GESTURE && lv_indev_get_gesture_dir(lv_indev_active()) == LV_DIR_BOTTOM) {
lv_demo_smartwatch_qr_load(LV_SCR_LOAD_ANIM_MOVE_BOTTOM, 500, 0);
}
else if(event_code == LV_EVENT_GESTURE && lv_indev_get_gesture_dir(lv_indev_active()) != LV_DIR_TOP) {
lv_demo_smartwatch_show_scroll_hint(LV_DIR_TOP | LV_DIR_BOTTOM);
}
}
if(lv_tileview_get_tile_active(home_tile) == lv_demo_smartwatch_get_tile_app_list() &&
lv_screen_active() == home_tile) {
if(event_code == LV_EVENT_GESTURE && lv_indev_get_gesture_dir(lv_indev_active()) != LV_DIR_RIGHT) {
lv_demo_smartwatch_show_scroll_hint(LV_DIR_LEFT);
}
}
}
static void lv_create_home_tile(void)
{
home_tile = lv_tileview_create(NULL);
lv_obj_set_scrollbar_mode(home_tile, LV_SCROLLBAR_MODE_AUTO);
lv_obj_set_style_bg_color(home_tile, lv_color_hex(0x000000), LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_bg_opa(home_tile, 55, LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_add_event_cb(home_tile, home_tileview_event_cb, LV_EVENT_ALL, NULL);
}
static void dialog_close_event_cb(lv_event_t * e)
{
LV_UNUSED(e);
lv_obj_add_flag(dialog_window, LV_OBJ_FLAG_HIDDEN);
}
static void create_dialog_window(void)
{
dialog_parent = lv_obj_create(NULL);
dialog_window = lv_obj_create(dialog_parent);
lv_obj_set_width(dialog_window, lv_pct(100));
lv_obj_set_height(dialog_window, lv_pct(100));
lv_obj_set_align(dialog_window, LV_ALIGN_CENTER);
lv_obj_set_scrollbar_mode(dialog_window, LV_SCROLLBAR_MODE_OFF);
lv_obj_add_flag(dialog_window, LV_OBJ_FLAG_HIDDEN);
lv_obj_remove_flag(dialog_window, LV_OBJ_FLAG_GESTURE_BUBBLE); /* block gesture events when active */
lv_obj_set_scroll_dir(dialog_window, LV_DIR_VER);
lv_obj_set_style_radius(dialog_window, 0, LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_bg_color(dialog_window, lv_color_hex(0x555555), LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_bg_opa(dialog_window, 150, LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_border_width(dialog_window, 0, LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_pad_left(dialog_window, 0, LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_pad_right(dialog_window, 0, LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_pad_top(dialog_window, 0, LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_pad_bottom(dialog_window, 60, LV_PART_MAIN | LV_STATE_DEFAULT);
dialog_panel = lv_obj_create(dialog_window);
lv_obj_set_width(dialog_panel, lv_pct(80));
lv_obj_set_height(dialog_panel, LV_SIZE_CONTENT);
lv_obj_set_x(dialog_panel, 0);
lv_obj_set_y(dialog_panel, 60);
lv_obj_set_align(dialog_panel, LV_ALIGN_TOP_MID);
lv_obj_set_flex_flow(dialog_panel, LV_FLEX_FLOW_COLUMN);
lv_obj_set_flex_align(dialog_panel, LV_FLEX_ALIGN_START, LV_FLEX_ALIGN_CENTER, LV_FLEX_ALIGN_CENTER);
lv_obj_remove_flag(dialog_panel, LV_OBJ_FLAG_SCROLLABLE);
lv_obj_set_style_bg_color(dialog_panel, lv_color_hex(0x080404), LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_bg_opa(dialog_panel, 235, LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_border_color(dialog_panel, lv_color_hex(0xFFFFFF), LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_border_opa(dialog_panel, 255, LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_border_width(dialog_panel, 0, LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_pad_left(dialog_panel, 5, LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_pad_right(dialog_panel, 5, LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_pad_top(dialog_panel, 8, LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_pad_bottom(dialog_panel, 8, LV_PART_MAIN | LV_STATE_DEFAULT);
dialog_title = lv_label_create(dialog_panel);
lv_obj_set_width(dialog_title, lv_pct(80));
lv_obj_set_height(dialog_title, LV_SIZE_CONTENT);
lv_obj_set_align(dialog_title, LV_ALIGN_TOP_MID);
lv_label_set_long_mode(dialog_title, LV_LABEL_LONG_SCROLL_CIRCULAR);
lv_label_set_text(dialog_title, "Title");
lv_obj_set_style_text_align(dialog_title, LV_TEXT_ALIGN_CENTER, LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_text_font(dialog_title, &lv_font_montserrat_16, LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_border_color(dialog_title, lv_color_hex(0xFFFFFF), LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_border_opa(dialog_title, 255, LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_border_width(dialog_title, 1, LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_border_side(dialog_title, LV_BORDER_SIDE_BOTTOM, LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_pad_left(dialog_title, 0, LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_pad_right(dialog_title, 0, LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_pad_top(dialog_title, 0, LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_pad_bottom(dialog_title, 5, LV_PART_MAIN | LV_STATE_DEFAULT);
dialog_message = lv_label_create(dialog_panel);
lv_obj_set_width(dialog_message, lv_pct(80));
lv_obj_set_height(dialog_message, LV_SIZE_CONTENT);
lv_obj_set_align(dialog_message, LV_ALIGN_CENTER);
lv_label_set_text(dialog_message, "Dialog message");
lv_obj_set_style_text_font(dialog_message, &lv_font_montserrat_14, LV_PART_MAIN | LV_STATE_DEFAULT);
dialog_close = lv_button_create(dialog_panel);
lv_obj_set_width(dialog_close, lv_pct(60));
lv_obj_set_height(dialog_close, LV_SIZE_CONTENT);
lv_obj_set_align(dialog_close, LV_ALIGN_BOTTOM_MID);
lv_obj_add_flag(dialog_close, LV_OBJ_FLAG_SCROLL_ON_FOCUS);
lv_obj_remove_flag(dialog_close, LV_OBJ_FLAG_SCROLLABLE);
lv_obj_set_style_radius(dialog_close, 20, LV_PART_MAIN | LV_STATE_DEFAULT);
dialog_close_label = lv_label_create(dialog_close);
lv_obj_set_width(dialog_close_label, LV_SIZE_CONTENT);
lv_obj_set_height(dialog_close_label, LV_SIZE_CONTENT);
lv_obj_set_align(dialog_close_label, LV_ALIGN_CENTER);
lv_label_set_text(dialog_close_label, "Close");
lv_obj_set_style_text_font(dialog_close_label, &lv_font_montserrat_14, LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_add_event_cb(dialog_close, dialog_close_event_cb, LV_EVENT_CLICKED, NULL);
}
static void create_scroll_hints(void)
{
hint_panel = lv_obj_create(dialog_parent);
lv_obj_set_width(hint_panel, lv_pct(100));
lv_obj_set_height(hint_panel, lv_pct(100));
lv_obj_set_align(hint_panel, LV_ALIGN_CENTER);
lv_obj_add_flag(hint_panel, LV_OBJ_FLAG_HIDDEN);
lv_obj_remove_flag(hint_panel, LV_OBJ_FLAG_CLICKABLE);
lv_obj_set_style_radius(hint_panel, 0, LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_bg_color(hint_panel, lv_color_hex(0x000000), LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_bg_opa(hint_panel, 0, LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_border_width(hint_panel, 0, LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_pad_left(hint_panel, 5, LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_pad_right(hint_panel, 5, LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_pad_top(hint_panel, 5, LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_pad_bottom(hint_panel, 5, LV_PART_MAIN | LV_STATE_DEFAULT);
hint_up = lv_image_create(hint_panel);
lv_image_set_src(hint_up, &img_up_arrow_icon);
lv_image_set_scale(hint_up, 200);
lv_obj_set_width(hint_up, LV_SIZE_CONTENT);
lv_obj_set_height(hint_up, LV_SIZE_CONTENT);
lv_obj_set_align(hint_up, LV_ALIGN_TOP_MID);
lv_obj_remove_flag(hint_up, LV_OBJ_FLAG_SCROLLABLE);
lv_obj_remove_flag(hint_up, LV_OBJ_FLAG_CLICKABLE);
lv_obj_set_style_radius(hint_up, 5, LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_bg_color(hint_up, lv_color_hex(0x333333), LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_bg_opa(hint_up, 255, LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_pad_left(hint_up, 5, LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_pad_right(hint_up, 5, LV_PART_MAIN | LV_STATE_DEFAULT);
hint_down = lv_image_create(hint_panel);
lv_image_set_src(hint_down, &img_up_arrow_icon);
lv_image_set_rotation(hint_down, 1800);
lv_image_set_scale(hint_down, 200);
lv_obj_set_width(hint_down, LV_SIZE_CONTENT);
lv_obj_set_height(hint_down, LV_SIZE_CONTENT);
lv_obj_set_align(hint_down, LV_ALIGN_BOTTOM_MID);
lv_obj_remove_flag(hint_down, LV_OBJ_FLAG_SCROLLABLE);
lv_obj_remove_flag(hint_down, LV_OBJ_FLAG_CLICKABLE);
lv_obj_set_style_radius(hint_down, 5, LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_bg_color(hint_down, lv_color_hex(0x333333), LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_bg_opa(hint_down, 255, LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_pad_left(hint_down, 5, LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_pad_right(hint_down, 5, LV_PART_MAIN | LV_STATE_DEFAULT);
hint_left = lv_image_create(hint_panel);
lv_image_set_src(hint_left, &img_up_arrow_icon);
lv_image_set_rotation(hint_left, 2700);
lv_image_set_scale(hint_left, 200);
lv_obj_set_width(hint_left, LV_SIZE_CONTENT);
lv_obj_set_height(hint_left, LV_SIZE_CONTENT);
lv_obj_set_align(hint_left, LV_ALIGN_LEFT_MID);
lv_obj_remove_flag(hint_left, LV_OBJ_FLAG_SCROLLABLE);
lv_obj_remove_flag(hint_left, LV_OBJ_FLAG_CLICKABLE);
lv_obj_set_style_radius(hint_left, 5, LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_bg_color(hint_left, lv_color_hex(0x333333), LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_bg_opa(hint_left, 255, LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_pad_top(hint_left, 5, LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_pad_bottom(hint_left, 5, LV_PART_MAIN | LV_STATE_DEFAULT);
hint_right = lv_image_create(hint_panel);
lv_image_set_src(hint_right, &img_up_arrow_icon);
lv_image_set_rotation(hint_right, 900);
lv_image_set_scale(hint_right, 200);
lv_obj_set_width(hint_right, LV_SIZE_CONTENT);
lv_obj_set_height(hint_right, LV_SIZE_CONTENT);
lv_obj_set_align(hint_right, LV_ALIGN_RIGHT_MID);
lv_obj_remove_flag(hint_right, LV_OBJ_FLAG_SCROLLABLE);
lv_obj_remove_flag(hint_right, LV_OBJ_FLAG_CLICKABLE);
lv_obj_set_style_radius(hint_right, 5, LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_bg_color(hint_right, lv_color_hex(0x333333), LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_bg_opa(hint_right, 255, LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_pad_top(hint_right, 5, LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_pad_bottom(hint_right, 5, LV_PART_MAIN | LV_STATE_DEFAULT);
}
static void lv_demo_obj_set_hidden(lv_obj_t * obj, bool state)
{
if(state) {
lv_obj_add_flag(obj, LV_OBJ_FLAG_HIDDEN);
}
else {
lv_obj_remove_flag(obj, LV_OBJ_FLAG_HIDDEN);
}
}
static void anim_set_opacity_cb(lv_anim_t * a, int32_t v)
{
lv_obj_t * target = (lv_obj_t *)a->user_data;
lv_obj_set_style_opa(target, v, 0);
}
static lv_anim_t * obj_set_opacity_anim(lv_obj_t * obj)
{
lv_anim_t anim_opa;
lv_anim_init(&anim_opa);
lv_anim_set_var(&anim_opa, obj);
lv_anim_set_values(&anim_opa, 255, 0);
lv_anim_set_duration(&anim_opa, 1000);
lv_anim_set_delay(&anim_opa, 1000);
lv_anim_set_user_data(&anim_opa, obj);
lv_anim_set_custom_exec_cb(&anim_opa, anim_set_opacity_cb);
return lv_anim_start(&anim_opa);
}
#endif /*LV_USE_DEMO_SMARTWATCH*/