Redesign audio to support multiple audio tracks explicitly

This commit is contained in:
dec05eba
2025-04-14 11:38:52 +02:00
parent e3e6c3c3b9
commit 0018788780
30 changed files with 595 additions and 334 deletions

View File

@@ -24,14 +24,23 @@ namespace gsr {
// Process widgets by visibility (backwards)
return widgets.for_each_reverse([selected_widget, &event, &window](std::unique_ptr<Widget> &widget) {
// Ignore offset because widgets are positioned with offset in ::draw, this solution is simpler
if(widget.get() != selected_widget) {
if(!widget->on_event(event, window, mgl::vec2f(0.0f, 0.0f)))
Widget *p = widget.get();
if(p != selected_widget) {
if(!p->on_event(event, window, mgl::vec2f(0.0f, 0.0f)))
return false;
}
return true;
});
}
List::~List() {
widgets.for_each([this](std::unique_ptr<Widget> &widget) {
if(widget->parent_widget == this)
widget->parent_widget = nullptr;
return true;
}, true);
}
void List::draw(mgl::Window &window, mgl::vec2f offset) {
if(!visible)
return;
@@ -104,15 +113,6 @@ namespace gsr {
selected_widget->draw(window, mgl::vec2f(0.0f, 0.0f));
}
// void List::remove_child_widget(Widget *widget) {
// for(auto it = widgets.begin(), end = widgets.end(); it != end; ++it) {
// if(it->get() == widget) {
// widgets.erase(it);
// return;
// }
// }
// }
void List::add_widget(std::unique_ptr<Widget> widget) {
widget->parent_widget = this;
widgets.push_back(std::move(widget));
@@ -122,6 +122,10 @@ namespace gsr {
widgets.remove(widget);
}
void List::replace_widget(Widget *widget, std::unique_ptr<Widget> new_widget) {
widgets.replace_item(widget, std::move(new_widget));
}
void List::clear() {
widgets.clear();
}
@@ -137,6 +141,10 @@ namespace gsr {
return nullptr;
}
size_t List::get_num_children() const {
return widgets.size();
}
void List::set_spacing(float spacing) {
spacing_scale = spacing;
}