GScrollableWidget.h 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  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. Point to_content_position(const Point& widget_position) const;
  31. Point to_widget_position(const Point& content_position) const;
  32. protected:
  33. explicit GScrollableWidget(GWidget* parent);
  34. virtual void custom_layout() override;
  35. virtual void resize_event(GResizeEvent&) override;
  36. virtual void mousewheel_event(GMouseEvent&) override;
  37. virtual void did_scroll() {}
  38. void set_content_size(const Size&);
  39. void set_size_occupied_by_fixed_elements(const Size&);
  40. private:
  41. void update_scrollbar_ranges();
  42. RefPtr<GScrollBar> m_vertical_scrollbar;
  43. RefPtr<GScrollBar> m_horizontal_scrollbar;
  44. RefPtr<GWidget> m_corner_widget;
  45. Size m_content_size;
  46. Size m_size_occupied_by_fixed_elements;
  47. bool m_scrollbars_enabled { true };
  48. bool m_should_hide_unnecessary_scrollbars { false };
  49. };