aboutsummaryrefslogtreecommitdiff
path: root/src/Body.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/Body.cpp')
-rw-r--r--src/Body.cpp29
1 files changed, 27 insertions, 2 deletions
diff --git a/src/Body.cpp b/src/Body.cpp
index 06907c8..f224d06 100644
--- a/src/Body.cpp
+++ b/src/Body.cpp
@@ -132,6 +132,11 @@ namespace QuickMedia {
if(items.empty())
return false;
+ if(!selected_line_top_visible) {
+ page_scroll += 32.0f;
+ return true;
+ }
+
int new_selected_item = selected_item;
int num_items = (int)items.size();
@@ -160,6 +165,11 @@ namespace QuickMedia {
if(items.empty())
return false;
+ if(!selected_line_bottom_visible) {
+ page_scroll -= 32.0f;
+ return true;
+ }
+
int new_selected_item = selected_item;
int num_items = (int)items.size();
@@ -328,6 +338,8 @@ namespace QuickMedia {
num_visible_items = 0;
last_item_fully_visible = true;
last_fully_visible_item = -1;
+ selected_line_top_visible = true;
+ selected_line_bottom_visible = true;
int num_items = items.size();
if(num_items == 0 || size.y <= 0.0f) {
@@ -381,9 +393,22 @@ namespace QuickMedia {
}
float selected_item_height = get_item_height(items[selected_item].get(), size.x) + spacing_y;
- if(page_scroll > size.y - selected_item_height) {
+ bool selected_item_fits_on_screen = selected_item_height <= size.y;
+ selected_line_top_visible = pos.y - start_y + page_scroll >= 0.0f;
+ selected_line_bottom_visible = pos.y - start_y + page_scroll + selected_item_height <= size.y;
+
+ if(pos.y - start_y + page_scroll >= size.y)
+ page_scroll -= 32.0f;
+ else if(pos.y - start_y + page_scroll + selected_item_height <= 0.0f)
+ page_scroll += 32.0f;
+
+ selected_line_top_visible |= selected_item_fits_on_screen;
+ selected_line_bottom_visible |= selected_item_fits_on_screen;
+ if(page_scroll > size.y - selected_item_height && selected_item_fits_on_screen) {
+ //fprintf(stderr, "top!\n");
page_scroll = size.y - selected_item_height;
- } else if(page_scroll < 0.0f) {
+ } else if(page_scroll < 0.0f && selected_line_top_visible && selected_item_fits_on_screen) {
+ //fprintf(stderr, "bottom!\n");
page_scroll = 0.0f;
}