diff --git a/LibGUI/GSlider.cpp b/LibGUI/GSlider.cpp index 3aacd0e28c..f136b9c83a 100644 --- a/LibGUI/GSlider.cpp +++ b/LibGUI/GSlider.cpp @@ -50,7 +50,7 @@ void GSlider::paint_event(GPaintEvent& event) track_rect.center_vertically_within(inner_rect()); StylePainter::paint_frame(painter, track_rect, FrameShape::Panel, FrameShadow::Sunken, 1); - StylePainter::paint_button(painter, knob_rect(), ButtonStyle::Normal, false, false); + StylePainter::paint_button(painter, knob_rect(), ButtonStyle::Normal, false, m_knob_hovered); } Rect GSlider::knob_rect() const @@ -84,6 +84,7 @@ void GSlider::mousedown_event(GMouseEvent& event) void GSlider::mousemove_event(GMouseEvent& event) { + set_knob_hovered(knob_rect().contains(event.position())); if (m_dragging) { float delta = event.position().x() - m_drag_origin.x(); float scrubbable_range = inner_rect().width(); @@ -104,3 +105,17 @@ void GSlider::mouseup_event(GMouseEvent& event) return GWidget::mouseup_event(event); } + +void GSlider::leave_event(CEvent& event) +{ + set_knob_hovered(false); + GWidget::leave_event(event); +} + +void GSlider::set_knob_hovered(bool hovered) +{ + if (m_knob_hovered == hovered) + return; + m_knob_hovered = hovered; + update(knob_rect()); +} diff --git a/LibGUI/GSlider.h b/LibGUI/GSlider.h index 020c856925..6fd4a9a791 100644 --- a/LibGUI/GSlider.h +++ b/LibGUI/GSlider.h @@ -28,12 +28,16 @@ protected: virtual void mousedown_event(GMouseEvent&) override; virtual void mousemove_event(GMouseEvent&) override; virtual void mouseup_event(GMouseEvent&) override; + virtual void leave_event(CEvent&) override; private: + void set_knob_hovered(bool); + int m_value { 0 }; int m_min { 0 }; int m_max { 100 }; + bool m_knob_hovered { false }; bool m_dragging { false }; int m_drag_origin_value { 0 }; Point m_drag_origin;