aboutsummaryrefslogtreecommitdiff
path: root/src/ImageViewer.cpp
diff options
context:
space:
mode:
authordec05eba <dec05eba@protonmail.com>2021-04-06 22:54:12 +0200
committerdec05eba <dec05eba@protonmail.com>2021-04-06 22:54:12 +0200
commitd3543b4f6d654cae1d1d9ffe1f640106dad5cfed (patch)
treee51f99400cb67dd8643393f82f2e10478750e7ba /src/ImageViewer.cpp
parent04e852c45a3f309d5e139b0ca059b32277c250e4 (diff)
Add support for embedding the window into another application, such as suckless tabbed
Diffstat (limited to 'src/ImageViewer.cpp')
-rw-r--r--src/ImageViewer.cpp44
1 files changed, 19 insertions, 25 deletions
diff --git a/src/ImageViewer.cpp b/src/ImageViewer.cpp
index 9297edf..85db360 100644
--- a/src/ImageViewer.cpp
+++ b/src/ImageViewer.cpp
@@ -11,7 +11,8 @@
#include <SFML/Graphics/RectangleShape.hpp>
namespace QuickMedia {
- ImageViewer::ImageViewer(MangaImagesPage *manga_images_page, const std::string &content_title, const std::string &chapter_title, int current_page, const Path &chapter_cache_dir) :
+ ImageViewer::ImageViewer(sf::RenderWindow *window, MangaImagesPage *manga_images_page, const std::string &content_title, const std::string &chapter_title, int current_page, const Path &chapter_cache_dir) :
+ window(window),
current_page(current_page),
num_pages(0),
content_title(content_title),
@@ -39,7 +40,8 @@ namespace QuickMedia {
}
ImageViewer::~ImageViewer() {
- // TODO: Remove
+ if(has_default_cursor)
+ window->setMouseCursor(default_cursor);
if(image_loader_thread.joinable())
image_loader_thread.join();
}
@@ -164,7 +166,7 @@ namespace QuickMedia {
return value >= 0.0 ? 1.0 : -1.0;
}
- ImageViewerAction ImageViewer::draw(sf::RenderWindow &window) {
+ ImageViewerAction ImageViewer::draw() {
const double frame_delta = frame_timer.restart().asSeconds();
const double scroll_speed_key_input = 50.0;
const double scroll_speed_mouse_wheel = 600.0;
@@ -172,7 +174,7 @@ namespace QuickMedia {
const double scroll_deaccel = 0.96;
if(!window_size_set) {
- auto window_size_i = window.getSize();
+ auto window_size_i = window->getSize();
window_size.x = window_size_i.x;
window_size.y = window_size_i.y;
window_size_set = true;
@@ -180,17 +182,12 @@ namespace QuickMedia {
// TODO: Only redraw when scrolling and when image has finished downloading
sf::Event event;
- while(window.pollEvent(event)) {
- if (event.type == sf::Event::Closed) {
- if(has_default_cursor)
- window.setMouseCursor(default_cursor);
- window.close();
- return ImageViewerAction::RETURN;
- } else if(event.type == sf::Event::Resized) {
+ while(window->pollEvent(event)) {
+ if(event.type == sf::Event::Resized) {
window_size.x = event.size.width;
window_size.y = event.size.height;
sf::FloatRect visible_area(0, 0, window_size.x, window_size.y);
- window.setView(sf::View(visible_area));
+ window->setView(sf::View(visible_area));
//redraw = true;
} else if(event.type == sf::Event::GainedFocus) {
//redraw = true;
@@ -200,11 +197,8 @@ namespace QuickMedia {
if(event.key.code == sf::Keyboard::Down || (event.key.control && event.key.code == sf::Keyboard::J))
down_pressed = true;
- if(event.key.code == sf::Keyboard::Escape) {
- if(has_default_cursor)
- window.setMouseCursor(default_cursor);
+ if(event.key.code == sf::Keyboard::Escape)
return ImageViewerAction::RETURN;
- }
if(event.key.code == sf::Keyboard::I)
return ImageViewerAction::SWITCH_TO_SINGLE_IMAGE_MODE;
@@ -217,15 +211,15 @@ namespace QuickMedia {
scroll_speed += scroll_speed_mouse_wheel * event.mouseWheelScroll.delta * frame_delta;
} else if(event.type == sf::Event::MouseButtonPressed && event.mouseButton.button == sf::Mouse::Button::Middle) {
middle_mouse_scrolling = true;
- autoscroll_start_y = sf::Mouse::getPosition(window).y;
+ autoscroll_start_y = sf::Mouse::getPosition(*window).y;
if(has_size_vertical_cursor)
- window.setMouseCursor(size_vertical_cursor);
+ window->setMouseCursor(size_vertical_cursor);
} else if(event.type == sf::Event::MouseButtonReleased && event.mouseButton.button == sf::Mouse::Button::Middle) {
middle_mouse_scrolling = false;
scroll_speed = 0.0;
if(has_default_cursor)
- window.setMouseCursor(default_cursor);
+ window->setMouseCursor(default_cursor);
}
}
@@ -235,7 +229,7 @@ namespace QuickMedia {
scroll_speed -= scroll_speed_key_input * frame_delta;
if(middle_mouse_scrolling) {
- double distance_to_start_y = (double)sf::Mouse::getPosition(window).y - autoscroll_start_y;
+ double distance_to_start_y = (double)sf::Mouse::getPosition(*window).y - autoscroll_start_y;
double dist_abs = std::abs(distance_to_start_y);
dist_abs -= 20.0;
if(dist_abs < 0.0)
@@ -297,7 +291,7 @@ namespace QuickMedia {
}
const sf::Vector2<double> selected_page_size = get_page_size(current_page);
- render_page(window, current_page, window_size.y*0.5);
+ render_page(*window, current_page, window_size.y*0.5);
//if(!focused_page_rendered)
// return;
@@ -307,7 +301,7 @@ namespace QuickMedia {
while(true) {
const sf::Vector2<double> image_size = get_page_size(page);
page_offset -= image_size.y*0.5;
- if(!render_page(window, page, page_offset))
+ if(!render_page(*window, page, page_offset))
break;
--page;
page_offset -= image_size.y*0.5;
@@ -319,7 +313,7 @@ namespace QuickMedia {
while(true) {
const sf::Vector2<double> image_size = get_page_size(page);
page_offset += image_size.y*0.5;
- if(!render_page(window, page, page_offset))
+ if(!render_page(*window, page, page_offset))
break;
++page;
page_offset += image_size.y*0.5;
@@ -340,11 +334,11 @@ namespace QuickMedia {
sf::RectangleShape page_text_background(sf::Vector2f(window_size.x, background_height));
page_text_background.setFillColor(sf::Color(0, 0, 0, 150));
page_text_background.setPosition(0.0f, window_size.y - background_height);
- window.draw(page_text_background);
+ window->draw(page_text_background);
auto page_text_bounds = page_text.getLocalBounds();
page_text.setPosition(std::floor(window_size.x * 0.5f - page_text_bounds.width * 0.5f), std::floor(window_size.y - background_height * 0.5f - font_height * 0.5f));
- window.draw(page_text);
+ window->draw(page_text);
// Free pages that are not visible on the screen
int i = 0;