From 3ac1120fd40b84507c51f867559bd05adff4eecf Mon Sep 17 00:00:00 2001 From: dec05eba Date: Wed, 21 Apr 2021 13:29:01 +0200 Subject: Use shader for rounded rectangle, improve circle shader --- src/QuickMedia.cpp | 39 +++++++++++++++++++++------------------ 1 file changed, 21 insertions(+), 18 deletions(-) (limited to 'src/QuickMedia.cpp') diff --git a/src/QuickMedia.cpp b/src/QuickMedia.cpp index 79f1f74..4de65d2 100644 --- a/src/QuickMedia.cpp +++ b/src/QuickMedia.cpp @@ -645,12 +645,17 @@ namespace QuickMedia { set_resource_loader_root_path(resources_root.c_str()); 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()); + fprintf(stderr, "Failed to load %s/shaders/circle_mask.glsl\n", resources_root.c_str()); + abort(); + } + + if(!rounded_rectangle_shader.loadFromFile(resources_root + "shaders/rounded_rectangle.glsl", sf::Shader::Type::Fragment)) { + fprintf(stderr, "Failed to load %s/shaders/rounded_rectangle.glsl\n", resources_root.c_str()); abort(); } if(!loading_icon.loadFromFile(resources_root + "images/loading_icon.png")) { - fprintf(stderr, "Failed to load %s/images/loading_icon.png", resources_root.c_str()); + fprintf(stderr, "Failed to load %s/images/loading_icon.png\n", resources_root.c_str()); abort(); } loading_icon.setSmooth(true); @@ -1177,13 +1182,13 @@ namespace QuickMedia { } std::unique_ptr Program::create_body() { - auto body = std::make_unique(this, loading_icon); + auto body = std::make_unique(this, loading_icon, &rounded_rectangle_shader); body->thumbnail_mask_shader = &circle_mask_shader; return body; } std::unique_ptr Program::create_search_bar(const std::string &placeholder, int search_delay) { - auto search_bar = std::make_unique(&plugin_logo, placeholder); + auto search_bar = std::make_unique(&plugin_logo, &rounded_rectangle_shader, placeholder); search_bar->text_autosearch_delay = search_delay; return search_bar; } @@ -1290,7 +1295,7 @@ namespace QuickMedia { tab.page->on_navigate_to_page(tab.body.get()); } - Tabs ui_tabs; + Tabs ui_tabs(&rounded_rectangle_shader); for(auto &tab : tabs) { ui_tabs.add_tab(tab.page->get_title()); } @@ -2936,7 +2941,7 @@ namespace QuickMedia { }); }; - Entry comment_input("Press i to begin writing a comment..."); + Entry comment_input("Press i to begin writing a comment...", &rounded_rectangle_shader); comment_input.draw_background = false; comment_input.set_editable(false); @@ -3328,9 +3333,9 @@ namespace QuickMedia { void Program::chat_login_page() { assert(strcmp(plugin_name, "matrix") == 0); - SearchBar login_input(nullptr, "Username"); - SearchBar password_input(nullptr, "Password", true); - SearchBar homeserver_input(nullptr, "Homeserver"); + SearchBar login_input(nullptr, &rounded_rectangle_shader, "Username"); + SearchBar password_input(nullptr, &rounded_rectangle_shader, "Password", true); + SearchBar homeserver_input(nullptr, &rounded_rectangle_shader, "Homeserver"); sf::Text status_text("", *FontLoader::get_font(FontLoader::FontType::LATIN), std::floor(18 * get_ui_scale())); @@ -3566,31 +3571,28 @@ namespace QuickMedia { std::vector tabs; ChatTab pinned_tab; - pinned_tab.body = std::make_unique(this, loading_icon); + pinned_tab.body = create_body(); 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; tabs.push_back(std::move(pinned_tab)); ChatTab messages_tab; - messages_tab.body = std::make_unique(this, loading_icon); + messages_tab.body = create_body(); 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; tabs.push_back(std::move(messages_tab)); // ChatTab users_tab; - // users_tab.body = std::make_unique(this, loading_icon); + // users_tab.body = create_body(); // users_tab.body->thumbnail_max_size = CHAT_MESSAGE_THUMBNAIL_MAX_SIZE; - // users_tab.body->thumbnail_mask_shader = &circle_mask_shader; // users_tab.body->attach_side = AttachSide::TOP; // //users_tab.body->line_separator_color = sf::Color::Transparent; // users_tab.text = sf::Text("Users", *FontLoader::get_font(FontLoader::FontType::LATIN), tab_text_size); // tabs.push_back(std::move(users_tab)); - Tabs ui_tabs(back_color); + Tabs ui_tabs(&rounded_rectangle_shader, back_color); const int PINNED_TAB_INDEX = ui_tabs.add_tab("Pinned messages (0)"); const int MESSAGES_TAB_INDEX = ui_tabs.add_tab("Messages"); ui_tabs.set_selected(MESSAGES_TAB_INDEX); @@ -3855,7 +3857,7 @@ namespace QuickMedia { ui_tabs.set_text(PINNED_TAB_INDEX, "Pinned messages (" + std::to_string(tabs[PINNED_TAB_INDEX].body->items.size()) + ")"); }; - Body url_selection_body(this, loading_icon); + Body url_selection_body(this, loading_icon, &rounded_rectangle_shader); std::unordered_set fetched_messages_set; auto filter_existing_messages = [&fetched_messages_set](Messages &messages) { @@ -3895,7 +3897,7 @@ namespace QuickMedia { read_marker_timeout_ms = 0; redraw = true; - Entry chat_input("Press i to begin writing a message..."); + Entry chat_input("Press i to begin writing a message...", &rounded_rectangle_shader); chat_input.draw_background = false; chat_input.set_editable(false); @@ -5096,6 +5098,7 @@ 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); + circle_mask_shader.setUniform("resolution", sf::Vector2f(room_avatar_texture_size.x, room_avatar_texture_size.y)); window.draw(room_avatar_sprite, &circle_mask_shader); room_name_text_offset_x += room_avatar_texture_size.x + 10.0f; } -- cgit v1.2.3