GScrollBar.h 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. #pragma once
  2. #include <LibGUI/GWidget.h>
  3. #include <AK/Function.h>
  4. class GScrollBar final : public GWidget {
  5. public:
  6. explicit GScrollBar(Orientation, GWidget* parent);
  7. virtual ~GScrollBar() override;
  8. Orientation orientation() const { return m_orientation; }
  9. int value() const { return m_value; }
  10. int min() const { return m_min; }
  11. int max() const { return m_max; }
  12. int step() const { return m_step; }
  13. int big_step() const { return m_big_step; }
  14. void set_range(int min, int max);
  15. void set_value(int value);
  16. void set_step(int step) { m_step = step; }
  17. void set_big_step(int big_step) { m_big_step = big_step; }
  18. bool has_scrubber() const;
  19. Function<void(int)> on_change;
  20. private:
  21. virtual void paint_event(GPaintEvent&) override;
  22. virtual void mousedown_event(GMouseEvent&) override;
  23. virtual void mouseup_event(GMouseEvent&) override;
  24. virtual void mousemove_event(GMouseEvent&) override;
  25. virtual const char* class_name() const override { return "GScrollBar"; }
  26. int button_size() const { return orientation() == Orientation::Vertical ? width() : height(); }
  27. Rect up_button_rect() const;
  28. Rect down_button_rect() const;
  29. Rect upper_gutter_rect() const;
  30. Rect lower_gutter_rect() const;
  31. Rect scrubber_rect() const;
  32. int scrubbable_range_in_pixels() const;
  33. int m_min { 0 };
  34. int m_max { 0 };
  35. int m_value { 0 };
  36. int m_step { 1 };
  37. int m_big_step { 5 };
  38. bool m_scrubbing { false };
  39. int m_scrub_start_value { 0 };
  40. Point m_scrub_origin;
  41. Orientation m_orientation { Orientation::Vertical };
  42. };