From d3543b4f6d654cae1d1d9ffe1f640106dad5cfed Mon Sep 17 00:00:00 2001 From: dec05eba Date: Tue, 6 Apr 2021 22:54:12 +0200 Subject: Add support for embedding the window into another application, such as suckless tabbed --- src/ImageViewer.cpp | 44 +++++++++++++++++++------------------------- 1 file changed, 19 insertions(+), 25 deletions(-) (limited to 'src/ImageViewer.cpp') 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 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 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 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 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; -- cgit v1.2.3