PopupMessage: draw lock with lvgl, hard code size

This commit is contained in:
Reinhold Gschweicher 2024-10-06 20:13:52 +02:00
parent f0211e5fcb
commit 0954e3b2b0
3 changed files with 35 additions and 21 deletions

View file

@ -102,7 +102,6 @@ DisplayApp::DisplayApp(Drivers::St7789& lcd,
spiNorFlash {spiNorFlash},
lvgl {lcd, filesystem},
timer(this, TimerCallback),
popupMessage {Screens::Symbols::lock, 90, 90},
controllers {batteryController,
bleController,
dateTimeController,

View file

@ -1,21 +1,40 @@
#include "displayapp/widgets/PopupMessage.h"
#include "displayapp/InfiniTimeTheme.h"
#include <libraries/log/nrf_log.h>
using namespace Pinetime::Applications::Widgets;
PopupMessage::PopupMessage(const char* msg, int16_t h, int16_t w) : message {msg}, height {h}, width {w} {
PopupMessage::PopupMessage() {
}
void PopupMessage::Create() {
btnPopup = lv_btn_create(lv_scr_act(), nullptr);
btnPopup->user_data = this;
lv_obj_set_size(btnPopup, height, width);
lv_obj_align(btnPopup, lv_scr_act(), LV_ALIGN_CENTER, 0, 0);
lv_obj_set_style_local_bg_opa(btnPopup, LV_BTN_PART_MAIN, LV_STATE_DEFAULT, LV_OPA_60);
lv_obj_set_style_local_text_font(btnPopup, LV_LABEL_PART_MAIN, LV_STATE_DEFAULT, &lv_font_sys_80);
lv_obj_t* lblMessage = lv_label_create(btnPopup, nullptr);
lv_label_set_text_static(lblMessage, message);
lv_obj_set_hidden(btnPopup, isHidden);
popup = lv_obj_create(lv_scr_act(), nullptr);
lv_obj_set_size(popup, 90, 90);
lv_obj_align(popup, lv_scr_act(), LV_ALIGN_CENTER, 0, 0);
lv_obj_set_style_local_bg_color(popup, LV_OBJ_PART_MAIN, LV_STATE_DEFAULT, Colors::bg);
lv_obj_set_style_local_bg_opa(popup, LV_OBJ_PART_MAIN, LV_STATE_DEFAULT, LV_OPA_60);
lv_obj_t* lockBody = lv_obj_create(popup, nullptr);
lv_obj_set_size(lockBody, 55, 50);
lv_obj_align(lockBody, popup, LV_ALIGN_CENTER, 0, 10);
lv_obj_set_style_local_bg_color(lockBody, LV_OBJ_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_WHITE);
lv_obj_set_style_local_bg_opa(lockBody, LV_OBJ_PART_MAIN, LV_STATE_DEFAULT, LV_OPA_0);
lv_obj_set_style_local_border_color(lockBody, LV_OBJ_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_WHITE);
lv_obj_set_style_local_border_width(lockBody, LV_OBJ_PART_MAIN, LV_STATE_DEFAULT, 22);
lv_obj_set_style_local_border_side(lockBody, LV_OBJ_PART_MAIN, LV_STATE_DEFAULT, LV_BORDER_SIDE_FULL);
lv_obj_set_style_local_border_opa(lockBody, LV_OBJ_PART_MAIN, LV_STATE_DEFAULT, LV_OPA_100);
lv_obj_t* lockTop = lv_obj_create(popup, nullptr);
lv_obj_set_size(lockTop, 30, 35);
lv_obj_align(lockTop, popup, LV_ALIGN_CENTER, 0, -20);
lv_obj_set_style_local_bg_color(lockTop, LV_OBJ_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_WHITE);
lv_obj_set_style_local_bg_opa(lockTop, LV_OBJ_PART_MAIN, LV_STATE_DEFAULT, LV_OPA_0);
lv_obj_set_style_local_border_color(lockTop, LV_OBJ_PART_MAIN, LV_STATE_DEFAULT, LV_COLOR_WHITE);
lv_obj_set_style_local_border_width(lockTop, LV_OBJ_PART_MAIN, LV_STATE_DEFAULT, 6);
lv_obj_set_style_local_border_side(lockTop, LV_OBJ_PART_MAIN, LV_STATE_DEFAULT, LV_BORDER_SIDE_FULL);
lv_obj_set_style_local_border_opa(lockTop, LV_OBJ_PART_MAIN, LV_STATE_DEFAULT, LV_OPA_100);
lv_obj_set_hidden(popup, isHidden);
}
void PopupMessage::SetHidden(bool hidden) {
@ -24,11 +43,11 @@ void PopupMessage::SetHidden(bool hidden) {
}
isHidden = hidden;
// create/delete on demand
if (btnPopup == nullptr && !isHidden) {
if (popup == nullptr && !isHidden) {
Create();
} else if (btnPopup != nullptr) {
lv_obj_del(btnPopup);
btnPopup = nullptr;
} else if (popup != nullptr) {
lv_obj_del(popup);
popup = nullptr;
}
}

View file

@ -6,18 +6,14 @@ namespace Pinetime {
namespace Widgets {
class PopupMessage {
public:
// The caller owns the message string, it is not copied.
PopupMessage(const char* msg, int16_t h, int16_t w);
PopupMessage();
void Create();
void SetHidden(bool hidden);
bool IsHidden();
private:
const char* message;
lv_obj_t* btnPopup = nullptr;
lv_obj_t* popup = nullptr;
bool isHidden = true;
int16_t height;
int16_t width;
};
}
}