diff options
Diffstat (limited to 'src/QuickMedia.cpp')
-rw-r--r-- | src/QuickMedia.cpp | 26 |
1 files changed, 14 insertions, 12 deletions
diff --git a/src/QuickMedia.cpp b/src/QuickMedia.cpp index 161ea1a..dfb7770 100644 --- a/src/QuickMedia.cpp +++ b/src/QuickMedia.cpp @@ -5215,11 +5215,11 @@ namespace QuickMedia { AsyncTask<bool> fetch_users_future; AsyncTask<FetchMessageResult> fetch_message_future; Message *fetch_message = nullptr; - BodyItem *fetch_body_item = nullptr; + std::shared_ptr<BodyItem> fetch_body_item = nullptr; int fetch_message_tab = -1; // TODO: How about instead fetching all messages we have, not only the visible ones? also fetch with multiple threads. - tabs[PINNED_TAB_INDEX].body->body_item_render_callback = [this, ¤t_room, &me, &fetch_message_future, &tabs, &fetch_body_item, &fetch_message_tab, PINNED_TAB_INDEX, MESSAGES_TAB_INDEX](BodyItem *body_item) { + tabs[PINNED_TAB_INDEX].body->body_item_render_callback = [this, ¤t_room, &me, &fetch_message_future, &tabs, &fetch_body_item, &fetch_message_tab, PINNED_TAB_INDEX, MESSAGES_TAB_INDEX](std::shared_ptr<BodyItem> &body_item) { if(fetch_message_future.valid()) return; @@ -5232,7 +5232,7 @@ namespace QuickMedia { if(event_data->message->related_event_id.empty() || event_data->message->related_event_type != RelatedEventType::REPLY || (body_item->embedded_item_status != FetchStatus::NONE && body_item->embedded_item_status != FetchStatus::QUEUED_LOADING)) return; - if(load_cached_related_embedded_item(body_item, event_data->message, me, current_room, tabs[MESSAGES_TAB_INDEX].body->items)) + if(load_cached_related_embedded_item(body_item.get(), event_data->message, me, current_room, tabs[MESSAGES_TAB_INDEX].body->items)) return; std::string message_event_id = event_data->message->related_event_id; @@ -5277,7 +5277,7 @@ namespace QuickMedia { }; // TODO: How about instead fetching all messages we have, not only the visible ones? also fetch with multiple threads. - tabs[MESSAGES_TAB_INDEX].body->body_item_render_callback = [this, ¤t_room, &me, &fetch_message_future, &tabs, &fetch_body_item, &fetch_message_tab, MESSAGES_TAB_INDEX](BodyItem *body_item) { + tabs[MESSAGES_TAB_INDEX].body->body_item_render_callback = [this, ¤t_room, &me, &fetch_message_future, &tabs, &fetch_body_item, &fetch_message_tab, MESSAGES_TAB_INDEX](std::shared_ptr<BodyItem> &body_item) { Message *message = static_cast<Message*>(body_item->userdata); if(!message) return; @@ -5290,7 +5290,7 @@ namespace QuickMedia { return; } - if(load_cached_related_embedded_item(body_item, message, me, current_room, tabs[MESSAGES_TAB_INDEX].body->items)) + if(load_cached_related_embedded_item(body_item.get(), message, me, current_room, tabs[MESSAGES_TAB_INDEX].body->items)) return; std::string message_event_id = message->related_event_id; @@ -5356,7 +5356,7 @@ namespace QuickMedia { float prev_chat_height = chat_input.get_height(); float chat_input_height_full = 0.0f; - const float logo_padding_x = std::floor(15.0f * get_ui_scale()); + const float logo_padding_x = std::floor(10.0f * get_ui_scale()); const float chat_input_padding_x = std::floor(10.0f * get_ui_scale()); const float chat_input_padding_y = std::floor(10.0f * get_ui_scale()); @@ -6111,7 +6111,7 @@ namespace QuickMedia { update_pinned_messages_author(fetch_message->user); update_messages_author(fetch_message->user); fetch_message = nullptr; - } else if(fetch_message_result.type == FetchMessageType::MESSAGE) { + } else if(fetch_message_result.type == FetchMessageType::MESSAGE && fetch_body_item) { fprintf(stderr, "Finished fetching message: %s\n", fetch_message_result.message ? fetch_message_result.message->event_id.c_str() : "(null)"); if(fetch_message_tab == PINNED_TAB_INDEX) { PinnedEventData *event_data = static_cast<PinnedEventData*>(fetch_body_item->userdata); @@ -6134,6 +6134,7 @@ namespace QuickMedia { fetch_body_item->embedded_item_status = FetchStatus::FAILED_TO_LOAD; } } + fetch_body_item = nullptr; } fetch_message_tab = -1; } @@ -6232,8 +6233,9 @@ namespace QuickMedia { overlay.setFillColor(sf::Color(0, 0, 0, 240)); window.draw(overlay); - sf::Vector2f body_item_pos(body_pos.x, window_size.y - chat_input_height_full - item_height); - sf::Vector2f body_item_size(body_size.x, item_height); + const float padding_x = std::floor(10.0f * QuickMedia::get_ui_scale()); + sf::Vector2f body_item_pos(body_pos.x + padding_x, window_size.y - chat_input_height_full - item_height); + sf::Vector2f body_item_size(body_size.x - padding_x * 2.0f, item_height); sf::RectangleShape item_background(sf::Vector2f(window_size.x, body_item_size.y + chat_input_height_full + replying_to_text_height + margin)); item_background.setPosition(sf::Vector2f(0.0f, window_size.y - (body_item_size.y + chat_input_height_full + replying_to_text_height + margin))); @@ -6247,14 +6249,14 @@ namespace QuickMedia { window.draw(user_mention_background); tabs[USERS_TAB_INDEX].body->draw(window, - sf::Vector2f(body_pos.x, item_background.getPosition().y - user_mention_body_height), - sf::Vector2f(body_size.x, user_mention_body_height)); + sf::Vector2f(body_pos.x + padding_x, item_background.getPosition().y - user_mention_body_height), + sf::Vector2f(body_size.x - padding_x * 2.0f, user_mention_body_height)); } replying_to_text.setPosition(body_item_pos.x, body_item_pos.y - replying_to_text_height); window.draw(replying_to_text); - tabs[MESSAGES_TAB_INDEX].body->draw_item(window, currently_operating_on_item.get(), body_item_pos, body_item_size); + tabs[MESSAGES_TAB_INDEX].body->draw_item(window, currently_operating_on_item, body_item_pos, body_item_size); } if(selected_tab == MESSAGES_TAB_INDEX && current_room && current_room->body_item && !current_room->last_message_read && matrix->is_initial_sync_finished()) { |