#ifdef THORVG_SUPPORT
#include <thorvg.h>
#endif
+#include <dali/devel-api/threading/mutex.h>
#include <dali/public-api/object/weak-handle.h>
+#include <dali/public-api/rendering/texture.h>
// INTERNAL INCLUDES
#include <dali/devel-api/adaptor-framework/canvas-renderer-drawable.h>
#include <dali/devel-api/adaptor-framework/canvas-renderer.h>
-#include <dali/devel-api/adaptor-framework/pixel-buffer.h>
#include <dali/internal/canvas-renderer/common/canvas-renderer-impl.h>
+#include <dali/internal/canvas-renderer/common/drawable-group-impl.h>
+#include <dali/devel-api/adaptor-framework/pixel-buffer.h>
namespace Dali
{
bool Commit() override;
/**
- * @copydoc Dali::CanvasRenderer::GetPixelBuffer()
+ * @copydoc Dali::CanvasRenderer::GetRasterizedTexture()
*/
- Devel::PixelBuffer GetPixelBuffer() override;
+ Dali::Texture GetRasterizedTexture() override;
/**
* @copydoc Dali::CanvasRenderer::AddDrawable()
bool AddDrawable(Dali::CanvasRenderer::Drawable& drawable) override;
/**
+ * @copydoc Dali::CanvasRenderer::IsCanvasChanged()
+ */
+ bool IsCanvasChanged() const override;
+
+ /**
+ * @copydoc Dali::CanvasRenderer::Rasterize()
+ */
+ bool Rasterize() override;
+
+ /**
+ * @copydoc Dali::CanvasRenderer::RemoveDrawable()
+ */
+ bool RemoveDrawable(Dali::CanvasRenderer::Drawable& drawable) override;
+
+ /**
+ * @copydoc Dali::CanvasRenderer::RemoveAllDrawables()
+ */
+ bool RemoveAllDrawables() override;
+
+ /**
* @copydoc Dali::CanvasRenderer::SetSize()
*/
- bool SetSize(const Vector2& size) override;
+ bool SetSize(Vector2 size) override;
/**
* @copydoc Dali::CanvasRenderer::GetSize()
*/
- const Vector2& GetSize() override;
+ Vector2 GetSize() const override;
+
+ /**
+ * @copydoc Dali::CanvasRenderer::SetViewBox()
+ */
+ bool SetViewBox(const Vector2& viewBox) override;
+
+ /**
+ * @copydoc Dali::CanvasRenderer::GetViewBox()
+ */
+ const Vector2& GetViewBox() override;
private:
CanvasRendererTizen() = delete;
*/
void MakeTargetBuffer(const Vector2& size);
-private:
- Devel::PixelBuffer mPixelBuffer;
+#ifdef THORVG_SUPPORT
+ /**
+ * @brief Get drawables changed status.
+ * If drawable is a type that can have child drawables, it is called recursively.
+ * @param[in] drawable The drawable object.
+ * @return Returns whether drawables have changed.
+ */
+ bool HaveDrawablesChanged(const Dali::CanvasRenderer::Drawable& drawable) const;
+ /**
+ * @brief Update drawables changed status.
+ * If drawable is a type that can have child drawables, it is called recursively.
+ * @param[in] drawable The drawable object.
+ * @param[in] changed The state of changed.
+ */
+ void UpdateDrawablesChanged(Dali::CanvasRenderer::Drawable& drawable, bool changed);
+
+ /**
+ * @brief Push drawable object to parent.
+ * If drawable is a type that can have child drawables, it is called recursively.
+ * @param[in] drawable The drawable object.
+ * @param[in] group The scene object of tvg that can be drawable group.
+ */
+ void PushDrawableToGroup(Dali::CanvasRenderer::Drawable& drawable, tvg::Scene* group);
+#endif
+
+private:
#ifdef THORVG_SUPPORT
+ Devel::PixelBuffer mPixelBuffer;
+ Dali::Texture mRasterizedTexture;
+ Dali::Mutex mMutex;
std::unique_ptr<tvg::SwCanvas> mTvgCanvas;
tvg::Scene* mTvgRoot;
#endif
- typedef std::vector<WeakHandle<Dali::CanvasRenderer::Drawable> > DrawableVector;
- typedef DrawableVector::iterator DrawableVectorIterator;
- DrawableVector mDrawables;
+ DrawableGroup::DrawableVector mDrawables;
Vector2 mSize;
Vector2 mViewBox;