From 4a7b86829025664f6eeef6fcb5fc0894733f2ad6 Mon Sep 17 00:00:00 2001 From: dec05eba Date: Sat, 17 Oct 2020 13:42:31 +0200 Subject: Matrix: make displayname more bright, add circle mask shader for avatar and room thumbnails --- src/QuickMedia.cpp | 30 ++++++++++++++++++++++++------ 1 file changed, 24 insertions(+), 6 deletions(-) (limited to 'src/QuickMedia.cpp') diff --git a/src/QuickMedia.cpp b/src/QuickMedia.cpp index bd4b2d4..a2c936f 100644 --- a/src/QuickMedia.cpp +++ b/src/QuickMedia.cpp @@ -349,6 +349,11 @@ namespace QuickMedia { abort(); } + if(!circle_mask_shader.loadFromFile(resources_root + "shaders/circle_mask.glsl", sf::Shader::Type::Fragment)) { + fprintf(stderr, "Failed to load %s/shaders/circle_mask.glsl", resources_root.c_str()); + abort(); + } + struct sigaction action; action.sa_handler = sigpipe_handler; sigemptyset(&action.sa_mask); @@ -2896,8 +2901,10 @@ namespace QuickMedia { body_item->thumbnail_url = message->thumbnail_url; else if(!message->url.empty() && message->type == MessageType::IMAGE) body_item->thumbnail_url = message->url; - else + else { body_item->thumbnail_url = message->user->avatar_url; + body_item->thumbnail_mask_type = ThumbnailMaskType::CIRCLE; + } // TODO: Show image thumbnail inline instead of url to image and showing it as the thumbnail of the body item body_item->url = message->url; body_item->author_color = message->user->display_name_color; @@ -2931,6 +2938,7 @@ namespace QuickMedia { messages_tab.body->thumbnail_resize_target_size.y = 337; messages_tab.body->thumbnail_fallback_size.x = 32; messages_tab.body->thumbnail_fallback_size.y = 32; + messages_tab.body->thumbnail_mask_shader = &circle_mask_shader; //messages_tab.body->line_seperator_color = sf::Color::Transparent; messages_tab.text = sf::Text("Messages", *font, tab_text_size); tabs.push_back(std::move(messages_tab)); @@ -2942,6 +2950,7 @@ namespace QuickMedia { //rooms_tab.body->line_seperator_color = sf::Color::Transparent; rooms_tab.body->thumbnail_fallback_size.x = 32; rooms_tab.body->thumbnail_fallback_size.y = 32; + rooms_tab.body->thumbnail_mask_shader = &circle_mask_shader; rooms_tab.text = sf::Text("Rooms", *font, tab_text_size); tabs.push_back(std::move(rooms_tab)); @@ -3182,7 +3191,7 @@ namespace QuickMedia { const float tab_vertical_offset = 10.0f; - sf::Text room_name_text("", *font, 18); + sf::Text room_name_text("", *bold_font, 18); const float room_name_text_height = 20.0f; const float room_name_text_padding_y = 10.0f; const float room_name_total_height = room_name_text_height + room_name_text_padding_y * 2.0f; @@ -3308,6 +3317,7 @@ namespace QuickMedia { auto body_item = BodyItem::create(std::move(room_name)); body_item->thumbnail_url = room->avatar_url; body_item->userdata = room.get(); // Note: this has to be valid as long as the room list is valid! + body_item->thumbnail_mask_type = ThumbnailMaskType::CIRCLE; tabs[ROOMS_TAB_INDEX].body->items.push_back(body_item); body_items_by_room[room] = { body_item, true, 0 }; } @@ -3344,8 +3354,12 @@ namespace QuickMedia { auto body_item = find_body_item_by_event_id(body_items, num_body_items, message->related_event_id); if(body_item) { body_item->set_description(message->body); - if(message->related_event_type == RelatedEventType::REDACTION) + if(message->related_event_type == RelatedEventType::REDACTION) { + body_item->embedded_item = nullptr; + body_item->embedded_item_status = EmbeddedItemStatus::NONE; body_item->thumbnail_url = message->user->avatar_url; + body_item->thumbnail_mask_type = ThumbnailMaskType::NONE; + } it = unreferenced_events.erase(it); } else { ++it; @@ -3366,8 +3380,12 @@ namespace QuickMedia { auto body_item = find_body_item_by_event_id(body_items.data(), body_items.size(), message->related_event_id); if(body_item) { body_item->set_description(message->body); - if(message->related_event_type == RelatedEventType::REDACTION) + if(message->related_event_type == RelatedEventType::REDACTION) { + body_item->embedded_item = nullptr; + body_item->embedded_item_status = EmbeddedItemStatus::NONE; body_item->thumbnail_url = message->user->avatar_url; + body_item->thumbnail_mask_type = ThumbnailMaskType::NONE; + } } else { unreferenced_events.push_back(message); } @@ -3883,10 +3901,10 @@ namespace QuickMedia { room_avatar_texture_size.x *= room_avatar_sprite.getScale().x; room_avatar_texture_size.y *= room_avatar_sprite.getScale().y; room_avatar_sprite.setPosition(body_pos.x, room_name_total_height * 0.5f - room_avatar_texture_size.y * 0.5f + 5.0f); - window.draw(room_avatar_sprite); + window.draw(room_avatar_sprite, &circle_mask_shader); room_name_text_offset_x += room_avatar_texture_size.x + 10.0f; } - room_name_text.setPosition(body_pos.x + room_name_text_offset_x, room_name_text_padding_y); + room_name_text.setPosition(body_pos.x + room_name_text_offset_x, room_name_text_padding_y + 4.0f); window.draw(room_name_text); } -- cgit v1.2.3