From 5fc2acc2351f1845bdbd9dceb4ee6f4172aff995 Mon Sep 17 00:00:00 2001 From: "chunmao.guo" Date: Wed, 19 Oct 2022 13:35:04 +0800 Subject: [PATCH] FIX: Label hyperlink style Change-Id: Ib0935b41080de994b0b82e4c211ff7a0b9f295bc --- src/slic3r/GUI/Widgets/Label.cpp | 34 ++++++++++++++++++++++---------- src/slic3r/GUI/Widgets/Label.hpp | 2 ++ 2 files changed, 26 insertions(+), 10 deletions(-) diff --git a/src/slic3r/GUI/Widgets/Label.cpp b/src/slic3r/GUI/Widgets/Label.cpp index 4a541f3478..23279ff956 100644 --- a/src/slic3r/GUI/Widgets/Label.cpp +++ b/src/slic3r/GUI/Widgets/Label.cpp @@ -95,16 +95,19 @@ Label::Label(wxWindow *parent, wxFont const &font, wxString const &text, long st this->font = font; SetFont(font); SetBackgroundColour(StaticBox::GetParentBackgroundColor(parent)); - Bind(wxEVT_ENTER_WINDOW, [this](auto &e) { - if (GetWindowStyle() & LB_HYPERLINK) { - SetFont(this->font.Underlined()); - Refresh(); - } - }); - Bind(wxEVT_LEAVE_WINDOW, [this](auto &e) { - SetFont(this->font); - Refresh(); - }); +} + +void Label::SetLabel(const wxString& label) +{ + if (GetLabel() == label) + return; + wxStaticText::SetLabel(label); +#ifdef __WXOSX__ + if ((GetWindowStyle() & LB_HYPERLINK)) { + SetLabelMarkup(label); + return; + } +#endif } void Label::SetWindowStyleFlag(long style) @@ -115,10 +118,21 @@ void Label::SetWindowStyleFlag(long style) if (style & LB_HYPERLINK) { this->color = GetForegroundColour(); static wxColor clr_url("#00AE42"); + SetFont(this->font.Underlined()); SetForegroundColour(clr_url); + SetCursor(wxCURSOR_HAND); +#ifdef __WXOSX__ + SetLabelMarkup(GetLabel()); +#endif } else { SetForegroundColour(this->color); SetFont(this->font); + SetCursor(wxCURSOR_ARROW); +#ifdef __WXOSX__ + auto label = GetLabel(); + wxStaticText::SetLabel({}); + wxStaticText::SetLabel(label); +#endif } Refresh(); } diff --git a/src/slic3r/GUI/Widgets/Label.hpp b/src/slic3r/GUI/Widgets/Label.hpp index 1d3d387fb7..65f10d009a 100644 --- a/src/slic3r/GUI/Widgets/Label.hpp +++ b/src/slic3r/GUI/Widgets/Label.hpp @@ -13,6 +13,8 @@ public: Label(wxWindow *parent, wxFont const &font, wxString const &text = {}, long style = 0); + void SetLabel(const wxString& label) override; + void SetWindowStyleFlag(long style) override; private: