1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 18:07:34 +00:00

LibGUI: Animated smooth scroll interpolation

This commit is contained in:
ForLoveOfCats 2022-03-07 14:19:35 -05:00 committed by Andreas Kling
parent 86c0961240
commit c204885a94
3 changed files with 75 additions and 7 deletions

View file

@ -21,6 +21,16 @@ public:
bool has_scrubber() const;
virtual void set_value(int, AllowCallback = AllowCallback::Yes) override;
void set_target_value(int);
virtual void increase_slider_by(int delta) override { set_target_value(m_target_value + delta); }
virtual void decrease_slider_by(int delta) override { set_target_value(m_target_value - delta); }
virtual void increase_slider_by_page_steps(int page_steps) override { set_target_value(m_target_value + page_step() * page_steps); }
virtual void decrease_slider_by_page_steps(int page_steps) override { set_target_value(m_target_value - page_step() * page_steps); }
virtual void increase_slider_by_steps(int steps) override { set_target_value(m_target_value + step() * steps); }
virtual void decrease_slider_by_steps(int steps) override { set_target_value(m_target_value - step() * steps); }
enum Component {
None,
DecrementButton,
@ -66,6 +76,12 @@ private:
Component component_at_position(const Gfx::IntPoint&);
void update_animated_scroll();
int m_target_value { 0 };
int m_start_value { 0 };
double m_animation_time_elapsed { 0 };
int m_scrub_start_value { 0 };
Gfx::IntPoint m_scrub_origin;
@ -74,6 +90,7 @@ private:
Gfx::IntPoint m_last_mouse_position;
RefPtr<Core::Timer> m_automatic_scrolling_timer;
RefPtr<Core::Timer> m_animated_scrolling_timer;
};
}