diff --git a/resources/images/match_mode_panel_icon_disabled.svg b/resources/images/match_mode_panel_icon_disabled.svg new file mode 100644 index 000000000..09a66f97a --- /dev/null +++ b/resources/images/match_mode_panel_icon_disabled.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/slic3r/GUI/CapsuleButton.cpp b/src/slic3r/GUI/CapsuleButton.cpp index a3a2d267d..daba169f2 100644 --- a/src/slic3r/GUI/CapsuleButton.cpp +++ b/src/slic3r/GUI/CapsuleButton.cpp @@ -4,6 +4,16 @@ #include "Widgets/Label.hpp" namespace Slic3r { namespace GUI { + +static const wxColour BgNormalColor = wxColour("#FFFFFF"); +static const wxColour BgSelectColor = wxColour("#EBF9F0"); + +static const wxColour TextNormalColor = wxColour("#000000"); +static const wxColour TextSelectColor = wxColour("#00AE42"); + +static const wxColour BorderNormalColor = wxColour("#CECECE"); +static const wxColour BorderSelectColor = wxColour("#00AE42"); + CapsuleButton::CapsuleButton(wxWindow *parent, wxWindowID id, const wxString &label, bool selected) : wxPanel(parent, id) { SetBackgroundColour(*wxWHITE); @@ -58,12 +68,12 @@ void CapsuleButton::OnPaint(wxPaintEvent &event) wxRect rect = GetClientRect(); gc->SetBrush(wxTransparentColour); gc->DrawRoundedRectangle(0, 0, rect.width, rect.height, 0); - wxColour bg_color = m_selected ? wxColour("#EBF9F0") : wxColour("#FFFFFF"); - wxColour border_color = m_hovered || m_selected ? wxColour("#00AE42") : wxColour("#CECECE"); + wxColour bg_color = m_selected ? BgSelectColor : BgNormalColor; + wxColour border_color = m_hovered || m_selected ? BorderSelectColor : BorderNormalColor; bg_color = StateColor::darkModeColorFor(bg_color); border_color = StateColor::darkModeColorFor(border_color); gc->SetBrush(wxBrush(bg_color)); - gc->SetPen(wxPen(border_color, 2)); + gc->SetPen(wxPen(border_color, 1)); gc->DrawRoundedRectangle(1, 1, rect.width - 2, rect.height - 2, 5); delete gc; } @@ -99,19 +109,20 @@ void CapsuleButton::OnLeaveWindow(wxMouseEvent &event) void CapsuleButton::UpdateStatus() { - wxColour selected_color = StateColor::darkModeColorFor(wxColour("#EBF9F0")); - wxColour normal_color = StateColor::darkModeColorFor(wxColour("#FFFFFF")); - std::string icon_name = m_selected ? "capsule_tag_on" : "capsule_tag_off"; auto bmp = create_scaled_bitmap(icon_name, nullptr, FromDIP(16)); m_btn->SetBitmap(bmp); if (m_selected) { - m_label->SetBackgroundColour(selected_color); - m_btn->SetBackgroundColour(selected_color); + m_label->SetForegroundColour(TextSelectColor); + m_label->SetBackgroundColour(BgSelectColor); + m_btn->SetBackgroundColour(BgSelectColor); } else { - m_label->SetBackgroundColour(normal_color); - m_btn->SetBackgroundColour(normal_color); + m_label->SetForegroundColour(TextNormalColor); + m_label->SetBackgroundColour(BgNormalColor); + m_btn->SetBackgroundColour(BgNormalColor); } + + GUI::wxGetApp().UpdateDarkUIWin(this); } }} // namespace Slic3r::GUI \ No newline at end of file diff --git a/src/slic3r/GUI/CapsuleButton.hpp b/src/slic3r/GUI/CapsuleButton.hpp index 55ed9714b..da10baf8c 100644 --- a/src/slic3r/GUI/CapsuleButton.hpp +++ b/src/slic3r/GUI/CapsuleButton.hpp @@ -10,6 +10,7 @@ class CapsuleButton : public wxPanel public: CapsuleButton(wxWindow *parent, wxWindowID id, const wxString &label, bool selected); void Select(bool selected); + bool IsSelected() const { return m_selected; } protected: void OnPaint(wxPaintEvent &event); private: diff --git a/src/slic3r/GUI/FilamentGroupPopup.cpp b/src/slic3r/GUI/FilamentGroupPopup.cpp index 6666f14e0..eb91b3fea 100644 --- a/src/slic3r/GUI/FilamentGroupPopup.cpp +++ b/src/slic3r/GUI/FilamentGroupPopup.cpp @@ -1,5 +1,4 @@ #include "FilamentGroupPopup.hpp" -#include "FilamentMapDialog.hpp" #include "GUI_App.hpp" #include "MsgDialog.hpp" #include "wx/dcgraph.h" @@ -264,10 +263,18 @@ void FilamentGroupPopup::tryPopup(bool connect_status) }; if (canPopup()) { - m_connected = connect_status; - Init(); - ResetTimer(); - PopupWindow::Popup(); + if (m_active) { + if (m_connected != connect_status) { Init(); } + m_connected = connect_status; + ResetTimer(); + } + else { + m_connected = connect_status; + m_active = true; + Init(); + ResetTimer(); + PopupWindow::Popup(); + } } } @@ -311,6 +318,12 @@ void FilamentGroupPopup::OnRemindBtn(wxCommandEvent &event) void FilamentGroupPopup::OnTimer(wxTimerEvent &event) { Dismiss(); } +void FilamentGroupPopup::Dismiss() { + m_active = false; + PopupWindow::Dismiss(); + m_timer->Stop(); +} + void FilamentGroupPopup::OnLeaveWindow(wxMouseEvent &) { wxPoint pos = this->ScreenToClient(wxGetMousePosition()); diff --git a/src/slic3r/GUI/FilamentGroupPopup.hpp b/src/slic3r/GUI/FilamentGroupPopup.hpp index dc9fdd7a1..7a55c2cb2 100644 --- a/src/slic3r/GUI/FilamentGroupPopup.hpp +++ b/src/slic3r/GUI/FilamentGroupPopup.hpp @@ -18,7 +18,6 @@ public: void tryClose(); FilamentMapMode GetSelectedMode() const { return m_mode; } - private: void OnPaint(wxPaintEvent&event); void StartTimer(); @@ -29,6 +28,7 @@ private: void OnEnterWindow(wxMouseEvent &); void OnTimer(wxTimerEvent &event); void OnRemindBtn(wxCommandEvent &event); + void Dismiss(); void Init(); void UpdateButtonStatus(int hover_idx = -1); @@ -42,6 +42,7 @@ private: FilamentMapMode m_mode; bool m_connected{ false }; wxTimer *m_timer; + bool m_active{ false }; std::vector radio_btns; std::vector