| #ifndef _RIVE_DRAWABLE_HPP_ | |
| #define _RIVE_DRAWABLE_HPP_ | |
| #include "rive/generated/drawable_base.hpp" | |
| #include "rive/hit_info.hpp" | |
| #include "rive/renderer.hpp" | |
| #include "rive/clip_result.hpp" | |
| #include "rive/drawable_flag.hpp" | |
| #include <vector> | |
| namespace rive | |
| { | |
| class ClippingShape; | |
| class Artboard; | |
| class DrawRules; | |
| class Drawable : public DrawableBase | |
| { | |
| friend class Artboard; | |
| friend class StateMachineInstance; | |
| private: | |
| std::vector<ClippingShape*> m_ClippingShapes; | |
| /// Used exclusively by the artboard; | |
| DrawRules* flattenedDrawRules = nullptr; | |
| Drawable* prev = nullptr; | |
| Drawable* next = nullptr; | |
| public: | |
| BlendMode blendMode() const { return (BlendMode)blendModeValue(); } | |
| ClipResult applyClip(Renderer* renderer) const; | |
| virtual void draw(Renderer* renderer) = 0; | |
| virtual Core* hitTest(HitInfo*, const Mat2D&) = 0; | |
| void addClippingShape(ClippingShape* shape); | |
| inline const std::vector<ClippingShape*>& clippingShapes() const { return m_ClippingShapes; } | |
| inline bool isHidden() const | |
| { | |
| return (static_cast<DrawableFlag>(drawableFlags()) & DrawableFlag::Hidden) == | |
| DrawableFlag::Hidden || | |
| hasDirt(ComponentDirt::Collapsed); | |
| } | |
| inline bool isTargetOpaque() const | |
| { | |
| return (static_cast<DrawableFlag>(drawableFlags()) & DrawableFlag::Opaque) == | |
| DrawableFlag::Opaque; | |
| } | |
| StatusCode onAddedDirty(CoreContext* context) override; | |
| }; | |
| class ProxyDrawing | |
| { | |
| public: | |
| virtual void drawProxy(Renderer* renderer) = 0; | |
| }; | |
| class DrawableProxy : public Drawable | |
| { | |
| private: | |
| ProxyDrawing* m_proxyDrawing; | |
| public: | |
| DrawableProxy(ProxyDrawing* proxy) : m_proxyDrawing(proxy) {} | |
| void draw(Renderer* renderer) override { m_proxyDrawing->drawProxy(renderer); } | |
| Core* hitTest(HitInfo*, const Mat2D&) override { return nullptr; } | |
| }; | |
| } // namespace rive | |
| #endif |