From 07f80da8f9c46c228c272e95ab88a3e098c899d9 Mon Sep 17 00:00:00 2001 From: dec05eba Date: Tue, 30 Jun 2020 02:25:10 +0200 Subject: Add infinite image scroll mode --- include/ImageViewer.hpp | 63 +++++++++++++++++++++++++++++++++++++++++++++++++ include/Page.hpp | 1 + include/QuickMedia.hpp | 1 + 3 files changed, 65 insertions(+) create mode 100644 include/ImageViewer.hpp (limited to 'include') diff --git a/include/ImageViewer.hpp b/include/ImageViewer.hpp new file mode 100644 index 0000000..fb1e5e3 --- /dev/null +++ b/include/ImageViewer.hpp @@ -0,0 +1,63 @@ +#pragma once + +#include "Path.hpp" +#include +#include +#include +#include +#include +#include +#include +#include + +namespace QuickMedia { + class Manga; + + struct ImageData { + sf::Texture texture; + sf::Sprite sprite; + bool failed_to_load_image; + bool visible_on_screen; + }; + + struct PageSize { + sf::Vector2 size; + bool loaded; + }; + + class ImageViewer { + public: + ImageViewer(Manga *manga, const std::string &images_url, const std::string &chapter_title, int current_page, const Path &chapter_cache_dir, sf::Font *font); + bool draw(sf::RenderWindow &window); + // Returns page as 1 indexed + int get_focused_page() const; + int get_num_pages() const { return num_pages; } + private: + bool render_page(sf::RenderWindow &window, int page, double offset_y); + sf::Vector2 get_page_size(int page); + private: + int current_page; + int num_pages; + int page_center; + + std::string chapter_title; + Path chapter_cache_dir; + + double scroll = 0.0; + double scroll_speed = 0.0; + double min_page_center_dist; + int page_closest_to_center; + int focused_page; + int prev_focused_page = -1; + + sf::Font *font; + sf::Clock frame_timer; + sf::Text page_text; + + std::vector> image_data; + std::vector page_size; + + sf::Vector2 window_size; + bool window_size_set = false; + }; +} \ No newline at end of file diff --git a/include/Page.hpp b/include/Page.hpp index b615c8c..dc4051c 100644 --- a/include/Page.hpp +++ b/include/Page.hpp @@ -8,6 +8,7 @@ namespace QuickMedia { VIDEO_CONTENT, EPISODE_LIST, IMAGES, + IMAGES_CONTINUOUS, CONTENT_LIST, CONTENT_DETAILS, IMAGE_BOARD_THREAD_LIST, diff --git a/include/QuickMedia.hpp b/include/QuickMedia.hpp index 2e14b09..387a5a5 100644 --- a/include/QuickMedia.hpp +++ b/include/QuickMedia.hpp @@ -33,6 +33,7 @@ namespace QuickMedia { void video_content_page(); void episode_list_page(); void image_page(); + void image_continuous_page(); void content_list_page(); void content_details_page(); void image_board_thread_list_page(); -- cgit v1.2.3