GScrollableWidget.h 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  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. protected:
  29. explicit GScrollableWidget(GWidget* parent);
  30. virtual void resize_event(GResizeEvent&) override;
  31. virtual void mousewheel_event(GMouseEvent&) override;
  32. virtual void did_scroll() {}
  33. void set_content_size(const Size&);
  34. void set_size_occupied_by_fixed_elements(const Size&);
  35. private:
  36. void update_scrollbar_ranges();
  37. GScrollBar* m_vertical_scrollbar { nullptr };
  38. GScrollBar* m_horizontal_scrollbar { nullptr };
  39. GWidget* m_corner_widget { nullptr };
  40. Size m_content_size;
  41. Size m_size_occupied_by_fixed_elements;
  42. bool m_scrollbars_enabled { true };
  43. };