knxdisplay/main/widgets/PowerFlowWidget.cpp
2026-01-27 15:38:38 +01:00

61 lines
1.8 KiB
C++

#include "PowerFlowWidget.hpp"
#include "../Fonts.hpp"
PowerFlowWidget::PowerFlowWidget(const WidgetConfig& config)
: Widget(config)
, titleLabel_(nullptr)
{
}
lv_obj_t* PowerFlowWidget::create(lv_obj_t* parent) {
obj_ = lv_obj_create(parent);
if (obj_ == nullptr) {
return nullptr;
}
lv_obj_remove_style_all(obj_);
lv_obj_set_pos(obj_, config_.x, config_.y);
lv_obj_set_size(obj_,
config_.width > 0 ? config_.width : 240,
config_.height > 0 ? config_.height : 180);
lv_obj_clear_flag(obj_, LV_OBJ_FLAG_SCROLLABLE);
if (config_.text[0] != '\0') {
titleLabel_ = lv_label_create(obj_);
lv_label_set_text(titleLabel_, config_.text);
lv_obj_set_pos(titleLabel_, 10, 8);
lv_obj_clear_flag(titleLabel_, LV_OBJ_FLAG_CLICKABLE);
}
return obj_;
}
void PowerFlowWidget::applyStyle() {
if (obj_ == nullptr) return;
if (config_.bgOpacity > 0) {
lv_obj_set_style_bg_color(obj_, lv_color_make(
config_.bgColor.r, config_.bgColor.g, config_.bgColor.b), 0);
lv_obj_set_style_bg_opa(obj_, config_.bgOpacity, 0);
} else {
lv_obj_set_style_bg_opa(obj_, LV_OPA_TRANSP, 0);
}
lv_obj_set_style_border_width(obj_, 1, 0);
lv_obj_set_style_border_color(obj_, lv_color_make(
config_.textColor.r, config_.textColor.g, config_.textColor.b), 0);
lv_obj_set_style_border_opa(obj_, LV_OPA_20, 0);
if (config_.borderRadius > 0) {
lv_obj_set_style_radius(obj_, config_.borderRadius, 0);
}
applyShadowStyle();
if (titleLabel_ != nullptr) {
lv_obj_set_style_text_color(titleLabel_, lv_color_make(
config_.textColor.r, config_.textColor.g, config_.textColor.b), 0);
lv_obj_set_style_text_font(titleLabel_, Fonts::bySizeIndex(config_.fontSize), 0);
}
}