summaryrefslogtreecommitdiffstats
path: root/thirdparty/thorvg/src/renderer/tvgPaint.h
diff options
context:
space:
mode:
Diffstat (limited to 'thirdparty/thorvg/src/renderer/tvgPaint.h')
-rw-r--r--thirdparty/thorvg/src/renderer/tvgPaint.h97
1 files changed, 14 insertions, 83 deletions
diff --git a/thirdparty/thorvg/src/renderer/tvgPaint.h b/thirdparty/thorvg/src/renderer/tvgPaint.h
index 0ee07fedff..f4721f8e15 100644
--- a/thirdparty/thorvg/src/renderer/tvgPaint.h
+++ b/thirdparty/thorvg/src/renderer/tvgPaint.h
@@ -38,19 +38,6 @@ namespace tvg
virtual void begin() = 0;
};
- struct StrategyMethod
- {
- virtual ~StrategyMethod() {}
-
- virtual bool dispose(RenderMethod& renderer) = 0; //return true if the deletion is allowed.
- virtual void* update(RenderMethod& renderer, const RenderTransform* transform, Array<RenderData>& clips, uint8_t opacity, RenderUpdateFlag pFlag, bool clipper) = 0; //Return engine data if it has.
- virtual bool render(RenderMethod& renderer) = 0;
- virtual bool bounds(float* x, float* y, float* w, float* h, bool stroking) = 0;
- virtual RenderRegion bounds(RenderMethod& renderer) const = 0;
- virtual Paint* duplicate() = 0;
- virtual Iterator* iterator() = 0;
- };
-
struct Composite
{
Paint* target;
@@ -60,7 +47,7 @@ namespace tvg
struct Paint::Impl
{
- StrategyMethod* smethod = nullptr;
+ Paint* paint = nullptr;
RenderTransform* rTransform = nullptr;
Composite* compData = nullptr;
BlendMethod blendMethod = BlendMethod::Normal; //uint8_t
@@ -70,13 +57,16 @@ namespace tvg
uint8_t opacity = 255;
uint8_t refCnt = 0;
+ Impl(Paint* pnt) : paint(pnt)
+ {
+ }
+
~Impl()
{
if (compData) {
- delete(compData->target);
+ if (P(compData->target)->unref() == 0) delete(compData->target);
free(compData);
}
- delete(smethod);
delete(rTransform);
}
@@ -92,11 +82,6 @@ namespace tvg
return (--refCnt);
}
- void method(StrategyMethod* method)
- {
- smethod = method;
- }
-
bool transform(const Matrix& m)
{
if (!rTransform) {
@@ -119,29 +104,16 @@ namespace tvg
return nullptr;
}
- RenderRegion bounds(RenderMethod& renderer) const
- {
- return smethod->bounds(renderer);
- }
-
- bool dispose(RenderMethod& renderer)
- {
- if (compData) compData->target->pImpl->dispose(renderer);
- return smethod->dispose(renderer);
- }
-
- Iterator* iterator()
- {
- return smethod->iterator();
- }
-
bool composite(Paint* source, Paint* target, CompositeMethod method)
{
//Invalid case
if ((!target && method != CompositeMethod::None) || (target && method == CompositeMethod::None)) return false;
if (compData) {
- delete(compData->target);
+ P(compData->target)->unref();
+ if ((compData->target != target) && P(compData->target)->refCnt == 0) {
+ delete(compData->target);
+ }
//Reset scenario
if (!target && method == CompositeMethod::None) {
free(compData);
@@ -152,12 +124,16 @@ namespace tvg
if (!target && method == CompositeMethod::None) return true;
compData = static_cast<Composite*>(calloc(1, sizeof(Composite)));
}
+ P(target)->ref();
compData->target = target;
compData->source = source;
compData->method = method;
return true;
}
+ RenderRegion bounds(RenderMethod& renderer) const;
+ bool dispose(RenderMethod& renderer);
+ Iterator* iterator();
bool rotate(float degree);
bool scale(float factor);
bool translate(float x, float y);
@@ -166,51 +142,6 @@ namespace tvg
bool render(RenderMethod& renderer);
Paint* duplicate();
};
-
-
- template<class T>
- struct PaintMethod : StrategyMethod
- {
- T* inst = nullptr;
-
- PaintMethod(T* _inst) : inst(_inst) {}
- ~PaintMethod() {}
-
- bool bounds(float* x, float* y, float* w, float* h, bool stroking) override
- {
- return inst->bounds(x, y, w, h, stroking);
- }
-
- RenderRegion bounds(RenderMethod& renderer) const override
- {
- return inst->bounds(renderer);
- }
-
- bool dispose(RenderMethod& renderer) override
- {
- return inst->dispose(renderer);
- }
-
- RenderData update(RenderMethod& renderer, const RenderTransform* transform, Array<RenderData>& clips, uint8_t opacity, RenderUpdateFlag renderFlag, bool clipper) override
- {
- return inst->update(renderer, transform, clips, opacity, renderFlag, clipper);
- }
-
- bool render(RenderMethod& renderer) override
- {
- return inst->render(renderer);
- }
-
- Paint* duplicate() override
- {
- return inst->duplicate();
- }
-
- Iterator* iterator() override
- {
- return inst->iterator();
- }
- };
}
#endif //_TVG_PAINT_H_