[4.0] Add ImageVisualShaderFactory
[platform/core/uifw/dali-toolkit.git] / dali-toolkit / internal / visuals / visual-factory-impl.cpp
index 90bb937..2fc963b 100755 (executable)
@@ -1,5 +1,5 @@
  /*
- * Copyright (c) 2017 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2018 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.
@@ -45,6 +45,7 @@
 #include <dali-toolkit/internal/visuals/visual-factory-cache.h>
 #include <dali-toolkit/internal/visuals/visual-url.h>
 #include <dali-toolkit/internal/visuals/visual-string-constants.h>
+#include <dali-toolkit/internal/visuals/image-visual-shader-factory.h>
 
 namespace Dali
 {
@@ -71,7 +72,9 @@ DALI_TYPE_REGISTRATION_END()
 } // namespace
 
 VisualFactory::VisualFactory( bool debugEnabled )
-: mDebugEnabled( debugEnabled ),
+: mFactoryCache(),
+  mImageVisualShaderFactory(),
+  mDebugEnabled( debugEnabled ),
   mPreMultiplyOnLoad( true )
 {
 }
@@ -132,17 +135,17 @@ Toolkit::Visual::Base VisualFactory::CreateVisual( const Property::Map& property
               }
               case VisualUrl::SVG:
               {
-                visualPtr = SvgVisual::New( GetFactoryCache(), visualUrl, propertyMap );
+                visualPtr = SvgVisual::New( GetFactoryCache(), GetImageVisualShaderFactory(), visualUrl, propertyMap );
                 break;
               }
               case VisualUrl::GIF:
               {
-                visualPtr = AnimatedImageVisual::New( GetFactoryCache(), visualUrl, propertyMap );
+                visualPtr = AnimatedImageVisual::New( GetFactoryCache(), GetImageVisualShaderFactory(), visualUrl, propertyMap );
                 break;
               }
               case VisualUrl::REGULAR_IMAGE:
               {
-                visualPtr = ImageVisual::New( GetFactoryCache(), visualUrl, propertyMap );
+                visualPtr = ImageVisual::New( GetFactoryCache(), GetImageVisualShaderFactory(), visualUrl, propertyMap );
                 break;
               }
             }
@@ -153,7 +156,7 @@ Toolkit::Visual::Base VisualFactory::CreateVisual( const Property::Map& property
           Property::Array* array = imageURLValue->GetArray();
           if( array )
           {
-            visualPtr = AnimatedImageVisual::New( GetFactoryCache(), *array, propertyMap );
+            visualPtr = AnimatedImageVisual::New( GetFactoryCache(), GetImageVisualShaderFactory(), *array, propertyMap );
           }
         }
       }
@@ -201,7 +204,7 @@ Toolkit::Visual::Base VisualFactory::CreateVisual( const Property::Map& property
       std::string imageUrl;
       if( imageURLValue && imageURLValue->Get( imageUrl ) )
       {
-        visualPtr = SvgVisual::New( GetFactoryCache(), imageUrl, propertyMap );
+        visualPtr = SvgVisual::New( GetFactoryCache(), GetImageVisualShaderFactory(), imageUrl, propertyMap );
       }
       break;
     }
@@ -214,14 +217,14 @@ Toolkit::Visual::Base VisualFactory::CreateVisual( const Property::Map& property
       {
         if( imageURLValue->Get( imageUrl ) )
         {
-          visualPtr = AnimatedImageVisual::New( GetFactoryCache(), imageUrl, propertyMap );
+          visualPtr = AnimatedImageVisual::New( GetFactoryCache(), GetImageVisualShaderFactory(), imageUrl, propertyMap );
         }
         else
         {
           Property::Array* array = imageURLValue->GetArray();
           if( array )
           {
-            visualPtr = AnimatedImageVisual::New( GetFactoryCache(), *array, propertyMap );
+            visualPtr = AnimatedImageVisual::New( GetFactoryCache(), GetImageVisualShaderFactory(), *array, propertyMap );
           }
         }
       }
@@ -262,7 +265,7 @@ Toolkit::Visual::Base VisualFactory::CreateVisual( const Image& image )
     }
     else
     {
-      visualPtr = ImageVisual::New(GetFactoryCache(), image );
+      visualPtr = ImageVisual::New(GetFactoryCache(), GetImageVisualShaderFactory(), image );
     }
   }
 
@@ -292,17 +295,17 @@ Toolkit::Visual::Base VisualFactory::CreateVisual( const std::string& url, Image
       }
       case VisualUrl::SVG:
       {
-        visualPtr = SvgVisual::New( GetFactoryCache(), visualUrl );
+        visualPtr = SvgVisual::New( GetFactoryCache(), GetImageVisualShaderFactory(), visualUrl );
         break;
       }
       case VisualUrl::GIF:
       {
-        visualPtr = AnimatedImageVisual::New( GetFactoryCache(), visualUrl );
+        visualPtr = AnimatedImageVisual::New( GetFactoryCache(), GetImageVisualShaderFactory(), visualUrl );
         break;
       }
       case VisualUrl::REGULAR_IMAGE:
       {
-        visualPtr = ImageVisual::New(GetFactoryCache(), visualUrl, size );
+        visualPtr = ImageVisual::New(GetFactoryCache(), GetImageVisualShaderFactory(), visualUrl, size );
         break;
       }
     }
@@ -345,6 +348,15 @@ Internal::VisualFactoryCache& VisualFactory::GetFactoryCache()
   return *mFactoryCache;
 }
 
+ImageVisualShaderFactory& VisualFactory::GetImageVisualShaderFactory()
+{
+  if( !mImageVisualShaderFactory )
+  {
+    mImageVisualShaderFactory = std::unique_ptr< ImageVisualShaderFactory >( new ImageVisualShaderFactory() );
+  }
+  return *mImageVisualShaderFactory;
+}
+
 } // namespace Internal
 
 } // namespace Toolkit