From eccc479199b78748674af16df163859cd2bf34b2 Mon Sep 17 00:00:00 2001 From: "liz.li" Date: Tue, 13 Jun 2023 19:26:50 +0800 Subject: [PATCH] ENH: add transparent icon [STUDIO-3074] add transparent icon at flush dialog and IMSlider menu Change-Id: Ib2b5ac6680287406c06fb68f28676b3bd75b6cf3 --- src/slic3r/GUI/IMSlider.cpp | 2 ++ src/slic3r/GUI/ImGuiWrapper.cpp | 8 +++++++- src/slic3r/GUI/WipeTowerDialog.cpp | 16 ++++------------ 3 files changed, 13 insertions(+), 13 deletions(-) diff --git a/src/slic3r/GUI/IMSlider.cpp b/src/slic3r/GUI/IMSlider.cpp index 0d9f458ed1..0acefff9cf 100644 --- a/src/slic3r/GUI/IMSlider.cpp +++ b/src/slic3r/GUI/IMSlider.cpp @@ -1358,6 +1358,8 @@ void IMSlider::render_add_menu() for (int i = 0; i < extruder_num; i++) { std::array rgba = decode_color_to_float_array(m_extruder_colors[i]); ImU32 icon_clr = IM_COL32(rgba[0] * 255.0f, rgba[1] * 255.0f, rgba[2] * 255.0f, rgba[3] * 255.0f); + if (rgba[3] == 0) + icon_clr = 0; if (menu_item_with_icon((_u8L("Filament ") + std::to_string(i + 1)).c_str(), "", ImVec2(14, 14) * m_scale, icon_clr, false, true, &hovered)) add_code_as_tick(ToolChange, i + 1); if (hovered) { show_tooltip(_u8L("Change filament at the beginning of this layer.")); } } diff --git a/src/slic3r/GUI/ImGuiWrapper.cpp b/src/slic3r/GUI/ImGuiWrapper.cpp index 19565660f1..8753daa30b 100644 --- a/src/slic3r/GUI/ImGuiWrapper.cpp +++ b/src/slic3r/GUI/ImGuiWrapper.cpp @@ -1482,7 +1482,13 @@ bool menu_item_with_icon(const char *label, const char *shortcut, ImVec2 icon_si float icon_pos_y = selectable_pos_y + (label_size.y + style.ItemSpacing.y - icon_size.y) / 2; float icon_pos_x = pos.x + window->DC.MenuColumns.Pos[2] + extra_w + g.FontSize * 0.40f; ImVec2 icon_pos = ImVec2(icon_pos_x, icon_pos_y); - ImGui::RenderFrame(icon_pos, icon_pos + icon_size, icon_color); + if (icon_color != 0) + ImGui::RenderFrame(icon_pos, icon_pos + icon_size, icon_color); + else { + static ImTextureID transparent; + IMTexture::load_from_svg_file(Slic3r::resources_dir() + "/images/transparent.svg", icon_size.x, icon_size.y, transparent); + window->DrawList->AddImage(transparent, icon_pos, icon_pos + icon_size, { 0,0 }, { 1,1 }, ImGui::GetColorU32(ImVec4(1.f, 1.f, 1.f, 1.f))); + } } if (shortcut_w > 0.0f) { diff --git a/src/slic3r/GUI/WipeTowerDialog.cpp b/src/slic3r/GUI/WipeTowerDialog.cpp index f5ae1b27b8..6a142d98ed 100644 --- a/src/slic3r/GUI/WipeTowerDialog.cpp +++ b/src/slic3r/GUI/WipeTowerDialog.cpp @@ -225,12 +225,8 @@ void WipingPanel::create_panels(wxWindow* parent, const int num) { auto sizer = new wxBoxSizer(wxHORIZONTAL); panel->SetSizer(sizer); - wxButton *icon = new wxButton(panel, wxID_ANY, wxString("") << i + 1, wxDefaultPosition, ICON_SIZE, wxBORDER_NONE | wxBU_AUTODRAW); - icon->SetBackgroundColour(m_colours[i]); - //auto icon_style = icon->GetWindowStyle() & ~(wxBORDER_NONE | wxBORDER_SIMPLE); - //icon->SetWindowStyle(m_colours[i].Red() > 224 && m_colours[i].Blue() > 224 && m_colours[i].Green() > 224 ? (icon_style | wxBORDER_SIMPLE) : (icon_style | wxBORDER_NONE)); - auto label_clr = m_colours[i].GetLuminance() < 0.51 ? *wxWHITE : *wxBLACK; - icon->SetForegroundColour(label_clr); + wxButton* icon = new wxButton(panel, wxID_ANY, {}, wxDefaultPosition, ICON_SIZE, wxBORDER_NONE | wxBU_AUTODRAW); + icon->SetBitmap(*get_extruder_color_icon(m_colours[i].GetAsString(wxC2S_HTML_SYNTAX).ToStdString(), std::to_string(i + 1), 16, 16)); icon->SetCanFocus(false); sizer->AddSpacer(ROW_BEG_PADDING); @@ -329,12 +325,8 @@ WipingPanel::WipingPanel(wxWindow* parent, const std::vector& matrix, con header_line_sizer->AddSpacer(HEADER_BEG_PADDING); for (unsigned int i = 0; i < m_number_of_extruders; ++i) { - wxButton* icon = new wxButton(header_line_panel, wxID_ANY, wxString("") << i + 1, wxDefaultPosition, ICON_SIZE, wxBORDER_NONE | wxBU_AUTODRAW); - icon->SetBackgroundColour(m_colours[i]); - //auto icon_style = icon->GetWindowStyle() & ~(wxBORDER_NONE | wxBORDER_SIMPLE); - //icon->SetWindowStyle(m_colours[i].Red() > 224 && m_colours[i].Blue() > 224 && m_colours[i].Green() > 224 ? (icon_style | wxBORDER_SIMPLE) : (icon_style | wxBORDER_NONE)); - auto label_clr = m_colours[i].GetLuminance() < 0.51 ? *wxWHITE : *wxBLACK; - icon->SetForegroundColour(label_clr); + wxButton* icon = new wxButton(header_line_panel, wxID_ANY, {}, wxDefaultPosition, ICON_SIZE, wxBORDER_NONE | wxBU_AUTODRAW); + icon->SetBitmap(*get_extruder_color_icon(m_colours[i].GetAsString(wxC2S_HTML_SYNTAX).ToStdString(), std::to_string(i + 1), 16, 16)); icon->SetCanFocus(false); header_line_sizer->AddSpacer(ICON_GAP);