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