From e325214cb6f46d0539abe3ebee2febee47efe867 Mon Sep 17 00:00:00 2001 From: tao wang Date: Sun, 9 Oct 2022 15:48:55 +0800 Subject: [PATCH] FIX:fixed crash when creat projecy in full screen mode on mac Change-Id: I029bf52e805d699a5d6de4e3a049954b09e58255 --- src/slic3r/GUI/MainFrame.cpp | 23 +++++++++++++++++++++-- src/slic3r/GUI/MainFrame.hpp | 1 + src/slic3r/Utils/MacDarkMode.hpp | 3 ++- src/slic3r/Utils/MacDarkMode.mm | 27 +++++++++++++++++++++++---- 4 files changed, 47 insertions(+), 7 deletions(-) diff --git a/src/slic3r/GUI/MainFrame.cpp b/src/slic3r/GUI/MainFrame.cpp index 76acaf3b1..471c16335 100644 --- a/src/slic3r/GUI/MainFrame.cpp +++ b/src/slic3r/GUI/MainFrame.cpp @@ -198,6 +198,25 @@ DPIFrame(NULL, wxID_ANY, "", wxDefaultPosition, wxDefaultSize, BORDERLESS_FRAME_ // Font is already set in DPIFrame constructor */ +#ifdef __APPLE__ + m_reset_title_text_colour_timer = new wxTimer(); + m_reset_title_text_colour_timer->SetOwner(this); + Bind(wxEVT_TIMER, [this](auto& e) { + set_title_colour_after_set_title(GetHandle()); + m_reset_title_text_colour_timer->Stop(); + }); + this->Bind(wxEVT_FULLSCREEN, [this](wxFullScreenEvent& e) { + set_tag_when_enter_full_screen(e.IsFullScreen()); + if (!e.IsFullScreen()) { + if (m_reset_title_text_colour_timer) { + m_reset_title_text_colour_timer->Stop(); + m_reset_title_text_colour_timer->Start(500); + } + } + e.Skip(); + }); +#endif + #ifdef __APPLE__ // Initialize the docker task bar icon. switch (wxGetApp().get_app_mode()) { @@ -766,8 +785,8 @@ void MainFrame::update_title() void MainFrame::update_title_colour_after_set_title() { -#ifdef __WXOSX__ - set_title_colour_after_set_title(); +#ifdef __APPLE__ + set_title_colour_after_set_title(GetHandle()); #endif } diff --git a/src/slic3r/GUI/MainFrame.hpp b/src/slic3r/GUI/MainFrame.hpp index 0342c71d5..8611f4e44 100644 --- a/src/slic3r/GUI/MainFrame.hpp +++ b/src/slic3r/GUI/MainFrame.hpp @@ -83,6 +83,7 @@ protected: class MainFrame : public DPIFrame { bool m_loaded {false}; + wxTimer* m_reset_title_text_colour_timer{ nullptr }; wxString m_qs_last_input_file = wxEmptyString; wxString m_qs_last_output_file = wxEmptyString; diff --git a/src/slic3r/Utils/MacDarkMode.hpp b/src/slic3r/Utils/MacDarkMode.hpp index 7cdc4e6f7..abcd8e46d 100644 --- a/src/slic3r/Utils/MacDarkMode.hpp +++ b/src/slic3r/Utils/MacDarkMode.hpp @@ -11,7 +11,8 @@ extern bool mac_dark_mode(); extern double mac_max_scaling_factor(); extern void set_miniaturizable(void * window); void WKWebView_evaluateJavaScript(void * web, wxString const & script, void (*callback)(wxString const &)); -void set_title_colour_after_set_title(); +void set_tag_when_enter_full_screen(bool isfullscreen); +void set_title_colour_after_set_title(void * window); void initGestures(void * view, wxEvtHandler * handler); #endif diff --git a/src/slic3r/Utils/MacDarkMode.mm b/src/slic3r/Utils/MacDarkMode.mm index 5750358dd..e4764055d 100644 --- a/src/slic3r/Utils/MacDarkMode.mm +++ b/src/slic3r/Utils/MacDarkMode.mm @@ -20,6 +20,7 @@ namespace Slic3r { namespace GUI { NSTextField* mainframe_text_field = nil; +bool is_in_full_screen_mode = false; bool mac_dark_mode() { @@ -60,11 +61,25 @@ void set_miniaturizable(void * window) } } -void set_title_colour_after_set_title() +void set_tag_when_enter_full_screen(bool isfullscreen) { - if(mainframe_text_field){ - [(NSTextField*)mainframe_text_field setTextColor : NSColor.whiteColor]; + is_in_full_screen_mode = isfullscreen; +} + +void set_title_colour_after_set_title(void * window) +{ + NSEnumerator *viewEnum = [[[[[[[(NSView*) window window] contentView] superview] titlebarViewController] view] subviews] objectEnumerator]; + NSView *viewObject; + while(viewObject = (NSView *)[viewEnum nextObject]) { + if([viewObject class] == [NSTextField self]) { + [(NSTextField*)viewObject setTextColor : NSColor.whiteColor]; + mainframe_text_field = viewObject; } + } + + if (mainframe_text_field) { + [(NSTextField*)mainframe_text_field setTextColor : NSColor.whiteColor]; + } } void WKWebView_evaluateJavaScript(void * web, wxString const & script, void (*callback)(wxString const &)) @@ -90,7 +105,11 @@ void WKWebView_evaluateJavaScript(void * web, wxString const & script, void (*ca if (Slic3r::GUI::mainframe_text_field != self){ [self setTextColor2: textColor]; }else{ - [self setTextColor2 : NSColor.whiteColor]; + if(Slic3r::GUI::is_in_full_screen_mode){ + [self setTextColor2 : NSColor.darkGrayColor]; + }else{ + [self setTextColor2 : NSColor.whiteColor]; + } } }