Add align to api to UIElement

fix settings page bug where silder were not getting correct Y value set
This commit is contained in:
MatthewColvin 2023-10-06 13:19:11 -05:00
parent 4a5c83c8b9
commit 6343a48be1
3 changed files with 17 additions and 3 deletions

View file

@ -68,6 +68,14 @@ lv_coord_t UIElement::GetX() {
return lv_obj_get_x(mLvglSelf);
}
void UIElement::AlignTo(UIElement *anElementToAlignTo, lv_align_t anAlignment,
lv_coord_t aXoffset, lv_coord_t aYOffset) {
LvglResourceManger::GetInstance().AttemptNow([=] {
lv_obj_align_to(mLvglSelf, anElementToAlignTo->mLvglSelf, anAlignment,
aXoffset, aYOffset);
});
}
void UIElement::SetVisiblity(bool aVisible) {
if (aVisible == IsVisible()) {
return;

View file

@ -31,6 +31,9 @@ public:
lv_coord_t GetY();
lv_coord_t GetX();
void AlignTo(UIElement *anElementToAlignWith,lv_align_t anAlignment,
lv_coord_t aXoffset = 0, lv_coord_t aYOffset = 0);
virtual void AddElement(UIElement *anElement);
ID GetID() { return mId; };

View file

@ -14,10 +14,13 @@ void SettingsPage::AddSlider() {
auto fakeSlider = std::make_unique<UI::Widget::Base>(
lv_slider_create(UI::Screen::BackgroundScreen::getLvInstance()));
fakeSlider->SetHeight(lv_pct(10));
fakeSlider->SetWidth(GetWidth());
auto sliderHeight = fakeSlider->GetHeight();
fakeSlider->SetY(sliderHeight * GetNumWidgets());
if (sliders.empty()) {
fakeSlider->SetY(0);
} else {
auto nextY = sliders.back()->GetY() + sliders.back()->GetHeight();
fakeSlider->SetY(nextY + 10);
}
sliders.push_back(AddWidget(std::move(fakeSlider)));
}