diff options
Diffstat (limited to 'src/ImageViewer.cpp')
-rw-r--r-- | src/ImageViewer.cpp | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/src/ImageViewer.cpp b/src/ImageViewer.cpp index 9071214..7b188c8 100644 --- a/src/ImageViewer.cpp +++ b/src/ImageViewer.cpp @@ -212,6 +212,8 @@ namespace QuickMedia { scroll -= size.y; page_size[i].prev_size = size; } + + scroll -= (get_page_size(current_page).y * 0.5 - window_size.y * 0.5); } // TODO: Only redraw when scrolling and when image has finished downloading @@ -334,10 +336,14 @@ namespace QuickMedia { page_offset += current_page_size.y; } - if(scroll > 0.0) { - scroll = 0.0; - } else if(scroll + page_offset < window_size.y && page_offset > window_size.y) { - scroll += (window_size.y - (scroll + page_offset)); + const double first_image_height = get_page_size(0).y; + const double last_image_height = get_page_size((int)image_data.size() - 1).y; + + const double top_scroll = -first_image_height * 0.5 + window_size.y * 0.5; + if(scroll > top_scroll) { + scroll = top_scroll; + } else if(scroll + page_offset < window_size.y + last_image_height * 0.5 - window_size.y * 0.5 && page_offset > window_size.y) { + scroll = -page_offset + (window_size.y + last_image_height * 0.5 - window_size.y * 0.5); } if(page_closest_to_center != -1) { |