aboutsummaryrefslogtreecommitdiff
path: root/src/QuickMedia.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/QuickMedia.cpp')
-rw-r--r--src/QuickMedia.cpp56
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);
}