aboutsummaryrefslogtreecommitdiff
path: root/include/cru/ui/render/ScrollBar.hpp
diff options
context:
space:
mode:
authorcrupest <crupest@outlook.com>2022-02-08 16:53:51 +0800
committercrupest <crupest@outlook.com>2022-02-08 16:53:51 +0800
commit74bb9cd27242b9320f99ff4d2b50c3051576cc14 (patch)
tree744bac5799c593d1d6f81e7b09581bea626f2cde /include/cru/ui/render/ScrollBar.hpp
parentb90c398de829d1ba5329651d75bae82f5e4085fe (diff)
downloadcru-74bb9cd27242b9320f99ff4d2b50c3051576cc14.tar.gz
cru-74bb9cd27242b9320f99ff4d2b50c3051576cc14.tar.bz2
cru-74bb9cd27242b9320f99ff4d2b50c3051576cc14.zip
...
Diffstat (limited to 'include/cru/ui/render/ScrollBar.hpp')
-rw-r--r--include/cru/ui/render/ScrollBar.hpp255
1 files changed, 0 insertions, 255 deletions
diff --git a/include/cru/ui/render/ScrollBar.hpp b/include/cru/ui/render/ScrollBar.hpp
deleted file mode 100644
index f1007d4d..00000000
--- a/include/cru/ui/render/ScrollBar.hpp
+++ /dev/null
@@ -1,255 +0,0 @@
-#pragma once
-#include "Base.hpp"
-#include "cru/common/Base.hpp"
-#include "cru/common/Event.hpp"
-#include "cru/platform/graphics/Base.hpp"
-#include "cru/platform/graphics/Brush.hpp"
-#include "cru/platform/graphics/Geometry.hpp"
-#include "cru/platform/graphics/Painter.hpp"
-#include "cru/platform/gui/Cursor.hpp"
-#include "cru/platform/gui/TimerHelper.hpp"
-#include "cru/platform/gui/UiApplication.hpp"
-#include "cru/ui/Base.hpp"
-#include "cru/ui/controls/Control.hpp"
-#include "cru/ui/helper/ClickDetector.hpp"
-
-#include <gsl/pointers>
-#include <memory>
-#include <optional>
-#include <unordered_map>
-
-namespace cru::ui::render {
-class ScrollRenderObject;
-
-enum class ScrollKind { Absolute, Relative, Page, Line };
-
-struct Scroll {
- Direction direction;
- ScrollKind kind;
- // For absolute, the new scroll position. Otherwise, offset.
- float value;
-};
-
-enum class ScrollBarAreaKind {
- UpArrow, // Line up
- DownArrow, // Line down
- UpSlot, // Page up
- DownSlot, // Page down
- Thumb
-};
-
-enum class ScrollBarBrushUsageKind { Arrow, ArrowBackground, Slot, Thumb };
-enum class ScrollBarBrushStateKind { Normal, Hover, Press, Disable };
-
-String CRU_UI_API GenerateScrollBarThemeColorKey(ScrollBarBrushUsageKind usage,
- ScrollBarBrushStateKind state);
-
-class CRU_UI_API ScrollBar : public Object {
- public:
- ScrollBar(gsl::not_null<ScrollRenderObject*> render_object,
- Direction direction);
-
- CRU_DELETE_COPY(ScrollBar)
- CRU_DELETE_MOVE(ScrollBar)
-
- ~ScrollBar() override;
-
- public:
- Direction GetDirection() const { return direction_; }
-
- bool IsEnabled() const { return is_enabled_; }
- void SetEnabled(bool value);
-
- bool IsExpanded() const { return is_expanded_; }
- void SetExpanded(bool value);
-
- void Draw(platform::graphics::IPainter* painter);
-
- IEvent<Scroll>* ScrollAttemptEvent() { return &scroll_attempt_event_; }
-
- void InstallHandlers(controls::Control* control);
- void UninstallHandlers() { InstallHandlers(nullptr); }
-
- gsl::not_null<std::shared_ptr<platform::graphics::IBrush>>
- GetCollapsedThumbBrush();
- // Brush could be nullptr to use the theme brush.
- void SetCollapsedThumbBrush(
- std::shared_ptr<platform::graphics::IBrush> brush);
- gsl::not_null<std::shared_ptr<platform::graphics::IBrush>> GetBrush(
- ScrollBarBrushUsageKind usage, ScrollBarBrushStateKind state);
- // Brush could be nullptr to use the theme brush.
- void SetBrush(ScrollBarBrushUsageKind usage, ScrollBarBrushStateKind state,
- std::shared_ptr<platform::graphics::IBrush> brush);
-
- protected:
- void OnDraw(platform::graphics::IPainter* painter, bool expand);
-
- virtual void DrawUpArrow(
- platform::graphics::IPainter* painter, const Rect& area,
- gsl::not_null<platform::graphics::IBrush*> arrow_brush,
- gsl::not_null<platform::graphics::IBrush*> background_brush) = 0;
- virtual void DrawDownArrow(
- platform::graphics::IPainter* painter, const Rect& area,
- gsl::not_null<platform::graphics::IBrush*> arrow_brush,
- gsl::not_null<platform::graphics::IBrush*> background_brush) = 0;
-
- std::optional<ScrollBarAreaKind> ExpandedHitTest(const Point& point);
-
- virtual bool IsShowBar() = 0;
-
- virtual std::optional<Rect> GetExpandedAreaRect(
- ScrollBarAreaKind area_kind) = 0;
- virtual std::optional<Rect> GetCollapsedTriggerExpandAreaRect() = 0;
- virtual std::optional<Rect> GetCollapsedThumbRect() = 0;
-
- virtual float CalculateNewScrollPosition(const Rect& thumb_original_rect,
- const Point& mouse_offset) = 0;
-
- virtual bool CanScrollUp() = 0;
- virtual bool CanScrollDown() = 0;
-
- private:
- void SetCursor();
- void RestoreCursor();
-
- void BeginAutoCollapseTimer();
- void StopAutoCollapseTimer();
-
- void OnMouseLeave();
-
- ScrollBarBrushStateKind GetState(ScrollBarAreaKind area);
-
- protected:
- gsl::not_null<ScrollRenderObject*> render_object_;
-
- std::unique_ptr<platform::graphics::IGeometry> arrow_geometry_;
-
- private:
- Direction direction_;
-
- bool is_enabled_ = true;
-
- bool is_expanded_ = false;
-
- std::shared_ptr<platform::graphics::IBrush> collapsed_thumb_brush_;
- std::unordered_map<
- ScrollBarBrushUsageKind,
- std::unordered_map<ScrollBarBrushStateKind,
- std::shared_ptr<platform::graphics::IBrush>>>
- brushes_;
-
- Rect move_thumb_thumb_original_rect_;
- std::optional<Point> move_thumb_start_;
-
- std::optional<ScrollBarAreaKind> mouse_hover_;
- std::optional<ScrollBarAreaKind> mouse_press_;
-
- EventRevokerListGuard event_guard_;
-
- Event<Scroll> scroll_attempt_event_;
-
- bool cursor_overrided_ = false;
-
- platform::gui::TimerAutoCanceler auto_collapse_timer_canceler_;
-};
-
-class CRU_UI_API HorizontalScrollBar : public ScrollBar {
- public:
- explicit HorizontalScrollBar(
- gsl::not_null<ScrollRenderObject*> render_object);
-
- CRU_DELETE_COPY(HorizontalScrollBar)
- CRU_DELETE_MOVE(HorizontalScrollBar)
-
- ~HorizontalScrollBar() override = default;
-
- protected:
- void DrawUpArrow(
- platform::graphics::IPainter* painter, const Rect& area,
- gsl::not_null<platform::graphics::IBrush*> arrow_brush,
- gsl::not_null<platform::graphics::IBrush*> background_brush) override;
- void DrawDownArrow(
- platform::graphics::IPainter* painter, const Rect& area,
- gsl::not_null<platform::graphics::IBrush*> arrow_brush,
- gsl::not_null<platform::graphics::IBrush*> background_brush) override;
-
- bool IsShowBar() override;
-
- std::optional<Rect> GetExpandedAreaRect(ScrollBarAreaKind area_kind) override;
- std::optional<Rect> GetCollapsedTriggerExpandAreaRect() override;
- std::optional<Rect> GetCollapsedThumbRect() override;
-
- float CalculateNewScrollPosition(const Rect& thumb_original_rect,
- const Point& mouse_offset) override;
-
- bool CanScrollUp() override;
- bool CanScrollDown() override;
-};
-
-class CRU_UI_API VerticalScrollBar : public ScrollBar {
- public:
- explicit VerticalScrollBar(gsl::not_null<ScrollRenderObject*> render_object);
-
- CRU_DELETE_COPY(VerticalScrollBar)
- CRU_DELETE_MOVE(VerticalScrollBar)
-
- ~VerticalScrollBar() override = default;
-
- protected:
- void DrawUpArrow(
- platform::graphics::IPainter* painter, const Rect& area,
- gsl::not_null<platform::graphics::IBrush*> arrow_brush,
- gsl::not_null<platform::graphics::IBrush*> background_brush) override;
- void DrawDownArrow(
- platform::graphics::IPainter* painter, const Rect& area,
- gsl::not_null<platform::graphics::IBrush*> arrow_brush,
- gsl::not_null<platform::graphics::IBrush*> background_brush) override;
-
- bool IsShowBar() override;
-
- std::optional<Rect> GetExpandedAreaRect(ScrollBarAreaKind area_kind) override;
- std::optional<Rect> GetCollapsedTriggerExpandAreaRect() override;
- std::optional<Rect> GetCollapsedThumbRect() override;
-
- float CalculateNewScrollPosition(const Rect& thumb_original_rect,
- const Point& mouse_offset) override;
-
- bool CanScrollUp() override;
- bool CanScrollDown() override;
-};
-
-// A delegate to draw scrollbar and register related events.
-class CRU_UI_API ScrollBarDelegate : public Object {
- public:
- explicit ScrollBarDelegate(gsl::not_null<ScrollRenderObject*> render_object);
-
- CRU_DELETE_COPY(ScrollBarDelegate)
- CRU_DELETE_MOVE(ScrollBarDelegate)
-
- ~ScrollBarDelegate() override = default;
-
- public:
- bool IsHorizontalBarEnabled() const { return horizontal_bar_.IsEnabled(); }
- void SetHorizontalBarEnabled(bool value) {
- horizontal_bar_.SetEnabled(value);
- }
-
- bool IsVerticalBarEnabled() const { return horizontal_bar_.IsEnabled(); }
- void SetVerticalBarEnabled(bool value) { horizontal_bar_.SetEnabled(value); }
-
- IEvent<Scroll>* ScrollAttemptEvent() { return &scroll_attempt_event_; }
-
- void DrawScrollBar(platform::graphics::IPainter* painter);
-
- void InstallHandlers(controls::Control* control);
- void UninstallHandlers() { InstallHandlers(nullptr); }
-
- private:
- gsl::not_null<ScrollRenderObject*> render_object_;
-
- HorizontalScrollBar horizontal_bar_;
- VerticalScrollBar vertical_bar_;
-
- Event<Scroll> scroll_attempt_event_;
-};
-} // namespace cru::ui::render