diff options
-rw-r--r-- | Libraries/LibGUI/Splitter.cpp | 21 | ||||
-rw-r--r-- | Libraries/LibGUI/Splitter.h | 3 |
2 files changed, 19 insertions, 5 deletions
diff --git a/Libraries/LibGUI/Splitter.cpp b/Libraries/LibGUI/Splitter.cpp index c532ce926b..665f84d1b9 100644 --- a/Libraries/LibGUI/Splitter.cpp +++ b/Libraries/LibGUI/Splitter.cpp @@ -58,15 +58,25 @@ void Splitter::resize_event(ResizeEvent& event) m_grabbable_rect = {}; } -void Splitter::enter_event(Core::Event&) +void Splitter::override_cursor(bool do_override) { - window()->set_override_cursor(m_orientation == Orientation::Horizontal ? StandardCursor::ResizeColumn : StandardCursor::ResizeRow); + if (do_override) { + if (!m_overriding_cursor) { + window()->set_override_cursor(m_orientation == Orientation::Horizontal ? StandardCursor::ResizeColumn : StandardCursor::ResizeRow); + m_overriding_cursor = true; + } + } else { + if (m_overriding_cursor) { + window()->set_override_cursor(StandardCursor::None); + m_overriding_cursor = false; + } + } } void Splitter::leave_event(Core::Event&) { if (!m_resizing) - window()->set_override_cursor(StandardCursor::None); + override_cursor(false); if (!m_grabbable_rect.is_empty()) { m_grabbable_rect = {}; update(); @@ -134,9 +144,12 @@ void Splitter::mousemove_event(MouseEvent& event) if (!m_resizing) { Widget* first { nullptr }; Widget* second { nullptr }; - if (!get_resize_candidates_at(event.position(), first, second)) + if (!get_resize_candidates_at(event.position(), first, second)) { + override_cursor(false); return; + } recompute_grabbable_rect(*first, *second); + override_cursor(m_grabbable_rect.contains(event.position())); return; } auto delta = event.position() - m_resize_origin; diff --git a/Libraries/LibGUI/Splitter.h b/Libraries/LibGUI/Splitter.h index 85f937fae7..d8a97023bb 100644 --- a/Libraries/LibGUI/Splitter.h +++ b/Libraries/LibGUI/Splitter.h @@ -44,7 +44,6 @@ protected: virtual void mousedown_event(MouseEvent&) override; virtual void mousemove_event(MouseEvent&) override; virtual void mouseup_event(MouseEvent&) override; - virtual void enter_event(Core::Event&) override; virtual void leave_event(Core::Event&) override; virtual void did_layout() override; @@ -52,9 +51,11 @@ protected: private: void recompute_grabbable_rect(const Widget&, const Widget&); bool get_resize_candidates_at(const Gfx::IntPoint&, Widget*&, Widget*&); + void override_cursor(bool do_override); Gfx::Orientation m_orientation; bool m_resizing { false }; + bool m_overriding_cursor { false }; Gfx::IntPoint m_resize_origin; WeakPtr<Widget> m_first_resizee; WeakPtr<Widget> m_second_resizee; |