diff options
author | crupest <crupest@outlook.com> | 2018-11-24 22:39:50 +0800 |
---|---|---|
committer | crupest <crupest@outlook.com> | 2018-11-24 22:39:50 +0800 |
commit | abc776a9ea02a564dfe44141e51e4cbc87a7a3a1 (patch) | |
tree | 67c11e09856799b8fa40a3f2e124a37e7538115f /src/ui/controls/scroll_control.hpp | |
parent | d4658bfd97e1770e7ab4de356b3fd8c0d1999493 (diff) | |
download | cru-abc776a9ea02a564dfe44141e51e4cbc87a7a3a1.tar.gz cru-abc776a9ea02a564dfe44141e51e4cbc87a7a3a1.tar.bz2 cru-abc776a9ea02a564dfe44141e51e4cbc87a7a3a1.zip |
Develop layout for ScrollView
Diffstat (limited to 'src/ui/controls/scroll_control.hpp')
-rw-r--r-- | src/ui/controls/scroll_control.hpp | 85 |
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; + }; +} |