| #ifndef _RIVE_SHAPE_PAINT_HPP_ | |
| #define _RIVE_SHAPE_PAINT_HPP_ | |
| #include "rive/generated/shapes/paint/shape_paint_base.hpp" | |
| #include "rive/renderer.hpp" | |
| #include "rive/shapes/paint/blend_mode.hpp" | |
| #include "rive/shapes/paint/shape_paint_mutator.hpp" | |
| #include "rive/shapes/path_space.hpp" | |
| namespace rive | |
| { | |
| class RenderPaint; | |
| class ShapePaintMutator; | |
| class ShapePaint : public ShapePaintBase | |
| { | |
| protected: | |
| rcp<RenderPaint> m_RenderPaint; | |
| ShapePaintMutator* m_PaintMutator = nullptr; | |
| public: | |
| StatusCode onAddedClean(CoreContext* context) override; | |
| float renderOpacity() const { return m_PaintMutator->renderOpacity(); } | |
| void renderOpacity(float value) { m_PaintMutator->renderOpacity(value); } | |
| void blendMode(BlendMode value); | |
| /// Creates a RenderPaint object for the provided ShapePaintMutator*. | |
| /// This should be called only once as the ShapePaint manages the | |
| /// lifecycle of the RenderPaint. | |
| virtual RenderPaint* initRenderPaint(ShapePaintMutator* mutator); | |
| virtual PathSpace pathSpace() const = 0; | |
| void draw(Renderer* renderer, CommandPath* path) { draw(renderer, path, renderPaint()); } | |
| virtual void draw(Renderer* renderer, CommandPath* path, RenderPaint* paint) = 0; | |
| RenderPaint* renderPaint() { return m_RenderPaint.get(); } | |
| /// Get the component that represents the ShapePaintMutator for this | |
| /// ShapePaint. It'll be one of SolidColor, LinearGradient, or | |
| /// RadialGradient. | |
| Component* paint() const { return m_PaintMutator->component(); } | |
| bool isTranslucent() const { return !this->isVisible() || m_PaintMutator->isTranslucent(); } | |
| /// Apply this ShapePaint to an external RenderPaint and optionally modulate | |
| /// the opacity by opacityModifer. | |
| virtual void applyTo(RenderPaint* renderPaint, float opacityModifier) const = 0; | |
| }; | |
| } // namespace rive | |
| #endif |