aboutsummaryrefslogtreecommitdiff
path: root/src/gui/ScrollablePage.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/gui/ScrollablePage.cpp')
-rw-r--r--src/gui/ScrollablePage.cpp18
1 files changed, 13 insertions, 5 deletions
diff --git a/src/gui/ScrollablePage.cpp b/src/gui/ScrollablePage.cpp
index 923a0c8..cec20d3 100644
--- a/src/gui/ScrollablePage.cpp
+++ b/src/gui/ScrollablePage.cpp
@@ -15,6 +15,14 @@ namespace gsr {
ScrollablePage::ScrollablePage(mgl::vec2f size) : size(size) {}
+ ScrollablePage::~ScrollablePage() {
+ widgets.for_each([this](std::unique_ptr<Widget> &widget) {
+ if(widget->parent_widget == this)
+ widget->parent_widget = nullptr;
+ return true;
+ }, true);
+ }
+
bool ScrollablePage::on_event(mgl::Event &event, mgl::Window &window, mgl::vec2f offset) {
if(!visible)
return true;
@@ -57,8 +65,9 @@ namespace gsr {
// Process widgets by visibility (backwards)
const bool continue_events = widgets.for_each_reverse([selected_widget, &window, &event, offset](std::unique_ptr<Widget> &widget) {
- if(widget.get() != selected_widget) {
- if(!widget->on_event(event, window, offset))
+ Widget *p = widget.get();
+ if(p != selected_widget) {
+ if(!p->on_event(event, window, offset))
return false;
}
return true;
@@ -89,8 +98,7 @@ namespace gsr {
offset = position + offset;
- mgl_scissor prev_scissor;
- mgl_window_get_scissor(window.internal_window(), &prev_scissor);
+ const mgl::Scissor prev_scissor = window.get_scissor();
const mgl::vec2f content_size = get_inner_size();
const mgl_scissor new_scissor = {
@@ -150,7 +158,7 @@ namespace gsr {
apply_animation();
limit_scroll(child_height);
- mgl_window_set_scissor(window.internal_window(), &prev_scissor);
+ window.set_scissor(prev_scissor);
double scrollbar_height = 1.0;
if(child_height > 0.001)