diff options
Diffstat (limited to 'src/ui/render/render_object.hpp')
-rw-r--r-- | src/ui/render/render_object.hpp | 236 |
1 files changed, 0 insertions, 236 deletions
diff --git a/src/ui/render/render_object.hpp b/src/ui/render/render_object.hpp index 4432636c..b6f9f13b 100644 --- a/src/ui/render/render_object.hpp +++ b/src/ui/render/render_object.hpp @@ -18,24 +18,9 @@ namespace cru::ui::render * It represents a painting action on a d2d render target. By * overriding "Draw" virtual method, it can customize its painting * action. - * - * Render object may have implicit children to form a tree. - * RenderObject class doesn't provide any method to access children. - * Instead any concrete render object manage their own child model - * and interface and optionally call Draw on children so when root - * call Draw descendants' Draw will be called recursively. - * - * Related render objects of a control are a subtree of the whole tree. - * So render objects can be composed easily to form a whole control. - * - * Render object may do no actual drawing but perform particular - * actions on render target. Like ClipRenderObject apply a clip on - * render target, MatrixRenderObject apply a matrix on render - * target. */ - struct IRenderHost : Interface { virtual void InvalidateRender() = 0; @@ -72,130 +57,6 @@ namespace cru::ui::render }; - // It is subclass duty to call child's Draw. - class SingleChildRenderObject : public RenderObject - { - protected: - SingleChildRenderObject() = default; - public: - SingleChildRenderObject(const SingleChildRenderObject& other) = delete; - SingleChildRenderObject(SingleChildRenderObject&& other) = delete; - SingleChildRenderObject& operator=(const SingleChildRenderObject& other) = delete; - SingleChildRenderObject& operator=(SingleChildRenderObject&& other) = delete; - ~SingleChildRenderObject(); - - RenderObject* GetChild() const - { - return child_; - } - - void SetChild(RenderObject* new_child); - - protected: - void OnRenderHostChanged(IRenderHost* old_render_host, IRenderHost* new_render_host) override; - - virtual void OnChildChange(RenderObject* old_child, RenderObject* new_object); - - private: - RenderObject* child_ = nullptr; - }; - - - class ClipRenderObject final : public SingleChildRenderObject - { - public: - explicit ClipRenderObject(Microsoft::WRL::ComPtr<ID2D1Geometry> clip_geometry = nullptr); - ClipRenderObject(const ClipRenderObject& other) = delete; - ClipRenderObject(ClipRenderObject&& other) = delete; - ClipRenderObject& operator=(const ClipRenderObject& other) = delete; - ClipRenderObject& operator=(ClipRenderObject&& other) = delete; - ~ClipRenderObject() = default; - - Microsoft::WRL::ComPtr<ID2D1Geometry> GetClipGeometry() const - { - return clip_geometry_; - } - void SetClipGeometry(Microsoft::WRL::ComPtr<ID2D1Geometry> new_clip_geometry); - - void Draw(ID2D1RenderTarget* render_target) override final; - - private: - Microsoft::WRL::ComPtr<ID2D1Geometry> clip_geometry_; - }; - - - class MatrixRenderObject: public SingleChildRenderObject - { - private: - static void ApplyAppendMatrix(ID2D1RenderTarget* render_target, const D2D1_MATRIX_3X2_F& matrix); - static void ApplySetMatrix(ID2D1RenderTarget* render_target, const D2D1_MATRIX_3X2_F& matrix); - - public: - using MatrixApplier = std::function<void(ID2D1RenderTarget*, const D2D1_MATRIX_3X2_F&)>; - - static const MatrixApplier append_applier; - static const MatrixApplier set_applier; - - explicit MatrixRenderObject(const D2D1_MATRIX_3X2_F& matrix = D2D1::Matrix3x2F::Identity(), - MatrixApplier applier = append_applier); - MatrixRenderObject(const MatrixRenderObject& other) = delete; - MatrixRenderObject(MatrixRenderObject&& other) = delete; - MatrixRenderObject& operator=(const MatrixRenderObject& other) = delete; - MatrixRenderObject& operator=(MatrixRenderObject&& other) = delete; - ~MatrixRenderObject() = default; - - D2D1_MATRIX_3X2_F GetMatrix() const - { - return matrix_; - } - - void SetMatrix(const D2D1_MATRIX_3X2_F& new_matrix); - - MatrixApplier GetMatrixApplier() const - { - return applier_; - } - - void SetMatrixApplier(MatrixApplier applier); - - void Draw(ID2D1RenderTarget* render_target) override final; - - private: - D2D1_MATRIX_3X2_F matrix_; - MatrixApplier applier_; - }; - - - class OffsetRenderObject : public MatrixRenderObject - { - public: - explicit OffsetRenderObject(const float offset_x = 0.0f, const float offset_y = 0.0f) - : MatrixRenderObject(D2D1::Matrix3x2F::Translation(offset_x, offset_y)), - offset_x_(offset_x), offset_y_(offset_y) - { - - } - - float GetOffsetX() const - { - return offset_x_; - } - - void SetOffsetX(float new_offset_x); - - float GetOffsetY() const - { - return offset_y_; - } - - void SetOffsetY(float new_offset_y); - - private: - float offset_x_; - float offset_y_; - }; - - class StrokeRenderObject : public virtual RenderObject { protected: @@ -342,101 +203,4 @@ namespace cru::ui::render private: DrawHandler draw_handler_{}; }; - - - class ContainerRenderObject : public RenderObject - { - public: - ContainerRenderObject() = default; - ContainerRenderObject(const ContainerRenderObject& other) = delete; - ContainerRenderObject& operator=(const ContainerRenderObject& other) = delete; - ContainerRenderObject(ContainerRenderObject&& other) = delete; - ContainerRenderObject& operator=(ContainerRenderObject&& other) = delete; - ~ContainerRenderObject(); - - const std::vector<RenderObject*>& GetChildren() const - { - return children_; - } - - RenderObject* GetAt(const int position) const - { - assert(position >= 0); - assert(position < static_cast<int>(children_.size())); - return children_.at(static_cast<std::vector<RenderObject*>::size_type>(position)); - } - - void AddChild(RenderObject* child); - - void AddChild(RenderObject* child, int position); - - void RemoveChild(int position); - - protected: - void Draw(ID2D1RenderTarget* render_target) override; - - private: - std::vector<RenderObject*> children_; - }; - - - - // Render object tree for a control. (RO for RenderObject) - // - // ControlRO (not a SingleChildRO because child is not changed) - // | - // MatrixRO (control transform, only matrix exposed) - // | - // ClipRO (control clip, only clip geometry exposed) - // | - // OffsetRO (border offset) - // | - // ContainerRO - // / | - // StrokeRO (border) OffsetRO (padding offset) - // / | \ - // / | \ - // / | \ - // / | \ - // / | \ - // / | \ - // ContainerRO (background) | ContainerRO (foreground, symmetrical to background) - // / \ | / \ - // FillRO CustomDrawHandlerRO | FillRO CustomDrawHandlerRO - // | - // OffsetRO (content offset) - // | - // ContainerRO (content) - // / | \ - // / | \ - // / | \ - // ContainerRO (control-define content ROs) | ContainerRO (child-control ROs) - // | - // CustomDrawHandlerRO (user-define drawing) - // - class ControlRenderObject : public RenderObject - { - public: - ControlRenderObject() = default; - ControlRenderObject(const ControlRenderObject& other) = delete; - ControlRenderObject(ControlRenderObject&& other) = delete; - ControlRenderObject& operator=(const ControlRenderObject& other) = delete; - ControlRenderObject& operator=(ControlRenderObject&& other) = delete; - ~ControlRenderObject() override = default; - - - MatrixRenderObject* GetControlTransformRenderObject() const; - ClipRenderObject* GetControlClipRenderObject() const; - - OffsetRenderObject* GetBorderOffsetRenderObject() const; - RoundedRectangleStrokeRenderObject* GetBorderRenderObject() const; - - OffsetRenderObject* GetPaddingOffsetRenderObject() const; - Microsoft::WRL::ComPtr<ID2D1Geometry> GetPaddingGeometry() const; - - Point GetContentOffset() const; - ContainerRenderObject* GetContentContainer() const; - - ContainerRenderObject* GetChildrenContainer() const; - }; } |