diff options
Diffstat (limited to 'src/slic3r/GUI/wxExtensions.cpp')
-rw-r--r-- | src/slic3r/GUI/wxExtensions.cpp | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/src/slic3r/GUI/wxExtensions.cpp b/src/slic3r/GUI/wxExtensions.cpp index 9712a41b3..23774e8d8 100644 --- a/src/slic3r/GUI/wxExtensions.cpp +++ b/src/slic3r/GUI/wxExtensions.cpp @@ -16,6 +16,7 @@ #include "Plater.hpp" #include "../Utils/MacDarkMode.hpp" #include "BitmapComboBox.hpp" +#include "OG_CustomCtrl.hpp" #if ENABLE_COLOR_CLASSES #include "libslic3r/Color.hpp" @@ -993,6 +994,103 @@ void BlinkingBitmap::blink() this->SetBitmap(show ? bmp.bmp() : wxNullBitmap); } +namespace Slic3r { +namespace GUI { + +void Highlighter::set_timer_owner(wxWindow* owner, int timerid/* = wxID_ANY*/) +{ + m_timer.SetOwner(owner, timerid); + bind_timer(owner); +} + +bool Highlighter::init(bool input_failed) +{ + if (input_failed) + return false; + + m_timer.Start(300, false); + return true; +} +void Highlighter::invalidate() +{ + if (m_timer.IsRunning()) + m_timer.Stop(); + m_blink_counter = 0; +} + +void Highlighter::blink() +{ + if ((++m_blink_counter) == 11) + invalidate(); +} + +// HighlighterForWx + +void HighlighterForWx::bind_timer(wxWindow* owner) +{ + owner->Bind(wxEVT_TIMER, [this](wxTimerEvent&) { + blink(); + }); +} + +// using OG_CustomCtrl where arrow will be rendered and flag indicated "show/hide" state of this arrow +void HighlighterForWx::init(std::pair<OG_CustomCtrl*, bool*> params) +{ + invalidate(); + if (!Highlighter::init(!params.first && !params.second)) + return; + + m_custom_ctrl = params.first; + m_show_blink_ptr = params.second; + + *m_show_blink_ptr = true; + m_custom_ctrl->Refresh(); +} + +// - using a BlinkingBitmap. Change state of this bitmap +void HighlighterForWx::init(BlinkingBitmap* blinking_bmp) +{ + invalidate(); + if (!Highlighter::init(!blinking_bmp)) + return; + + m_blinking_bitmap = blinking_bmp; + m_blinking_bitmap->activate(); +} + +void HighlighterForWx::invalidate() +{ + Highlighter::invalidate(); + + if (m_custom_ctrl && m_show_blink_ptr) { + *m_show_blink_ptr = false; + m_custom_ctrl->Refresh(); + m_show_blink_ptr = nullptr; + m_custom_ctrl = nullptr; + } + else if (m_blinking_bitmap) { + m_blinking_bitmap->invalidate(); + m_blinking_bitmap = nullptr; + } +} + +void HighlighterForWx::blink() +{ + if (m_custom_ctrl && m_show_blink_ptr) { + *m_show_blink_ptr = !*m_show_blink_ptr; + m_custom_ctrl->Refresh(); + } + else if (m_blinking_bitmap) + m_blinking_bitmap->blink(); + else + return; + + Highlighter::blink(); +} + +}// GUI +}//Slicer + |