#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; }; }