GScrollableWidget.h 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. #pragma once
  2. #include <LibGUI/GFrame.h>
  3. class GScrollBar;
  4. class GScrollableWidget : public GFrame {
  5. C_OBJECT(GScrollableWidget)
  6. public:
  7. virtual ~GScrollableWidget() override;
  8. Size content_size() const { return m_content_size; }
  9. int content_width() const { return m_content_size.width(); }
  10. int content_height() const { return m_content_size.height(); }
  11. Rect visible_content_rect() const;
  12. Rect widget_inner_rect() const;
  13. void scroll_into_view(const Rect&, Orientation);
  14. void scroll_into_view(const Rect&, bool scroll_horizontally, bool scroll_vertically);
  15. void set_scrollbars_enabled(bool);
  16. bool is_scrollbars_enabled() const { return m_scrollbars_enabled; }
  17. Size available_size() const;
  18. GScrollBar& vertical_scrollbar() { return *m_vertical_scrollbar; }
  19. const GScrollBar& vertical_scrollbar() const { return *m_vertical_scrollbar; }
  20. GScrollBar& horizontal_scrollbar() { return *m_horizontal_scrollbar; }
  21. const GScrollBar& horizontal_scrollbar() const { return *m_horizontal_scrollbar; }
  22. GWidget& corner_widget() { return *m_corner_widget; }
  23. const GWidget& corner_widget() const { return *m_corner_widget; }
  24. void scroll_to_top();
  25. void scroll_to_bottom();
  26. int width_occupied_by_vertical_scrollbar() const;
  27. int height_occupied_by_horizontal_scrollbar() const;
  28. void set_should_hide_unnecessary_scrollbars(bool b) { m_should_hide_unnecessary_scrollbars = b; }
  29. bool should_hide_unnecessary_scrollbars() const { return m_should_hide_unnecessary_scrollbars; }
  30. protected:
  31. explicit GScrollableWidget(GWidget* parent);
  32. virtual void custom_layout() override;
  33. virtual void resize_event(GResizeEvent&) override;
  34. virtual void mousewheel_event(GMouseEvent&) override;
  35. virtual void did_scroll() {}
  36. void set_content_size(const Size&);
  37. void set_size_occupied_by_fixed_elements(const Size&);
  38. private:
  39. void update_scrollbar_ranges();
  40. ObjectPtr<GScrollBar> m_vertical_scrollbar;
  41. ObjectPtr<GScrollBar> m_horizontal_scrollbar;
  42. ObjectPtr<GWidget> m_corner_widget;
  43. Size m_content_size;
  44. Size m_size_occupied_by_fixed_elements;
  45. bool m_scrollbars_enabled { true };
  46. bool m_should_hide_unnecessary_scrollbars { false };
  47. };