aboutsummaryrefslogtreecommitdiff
path: root/src/ui/controls/scroll_control.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/ui/controls/scroll_control.hpp')
-rw-r--r--src/ui/controls/scroll_control.hpp85
1 files changed, 85 insertions, 0 deletions
diff --git a/src/ui/controls/scroll_control.hpp b/src/ui/controls/scroll_control.hpp
new file mode 100644
index 00000000..c39b18f4
--- /dev/null
+++ b/src/ui/controls/scroll_control.hpp
@@ -0,0 +1,85 @@
+#pragma once
+
+#include "ui/control.hpp"
+
+namespace cru::ui::controls
+{
+ // Done: OnMeasureContent
+ // Done: OnLayoutContent
+ // TODO: HitTest
+ // TODO: Draw
+ // TODO: ScrollBar
+ // TODO: MouseEvent
+ class ScrollControl : public Control
+ {
+ public:
+ enum class ScrollBarVisibility
+ {
+ None,
+ Auto,
+ Always
+ };
+
+ protected:
+ explicit ScrollControl(bool container);
+ public:
+ ScrollControl(const ScrollControl& other) = delete;
+ ScrollControl(ScrollControl&& other) = delete;
+ ScrollControl& operator=(const ScrollControl& other) = delete;
+ ScrollControl& operator=(ScrollControl&& other) = delete;
+ ~ScrollControl() override;
+
+
+ bool IsHorizontalScrollEnabled() const
+ {
+ return horizontal_scroll_enabled_;
+ }
+
+ void SetHorizontalScrollEnabled(bool enable);
+
+ bool IsVerticalScrollEnabled() const
+ {
+ return vertical_scroll_enabled_;
+ }
+
+ void SetVerticalScrollEnabled(bool enable);
+
+
+ ScrollBarVisibility GetHorizontalScrollBarVisibility() const;
+ void SetHorizontalScrollBarVisibility(ScrollBarVisibility visibility);
+ ScrollBarVisibility GetVerticalScrollBarVisibility() const;
+ void SetVerticalScrollBarVisibility(ScrollBarVisibility visibility);
+
+ Control* HitTest(const Point& point) override final;
+
+ protected:
+ float GetViewWidth() const
+ {
+ return view_width_;
+ }
+
+ float GetViewHeight() const
+ {
+ return view_height_;
+ }
+
+ void SetViewWidth(float length);
+ void SetViewHeight(float length);
+
+ Size OnMeasureContent(const Size& available_size) override final;
+ void OnLayoutContent(const Rect& rect) override final;
+
+ private:
+ bool horizontal_scroll_enabled_ = true;
+ bool vertical_scroll_enabled_ = true;
+
+ ScrollBarVisibility horizontal_scroll_bar_visibility_ = ScrollBarVisibility::Auto;
+ ScrollBarVisibility vertical_scroll_bar_visibility_ = ScrollBarVisibility::Auto;
+
+ float offset_x_ = 0.0f;
+ float offset_y_ = 0.0f;
+
+ float view_width_ = 0.0f;
+ float view_height_ = 0.0f;
+ };
+}