Merge "[ATSPI] Apply multi-window to ATSPI" into devel/master
[platform/core/uifw/dali-adaptor.git] / dali / internal / canvas-renderer / tizen / canvas-renderer-impl-tizen.cpp
index e0a9078..7daa7c1 100644 (file)
 #include <dali/public-api/object/type-registry.h>
 
 // INTERNAL INCLUDES
-#include <dali/devel-api/adaptor-framework/pixel-buffer.h>
 #include <dali/internal/canvas-renderer/common/drawable-group-impl.h>
 #include <dali/internal/canvas-renderer/common/drawable-impl.h>
 #include <dali/internal/canvas-renderer/common/gradient-impl.h>
 #include <dali/internal/canvas-renderer/common/shape-impl.h>
-#include <dali/internal/imaging/common/pixel-buffer-impl.h>
 
 namespace Dali
 {
@@ -54,10 +52,13 @@ CanvasRendererTizen* CanvasRendererTizen::New(const Vector2& viewBox)
 }
 
 CanvasRendererTizen::CanvasRendererTizen(const Vector2& viewBox)
-: mPixelBuffer(nullptr),
+:
 #ifdef THORVG_SUPPORT
+  mRasterizedTexture(),
+  mMutex(),
   mTvgCanvas(nullptr),
   mTvgRoot(nullptr),
+  mNativeImageQueue(nullptr),
 #endif
   mSize(Vector2::ZERO),
   mViewBox(Vector2::ZERO),
@@ -123,11 +124,8 @@ bool CanvasRendererTizen::Commit()
   }
   else
   {
-    if(!mPixelBuffer || !mPixelBuffer.GetBuffer())
-    {
-      MakeTargetBuffer(mSize);
-      mChanged = false;
-    }
+    MakeTargetBuffer(mSize);
+    mChanged = false;
   }
 
   if(mTvgCanvas->clear() != tvg::Result::Success)
@@ -162,9 +160,24 @@ bool CanvasRendererTizen::Commit()
 #endif
 }
 
-Devel::PixelBuffer CanvasRendererTizen::GetPixelBuffer()
+Dali::Texture CanvasRendererTizen::GetRasterizedTexture()
 {
-  return mPixelBuffer;
+#ifdef THORVG_SUPPORT
+  if(mNativeImageQueue)
+  {
+    if(!mRasterizedTexture)
+    {
+      mRasterizedTexture = Dali::Texture::New(*mNativeImageQueue);
+    }
+    return mRasterizedTexture;
+  }
+  else
+  {
+    return Dali::Texture();
+  }
+#else
+  return Dali::Texture();
+#endif
 }
 
 bool CanvasRendererTizen::AddDrawable(Dali::CanvasRenderer::Drawable& drawable)
@@ -311,14 +324,34 @@ bool CanvasRendererTizen::Rasterize()
 #ifdef THORVG_SUPPORT
   Mutex::ScopedLock lock(mMutex);
 
-  if(mTvgCanvas->draw() != tvg::Result::Success)
+  if(mNativeImageQueue && mNativeImageQueue->CanDequeueBuffer())
+  {
+    uint32_t width, height, stride;
+    uint8_t* buffer = mNativeImageQueue->DequeueBuffer(width, height, stride);
+    if(!buffer)
+    {
+      DALI_LOG_ERROR("Pixel buffer create to fail [%p]\n", this);
+      return false;
+    }
+
+    mTvgCanvas->target(reinterpret_cast<uint32_t*>(buffer), stride / 4, width, height, tvg::SwCanvas::ARGB8888);
+
+    if(mTvgCanvas->draw() != tvg::Result::Success)
+    {
+      DALI_LOG_ERROR("ThorVG Draw fail [%p]\n", this);
+      mNativeImageQueue->EnqueueBuffer(buffer);
+      return false;
+    }
+
+    mTvgCanvas->sync();
+
+    mNativeImageQueue->EnqueueBuffer(buffer);
+  }
+  else
   {
-    DALI_LOG_ERROR("ThorVG Draw fail [%p]\n", this);
     return false;
   }
 
-  mTvgCanvas->sync();
-
   return true;
 #else
   return false;
@@ -407,18 +440,14 @@ const Vector2& CanvasRendererTizen::GetViewBox()
 void CanvasRendererTizen::MakeTargetBuffer(const Vector2& size)
 {
 #ifdef THORVG_SUPPORT
-  mPixelBuffer = Devel::PixelBuffer::New(size.width, size.height, Dali::Pixel::RGBA8888);
-
-  unsigned char* pBuffer;
-  pBuffer = mPixelBuffer.GetBuffer();
-
-  if(!pBuffer)
+  if(!mNativeImageQueue)
   {
-    DALI_LOG_ERROR("Pixel buffer create to fail [%p]\n", this);
-    return;
+    mNativeImageQueue = Dali::NativeImageSourceQueue::New(size.width, size.height, Dali::NativeImageSourceQueue::ColorFormat::RGBA8888);
+  }
+  else
+  {
+    mNativeImageQueue->SetSize(static_cast<uint32_t>(size.width), static_cast<uint32_t>(size.height));
   }
-
-  mTvgCanvas->target(reinterpret_cast<uint32_t*>(pBuffer), size.width, size.width, size.height, tvg::SwCanvas::ABGR8888);
 #endif
 }