Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/prusa3d/PrusaSlicer.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/slic3r/GUI/wxExtensions.cpp')
-rw-r--r--src/slic3r/GUI/wxExtensions.cpp98
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
+