diff --git a/resources/images/flush_mode_panel_icon_disabled.svg b/resources/images/flush_mode_panel_icon_disabled.svg
new file mode 100644
index 000000000..2e9cfc710
--- /dev/null
+++ b/resources/images/flush_mode_panel_icon_disabled.svg
@@ -0,0 +1,7 @@
+
diff --git a/resources/images/global_map_mode_tag.svg b/resources/images/global_map_mode_tag.svg
new file mode 100644
index 000000000..d185c3563
--- /dev/null
+++ b/resources/images/global_map_mode_tag.svg
@@ -0,0 +1,4 @@
+
diff --git a/src/slic3r/GUI/CapsuleButton.cpp b/src/slic3r/GUI/CapsuleButton.cpp
index daba169f2..962ad4b93 100644
--- a/src/slic3r/GUI/CapsuleButton.cpp
+++ b/src/slic3r/GUI/CapsuleButton.cpp
@@ -24,10 +24,10 @@ CapsuleButton::CapsuleButton(wxWindow *parent, wxWindowID id, const wxString &la
auto sizer = new wxBoxSizer(wxHORIZONTAL);
- std::string icon_name = selected ? "capsule_tag_on" : "capsule_tag_off";
- auto bmp = create_scaled_bitmap(icon_name, nullptr, FromDIP(16));
+ tag_on_bmp = create_scaled_bitmap("capsule_tag_on", nullptr, FromDIP(16));
+ tag_off_bmp = create_scaled_bitmap("capsule_tag_off", nullptr, FromDIP(16));
- m_btn = new wxBitmapButton(this, wxID_ANY, bmp, wxDefaultPosition, wxDefaultSize, wxNO_BORDER);
+ m_btn = new wxBitmapButton(this, wxID_ANY, selected?tag_on_bmp:tag_off_bmp, wxDefaultPosition, wxDefaultSize, wxNO_BORDER);
m_btn->SetBackgroundColour(*wxWHITE);
m_label = new Label(this, label);
@@ -109,15 +109,13 @@ void CapsuleButton::OnLeaveWindow(wxMouseEvent &event)
void CapsuleButton::UpdateStatus()
{
- 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_btn->SetBitmap(tag_on_bmp);
m_label->SetForegroundColour(TextSelectColor);
m_label->SetBackgroundColour(BgSelectColor);
m_btn->SetBackgroundColour(BgSelectColor);
} else {
+ m_btn->SetBitmap(tag_off_bmp);
m_label->SetForegroundColour(TextNormalColor);
m_label->SetBackgroundColour(BgNormalColor);
m_btn->SetBackgroundColour(BgNormalColor);
diff --git a/src/slic3r/GUI/CapsuleButton.hpp b/src/slic3r/GUI/CapsuleButton.hpp
index da10baf8c..7ec13f3e2 100644
--- a/src/slic3r/GUI/CapsuleButton.hpp
+++ b/src/slic3r/GUI/CapsuleButton.hpp
@@ -21,6 +21,9 @@ private:
wxBitmapButton *m_btn;
Label *m_label;
+ wxBitmap tag_on_bmp;
+ wxBitmap tag_off_bmp;
+
bool m_hovered;
bool m_selected;
};
diff --git a/src/slic3r/GUI/FilamentGroupPopup.cpp b/src/slic3r/GUI/FilamentGroupPopup.cpp
index f2466a37b..750aad0f4 100644
--- a/src/slic3r/GUI/FilamentGroupPopup.cpp
+++ b/src/slic3r/GUI/FilamentGroupPopup.cpp
@@ -78,18 +78,23 @@ FilamentGroupPopup::FilamentGroupPopup(wxWindow *parent) : PopupWindow(parent, w
button_labels.resize(ButtonType::btCount);
button_desps.resize(ButtonType::btCount);
detail_infos.resize(ButtonType::btCount);
+ global_mode_tags.resize(ButtonType::btCount);
+
std::vector btn_texts = {AutoForFlushLabel, AutoForMatchLabel, ManualLabel};
std::vector btn_desps = {AutoForFlushDesp, AutoForMatchDesp, ManualDesp};
std::vector mode_details = {AutoForFlushDetail, AutoForMatchDetail, ManualDetail};
top_sizer->AddSpacer(vertical_margin);
-
- auto checked_bmp = create_scaled_bitmap("map_mode_on", nullptr, 16);
- auto unchecked_bmp = create_scaled_bitmap("map_mode_off", nullptr, 16);
+ checked_bmp = create_scaled_bitmap("map_mode_on", nullptr, 16);;
+ unchecked_bmp = create_scaled_bitmap("map_mode_off", nullptr, 16);
+ disabled_bmp = create_scaled_bitmap("map_mode_disabled", nullptr, 16);
+ checked_hover_bmp = create_scaled_bitmap("map_mode_on_hovered", nullptr, 16);
+ unchecked_hover_bmp = create_scaled_bitmap("map_mode_off_hovered", nullptr, 16);
+ global_tag_bmp = create_scaled_bitmap("global_map_mode_tag", nullptr, 16);
for (size_t idx = 0; idx < ButtonType::btCount; ++idx) {
wxBoxSizer *button_sizer = new wxBoxSizer(wxHORIZONTAL);
- radio_btns[idx] = new wxBitmapButton(this, idx, unchecked_bmp, wxDefaultPosition, wxDefaultSize, wxNO_BORDER);
+ radio_btns[idx] = new wxBitmapButton(this, wxID_ANY, unchecked_bmp, wxDefaultPosition, wxDefaultSize, wxNO_BORDER);
radio_btns[idx]->SetBackgroundColour(BackGroundColor);
button_labels[idx] = new Label(this, btn_texts[idx]);
@@ -102,10 +107,16 @@ FilamentGroupPopup::FilamentGroupPopup(wxWindow *parent) : PopupWindow(parent, w
button_desps[idx]->SetForegroundColour(LabelEnableColor);
button_desps[idx]->SetFont(Label::Body_14);
- button_sizer->Add(radio_btns[idx], 0, wxALIGN_CENTER_VERTICAL);
+ global_mode_tags[idx] = new wxBitmapButton(this, wxID_ANY, global_tag_bmp, wxDefaultPosition, wxDefaultSize, wxNO_BORDER);
+ global_mode_tags[idx]->SetBackgroundColour(BackGroundColor);
+ global_mode_tags[idx]->SetToolTip(_L("Global settings"));
+
+ button_sizer->Add(radio_btns[idx], 0, wxALIGN_CENTER);
button_sizer->AddSpacer(ratio_spacing);
- button_sizer->Add(button_labels[idx], 0, wxALIGN_CENTER_VERTICAL);
- button_sizer->Add(button_desps[idx], 0, wxALIGN_CENTER_VERTICAL);
+ button_sizer->Add(button_labels[idx], 0, wxALIGN_CENTER);
+ button_sizer->Add(button_desps[idx], 0, wxALIGN_CENTER);
+ button_sizer->AddSpacer(ratio_spacing);
+ button_sizer->Add(global_mode_tags[idx], 0, wxALIGN_CENTER);
wxBoxSizer *label_sizer = new wxBoxSizer(wxHORIZONTAL);
@@ -170,23 +181,11 @@ void FilamentGroupPopup::DrawRoundedCorner(int radius)
HWND hwnd = GetHWND();
if (hwnd) {
HRGN hrgn = CreateRoundRectRgn(0, 0, GetRect().GetWidth(), GetRect().GetHeight(), radius, radius);
- SetWindowRgn(hwnd, hrgn, TRUE);
+ SetWindowRgn(hwnd, hrgn, FALSE);
SetWindowLong(hwnd, GWL_EXSTYLE, GetWindowLong(hwnd, GWL_EXSTYLE) | WS_EX_LAYERED);
SetLayeredWindowAttributes(hwnd, 0, 0, LWA_COLORKEY);
}
-#else
- wxClientDC dc(this);
- wxGraphicsContext *gc = wxGraphicsContext::Create(dc);
- if (gc) {
- gc->SetBrush(*wxWHITE_BRUSH);
- gc->SetPen(*wxTRANSPARENT_PEN);
- wxRect rect(0, 0, GetSize().GetWidth(), GetSize().GetHeight());
- wxGraphicsPath path = wxGraphicsRenderer::GetDefaultRenderer()->CreatePath();
- path.AddRoundedRectangle(0, 0, rect.width, rect.height, radius);
- gc->DrawPath(path);
- delete gc;
- }
#endif
}
@@ -195,8 +194,6 @@ void FilamentGroupPopup::Init()
const wxString AutoForMatchDesp = _L("(Arrange before slicing)");
const wxString MachineSyncTip = _L("(Please sync printer)");
- auto disabled_bmp = create_scaled_bitmap("map_mode_disabled", nullptr, 16);
- auto unchecked_bmp = create_scaled_bitmap("map_mode_off", nullptr, 16);
radio_btns[ButtonType::btForMatch]->Enable(m_connected);
if (m_connected) {
button_labels[ButtonType::btForMatch]->SetForegroundColour(LabelEnableColor);
@@ -239,6 +236,7 @@ void FilamentGroupPopup::tryPopup(Plater* plater,PartPlate* partplate,bool skip_
m_active = true;
Init();
ResetTimer();
+ DrawRoundedCorner(16);
PopupWindow::Popup();
}
}
@@ -308,13 +306,12 @@ void FilamentGroupPopup::OnEnterWindow(wxMouseEvent &) { ResetTimer(); }
void FilamentGroupPopup::UpdateButtonStatus(int hover_idx)
{
- auto checked_bmp = create_scaled_bitmap("map_mode_on", nullptr, 16);
- auto unchecked_bmp = create_scaled_bitmap("map_mode_off", nullptr, 16);
- auto checked_hover_bmp = create_scaled_bitmap("map_mode_on_hovered", nullptr, 16);
- auto unchecked_hover_bmp = create_scaled_bitmap("map_mode_off_hovered", nullptr, 16);
-
-
+ auto global_mode = plater_ref->get_global_filament_map_mode();
for (int i = 0; i < ButtonType::btCount; ++i) {
+ if (mode_list.at(i) == global_mode)
+ global_mode_tags[i]->Show();
+ else
+ global_mode_tags[i]->Hide();
if (ButtonType::btForMatch == i && !m_connected) {
button_labels[i]->SetFont(Label::Body_14);
continue;
diff --git a/src/slic3r/GUI/FilamentGroupPopup.hpp b/src/slic3r/GUI/FilamentGroupPopup.hpp
index 2b853c5b9..8c4612b30 100644
--- a/src/slic3r/GUI/FilamentGroupPopup.hpp
+++ b/src/slic3r/GUI/FilamentGroupPopup.hpp
@@ -48,11 +48,20 @@ private:
FilamentMapMode m_mode;
wxTimer *m_timer;
- std::vector radio_btns;
+ std::vector radio_btns;
+ std::vector global_mode_tags;
std::vector