From 5e6eacccf142c38cfdb8bb21e347f6801717897e Mon Sep 17 00:00:00 2001 From: "chunmao.guo" Date: Mon, 10 Feb 2025 18:52:45 +0800 Subject: [PATCH] ENH: StaticGroup badge on macOS Change-Id: Id446e12aec7780f46c341083a7ad8c81ccf4a4f0 Jira: STUDIO-10055 --- src/slic3r/GUI/Widgets/StaticGroup.cpp | 31 +++++++++++++++++++++++++- src/slic3r/GUI/Widgets/StaticGroup.hpp | 9 ++++++++ 2 files changed, 39 insertions(+), 1 deletion(-) diff --git a/src/slic3r/GUI/Widgets/StaticGroup.cpp b/src/slic3r/GUI/Widgets/StaticGroup.cpp index 297c599f3..8f7c73b9c 100644 --- a/src/slic3r/GUI/Widgets/StaticGroup.cpp +++ b/src/slic3r/GUI/Widgets/StaticGroup.cpp @@ -7,17 +7,28 @@ StaticGroup::StaticGroup(wxWindow *parent, wxWindowID id, const wxString &label) SetForegroundColour("#CECECE"); #ifdef __WXMSW__ Bind(wxEVT_PAINT, &StaticGroup::OnPaint, this); -#else #endif } void StaticGroup::ShowBadge(bool show) { +#ifdef __WXMSW__ if (show) badge = ScalableBitmap(this, "badge", 18); else badge = ScalableBitmap{}; Refresh(); +#endif +#ifdef __WXOSX__ + if (show && badge == nullptr) { + badge = new ScalableButton(this, wxID_ANY, "badge", wxEmptyString, wxDefaultSize, wxDefaultPosition, wxBU_EXACTFIT | wxNO_BORDER, false, 18); + badge->SetSize(badge->GetBestSize()); + badge->SetBackgroundColour("#F7F7F7"); + LayoutBadge(); + } + if (badge) + badge->Show(show); +#endif } #ifdef __WXMSW__ @@ -59,3 +70,21 @@ void StaticGroup::PaintForeground(wxDC &dc, const struct tagRECT &rc) } #endif + +#ifdef __WXOSX__ + +void StaticGroup::DoSetSize(int x, int y, int width, int height, int sizeFlags) +{ + wxStaticBox::DoSetSize(x, y, width, height, sizeFlags); + if (badge) + LayoutBadge(); +} + +void StaticGroup::LayoutBadge() +{ + auto size = GetSize(); + auto size2 = size - badge->GetSize(); + badge->SetPosition({size2.x - 6, 0}); +} + +#endif diff --git a/src/slic3r/GUI/Widgets/StaticGroup.hpp b/src/slic3r/GUI/Widgets/StaticGroup.hpp index 43fb0c932..928fe8bb3 100644 --- a/src/slic3r/GUI/Widgets/StaticGroup.hpp +++ b/src/slic3r/GUI/Widgets/StaticGroup.hpp @@ -18,9 +18,18 @@ private: void OnPaint(wxPaintEvent &evt); void PaintForeground(wxDC &dc, const struct tagRECT &rc) override; #endif +#ifdef __WXOSX__ + void DoSetSize(int x, int y, int width, int height, int sizeFlags) override; + void LayoutBadge(); +#endif private: +#ifdef __WXMSW__ ScalableBitmap badge; +#endif +#ifdef __WXOSX__ + ScalableButton * badge { nullptr }; +#endif }; #endif // !slic3r_GUI_StaticGroup_hpp_