blob: 690cccaed4f977430db6d2a6c09066b57adab64f [file] [log] [blame]
#ifndef _RIVE_SHAPE_PAINT_CONTAINER_HPP_
#define _RIVE_SHAPE_PAINT_CONTAINER_HPP_
#include "rive/refcnt.hpp"
#include "rive/shapes/path_space.hpp"
#include <vector>
namespace rive
{
class Artboard;
class ShapePaint;
class Component;
class CommandPath;
class ShapePaintContainer
{
friend class ShapePaint;
protected:
// Need this to access our artboard. We are treated as a mixin, either
// as a Shape or Artboard, so both of those will override this.
virtual Artboard* getArtboard() = 0;
PathSpace m_DefaultPathSpace = PathSpace::Neither;
std::vector<ShapePaint*> m_ShapePaints;
void addPaint(ShapePaint* paint);
// TODO: void draw(Renderer* renderer, PathComposer& composer);
public:
static ShapePaintContainer* from(Component* component);
virtual ~ShapePaintContainer() {}
PathSpace pathSpace() const;
void invalidateStrokeEffects();
rcp<CommandPath> makeCommandPath(PathSpace space);
void propagateOpacity(float opacity);
#ifdef TESTING
const std::vector<ShapePaint*>& shapePaints() const { return m_ShapePaints; }
#endif
};
} // namespace rive
#endif