Allow to use premultiplied external texture
[platform/core/uifw/dali-toolkit.git] / dali-toolkit / internal / image-loader / image-url-impl.cpp
index 055738f..31dc6fc 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2021 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2023 Samsung Electronics Co., Ltd.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  */
 
 // CLASS HEADER
-#include <dali-toolkit/devel-api/image-loader/texture-manager.h>
 #include <dali-toolkit/internal/image-loader/image-url-impl.h>
 
+// INTERNAL INCLUDES
+#include <dali-toolkit/devel-api/image-loader/texture-manager.h>
+#include <dali-toolkit/internal/texture-manager/texture-manager-impl.h>
+#include <dali-toolkit/internal/visuals/visual-factory-impl.h>
+#include <dali-toolkit/internal/visuals/visual-url.h>
+
 namespace Dali
 {
 namespace Toolkit
 {
 namespace Internal
 {
-ImageUrl::ImageUrl(Texture& texture)
+ImageUrl::ImageUrl(Texture& texture, bool preMultiplied)
+{
+  mUrl = Dali::Toolkit::TextureManager::AddTexture(texture, preMultiplied);
+}
+
+ImageUrl::ImageUrl(const EncodedImageBuffer& encodedImageBuffer)
 : mUrl("")
 {
-  mUrl = Dali::Toolkit::TextureManager::AddTexture(texture);
+  auto visualFactory = Dali::Toolkit::VisualFactory::Get();
+  if(visualFactory)
+  {
+    auto& textureManager = GetImplementation(visualFactory).GetTextureManager();
+    mUrl                 = textureManager.AddEncodedImageBuffer(encodedImageBuffer);
+  }
 }
 
 ImageUrl::~ImageUrl()
 {
-  Dali::Toolkit::TextureManager::RemoveTexture(mUrl);
+  if(mUrl.size() > 0)
+  {
+    auto visualFactory = Dali::Toolkit::VisualFactory::Get();
+    if(visualFactory)
+    {
+      auto& textureManager = GetImplementation(visualFactory).GetTextureManager();
+      if(VisualUrl::TEXTURE == VisualUrl::GetProtocolType(mUrl))
+      {
+        textureManager.RemoveExternalTexture(mUrl);
+      }
+      else if(VisualUrl::BUFFER == VisualUrl::GetProtocolType(mUrl))
+      {
+        textureManager.RemoveEncodedImageBuffer(mUrl);
+      }
+    }
+  }
+}
+
+ImageUrlPtr ImageUrl::New(Texture& texture, bool preMultiplied)
+{
+  ImageUrlPtr imageUrlPtr = new ImageUrl(texture, preMultiplied);
+  return imageUrlPtr;
 }
 
-ImageUrlPtr ImageUrl::New(Texture& texture)
+ImageUrlPtr ImageUrl::New(const EncodedImageBuffer& encodedImageBuffer)
 {
-  ImageUrlPtr imageUrlPtr = new ImageUrl(texture);
+  ImageUrlPtr imageUrlPtr = new ImageUrl(encodedImageBuffer);
   return imageUrlPtr;
 }