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.cpp39
1 files changed, 26 insertions, 13 deletions
diff --git a/src/gui/ScrollablePage.cpp b/src/gui/ScrollablePage.cpp
index 74dd715..d5e92d0 100644
--- a/src/gui/ScrollablePage.cpp
+++ b/src/gui/ScrollablePage.cpp
@@ -19,15 +19,37 @@ namespace gsr {
if(!visible)
return true;
- offset = position + offset + mgl::vec2f(0.0f, scroll_y);
+ offset = position + offset;
+
+ const mgl::vec2f content_size = get_inner_size();
+ const mgl::vec2i scissor_pos(offset.x, offset.y);
+ const mgl::vec2i scissor_size(content_size.x, content_size.y);
+
+ offset.y += scroll_y;
Widget *selected_widget = selected_child_widget;
+ if(event.type == mgl::Event::MouseButtonPressed && scrollbar_rect.contains(mgl::vec2f(event.mouse_button.x, event.mouse_button.y))) {
+ set_widget_as_selected_in_parent();
+ moving_scrollbar_with_cursor = true;
+ scrollbar_move_cursor_start_pos = mgl::vec2f(event.mouse_button.x, event.mouse_button.y);
+ scrollbar_move_cursor_scroll_y_start = scroll_y;
+ return false;
+ }
+
if(event.type == mgl::Event::MouseButtonReleased && moving_scrollbar_with_cursor) {
moving_scrollbar_with_cursor = false;
remove_widget_as_selected_in_parent();
return false;
}
+ if(event.type == mgl::Event::MouseButtonPressed || event.type == mgl::Event::MouseButtonReleased) {
+ if(!mgl::IntRect(scissor_pos, scissor_size).contains({event.mouse_button.x, event.mouse_button.y}))
+ return true;
+ } else if(event.type == mgl::Event::MouseMoved) {
+ if(!mgl::IntRect(scissor_pos, scissor_size).contains({event.mouse_move.x, event.mouse_move.y}))
+ return true;
+ }
+
if(selected_widget) {
if(!selected_widget->on_event(event, window, offset))
return false;
@@ -51,14 +73,6 @@ namespace gsr {
return false;
}
- if(event.type == mgl::Event::MouseButtonPressed && scrollbar_rect.contains(mgl::vec2f(event.mouse_button.x, event.mouse_button.y))) {
- set_widget_as_selected_in_parent();
- moving_scrollbar_with_cursor = true;
- scrollbar_move_cursor_start_pos = mgl::vec2f(event.mouse_button.x, event.mouse_button.y);
- scrollbar_move_cursor_scroll_y_start = scroll_y;
- return false;
- }
-
return true;
}
@@ -75,11 +89,10 @@ 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();
- mgl_scissor new_scissor = {
+ const mgl_scissor new_scissor = {
mgl_vec2i{(int)offset.x, (int)offset.y},
mgl_vec2i{(int)content_size.x, (int)content_size.y}
};
@@ -136,7 +149,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)