blob: 3ee59a813224c593ce36e3fde88eb16cff885e84 [file]
/*
* Copyright 2022 Rive
*/
#ifndef _RIVE_FACTORY_HPP_
#define _RIVE_FACTORY_HPP_
#include "rive/renderer.hpp"
#include "rive/render_text.hpp"
#include "rive/refcnt.hpp"
#include "rive/span.hpp"
#include "rive/math/aabb.hpp"
#include "rive/math/mat2d.hpp"
#include <cmath>
#include <stdio.h>
#include <cstdint>
namespace rive {
class Factory {
public:
Factory() {}
virtual ~Factory() {}
virtual rcp<RenderBuffer> makeBufferU16(Span<const uint16_t>) = 0;
virtual rcp<RenderBuffer> makeBufferU32(Span<const uint32_t>) = 0;
virtual rcp<RenderBuffer> makeBufferF32(Span<const float>) = 0;
virtual rcp<RenderShader> makeLinearGradient(float sx,
float sy,
float ex,
float ey,
const ColorInt colors[], // [count]
const float stops[], // [count]
size_t count) = 0;
virtual rcp<RenderShader> makeRadialGradient(float cx,
float cy,
float radius,
const ColorInt colors[], // [count]
const float stops[], // [count]
size_t count) = 0;
// Returns a full-formed RenderPath -- can be treated as immutable
virtual std::unique_ptr<RenderPath> makeRenderPath(Span<const Vec2D> points,
Span<const PathVerb> verbs,
FillRule) = 0;
// Deprecated -- working to make RenderPath's immutable
virtual std::unique_ptr<RenderPath> makeEmptyRenderPath() = 0;
virtual std::unique_ptr<RenderPaint> makeRenderPaint() = 0;
virtual std::unique_ptr<RenderImage> decodeImage(Span<const uint8_t>) = 0;
virtual rcp<RenderFont> decodeFont(Span<const uint8_t>) { return nullptr; }
// Non-virtual helpers
std::unique_ptr<RenderPath> makeRenderPath(const AABB&);
std::unique_ptr<RenderPath> makeRenderPath(const RawPath&, FillRule);
};
} // namespace rive
#endif