From 888fba907eba13ee6a30bf7169d4d96af5b443a5 Mon Sep 17 00:00:00 2001 From: dec05eba Date: Sun, 27 Sep 2020 11:02:06 +0200 Subject: Implement pgup/pgdown/home/end keys --- src/QuickMedia.cpp | 71 +++++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 65 insertions(+), 6 deletions(-) (limited to 'src/QuickMedia.cpp') diff --git a/src/QuickMedia.cpp b/src/QuickMedia.cpp index b596b06..f793559 100644 --- a/src/QuickMedia.cpp +++ b/src/QuickMedia.cpp @@ -592,6 +592,14 @@ namespace QuickMedia { body->select_previous_item(); } else if(event.key.code == sf::Keyboard::Down) { body->select_next_item(); + } else if(event.key.code == sf::Keyboard::PageUp) { + body->select_previous_page(); + } else if(event.key.code == sf::Keyboard::PageDown) { + body->select_next_page(); + } else if(event.key.code == sf::Keyboard::Home) { + body->select_first_item(); + } else if(event.key.code == sf::Keyboard::End) { + body->select_last_item(); } else if(event.key.code == sf::Keyboard::Escape) { current_page = previous_page; if(clear_on_escape) { @@ -1101,6 +1109,14 @@ namespace QuickMedia { if(tabs[selected_tab].body) tabs[selected_tab].body->select_previous_item(); } else if(event.key.code == sf::Keyboard::Down) { if(tabs[selected_tab].body) tabs[selected_tab].body->select_next_item(); + } else if(event.key.code == sf::Keyboard::PageUp) { + if(tabs[selected_tab].body) tabs[selected_tab].body->select_previous_page(); + } else if(event.key.code == sf::Keyboard::PageDown) { + if(tabs[selected_tab].body) tabs[selected_tab].body->select_next_page(); + } else if(event.key.code == sf::Keyboard::Home) { + if(tabs[selected_tab].body) tabs[selected_tab].body->select_first_item(); + } else if(event.key.code == sf::Keyboard::End) { + if(tabs[selected_tab].body) tabs[selected_tab].body->select_last_item(); } else if(event.key.code == sf::Keyboard::Escape) { current_page = Page::EXIT; exit_code = 1; @@ -1166,7 +1182,7 @@ namespace QuickMedia { if(search_running && search_suggestion_future.valid() && search_suggestion_future.wait_for(std::chrono::seconds(0)) == std::future_status::ready) { if(!search_text_updated) { body->items = search_suggestion_future.get(); - body->clamp_selection(); + body->select_first_item(); } else { search_suggestion_future.get(); } @@ -1620,6 +1636,14 @@ namespace QuickMedia { related_media_body->select_previous_item(); } else if(event.key.code == sf::Keyboard::Down) { related_media_body->select_next_item(); + } else if(event.key.code == sf::Keyboard::PageUp) { + related_media_body->select_previous_page(); + } else if(event.key.code == sf::Keyboard::PageDown) { + related_media_body->select_next_page(); + } else if(event.key.code == sf::Keyboard::Home) { + related_media_body->select_first_item(); + } else if(event.key.code == sf::Keyboard::End) { + related_media_body->select_last_item(); } else if(event.key.code == sf::Keyboard::Escape) { related_media_window_visible = false; related_media_window->setVisible(false); @@ -1895,6 +1919,14 @@ namespace QuickMedia { tabs[selected_tab].body->select_previous_item(); } else if(event.key.code == sf::Keyboard::Down) { tabs[selected_tab].body->select_next_item(); + } else if(event.key.code == sf::Keyboard::PageUp) { + tabs[selected_tab].body->select_previous_page(); + } else if(event.key.code == sf::Keyboard::PageDown) { + tabs[selected_tab].body->select_next_page(); + } else if(event.key.code == sf::Keyboard::Home) { + tabs[selected_tab].body->select_first_item(); + } else if(event.key.code == sf::Keyboard::End) { + tabs[selected_tab].body->select_last_item(); } else if(event.key.code == sf::Keyboard::Escape) { current_page = Page::SEARCH_SUGGESTION; body->clear_items(); @@ -2734,7 +2766,7 @@ namespace QuickMedia { } sf::RectangleShape captcha_selection_rect; captcha_selection_rect.setOutlineThickness(5.0f); - captcha_selection_rect.setOutlineColor(sf::Color(55, 60, 68)); + captcha_selection_rect.setOutlineColor(sf::Color::Red); // TODO: Draw only the outline instead of a transparent rectangle captcha_selection_rect.setFillColor(sf::Color::Transparent); @@ -2869,6 +2901,14 @@ namespace QuickMedia { body->select_previous_item(); } else if(event.key.code == sf::Keyboard::Down) { body->select_next_item(); + } else if(event.key.code == sf::Keyboard::PageUp) { + body->select_previous_page(); + } else if(event.key.code == sf::Keyboard::PageDown) { + body->select_next_page(); + } else if(event.key.code == sf::Keyboard::Home) { + body->select_first_item(); + } else if(event.key.code == sf::Keyboard::End) { + body->select_last_item(); } else if(event.key.code == sf::Keyboard::Escape) { current_page = Page::IMAGE_BOARD_THREAD_LIST; body->clear_items(); @@ -2918,6 +2958,7 @@ namespace QuickMedia { comment_navigation_stack.push(body->get_selected_item()); comment_page_scroll_stack.push(body->get_page_scroll()); body->clamp_selection(); + body->set_page_scroll(0.0f); } else if(event.key.code == sf::Keyboard::BackSpace && !comment_navigation_stack.empty()) { size_t previous_selected = comment_navigation_stack.top(); float previous_page_scroll = comment_page_scroll_stack.top(); @@ -3414,10 +3455,24 @@ namespace QuickMedia { if(event.type == sf::Event::Resized || event.type == sf::Event::GainedFocus) { redraw = true; } else if(event.type == sf::Event::KeyPressed) { - if(event.key.code == sf::Keyboard::Up) { - bool item_changed = tabs[selected_tab].body->select_previous_item(); - // Top hit - if(!item_changed && !fetching_previous_messages_running && tabs[selected_tab].type == ChatTabType::MESSAGES) { + if(event.key.code == sf::Keyboard::Up || event.key.code == sf::Keyboard::PageUp || event.key.code == sf::Keyboard::Home) { + bool hit_top = false; + switch(event.key.code) { + case sf::Keyboard::Up: + hit_top = !tabs[selected_tab].body->select_previous_item(); + break; + case sf::Keyboard::PageUp: + hit_top = !tabs[selected_tab].body->select_previous_page(); + break; + case sf::Keyboard::Home: + tabs[selected_tab].body->select_first_item(); + hit_top = true; + break; + default: + hit_top = false; + break; + } + if(hit_top && !fetching_previous_messages_running && tabs[selected_tab].type == ChatTabType::MESSAGES) { gradient_inc = 0; fetching_previous_messages_running = true; previous_messages_future_room_id = current_room_id; @@ -3431,6 +3486,10 @@ namespace QuickMedia { } } else if(event.key.code == sf::Keyboard::Down) { tabs[selected_tab].body->select_next_item(); + } else if(event.key.code == sf::Keyboard::PageDown) { + tabs[selected_tab].body->select_next_page(); + } else if(event.key.code == sf::Keyboard::End) { + tabs[selected_tab].body->select_last_item(); } else if(event.key.code == sf::Keyboard::Escape) { current_page = Page::EXIT; body->clear_items(); -- cgit v1.2.3