diff options
author | dec05eba <dec05eba@protonmail.com> | 2021-03-22 10:40:21 +0100 |
---|---|---|
committer | dec05eba <dec05eba@protonmail.com> | 2021-03-22 10:40:21 +0100 |
commit | 9ba59929c23c71a5231670a50c3fcb1165111c90 (patch) | |
tree | ddc7ff719f76c009410c96c09a34be5b75b9bc92 /src/QuickMedia.cpp | |
parent | 4aec31515ff6f61f41dfd66551a3fce44f243535 (diff) |
Fix touch scroll clamping to selected item, making it appear laggy. Fix emoji offset for non 1.0 scaling
Diffstat (limited to 'src/QuickMedia.cpp')
-rw-r--r-- | src/QuickMedia.cpp | 56 |
1 files changed, 37 insertions, 19 deletions
diff --git a/src/QuickMedia.cpp b/src/QuickMedia.cpp index 61b2d1b..03f1e0d 100644 --- a/src/QuickMedia.cpp +++ b/src/QuickMedia.cpp @@ -1146,6 +1146,8 @@ namespace QuickMedia { tab.body->clear_cache(); } + hide_virtual_keyboard(); + if(new_tabs.size() == 1 && new_tabs[0].page->get_type() == PageTypez::MANGA_IMAGES) { select_episode(selected_item, false); Body *chapters_body = tabs[selected_tab].body.get(); @@ -1189,15 +1191,19 @@ namespace QuickMedia { body_set_selected_item(tabs[selected_tab].body.get(), selected_item); current_page = PageType::CHAT; current_chat_room = matrix->get_room_by_id(selected_item->url); + while(window.isOpen()) { bool move_room = chat_page(static_cast<MatrixChatPage*>(new_tabs[0].page.get()), current_chat_room, tabs, selected_tab, tab_associated_data[selected_tab]); if(!move_room) break; + BodyItem *selected_item = tabs[selected_tab].body->get_selected(); if(!selected_item) break; + current_chat_room = matrix->get_room_by_id(selected_item->url); } + tabs[selected_tab].body->body_item_select_callback = [&submit_handler](BodyItem *body_item) { submit_handler(); }; @@ -1206,15 +1212,19 @@ namespace QuickMedia { } else { page_loop(new_tabs); } + for(Tab &tab : tabs) { tab.page->on_navigate_to_page(tab.body.get()); } + if(content_storage_json.isObject()) { const Json::Value &chapters_json = content_storage_json["chapters"]; if(chapters_json.isObject()) json_chapters = &chapters_json; } + redraw = true; + hide_virtual_keyboard(); }; for(size_t i = 0; i < tabs.size(); ++i) { @@ -2758,8 +2768,8 @@ namespace QuickMedia { } event_idle_handler(event); + comment_input.process_event(event); if(navigation_stage == NavigationStage::REPLYING && !frame_skip_text_entry) { - comment_input.process_event(event); // To prevent pressing enter in comment_input text submit from also immediately sending captcha solution.. is there no better solution? if(event.type == sf::Event::KeyPressed && event.key.code == sf::Keyboard::Enter) break; @@ -3259,7 +3269,7 @@ namespace QuickMedia { pinned_tab.body->thumbnail_max_size = CHAT_MESSAGE_THUMBNAIL_MAX_SIZE; pinned_tab.body->thumbnail_mask_shader = &circle_mask_shader; pinned_tab.body->attach_side = AttachSide::BOTTOM; - //pinned_tab.body->line_separator_color = sf::Color::Transparent; + pinned_tab.body->line_separator_color = sf::Color::Transparent; pinned_tab.text = sf::Text("Pinned messages", *FontLoader::get_font(FontLoader::FontType::LATIN), tab_text_size); tabs.push_back(std::move(pinned_tab)); @@ -3268,7 +3278,7 @@ namespace QuickMedia { messages_tab.body->thumbnail_max_size = CHAT_MESSAGE_THUMBNAIL_MAX_SIZE; messages_tab.body->thumbnail_mask_shader = &circle_mask_shader; messages_tab.body->attach_side = AttachSide::BOTTOM; - //messages_tab.body->line_separator_color = sf::Color::Transparent; + messages_tab.body->line_separator_color = sf::Color::Transparent; messages_tab.text = sf::Text("Messages", *FontLoader::get_font(FontLoader::FontType::LATIN), tab_text_size); tabs.push_back(std::move(messages_tab)); @@ -3312,6 +3322,9 @@ namespace QuickMedia { const float room_name_total_height = room_name_text_height + room_name_text_padding_y * 2.0f; const float room_avatar_height = 32.0f; + sf::Text room_label(room_tabs[room_selected_tab].page->get_title(), *FontLoader::get_font(FontLoader::FontType::LATIN_BOLD), std::floor(18 * get_ui_scale())); + room_label.setPosition(15.0f, room_name_text_padding_y + 4.0f); + sf::Sprite room_avatar_sprite; auto room_avatar_thumbnail_data = std::make_shared<ThumbnailData>(); @@ -3323,7 +3336,7 @@ namespace QuickMedia { bool setting_read_marker = false; bool redraw = true; - bool draw_room_list = true; + bool draw_room_list = show_room_side_panel; // TODO: Optimize with hash map? auto find_body_item_by_event_id = [](std::shared_ptr<BodyItem> *body_items, size_t num_body_items, const std::string &event_id, size_t *index_result = nullptr) -> std::shared_ptr<BodyItem> { @@ -4312,9 +4325,12 @@ namespace QuickMedia { base_event_handler(event, PageType::EXIT, tabs[selected_tab].body.get(), nullptr, false, false); event_idle_handler(event); + chat_input.process_event(event); - if(draw_room_list) - room_tabs[room_selected_tab].body->on_event(window, event); + if(draw_room_list) { + if(room_tabs[room_selected_tab].body->on_event(window, event)) + idle_active_handler(); + } if(event.type == sf::Event::KeyPressed && event.key.control && event.key.alt && (chat_state == ChatState::NAVIGATING || chat_state == ChatState::URL_SELECTION)) { if(event.key.code == sf::Keyboard::Up || (event.key.control && event.key.code == sf::Keyboard::K)) { @@ -4584,8 +4600,6 @@ namespace QuickMedia { typing_state_queue.push(false); } } - //chat_input.on_event(event); - chat_input.process_event(event); } } frame_skip_text_entry = false; @@ -4831,14 +4845,6 @@ namespace QuickMedia { window.clear(back_color); - if(draw_room_list) { - sf::RectangleShape room_list_background(this->body_size); - room_list_background.setPosition(this->body_pos); - room_list_background.setFillColor(sf::Color(31, 35, 41)); - window.draw(room_list_background); - room_tabs[room_selected_tab].body->draw(window, this->body_pos, this->body_size, Json::Value::nullSingleton()); - } - const float width_per_tab = body_size.x / tabs.size(); tab_background.setSize(sf::Vector2f(std::floor(width_per_tab - tab_margin_x * 2.0f), tab_height)); @@ -4848,8 +4854,8 @@ namespace QuickMedia { tabs[selected_tab].body->draw(window, body_pos, body_size); const float tab_y = tab_spacer_height + std::floor(tab_vertical_offset + tab_height * 0.5f - (tab_text_size + 5.0f) * 0.5f) + room_name_padding_y; - tab_shade.setSize(sf::Vector2f(window_size.x, tab_shade_height)); - window.draw(tab_shade); + //tab_shade.setSize(sf::Vector2f(window_size.x, tab_shade_height)); + //window.draw(tab_shade); if(selected_tab == MESSAGES_TAB_INDEX || selected_tab == PINNED_TAB_INDEX) { float room_name_text_offset_x = 0.0f; @@ -4865,6 +4871,18 @@ namespace QuickMedia { window.draw(room_name_text); } + if(draw_room_list) { + sf::RectangleShape room_list_background(sf::Vector2f(this->body_size.x, window_size.y)); + //room_list_background.setPosition(this->body_pos); + room_list_background.setFillColor(sf::Color(31, 35, 41)); + glEnable(GL_SCISSOR_TEST); + glScissor(0.0f, 0.0f, this->body_size.x, window_size.y); + window.draw(room_list_background); + window.draw(room_label); + room_tabs[room_selected_tab].body->draw(window, sf::Vector2f(0.0f, tab_y), sf::Vector2f(this->body_size.x, window_size.y - tab_y), Json::Value::nullSingleton()); + glDisable(GL_SCISSOR_TEST); + } + int i = 0; for(ChatTab &tab : tabs) { if(i == selected_tab) { @@ -4957,7 +4975,7 @@ namespace QuickMedia { } if(selected_tab == MESSAGES_TAB_INDEX && current_room) { - window.draw(chat_input_shade); + //window.draw(chat_input_shade); chat_input.draw(window); //chat_input.draw(window, false); window.draw(logo_sprite); } |