1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-31 12:38:12 +00:00

GSlider: Highlight the knob when hovering it. :^)

This commit is contained in:
Andreas Kling 2019-04-30 00:47:46 +02:00
parent 55d7d4e3d8
commit 87c256a7d5
2 changed files with 20 additions and 1 deletions

View file

@ -50,7 +50,7 @@ void GSlider::paint_event(GPaintEvent& event)
track_rect.center_vertically_within(inner_rect()); track_rect.center_vertically_within(inner_rect());
StylePainter::paint_frame(painter, track_rect, FrameShape::Panel, FrameShadow::Sunken, 1); 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 Rect GSlider::knob_rect() const
@ -84,6 +84,7 @@ void GSlider::mousedown_event(GMouseEvent& event)
void GSlider::mousemove_event(GMouseEvent& event) void GSlider::mousemove_event(GMouseEvent& event)
{ {
set_knob_hovered(knob_rect().contains(event.position()));
if (m_dragging) { if (m_dragging) {
float delta = event.position().x() - m_drag_origin.x(); float delta = event.position().x() - m_drag_origin.x();
float scrubbable_range = inner_rect().width(); float scrubbable_range = inner_rect().width();
@ -104,3 +105,17 @@ void GSlider::mouseup_event(GMouseEvent& event)
return GWidget::mouseup_event(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());
}

View file

@ -28,12 +28,16 @@ protected:
virtual void mousedown_event(GMouseEvent&) override; virtual void mousedown_event(GMouseEvent&) override;
virtual void mousemove_event(GMouseEvent&) override; virtual void mousemove_event(GMouseEvent&) override;
virtual void mouseup_event(GMouseEvent&) override; virtual void mouseup_event(GMouseEvent&) override;
virtual void leave_event(CEvent&) override;
private: private:
void set_knob_hovered(bool);
int m_value { 0 }; int m_value { 0 };
int m_min { 0 }; int m_min { 0 };
int m_max { 100 }; int m_max { 100 };
bool m_knob_hovered { false };
bool m_dragging { false }; bool m_dragging { false };
int m_drag_origin_value { 0 }; int m_drag_origin_value { 0 };
Point m_drag_origin; Point m_drag_origin;