[dali_1.1.45] Merge branch 'devel/master' 12/82112/1
authorAdeel Kazmi <adeel.kazmi@samsung.com>
Fri, 29 Jul 2016 16:12:41 +0000 (17:12 +0100)
committerAdeel Kazmi <adeel.kazmi@samsung.com>
Fri, 29 Jul 2016 16:12:41 +0000 (17:12 +0100)
Change-Id: I896472fa55ff1cfca81e05d5cb214ba459f78368

158 files changed:
automated-tests/resources/Cube-Points-Only.obj [new file with mode: 0644]
automated-tests/src/dali-toolkit/CMakeLists.txt
automated-tests/src/dali-toolkit/dali-toolkit-test-utils/test-gl-abstraction.h
automated-tests/src/dali-toolkit/dali-toolkit-test-utils/test-trace-call-stack.h
automated-tests/src/dali-toolkit/utc-Dali-Control.cpp
automated-tests/src/dali-toolkit/utc-Dali-ControlRenderer.cpp [deleted file]
automated-tests/src/dali-toolkit/utc-Dali-DebugRenderer.cpp [deleted file]
automated-tests/src/dali-toolkit/utc-Dali-DebugVisual.cpp [new file with mode: 0644]
automated-tests/src/dali-toolkit/utc-Dali-ImageView.cpp
automated-tests/src/dali-toolkit/utc-Dali-ShaderEffects.cpp
automated-tests/src/dali-toolkit/utc-Dali-Slider.cpp
automated-tests/src/dali-toolkit/utc-Dali-ToolBar.cpp
automated-tests/src/dali-toolkit/utc-Dali-Visual.cpp [new file with mode: 0644]
automated-tests/src/dali-toolkit/utc-Dali-VisualFactory.cpp [moved from automated-tests/src/dali-toolkit/utc-Dali-RendererFactory.cpp with 53% similarity]
build/tizen/dali-toolkit/Makefile.am
dali-toolkit/dali-toolkit.h
dali-toolkit/devel-api/controls/renderer-factory/renderer-factory.h [deleted file]
dali-toolkit/devel-api/file.list
dali-toolkit/devel-api/shader-effects/alpha-discard-effect.h
dali-toolkit/devel-api/shader-effects/dissolve-effect.h
dali-toolkit/devel-api/shader-effects/distance-field-effect.h
dali-toolkit/devel-api/shader-effects/image-region-effect.h
dali-toolkit/devel-api/shader-effects/motion-blur-effect.h
dali-toolkit/devel-api/shader-effects/motion-stretch-effect.h
dali-toolkit/devel-api/visual-factory/visual-base.cpp [moved from dali-toolkit/devel-api/controls/renderer-factory/control-renderer.cpp with 60% similarity]
dali-toolkit/devel-api/visual-factory/visual-base.h [moved from dali-toolkit/devel-api/controls/renderer-factory/control-renderer.h with 51% similarity]
dali-toolkit/devel-api/visual-factory/visual-factory.cpp [moved from dali-toolkit/devel-api/controls/renderer-factory/renderer-factory.cpp with 50% similarity]
dali-toolkit/devel-api/visual-factory/visual-factory.h [new file with mode: 0644]
dali-toolkit/internal/controls/bloom-view/bloom-view-impl.cpp
dali-toolkit/internal/controls/bubble-effect/color-adjuster.h
dali-toolkit/internal/controls/buttons/button-impl.cpp
dali-toolkit/internal/controls/effects-view/effects-view-impl.cpp
dali-toolkit/internal/controls/effects-view/effects-view-impl.h
dali-toolkit/internal/controls/gaussian-blur-view/gaussian-blur-view-impl.cpp
dali-toolkit/internal/controls/image-view/image-view-impl.cpp
dali-toolkit/internal/controls/image-view/image-view-impl.h
dali-toolkit/internal/controls/magnifier/magnifier-impl.cpp
dali-toolkit/internal/controls/model3d-view/model3d-view-impl.cpp
dali-toolkit/internal/controls/model3d-view/obj-loader.cpp
dali-toolkit/internal/controls/model3d-view/obj-loader.h
dali-toolkit/internal/controls/page-turn-view/page-turn-book-spine-effect.h
dali-toolkit/internal/controls/page-turn-view/page-turn-effect.cpp
dali-toolkit/internal/controls/page-turn-view/page-turn-view-impl.cpp
dali-toolkit/internal/controls/renderers/control-renderer-data-impl.cpp [deleted file]
dali-toolkit/internal/controls/renderers/renderer-factory-impl.cpp [deleted file]
dali-toolkit/internal/controls/renderers/renderer-factory-impl.h [deleted file]
dali-toolkit/internal/controls/renderers/renderer-string-constants.cpp [deleted file]
dali-toolkit/internal/controls/renderers/renderer-string-constants.h [deleted file]
dali-toolkit/internal/controls/shadow-view/shadow-view-impl.cpp
dali-toolkit/internal/controls/shadow-view/shadow-view-impl.h
dali-toolkit/internal/controls/super-blur-view/super-blur-view-impl.cpp
dali-toolkit/internal/controls/super-blur-view/super-blur-view-impl.h
dali-toolkit/internal/controls/text-controls/text-editor-impl.cpp
dali-toolkit/internal/controls/text-controls/text-field-impl.cpp
dali-toolkit/internal/controls/video-view/video-view-impl.cpp
dali-toolkit/internal/controls/video-view/video-view-impl.h
dali-toolkit/internal/file.list
dali-toolkit/internal/filters/blur-two-pass-filter.cpp
dali-toolkit/internal/filters/emboss-filter.cpp
dali-toolkit/internal/filters/emboss-filter.h
dali-toolkit/internal/filters/spread-filter.cpp
dali-toolkit/internal/text/rendering/vector-based/glyphy-shader/glyphy-shader.cpp
dali-toolkit/internal/text/text-scroller.cpp
dali-toolkit/internal/transition-effects/cube-transition-effect-impl.cpp
dali-toolkit/internal/visuals/border/border-visual.cpp [moved from dali-toolkit/internal/controls/renderers/border/border-renderer.cpp with 74% similarity]
dali-toolkit/internal/visuals/border/border-visual.h [moved from dali-toolkit/internal/controls/renderers/border/border-renderer.h with 75% similarity]
dali-toolkit/internal/visuals/color/color-visual.cpp [moved from dali-toolkit/internal/controls/renderers/color/color-renderer.cpp with 57% similarity]
dali-toolkit/internal/visuals/color/color-visual.h [moved from dali-toolkit/internal/controls/renderers/color/color-renderer.h with 68% similarity]
dali-toolkit/internal/visuals/debug/debug-visual.cpp [moved from dali-toolkit/internal/controls/renderers/debug/debug-renderer.cpp with 74% similarity]
dali-toolkit/internal/visuals/debug/debug-visual.h [moved from dali-toolkit/internal/controls/renderers/debug/debug-renderer.h with 65% similarity]
dali-toolkit/internal/visuals/gradient/gradient-visual.cpp [moved from dali-toolkit/internal/controls/renderers/gradient/gradient-renderer.cpp with 61% similarity]
dali-toolkit/internal/visuals/gradient/gradient-visual.h [moved from dali-toolkit/internal/controls/renderers/gradient/gradient-renderer.h with 78% similarity]
dali-toolkit/internal/visuals/gradient/gradient.cpp [moved from dali-toolkit/internal/controls/renderers/gradient/gradient.cpp with 90% similarity]
dali-toolkit/internal/visuals/gradient/gradient.h [moved from dali-toolkit/internal/controls/renderers/gradient/gradient.h with 77% similarity]
dali-toolkit/internal/visuals/gradient/linear-gradient.cpp [moved from dali-toolkit/internal/controls/renderers/gradient/linear-gradient.cpp with 100% similarity]
dali-toolkit/internal/visuals/gradient/linear-gradient.h [moved from dali-toolkit/internal/controls/renderers/gradient/linear-gradient.h with 90% similarity]
dali-toolkit/internal/visuals/gradient/radial-gradient.cpp [moved from dali-toolkit/internal/controls/renderers/gradient/radial-gradient.cpp with 100% similarity]
dali-toolkit/internal/visuals/gradient/radial-gradient.h [moved from dali-toolkit/internal/controls/renderers/gradient/radial-gradient.h with 90% similarity]
dali-toolkit/internal/visuals/image-atlas-manager.cpp [moved from dali-toolkit/internal/controls/renderers/image-atlas-manager.cpp with 100% similarity]
dali-toolkit/internal/visuals/image-atlas-manager.h [moved from dali-toolkit/internal/controls/renderers/image-atlas-manager.h with 98% similarity]
dali-toolkit/internal/visuals/image/image-visual.cpp [moved from dali-toolkit/internal/controls/renderers/image/image-renderer.cpp with 67% similarity]
dali-toolkit/internal/visuals/image/image-visual.h [moved from dali-toolkit/internal/controls/renderers/image/image-renderer.h with 80% similarity]
dali-toolkit/internal/visuals/mesh/mesh-visual.cpp [moved from dali-toolkit/internal/controls/renderers/mesh/mesh-renderer.cpp with 57% similarity]
dali-toolkit/internal/visuals/mesh/mesh-visual.h [moved from dali-toolkit/internal/controls/renderers/mesh/mesh-renderer.h with 62% similarity]
dali-toolkit/internal/visuals/npatch/npatch-visual.cpp [moved from dali-toolkit/internal/controls/renderers/npatch/npatch-renderer.cpp with 86% similarity]
dali-toolkit/internal/visuals/npatch/npatch-visual.h [moved from dali-toolkit/internal/controls/renderers/npatch/npatch-renderer.h with 79% similarity]
dali-toolkit/internal/visuals/primitive/primitive-visual.cpp [moved from dali-toolkit/internal/controls/renderers/primitive/primitive-renderer.cpp with 80% similarity]
dali-toolkit/internal/visuals/primitive/primitive-visual.h [moved from dali-toolkit/internal/controls/renderers/primitive/primitive-renderer.h with 90% similarity]
dali-toolkit/internal/visuals/svg/svg-rasterize-thread.cpp [moved from dali-toolkit/internal/controls/renderers/svg/svg-rasterize-thread.cpp with 91% similarity]
dali-toolkit/internal/visuals/svg/svg-rasterize-thread.h [moved from dali-toolkit/internal/controls/renderers/svg/svg-rasterize-thread.h with 90% similarity]
dali-toolkit/internal/visuals/svg/svg-visual.cpp [moved from dali-toolkit/internal/controls/renderers/svg/svg-renderer.cpp with 75% similarity]
dali-toolkit/internal/visuals/svg/svg-visual.h [moved from dali-toolkit/internal/controls/renderers/svg/svg-renderer.h with 69% similarity]
dali-toolkit/internal/visuals/visual-base-data-impl.cpp [new file with mode: 0644]
dali-toolkit/internal/visuals/visual-base-data-impl.h [moved from dali-toolkit/internal/controls/renderers/control-renderer-data-impl.h with 79% similarity]
dali-toolkit/internal/visuals/visual-base-impl.cpp [moved from dali-toolkit/internal/controls/renderers/control-renderer-impl.cpp with 59% similarity]
dali-toolkit/internal/visuals/visual-base-impl.h [moved from dali-toolkit/internal/controls/renderers/control-renderer-impl.h with 59% similarity]
dali-toolkit/internal/visuals/visual-factory-cache.cpp [moved from dali-toolkit/internal/controls/renderers/renderer-factory-cache.cpp with 78% similarity]
dali-toolkit/internal/visuals/visual-factory-cache.h [moved from dali-toolkit/internal/controls/renderers/renderer-factory-cache.h with 91% similarity]
dali-toolkit/internal/visuals/visual-factory-impl.cpp [new file with mode: 0644]
dali-toolkit/internal/visuals/visual-factory-impl.h [new file with mode: 0644]
dali-toolkit/internal/visuals/visual-string-constants.cpp [new file with mode: 0644]
dali-toolkit/internal/visuals/visual-string-constants.h [new file with mode: 0644]
dali-toolkit/public-api/controls/control-impl.cpp
dali-toolkit/public-api/dali-toolkit-version.cpp
dali-toolkit/public-api/file.list
dali-toolkit/public-api/toolkit-property-index-ranges.h [new file with mode: 0644]
dali-toolkit/public-api/visuals/border-visual-properties.h [new file with mode: 0644]
dali-toolkit/public-api/visuals/color-visual-properties.h [new file with mode: 0644]
dali-toolkit/public-api/visuals/gradient-visual-properties.h [new file with mode: 0644]
dali-toolkit/public-api/visuals/image-visual-properties.h [new file with mode: 0644]
dali-toolkit/public-api/visuals/mesh-visual-properties.h [new file with mode: 0644]
dali-toolkit/public-api/visuals/primitive-visual-properties.h [new file with mode: 0644]
dali-toolkit/public-api/visuals/visual-properties.h [new file with mode: 0644]
dali-toolkit/styles/480x800/dali-toolkit-default-theme.json
dali-toolkit/styles/720x1280/dali-toolkit-default-theme.json
doc/images/dali-modules.png [new file with mode: 0755]
docs/content/example-code/properties.cpp
docs/content/images/debug-visual/debug-blocks.png [moved from docs/content/images/debug-renderer/debug-blocks.png with 100% similarity]
docs/content/images/visuals/bevelled-cube-high.png [moved from docs/content/images/renderers/bevelled-cube-high.png with 100% similarity]
docs/content/images/visuals/bevelled-cube-low.png [moved from docs/content/images/renderers/bevelled-cube-low.png with 100% similarity]
docs/content/images/visuals/border-visual.png [moved from docs/content/images/renderers/border-renderer.png with 100% similarity]
docs/content/images/visuals/color-visual.png [moved from docs/content/images/renderers/color-renderer.png with 100% similarity]
docs/content/images/visuals/cone.png [moved from docs/content/images/renderers/cone.png with 100% similarity]
docs/content/images/visuals/conical-frustrum.png [moved from docs/content/images/renderers/conical-frustrum.png with 100% similarity]
docs/content/images/visuals/cube.png [moved from docs/content/images/renderers/cube.png with 100% similarity]
docs/content/images/visuals/cylinder.png [moved from docs/content/images/renderers/cylinder.png with 100% similarity]
docs/content/images/visuals/image-visual.png [moved from docs/content/images/renderers/image-renderer.png with 100% similarity]
docs/content/images/visuals/linear-gradient-visual.png [moved from docs/content/images/renderers/linear-gradient-renderer.png with 100% similarity]
docs/content/images/visuals/mesh-visual.png [moved from docs/content/images/renderers/mesh-renderer.png with 100% similarity]
docs/content/images/visuals/n-patch-visual.png [moved from docs/content/images/renderers/n-patch-renderer.png with 100% similarity]
docs/content/images/visuals/octahedron.png [moved from docs/content/images/renderers/octahedron.png with 100% similarity]
docs/content/images/visuals/radial-gradient-visual.png [moved from docs/content/images/renderers/radial-gradient-renderer.png with 100% similarity]
docs/content/images/visuals/slices.png [moved from docs/content/images/renderers/slices.png with 100% similarity]
docs/content/images/visuals/sphere.png [moved from docs/content/images/renderers/sphere.png with 100% similarity]
docs/content/images/visuals/stacks.png [moved from docs/content/images/renderers/stacks.png with 100% similarity]
docs/content/images/visuals/svg-visual.svg [moved from docs/content/images/renderers/svg-renderer.svg with 100% similarity]
docs/content/main.md
docs/content/programming-guide/background.h
docs/content/programming-guide/image-view.h
docs/content/programming-guide/properties.h
docs/content/programming-guide/shader-intro.h
docs/content/shared-javascript-and-cpp-documentation/control-renderers.md [deleted file]
docs/content/shared-javascript-and-cpp-documentation/creating-custom-controls.md
docs/content/shared-javascript-and-cpp-documentation/debug-renderer.md [deleted file]
docs/content/shared-javascript-and-cpp-documentation/debug-visual.md [new file with mode: 0644]
docs/content/shared-javascript-and-cpp-documentation/visuals.md [new file with mode: 0644]
node-addon/examples/line-mesh.js
node-addon/examples/point-mesh.js
node-addon/examples/scripts/item-template.json
node-addon/item-template.json
packaging/dali-toolkit.spec
plugins/dali-script-v8/docs/content/animation.js
plugins/dali-script-v8/docs/content/image-view.js
plugins/dali-script-v8/docs/content/item-factory.js
plugins/dali-script-v8/src/rendering/geometry-api.cpp
plugins/dali-script-v8/src/rendering/geometry-api.h
plugins/dali-script-v8/src/rendering/geometry-wrapper.cpp
plugins/dali-script-v8/src/rendering/shader-api.cpp

diff --git a/automated-tests/resources/Cube-Points-Only.obj b/automated-tests/resources/Cube-Points-Only.obj
new file mode 100644 (file)
index 0000000..b5fd755
--- /dev/null
@@ -0,0 +1,23 @@
+g cube
+
+v  0.0  0.0  0.0
+v  0.0  0.0  1.0
+v  0.0  1.0  0.0
+v  0.0  1.0  1.0
+v  1.0  0.0  0.0
+v  1.0  0.0  1.0
+v  1.0  1.0  0.0
+v  1.0  1.0  1.0
+
+f  1  7  5
+f  1  3  7
+f  1  4  3
+f  1  2  4
+f  3  8  7
+f  3  4  8
+f  5  7  8
+f  5  8  6
+f  1  5  6
+f  1  6  2
+f  2  6  8
+f  2  8  4
index d6aa2fb..0db0538 100644 (file)
@@ -48,9 +48,9 @@ SET(TC_SOURCES
    utc-Dali-SuperBlurView.cpp
    utc-Dali-Toolkit.cpp
    utc-Dali-Model3dView.cpp
-   utc-Dali-ControlRenderer.cpp
-   utc-Dali-RendererFactory.cpp
-   utc-Dali-DebugRenderer.cpp
+   utc-Dali-Visual.cpp
+   utc-Dali-VisualFactory.cpp
+   utc-Dali-DebugVisual.cpp
    utc-Dali-ImageAtlas.cpp
    utc-Dali-VideoView.cpp
 )
index da94586..1f55977 100644 (file)
@@ -277,10 +277,21 @@ public:
 
   inline void ClearStencil(GLint s)
   {
+    std::stringstream out;
+    out << s;
+
+    TraceCallStack::NamedParams namedParams;
+    namedParams["s"] = ToString( s );
+
+    mStencilFunctionTrace.PushCall( "ClearStencil", out.str(), namedParams );
   }
 
   inline void ColorMask(GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha)
   {
+    mColorMaskParams.red = red;
+    mColorMaskParams.green = green;
+    mColorMaskParams.blue = blue;
+    mColorMaskParams.alpha = alpha;
   }
 
   inline void CompileShader(GLuint shader)
@@ -959,26 +970,79 @@ public:
 
   inline void StencilFunc(GLenum func, GLint ref, GLuint mask)
   {
+    std::stringstream out;
+    out << func << ", " << ref << ", " << mask;
+
+    TraceCallStack::NamedParams namedParams;
+    namedParams["func"] = ToString( func );
+    namedParams["ref"] = ToString( ref );
+    namedParams["mask"] = ToString( mask );
+
+    mStencilFunctionTrace.PushCall( "StencilFunc", out.str(), namedParams );
   }
 
   inline void StencilFuncSeparate(GLenum face, GLenum func, GLint ref, GLuint mask)
   {
+    std::stringstream out;
+    out << face << ", " << func << ", " << ref << ", " << mask;
+
+    TraceCallStack::NamedParams namedParams;
+    namedParams["face"] = ToString( face );
+    namedParams["func"] = ToString( func );
+    namedParams["ref"] = ToString( ref );
+    namedParams["mask"] = ToString( mask );
+
+    mStencilFunctionTrace.PushCall( "StencilFuncSeparate", out.str(), namedParams );
   }
 
   inline void StencilMask(GLuint mask)
   {
+    std::stringstream out;
+    out << mask;
+
+    TraceCallStack::NamedParams namedParams;
+    namedParams["mask"] = ToString( mask );
+
+    mStencilFunctionTrace.PushCall( "StencilMask", out.str(), namedParams );
   }
 
   inline void StencilMaskSeparate(GLenum face, GLuint mask)
   {
+    std::stringstream out;
+    out << face << ", " << mask;
+
+    TraceCallStack::NamedParams namedParams;
+    namedParams["face"] = ToString( face );
+    namedParams["mask"] = ToString( mask );
+
+    mStencilFunctionTrace.PushCall( "StencilMaskSeparate", out.str(), namedParams );
   }
 
   inline void StencilOp(GLenum fail, GLenum zfail, GLenum zpass)
   {
+    std::stringstream out;
+    out << fail << ", " << zfail << ", " << zpass;
+
+    TraceCallStack::NamedParams namedParams;
+    namedParams["fail"] = ToString( fail );
+    namedParams["zfail"] = ToString( zfail );
+    namedParams["zpass"] = ToString( zpass );
+
+    mStencilFunctionTrace.PushCall( "StencilOp", out.str(), namedParams );
   }
 
   inline void StencilOpSeparate(GLenum face, GLenum fail, GLenum zfail, GLenum zpass)
   {
+    std::stringstream out;
+    out << face << ", " << fail << ", " << zfail << "," << zpass;
+
+    TraceCallStack::NamedParams namedParams;
+    namedParams["face"] = ToString( face );
+    namedParams["fail"] = ToString( fail );
+    namedParams["zfail"] = ToString( zfail );
+    namedParams["zpass"] = ToString( zpass );
+
+    mStencilFunctionTrace.PushCall( "StencilOpSeparate", out.str(), namedParams );
   }
 
   inline void TexImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void* pixels)
@@ -1781,6 +1845,11 @@ public: // TEST FUNCTIONS
   inline void ResetDepthFunctionCallStack() { mDepthFunctionTrace.Reset(); }
   inline TraceCallStack& GetDepthFunctionTrace() { return mDepthFunctionTrace; }
 
+  //Methods for Stencil function verification
+  inline void EnableStencilFunctionCallTrace(bool enable) { mStencilFunctionTrace.Enable(enable); }
+  inline void ResetStencilFunctionCallStack() { mStencilFunctionTrace.Reset(); }
+  inline TraceCallStack& GetStencilFunctionTrace() { return mStencilFunctionTrace; }
+
   template <typename T>
   inline bool GetUniformValue( const char* name, T& value ) const
   {
@@ -1923,10 +1992,22 @@ public: // TEST FUNCTIONS
   // Methods to check scissor tests
   inline const ScissorParams& GetScissorParams() const { return mScissorParams; }
 
+  struct ColorMaskParams
+  {
+    GLboolean red;
+    GLboolean green;
+    GLboolean blue;
+    GLboolean alpha;
+
+    ColorMaskParams() : red( true ), green( true ), blue( true ), alpha( true ) { }
+  };
+
   inline bool GetProgramBinaryCalled() const { return mGetProgramBinaryCalled; }
 
   inline unsigned int GetClearCountCalled() const { return mClearCount; }
 
+  inline const ColorMaskParams& GetColorMaskParams() const { return mColorMaskParams; }
+
   typedef std::vector<size_t> BufferDataCalls;
   inline const BufferDataCalls& GetBufferDataCalls() const { return mBufferDataCalls; }
   inline void ResetBufferDataCalls() { mBufferDataCalls.clear(); }
@@ -1998,6 +2079,7 @@ private:
   TraceCallStack mTexParamaterTrace;
   TraceCallStack mDrawTrace;
   TraceCallStack mDepthFunctionTrace;
+  TraceCallStack mStencilFunctionTrace;
 
   // Shaders & Uniforms
   GLuint mLastShaderIdUsed;
@@ -2125,6 +2207,7 @@ private:
   }
 
   ScissorParams mScissorParams;
+  ColorMaskParams mColorMaskParams;
 };
 
 template <>
index 32375a6..137bfaf 100644 (file)
@@ -1,8 +1,8 @@
-#ifndef __TEST_TRACE_CALL_STACK_H__
-#define __TEST_TRACE_CALL_STACK_H__
+#ifndef TEST_TRACE_CALL_STACK_H
+#define TEST_TRACE_CALL_STACK_H
 
 /*
- * Copyright (c) 2014 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2016 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.
@@ -21,6 +21,7 @@
 #include <string>
 #include <vector>
 #include <map>
+#include <sstream>
 
 namespace Dali
 {
@@ -34,6 +35,7 @@ std::string ToString(float x);
 class TraceCallStack
 {
 public:
+
   /// Typedef for passing and storing named parameters
   typedef std::map< std::string, std::string > NamedParams;
 
@@ -128,6 +130,23 @@ public:
    */
   void Reset();
 
+  /**
+   * Method to display contents of the TraceCallStack.
+   * @return A string containing a list of function calls and parameters (may contain newline characters)
+   */
+  std::string GetTraceString()
+  {
+    std::stringstream traceStream;
+    int functionCount = mCallStack.size();
+    for( int i = 0; i < functionCount; ++i )
+    {
+      Dali::TraceCallStack::FunctionCall functionCall = mCallStack[ i ];
+      traceStream << "StackTrace: Index:" << i << ",  Function:" << functionCall.method << ",  ParamList:" << functionCall.paramList << std::endl;
+    }
+
+    return traceStream.str();
+  }
+
 private:
   bool mTraceActive; ///< True if the trace is active
 
@@ -151,4 +170,4 @@ private:
 
 } // namespace dali
 
-#endif //__TEST_TRACE_CALL_STACK_H__
+#endif // TEST_TRACE_CALL_STACK_H
index fdf25e7..343b930 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2016 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.
@@ -395,10 +395,10 @@ int UtcDaliControlBackgroundColor(void)
 
   Property::Value propValue = control.GetProperty( Control::Property::BACKGROUND );
   Property::Map* resultMap = propValue.GetMap();
-  DALI_TEST_CHECK( resultMap->Find( "rendererType" ) );
-  DALI_TEST_CHECK( resultMap->Find( "rendererType" )->Get<std::string>() == "COLOR" );
-  DALI_TEST_CHECK( resultMap->Find( "mixColor" ) );
-  DALI_TEST_CHECK( resultMap->Find( "mixColor" )->Get<Vector4>() == Color::RED );
+  DALI_TEST_CHECK( resultMap->Find( Visual::Property::TYPE ) );
+  DALI_TEST_CHECK( resultMap->Find( Visual::Property::TYPE )->Get<int>() == Visual::COLOR );
+  DALI_TEST_CHECK( resultMap->Find( ColorVisual::Property::MIX_COLOR ) );
+  DALI_TEST_CHECK( resultMap->Find( ColorVisual::Property::MIX_COLOR )->Get<Vector4>() == Color::RED );
 
   DALI_TEST_EQUALS( control.GetBackgroundColor(), Color::RED, TEST_LOCATION );
 
@@ -406,8 +406,8 @@ int UtcDaliControlBackgroundColor(void)
 
   propValue = control.GetProperty( Control::Property::BACKGROUND );
   resultMap = propValue.GetMap();
-  DALI_TEST_CHECK( resultMap->Find( "mixColor" ) );
-  DALI_TEST_CHECK( resultMap->Find( "mixColor" )->Get<Vector4>() == Color::YELLOW );
+  DALI_TEST_CHECK( resultMap->Find( ColorVisual::Property::MIX_COLOR ) );
+  DALI_TEST_CHECK( resultMap->Find( ColorVisual::Property::MIX_COLOR )->Get<Vector4>() == Color::YELLOW );
 
   DALI_TEST_EQUALS( control.GetBackgroundColor(), Color::YELLOW, TEST_LOCATION );
 
@@ -426,18 +426,18 @@ int UtcDaliControlBackgroundImage(void)
 
   Property::Value propValue = control.GetProperty( Control::Property::BACKGROUND );
   Property::Map* resultMap = propValue.GetMap();
-  DALI_TEST_CHECK( resultMap->Find( "rendererType" ) );
-  DALI_TEST_CHECK( resultMap->Find( "rendererType" )->Get<std::string>() == "IMAGE" );
-  DALI_TEST_CHECK( resultMap->Find( "url" ) );
-  DALI_TEST_CHECK( resultMap->Find( "url" )->Get<std::string>() == "TestImage" );
+  DALI_TEST_CHECK( resultMap->Find( Visual::Property::TYPE ) );
+  DALI_TEST_CHECK( resultMap->Find( Visual::Property::TYPE )->Get<int>() == Visual::IMAGE );
+  DALI_TEST_CHECK( resultMap->Find( ImageVisual::Property::URL ) );
+  DALI_TEST_CHECK( resultMap->Find( ImageVisual::Property::URL )->Get<std::string>() == "TestImage" );
 
   image = ResourceImage::New("TestImage2");
   control.SetBackgroundImage( image );
 
   propValue = control.GetProperty( Control::Property::BACKGROUND );
   resultMap = propValue.GetMap();
-  DALI_TEST_CHECK( resultMap->Find( "url" ) );
-  DALI_TEST_CHECK( resultMap->Find( "url" )->Get<std::string>() == "TestImage2" );
+  DALI_TEST_CHECK( resultMap->Find( ImageVisual::Property::URL ) );
+  DALI_TEST_CHECK( resultMap->Find( ImageVisual::Property::URL )->Get<std::string>() == "TestImage2" );
 
   END_TEST;
 }
@@ -451,26 +451,26 @@ int UtcDaliControlBackgroundProperties(void)
   DALI_TEST_CHECK( control.GetProperty( Control::Property::BACKGROUND ).Get< Property::Map >().Empty() );
 
   Property::Map imageMap;
-  imageMap[ "rendererType" ] = "IMAGE";
-  imageMap[ "url" ] = "TestImage";
+  imageMap[ Visual::Property::TYPE ] = Visual::IMAGE;
+  imageMap[ ImageVisual::Property::URL ] = "TestImage";
   control.SetProperty( Control::Property::BACKGROUND, imageMap );
   Property::Value propValue = control.GetProperty( Control::Property::BACKGROUND );
   Property::Map* resultMap = propValue.GetMap();
-  DALI_TEST_CHECK( resultMap->Find( "rendererType" ) );
-  DALI_TEST_CHECK( resultMap->Find( "rendererType" )->Get<std::string>() == "IMAGE" );
-  DALI_TEST_CHECK( resultMap->Find( "url" ) );
-  DALI_TEST_CHECK( resultMap->Find( "url" )->Get<std::string>() == "TestImage" );
+  DALI_TEST_CHECK( resultMap->Find( Visual::Property::TYPE ) );
+  DALI_TEST_CHECK( resultMap->Find( Visual::Property::TYPE )->Get<int>() == Visual::IMAGE );
+  DALI_TEST_CHECK( resultMap->Find( ImageVisual::Property::URL ) );
+  DALI_TEST_CHECK( resultMap->Find( ImageVisual::Property::URL )->Get<std::string>() == "TestImage" );
 
   Property::Map rendererMap;
-  rendererMap["rendererType"] = "COLOR";
-  rendererMap["mixColor"] = Color::CYAN;
+  rendererMap[Visual::Property::TYPE] = Visual::COLOR;
+  rendererMap[ColorVisual::Property::MIX_COLOR] = Color::CYAN;
   control.SetProperty( Control::Property::BACKGROUND, rendererMap );
   propValue = control.GetProperty( Control::Property::BACKGROUND );
   resultMap = propValue.GetMap();
-  DALI_TEST_CHECK( resultMap->Find( "rendererType" ) );
-  DALI_TEST_CHECK( resultMap->Find( "rendererType" )->Get<std::string>() == "COLOR" );
-  DALI_TEST_CHECK( resultMap->Find( "mixColor" ) );
-  DALI_TEST_CHECK( resultMap->Find( "mixColor" )->Get<Vector4>() == Color::CYAN );
+  DALI_TEST_CHECK( resultMap->Find( Visual::Property::TYPE ) );
+  DALI_TEST_CHECK( resultMap->Find( Visual::Property::TYPE )->Get<int>() == Visual::COLOR );
+  DALI_TEST_CHECK( resultMap->Find( ColorVisual::Property::MIX_COLOR ) );
+  DALI_TEST_CHECK( resultMap->Find( ColorVisual::Property::MIX_COLOR )->Get<Vector4>() == Color::CYAN );
 
   Property::Map emptyMap;
   control.SetProperty( Control::Property::BACKGROUND, emptyMap );
@@ -487,7 +487,7 @@ int UtcDaliControlBackgroundProperties(void)
   control.SetProperty( Control::Property::BACKGROUND_IMAGE, deprecatedImageMap );
   propValue = control.GetProperty( Control::Property::BACKGROUND_IMAGE );
   resultMap = propValue.GetMap();
-  DALI_TEST_CHECK( resultMap->Find( "url" )->Get< std::string >() == "TestImage" );
+  DALI_TEST_CHECK( resultMap->Find( ImageVisual::Property::URL )->Get< std::string >() == "TestImage" );
   control.SetProperty( Control::Property::BACKGROUND_IMAGE, emptyMap );
   DALI_TEST_CHECK( control.GetProperty( Control::Property::BACKGROUND_IMAGE ).Get< Property::Map >().Empty() );
 
diff --git a/automated-tests/src/dali-toolkit/utc-Dali-ControlRenderer.cpp b/automated-tests/src/dali-toolkit/utc-Dali-ControlRenderer.cpp
deleted file mode 100644 (file)
index 8b3989f..0000000
+++ /dev/null
@@ -1,773 +0,0 @@
-/*
- * Copyright (c) 2016 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.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <iostream>
-#include <stdlib.h>
-#include <dali-toolkit-test-suite-utils.h>
-#include <dali/public-api/rendering/renderer.h>
-#include <dali/public-api/rendering/texture-set.h>
-#include <dali/public-api/rendering/shader.h>
-#include <dali-toolkit/devel-api/controls/renderer-factory/renderer-factory.h>
-
-using namespace Dali;
-using namespace Dali::Toolkit;
-
-namespace
-{
-const char* TEST_IMAGE_FILE_NAME =  "gallery_image_01.jpg";
-const char* TEST_NPATCH_FILE_NAME =  "gallery_image_01.9.jpg";
-const char* TEST_SVG_FILE_NAME = TEST_RESOURCE_DIR "/svg1.svg";
-const char* TEST_OBJ_FILE_NAME = TEST_RESOURCE_DIR "/Cube.obj";
-const char* TEST_MTL_FILE_NAME = TEST_RESOURCE_DIR "/ToyRobot-Metal.mtl";
-const char* TEST_RESOURCE_LOCATION = TEST_RESOURCE_DIR "/";
-}
-
-void dali_control_renderer_startup(void)
-{
-  test_return_value = TET_UNDEF;
-}
-
-void dali_control_renderer_cleanup(void)
-{
-  test_return_value = TET_PASS;
-}
-
-int UtcDaliControlRendererCopyAndAssignment(void)
-{
-  ToolkitTestApplication application;
-  tet_infoline( "UtcDaliControlRendererCopyAndAssignment" );
-
-  RendererFactory factory = RendererFactory::Get();
-  Property::Map propertyMap;
-  propertyMap.Insert("rendererType",  "COLOR");
-  propertyMap.Insert("mixColor",  Color::BLUE);
-  ControlRenderer controlRenderer = factory.CreateControlRenderer( propertyMap );
-
-  ControlRenderer controlRendererCopy( controlRenderer );
-  DALI_TEST_CHECK(controlRenderer == controlRendererCopy);
-
-  ControlRenderer emptyControlRenderer;
-  ControlRenderer emptyControlRendererCopy( emptyControlRenderer );
-  DALI_TEST_CHECK(emptyControlRenderer == emptyControlRendererCopy);
-
-  ControlRenderer controlRendererEquals;
-  controlRendererEquals = controlRenderer;
-  DALI_TEST_CHECK(controlRenderer == controlRendererEquals);
-
-  ControlRenderer emptyControlRendererEquals;
-  emptyControlRendererEquals = emptyControlRenderer;
-  DALI_TEST_CHECK( emptyControlRenderer == emptyControlRendererEquals );
-
-  //self assignment
-  controlRenderer = controlRenderer;
-  DALI_TEST_CHECK( controlRenderer = controlRendererCopy );
-
-  END_TEST;
-}
-
-int UtcDaliControlRendererSetGetDepthIndex(void)
-{
-  ToolkitTestApplication application;
-  tet_infoline( "UtcDaliControlRendererSetDepthIndex" );
-
-  RendererFactory factory = RendererFactory::Get();
-  Property::Map propertyMap;
-  propertyMap.Insert("rendererType",  "COLOR");
-  propertyMap.Insert("mixColor",  Color::BLUE);
-  ControlRenderer controlRenderer = factory.CreateControlRenderer( propertyMap );
-
-  controlRenderer.SetDepthIndex( 1.f );
-
-  Actor actor = Actor::New();
-  actor.SetSize(200.f, 200.f);
-  Stage::GetCurrent().Add( actor );
-  controlRenderer.SetOnStage( actor );
-
-  int depthIndex = actor.GetRendererAt(0u).GetProperty<int>( Renderer::Property::DEPTH_INDEX );
-  DALI_TEST_EQUALS( depthIndex, 1, TEST_LOCATION );
-  DALI_TEST_EQUALS( controlRenderer.GetDepthIndex(), 1.f, TEST_LOCATION );
-
-  controlRenderer.SetDepthIndex( -1.f );
-  depthIndex = actor.GetRendererAt(0u).GetProperty<int>( Renderer::Property::DEPTH_INDEX );
-  DALI_TEST_EQUALS( depthIndex, -1, TEST_LOCATION );
-  DALI_TEST_EQUALS( controlRenderer.GetDepthIndex(), -1.f, TEST_LOCATION );
-
-  END_TEST;
-}
-
-int UtcDaliControlRendererSize(void)
-{
-  ToolkitTestApplication application;
-  tet_infoline( "UtcDaliControlRendererGetNaturalSize" );
-
-  RendererFactory factory = RendererFactory::Get();
-  Vector2 rendererSize( 20.f, 30.f );
-  Vector2 naturalSize;
-
-  // color renderer
-  Dali::Property::Map map;
-  map[ "rendererType" ] = "COLOR";
-  map[ "mixColor" ] = Color::MAGENTA;
-  ControlRenderer colorRenderer = factory.CreateControlRenderer( map );
-  colorRenderer.SetSize( rendererSize );
-  DALI_TEST_EQUALS( colorRenderer.GetSize(), rendererSize, TEST_LOCATION );
-  colorRenderer.GetNaturalSize(naturalSize);
-  DALI_TEST_EQUALS( naturalSize, Vector2::ZERO, TEST_LOCATION );
-
-  // image renderer
-  Image image = ResourceImage::New(TEST_IMAGE_FILE_NAME, ImageDimensions(100, 200));
-  ControlRenderer imageRenderer = factory.CreateControlRenderer( image );
-  imageRenderer.SetSize( rendererSize );
-  DALI_TEST_EQUALS( imageRenderer.GetSize(), rendererSize, TEST_LOCATION );
-  imageRenderer.GetNaturalSize(naturalSize);
-  DALI_TEST_EQUALS( naturalSize, Vector2(100.f, 200.f), TEST_LOCATION );
-
-  // n patch renderer
-  TestPlatformAbstraction& platform = application.GetPlatform();
-  Vector2 testSize(80.f, 160.f);
-  platform.SetClosestImageSize(testSize);
-  image = ResourceImage::New(TEST_NPATCH_FILE_NAME);
-  ControlRenderer nPatchRenderer = factory.CreateControlRenderer( image );
-  nPatchRenderer.SetSize( rendererSize );
-  DALI_TEST_EQUALS( nPatchRenderer.GetSize(), rendererSize, TEST_LOCATION );
-  nPatchRenderer.GetNaturalSize(naturalSize);
-  DALI_TEST_EQUALS( naturalSize, testSize, TEST_LOCATION );
-
-  // border renderer
-  float borderSize = 5.f;
-  map.Clear();
-  map[ "rendererType" ] = "BORDER";
-  map[ "borderColor"  ] = Color::RED;
-  map[ "borderSize"   ] = borderSize;
-  ControlRenderer borderRenderer = factory.CreateControlRenderer( map );
-  borderRenderer.SetSize( rendererSize );
-  DALI_TEST_EQUALS( borderRenderer.GetSize(), rendererSize, TEST_LOCATION );
-  borderRenderer.GetNaturalSize(naturalSize);
-  DALI_TEST_EQUALS( naturalSize, Vector2::ZERO, TEST_LOCATION );
-
-  // gradient renderer
-  Property::Map propertyMap;
-  propertyMap.Insert("rendererType",  "GRADIENT");
-  Vector2 start(-1.f, -1.f);
-  Vector2 end(1.f, 1.f);
-  propertyMap.Insert("startPosition",   start);
-  propertyMap.Insert("endPosition",   end);
-  propertyMap.Insert("stopOffset",   Vector2(0.f, 1.f));
-  Property::Array stopColors;
-  stopColors.PushBack( Color::RED );
-  stopColors.PushBack( Color::GREEN );
-  propertyMap.Insert("stopColor",   stopColors);
-  ControlRenderer gradientRenderer = factory.CreateControlRenderer(propertyMap);
-  gradientRenderer.SetSize( rendererSize );
-  DALI_TEST_EQUALS( gradientRenderer.GetSize(), rendererSize, TEST_LOCATION );
-  gradientRenderer.GetNaturalSize(naturalSize);
-  DALI_TEST_EQUALS( naturalSize, Vector2::ZERO,TEST_LOCATION );
-
-  //svg renderer
-  ControlRenderer svgRenderer = factory.CreateControlRenderer( TEST_SVG_FILE_NAME, ImageDimensions() );
-  svgRenderer.SetSize( rendererSize );
-  DALI_TEST_EQUALS( svgRenderer.GetSize(), rendererSize, TEST_LOCATION );
-  svgRenderer.GetNaturalSize(naturalSize);
-  // TEST_SVG_FILE:
-  //  <svg width="100" height="100">
-  //  <circle cx="50" cy="50" r="40" stroke="green" stroke-width="4" fill="yellow" />
-  //  </svg>
-  DALI_TEST_EQUALS( naturalSize, Vector2(100.f, 100.f), TEST_LOCATION );
-  END_TEST;
-}
-
-int UtcDaliControlRendererSetOnOffStage(void)
-{
-  ToolkitTestApplication application;
-  tet_infoline( "UtcDaliControlRendererSetDepthIndex" );
-
-  RendererFactory factory = RendererFactory::Get();
-  Property::Map propertyMap;
-  propertyMap.Insert("rendererType",  "COLOR");
-  propertyMap.Insert("mixColor",  Color::BLUE);
-  ControlRenderer controlRenderer = factory.CreateControlRenderer( propertyMap );
-
-  Actor actor = Actor::New();
-  actor.SetSize(200.f, 200.f);
-  Stage::GetCurrent().Add( actor );
-
-  application.SendNotification();
-  application.Render(0);
-  DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
-
-  controlRenderer.SetOnStage( actor );
-  application.SendNotification();
-  application.Render(0);
-  DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
-
-  controlRenderer.SetOffStage( actor );
-  application.SendNotification();
-  application.Render(0);
-  DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
-
-  END_TEST;
-}
-
-int UtcDaliControlRendererRemoveAndReset(void)
-{
-  ToolkitTestApplication application;
-  tet_infoline( "intUtcDaliControlRendererRemoveAndReset" );
-
-  RendererFactory factory = RendererFactory::Get();
-
-  Actor actor = Actor::New();
-  actor.SetSize(200.f, 200.f);
-  Stage::GetCurrent().Add( actor );
-
-  ControlRenderer imageRenderer;
-  // test calling RemoveAndReset with an empty handle
-  try
-  {
-    imageRenderer.RemoveAndReset( actor );
-    tet_result(TET_PASS);
-  }
-  catch (DaliException& exception)
-  {
-    tet_result(TET_FAIL);
-  }
-
-  Image image = ResourceImage::New(TEST_IMAGE_FILE_NAME, ImageDimensions(100, 200));
-  imageRenderer = factory.CreateControlRenderer(image);
-  DALI_TEST_CHECK( imageRenderer );
-
-  imageRenderer.SetOnStage( actor );
-  application.SendNotification();
-  application.Render(0);
-  DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
-
-  imageRenderer.RemoveAndReset( actor );
-  application.SendNotification();
-  application.Render(0);
-  DALI_TEST_CHECK( actor.GetRendererCount() == 0u ); // renderer is removed from actor
-  DALI_TEST_CHECK( !imageRenderer ); // control renderer is reset
-
-  END_TEST;
-}
-
-int UtcDaliControlRendererGetPropertyMap1(void)
-{
-  ToolkitTestApplication application;
-  tet_infoline( "UtcDaliControlRendererGetPropertyMap1: ColorRenderer" );
-
-  RendererFactory factory = RendererFactory::Get();
-  Property::Map propertyMap;
-  propertyMap.Insert("rendererType",  "COLOR");
-  propertyMap.Insert("mixColor",  Color::BLUE);
-  ControlRenderer colorRenderer = factory.CreateControlRenderer( propertyMap );
-
-  Property::Map resultMap;
-  colorRenderer.CreatePropertyMap( resultMap );
-
-  Property::Value* typeValue = resultMap.Find( "rendererType",  Property::STRING );
-  DALI_TEST_CHECK( typeValue );
-  DALI_TEST_CHECK( typeValue->Get<std::string>() == "COLOR" );
-
-  Property::Value* colorValue = resultMap.Find( "mixColor",  Property::VECTOR4 );
-  DALI_TEST_CHECK( colorValue );
-  DALI_TEST_CHECK( colorValue->Get<Vector4>() == Color::BLUE );
-
-  // change the blend color
-  Actor actor;
-  colorRenderer.RemoveAndReset( actor );
-  propertyMap["mixColor"] = Color::CYAN;
-  colorRenderer = factory.CreateControlRenderer( propertyMap  );
-  colorRenderer.CreatePropertyMap( resultMap );
-
-  colorValue = resultMap.Find( "mixColor",  Property::VECTOR4 );
-  DALI_TEST_CHECK( colorValue );
-  DALI_TEST_CHECK( colorValue->Get<Vector4>() == Color::CYAN );
-
-  END_TEST;
-}
-
-int UtcDaliControlRendererGetPropertyMap2(void)
-{
-  ToolkitTestApplication application;
-  tet_infoline( "UtcDaliControlRendererGetPropertyMap2: BorderRenderer" );
-
-  RendererFactory factory = RendererFactory::Get();
-  Property::Map propertyMap;
-  propertyMap.Insert("rendererType",  "BORDER");
-  propertyMap.Insert("borderColor",  Color::BLUE);
-  propertyMap.Insert("borderSize",  5.f);
-  ControlRenderer borderRenderer = factory.CreateControlRenderer( propertyMap );
-
-  Property::Map resultMap;
-  borderRenderer.CreatePropertyMap( resultMap );
-
-  // check the property values from the returned map from control renderer
-  Property::Value* typeValue = resultMap.Find( "rendererType",  Property::STRING );
-  DALI_TEST_CHECK( typeValue );
-  DALI_TEST_CHECK( typeValue->Get<std::string>() == "BORDER" );
-
-  Property::Value* colorValue = resultMap.Find( "borderColor",  Property::VECTOR4 );
-  DALI_TEST_CHECK( colorValue );
-  DALI_TEST_CHECK( colorValue->Get<Vector4>() == Color::BLUE );
-
-  Property::Value* sizeValue = resultMap.Find( "borderSize",  Property::FLOAT );
-  DALI_TEST_CHECK( sizeValue );
-  DALI_TEST_CHECK( sizeValue->Get<float>() == 5.f );
-
-  Property::Map propertyMap1;
-  propertyMap1[ "rendererType" ] = "BORDER";
-  propertyMap1[ "borderColor"  ] = Color::CYAN;
-  propertyMap1[ "borderSize"   ] = 10.0f;
-  borderRenderer = factory.CreateControlRenderer( propertyMap1 );
-  borderRenderer.CreatePropertyMap( resultMap );
-
-  typeValue = resultMap.Find( "rendererType",  Property::STRING );
-  DALI_TEST_CHECK( typeValue );
-  DALI_TEST_CHECK( typeValue->Get<std::string>() == "BORDER" );
-
-  colorValue = resultMap.Find( "borderColor",  Property::VECTOR4 );
-  DALI_TEST_CHECK( colorValue );
-  DALI_TEST_CHECK( colorValue->Get<Vector4>() == Color::CYAN );
-
-  colorValue = resultMap.Find( "borderSize",  Property::FLOAT );
-  DALI_TEST_CHECK( colorValue );
-  DALI_TEST_CHECK( colorValue->Get<float>() == 10.f );
-
-  END_TEST;
-}
-
-int UtcDaliControlRendererGetPropertyMap3(void)
-{
-  ToolkitTestApplication application;
-  tet_infoline( "UtcDaliControlRendererGetPropertyMap3: linear GradientRenderer" );
-
-  RendererFactory factory = RendererFactory::Get();
-  DALI_TEST_CHECK( factory );
-
-  Property::Map propertyMap;
-  propertyMap.Insert("rendererType",  "GRADIENT");
-
-  Vector2 start(-1.f, -1.f);
-  Vector2 end(1.f, 1.f);
-  propertyMap.Insert("startPosition", start);
-  propertyMap.Insert("endPosition", end);
-  propertyMap.Insert("spreadMethod", "REPEAT");
-
-  propertyMap.Insert("stopOffset",   Vector2(0.2f, 0.8f));
-
-  Property::Array stopColors;
-  stopColors.PushBack( Color::RED );
-  stopColors.PushBack( Color::GREEN );
-  propertyMap.Insert("stopColor",   stopColors);
-
-  ControlRenderer gradientRenderer = factory.CreateControlRenderer(propertyMap);
-
-  Property::Map resultMap;
-  gradientRenderer.CreatePropertyMap( resultMap );
-
-  // check the property values from the returned map from control renderer
-  Property::Value* value = resultMap.Find( "rendererType",  Property::STRING );
-  DALI_TEST_CHECK( value );
-  DALI_TEST_CHECK( value->Get<std::string>() == "GRADIENT" );
-
-  value = resultMap.Find( "units",  Property::STRING );
-  DALI_TEST_CHECK( value );
-  DALI_TEST_CHECK( value->Get<std::string>() == "OBJECT_BOUNDING_BOX" );
-
-  value = resultMap.Find( "spreadMethod",   Property::STRING );
-  DALI_TEST_CHECK( value );
-  DALI_TEST_CHECK( value->Get<std::string>() == "REPEAT" );
-
-  value = resultMap.Find( "startPosition",   Property::VECTOR2 );
-  DALI_TEST_CHECK( value );
-  DALI_TEST_EQUALS( value->Get<Vector2>(), start , Math::MACHINE_EPSILON_100, TEST_LOCATION );
-
-  value = resultMap.Find( "endPosition",   Property::VECTOR2 );
-  DALI_TEST_CHECK( value );
-  DALI_TEST_EQUALS( value->Get<Vector2>(), end , Math::MACHINE_EPSILON_100, TEST_LOCATION );
-
-  value = resultMap.Find( "stopOffset",   Property::ARRAY );
-  DALI_TEST_CHECK( value );
-  Property::Array* offsetArray = value->GetArray();
-  DALI_TEST_CHECK( offsetArray->Count() == 2 );
-  DALI_TEST_EQUALS( offsetArray->GetElementAt(0).Get<float>(), 0.2f , Math::MACHINE_EPSILON_100, TEST_LOCATION );
-  DALI_TEST_EQUALS( offsetArray->GetElementAt(1).Get<float>(), 0.8f , Math::MACHINE_EPSILON_100, TEST_LOCATION );
-
-  value = resultMap.Find( "stopColor",   Property::ARRAY );
-  DALI_TEST_CHECK( value );
-  Property::Array* colorArray = value->GetArray();
-  DALI_TEST_CHECK( colorArray->Count() == 2 );
-  DALI_TEST_EQUALS( colorArray->GetElementAt(0).Get<Vector4>(), Color::RED , Math::MACHINE_EPSILON_100, TEST_LOCATION );
-  DALI_TEST_EQUALS( colorArray->GetElementAt(1).Get<Vector4>(), Color::GREEN , Math::MACHINE_EPSILON_100, TEST_LOCATION );
-
-  END_TEST;
-}
-
-int UtcDaliControlRendererGetPropertyMap4(void)
-{
-  ToolkitTestApplication application;
-  tet_infoline( "UtcDaliControlRendererGetPropertyMap4: radial GradientRenderer" );
-
-  RendererFactory factory = RendererFactory::Get();
-  DALI_TEST_CHECK( factory );
-
-  Property::Map propertyMap;
-  propertyMap.Insert("rendererType",  "GRADIENT");
-
-  Vector2 center(100.f, 100.f);
-  float radius = 100.f;
-  propertyMap.Insert("units",  "USER_SPACE");
-  propertyMap.Insert("center",  center);
-  propertyMap.Insert("radius",  radius);
-  propertyMap.Insert("stopOffset",   Vector3(0.1f, 0.3f, 1.1f));
-
-  Property::Array stopColors;
-  stopColors.PushBack( Color::RED );
-  stopColors.PushBack( Color::BLACK );
-  stopColors.PushBack( Color::GREEN );
-  propertyMap.Insert("stopColor",   stopColors);
-
-  ControlRenderer gradientRenderer = factory.CreateControlRenderer(propertyMap);
-  DALI_TEST_CHECK( gradientRenderer );
-
-  Property::Map resultMap;
-  gradientRenderer.CreatePropertyMap( resultMap );
-
-  // check the property values from the returned map from control renderer
-  Property::Value* value = resultMap.Find( "rendererType",  Property::STRING );
-  DALI_TEST_CHECK( value );
-  DALI_TEST_CHECK( value->Get<std::string>() == "GRADIENT" );
-
-  value = resultMap.Find( "units",  Property::STRING );
-  DALI_TEST_CHECK( value );
-  DALI_TEST_CHECK( value->Get<std::string>() == "USER_SPACE" );
-
-  value = resultMap.Find( "spreadMethod",   Property::STRING );
-  DALI_TEST_CHECK( value );
-  DALI_TEST_CHECK( value->Get<std::string>() == "PAD" );
-
-  value = resultMap.Find( "center",  Property::VECTOR2 );
-  DALI_TEST_CHECK( value );
-  DALI_TEST_EQUALS( value->Get<Vector2>(), center , Math::MACHINE_EPSILON_100, TEST_LOCATION );
-
-  value = resultMap.Find( "radius",  Property::FLOAT );
-  DALI_TEST_CHECK( value );
-  DALI_TEST_EQUALS( value->Get<float>(), radius , Math::MACHINE_EPSILON_100, TEST_LOCATION );
-
-  value = resultMap.Find( "stopOffset",   Property::ARRAY );
-  DALI_TEST_CHECK( value );
-  Property::Array* offsetArray = value->GetArray();
-  DALI_TEST_CHECK( offsetArray->Count() == 3 );
-  DALI_TEST_EQUALS( offsetArray->GetElementAt(0).Get<float>(), 0.1f , Math::MACHINE_EPSILON_100, TEST_LOCATION );
-  DALI_TEST_EQUALS( offsetArray->GetElementAt(1).Get<float>(), 0.3f , Math::MACHINE_EPSILON_100, TEST_LOCATION );
-  // any stop value will be clamped to [0.0, 1.0];
-  DALI_TEST_EQUALS( offsetArray->GetElementAt(2).Get<float>(), 1.0f , Math::MACHINE_EPSILON_100, TEST_LOCATION );
-
-  value = resultMap.Find( "stopColor",   Property::ARRAY );
-  DALI_TEST_CHECK( value );
-  Property::Array* colorArray = value->GetArray();
-  DALI_TEST_CHECK( colorArray->Count() == 3 );
-  DALI_TEST_EQUALS( colorArray->GetElementAt(0).Get<Vector4>(), Color::RED , Math::MACHINE_EPSILON_100, TEST_LOCATION );
-  DALI_TEST_EQUALS( colorArray->GetElementAt(1).Get<Vector4>(), Color::BLACK , Math::MACHINE_EPSILON_100, TEST_LOCATION );
-  DALI_TEST_EQUALS( colorArray->GetElementAt(2).Get<Vector4>(), Color::GREEN , Math::MACHINE_EPSILON_100, TEST_LOCATION );
-
-  END_TEST;
-}
-
-int UtcDaliControlRendererGetPropertyMap5(void)
-{
-  ToolkitTestApplication application;
-  tet_infoline( "UtcDaliControlRendererGetPropertyMap5: ImageRenderer" );
-
-  RendererFactory factory = RendererFactory::Get();
-  Property::Map propertyMap;
-  propertyMap.Insert( "rendererType",  "IMAGE" );
-  propertyMap.Insert( "url",  TEST_IMAGE_FILE_NAME );
-  propertyMap.Insert( "desiredWidth",   20 );
-  propertyMap.Insert( "desiredHeight",   30 );
-  propertyMap.Insert( "fittingMode",   "FIT_HEIGHT" );
-  propertyMap.Insert( "samplingMode",   "BOX_THEN_NEAREST" );
-  propertyMap.Insert( "synchronousLoading",   true );
-
-  ControlRenderer imageRenderer = factory.CreateControlRenderer(propertyMap);
-  DALI_TEST_CHECK( imageRenderer );
-
-  Property::Map resultMap;
-  imageRenderer.CreatePropertyMap( resultMap );
-
-  // check the property values from the returned map from control renderer
-  Property::Value* value = resultMap.Find( "rendererType",  Property::STRING );
-  DALI_TEST_CHECK( value );
-  DALI_TEST_CHECK( value->Get<std::string>() == "IMAGE" );
-
-  value = resultMap.Find( "url",  Property::STRING );
-  DALI_TEST_CHECK( value );
-  DALI_TEST_CHECK( value->Get<std::string>() == TEST_IMAGE_FILE_NAME );
-
-  value = resultMap.Find( "fittingMode",   Property::STRING );
-  DALI_TEST_CHECK( value );
-  DALI_TEST_CHECK( value->Get<std::string>() == "FIT_HEIGHT" );
-
-  value = resultMap.Find( "samplingMode",   Property::STRING );
-  DALI_TEST_CHECK( value );
-  DALI_TEST_CHECK( value->Get<std::string>() == "BOX_THEN_NEAREST" );
-
-  value = resultMap.Find( "desiredWidth",   Property::INTEGER );
-  DALI_TEST_CHECK( value );
-  DALI_TEST_CHECK( value->Get<int>() == 20 );
-
-  value = resultMap.Find( "desiredHeight",   Property::INTEGER );
-  DALI_TEST_CHECK( value );
-  DALI_TEST_CHECK( value->Get<int>() == 30 );
-
-  value = resultMap.Find( "synchronousLoading",   Property::BOOLEAN );
-  DALI_TEST_CHECK( value );
-  DALI_TEST_CHECK( value->Get<bool>() == true );
-
-  // Get an image renderer with an image handle, and test the default property values
-  Image image = ResourceImage::New(TEST_IMAGE_FILE_NAME, ImageDimensions(100, 200));
-  imageRenderer = factory.CreateControlRenderer(image);
-  imageRenderer.CreatePropertyMap( resultMap );
-
-  value = resultMap.Find( "rendererType",  Property::STRING );
-  DALI_TEST_CHECK( value );
-  DALI_TEST_CHECK( value->Get<std::string>() == "IMAGE" );
-
-  value = resultMap.Find( "url",  Property::STRING );
-  DALI_TEST_CHECK( value );
-  DALI_TEST_CHECK( value->Get<std::string>() == TEST_IMAGE_FILE_NAME );
-
-  value = resultMap.Find( "fittingMode",   Property::STRING );
-  DALI_TEST_CHECK( value );
-  DALI_TEST_CHECK( value->Get<std::string>() == "SHRINK_TO_FIT" );
-
-  value = resultMap.Find( "samplingMode",   Property::STRING );
-  DALI_TEST_CHECK( value );
-  DALI_TEST_CHECK( value->Get<std::string>() == "BOX" );
-
-  value = resultMap.Find( "desiredWidth",   Property::INTEGER );
-  DALI_TEST_CHECK( value );
-  DALI_TEST_CHECK( value->Get<int>() == 100 );
-
-  value = resultMap.Find( "desiredHeight",   Property::INTEGER );
-  DALI_TEST_CHECK( value );
-  DALI_TEST_CHECK( value->Get<int>() == 200 );
-
-  value = resultMap.Find( "synchronousLoading",   Property::BOOLEAN );
-  DALI_TEST_CHECK( value );
-  DALI_TEST_CHECK( value->Get<bool>() == false );
-
-  END_TEST;
-}
-
-int UtcDaliControlRendererGetPropertyMap6(void)
-{
-  ToolkitTestApplication application;
-  tet_infoline( "UtcDaliControlRendererGetPropertyMap6: NPatchRenderer" );
-
-  RendererFactory factory = RendererFactory::Get();
-  Property::Map propertyMap;
-  propertyMap.Insert( "rendererType",  "IMAGE" );
-  propertyMap.Insert( "url",  TEST_NPATCH_FILE_NAME );
-  propertyMap.Insert( "borderOnly",  true );
-  ControlRenderer nPatchRenderer = factory.CreateControlRenderer( propertyMap );
-
-  Property::Map resultMap;
-  nPatchRenderer.CreatePropertyMap( resultMap );
-
-  // check the property values from the returned map from control renderer
-  Property::Value* value = resultMap.Find( "rendererType",  Property::STRING );
-  DALI_TEST_CHECK( value );
-  DALI_TEST_CHECK( value->Get<std::string>() == "IMAGE" );
-
-  value = resultMap.Find( "url",  Property::STRING );
-  DALI_TEST_CHECK( value );
-  DALI_TEST_CHECK( value->Get<std::string>() == TEST_NPATCH_FILE_NAME );
-
-  value = resultMap.Find( "borderOnly",  Property::BOOLEAN );
-  DALI_TEST_CHECK( value );
-  DALI_TEST_CHECK( value->Get<bool>() );
-
-  END_TEST;
-}
-
-int UtcDaliControlRendererGetPropertyMap7(void)
-{
-  ToolkitTestApplication application;
-  tet_infoline( "UtcDaliControlRendererGetPropertyMap7: SvgRenderer" );
-
-  // request SvgRenderer with a property map
-  RendererFactory factory = RendererFactory::Get();
-  Property::Map propertyMap;
-  propertyMap.Insert( "rendererType",  "IMAGE" );
-  propertyMap.Insert( "url",  TEST_SVG_FILE_NAME );
-  ControlRenderer svgRenderer = factory.CreateControlRenderer( propertyMap );
-
-  Property::Map resultMap;
-  svgRenderer.CreatePropertyMap( resultMap );
-  // check the property values from the returned map from control renderer
-  Property::Value* value = resultMap.Find( "rendererType",  Property::STRING );
-  DALI_TEST_CHECK( value );
-  DALI_TEST_CHECK( value->Get<std::string>() == "IMAGE" );
-
-  value = resultMap.Find( "url",  Property::STRING );
-  DALI_TEST_CHECK( value );
-  DALI_TEST_CHECK( value->Get<std::string>() == TEST_SVG_FILE_NAME );
-
-  // request SvgRenderer with an URL
-  ControlRenderer svgRenderer2 = factory.CreateControlRenderer( TEST_SVG_FILE_NAME, ImageDimensions() );
-  resultMap.Clear();
-  svgRenderer2.CreatePropertyMap( resultMap );
-  // check the property values from the returned map from control renderer
-  value = resultMap.Find( "rendererType",  Property::STRING );
-  DALI_TEST_CHECK( value );
-  DALI_TEST_CHECK( value->Get<std::string>() == "IMAGE" );
-
-  value = resultMap.Find( "url",  Property::STRING );
-  DALI_TEST_CHECK( value );
-  DALI_TEST_CHECK( value->Get<std::string>() == TEST_SVG_FILE_NAME );
-
-  END_TEST;
-}
-
-//Mesh renderer
-int UtcDaliControlRendererGetPropertyMap8(void)
-{
-  ToolkitTestApplication application;
-  tet_infoline( "UtcDaliControlRendererGetPropertyMap8: MeshRenderer" );
-
-  //Request MeshRenderer using a property map.
-  RendererFactory factory = RendererFactory::Get();
-  Property::Map propertyMap;
-  propertyMap.Insert( "rendererType", "MESH" );
-  propertyMap.Insert( "objectUrl", TEST_OBJ_FILE_NAME );
-  propertyMap.Insert( "materialUrl", TEST_MTL_FILE_NAME );
-  propertyMap.Insert( "texturesPath", TEST_RESOURCE_LOCATION );
-  propertyMap.Insert( "shaderType", "TEXTURELESS" );
-  ControlRenderer meshRenderer = factory.CreateControlRenderer( propertyMap );
-
-  Property::Map resultMap;
-  meshRenderer.CreatePropertyMap( resultMap );
-
-  //Check values in the result map are identical to the initial map's values.
-  Property::Value* value = resultMap.Find( "rendererType", Property::STRING );
-  DALI_TEST_CHECK( value );
-  DALI_TEST_EQUALS( value->Get<std::string>(), "MESH", TEST_LOCATION );
-
-  value = resultMap.Find( "objectUrl", Property::STRING );
-  DALI_TEST_CHECK( value );
-  DALI_TEST_EQUALS( value->Get<std::string>(), TEST_OBJ_FILE_NAME, TEST_LOCATION );
-
-  value = resultMap.Find( "materialUrl", Property::STRING );
-  DALI_TEST_CHECK( value );
-  DALI_TEST_EQUALS( value->Get<std::string>(), TEST_MTL_FILE_NAME, TEST_LOCATION );
-
-  value = resultMap.Find( "texturesPath", Property::STRING );
-  DALI_TEST_CHECK( value );
-  DALI_TEST_EQUALS( value->Get<std::string>(), TEST_RESOURCE_LOCATION, TEST_LOCATION );
-
-  value = resultMap.Find( "shaderType", Property::STRING );
-  DALI_TEST_CHECK( value );
-  DALI_TEST_EQUALS( value->Get<std::string>(), "TEXTURELESS", TEST_LOCATION );
-
-  END_TEST;
-}
-
-//Primitive shape renderer
-int UtcDaliControlRendererGetPropertyMap9(void)
-{
-  ToolkitTestApplication application;
-  tet_infoline( "UtcDaliControlRendererGetPropertyMap9: PrimitiveRenderer" );
-
-  Vector4 color = Vector4( 1.0, 0.8, 0.6, 1.0);
-  Vector3 dimensions = Vector3( 1.0, 2.0, 3.0 );
-
-  //Request PrimitiveRenderer using a property map.
-  RendererFactory factory = RendererFactory::Get();
-  Property::Map propertyMap;
-  propertyMap.Insert( "rendererType", "PRIMITIVE" );
-  propertyMap.Insert( "shape", "CUBE" );
-  propertyMap.Insert( "color", color );
-  propertyMap.Insert( "slices", 10 );
-  propertyMap.Insert( "stacks", 20 );
-  propertyMap.Insert( "scaleTopRadius", 30.0f );
-  propertyMap.Insert( "scaleBottomRadius", 40.0f );
-  propertyMap.Insert( "scaleHeight", 50.0f );
-  propertyMap.Insert( "scaleRadius", 60.0f );
-  propertyMap.Insert( "scaleDimensions", dimensions );
-  propertyMap.Insert( "bevelPercentage", 0.3f );
-  propertyMap.Insert( "bevelSmoothness", 0.6f );
-  propertyMap.Insert( "uLightPosition", Vector3( 5.0f, 10.0f, 15.0f) );
-  ControlRenderer primitiveRenderer = factory.CreateControlRenderer( propertyMap );
-
-  Property::Map resultMap;
-  primitiveRenderer.CreatePropertyMap( resultMap );
-
-  //Check values in the result map are identical to the initial map's values.
-  Property::Value* value = resultMap.Find( "rendererType", Property::STRING );
-  DALI_TEST_CHECK( value );
-  DALI_TEST_EQUALS( value->Get<std::string>(), "PRIMITIVE", TEST_LOCATION );
-
-  value = resultMap.Find( "shape", Property::STRING );
-  DALI_TEST_CHECK( value );
-  DALI_TEST_EQUALS( value->Get<std::string>(), "CUBE", TEST_LOCATION );
-
-  value = resultMap.Find( "color", Property::VECTOR4 );
-  DALI_TEST_CHECK( value );
-  DALI_TEST_CHECK( value->Get<Vector4>() == color );
-  DALI_TEST_EQUALS( value->Get<Vector4>(), color, Math::MACHINE_EPSILON_100, TEST_LOCATION );
-
-  value = resultMap.Find( "slices", Property::INTEGER );
-  DALI_TEST_CHECK( value );
-  DALI_TEST_EQUALS( value->Get<int>(), 10, TEST_LOCATION );
-
-  value = resultMap.Find( "stacks", Property::INTEGER );
-  DALI_TEST_CHECK( value );
-  DALI_TEST_EQUALS( value->Get<int>(), 20, TEST_LOCATION );
-
-  value = resultMap.Find( "scaleTopRadius", Property::FLOAT );
-  DALI_TEST_CHECK( value );
-  DALI_TEST_EQUALS( value->Get<float>(), 30.0f, Math::MACHINE_EPSILON_100, TEST_LOCATION );
-
-  value = resultMap.Find( "scaleBottomRadius", Property::FLOAT );
-  DALI_TEST_CHECK( value );
-  DALI_TEST_EQUALS( value->Get<float>(), 40.0f, Math::MACHINE_EPSILON_100, TEST_LOCATION );
-
-  value = resultMap.Find( "scaleHeight", Property::FLOAT );
-  DALI_TEST_CHECK( value );
-  DALI_TEST_EQUALS( value->Get<float>(), 50.0f, Math::MACHINE_EPSILON_100, TEST_LOCATION );
-
-  value = resultMap.Find( "scaleRadius", Property::FLOAT );
-  DALI_TEST_CHECK( value );
-  DALI_TEST_EQUALS( value->Get<float>(), 60.0f, Math::MACHINE_EPSILON_100, TEST_LOCATION );
-
-  value = resultMap.Find( "scaleDimensions", Property::VECTOR3 );
-  DALI_TEST_CHECK( value );
-  DALI_TEST_EQUALS( value->Get<Vector3>(), dimensions, Math::MACHINE_EPSILON_100, TEST_LOCATION );
-
-  value = resultMap.Find( "bevelPercentage", Property::FLOAT );
-  DALI_TEST_CHECK( value );
-  DALI_TEST_EQUALS( value->Get<float>(), 0.3f, Math::MACHINE_EPSILON_100, TEST_LOCATION );
-
-  value = resultMap.Find( "bevelSmoothness", Property::FLOAT );
-  DALI_TEST_CHECK( value );
-  DALI_TEST_EQUALS( value->Get<float>(), 0.6f, Math::MACHINE_EPSILON_100, TEST_LOCATION );
-
-  value = resultMap.Find( "uLightPosition", Property::VECTOR3 );
-  DALI_TEST_CHECK( value );
-  DALI_TEST_EQUALS( value->Get<Vector3>(), Vector3( 5.0f, 10.0f, 15.0f), Math::MACHINE_EPSILON_100, TEST_LOCATION );
-
-  END_TEST;
-}
diff --git a/automated-tests/src/dali-toolkit/utc-Dali-DebugRenderer.cpp b/automated-tests/src/dali-toolkit/utc-Dali-DebugRenderer.cpp
deleted file mode 100644 (file)
index 57543d0..0000000
+++ /dev/null
@@ -1,171 +0,0 @@
-/*
- * Copyright (c) 2016 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.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-#include <dali-toolkit-test-suite-utils.h>
-#include <dali-toolkit/devel-api/controls/renderer-factory/renderer-factory.h>
-#include <dali/public-api/rendering/renderer.h>
-#include <dali/public-api/rendering/geometry.h>
-
-#include <toolkit-environment-variable.h> // for setting environment variable: DALI_DEBUG_RENDERING
-
-using namespace Dali;
-using namespace Dali::Toolkit;
-
-namespace
-{
-const char* TEST_IMAGE_FILE_NAME =  "image_01.jpg";
-const char* TEST_NPATCH_FILE_NAME =  "image_01.9.jpg";
-
-bool IsDebugRenderer( ControlRenderer& renderer )
-{
-  bool isDebugRendererType = false;
-  bool isGeometryLineType = false;
-
-  Property::Map propertyMap;
-  renderer.CreatePropertyMap( propertyMap );
-  Property::Value* typeValue = propertyMap.Find( "rendererType",  Property::STRING );
-  if ( typeValue )
-  {
-    isDebugRendererType = ( typeValue->Get<std::string>() == "DEBUG" );
-  }
-
-  Actor actor = Actor::New();
-  renderer.SetOnStage( actor );
-  Geometry geometry = actor.GetRendererAt( 0 ).GetGeometry();
-  isGeometryLineType = ( geometry.GetGeometryType() == Geometry::LINES );
-
-  return isDebugRendererType && isGeometryLineType;
-}
-}
-
-void dali_debug_renderer_startup(void)
-{
-  test_return_value = TET_UNDEF;
-}
-
-void dali_debug_renderer_cleanup(void)
-{
-  test_return_value = TET_PASS;
-}
-
-int UtcDaliDebugRendererGetRenderer1(void)
-{
-  EnvironmentVariable::SetTestingEnvironmentVariable(true);
-  ToolkitTestApplication application;
-  tet_infoline( "UtcDaliDebugRendererGetRenderer1:  Request renderer with a Property::Map" );
-
-  RendererFactory factory = RendererFactory::Get();
-  DALI_TEST_CHECK( factory );
-
-  // Test that color renderer is replaced with debug renderer
-  Property::Map propertyMap1;
-  propertyMap1.Insert("rendererType",  "COLOR");
-  propertyMap1.Insert("mixColor",  Color::BLUE);
-  ControlRenderer colorRenderer = factory.CreateControlRenderer(propertyMap1);
-  DALI_TEST_CHECK( colorRenderer );
-  DALI_TEST_CHECK( IsDebugRenderer( colorRenderer ) );
-
-  // Test that border renderer is replaced with debug renderer
-  Property::Map propertyMap2;
-  propertyMap2.Insert("rendererType",  "BORDER");
-  propertyMap2.Insert("borderColor",  Color::BLUE);
-  propertyMap2.Insert("borderSize",  2.f);
-  ControlRenderer borderRenderer = factory.CreateControlRenderer(propertyMap2);
-  DALI_TEST_CHECK( borderRenderer );
-  DALI_TEST_CHECK( IsDebugRenderer( borderRenderer ) );
-
-  // Test that gradient renderer is replaced with debug renderer
-  Property::Map propertyMap3;
-  propertyMap3.Insert("rendererType",  "GRADIENT");
-  Vector2 start(-1.f, -1.f);
-  Vector2 end(1.f, 1.f);
-  propertyMap3.Insert("startPosition", start);
-  propertyMap3.Insert("endPosition", end);
-  propertyMap3.Insert("spreadMethod", "REPEAT");
-  Property::Array stopOffsets;
-  stopOffsets.PushBack( 0.2f );
-  stopOffsets.PushBack( 0.8f );
-  propertyMap3.Insert("stopOffset", stopOffsets);
-  Property::Array stopColors;
-  stopColors.PushBack( Color::RED );
-  stopColors.PushBack( Color::GREEN );
-  propertyMap3.Insert("stopColor", stopColors);
-  ControlRenderer gradientRenderer = factory.CreateControlRenderer(propertyMap3);
-  DALI_TEST_CHECK( gradientRenderer );
-  DALI_TEST_CHECK( IsDebugRenderer( gradientRenderer ) );
-
-  // Test that image renderer is replaced with debug renderer
-  Property::Map propertyMap4;
-  propertyMap4.Insert( "rendererType",  "IMAGE" );
-  propertyMap4.Insert( "url",  TEST_IMAGE_FILE_NAME );
-  ControlRenderer imageRenderer = factory.CreateControlRenderer( propertyMap4 );
-  DALI_TEST_CHECK( imageRenderer );
-  DALI_TEST_CHECK( IsDebugRenderer( imageRenderer ) );
-
-  // Test that n patch renderer is replaced with debug renderer
-  Property::Map propertyMap5;
-  propertyMap5.Insert( "rendererType",  "IMAGE" );
-  propertyMap5.Insert( "url",  TEST_NPATCH_FILE_NAME );
-  ControlRenderer nPatchRenderer = factory.CreateControlRenderer( propertyMap4 );
-  DALI_TEST_CHECK( nPatchRenderer );
-  DALI_TEST_CHECK( IsDebugRenderer( nPatchRenderer ) );
-
-  EnvironmentVariable::SetTestingEnvironmentVariable(false);
-  END_TEST;
-}
-
-int UtcDaliDebugRendererGetRenderer2(void)
-{
-  EnvironmentVariable::SetTestingEnvironmentVariable(true);
-  ToolkitTestApplication application;
-  tet_infoline( "UtcDaliDebugRendererGetRenderer2: Request renderer with various parameters" );
-
-  RendererFactory factory = RendererFactory::Get();
-  DALI_TEST_CHECK( factory );
-
-  // Test that color renderer is replaced with debug renderer
-  Dali::Property::Map map;
-  map[ "rendererType" ] = "COLOR";
-  map[ "mixColor" ] = Color::CYAN;
-
-  ControlRenderer colorRenderer = factory.CreateControlRenderer( map);
-  DALI_TEST_CHECK( colorRenderer );
-  DALI_TEST_CHECK( IsDebugRenderer( colorRenderer ) );
-
-  // Test that border renderer is replaced with debug renderer
-  map.Clear();
-  map[ "rendererType" ] = "BORDER";
-  map[ "borderColor"  ] = Color::GREEN;
-  map[ "borderSize"   ] = 2.f;
-  ControlRenderer borderRenderer = factory.CreateControlRenderer( map );
-  DALI_TEST_CHECK( borderRenderer );
-  DALI_TEST_CHECK( IsDebugRenderer( borderRenderer ) );
-
-  // Test that image renderer is replaced with debug renderer
-  Image image = ResourceImage::New(TEST_IMAGE_FILE_NAME);
-  ControlRenderer imageRenderer = factory.CreateControlRenderer( image );
-  DALI_TEST_CHECK( imageRenderer );
-  DALI_TEST_CHECK( IsDebugRenderer( imageRenderer ) );
-
-  // Test that n patch renderer is replaced with debug renderer
-  ControlRenderer nPatchRenderer = factory.CreateControlRenderer( TEST_NPATCH_FILE_NAME, ImageDimensions() );
-  DALI_TEST_CHECK( nPatchRenderer );
-  DALI_TEST_CHECK( IsDebugRenderer( nPatchRenderer ) );
-
-  EnvironmentVariable::SetTestingEnvironmentVariable(false);
-  END_TEST;
-}
diff --git a/automated-tests/src/dali-toolkit/utc-Dali-DebugVisual.cpp b/automated-tests/src/dali-toolkit/utc-Dali-DebugVisual.cpp
new file mode 100644 (file)
index 0000000..f93f2e2
--- /dev/null
@@ -0,0 +1,173 @@
+/*
+ * Copyright (c) 2016 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.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#include <dali-toolkit-test-suite-utils.h>
+#include <dali-toolkit/devel-api/visual-factory/visual-factory.h>
+#include <dali/public-api/rendering/renderer.h>
+#include <dali/public-api/rendering/geometry.h>
+
+#include <dali-toolkit/dali-toolkit.h>
+
+#include <toolkit-environment-variable.h> // for setting environment variable: DALI_DEBUG_RENDERING
+
+using namespace Dali;
+using namespace Dali::Toolkit;
+
+namespace
+{
+const char* TEST_IMAGE_FILE_NAME =  "image_01.jpg";
+const char* TEST_NPATCH_FILE_NAME =  "image_01.9.jpg";
+
+bool IsDebugVisual( Visual::Base& visual )
+{
+  bool isDebugVisualType = false;
+  bool isGeometryLineType = false;
+
+  Property::Map propertyMap;
+  visual.CreatePropertyMap( propertyMap );
+  Property::Value* typeValue = propertyMap.Find( Visual::Property::TYPE,  Property::INTEGER );
+  if ( typeValue )
+  {
+    isDebugVisualType = ( typeValue->Get<int>() == Visual::DEBUG );
+  }
+
+  Actor actor = Actor::New();
+  visual.SetOnStage( actor );
+  Geometry geometry = actor.GetRendererAt( 0 ).GetGeometry();
+  isGeometryLineType = ( geometry.GetType() == Geometry::LINES );
+
+  return isDebugVisualType && isGeometryLineType;
+}
+}
+
+void dali_debug_renderer_startup(void)
+{
+  test_return_value = TET_UNDEF;
+}
+
+void dali_debug_renderer_cleanup(void)
+{
+  test_return_value = TET_PASS;
+}
+
+int UtcDaliDebugVisualGetVisual1(void)
+{
+  EnvironmentVariable::SetTestingEnvironmentVariable(true);
+  ToolkitTestApplication application;
+  tet_infoline( "UtcDaliDebugVisualGetVisual1:  Request visual with a Property::Map" );
+
+  VisualFactory factory = VisualFactory::Get();
+  DALI_TEST_CHECK( factory );
+
+  // Test that color visual is replaced with debug visual
+  Property::Map propertyMap1;
+  propertyMap1.Insert(Visual::Property::TYPE,  Visual::COLOR);
+  propertyMap1.Insert(ColorVisual::Property::MIX_COLOR,  Color::BLUE);
+  Visual::Base colorVisual = factory.CreateVisual(propertyMap1);
+  DALI_TEST_CHECK( colorVisual );
+  DALI_TEST_CHECK( IsDebugVisual( colorVisual ) );
+
+  // Test that border visual is replaced with debug visual
+  Property::Map propertyMap2;
+  propertyMap2.Insert(Visual::Property::TYPE,  Visual::BORDER);
+  propertyMap2.Insert(BorderVisual::Property::COLOR,  Color::BLUE);
+  propertyMap2.Insert(BorderVisual::Property::SIZE,  2.f);
+  Visual::Base borderVisual = factory.CreateVisual(propertyMap2);
+  DALI_TEST_CHECK( borderVisual );
+  DALI_TEST_CHECK( IsDebugVisual( borderVisual ) );
+
+  // Test that gradient visual is replaced with debug visual
+  Property::Map propertyMap3;
+  propertyMap3.Insert(Visual::Property::TYPE,  Visual::GRADIENT);
+  Vector2 start(-1.f, -1.f);
+  Vector2 end(1.f, 1.f);
+  propertyMap3.Insert(GradientVisual::Property::START_POSITION, start);
+  propertyMap3.Insert(GradientVisual::Property::END_POSITION, end);
+  propertyMap3.Insert(GradientVisual::Property::SPREAD_METHOD, GradientVisual::SpreadMethod::REPEAT);
+  Property::Array stopOffsets;
+  stopOffsets.PushBack( 0.2f );
+  stopOffsets.PushBack( 0.8f );
+  propertyMap3.Insert(GradientVisual::Property::STOP_OFFSET, stopOffsets);
+  Property::Array stopColors;
+  stopColors.PushBack( Color::RED );
+  stopColors.PushBack( Color::GREEN );
+  propertyMap3.Insert(GradientVisual::Property::STOP_COLOR, stopColors);
+  Visual::Base gradientVisual = factory.CreateVisual(propertyMap3);
+  DALI_TEST_CHECK( gradientVisual );
+  DALI_TEST_CHECK( IsDebugVisual( gradientVisual ) );
+
+  // Test that image visual is replaced with debug visual
+  Property::Map propertyMap4;
+  propertyMap4.Insert( Visual::Property::TYPE,  Visual::IMAGE );
+  propertyMap4.Insert( ImageVisual::Property::URL,  TEST_IMAGE_FILE_NAME );
+  Visual::Base imageVisual = factory.CreateVisual( propertyMap4 );
+  DALI_TEST_CHECK( imageVisual );
+  DALI_TEST_CHECK( IsDebugVisual( imageVisual ) );
+
+  // Test that n patch visual is replaced with debug visual
+  Property::Map propertyMap5;
+  propertyMap5.Insert( Visual::Property::TYPE,  Visual::IMAGE );
+  propertyMap5.Insert( ImageVisual::Property::URL,  TEST_NPATCH_FILE_NAME );
+  Visual::Base nPatchVisual = factory.CreateVisual( propertyMap4 );
+  DALI_TEST_CHECK( nPatchVisual );
+  DALI_TEST_CHECK( IsDebugVisual( nPatchVisual ) );
+
+  EnvironmentVariable::SetTestingEnvironmentVariable(false);
+  END_TEST;
+}
+
+int UtcDaliDebugVisualGetVisual2(void)
+{
+  EnvironmentVariable::SetTestingEnvironmentVariable(true);
+  ToolkitTestApplication application;
+  tet_infoline( "UtcDaliDebugVisualGetVisual2: Request visual with various parameters" );
+
+  VisualFactory factory = VisualFactory::Get();
+  DALI_TEST_CHECK( factory );
+
+  // Test that color visual is replaced with debug visual
+  Dali::Property::Map map;
+  map[ Visual::Property::TYPE ] = Visual::COLOR;
+  map[ ColorVisual::Property::MIX_COLOR ] = Color::CYAN;
+
+  Visual::Base colorVisual = factory.CreateVisual( map);
+  DALI_TEST_CHECK( colorVisual );
+  DALI_TEST_CHECK( IsDebugVisual( colorVisual ) );
+
+  // Test that border visual is replaced with debug visual
+  map.Clear();
+  map[ Visual::Property::TYPE ] = Visual::BORDER;
+  map[ BorderVisual::Property::COLOR  ] = Color::GREEN;
+  map[ BorderVisual::Property::SIZE   ] = 2.f;
+  Visual::Base borderVisual = factory.CreateVisual( map );
+  DALI_TEST_CHECK( borderVisual );
+  DALI_TEST_CHECK( IsDebugVisual( borderVisual ) );
+
+  // Test that image visual is replaced with debug visual
+  Image image = ResourceImage::New(TEST_IMAGE_FILE_NAME);
+  Visual::Base imageVisual = factory.CreateVisual( image );
+  DALI_TEST_CHECK( imageVisual );
+  DALI_TEST_CHECK( IsDebugVisual( imageVisual ) );
+
+  // Test that n patch visual is replaced with debug visual
+  Visual::Base nPatchVisual = factory.CreateVisual( TEST_NPATCH_FILE_NAME, ImageDimensions() );
+  DALI_TEST_CHECK( nPatchVisual );
+  DALI_TEST_CHECK( IsDebugVisual( nPatchVisual ) );
+
+  EnvironmentVariable::SetTestingEnvironmentVariable(false);
+  END_TEST;
+}
index 6348940..1a9a704 100644 (file)
@@ -445,7 +445,7 @@ int UtcDaliImageViewSyncLoading(void)
     ImageView imageView = ImageView::New();
 
     // Sync loading is used
-    syncLoadingMap[ "url" ] = gImage_600_RGB;
+    syncLoadingMap[ ImageVisual::Property::URL ] = gImage_600_RGB;
     imageView.SetProperty( ImageView::Property::IMAGE, syncLoadingMap );
 
     // BitmapLoader is used, and the loading is started immediately even the actor is not on stage.
@@ -462,9 +462,9 @@ int UtcDaliImageViewSyncLoading(void)
 
     ImageView imageView = ImageView::New( );
     // Sync loading is used
-    syncLoadingMap[ "url" ] = gImage_34_RGBA;
-    syncLoadingMap[ "desiredHeight" ] = 34;
-    syncLoadingMap[ "desiredWidth" ] = 34;
+    syncLoadingMap[ ImageVisual::Property::URL ] = gImage_34_RGBA;
+    syncLoadingMap[ ImageVisual::Property::DESIRED_HEIGHT ] = 34;
+    syncLoadingMap[ ImageVisual::Property::DESIRED_WIDTH ] = 34;
     imageView.SetProperty( ImageView::Property::IMAGE, syncLoadingMap );
 
     // loading is started even if the actor is offStage
index 5c2d497..01926d4 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2016 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.
@@ -46,6 +46,7 @@
 #include <dali-toolkit/devel-api/shader-effects/swirl-effect.h>
 
 using namespace Dali;
+using namespace Dali::Toolkit;
 
 int UtcDaliCreateAlphaDiscardEffect(void)
 {
@@ -54,29 +55,29 @@ int UtcDaliCreateAlphaDiscardEffect(void)
   Property::Map effect = Toolkit::CreateAlphaDiscardEffect();
   DALI_TEST_CHECK( !effect.Empty() );
 
-  Property::Value* customShaderValue = effect.Find( "shader" );
+  Property::Value* customShaderValue = effect.Find( Visual::Property::SHADER );
   DALI_TEST_CHECK( customShaderValue );
 
   Property::Map customShader;
   DALI_TEST_CHECK( customShaderValue->Get( customShader ) );
 
-  Property::Value* vertexShaderValue = customShader.Find( "vertexShader" );
+  Property::Value* vertexShaderValue = customShader.Find( Visual::Shader::Property::VERTEX_SHADER );
   DALI_TEST_CHECK( !vertexShaderValue );
 
-  Property::Value* fragmentShaderValue = customShader.Find( "fragmentShader" );
+  Property::Value* fragmentShaderValue = customShader.Find( Visual::Shader::Property::FRAGMENT_SHADER );
   DALI_TEST_CHECK( fragmentShaderValue );
 
   std::string fragmentShader;
   DALI_TEST_CHECK( fragmentShaderValue->Get( fragmentShader ) );
   DALI_TEST_CHECK( !fragmentShader.empty() );
 
-  Property::Value* gridXValue = customShader.Find( "subdivideGridX" );
+  Property::Value* gridXValue = customShader.Find( Visual::Shader::Property::SUBDIVIDE_GRID_X );
   DALI_TEST_CHECK( !gridXValue );
 
-  Property::Value* gridYValue = customShader.Find( "subdivideGridY" );
+  Property::Value* gridYValue = customShader.Find( Visual::Shader::Property::SUBDIVIDE_GRID_Y );
   DALI_TEST_CHECK( !gridYValue );
 
-  Property::Value* hintsValue = customShader.Find( "hints" );
+  Property::Value* hintsValue = customShader.Find( Visual::Shader::Property::HINTS );
   DALI_TEST_CHECK( !hintsValue );
 
   END_TEST;
@@ -154,46 +155,46 @@ int UtcDaliCreateDissolveEffect( bool highPrecision )
   Property::Map effect = Toolkit::CreateDissolveEffect( highPrecision );
   DALI_TEST_CHECK( !effect.Empty() );
 
-  Property::Value* customShaderValue = effect.Find( "shader" );
+  Property::Value* customShaderValue = effect.Find( Visual::Property::SHADER );
   DALI_TEST_CHECK( customShaderValue );
 
   Property::Map customShader;
   DALI_TEST_CHECK( customShaderValue->Get( customShader ) );
 
-  Property::Value* vertexShaderValue = customShader.Find( "vertexShader" );
+  Property::Value* vertexShaderValue = customShader.Find( Visual::Shader::Property::VERTEX_SHADER );
   DALI_TEST_CHECK( vertexShaderValue );
 
   std::string vertexShader;
   DALI_TEST_CHECK( vertexShaderValue->Get( vertexShader ) );
   DALI_TEST_CHECK( !vertexShader.empty() );
 
-  Property::Value* fragmentShaderValue = customShader.Find( "fragmentShader" );
+  Property::Value* fragmentShaderValue = customShader.Find( Visual::Shader::Property::FRAGMENT_SHADER );
   DALI_TEST_CHECK( fragmentShaderValue );
 
   std::string fragmentShader;
   DALI_TEST_CHECK( fragmentShaderValue->Get( fragmentShader ) );
   DALI_TEST_CHECK( !fragmentShader.empty() );
 
-  Property::Value* gridXValue = customShader.Find( "subdivideGridX" );
+  Property::Value* gridXValue = customShader.Find( Visual::Shader::Property::SUBDIVIDE_GRID_X );
   DALI_TEST_CHECK( gridXValue );
 
   int gridX = 0;
   DALI_TEST_CHECK( gridXValue->Get( gridX ) );
   DALI_TEST_CHECK( gridX > 1 );
 
-  Property::Value* gridYValue = customShader.Find( "subdivideGridY" );
+  Property::Value* gridYValue = customShader.Find( Visual::Shader::Property::SUBDIVIDE_GRID_Y );
   DALI_TEST_CHECK( gridYValue );
 
   int gridY = 0;
   DALI_TEST_CHECK( gridYValue->Get( gridY ) );
   DALI_TEST_CHECK( gridY > 1 );
 
-  Property::Value* hintsValue = customShader.Find( "hints" );
+  Property::Value* hintsValue = customShader.Find( Visual::Shader::Property::HINTS );
   DALI_TEST_CHECK( hintsValue );
 
-  std::string hints;
+  int hints;;
   DALI_TEST_CHECK( hintsValue->Get( hints ) );
-  DALI_TEST_CHECK( hints == "outputIsTransparent" );
+  DALI_TEST_CHECK( hints == Shader::Hint::OUTPUT_IS_TRANSPARENT );
 
   Actor actor = Actor::New();
   Toolkit::DissolveEffectSetCentralLine( actor, Vector2::ONE, Vector2::ONE, 0.0f );
@@ -229,31 +230,31 @@ int UtcDaliCreateDissolveEffect(void)
   Property::Map effect = Toolkit::CreateDistanceFieldEffect();
   DALI_TEST_CHECK( !effect.Empty() );
 
-  Property::Value* customShaderValue = effect.Find( "shader" );
+  Property::Value* customShaderValue = effect.Find( Visual::Property::SHADER );
   DALI_TEST_CHECK( customShaderValue );
 
   Property::Map customShader;
   DALI_TEST_CHECK( customShaderValue->Get( customShader ) );
 
-  Property::Value* vertexShaderValue = customShader.Find( "vertexShader" );
+  Property::Value* vertexShaderValue = customShader.Find( Visual::Shader::Property::VERTEX_SHADER );
   DALI_TEST_CHECK( !vertexShaderValue );
 
-  Property::Value* fragmentShaderValue = customShader.Find( "fragmentShader" );
+  Property::Value* fragmentShaderValue = customShader.Find( Visual::Shader::Property::FRAGMENT_SHADER );
   DALI_TEST_CHECK( fragmentShaderValue );
 
   std::string fragmentShader;
   DALI_TEST_CHECK( fragmentShaderValue->Get( fragmentShader ) );
   DALI_TEST_CHECK( !fragmentShader.empty() );
 
-  Property::Value* gridXValue = customShader.Find( "subdivideGridX" );
+  Property::Value* gridXValue = customShader.Find( Visual::Shader::Property::SUBDIVIDE_GRID_X );
   DALI_TEST_CHECK( !gridXValue );
 
-  Property::Value* hintsValue = customShader.Find( "hints" );
+  Property::Value* hintsValue = customShader.Find( Visual::Shader::Property::HINTS );
   DALI_TEST_CHECK( hintsValue );
 
-  std::string hints;
+  int hints;;
   DALI_TEST_CHECK( hintsValue->Get( hints ) );
-  DALI_TEST_CHECK( hints == "outputIsTransparent" );
+  DALI_TEST_CHECK( hints == Shader::Hint::OUTPUT_IS_TRANSPARENT );
 
   END_TEST;
 }
@@ -265,29 +266,29 @@ int UtcDaliCreateImageRegionEffect(void)
   Property::Map effect = Toolkit::CreateImageRegionEffect();
   DALI_TEST_CHECK( !effect.Empty() );
 
-  Property::Value* customShaderValue = effect.Find( "shader" );
+  Property::Value* customShaderValue = effect.Find( Visual::Property::SHADER );
   DALI_TEST_CHECK( customShaderValue );
 
   Property::Map customShader;
   DALI_TEST_CHECK( customShaderValue->Get( customShader ) );
 
-  Property::Value* vertexShaderValue = customShader.Find( "vertexShader" );
+  Property::Value* vertexShaderValue = customShader.Find( Visual::Shader::Property::VERTEX_SHADER );
   DALI_TEST_CHECK( vertexShaderValue );
 
   std::string vertexShader;
   DALI_TEST_CHECK( vertexShaderValue->Get( vertexShader ) );
   DALI_TEST_CHECK( !vertexShader.empty() );
 
-  Property::Value* fragmentShaderValue = customShader.Find( "fragmentShader" );
+  Property::Value* fragmentShaderValue = customShader.Find( Visual::Shader::Property::FRAGMENT_SHADER );
   DALI_TEST_CHECK( !fragmentShaderValue );
 
-  Property::Value* gridXValue = customShader.Find( "subdivideGridX" );
+  Property::Value* gridXValue = customShader.Find( Visual::Shader::Property::SUBDIVIDE_GRID_X );
   DALI_TEST_CHECK( !gridXValue );
 
-  Property::Value* gridYValue = customShader.Find( "subdivideGridY" );
+  Property::Value* gridYValue = customShader.Find( Visual::Shader::Property::SUBDIVIDE_GRID_Y );
   DALI_TEST_CHECK( !gridYValue );
 
-  Property::Value* hintsValue = customShader.Find( "hints" );
+  Property::Value* hintsValue = customShader.Find( Visual::Shader::Property::HINTS );
   DALI_TEST_CHECK( !hintsValue );
 
   END_TEST;
@@ -332,46 +333,46 @@ int UtcDaliCreateMotionBlurEffect(void)
   Property::Map effect = Toolkit::CreateMotionBlurEffect();
   DALI_TEST_CHECK( !effect.Empty() );
 
-  Property::Value* customShaderValue = effect.Find( "shader" );
+  Property::Value* customShaderValue = effect.Find( Visual::Property::SHADER );
   DALI_TEST_CHECK( customShaderValue );
 
   Property::Map customShader;
   DALI_TEST_CHECK( customShaderValue->Get( customShader ) );
 
-  Property::Value* vertexShaderValue = customShader.Find( "vertexShader" );
+  Property::Value* vertexShaderValue = customShader.Find( Visual::Shader::Property::VERTEX_SHADER );
   DALI_TEST_CHECK( vertexShaderValue );
 
   std::string vertexShader;
   DALI_TEST_CHECK( vertexShaderValue->Get( vertexShader ) );
   DALI_TEST_CHECK( !vertexShader.empty() );
 
-  Property::Value* fragmentShaderValue = customShader.Find( "fragmentShader" );
+  Property::Value* fragmentShaderValue = customShader.Find( Visual::Shader::Property::FRAGMENT_SHADER );
   DALI_TEST_CHECK( fragmentShaderValue );
 
   std::string fragmentShader;
   DALI_TEST_CHECK( fragmentShaderValue->Get( fragmentShader ) );
   DALI_TEST_CHECK( !fragmentShader.empty() );
 
-  Property::Value* gridXValue = customShader.Find( "subdivideGridX" );
+  Property::Value* gridXValue = customShader.Find( Visual::Shader::Property::SUBDIVIDE_GRID_X );
   DALI_TEST_CHECK( gridXValue );
 
   int gridX = 0;
   DALI_TEST_CHECK( gridXValue->Get( gridX ) );
   DALI_TEST_CHECK( gridX > 1 );
 
-  Property::Value* gridYValue = customShader.Find( "subdivideGridY" );
+  Property::Value* gridYValue = customShader.Find( Visual::Shader::Property::SUBDIVIDE_GRID_Y );
   DALI_TEST_CHECK( gridYValue );
 
   int gridY = 0;
   DALI_TEST_CHECK( gridYValue->Get( gridY ) );
   DALI_TEST_CHECK( gridY > 1 );
 
-  Property::Value* hintsValue = customShader.Find( "hints" );
+  Property::Value* hintsValue = customShader.Find( Visual::Shader::Property::HINTS );
   DALI_TEST_CHECK( hintsValue );
 
-  std::string hints;
+  int hints;;
   DALI_TEST_CHECK( hintsValue->Get( hints ) );
-  DALI_TEST_CHECK( hints == "outputIsTransparent" );
+  DALI_TEST_CHECK( hints == Shader::Hint::OUTPUT_IS_TRANSPARENT );
 
   unsigned int sampleCount( 4 );
   Actor actor = Actor::New();
@@ -395,46 +396,46 @@ int UtcDaliCreateMotionStretchEffect(void)
   Property::Map effect = Toolkit::CreateMotionStretchEffect();
   DALI_TEST_CHECK( !effect.Empty() );
 
-  Property::Value* customShaderValue = effect.Find( "shader" );
+  Property::Value* customShaderValue = effect.Find( Visual::Property::SHADER );
   DALI_TEST_CHECK( customShaderValue );
 
   Property::Map customShader;
   DALI_TEST_CHECK( customShaderValue->Get( customShader ) );
 
-  Property::Value* vertexShaderValue = customShader.Find( "vertexShader" );
+  Property::Value* vertexShaderValue = customShader.Find( Visual::Shader::Property::VERTEX_SHADER );
   DALI_TEST_CHECK( vertexShaderValue );
 
   std::string vertexShader;
   DALI_TEST_CHECK( vertexShaderValue->Get( vertexShader ) );
   DALI_TEST_CHECK( !vertexShader.empty() );
 
-  Property::Value* fragmentShaderValue = customShader.Find( "fragmentShader" );
+  Property::Value* fragmentShaderValue = customShader.Find( Visual::Shader::Property::FRAGMENT_SHADER );
   DALI_TEST_CHECK( fragmentShaderValue );
 
   std::string fragmentShader;
   DALI_TEST_CHECK( fragmentShaderValue->Get( fragmentShader ) );
   DALI_TEST_CHECK( !fragmentShader.empty() );
 
-  Property::Value* gridXValue = customShader.Find( "subdivideGridX" );
+  Property::Value* gridXValue = customShader.Find( Visual::Shader::Property::SUBDIVIDE_GRID_X );
   DALI_TEST_CHECK( gridXValue );
 
   int gridX = 0;
   DALI_TEST_CHECK( gridXValue->Get( gridX ) );
   DALI_TEST_CHECK( gridX > 1 );
 
-  Property::Value* gridYValue = customShader.Find( "subdivideGridY" );
+  Property::Value* gridYValue = customShader.Find( Visual::Shader::Property::SUBDIVIDE_GRID_Y );
   DALI_TEST_CHECK( gridYValue );
 
   int gridY = 0;
   DALI_TEST_CHECK( gridYValue->Get( gridY ) );
   DALI_TEST_CHECK( gridY > 1 );
 
-  Property::Value* hintsValue = customShader.Find( "hints" );
+  Property::Value* hintsValue = customShader.Find( Visual::Shader::Property::HINTS );
   DALI_TEST_CHECK( hintsValue );
 
-  std::string hints;
+  int hints;;
   DALI_TEST_CHECK( hintsValue->Get( hints ) );
-  DALI_TEST_CHECK( hints == "outputIsTransparent" );
+  DALI_TEST_CHECK( hints == Shader::Hint::OUTPUT_IS_TRANSPARENT );
 
   Actor actor = Actor::New();
   Toolkit::SetMotionStretchProperties( actor );
index 4f1e000..9cd92ca 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2016 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.
@@ -333,7 +333,7 @@ int UtcDaliSetPropertyP(void)
 
   {
     Property::Map map;
-    map["rendererType"] = "IMAGE";
+    map["visualType"] = "IMAGE";
     map["size"] = Vector2(200, 200);
     map["url"] = "track2.png";
     slider.SetProperty(Slider::Property::TRACK_VISUAL,       map);
index db745a4..2232cd3 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2016 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.
@@ -21,7 +21,7 @@
 #include <dali-toolkit/dali-toolkit.h>
 #include <dali/integration-api/events/touch-event-integ.h>
 #include <dali-toolkit/devel-api/controls/tool-bar/tool-bar.h>
-#include <dali-toolkit/devel-api/controls/renderer-factory/renderer-factory.h>
+#include <dali-toolkit/devel-api/visual-factory/visual-factory.h>
 
 using namespace Dali;
 using namespace Toolkit;
@@ -39,12 +39,12 @@ Actor CreateColorActor( const Vector4& color )
 {
   Actor solidColorActor = Actor::New();
 
-  RendererFactory factory = RendererFactory::Get();
+  VisualFactory factory = VisualFactory::Get();
   Dali::Property::Map map;
-  map[ "rendererType" ] = "COLOR";
-  map[ "mixColor" ] = color;
-  ControlRenderer colorRenderer = factory.CreateControlRenderer( map );
-  colorRenderer.SetOnStage( solidColorActor );
+  map[ Visual::Property::TYPE ] = Visual::COLOR;
+  map[ ColorVisual::Property::MIX_COLOR ] = color;
+  Visual::Base colorVisual = factory.CreateVisual( map );
+  colorVisual.SetOnStage( solidColorActor );
 
   return solidColorActor;
 }
diff --git a/automated-tests/src/dali-toolkit/utc-Dali-Visual.cpp b/automated-tests/src/dali-toolkit/utc-Dali-Visual.cpp
new file mode 100644 (file)
index 0000000..b6080c3
--- /dev/null
@@ -0,0 +1,779 @@
+/*
+ * Copyright (c) 2016 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.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <iostream>
+#include <stdlib.h>
+#include <dali-toolkit-test-suite-utils.h>
+#include <dali/public-api/rendering/renderer.h>
+#include <dali/public-api/rendering/texture-set.h>
+#include <dali/public-api/rendering/shader.h>
+#include <dali-toolkit/devel-api/visual-factory/visual-factory.h>
+#include <dali-toolkit/dali-toolkit.h>
+
+using namespace Dali;
+using namespace Dali::Toolkit;
+
+namespace
+{
+const char* TEST_IMAGE_FILE_NAME =  "gallery_image_01.jpg";
+const char* TEST_NPATCH_FILE_NAME =  "gallery_image_01.9.jpg";
+const char* TEST_SVG_FILE_NAME = TEST_RESOURCE_DIR "/svg1.svg";
+const char* TEST_OBJ_FILE_NAME = TEST_RESOURCE_DIR "/Cube.obj";
+const char* TEST_MTL_FILE_NAME = TEST_RESOURCE_DIR "/ToyRobot-Metal.mtl";
+const char* TEST_RESOURCE_LOCATION = TEST_RESOURCE_DIR "/";
+}
+
+void dali_visual_startup(void)
+{
+  test_return_value = TET_UNDEF;
+}
+
+void dali_visual_cleanup(void)
+{
+  test_return_value = TET_PASS;
+}
+
+int UtcDaliVisualCopyAndAssignment(void)
+{
+  ToolkitTestApplication application;
+  tet_infoline( "UtcDaliVisualCopyAndAssignment" );
+
+  VisualFactory factory = VisualFactory::Get();
+  Property::Map propertyMap;
+  propertyMap.Insert(Visual::Property::TYPE,  Visual::COLOR);
+  propertyMap.Insert(ColorVisual::Property::MIX_COLOR,  Color::BLUE);
+  Visual::Base visual = factory.CreateVisual( propertyMap );
+
+  Visual::Base visualCopy( visual );
+  DALI_TEST_CHECK(visual == visualCopy);
+
+  Visual::Base emptyVisual;
+  Visual::Base emptyVisualCopy( emptyVisual );
+  DALI_TEST_CHECK(emptyVisual == emptyVisualCopy);
+
+  Visual::Base visualEquals;
+  visualEquals = visual;
+  DALI_TEST_CHECK(visual == visualEquals);
+
+  Visual::Base emptyVisualEquals;
+  emptyVisualEquals = emptyVisual;
+  DALI_TEST_CHECK( emptyVisual == emptyVisualEquals );
+
+  //self assignment
+  visual = visual;
+  DALI_TEST_CHECK( visual = visualCopy );
+
+  END_TEST;
+}
+
+int UtcDaliVisualSetGetDepthIndex(void)
+{
+  ToolkitTestApplication application;
+  tet_infoline( "UtcDaliVisualSetDepthIndex" );
+
+  VisualFactory factory = VisualFactory::Get();
+  Property::Map propertyMap;
+  propertyMap.Insert(Visual::Property::TYPE,  Visual::COLOR);
+  propertyMap.Insert(ColorVisual::Property::MIX_COLOR,  Color::BLUE);
+  Visual::Base visual = factory.CreateVisual( propertyMap );
+
+  visual.SetDepthIndex( 1.f );
+
+  Actor actor = Actor::New();
+  actor.SetSize(200.f, 200.f);
+  Stage::GetCurrent().Add( actor );
+  visual.SetOnStage( actor );
+
+  int depthIndex = actor.GetRendererAt(0u).GetProperty<int>( Renderer::Property::DEPTH_INDEX );
+  DALI_TEST_EQUALS( depthIndex, 1, TEST_LOCATION );
+  DALI_TEST_EQUALS( visual.GetDepthIndex(), 1.f, TEST_LOCATION );
+
+  visual.SetDepthIndex( -1.f );
+  depthIndex = actor.GetRendererAt(0u).GetProperty<int>( Renderer::Property::DEPTH_INDEX );
+  DALI_TEST_EQUALS( depthIndex, -1, TEST_LOCATION );
+  DALI_TEST_EQUALS( visual.GetDepthIndex(), -1.f, TEST_LOCATION );
+
+  END_TEST;
+}
+
+int UtcDaliVisualSize(void)
+{
+  ToolkitTestApplication application;
+  tet_infoline( "UtcDaliVisualGetNaturalSize" );
+
+  VisualFactory factory = VisualFactory::Get();
+  Vector2 visualSize( 20.f, 30.f );
+  Vector2 naturalSize;
+
+  // color colorVisual
+  Dali::Property::Map map;
+  map[ Visual::Property::TYPE ] = Visual::COLOR;
+  map[ ColorVisual::Property::MIX_COLOR ] = Color::MAGENTA;
+  Visual::Base colorVisual = factory.CreateVisual( map );
+  colorVisual.SetSize( visualSize );
+  DALI_TEST_EQUALS( colorVisual.GetSize(), visualSize, TEST_LOCATION );
+  colorVisual.GetNaturalSize(naturalSize);
+  DALI_TEST_EQUALS( naturalSize, Vector2::ZERO, TEST_LOCATION );
+
+  // image visual
+  Image image = ResourceImage::New(TEST_IMAGE_FILE_NAME, ImageDimensions(100, 200));
+  Visual::Base imageVisual = factory.CreateVisual( image );
+  imageVisual.SetSize( visualSize );
+  DALI_TEST_EQUALS( imageVisual.GetSize(), visualSize, TEST_LOCATION );
+  imageVisual.GetNaturalSize(naturalSize);
+  DALI_TEST_EQUALS( naturalSize, Vector2(100.f, 200.f), TEST_LOCATION );
+
+  // n patch visual
+  TestPlatformAbstraction& platform = application.GetPlatform();
+  Vector2 testSize(80.f, 160.f);
+  platform.SetClosestImageSize(testSize);
+  image = ResourceImage::New(TEST_NPATCH_FILE_NAME);
+  Visual::Base nPatchVisual = factory.CreateVisual( image );
+  nPatchVisual.SetSize( visualSize );
+  DALI_TEST_EQUALS( nPatchVisual.GetSize(), visualSize, TEST_LOCATION );
+  nPatchVisual.GetNaturalSize(naturalSize);
+  DALI_TEST_EQUALS( naturalSize, testSize, TEST_LOCATION );
+
+  // border visual
+  float borderSize = 5.f;
+  map.Clear();
+  map[ Visual::Property::TYPE ] = Visual::BORDER;
+  map[ BorderVisual::Property::COLOR  ] = Color::RED;
+  map[ BorderVisual::Property::SIZE   ] = borderSize;
+  Visual::Base borderVisual = factory.CreateVisual( map );
+  borderVisual.SetSize( visualSize );
+  DALI_TEST_EQUALS( borderVisual.GetSize(), visualSize, TEST_LOCATION );
+  borderVisual.GetNaturalSize(naturalSize);
+  DALI_TEST_EQUALS( naturalSize, Vector2::ZERO, TEST_LOCATION );
+
+  // gradient gradientVisual
+  Property::Map propertyMap;
+  propertyMap.Insert(Visual::Property::TYPE,  Visual::GRADIENT);
+  Vector2 start(-1.f, -1.f);
+  Vector2 end(1.f, 1.f);
+  propertyMap.Insert(GradientVisual::Property::START_POSITION,   start);
+  propertyMap.Insert(GradientVisual::Property::END_POSITION,   end);
+  propertyMap.Insert(GradientVisual::Property::STOP_OFFSET,   Vector2(0.f, 1.f));
+  Property::Array stopColors;
+  stopColors.PushBack( Color::RED );
+  stopColors.PushBack( Color::GREEN );
+  propertyMap.Insert(GradientVisual::Property::STOP_COLOR,   stopColors);
+  Visual::Base gradientVisual = factory.CreateVisual(propertyMap);
+  gradientVisual.SetSize( visualSize );
+  DALI_TEST_EQUALS( gradientVisual.GetSize(), visualSize, TEST_LOCATION );
+  gradientVisual.GetNaturalSize(naturalSize);
+  DALI_TEST_EQUALS( naturalSize, Vector2::ZERO,TEST_LOCATION );
+
+  //svg visual
+  Visual::Base svgVisual = factory.CreateVisual( TEST_SVG_FILE_NAME, ImageDimensions() );
+  svgVisual.SetSize( visualSize );
+  DALI_TEST_EQUALS( svgVisual.GetSize(), visualSize, TEST_LOCATION );
+  svgVisual.GetNaturalSize(naturalSize);
+  // TEST_SVG_FILE:
+  //  <svg width="100" height="100">
+  //  <circle cx="50" cy="50" r="40" stroke="green" stroke-width="4" fill="yellow" />
+  //  </svg>
+  DALI_TEST_EQUALS( naturalSize, Vector2(100.f, 100.f), TEST_LOCATION );
+  END_TEST;
+}
+
+int UtcDaliVisualSetOnOffStage(void)
+{
+  ToolkitTestApplication application;
+  tet_infoline( "UtcDaliVisualSetDepthIndex" );
+
+  VisualFactory factory = VisualFactory::Get();
+  Property::Map propertyMap;
+  propertyMap.Insert(Visual::Property::TYPE,  Visual::COLOR);
+  propertyMap.Insert(ColorVisual::Property::MIX_COLOR,  Color::BLUE);
+  Visual::Base visual = factory.CreateVisual( propertyMap );
+
+  Actor actor = Actor::New();
+  actor.SetSize(200.f, 200.f);
+  Stage::GetCurrent().Add( actor );
+
+  application.SendNotification();
+  application.Render(0);
+  DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
+
+  visual.SetOnStage( actor );
+  application.SendNotification();
+  application.Render(0);
+  DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
+
+  visual.SetOffStage( actor );
+  application.SendNotification();
+  application.Render(0);
+  DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
+
+  END_TEST;
+}
+
+int UtcDaliVisualRemoveAndReset(void)
+{
+  ToolkitTestApplication application;
+  tet_infoline( "intUtcDaliVisualRemoveAndReset" );
+
+  VisualFactory factory = VisualFactory::Get();
+
+  Actor actor = Actor::New();
+  actor.SetSize(200.f, 200.f);
+  Stage::GetCurrent().Add( actor );
+
+  Visual::Base imageVisual;
+  // test calling RemoveAndReset with an empty handle
+  try
+  {
+    imageVisual.RemoveAndReset( actor );
+    tet_result(TET_PASS);
+  }
+  catch (DaliException& exception)
+  {
+    tet_result(TET_FAIL);
+  }
+
+  Image image = ResourceImage::New(TEST_IMAGE_FILE_NAME, ImageDimensions(100, 200));
+  imageVisual = factory.CreateVisual(image);
+  DALI_TEST_CHECK( imageVisual );
+
+  imageVisual.SetOnStage( actor );
+  application.SendNotification();
+  application.Render(0);
+  DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
+
+  imageVisual.RemoveAndReset( actor );
+  application.SendNotification();
+  application.Render(0);
+  DALI_TEST_CHECK( actor.GetRendererCount() == 0u ); // visual is removed from actor
+  DALI_TEST_CHECK( !imageVisual ); // visual is reset
+
+  END_TEST;
+}
+
+int UtcDaliVisualGetPropertyMap1(void)
+{
+  ToolkitTestApplication application;
+  tet_infoline( "UtcDaliVisualGetPropertyMap1: ColorVisual" );
+
+  VisualFactory factory = VisualFactory::Get();
+  Property::Map propertyMap;
+  propertyMap.Insert(Visual::Property::TYPE,  Visual::COLOR);
+  propertyMap.Insert(ColorVisual::Property::MIX_COLOR,  Color::BLUE);
+  Visual::Base colorVisual = factory.CreateVisual( propertyMap );
+
+  Property::Map resultMap;
+  colorVisual.CreatePropertyMap( resultMap );
+
+  Property::Value* typeValue = resultMap.Find( Visual::Property::TYPE,  Property::INTEGER );
+  DALI_TEST_CHECK( typeValue );
+  DALI_TEST_CHECK( typeValue->Get<int>() == Visual::COLOR );
+
+  Property::Value* colorValue = resultMap.Find( ColorVisual::Property::MIX_COLOR,  Property::VECTOR4 );
+  DALI_TEST_CHECK( colorValue );
+  DALI_TEST_CHECK( colorValue->Get<Vector4>() == Color::BLUE );
+
+  // change the blend color
+  Actor actor;
+  colorVisual.RemoveAndReset( actor );
+  propertyMap[ColorVisual::Property::MIX_COLOR] = Color::CYAN;
+  colorVisual = factory.CreateVisual( propertyMap  );
+  colorVisual.CreatePropertyMap( resultMap );
+
+  colorValue = resultMap.Find( ColorVisual::Property::MIX_COLOR,  Property::VECTOR4 );
+  DALI_TEST_CHECK( colorValue );
+  DALI_TEST_CHECK( colorValue->Get<Vector4>() == Color::CYAN );
+
+  END_TEST;
+}
+
+int UtcDaliVisualGetPropertyMap2(void)
+{
+  ToolkitTestApplication application;
+  tet_infoline( "UtcDaliVisualGetPropertyMap2: BorderVisual" );
+
+  VisualFactory factory = VisualFactory::Get();
+  Property::Map propertyMap;
+  propertyMap.Insert(Visual::Property::TYPE,  Visual::BORDER);
+  propertyMap.Insert(BorderVisual::Property::COLOR,  Color::BLUE);
+  propertyMap.Insert(BorderVisual::Property::SIZE,  5.f);
+  Visual::Base borderVisual = factory.CreateVisual( propertyMap );
+
+  Property::Map resultMap;
+  borderVisual.CreatePropertyMap( resultMap );
+
+  // check the property values from the returned map from visual
+  Property::Value* typeValue = resultMap.Find( Visual::Property::TYPE,  Property::INTEGER );
+  DALI_TEST_CHECK( typeValue );
+  DALI_TEST_CHECK( typeValue->Get<int>() == Visual::BORDER );
+
+  Property::Value* colorValue = resultMap.Find( BorderVisual::Property::COLOR,  Property::VECTOR4 );
+  DALI_TEST_CHECK( colorValue );
+  DALI_TEST_CHECK( colorValue->Get<Vector4>() == Color::BLUE );
+
+  Property::Value* sizeValue = resultMap.Find( BorderVisual::Property::SIZE,  Property::FLOAT );
+  DALI_TEST_CHECK( sizeValue );
+  DALI_TEST_CHECK( sizeValue->Get<float>() == 5.f );
+
+  Property::Map propertyMap1;
+  propertyMap1[ Visual::Property::TYPE ] = Visual::BORDER;
+  propertyMap1[ BorderVisual::Property::COLOR  ] = Color::CYAN;
+  propertyMap1[ BorderVisual::Property::SIZE   ] = 10.0f;
+  borderVisual = factory.CreateVisual( propertyMap1 );
+  borderVisual.CreatePropertyMap( resultMap );
+
+  typeValue = resultMap.Find( Visual::Property::TYPE,  Property::INTEGER );
+  DALI_TEST_CHECK( typeValue );
+  DALI_TEST_CHECK( typeValue->Get<int>() == Visual::BORDER );
+
+  colorValue = resultMap.Find( BorderVisual::Property::COLOR,  Property::VECTOR4 );
+  DALI_TEST_CHECK( colorValue );
+  DALI_TEST_CHECK( colorValue->Get<Vector4>() == Color::CYAN );
+
+  colorValue = resultMap.Find( BorderVisual::Property::SIZE,  Property::FLOAT );
+  DALI_TEST_CHECK( colorValue );
+  DALI_TEST_CHECK( colorValue->Get<float>() == 10.f );
+
+  END_TEST;
+}
+
+int UtcDaliVisualGetPropertyMap3(void)
+{
+  ToolkitTestApplication application;
+  tet_infoline( "UtcDaliVisualGetPropertyMap3: linear GradientVisual" );
+
+  VisualFactory factory = VisualFactory::Get();
+  DALI_TEST_CHECK( factory );
+
+  Property::Map propertyMap;
+  propertyMap.Insert(Visual::Property::TYPE,  Visual::GRADIENT);
+
+  Vector2 start(-1.f, -1.f);
+  Vector2 end(1.f, 1.f);
+  propertyMap.Insert(GradientVisual::Property::START_POSITION, start);
+  propertyMap.Insert(GradientVisual::Property::END_POSITION, end);
+  propertyMap.Insert(GradientVisual::Property::SPREAD_METHOD, GradientVisual::SpreadMethod::REPEAT);
+
+  propertyMap.Insert(GradientVisual::Property::STOP_OFFSET,   Vector2(0.2f, 0.8f));
+
+  Property::Array stopColors;
+  stopColors.PushBack( Color::RED );
+  stopColors.PushBack( Color::GREEN );
+  propertyMap.Insert(GradientVisual::Property::STOP_COLOR,   stopColors);
+
+  Visual::Base gradientVisual = factory.CreateVisual(propertyMap);
+
+  Property::Map resultMap;
+  gradientVisual.CreatePropertyMap( resultMap );
+
+  // check the property values from the returned map from visual
+  Property::Value* value = resultMap.Find( Visual::Property::TYPE,  Property::INTEGER );
+  DALI_TEST_CHECK( value );
+  DALI_TEST_CHECK( value->Get<int>() == Visual::GRADIENT );
+
+  value = resultMap.Find( GradientVisual::Property::UNITS,  Property::INTEGER );
+  DALI_TEST_CHECK( value );
+  DALI_TEST_CHECK( value->Get<int>() == GradientVisual::Units::OBJECT_BOUNDING_BOX );
+
+  value = resultMap.Find( GradientVisual::Property::SPREAD_METHOD,   Property::INTEGER );
+  DALI_TEST_CHECK( value );
+  DALI_TEST_CHECK( value->Get<int>() == GradientVisual::SpreadMethod::REPEAT );
+
+  value = resultMap.Find( GradientVisual::Property::START_POSITION,   Property::VECTOR2 );
+  DALI_TEST_CHECK( value );
+  DALI_TEST_EQUALS( value->Get<Vector2>(), start , Math::MACHINE_EPSILON_100, TEST_LOCATION );
+
+  value = resultMap.Find( GradientVisual::Property::END_POSITION,   Property::VECTOR2 );
+  DALI_TEST_CHECK( value );
+  DALI_TEST_EQUALS( value->Get<Vector2>(), end , Math::MACHINE_EPSILON_100, TEST_LOCATION );
+
+  value = resultMap.Find( GradientVisual::Property::STOP_OFFSET,   Property::ARRAY );
+  DALI_TEST_CHECK( value );
+  Property::Array* offsetArray = value->GetArray();
+  DALI_TEST_CHECK( offsetArray->Count() == 2 );
+  DALI_TEST_EQUALS( offsetArray->GetElementAt(0).Get<float>(), 0.2f , Math::MACHINE_EPSILON_100, TEST_LOCATION );
+  DALI_TEST_EQUALS( offsetArray->GetElementAt(1).Get<float>(), 0.8f , Math::MACHINE_EPSILON_100, TEST_LOCATION );
+
+  value = resultMap.Find( GradientVisual::Property::STOP_COLOR,   Property::ARRAY );
+  DALI_TEST_CHECK( value );
+  Property::Array* colorArray = value->GetArray();
+  DALI_TEST_CHECK( colorArray->Count() == 2 );
+  DALI_TEST_EQUALS( colorArray->GetElementAt(0).Get<Vector4>(), Color::RED , Math::MACHINE_EPSILON_100, TEST_LOCATION );
+  DALI_TEST_EQUALS( colorArray->GetElementAt(1).Get<Vector4>(), Color::GREEN , Math::MACHINE_EPSILON_100, TEST_LOCATION );
+
+  END_TEST;
+}
+
+int UtcDaliVisualGetPropertyMap4(void)
+{
+  ToolkitTestApplication application;
+  tet_infoline( "UtcDaliVisualGetPropertyMap4: radial GradientVisual" );
+
+  VisualFactory factory = VisualFactory::Get();
+  DALI_TEST_CHECK( factory );
+
+  Property::Map propertyMap;
+  propertyMap.Insert(Visual::Property::TYPE,  Visual::GRADIENT);
+
+  Vector2 center(100.f, 100.f);
+  float radius = 100.f;
+  propertyMap.Insert(GradientVisual::Property::UNITS,  GradientVisual::Units::USER_SPACE);
+  propertyMap.Insert(GradientVisual::Property::CENTER,  center);
+  propertyMap.Insert(GradientVisual::Property::RADIUS,  radius);
+  propertyMap.Insert(GradientVisual::Property::STOP_OFFSET,   Vector3(0.1f, 0.3f, 1.1f));
+
+  Property::Array stopColors;
+  stopColors.PushBack( Color::RED );
+  stopColors.PushBack( Color::BLACK );
+  stopColors.PushBack( Color::GREEN );
+  propertyMap.Insert(GradientVisual::Property::STOP_COLOR,   stopColors);
+
+  Visual::Base gradientVisual = factory.CreateVisual(propertyMap);
+  DALI_TEST_CHECK( gradientVisual );
+
+  Property::Map resultMap;
+  gradientVisual.CreatePropertyMap( resultMap );
+
+  // check the property values from the returned map from visual
+  Property::Value* value = resultMap.Find( Visual::Property::TYPE,  Property::INTEGER );
+  DALI_TEST_CHECK( value );
+  DALI_TEST_CHECK( value->Get<int>() == Visual::GRADIENT );
+
+  value = resultMap.Find( GradientVisual::Property::UNITS,  Property::INTEGER );
+  DALI_TEST_CHECK( value );
+  DALI_TEST_CHECK( value->Get<int>() == GradientVisual::Units::USER_SPACE );
+
+  value = resultMap.Find( GradientVisual::Property::SPREAD_METHOD,   Property::INTEGER );
+  DALI_TEST_CHECK( value );
+  DALI_TEST_CHECK( value->Get<int>() == GradientVisual::SpreadMethod::PAD );
+
+  value = resultMap.Find( GradientVisual::Property::CENTER,  Property::VECTOR2 );
+  DALI_TEST_CHECK( value );
+  DALI_TEST_EQUALS( value->Get<Vector2>(), center , Math::MACHINE_EPSILON_100, TEST_LOCATION );
+
+  value = resultMap.Find( GradientVisual::Property::RADIUS,  Property::FLOAT );
+  DALI_TEST_CHECK( value );
+  DALI_TEST_EQUALS( value->Get<float>(), radius , Math::MACHINE_EPSILON_100, TEST_LOCATION );
+
+  value = resultMap.Find( GradientVisual::Property::STOP_OFFSET,   Property::ARRAY );
+  DALI_TEST_CHECK( value );
+  Property::Array* offsetArray = value->GetArray();
+  DALI_TEST_CHECK( offsetArray->Count() == 3 );
+  DALI_TEST_EQUALS( offsetArray->GetElementAt(0).Get<float>(), 0.1f , Math::MACHINE_EPSILON_100, TEST_LOCATION );
+  DALI_TEST_EQUALS( offsetArray->GetElementAt(1).Get<float>(), 0.3f , Math::MACHINE_EPSILON_100, TEST_LOCATION );
+  // any stop value will be clamped to [0.0, 1.0];
+  DALI_TEST_EQUALS( offsetArray->GetElementAt(2).Get<float>(), 1.0f , Math::MACHINE_EPSILON_100, TEST_LOCATION );
+
+  value = resultMap.Find( GradientVisual::Property::STOP_COLOR,   Property::ARRAY );
+  DALI_TEST_CHECK( value );
+  Property::Array* colorArray = value->GetArray();
+  DALI_TEST_CHECK( colorArray->Count() == 3 );
+  DALI_TEST_EQUALS( colorArray->GetElementAt(0).Get<Vector4>(), Color::RED , Math::MACHINE_EPSILON_100, TEST_LOCATION );
+  DALI_TEST_EQUALS( colorArray->GetElementAt(1).Get<Vector4>(), Color::BLACK , Math::MACHINE_EPSILON_100, TEST_LOCATION );
+  DALI_TEST_EQUALS( colorArray->GetElementAt(2).Get<Vector4>(), Color::GREEN , Math::MACHINE_EPSILON_100, TEST_LOCATION );
+
+  END_TEST;
+}
+
+int UtcDaliVisualGetPropertyMap5(void)
+{
+  ToolkitTestApplication application;
+  tet_infoline( "UtcDaliVisualGetPropertyMap5: ImageVisual" );
+
+  VisualFactory factory = VisualFactory::Get();
+  Property::Map propertyMap;
+  propertyMap.Insert( Visual::Property::TYPE,  Visual::IMAGE );
+  propertyMap.Insert( ImageVisual::Property::URL,  TEST_IMAGE_FILE_NAME );
+  propertyMap.Insert( ImageVisual::Property::DESIRED_WIDTH,   20 );
+  propertyMap.Insert( ImageVisual::Property::DESIRED_HEIGHT,   30 );
+  propertyMap.Insert( ImageVisual::Property::FITTING_MODE,   FittingMode::FIT_HEIGHT );
+  propertyMap.Insert( ImageVisual::Property::SAMPLING_MODE,   SamplingMode::BOX_THEN_NEAREST );
+  propertyMap.Insert( "synchronousLoading",   true );
+
+  Visual::Base imageVisual = factory.CreateVisual(propertyMap);
+  DALI_TEST_CHECK( imageVisual );
+
+  Property::Map resultMap;
+  imageVisual.CreatePropertyMap( resultMap );
+
+  // check the property values from the returned map from visual
+  Property::Value* value = resultMap.Find( Visual::Property::TYPE,  Property::INTEGER );
+  DALI_TEST_CHECK( value );
+  DALI_TEST_CHECK( value->Get<int>() == Visual::IMAGE );
+
+  value = resultMap.Find( ImageVisual::Property::URL,  Property::STRING );
+  DALI_TEST_CHECK( value );
+  DALI_TEST_CHECK( value->Get<std::string>() == TEST_IMAGE_FILE_NAME );
+
+  value = resultMap.Find( ImageVisual::Property::FITTING_MODE,   Property::INTEGER );
+  DALI_TEST_CHECK( value );
+  DALI_TEST_CHECK( value->Get<int>() == FittingMode::FIT_HEIGHT );
+
+  value = resultMap.Find( ImageVisual::Property::SAMPLING_MODE,   Property::INTEGER );
+  DALI_TEST_CHECK( value );
+  DALI_TEST_CHECK( value->Get<int>() == SamplingMode::BOX_THEN_NEAREST );
+
+  value = resultMap.Find( ImageVisual::Property::DESIRED_WIDTH,   Property::INTEGER );
+  DALI_TEST_CHECK( value );
+  DALI_TEST_CHECK( value->Get<int>() == 20 );
+
+  value = resultMap.Find( ImageVisual::Property::DESIRED_HEIGHT,   Property::INTEGER );
+  DALI_TEST_CHECK( value );
+  DALI_TEST_CHECK( value->Get<int>() == 30 );
+
+  value = resultMap.Find( "synchronousLoading",   Property::BOOLEAN );
+  DALI_TEST_CHECK( value );
+  DALI_TEST_CHECK( value->Get<bool>() == true );
+
+  // Get an image visual with an image handle, and test the default property values
+  Image image = ResourceImage::New(TEST_IMAGE_FILE_NAME, ImageDimensions(100, 200));
+  imageVisual = factory.CreateVisual(image);
+  imageVisual.CreatePropertyMap( resultMap );
+
+  value = resultMap.Find( Visual::Property::TYPE,  Property::INTEGER );
+  DALI_TEST_CHECK( value );
+  DALI_TEST_CHECK( value->Get<int>() == Visual::IMAGE );
+
+  value = resultMap.Find( ImageVisual::Property::URL,  Property::STRING );
+  DALI_TEST_CHECK( value );
+  DALI_TEST_CHECK( value->Get<std::string>() == TEST_IMAGE_FILE_NAME );
+
+  value = resultMap.Find( ImageVisual::Property::FITTING_MODE,   Property::INTEGER );
+  DALI_TEST_CHECK( value );
+  DALI_TEST_CHECK( value->Get<int>() == FittingMode::SHRINK_TO_FIT );
+
+  value = resultMap.Find( ImageVisual::Property::SAMPLING_MODE,   Property::INTEGER );
+  DALI_TEST_CHECK( value );
+  DALI_TEST_CHECK( value->Get<int>() == SamplingMode::BOX );
+
+  value = resultMap.Find( ImageVisual::Property::DESIRED_WIDTH,   Property::INTEGER );
+  DALI_TEST_CHECK( value );
+  DALI_TEST_CHECK( value->Get<int>() == 100 );
+
+  value = resultMap.Find( ImageVisual::Property::DESIRED_HEIGHT,   Property::INTEGER );
+  DALI_TEST_CHECK( value );
+  DALI_TEST_CHECK( value->Get<int>() == 200 );
+
+  value = resultMap.Find( "synchronousLoading",   Property::BOOLEAN );
+  DALI_TEST_CHECK( value );
+  DALI_TEST_CHECK( value->Get<bool>() == false );
+
+  END_TEST;
+}
+
+int UtcDaliVisualGetPropertyMap6(void)
+{
+  ToolkitTestApplication application;
+  tet_infoline( "UtcDaliVisualGetPropertyMap6: NPatchVisual" );
+
+  VisualFactory factory = VisualFactory::Get();
+  Property::Map propertyMap;
+  propertyMap.Insert( Visual::Property::TYPE,  Visual::IMAGE );
+  propertyMap.Insert( ImageVisual::Property::URL,  TEST_NPATCH_FILE_NAME );
+  propertyMap.Insert( ImageVisual::Property::BORDER_ONLY,  true );
+  Visual::Base nPatchVisual = factory.CreateVisual( propertyMap );
+
+  Property::Map resultMap;
+  nPatchVisual.CreatePropertyMap( resultMap );
+
+  // check the property values from the returned map from visual
+  Property::Value* value = resultMap.Find( Visual::Property::TYPE,  Property::INTEGER );
+  DALI_TEST_CHECK( value );
+  DALI_TEST_CHECK( value->Get<int>() == Visual::IMAGE );
+
+  value = resultMap.Find( ImageVisual::Property::URL,  Property::STRING );
+  DALI_TEST_CHECK( value );
+  DALI_TEST_CHECK( value->Get<std::string>() == TEST_NPATCH_FILE_NAME );
+
+  value = resultMap.Find( ImageVisual::Property::BORDER_ONLY,  Property::BOOLEAN );
+  DALI_TEST_CHECK( value );
+  DALI_TEST_CHECK( value->Get<bool>() );
+
+  END_TEST;
+}
+
+int UtcDaliVisualGetPropertyMap7(void)
+{
+  ToolkitTestApplication application;
+  tet_infoline( "UtcDaliVisualGetPropertyMap7: SvgVisual" );
+
+  // request SvgVisual with a property map
+  VisualFactory factory = VisualFactory::Get();
+  Property::Map propertyMap;
+  propertyMap.Insert( Visual::Property::TYPE,  Visual::IMAGE );
+  propertyMap.Insert( ImageVisual::Property::URL,  TEST_SVG_FILE_NAME );
+  Visual::Base svgVisual = factory.CreateVisual( propertyMap );
+
+  Property::Map resultMap;
+  svgVisual.CreatePropertyMap( resultMap );
+  // check the property values from the returned map from a visual
+  Property::Value* value = resultMap.Find( Visual::Property::TYPE,  Property::INTEGER );
+  DALI_TEST_CHECK( value );
+  DALI_TEST_CHECK( value->Get<int>() == Visual::IMAGE );
+
+  value = resultMap.Find( ImageVisual::Property::URL,  Property::STRING );
+  DALI_TEST_CHECK( value );
+  DALI_TEST_CHECK( value->Get<std::string>() == TEST_SVG_FILE_NAME );
+
+  // request SvgVisual with an URL
+  Visual::Base svgVisual2 = factory.CreateVisual( TEST_SVG_FILE_NAME, ImageDimensions() );
+  resultMap.Clear();
+  svgVisual2.CreatePropertyMap( resultMap );
+  // check the property values from the returned map from a visual
+  value = resultMap.Find( Visual::Property::TYPE,  Property::INTEGER );
+  DALI_TEST_CHECK( value );
+  DALI_TEST_CHECK( value->Get<int>() == Visual::IMAGE );
+
+  value = resultMap.Find( ImageVisual::Property::URL,  Property::STRING );
+  DALI_TEST_CHECK( value );
+  DALI_TEST_CHECK( value->Get<std::string>() == TEST_SVG_FILE_NAME );
+
+  END_TEST;
+}
+
+//Mesh visual
+int UtcDaliVisualGetPropertyMap8(void)
+{
+  ToolkitTestApplication application;
+  tet_infoline( "UtcDaliVisualGetPropertyMap8: MeshVisual" );
+
+  //Request MeshVisual using a property map.
+  VisualFactory factory = VisualFactory::Get();
+  Property::Map propertyMap;
+  propertyMap.Insert( Visual::Property::TYPE, Visual::MESH );
+  propertyMap.Insert( MeshVisual::Property::OBJECT_URL, TEST_OBJ_FILE_NAME );
+  propertyMap.Insert( MeshVisual::Property::MATERIAL_URL, TEST_MTL_FILE_NAME );
+  propertyMap.Insert( MeshVisual::Property::TEXTURES_PATH, TEST_RESOURCE_LOCATION );
+  propertyMap.Insert( MeshVisual::Property::SHADING_MODE, MeshVisual::ShadingMode::TEXTURELESS_WITH_DIFFUSE_LIGHTING );
+  propertyMap.Insert( MeshVisual::Property::LIGHT_POSITION, Vector3( 5.0f, 10.0f, 15.0f) );
+  Visual::Base meshVisual = factory.CreateVisual( propertyMap );
+
+  Property::Map resultMap;
+  meshVisual.CreatePropertyMap( resultMap );
+
+  //Check values in the result map are identical to the initial map's values.
+  Property::Value* value = resultMap.Find( Visual::Property::TYPE, Property::INTEGER );
+  DALI_TEST_CHECK( value );
+  DALI_TEST_EQUALS( value->Get<int>(), (int)Visual::MESH, TEST_LOCATION );
+
+  value = resultMap.Find( MeshVisual::Property::OBJECT_URL, Property::STRING );
+  DALI_TEST_CHECK( value );
+  DALI_TEST_EQUALS( value->Get<std::string>(), TEST_OBJ_FILE_NAME, TEST_LOCATION );
+
+  value = resultMap.Find( MeshVisual::Property::MATERIAL_URL, Property::STRING );
+  DALI_TEST_CHECK( value );
+  DALI_TEST_EQUALS( value->Get<std::string>(), TEST_MTL_FILE_NAME, TEST_LOCATION );
+
+  value = resultMap.Find( MeshVisual::Property::TEXTURES_PATH, Property::STRING );
+  DALI_TEST_CHECK( value );
+  DALI_TEST_EQUALS( value->Get<std::string>(), TEST_RESOURCE_LOCATION, TEST_LOCATION );
+
+  value = resultMap.Find( MeshVisual::Property::SHADING_MODE, Property::INTEGER );
+  DALI_TEST_CHECK( value );
+  DALI_TEST_EQUALS( value->Get<int>(), (int)MeshVisual::ShadingMode::TEXTURELESS_WITH_DIFFUSE_LIGHTING, TEST_LOCATION );
+
+  value = resultMap.Find( MeshVisual::Property::LIGHT_POSITION, Property::VECTOR3 );
+  DALI_TEST_CHECK( value );
+  DALI_TEST_EQUALS( value->Get<Vector3>(), Vector3( 5.0f, 10.0f, 15.0f), Math::MACHINE_EPSILON_100, TEST_LOCATION );
+
+  END_TEST;
+}
+
+//Primitive shape visual
+int UtcDaliVisualGetPropertyMap9(void)
+{
+  ToolkitTestApplication application;
+  tet_infoline( "UtcDaliVisualGetPropertyMap9: PrimitiveVisual" );
+
+  Vector4 color = Vector4( 1.0, 0.8, 0.6, 1.0);
+  Vector3 dimensions = Vector3( 1.0, 2.0, 3.0 );
+
+  //Request PrimitiveVisual using a property map.
+  VisualFactory factory = VisualFactory::Get();
+  Property::Map propertyMap;
+  propertyMap.Insert( Visual::Property::TYPE, Visual::PRIMITIVE );
+  propertyMap.Insert( PrimitiveVisual::Property::SHAPE, PrimitiveVisual::Shape::CUBE );
+  propertyMap.Insert( PrimitiveVisual::Property::COLOR, color );
+  propertyMap.Insert( PrimitiveVisual::Property::SLICES, 10 );
+  propertyMap.Insert( PrimitiveVisual::Property::STACKS, 20 );
+  propertyMap.Insert( PrimitiveVisual::Property::SCALE_TOP_RADIUS, 30.0f );
+  propertyMap.Insert( PrimitiveVisual::Property::SCALE_BOTTOM_RADIUS, 40.0f );
+  propertyMap.Insert( PrimitiveVisual::Property::SCALE_HEIGHT, 50.0f );
+  propertyMap.Insert( PrimitiveVisual::Property::SCALE_RADIUS, 60.0f );
+  propertyMap.Insert( PrimitiveVisual::Property::SCALE_DIMENSIONS, dimensions );
+  propertyMap.Insert( PrimitiveVisual::Property::BEVEL_PERCENTAGE, 0.3f );
+  propertyMap.Insert( PrimitiveVisual::Property::BEVEL_SMOOTHNESS, 0.6f );
+  propertyMap.Insert( PrimitiveVisual::Property::LIGHT_POSITION, Vector3( 5.0f, 10.0f, 15.0f) );
+  Visual::Base primitiveVisual = factory.CreateVisual( propertyMap );
+
+  Property::Map resultMap;
+  primitiveVisual.CreatePropertyMap( resultMap );
+
+  //Check values in the result map are identical to the initial map's values.
+  Property::Value* value = resultMap.Find( Visual::Property::TYPE, Property::INTEGER );
+  DALI_TEST_CHECK( value );
+  DALI_TEST_EQUALS( value->Get<int>(), (int)Visual::PRIMITIVE, TEST_LOCATION );
+
+  value = resultMap.Find( PrimitiveVisual::Property::SHAPE, Property::INTEGER );
+  DALI_TEST_CHECK( value );
+  DALI_TEST_EQUALS( value->Get<int>(), (int)PrimitiveVisual::Shape::CUBE, TEST_LOCATION );
+
+  value = resultMap.Find( PrimitiveVisual::Property::COLOR, Property::VECTOR4 );
+  DALI_TEST_CHECK( value );
+  DALI_TEST_CHECK( value->Get<Vector4>() == color );
+  DALI_TEST_EQUALS( value->Get<Vector4>(), color, Math::MACHINE_EPSILON_100, TEST_LOCATION );
+
+  value = resultMap.Find( PrimitiveVisual::Property::SLICES, Property::INTEGER );
+  DALI_TEST_CHECK( value );
+  DALI_TEST_EQUALS( value->Get<int>(), 10, TEST_LOCATION );
+
+  value = resultMap.Find( PrimitiveVisual::Property::STACKS, Property::INTEGER );
+  DALI_TEST_CHECK( value );
+  DALI_TEST_EQUALS( value->Get<int>(), 20, TEST_LOCATION );
+
+  value = resultMap.Find( PrimitiveVisual::Property::SCALE_TOP_RADIUS, Property::FLOAT );
+  DALI_TEST_CHECK( value );
+  DALI_TEST_EQUALS( value->Get<float>(), 30.0f, Math::MACHINE_EPSILON_100, TEST_LOCATION );
+
+  value = resultMap.Find( PrimitiveVisual::Property::SCALE_BOTTOM_RADIUS, Property::FLOAT );
+  DALI_TEST_CHECK( value );
+  DALI_TEST_EQUALS( value->Get<float>(), 40.0f, Math::MACHINE_EPSILON_100, TEST_LOCATION );
+
+  value = resultMap.Find( PrimitiveVisual::Property::SCALE_HEIGHT, Property::FLOAT );
+  DALI_TEST_CHECK( value );
+  DALI_TEST_EQUALS( value->Get<float>(), 50.0f, Math::MACHINE_EPSILON_100, TEST_LOCATION );
+
+  value = resultMap.Find( PrimitiveVisual::Property::SCALE_RADIUS, Property::FLOAT );
+  DALI_TEST_CHECK( value );
+  DALI_TEST_EQUALS( value->Get<float>(), 60.0f, Math::MACHINE_EPSILON_100, TEST_LOCATION );
+
+  value = resultMap.Find( PrimitiveVisual::Property::SCALE_DIMENSIONS, Property::VECTOR3 );
+  DALI_TEST_CHECK( value );
+  DALI_TEST_EQUALS( value->Get<Vector3>(), dimensions, Math::MACHINE_EPSILON_100, TEST_LOCATION );
+
+  value = resultMap.Find( PrimitiveVisual::Property::BEVEL_PERCENTAGE, Property::FLOAT );
+  DALI_TEST_CHECK( value );
+  DALI_TEST_EQUALS( value->Get<float>(), 0.3f, Math::MACHINE_EPSILON_100, TEST_LOCATION );
+
+  value = resultMap.Find( PrimitiveVisual::Property::BEVEL_SMOOTHNESS, Property::FLOAT );
+  DALI_TEST_CHECK( value );
+  DALI_TEST_EQUALS( value->Get<float>(), 0.6f, Math::MACHINE_EPSILON_100, TEST_LOCATION );
+
+  value = resultMap.Find( PrimitiveVisual::Property::LIGHT_POSITION, Property::VECTOR3 );
+  DALI_TEST_CHECK( value );
+  DALI_TEST_EQUALS( value->Get<Vector3>(), Vector3( 5.0f, 10.0f, 15.0f), Math::MACHINE_EPSILON_100, TEST_LOCATION );
+
+  END_TEST;
+}
@@ -21,7 +21,8 @@
 #include <dali/public-api/rendering/renderer.h>
 #include <dali/public-api/rendering/texture-set.h>
 #include <dali/public-api/rendering/shader.h>
-#include <dali-toolkit/devel-api/controls/renderer-factory/renderer-factory.h>
+#include <dali-toolkit/devel-api/visual-factory/visual-factory.h>
+#include <dali-toolkit/dali-toolkit.h>
 
 using namespace Dali;
 using namespace Dali::Toolkit;
@@ -36,6 +37,7 @@ const char* TEST_NPATCH_FILE_NAME =  "gallery_image_01.9.png";
 const char* TEST_SVG_FILE_NAME = TEST_RESOURCE_DIR "/svg1.svg";
 const char* TEST_OBJ_FILE_NAME = TEST_RESOURCE_DIR "/Cube.obj";
 const char* TEST_MTL_FILE_NAME = TEST_RESOURCE_DIR "/ToyRobot-Metal.mtl";
+const char* TEST_SIMPLE_OBJ_FILE_NAME = TEST_RESOURCE_DIR "/Cube-Points-Only.obj";
 const char* TEST_SIMPLE_MTL_FILE_NAME = TEST_RESOURCE_DIR "/ToyRobot-Metal-Simple.mtl";
 
 Integration::Bitmap* CreateBitmap( unsigned int imageWidth, unsigned int imageHeight, unsigned int initialColor, Pixel::Format pixelFormat )
@@ -172,9 +174,9 @@ Integration::ResourcePointer CustomizeNinePatch( TestApplication& application,
   return resourcePtr;
 }
 
-void TestControlRendererRender( ToolkitTestApplication& application,
+void TestVisualRender( ToolkitTestApplication& application,
                                 Actor& actor,
-                                ControlRenderer& controlRenderer,
+                                Visual::Base& visual,
                                 std::size_t expectedSamplers = 0,
                                 ImageDimensions imageDimensions = ImageDimensions(),
                                 Integration::ResourcePointer resourcePtr = Integration::ResourcePointer())
@@ -187,8 +189,8 @@ void TestControlRendererRender( ToolkitTestApplication& application,
 
   actor.SetSize( 200.f, 200.f );
   Stage::GetCurrent().Add( actor );
-  controlRenderer.SetSize( Vector2(200.f, 200.f) );
-  controlRenderer.SetOnStage( actor );
+  visual.SetSize( Vector2(200.f, 200.f) );
+  visual.SetOnStage( actor );
 
   DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
 
@@ -220,33 +222,33 @@ void TestControlRendererRender( ToolkitTestApplication& application,
 } // namespace
 
 
-void dali_renderer_factory_startup(void)
+void dali_visual_factory_startup(void)
 {
   test_return_value = TET_UNDEF;
 }
 
-void dali_renderer_factory_cleanup(void)
+void dali_visual_factory_cleanup(void)
 {
   test_return_value = TET_PASS;
 }
 
-int UtcDaliRendererFactoryGet(void)
+int UtcDaliVisualFactoryGet(void)
 {
   ToolkitTestApplication application;
-  tet_infoline( "UtcDaliRendererFactory" );
+  tet_infoline( "UtcDaliVisualFactory" );
 
   //Register type
   TypeInfo type;
-  type = TypeRegistry::Get().GetTypeInfo( "RendererFactory" );
+  type = TypeRegistry::Get().GetTypeInfo( "VisualFactory" );
   DALI_TEST_CHECK( type );
   BaseHandle handle = type.CreateInstance();
   DALI_TEST_CHECK( handle );
 
-  RendererFactory factory;
-  factory = RendererFactory::Get();
+  VisualFactory factory;
+  factory = VisualFactory::Get();
   DALI_TEST_CHECK( factory );
 
-  RendererFactory newFactory = RendererFactory::Get();
+  VisualFactory newFactory = VisualFactory::Get();
   DALI_TEST_CHECK( newFactory );
 
   // Check that renderer factory is a singleton
@@ -255,24 +257,24 @@ int UtcDaliRendererFactoryGet(void)
   END_TEST;
 }
 
-int UtcDaliRendererFactoryCopyAndAssignment(void)
+int UtcDaliVisualFactoryCopyAndAssignment(void)
 {
   ToolkitTestApplication application;
-  tet_infoline( "UtcDaliRendererFactoryCopyAndAssignment" );
-  RendererFactory factory = RendererFactory::Get();
+  tet_infoline( "UtcDaliVisualFactoryCopyAndAssignment" );
+  VisualFactory factory = VisualFactory::Get();
 
-  RendererFactory factoryCopy( factory );
+  VisualFactory factoryCopy( factory );
   DALI_TEST_CHECK(factory == factoryCopy);
 
-  RendererFactory emptyFactory;
-  RendererFactory emptyFactoryCopy( emptyFactory );
+  VisualFactory emptyFactory;
+  VisualFactory emptyFactoryCopy( emptyFactory );
   DALI_TEST_CHECK(emptyFactory == emptyFactoryCopy);
 
-  RendererFactory factoryEquals;
+  VisualFactory factoryEquals;
   factoryEquals = factory;
   DALI_TEST_CHECK(factory == factoryEquals);
 
-  RendererFactory emptyFactoryEquals;
+  VisualFactory emptyFactoryEquals;
   emptyFactoryEquals = emptyFactory;
   DALI_TEST_CHECK( emptyFactory == emptyFactoryEquals );
 
@@ -283,24 +285,24 @@ int UtcDaliRendererFactoryCopyAndAssignment(void)
   END_TEST;
 }
 
-int UtcDaliRendererFactoryGetColorRenderer1(void)
+int UtcDaliVisualFactoryGetColorVisual1(void)
 {
   ToolkitTestApplication application;
-  tet_infoline( "UtcDaliRendererFactoryGetColorRenderer1:  Request color renderer with a Property::Map" );
+  tet_infoline( "UtcDaliVisualFactoryGetColorVisual1:  Request color visual with a Property::Map" );
 
-  RendererFactory factory = RendererFactory::Get();
+  VisualFactory factory = VisualFactory::Get();
   DALI_TEST_CHECK( factory );
 
   Property::Map propertyMap;
   Vector4 testColor( 1.f, 0.5f, 0.3f, 0.2f );
-  propertyMap.Insert("rendererType",  "COLOR");
-  propertyMap.Insert("mixColor",  testColor);
+  propertyMap.Insert(Visual::Property::TYPE,  Visual::COLOR);
+  propertyMap.Insert(ColorVisual::Property::MIX_COLOR,  testColor);
 
-  ControlRenderer controlRenderer = factory.CreateControlRenderer(propertyMap);
-  DALI_TEST_CHECK( controlRenderer );
+  Visual::Base visual = factory.CreateVisual(propertyMap);
+  DALI_TEST_CHECK( visual );
 
   Actor actor = Actor::New();
-  TestControlRendererRender( application, actor, controlRenderer );
+  TestVisualRender( application, actor, visual );
 
   Vector4 actualValue(Vector4::ZERO);
   TestGlAbstraction& gl = application.GetGlAbstraction();
@@ -310,58 +312,58 @@ int UtcDaliRendererFactoryGetColorRenderer1(void)
   END_TEST;
 }
 
-int UtcDaliRendererFactoryGetColorRenderer2(void)
+int UtcDaliVisualFactoryGetColorVisual2(void)
 {
   ToolkitTestApplication application;
-  tet_infoline( "UtcDaliRendererFactoryGetColorRenderer2: Request color renderer with a Vector4" );
+  tet_infoline( "UtcDaliVisualFactoryGetColorVisual2: Request color visual with a Vector4" );
 
-  RendererFactory factory = RendererFactory::Get();
+  VisualFactory factory = VisualFactory::Get();
   DALI_TEST_CHECK( factory );
 
   Vector4 testColor( 1.f, 0.5f, 0.3f, 0.2f );
   Dali::Property::Map map;
-  map[ "rendererType" ] = "COLOR";
-  map[ "mixColor" ] = testColor;
-  ControlRenderer controlRenderer = factory.CreateControlRenderer( map );
-  DALI_TEST_CHECK( controlRenderer );
+  map[ Visual::Property::TYPE ] = Visual::COLOR;
+  map[ ColorVisual::Property::MIX_COLOR ] = testColor;
+  Visual::Base visual = factory.CreateVisual( map );
+  DALI_TEST_CHECK( visual );
 
   Actor actor = Actor::New();
-  TestControlRendererRender( application, actor, controlRenderer );
+  TestVisualRender( application, actor, visual );
 
   Vector4 actualValue(Vector4::ZERO);
   TestGlAbstraction& gl = application.GetGlAbstraction();
   DALI_TEST_CHECK( gl.GetUniformValue<Vector4>( "mixColor", actualValue ) );
   DALI_TEST_EQUALS( actualValue, testColor, TEST_LOCATION );
 
-  controlRenderer.SetOffStage( actor );
+  visual.SetOffStage( actor );
   DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
 
   END_TEST;
 }
 
-int UtcDaliRendererFactoryGetBorderRenderer1(void)
+int UtcDaliVisualFactoryGetBorderVisual1(void)
 {
   ToolkitTestApplication application;
-  tet_infoline( "UtcDaliRendererFactoryGetBorderRenderer1:  Request border renderer with a Property::Map" );
+  tet_infoline( "UtcDaliVisualFactoryGetBorderVisual1:  Request border visual with a Property::Map" );
 
-  RendererFactory factory = RendererFactory::Get();
+  VisualFactory factory = VisualFactory::Get();
   DALI_TEST_CHECK( factory );
 
   Property::Map propertyMap;
   Vector4 testColor( 1.f, 0.5f, 0.3f, 0.2f );
   float testSize = 5.f;
-  propertyMap.Insert("rendererType",  "BORDER");
-  propertyMap.Insert("borderColor",  testColor);
-  propertyMap.Insert("borderSize",  testSize);
+  propertyMap.Insert(Visual::Property::TYPE,  Visual::BORDER);
+  propertyMap.Insert(BorderVisual::Property::COLOR,  testColor);
+  propertyMap.Insert(BorderVisual::Property::SIZE,  testSize);
 
-  ControlRenderer controlRenderer = factory.CreateControlRenderer(propertyMap);
-  DALI_TEST_CHECK( controlRenderer );
+  Visual::Base visual = factory.CreateVisual(propertyMap);
+  DALI_TEST_CHECK( visual );
 
   Actor actor = Actor::New();
   actor.SetSize(200.f, 200.f);
   Stage::GetCurrent().Add( actor );
-  controlRenderer.SetSize(Vector2(200.f, 200.f));
-  controlRenderer.SetOnStage( actor );
+  visual.SetSize(Vector2(200.f, 200.f));
+  visual.SetOnStage( actor );
 
   DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
   int blendMode = actor.GetRendererAt(0u).GetProperty<int>( Renderer::Property::BLEND_MODE );
@@ -380,35 +382,35 @@ int UtcDaliRendererFactoryGetBorderRenderer1(void)
   DALI_TEST_CHECK( gl.GetUniformValue<float>( "borderSize", actualSize ) );
   DALI_TEST_EQUALS( actualSize, testSize, TEST_LOCATION );
 
-  controlRenderer.SetOffStage( actor );
+  visual.SetOffStage( actor );
   DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
 
   END_TEST;
 }
 
-int UtcDaliRendererFactoryGetBorderRenderer2(void)
+int UtcDaliVisualFactoryGetBorderVisual2(void)
 {
   ToolkitTestApplication application;
-  tet_infoline( "UtcDaliRendererFactoryGetBorderRenderer2:  Request border renderer with a borderSize and a borderColor" );
+  tet_infoline( "UtcDaliVisualFactoryGetBorderVisual2:  Request border visual with a borderSize and a borderColor" );
 
-  RendererFactory factory = RendererFactory::Get();
+  VisualFactory factory = VisualFactory::Get();
   DALI_TEST_CHECK( factory );
 
   Vector4 testColor( 1.f, 0.5f, 0.3f, 1.f );
   float testSize = 5.f;
 
   Dali::Property::Map propertyMap;
-  propertyMap[ "rendererType" ] = "BORDER";
-  propertyMap[ "borderColor"  ] = testColor;
-  propertyMap[ "borderSize"   ] = testSize;
-  ControlRenderer controlRenderer = factory.CreateControlRenderer( propertyMap );
-  DALI_TEST_CHECK( controlRenderer );
+  propertyMap[ Visual::Property::TYPE ] = Visual::BORDER;
+  propertyMap[ BorderVisual::Property::COLOR  ] = testColor;
+  propertyMap[ BorderVisual::Property::SIZE   ] = testSize;
+  Visual::Base visual = factory.CreateVisual( propertyMap );
+  DALI_TEST_CHECK( visual );
 
   Actor actor = Actor::New();
   actor.SetSize(200.f, 200.f);
   Stage::GetCurrent().Add( actor );
-  controlRenderer.SetSize(Vector2(200.f, 200.f));
-  controlRenderer.SetOnStage( actor );
+  visual.SetSize(Vector2(200.f, 200.f));
+  visual.SetOnStage( actor );
 
   DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
 
@@ -428,16 +430,16 @@ int UtcDaliRendererFactoryGetBorderRenderer2(void)
   DALI_TEST_CHECK( gl.GetUniformValue<float>( "borderSize", actualSize ) );
   DALI_TEST_EQUALS( actualSize, testSize, TEST_LOCATION );
 
-  controlRenderer.SetOffStage( actor );
+  visual.SetOffStage( actor );
 
   // enable the anti-aliasing
   Dali::Property::Map map;
-  map[ "rendererType" ] = "BORDER";
-  map[ "borderColor"  ] = testColor;
-  map[ "borderSize"   ] = testSize;
-  map[ "antiAliasing"   ] = true;
-  controlRenderer = factory.CreateControlRenderer( map );
-  controlRenderer.SetOnStage( actor );
+  map[ Visual::Property::TYPE ] = Visual::BORDER;
+  map[ BorderVisual::Property::COLOR  ] = testColor;
+  map[ BorderVisual::Property::SIZE   ] = testSize;
+  map[ BorderVisual::Property::ANTI_ALIASING   ] = true;
+  visual = factory.CreateVisual( map );
+  visual.SetOnStage( actor );
 
   application.SendNotification();
   application.Render(0);
@@ -447,79 +449,79 @@ int UtcDaliRendererFactoryGetBorderRenderer2(void)
   END_TEST;
 }
 
-int UtcDaliRendererFactoryGetLinearGradientRenderer(void)
+int UtcDaliVisualFactoryGetLinearGradientVisual(void)
 {
   ToolkitTestApplication application;
-  tet_infoline("UtcDaliRendererFactoryGetRadialGradientRenderer");
+  tet_infoline("UtcDaliVisualFactoryGetRadialGradientVisual");
 
-  RendererFactory factory = RendererFactory::Get();
+  VisualFactory factory = VisualFactory::Get();
   DALI_TEST_CHECK( factory );
 
   Property::Map propertyMap;
-  propertyMap.Insert("rendererType",  "GRADIENT");
+  propertyMap.Insert(Visual::Property::TYPE,  Visual::GRADIENT);
 
   Vector2 start(-1.f, -1.f);
   Vector2 end(1.f, 1.f);
-  propertyMap.Insert("startPosition", start);
-  propertyMap.Insert("endPosition", end);
-  propertyMap.Insert("spreadMethod", "REPEAT");
+  propertyMap.Insert(GradientVisual::Property::START_POSITION, start);
+  propertyMap.Insert(GradientVisual::Property::END_POSITION, end);
+  propertyMap.Insert(GradientVisual::Property::SPREAD_METHOD, GradientVisual::SpreadMethod::REPEAT);
 
   Property::Array stopOffsets;
   stopOffsets.PushBack( 0.2f );
   stopOffsets.PushBack( 0.8f );
-  propertyMap.Insert("stopOffset", stopOffsets);
+  propertyMap.Insert(GradientVisual::Property::STOP_OFFSET, stopOffsets);
 
   Property::Array stopColors;
   stopColors.PushBack( Color::RED );
   stopColors.PushBack( Color::GREEN );
-  propertyMap.Insert("stopColor", stopColors);
+  propertyMap.Insert(GradientVisual::Property::STOP_COLOR, stopColors);
 
-  ControlRenderer controlRenderer = factory.CreateControlRenderer(propertyMap);
-  DALI_TEST_CHECK( controlRenderer );
+  Visual::Base visual = factory.CreateVisual(propertyMap);
+  DALI_TEST_CHECK( visual );
 
   // A lookup texture is generated and pass to shader as sampler
   Actor actor = Actor::New();
-  TestControlRendererRender( application, actor, controlRenderer, 1u );
+  TestVisualRender( application, actor, visual, 1u );
 
-  controlRenderer.SetOffStage( actor );
+  visual.SetOffStage( actor );
   DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
 
   END_TEST;
 }
 
-int UtcDaliRendererFactoryGetRadialGradientRenderer(void)
+int UtcDaliVisualFactoryGetRadialGradientVisual(void)
 {
   ToolkitTestApplication application;
-  tet_infoline("UtcDaliRendererFactoryGetRadialGradientRenderer");
+  tet_infoline("UtcDaliVisualFactoryGetRadialGradientVisual");
 
-  RendererFactory factory = RendererFactory::Get();
+  VisualFactory factory = VisualFactory::Get();
   DALI_TEST_CHECK( factory );
 
   Property::Map propertyMap;
-  propertyMap.Insert("rendererType",  "GRADIENT");
+  propertyMap.Insert(Visual::Property::TYPE,  Visual::GRADIENT);
 
   Vector2 center(100.f, 100.f);
   float radius = 100.f;
-  propertyMap.Insert("units",  "USER_SPACE");
-  propertyMap.Insert("center",  center);
-  propertyMap.Insert("radius",  radius);
+  propertyMap.Insert(GradientVisual::Property::UNITS,  GradientVisual::Units::USER_SPACE);
+  propertyMap.Insert(GradientVisual::Property::CENTER,  center);
+  propertyMap.Insert(GradientVisual::Property::RADIUS,  radius);
 
   Property::Array stopOffsets;
   stopOffsets.PushBack( 0.0f );
   stopOffsets.PushBack( 1.f );
-  propertyMap.Insert("stopOffset",   stopOffsets);
+  propertyMap.Insert(GradientVisual::Property::STOP_OFFSET,   stopOffsets);
 
   Property::Array stopColors;
   stopColors.PushBack( Color::RED );
   stopColors.PushBack( Color::GREEN );
-  propertyMap.Insert("stopColor",   stopColors);
+  propertyMap.Insert(GradientVisual::Property::STOP_COLOR,   stopColors);
 
-  ControlRenderer controlRenderer = factory.CreateControlRenderer(propertyMap);
-  DALI_TEST_CHECK( controlRenderer );
+  Visual::Base visual = factory.CreateVisual(propertyMap);
+  DALI_TEST_CHECK( visual );
 
   // A lookup texture is generated and pass to shader as sampler
   Actor actor = Actor::New();
-  TestControlRendererRender( application, actor, controlRenderer, 1u );
+  TestVisualRender( application, actor, visual, 1u );
 
   Matrix3 alignMatrix( radius, 0.f, 0.f, 0.f, radius, 0.f, center.x, center.y, 1.f );
   alignMatrix.Invert();
@@ -532,55 +534,55 @@ int UtcDaliRendererFactoryGetRadialGradientRenderer(void)
   END_TEST;
 }
 
-int UtcDaliRendererFactoryDefaultOffsetsGradientRenderer(void)
+int UtcDaliVisualFactoryDefaultOffsetsGradientVisual(void)
 {
   ToolkitTestApplication application;
-  tet_infoline("UtcDaliRendererFactoryGetRadialGradientRenderer");
+  tet_infoline("UtcDaliVisualFactoryGetRadialGradientVisual");
 
-  RendererFactory factory = RendererFactory::Get();
+  VisualFactory factory = VisualFactory::Get();
   DALI_TEST_CHECK( factory );
 
   Property::Map propertyMap;
-  propertyMap.Insert("rendererType",  "GRADIENT");
+  propertyMap.Insert(Visual::Property::TYPE,  Visual::GRADIENT);
 
   Vector2 start(-1.f, -1.f);
   Vector2 end(1.f, 1.f);
-  propertyMap.Insert("startPosition", start);
-  propertyMap.Insert("endPosition", end);
-  propertyMap.Insert("spreadMethod", "REPEAT");
+  propertyMap.Insert(GradientVisual::Property::START_POSITION, start);
+  propertyMap.Insert(GradientVisual::Property::END_POSITION, end);
+  propertyMap.Insert(GradientVisual::Property::SPREAD_METHOD, GradientVisual::SpreadMethod::REPEAT);
 
   Property::Array stopColors;
   stopColors.PushBack( Color::RED );
   stopColors.PushBack( Color::GREEN );
-  propertyMap.Insert("stopColor", stopColors);
+  propertyMap.Insert(GradientVisual::Property::STOP_COLOR, stopColors);
 
-  ControlRenderer controlRenderer = factory.CreateControlRenderer(propertyMap);
-  DALI_TEST_CHECK( controlRenderer );
+  Visual::Base visual = factory.CreateVisual(propertyMap);
+  DALI_TEST_CHECK( visual );
 
   // A lookup texture is generated and pass to shader as sampler
   Actor actor = Actor::New();
-  TestControlRendererRender( application, actor, controlRenderer, 1u );
+  TestVisualRender( application, actor, visual, 1u );
 
-  controlRenderer.SetOffStage( actor );
+  visual.SetOffStage( actor );
   DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
 
   END_TEST;
 }
 
-int UtcDaliRendererFactoryGetImageRenderer1(void)
+int UtcDaliVisualFactoryGetImageVisual1(void)
 {
   ToolkitTestApplication application;
-  tet_infoline( "UtcDaliRendererFactoryGetImageRenderer1: Request image renderer with a Property::Map" );
+  tet_infoline( "UtcDaliVisualFactoryGetImageVisual1: Request image renderer with a Property::Map" );
 
-  RendererFactory factory = RendererFactory::Get();
+  VisualFactory factory = VisualFactory::Get();
   DALI_TEST_CHECK( factory );
 
   Property::Map propertyMap;
-  propertyMap.Insert( "rendererType",  "IMAGE" );
-  propertyMap.Insert( "url",  TEST_IMAGE_FILE_NAME );
+  propertyMap.Insert( Visual::Property::TYPE,  Visual::IMAGE );
+  propertyMap.Insert( ImageVisual::Property::URL,  TEST_IMAGE_FILE_NAME );
 
-  ControlRenderer controlRenderer = factory.CreateControlRenderer( propertyMap );
-  DALI_TEST_CHECK( controlRenderer );
+  Visual::Base visual = factory.CreateVisual( propertyMap );
+  DALI_TEST_CHECK( visual );
 
   Actor actor = Actor::New();
   // For tesing the LoadResourceFunc is called, a big image size should be set, so the atlasing is not applied.
@@ -595,28 +597,28 @@ int UtcDaliRendererFactoryGetImageRenderer1(void)
   Integration::Bitmap* bitmap = Integration::Bitmap::New( Integration::Bitmap::BITMAP_2D_PACKED_PIXELS, ResourcePolicy::OWNED_DISCARD );
   bitmap->GetPackedPixelsProfile()->ReserveBuffer( Pixel::RGBA8888, width, height,width, height );
 
-  TestControlRendererRender( application, actor, controlRenderer, 1u,
+  TestVisualRender( application, actor, visual, 1u,
                              ImageDimensions(width, height),
                              Integration::ResourcePointer( bitmap ) );
 
   DALI_TEST_EQUALS( textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION );
 
-  controlRenderer.SetOffStage( actor );
+  visual.SetOffStage( actor );
   DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
 
   END_TEST;
 }
 
-int UtcDaliRendererFactoryGetImageRenderer2(void)
+int UtcDaliVisualFactoryGetImageVisual2(void)
 {
   ToolkitTestApplication application;
-  tet_infoline( "UtcDaliRendererFactoryGetImageRenderer2: Request image renderer with an image handle" );
+  tet_infoline( "UtcDaliVisualFactoryGetImageVisual2: Request image renderer with an image handle" );
 
-  RendererFactory factory = RendererFactory::Get();
+  VisualFactory factory = VisualFactory::Get();
   DALI_TEST_CHECK( factory );
 
   Image image = ResourceImage::New(TEST_IMAGE_FILE_NAME);
-  ControlRenderer controlRenderer = factory.CreateControlRenderer( image );
+  Visual::Base visual = factory.CreateVisual( image );
 
   Actor actor = Actor::New();
   // For tesing the LoadResourceFunc is called, a big image size should be set, so the atlasing is not applied.
@@ -632,7 +634,7 @@ int UtcDaliRendererFactoryGetImageRenderer2(void)
   TraceCallStack& textureTrace = gl.GetTextureTrace();
   textureTrace.Enable(true);
 
-  TestControlRendererRender( application, actor, controlRenderer, 1u,
+  TestVisualRender( application, actor, visual, 1u,
                              ImageDimensions(width, height),
                              Integration::ResourcePointer(bitmap) );
 
@@ -641,12 +643,12 @@ int UtcDaliRendererFactoryGetImageRenderer2(void)
   END_TEST;
 }
 
-int UtcDaliRendererFactoryGetNPatchRenderer1(void)
+int UtcDaliVisualFactoryGetNPatchVisual1(void)
 {
   ToolkitTestApplication application;
-  tet_infoline( "UtcDaliRendererFactoryGetNPatchRenderer1: Request 9-patch renderer with a Property::Map" );
+  tet_infoline( "UtcDaliVisualFactoryGetNPatchVisual1: Request 9-patch renderer with a Property::Map" );
 
-  RendererFactory factory = RendererFactory::Get();
+  VisualFactory factory = VisualFactory::Get();
   DALI_TEST_CHECK( factory );
 
   const unsigned int ninePatchImageHeight = 18;
@@ -658,12 +660,12 @@ int UtcDaliRendererFactoryGetNPatchRenderer1(void)
   Integration::ResourcePointer ninePatchResource = CustomizeNinePatch( application, ninePatchImageWidth, ninePatchImageHeight, stretchRangesX, stretchRangesY );
 
   Property::Map propertyMap;
-  propertyMap.Insert( "rendererType",  "IMAGE" );
-  propertyMap.Insert( "url",  TEST_NPATCH_FILE_NAME );
+  propertyMap.Insert( Visual::Property::TYPE,  Visual::IMAGE );
+  propertyMap.Insert( ImageVisual::Property::URL,  TEST_NPATCH_FILE_NAME );
   {
     tet_infoline( "whole grid" );
-    ControlRenderer controlRenderer = factory.CreateControlRenderer( propertyMap );
-    DALI_TEST_CHECK( controlRenderer );
+    Visual::Base visual = factory.CreateVisual( propertyMap );
+    DALI_TEST_CHECK( visual );
 
     Actor actor = Actor::New();
 
@@ -671,18 +673,18 @@ int UtcDaliRendererFactoryGetNPatchRenderer1(void)
     TraceCallStack& textureTrace = gl.GetTextureTrace();
     textureTrace.Enable(true);
 
-    TestControlRendererRender( application, actor, controlRenderer, 1u,
+    TestVisualRender( application, actor, visual, 1u,
                                ImageDimensions(ninePatchImageWidth, ninePatchImageHeight),
                                ninePatchResource );
 
     DALI_TEST_EQUALS( textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION );
   }
 
-  propertyMap.Insert( "borderOnly",  true );
+  propertyMap.Insert( ImageVisual::Property::BORDER_ONLY,  true );
   {
     tet_infoline( "border only" );
-    ControlRenderer controlRenderer = factory.CreateControlRenderer( propertyMap );
-    DALI_TEST_CHECK( controlRenderer );
+    Visual::Base visual = factory.CreateVisual( propertyMap );
+    DALI_TEST_CHECK( visual );
 
     Actor actor = Actor::New();
 
@@ -690,7 +692,7 @@ int UtcDaliRendererFactoryGetNPatchRenderer1(void)
     TraceCallStack& textureTrace = gl.GetTextureTrace();
     textureTrace.Enable(true);
 
-    TestControlRendererRender( application, actor, controlRenderer, 1u,
+    TestVisualRender( application, actor, visual, 1u,
                                ImageDimensions(ninePatchImageWidth, ninePatchImageHeight),
                                ninePatchResource );
 
@@ -700,12 +702,12 @@ int UtcDaliRendererFactoryGetNPatchRenderer1(void)
   END_TEST;
 }
 
-int UtcDaliRendererFactoryGetNPatchRenderer2(void)
+int UtcDaliVisualFactoryGetNPatchVisual2(void)
 {
   ToolkitTestApplication application;
-  tet_infoline( "UtcDaliRendererFactoryGetNPatchRenderer2: Request n-patch renderer with a Property::Map" );
+  tet_infoline( "UtcDaliVisualFactoryGetNPatchVisual2: Request n-patch renderer with a Property::Map" );
 
-  RendererFactory factory = RendererFactory::Get();
+  VisualFactory factory = VisualFactory::Get();
   DALI_TEST_CHECK( factory );
 
   const unsigned int ninePatchImageWidth = 18;
@@ -722,58 +724,58 @@ int UtcDaliRendererFactoryGetNPatchRenderer2(void)
   Integration::ResourcePointer ninePatchResource = CustomizeNinePatch( application, ninePatchImageWidth, ninePatchImageHeight, stretchRangesX, stretchRangesY );
 
   Property::Map propertyMap;
-  propertyMap.Insert( "rendererType",  "IMAGE" );
-  propertyMap.Insert( "url",  TEST_NPATCH_FILE_NAME );
+  propertyMap.Insert( Visual::Property::TYPE,  Visual::IMAGE );
+  propertyMap.Insert( ImageVisual::Property::URL,  TEST_NPATCH_FILE_NAME );
   {
-    ControlRenderer controlRenderer = factory.CreateControlRenderer( propertyMap );
-    DALI_TEST_CHECK( controlRenderer );
+    Visual::Base visual = factory.CreateVisual( propertyMap );
+    DALI_TEST_CHECK( visual );
 
     Actor actor = Actor::New();
     TestGlAbstraction& gl = application.GetGlAbstraction();
     TraceCallStack& textureTrace = gl.GetTextureTrace();
     textureTrace.Enable(true);
 
-    TestControlRendererRender( application, actor, controlRenderer, 1u,
+    TestVisualRender( application, actor, visual, 1u,
                                ImageDimensions(ninePatchImageWidth, ninePatchImageHeight),
                                ninePatchResource );
 
 
     DALI_TEST_EQUALS( textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION );
 
-    controlRenderer.SetOffStage( actor );
+    visual.SetOffStage( actor );
     DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
   }
 
-  propertyMap.Insert( "borderOnly",  true );
+  propertyMap.Insert( ImageVisual::Property::BORDER_ONLY,  true );
   {
     tet_infoline( "border only" );
-    ControlRenderer controlRenderer = factory.CreateControlRenderer( propertyMap );
-    DALI_TEST_CHECK( controlRenderer );
+    Visual::Base visual = factory.CreateVisual( propertyMap );
+    DALI_TEST_CHECK( visual );
 
     TestGlAbstraction& gl = application.GetGlAbstraction();
     TraceCallStack& textureTrace = gl.GetTextureTrace();
     textureTrace.Enable(true);
     Actor actor = Actor::New();
-    TestControlRendererRender( application, actor, controlRenderer, 1u,
+    TestVisualRender( application, actor, visual, 1u,
                                ImageDimensions(ninePatchImageWidth, ninePatchImageHeight),
                                ninePatchResource );
 
 
     DALI_TEST_EQUALS( textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION );
 
-    controlRenderer.SetOffStage( actor );
+    visual.SetOffStage( actor );
     DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
   }
 
   END_TEST;
 }
 
-int UtcDaliRendererFactoryGetNPatchRenderer3(void)
+int UtcDaliVisualFactoryGetNPatchVisual3(void)
 {
   ToolkitTestApplication application;
-  tet_infoline( "UtcDaliRendererFactoryGetNPatchRenderer3: Request 9-patch renderer with an image url" );
+  tet_infoline( "UtcDaliVisualFactoryGetNPatchVisual3: Request 9-patch renderer with an image url" );
 
-  RendererFactory factory = RendererFactory::Get();
+  VisualFactory factory = VisualFactory::Get();
   DALI_TEST_CHECK( factory );
 
   const unsigned int ninePatchImageHeight = 18;
@@ -784,8 +786,8 @@ int UtcDaliRendererFactoryGetNPatchRenderer3(void)
   stretchRangesY.PushBack( Uint16Pair( 4, 5 ) );
   Integration::ResourcePointer ninePatchResource = CustomizeNinePatch( application, ninePatchImageWidth, ninePatchImageHeight, stretchRangesX, stretchRangesY );
 
-  ControlRenderer controlRenderer = factory.CreateControlRenderer( TEST_NPATCH_FILE_NAME, ImageDimensions() );
-  DALI_TEST_CHECK( controlRenderer );
+  Visual::Base visual = factory.CreateVisual( TEST_NPATCH_FILE_NAME, ImageDimensions() );
+  DALI_TEST_CHECK( visual );
 
   Actor actor = Actor::New();
 
@@ -793,7 +795,7 @@ int UtcDaliRendererFactoryGetNPatchRenderer3(void)
   TraceCallStack& textureTrace = gl.GetTextureTrace();
   textureTrace.Enable(true);
 
-  TestControlRendererRender( application, actor, controlRenderer, 1u,
+  TestVisualRender( application, actor, visual, 1u,
                              ImageDimensions(ninePatchImageWidth, ninePatchImageHeight),
                              ninePatchResource );
 
@@ -802,12 +804,12 @@ int UtcDaliRendererFactoryGetNPatchRenderer3(void)
   END_TEST;
 }
 
-int UtcDaliRendererFactoryGetNPatchRenderer4(void)
+int UtcDaliVisualFactoryGetNPatchVisual4(void)
 {
   ToolkitTestApplication application;
-  tet_infoline( "UtcDaliRendererFactoryGetNPatchRenderer4: Request n-patch renderer with an image url" );
+  tet_infoline( "UtcDaliVisualFactoryGetNPatchVisual4: Request n-patch visual with an image url" );
 
-  RendererFactory factory = RendererFactory::Get();
+  VisualFactory factory = VisualFactory::Get();
   DALI_TEST_CHECK( factory );
 
   const unsigned int ninePatchImageHeight = 18;
@@ -823,8 +825,8 @@ int UtcDaliRendererFactoryGetNPatchRenderer4(void)
   stretchRangesY.PushBack( Uint16Pair( 25, 27 ) );
   Integration::ResourcePointer ninePatchResource = CustomizeNinePatch( application, ninePatchImageWidth, ninePatchImageHeight, stretchRangesX, stretchRangesY );
 
-  ControlRenderer controlRenderer = factory.CreateControlRenderer( TEST_NPATCH_FILE_NAME, ImageDimensions() );
-  DALI_TEST_CHECK( controlRenderer );
+  Visual::Base visual = factory.CreateVisual( TEST_NPATCH_FILE_NAME, ImageDimensions() );
+  DALI_TEST_CHECK( visual );
 
   Actor actor = Actor::New();
 
@@ -832,7 +834,7 @@ int UtcDaliRendererFactoryGetNPatchRenderer4(void)
   TraceCallStack& textureTrace = gl.GetTextureTrace();
   textureTrace.Enable(true);
 
-  TestControlRendererRender( application, actor, controlRenderer, 1u,
+  TestVisualRender( application, actor, visual, 1u,
                              ImageDimensions(ninePatchImageWidth, ninePatchImageHeight),
                              ninePatchResource );
 
@@ -841,18 +843,18 @@ int UtcDaliRendererFactoryGetNPatchRenderer4(void)
   END_TEST;
 }
 
-int UtcDaliRendererFactoryGetNPatchRendererN1(void)
+int UtcDaliVisualFactoryGetNPatchVisualN1(void)
 {
   //This should still load but display an error image
 
   ToolkitTestApplication application;
-  tet_infoline( "UtcDaliRendererFactoryGetNPatchRendererN: Request n-patch renderer with an invalid image url" );
+  tet_infoline( "UtcDaliVisualFactoryGetNPatchVisualN: Request n-patch visual with an invalid image url" );
 
-  RendererFactory factory = RendererFactory::Get();
+  VisualFactory factory = VisualFactory::Get();
   DALI_TEST_CHECK( factory );
 
-  ControlRenderer controlRenderer = factory.CreateControlRenderer( "ERROR.9.jpg", ImageDimensions() );
-  DALI_TEST_CHECK( controlRenderer );
+  Visual::Base visual = factory.CreateVisual( "ERROR.9.jpg", ImageDimensions() );
+  DALI_TEST_CHECK( visual );
 
   Actor actor = Actor::New();
 
@@ -864,7 +866,7 @@ int UtcDaliRendererFactoryGetNPatchRendererN1(void)
   TraceCallStack& textureTrace = gl.GetTextureTrace();
   textureTrace.Enable(true);
 
-  TestControlRendererRender( application, actor, controlRenderer, 1u,
+  TestVisualRender( application, actor, visual, 1u,
                              ImageDimensions(),
                              Integration::ResourcePointer(bitmap) );
 
@@ -873,22 +875,22 @@ int UtcDaliRendererFactoryGetNPatchRendererN1(void)
   END_TEST;
 }
 
-int UtcDaliRendererFactoryGetNPatchRendererN2(void)
+int UtcDaliVisualFactoryGetNPatchVisualN2(void)
 {
   //This should still load but display an error image
 
   ToolkitTestApplication application;
-  tet_infoline( "UtcDaliRendererFactoryGetNPatchRendererN: Request n-patch renderer with an invalid Property::Map" );
+  tet_infoline( "UtcDaliVisualFactoryGetNPatchVisualN: Request n-patch visual with an invalid Property::Map" );
 
-  RendererFactory factory = RendererFactory::Get();
+  VisualFactory factory = VisualFactory::Get();
   DALI_TEST_CHECK( factory );
 
   Property::Map propertyMap;
-  propertyMap.Insert( "rendererType",  111 );
-  propertyMap.Insert( "url",  "ERROR.9.jpg" );
+  propertyMap.Insert( Visual::Property::TYPE,  111 );
+  propertyMap.Insert( ImageVisual::Property::URL,  "ERROR.9.jpg" );
 
-  ControlRenderer controlRenderer = factory.CreateControlRenderer( propertyMap );
-  DALI_TEST_CHECK( controlRenderer );
+  Visual::Base visual = factory.CreateVisual( propertyMap );
+  DALI_TEST_CHECK( visual );
 
   Actor actor = Actor::New();
 
@@ -900,7 +902,7 @@ int UtcDaliRendererFactoryGetNPatchRendererN2(void)
   TraceCallStack& textureTrace = gl.GetTextureTrace();
   textureTrace.Enable(true);
 
-  TestControlRendererRender( application, actor, controlRenderer, 1u,
+  TestVisualRender( application, actor, visual, 1u,
                              ImageDimensions(),
                              Integration::ResourcePointer(bitmap) );
 
@@ -909,14 +911,14 @@ int UtcDaliRendererFactoryGetNPatchRendererN2(void)
   END_TEST;
 }
 
-int UtcDaliRendererFactoryGetSvgRenderer(void)
+int UtcDaliVisualFactoryGetSvgVisual(void)
 {
   ToolkitTestApplication application;
-  tet_infoline( "UtcDaliRendererFactoryGetSvgRenderer: Request svg renderer with a svg url" );
+  tet_infoline( "UtcDaliVisualFactoryGetSvgVisual: Request svg visual with a svg url" );
 
-  RendererFactory factory = RendererFactory::Get();
-  ControlRenderer controlRenderer = factory.CreateControlRenderer( TEST_SVG_FILE_NAME, ImageDimensions() );
-  DALI_TEST_CHECK( controlRenderer );
+  VisualFactory factory = VisualFactory::Get();
+  Visual::Base visual = factory.CreateVisual( TEST_SVG_FILE_NAME, ImageDimensions() );
+  DALI_TEST_CHECK( visual );
 
   TestGlAbstraction& gl = application.GetGlAbstraction();
   TraceCallStack& textureTrace = gl.GetTextureTrace();
@@ -925,8 +927,8 @@ int UtcDaliRendererFactoryGetSvgRenderer(void)
   Actor actor = Actor::New();
   actor.SetSize( 200.f, 200.f );
   Stage::GetCurrent().Add( actor );
-  controlRenderer.SetSize( Vector2(200.f, 200.f) );
-  controlRenderer.SetOnStage( actor );
+  visual.SetSize( Vector2(200.f, 200.f) );
+  visual.SetOnStage( actor );
   application.SendNotification();
   application.Render();
 
@@ -949,34 +951,31 @@ int UtcDaliRendererFactoryGetSvgRenderer(void)
   END_TEST;
 }
 
-//Test if mesh loads correctly when supplied with only the bare minimum requirements, an object file.
-int UtcDaliRendererFactoryGetMeshRenderer1(void)
+//Creates a mesh renderer from the given propertyMap and tries to load it on stage in the given application.
+//This is expected to succeed, which will then pass the test.
+void MeshVisualLoadsCorrectlyTest( Property::Map& propertyMap, ToolkitTestApplication& application )
 {
-  ToolkitTestApplication application;
-  tet_infoline( "UtcDaliRendererFactoryGetMeshRenderer1:  Request mesh renderer with a valid object file only" );
-
-  RendererFactory factory = RendererFactory::Get();
+  VisualFactory factory = VisualFactory::Get();
   DALI_TEST_CHECK( factory );
 
-  //Set up renderer properties.
-  Property::Map propertyMap;
-  propertyMap.Insert( "rendererType",  "MESH" );
-  propertyMap.Insert( "objectUrl", TEST_OBJ_FILE_NAME );
-
-  ControlRenderer controlRenderer = factory.CreateControlRenderer( propertyMap );
-  DALI_TEST_CHECK( controlRenderer );
+  //Create a mesh visual.
+  Visual::Base visual = factory.CreateVisual( propertyMap );
+  DALI_TEST_CHECK( visual );
 
+  //Create an actor on stage to house the visual.
   Actor actor = Actor::New();
   actor.SetSize( 200.f, 200.f );
   Stage::GetCurrent().Add( actor );
-  controlRenderer.SetSize( Vector2( 200.f, 200.f ) );
-  controlRenderer.SetOnStage( actor );
+  visual.SetSize( Vector2( 200.f, 200.f ) );
+  visual.SetOnStage( actor );
 
+  //Ensure set on stage.
+  DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION );
+
+  //Attempt to render to queue resource load requests.
   application.SendNotification();
   application.Render( 0 );
 
-  DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
-
   //Tell the platform abstraction that the required resources have been loaded.
   TestPlatformAbstraction& platform = application.GetPlatform();
   platform.SetAllResourceRequestsAsLoaded();
@@ -985,49 +984,39 @@ int UtcDaliRendererFactoryGetMeshRenderer1(void)
   application.SendNotification();
   application.Render( 0 );
 
-  TestGlAbstraction& gl = application.GetGlAbstraction();
-
   Matrix testScaleMatrix;
   testScaleMatrix.SetIdentityAndScale( Vector3( 1.0, -1.0, 1.0 ) );
   Matrix actualScaleMatrix;
 
   //Test to see if the object has been successfully loaded.
-  DALI_TEST_CHECK( gl.GetUniformValue<Matrix>( "uObjectMatrix", actualScaleMatrix ) );
+  DALI_TEST_CHECK( application.GetGlAbstraction().GetUniformValue<Matrix>( "uObjectMatrix", actualScaleMatrix ) );
   DALI_TEST_EQUALS( actualScaleMatrix, testScaleMatrix, Math::MACHINE_EPSILON_100, TEST_LOCATION );
 
-  controlRenderer.SetOffStage( actor );
-  DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
-
-  END_TEST;
+  //Finish by setting off stage, and ensuring this was successful.
+  visual.SetOffStage( actor );
+  DALI_TEST_EQUALS( actor.GetRendererCount(), 0u, TEST_LOCATION );
 }
 
-//Test if mesh loads correctly when supplied with an object file as well as a blank material file and images directory.
-int UtcDaliRendererFactoryGetMeshRenderer2(void)
+//Creates a mesh visual from the given propertyMap and tries to load it on stage in the given application.
+//This is expected to fail, which will then pass the test.
+void MeshVisualDoesNotLoadCorrectlyTest( Property::Map& propertyMap, ToolkitTestApplication& application )
 {
-  ToolkitTestApplication application;
-  tet_infoline( "UtcDaliRendererFactoryGetMeshRenderer2:  Request mesh renderer with blank material file and images directory" );
-
-  RendererFactory factory = RendererFactory::Get();
+  VisualFactory factory = VisualFactory::Get();
   DALI_TEST_CHECK( factory );
 
-  //Set up renderer properties.
-  Property::Map propertyMap;
-  propertyMap.Insert( "rendererType",  "MESH" );
-  propertyMap.Insert( "objectUrl", TEST_OBJ_FILE_NAME );
-  propertyMap.Insert( "materialUrl", "" );
-  propertyMap.Insert( "texturesPath", "" );
-
-  ControlRenderer controlRenderer = factory.CreateControlRenderer( propertyMap );
-  DALI_TEST_CHECK( controlRenderer );
+  //Create a mesh visual.
+  Visual::Base visual = factory.CreateVisual( propertyMap );
+  DALI_TEST_CHECK( visual );
 
-  //Add renderer to an actor on stage.
+  //Create an actor on stage to house the visual.
   Actor actor = Actor::New();
   actor.SetSize( 200.f, 200.f );
   Stage::GetCurrent().Add( actor );
-  controlRenderer.SetSize( Vector2( 200.f, 200.f ) );
-  controlRenderer.SetOnStage( actor );
+  visual.SetSize( Vector2( 200.f, 200.f ) );
+  visual.SetOnStage( actor );
 
-  DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
+  //Ensure set on stage.
+  DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION );
 
   //Attempt to render to queue resource load requests.
   application.SendNotification();
@@ -1041,310 +1030,275 @@ int UtcDaliRendererFactoryGetMeshRenderer2(void)
   application.SendNotification();
   application.Render( 0 );
 
-  TestGlAbstraction& gl = application.GetGlAbstraction();
-
-  Matrix testScaleMatrix;
-  testScaleMatrix.SetIdentityAndScale( Vector3( 1.0, -1.0, 1.0 ) );
-  Matrix actualScaleMatrix;
-
-  //Test to see if the object has been successfully loaded.
-  DALI_TEST_CHECK( gl.GetUniformValue<Matrix>( "uObjectMatrix", actualScaleMatrix ) );
-  DALI_TEST_EQUALS( actualScaleMatrix, testScaleMatrix, Math::MACHINE_EPSILON_100, TEST_LOCATION );
-
-  controlRenderer.SetOffStage( actor );
-  DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
+  //Test to see if the object has not been loaded, as expected.
+  Matrix scaleMatrix;
+  DALI_TEST_CHECK( !application.GetGlAbstraction().GetUniformValue<Matrix>( "uObjectMatrix", scaleMatrix ) );
 
-  END_TEST;
+  //Finish by setting off stage, and ensuring this was successful.
+  visual.SetOffStage( actor );
+  DALI_TEST_EQUALS( actor.GetRendererCount(), 0u, TEST_LOCATION );
 }
 
-//Test if mesh loads correctly when supplied with all parameters, an object file, a material file and a directory location.
-int UtcDaliRendererFactoryGetMeshRenderer3(void)
+//Test if mesh loads correctly when supplied with only the bare minimum requirements, an object file.
+int UtcDaliVisualFactoryGetMeshVisual1(void)
 {
+  //Set up test application first, so everything else can be handled.
   ToolkitTestApplication application;
-  tet_infoline( "UtcDaliRendererFactoryGetMeshRenderer3:  Request mesh renderer with all parameters correct" );
-
-  RendererFactory factory = RendererFactory::Get();
-  DALI_TEST_CHECK( factory );
 
-  //Set up renderer properties.
-  Property::Map propertyMap;
-  propertyMap.Insert( "rendererType",  "MESH" );
-  propertyMap.Insert( "objectUrl", TEST_OBJ_FILE_NAME );
-  propertyMap.Insert( "materialUrl", TEST_MTL_FILE_NAME );
-  propertyMap.Insert( "texturesPath", TEST_RESOURCE_DIR "/" );
+  tet_infoline( "UtcDaliVisualFactoryGetMeshVisual1:  Request mesh visual with a valid object file only" );
 
-  ControlRenderer controlRenderer = factory.CreateControlRenderer( propertyMap );
-  DALI_TEST_CHECK( controlRenderer );
 
-  //Add renderer to an actor on stage.
-  Actor actor = Actor::New();
-  actor.SetSize( 200.f, 200.f );
-  Stage::GetCurrent().Add( actor );
-  controlRenderer.SetSize( Vector2( 200.f, 200.f ) );
-  controlRenderer.SetOnStage( actor );
-
-  DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
+  //Set up visual properties.
+  Property::Map propertyMap;
+  propertyMap.Insert( Visual::Property::TYPE,  Visual::MESH );
+  propertyMap.Insert( MeshVisual::Property::OBJECT_URL, TEST_OBJ_FILE_NAME );
 
-  //Attempt to render to queue resource load requests.
-  application.SendNotification();
-  application.Render( 0 );
+  //Test to see if mesh loads correctly.
+  MeshVisualLoadsCorrectlyTest( propertyMap, application );
 
-  //Tell the platform abstraction that the required resources have been loaded.
-  TestPlatformAbstraction& platform = application.GetPlatform();
-  platform.SetAllResourceRequestsAsLoaded();
+  END_TEST;
+}
 
-  //Render again to upload the now-loaded textures.
-  application.SendNotification();
-  application.Render( 0 );
 
-  TestGlAbstraction& gl = application.GetGlAbstraction();
+//Test if mesh loads correctly when supplied with an object file as well as a blank material file and images directory.
+int UtcDaliVisualFactoryGetMeshVisual2(void)
+{
+  //Set up test application first, so everything else can be handled.
+  ToolkitTestApplication application;
 
-  Matrix testScaleMatrix;
-  testScaleMatrix.SetIdentityAndScale( Vector3( 1.0, -1.0, 1.0 ) );
-  Matrix actualScaleMatrix;
+  tet_infoline( "UtcDaliVisualFactoryGetMeshVisual2:  Request mesh visual with blank material file and images directory" );
 
-  //Test to see if the object has been successfully loaded.
-  DALI_TEST_CHECK( gl.GetUniformValue<Matrix>( "uObjectMatrix", actualScaleMatrix ) );
-  DALI_TEST_EQUALS( actualScaleMatrix, testScaleMatrix, Math::MACHINE_EPSILON_100, TEST_LOCATION );
+  //Set up visual properties.
+  Property::Map propertyMap;
+  propertyMap.Insert( Visual::Property::TYPE, Visual::MESH );
+  propertyMap.Insert( MeshVisual::Property::OBJECT_URL, TEST_OBJ_FILE_NAME );
+  propertyMap.Insert( MeshVisual::Property::MATERIAL_URL, "" );
+  propertyMap.Insert( MeshVisual::Property::TEXTURES_PATH, "" );
 
-  controlRenderer.SetOffStage( actor );
-  DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
+  //Test to see if mesh loads correctly.
+  MeshVisualLoadsCorrectlyTest( propertyMap, application );
 
   END_TEST;
 }
 
-//Test if mesh renderer can load a correctly supplied mesh without a normal map or gloss map in the material file.
-int UtcDaliRendererFactoryGetMeshRenderer4(void)
+//Test if mesh loads correctly when supplied with all main parameters, an object file, a material file and a directory location.
+int UtcDaliVisualFactoryGetMeshVisual3(void)
 {
+  //Set up test application first, so everything else can be handled.
   ToolkitTestApplication application;
-  tet_infoline( "UtcDaliRendererFactoryGetMeshRenderer4:  Request mesh renderer with diffuse texture but not normal or gloss." );
 
-  RendererFactory factory = RendererFactory::Get();
-  DALI_TEST_CHECK( factory );
+  tet_infoline( "UtcDaliVisualFactoryGetMeshVisual3:  Request mesh visual with all parameters correct" );
 
-  //Set up renderer properties.
+  //Set up visual properties.
   Property::Map propertyMap;
-  propertyMap.Insert( "rendererType",  "MESH" );
-  propertyMap.Insert( "objectUrl", TEST_OBJ_FILE_NAME );
-  propertyMap.Insert( "materialUrl", TEST_SIMPLE_MTL_FILE_NAME );
-  propertyMap.Insert( "texturesPath", TEST_RESOURCE_DIR "/" );
-
-  ControlRenderer controlRenderer = factory.CreateControlRenderer( propertyMap );
-  DALI_TEST_CHECK( controlRenderer );
+  propertyMap.Insert( Visual::Property::TYPE, Visual::MESH );
+  propertyMap.Insert( MeshVisual::Property::OBJECT_URL, TEST_OBJ_FILE_NAME );
+  propertyMap.Insert( MeshVisual::Property::MATERIAL_URL, TEST_MTL_FILE_NAME );
+  propertyMap.Insert( MeshVisual::Property::TEXTURES_PATH, TEST_RESOURCE_DIR "/" );
 
-  //Add renderer to an actor on stage.
-  Actor actor = Actor::New();
-  actor.SetSize( 200.f, 200.f );
-  Stage::GetCurrent().Add( actor );
-  controlRenderer.SetSize( Vector2( 200.f, 200.f ) );
-  controlRenderer.SetOnStage( actor );
+  //Test to see if mesh loads correctly.
+  MeshVisualLoadsCorrectlyTest( propertyMap, application );
 
-  DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
-
-  //Attempt to render to queue resource load requests.
-  application.SendNotification();
-  application.Render( 0 );
+  END_TEST;
+}
 
-  //Tell the platform abstraction that the required resources have been loaded.
-  TestPlatformAbstraction& platform = application.GetPlatform();
-  platform.SetAllResourceRequestsAsLoaded();
+//Test if mesh visual can load a correctly supplied mesh without a normal map or gloss map in the material file.
+int UtcDaliVisualFactoryGetMeshVisual4(void)
+{
+  //Set up test application first, so everything else can be handled.
+  ToolkitTestApplication application;
 
-  //Render again to upload the now-loaded textures.
-  application.SendNotification();
-  application.Render( 0 );
+  tet_infoline( "UtcDaliVisualFactoryGetMeshVisual4:  Request mesh visual with diffuse texture but not normal or gloss." );
 
-  TestGlAbstraction& gl = application.GetGlAbstraction();
 
-  Matrix testScaleMatrix;
-  testScaleMatrix.SetIdentityAndScale( Vector3( 1.0, -1.0, 1.0 ) );
-  Matrix actualScaleMatrix;
+  //Set up visual properties.
+  Property::Map propertyMap;
+  propertyMap.Insert( Visual::Property::TYPE, Visual::MESH );
+  propertyMap.Insert( MeshVisual::Property::OBJECT_URL, TEST_OBJ_FILE_NAME );
+  propertyMap.Insert( MeshVisual::Property::MATERIAL_URL, TEST_SIMPLE_MTL_FILE_NAME );
+  propertyMap.Insert( MeshVisual::Property::TEXTURES_PATH, TEST_RESOURCE_DIR "/" );
 
-  //Test to see if the object has been successfully loaded.
-  DALI_TEST_CHECK( gl.GetUniformValue<Matrix>( "uObjectMatrix", actualScaleMatrix ) );
-  DALI_TEST_EQUALS( actualScaleMatrix, testScaleMatrix, Math::MACHINE_EPSILON_100, TEST_LOCATION );
+  //Test to see if mesh loads correctly.
+  MeshVisualLoadsCorrectlyTest( propertyMap, application );
 
-  controlRenderer.SetOffStage( actor );
-  DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
 
   END_TEST;
 }
 
-//Test if mesh renderer handles the case of lacking an object file.
-int UtcDaliRendererFactoryGetMeshRendererN1(void)
+//Test if mesh visual can load when made to use diffuse textures only.
+int UtcDaliVisualFactoryGetMeshVisual5(void)
 {
+  //Set up test application first, so everything else can be handled.
   ToolkitTestApplication application;
-  tet_infoline( "UtcDaliRendererFactoryGetMeshRendererN1:  Request mesh renderer without object file" );
 
-  RendererFactory factory = RendererFactory::Get();
-  DALI_TEST_CHECK( factory );
+  tet_infoline( "UtcDaliVisualFactoryGetMeshVisual5:  Request mesh visual and make it only use diffuse textures." );
 
-  //Set up renderer properties.
+  //Set up visual properties.
   Property::Map propertyMap;
-  propertyMap.Insert( "rendererType",  "MESH" );
-  propertyMap.Insert( "materialUrl", TEST_MTL_FILE_NAME );
-  propertyMap.Insert( "texturesPath", TEST_RESOURCE_DIR "/" );
+  propertyMap.Insert( Visual::Property::TYPE, Visual::MESH );
+  propertyMap.Insert( MeshVisual::Property::OBJECT_URL, TEST_OBJ_FILE_NAME );
+  propertyMap.Insert( MeshVisual::Property::MATERIAL_URL, TEST_MTL_FILE_NAME );
+  propertyMap.Insert( MeshVisual::Property::TEXTURES_PATH, TEST_RESOURCE_DIR "/" );
+  propertyMap.Insert( MeshVisual::Property::SHADING_MODE, MeshVisual::ShadingMode::TEXTURED_WITH_SPECULAR_LIGHTING );
 
-  ControlRenderer controlRenderer = factory.CreateControlRenderer( propertyMap );
-  DALI_TEST_CHECK( controlRenderer );
+  //Test to see if mesh loads correctly.
+  MeshVisualLoadsCorrectlyTest( propertyMap, application );
 
-  //Add renderer to an actor on stage.
-  Actor actor = Actor::New();
-  actor.SetSize( 200.f, 200.f );
-  Stage::GetCurrent().Add( actor );
-  controlRenderer.SetSize( Vector2( 200.f, 200.f ) );
-  controlRenderer.SetOnStage( actor );
 
-  DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
+  END_TEST;
+}
 
-  //Attempt to render to queue resource load requests.
-  application.SendNotification();
-  application.Render( 0 );
+//Test if mesh visual can load when made to not use the supplied textures.
+int UtcDaliVisualFactoryGetMeshVisual6(void)
+{
+  //Set up test application first, so everything else can be handled.
+  ToolkitTestApplication application;
 
-  //Tell the platform abstraction that the required resources have been loaded.
-  TestPlatformAbstraction& platform = application.GetPlatform();
-  platform.SetAllResourceRequestsAsLoaded();
+  tet_infoline( "UtcDaliVisualFactoryGetMeshVisual6:  Request mesh visual and make it not use any textures." );
 
-  //Render again to upload the now-loaded textures.
-  application.SendNotification();
-  application.Render( 0 );
+  //Set up visual properties.
+  Property::Map propertyMap;
+  propertyMap.Insert( Visual::Property::TYPE, Visual::MESH );
+  propertyMap.Insert( MeshVisual::Property::OBJECT_URL, TEST_OBJ_FILE_NAME );
+  propertyMap.Insert( MeshVisual::Property::MATERIAL_URL, TEST_MTL_FILE_NAME );
+  propertyMap.Insert( MeshVisual::Property::TEXTURES_PATH, TEST_RESOURCE_DIR "/" );
+  propertyMap.Insert( MeshVisual::Property::SHADING_MODE, MeshVisual::ShadingMode::TEXTURELESS_WITH_DIFFUSE_LIGHTING );
 
-  TestGlAbstraction& gl = application.GetGlAbstraction();
+  //Test to see if mesh loads correctly.
+  MeshVisualLoadsCorrectlyTest( propertyMap, application );
 
-  //Test to see if the object has not been loaded, as expected.
-  Matrix scaleMatrix;
-  DALI_TEST_CHECK( ! gl.GetUniformValue<Matrix>( "uObjectMatrix", scaleMatrix ) );
+  END_TEST;
+}
+//Test if mesh visual loads correctly when light position is manually set.
+int UtcDaliVisualFactoryGetMeshVisual7(void)
+{
+  //Set up test application first, so everything else can be handled.
+  ToolkitTestApplication application;
 
-  controlRenderer.SetOffStage( actor );
-  DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
+
+  tet_infoline( "UtcDaliVisualFactoryGetMeshVisual7:  Request mesh visual with custom light position." );
+
+  //Set up visual properties.
+  Property::Map propertyMap;
+  propertyMap.Insert( Visual::Property::TYPE, Visual::MESH );
+  propertyMap.Insert( MeshVisual::Property::OBJECT_URL, TEST_OBJ_FILE_NAME );
+  propertyMap.Insert( MeshVisual::Property::MATERIAL_URL, TEST_MTL_FILE_NAME );
+  propertyMap.Insert( MeshVisual::Property::TEXTURES_PATH, TEST_RESOURCE_DIR "/" );
+  propertyMap.Insert( MeshVisual::Property::LIGHT_POSITION, Vector3( 0.0, 1.0, 2.0 ) );
+
+  //Test to see if mesh loads correctly.
+  MeshVisualLoadsCorrectlyTest( propertyMap, application );
 
   END_TEST;
 }
 
-//Test if mesh renderer handles the case of being passed invalid material and images urls.
-int UtcDaliRendererFactoryGetMeshRendererN2(void)
+//Test if mesh visual loads correctly when supplied an object file without face normals or texture points.
+//Note that this notably tests object loader functionality.
+int UtcDaliVisualFactoryGetMeshVisual8(void)
 {
+  //Set up test application first, so everything else can be handled.
   ToolkitTestApplication application;
-  tet_infoline( "UtcDaliRendererFactoryGetMeshRendererN2:  Request mesh renderer with invalid material and images urls" );
 
-  RendererFactory factory = RendererFactory::Get();
-  DALI_TEST_CHECK( factory );
+  tet_infoline( "UtcDaliVisualFactoryGetMeshVisual5:  Request mesh visual with normal-less object file." );
 
-  //Set up renderer properties.
+  //Set up visual properties.
   Property::Map propertyMap;
-  propertyMap.Insert( "rendererType",  "MESH" );
-  propertyMap.Insert( "objectUrl", TEST_OBJ_FILE_NAME );
-  propertyMap.Insert( "materialUrl", "invalid" );
-  propertyMap.Insert( "texturesPath", "also invalid" );
-
-  ControlRenderer controlRenderer = factory.CreateControlRenderer( propertyMap );
-  DALI_TEST_CHECK( controlRenderer );
+  propertyMap.Insert( Visual::Property::TYPE, Visual::MESH );
+  propertyMap.Insert( MeshVisual::Property::OBJECT_URL, TEST_SIMPLE_OBJ_FILE_NAME );
+  propertyMap.Insert( MeshVisual::Property::MATERIAL_URL, TEST_MTL_FILE_NAME );
+  propertyMap.Insert( MeshVisual::Property::TEXTURES_PATH, TEST_RESOURCE_DIR "/" );
 
-  //Add renderer to an actor on stage.
-  Actor actor = Actor::New();
-  actor.SetSize( 200.f, 200.f );
-  Stage::GetCurrent().Add( actor );
-  controlRenderer.SetSize( Vector2( 200.f, 200.f ) );
-  controlRenderer.SetOnStage( actor );
+  //Test to see if mesh loads correctly.
+  MeshVisualLoadsCorrectlyTest( propertyMap, application );
 
-  DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
-
-  //Attempt to render to queue resource load requests.
-  application.SendNotification();
-  application.Render( 0 );
+  END_TEST;
+}
 
-  //Tell the platform abstraction that the required resources have been loaded.
-  TestPlatformAbstraction& platform = application.GetPlatform();
-  platform.SetAllResourceRequestsAsLoaded();
+//Test if mesh visual handles the case of lacking an object file.
+int UtcDaliVisualFactoryGetMeshVisualN1(void)
+{
+  //Set up test application first, so everything else can be handled.
+  ToolkitTestApplication application;
 
-  //Render again to upload the now-loaded textures.
-  application.SendNotification();
-  application.Render( 0 );
+  tet_infoline( "UtcDaliVisualFactoryGetMeshVisualN1:  Request mesh visual without object file" );
 
-  TestGlAbstraction& gl = application.GetGlAbstraction();
+  //Set up visual properties.
+  Property::Map propertyMap;
+  propertyMap.Insert( Visual::Property::TYPE, Visual::MESH );
+  propertyMap.Insert( MeshVisual::Property::MATERIAL_URL, TEST_MTL_FILE_NAME );
+  propertyMap.Insert( MeshVisual::Property::TEXTURES_PATH, TEST_RESOURCE_DIR "/" );
 
-  //Test to see if the object has not been loaded, as expected.
-  Matrix scaleMatrix;
-  DALI_TEST_CHECK( ! gl.GetUniformValue<Matrix>( "uObjectMatrix", scaleMatrix ) );
+  //Test to see if mesh doesn't load with these properties, as expected.
+  MeshVisualDoesNotLoadCorrectlyTest( propertyMap, application );
 
-  controlRenderer.SetOffStage( actor );
-  DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
 
   END_TEST;
 }
 
-//Test if mesh renderer handles the case of being passed an invalid object url
-int UtcDaliRendererFactoryGetMeshRendererN3(void)
+//Test if mesh visual handles the case of being passed invalid material and images urls.
+int UtcDaliVisualFactoryGetMeshVisualN2(void)
 {
+  //Set up test application first, so everything else can be handled.
   ToolkitTestApplication application;
-  tet_infoline( "UtcDaliRendererFactoryGetMeshRendererN3:  Request mesh renderer with invalid object url" );
 
-  RendererFactory factory = RendererFactory::Get();
-  DALI_TEST_CHECK( factory );
+  tet_infoline( "UtcDaliVisualFactoryGetMeshVisualN2:  Request mesh visual with invalid material and images urls" );
 
-  //Set up renderer properties.
+  //Set up visual properties.
   Property::Map propertyMap;
-  propertyMap.Insert( "rendererType",  "MESH" );
-  propertyMap.Insert( "objectUrl", "invalid" );
-  propertyMap.Insert( "materialUrl", TEST_MTL_FILE_NAME );
-  propertyMap.Insert( "texturesPath", TEST_RESOURCE_DIR "/" );
-
-  ControlRenderer controlRenderer = factory.CreateControlRenderer( propertyMap );
-  DALI_TEST_CHECK( controlRenderer );
+  propertyMap.Insert( Visual::Property::TYPE, Visual::MESH );
+  propertyMap.Insert( MeshVisual::Property::OBJECT_URL, TEST_OBJ_FILE_NAME );
+  propertyMap.Insert( MeshVisual::Property::MATERIAL_URL, "invalid" );
+  propertyMap.Insert( MeshVisual::Property::TEXTURES_PATH, "also invalid" );
 
-  //Add renderer to an actor on stage.
-  Actor actor = Actor::New();
-  actor.SetSize( 200.f, 200.f );
-  Stage::GetCurrent().Add( actor );
-  controlRenderer.SetSize( Vector2( 200.f, 200.f ) );
-  controlRenderer.SetOnStage( actor );
+  //Test to see if mesh doesn't load with these properties, as expected.
+  MeshVisualDoesNotLoadCorrectlyTest( propertyMap, application );
 
-  DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
-
-  //Attempt to render to queue resource load requests.
-  application.SendNotification();
-  application.Render( 0 );
 
-  //Tell the platform abstraction that the required resources have been loaded.
-  TestPlatformAbstraction& platform = application.GetPlatform();
-  platform.SetAllResourceRequestsAsLoaded();
+  END_TEST;
+}
 
-  //Render again to upload the now-loaded textures.
-  application.SendNotification();
-  application.Render( 0 );
+//Test if mesh visual handles the case of being passed an invalid object url
+int UtcDaliVisualFactoryGetMeshVisualN3(void)
+{
+  //Set up test application first, so everything else can be handled.
+  ToolkitTestApplication application;
+  tet_infoline( "UtcDaliVisualFactoryGetMeshVisualN3:  Request mesh visual with invalid object url" );
 
-  TestGlAbstraction& gl = application.GetGlAbstraction();
 
-  //Test to see if the object has not been loaded, as expected.
-  Matrix scaleMatrix;
-  DALI_TEST_CHECK( ! gl.GetUniformValue<Matrix>( "uObjectMatrix", scaleMatrix ) );
+  //Set up visual properties.
+  Property::Map propertyMap;
+  propertyMap.Insert( Visual::Property::TYPE, Visual::MESH );
+  propertyMap.Insert( MeshVisual::Property::OBJECT_URL, "invalid" );
+  propertyMap.Insert( MeshVisual::Property::MATERIAL_URL, TEST_MTL_FILE_NAME );
+  propertyMap.Insert( MeshVisual::Property::TEXTURES_PATH, TEST_RESOURCE_DIR "/" );
 
-  controlRenderer.SetOffStage( actor );
-  DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
+  //Test to see if mesh doesn't load with these properties, as expected.
+  MeshVisualDoesNotLoadCorrectlyTest( propertyMap, application );
 
   END_TEST;
 }
 
-//Creates a primitive renderer with the given property map and tests to see if it correctly loads in the given application.
-void TestPrimitiveRendererWithProperties( Property::Map& propertyMap, ToolkitTestApplication& application )
+//Creates a primitive visual with the given property map and tests to see if it correctly loads in the given application.
+void TestPrimitiveVisualWithProperties( Property::Map& propertyMap, ToolkitTestApplication& application )
 {
-  RendererFactory factory = RendererFactory::Get();
+  VisualFactory factory = VisualFactory::Get();
   DALI_TEST_CHECK( factory );
 
-  //Create a primitive renderer.
-  ControlRenderer controlRenderer = factory.CreateControlRenderer( propertyMap );
-  DALI_TEST_CHECK( controlRenderer );
+  //Create a primitive visual.
+  Visual::Base visual = factory.CreateVisual( propertyMap );
+  DALI_TEST_CHECK( visual );
 
-  //Create an actor on stage to house the renderer.
+  //Create an actor on stage to house the visual.
   Actor actor = Actor::New();
   actor.SetSize( 200.f, 200.f );
   Stage::GetCurrent().Add( actor );
-  controlRenderer.SetSize( Vector2( 200.f, 200.f ) );
-  controlRenderer.SetOnStage( actor );
+  visual.SetSize( Vector2( 200.f, 200.f ) );
+  visual.SetOnStage( actor );
 
   //Ensure set on stage.
   DALI_TEST_EQUALS( actor.GetRendererCount(), 1u, TEST_LOCATION );
 
-  //Tell test application to load the renderer.
+  //Tell test application to load the visual.
   application.SendNotification();
   application.Render(0);
 
@@ -1357,201 +1311,203 @@ void TestPrimitiveRendererWithProperties( Property::Map& propertyMap, ToolkitTes
   DALI_TEST_EQUALS( actualScaleMatrix, testScaleMatrix, Math::MACHINE_EPSILON_100, TEST_LOCATION );
 
   //Finish by setting off stage, and ensuring this was successful.
-  controlRenderer.SetOffStage( actor );
+  visual.SetOffStage( actor );
   DALI_TEST_EQUALS( actor.GetRendererCount(), 0u, TEST_LOCATION );
 }
 
 //Test if primitive shape loads correctly when supplied with only the bare minimum requirements, the shape to use.
-int UtcDaliRendererFactoryGetPrimitiveRenderer1(void)
+int UtcDaliVisualFactoryGetPrimitiveVisual1(void)
 {
   //Set up test application first, so everything else can be handled.
   ToolkitTestApplication application;
 
-  tet_infoline( "UtcDaliRendererFactoryGetPrimitiveRenderer1:  Request primitive renderer with a shape only" );
+  tet_infoline( "UtcDaliVisualFactoryGetPrimitiveVisual1:  Request primitive visual with a shape only" );
 
-  //Set up renderer properties.
+  //Set up visual properties.
   Property::Map propertyMap;
-  propertyMap.Insert( "rendererType", "PRIMITIVE" );
-  propertyMap.Insert( "shape", "CUBE" );
+  propertyMap.Insert( Visual::Property::TYPE, Visual::PRIMITIVE );
+  propertyMap.Insert( PrimitiveVisual::Property::SHAPE, PrimitiveVisual::Shape::CUBE );
 
   //Test to see if shape loads correctly.
-  TestPrimitiveRendererWithProperties( propertyMap, application );
+  TestPrimitiveVisualWithProperties( propertyMap, application );
 
   END_TEST;
 }
 
 //Test if primitive shape loads correctly when supplied with all possible parameters
-int UtcDaliRendererFactoryGetPrimitiveRenderer2(void)
+int UtcDaliVisualFactoryGetPrimitiveVisual2(void)
 {
   //Set up test application first, so everything else can be handled.
   ToolkitTestApplication application;
 
-  tet_infoline( "UtcDaliRendererFactoryGetPrimitiveRenderer2:  Request primitive renderer with everything" );
+  tet_infoline( "UtcDaliVisualFactoryGetPrimitiveVisual2:  Request primitive visual with everything" );
 
-  //Set up renderer properties.
+  //Set up visual properties.
   Property::Map propertyMap;
-  propertyMap.Insert( "rendererType", "PRIMITIVE" );
-  propertyMap.Insert( "shape", "CUBE" );
-  propertyMap.Insert( "color", Vector4( 0.5, 0.5, 0.5, 1.0 ) );
-  propertyMap.Insert( "slices", 10 );
-  propertyMap.Insert( "stacks", 20 );
-  propertyMap.Insert( "scaleTopRadius", 30.0f );
-  propertyMap.Insert( "scaleBottomRadius", 40.0f );
-  propertyMap.Insert( "scaleHeight", 50.0f );
-  propertyMap.Insert( "scaleRadius", 60.0f );
-  propertyMap.Insert( "bevelPercentage", 0.7f );
+  propertyMap.Insert( Visual::Property::TYPE, Visual::PRIMITIVE );
+  propertyMap.Insert( PrimitiveVisual::Property::SHAPE, PrimitiveVisual::Shape::CUBE );
+  propertyMap.Insert( PrimitiveVisual::Property::COLOR, Vector4( 0.5, 0.5, 0.5, 1.0 ) );
+  propertyMap.Insert( PrimitiveVisual::Property::SLICES, 10 );
+  propertyMap.Insert( PrimitiveVisual::Property::STACKS, 20 );
+  propertyMap.Insert( PrimitiveVisual::Property::SCALE_TOP_RADIUS, 30.0f );
+  propertyMap.Insert( PrimitiveVisual::Property::SCALE_BOTTOM_RADIUS, 40.0f );
+  propertyMap.Insert( PrimitiveVisual::Property::SCALE_HEIGHT, 50.0f );
+  propertyMap.Insert( PrimitiveVisual::Property::SCALE_RADIUS, 60.0f );
+  propertyMap.Insert( PrimitiveVisual::Property::BEVEL_PERCENTAGE, 0.7f );
+  propertyMap.Insert( PrimitiveVisual::Property::BEVEL_SMOOTHNESS, 0.8f );
+  propertyMap.Insert( MeshVisual::Property::LIGHT_POSITION, Vector3( 0.9, 1.0, 1.1 ) );
 
   //Test to see if shape loads correctly.
-  TestPrimitiveRendererWithProperties( propertyMap, application );
+  TestPrimitiveVisualWithProperties( propertyMap, application );
 
   END_TEST;
 }
 
 //Test if primitive shape loads a sphere correctly.
-int UtcDaliRendererFactoryGetPrimitiveRenderer3(void)
+int UtcDaliVisualFactoryGetPrimitiveVisual3(void)
 {
   //Set up test application first, so everything else can be handled.
   ToolkitTestApplication application;
 
-  tet_infoline( "UtcDaliRendererFactoryGetPrimitiveRenderer3:  Request primitive renderer to display a sphere" );
+  tet_infoline( "UtcDaliVisualFactoryGetPrimitiveVisual3:  Request primitive visual to display a sphere" );
 
-  //Set up renderer properties.
+  //Set up visual properties.
   Property::Map propertyMap;
-  propertyMap.Insert( "rendererType", "PRIMITIVE" );
-  propertyMap.Insert( "shape", "SPHERE" );
-  propertyMap.Insert( "color", Vector4( 0.5, 0.5, 0.5, 1.0 ) );
-  propertyMap.Insert( "slices", 10 );
-  propertyMap.Insert( "stacks", 20 );
+  propertyMap.Insert( Visual::Property::TYPE, Visual::PRIMITIVE );
+  propertyMap.Insert( PrimitiveVisual::Property::SHAPE, PrimitiveVisual::Shape::SPHERE );
+  propertyMap.Insert( PrimitiveVisual::Property::COLOR, Vector4( 0.5, 0.5, 0.5, 1.0 ) );
+  propertyMap.Insert( PrimitiveVisual::Property::SLICES, 10 );
+  propertyMap.Insert( PrimitiveVisual::Property::STACKS, 20 );
 
   //Test to see if shape loads correctly.
-  TestPrimitiveRendererWithProperties( propertyMap, application );
+  TestPrimitiveVisualWithProperties( propertyMap, application );
 
   END_TEST;
 }
 
 //Test if primitive shape loads a conic section correctly.
-int UtcDaliRendererFactoryGetPrimitiveRenderer4(void)
+int UtcDaliVisualFactoryGetPrimitiveVisual4(void)
 {
   //Set up test application first, so everything else can be handled.
   ToolkitTestApplication application;
 
-  tet_infoline( "UtcDaliRendererFactoryGetPrimitiveRenderer4:  Request primitive renderer to display a conic section" );
+  tet_infoline( "UtcDaliVisualFactoryGetPrimitiveVisual4:  Request primitive visual to display a conic section" );
 
-  //Set up renderer properties.
+  //Set up visual properties.
   Property::Map propertyMap;
-  propertyMap.Insert( "rendererType", "PRIMITIVE" );
-  propertyMap.Insert( "shape", "CONICAL_FRUSTRUM" );
-  propertyMap.Insert( "color", Vector4( 0.5, 0.5, 0.5, 1.0 ) );
-  propertyMap.Insert( "slices", 10 );
-  propertyMap.Insert( "scaleTopRadius", 30.0f );
-  propertyMap.Insert( "scaleBottomRadius", 40.0f );
-  propertyMap.Insert( "scaleHeight", 50.0f );
+  propertyMap.Insert( Visual::Property::TYPE, Visual::PRIMITIVE );
+  propertyMap.Insert( PrimitiveVisual::Property::SHAPE, PrimitiveVisual::Shape::CONICAL_FRUSTRUM );
+  propertyMap.Insert( PrimitiveVisual::Property::COLOR, Vector4( 0.5, 0.5, 0.5, 1.0 ) );
+  propertyMap.Insert( PrimitiveVisual::Property::SLICES, 10 );
+  propertyMap.Insert( PrimitiveVisual::Property::SCALE_TOP_RADIUS, 30.0f );
+  propertyMap.Insert( PrimitiveVisual::Property::SCALE_BOTTOM_RADIUS, 40.0f );
+  propertyMap.Insert( PrimitiveVisual::Property::SCALE_HEIGHT, 50.0f );
 
   //Test to see if shape loads correctly.
-  TestPrimitiveRendererWithProperties( propertyMap, application );
+  TestPrimitiveVisualWithProperties( propertyMap, application );
 
   END_TEST;
 }
 
 //Test if primitive shape loads a bevelled cube correctly.
-int UtcDaliRendererFactoryGetPrimitiveRenderer5(void)
+int UtcDaliVisualFactoryGetPrimitiveVisual5(void)
 {
   //Set up test application first, so everything else can be handled.
   ToolkitTestApplication application;
 
-  tet_infoline( "UtcDaliRendererFactoryGetPrimitiveRenderer5:  Request primitive renderer to display a bevelled cube" );
+  tet_infoline( "UtcDaliVisualFactoryGetPrimitiveVisual5:  Request primitive visual to display a bevelled cube" );
 
-  //Set up renderer properties.
+  //Set up visual properties.
   Property::Map propertyMap;
-  propertyMap.Insert( "rendererType", "PRIMITIVE" );
-  propertyMap.Insert( "shape", "BEVELLED_CUBE" );
-  propertyMap.Insert( "color", Vector4( 0.5, 0.5, 0.5, 1.0 ) );
-  propertyMap.Insert( "bevelPercentage", 0.7f );
+  propertyMap.Insert( Visual::Property::TYPE, Visual::PRIMITIVE );
+  propertyMap.Insert( PrimitiveVisual::Property::SHAPE, PrimitiveVisual::Shape::BEVELLED_CUBE );
+  propertyMap.Insert( PrimitiveVisual::Property::COLOR, Vector4( 0.5, 0.5, 0.5, 1.0 ) );
+  propertyMap.Insert( PrimitiveVisual::Property::BEVEL_PERCENTAGE, 0.7f );
 
   //Test to see if shape loads correctly.
-  TestPrimitiveRendererWithProperties( propertyMap, application );
+  TestPrimitiveVisualWithProperties( propertyMap, application );
 
   END_TEST;
 }
 
 //Test if primitive shape loads an octahedron correctly.
-int UtcDaliRendererFactoryGetPrimitiveRenderer6(void)
+int UtcDaliVisualFactoryGetPrimitiveVisual6(void)
 {
   //Set up test application first, so everything else can be handled.
   ToolkitTestApplication application;
 
-  tet_infoline( "UtcDaliRendererFactoryGetPrimitiveRenderer6:  Request primitive renderer to display an octahedron" );
+  tet_infoline( "UtcDaliVisualFactoryGetPrimitiveVisual6:  Request primitive visual to display an octahedron" );
 
-  //Set up renderer properties.
+  //Set up visual properties.
   Property::Map propertyMap;
-  propertyMap.Insert( "rendererType", "PRIMITIVE" );
-  propertyMap.Insert( "shape", "OCTAHEDRON" );
-  propertyMap.Insert( "color", Vector4( 0.5, 0.5, 0.5, 1.0 ) );
+  propertyMap.Insert( Visual::Property::TYPE, Visual::PRIMITIVE );
+  propertyMap.Insert( PrimitiveVisual::Property::SHAPE, PrimitiveVisual::Shape::OCTAHEDRON );
+  propertyMap.Insert( PrimitiveVisual::Property::COLOR, Vector4( 0.5, 0.5, 0.5, 1.0 ) );
 
   //Test to see if shape loads correctly.
-  TestPrimitiveRendererWithProperties( propertyMap, application );
+  TestPrimitiveVisualWithProperties( propertyMap, application );
 
   END_TEST;
 }
 
 //Test if primitive shape loads a cone correctly.
-int UtcDaliRendererFactoryGetPrimitiveRenderer7(void)
+int UtcDaliVisualFactoryGetPrimitiveVisual7(void)
 {
   //Set up test application first, so everything else can be handled.
   ToolkitTestApplication application;
 
-  tet_infoline( "UtcDaliRendererFactoryGetPrimitiveRenderer7:  Request primitive renderer to display a cone" );
+  tet_infoline( "UtcDaliVisualFactoryGetPrimitiveVisual7:  Request primitive visual to display a cone" );
 
-  //Set up renderer properties.
+  //Set up visual properties.
   Property::Map propertyMap;
-  propertyMap.Insert( "rendererType", "PRIMITIVE" );
-  propertyMap.Insert( "shape", "CONE" );
-  propertyMap.Insert( "color", Vector4( 0.5, 0.5, 0.5, 1.0 ) );
-  propertyMap.Insert( "slices", 10 );
-  propertyMap.Insert( "scaleTopRadius", 30.0f );
-  propertyMap.Insert( "scaleHeight", 50.0f );
+  propertyMap.Insert( Visual::Property::TYPE, Visual::PRIMITIVE );
+  propertyMap.Insert( PrimitiveVisual::Property::SHAPE, PrimitiveVisual::Shape::CONE );
+  propertyMap.Insert( PrimitiveVisual::Property::COLOR, Vector4( 0.5, 0.5, 0.5, 1.0 ) );
+  propertyMap.Insert( PrimitiveVisual::Property::SLICES, 10 );
+  propertyMap.Insert( PrimitiveVisual::Property::SCALE_TOP_RADIUS, 30.0f );
+  propertyMap.Insert( PrimitiveVisual::Property::SCALE_HEIGHT, 50.0f );
 
   //Test to see if shape loads correctly.
-  TestPrimitiveRendererWithProperties( propertyMap, application );
+  TestPrimitiveVisualWithProperties( propertyMap, application );
 
   END_TEST;
 }
 
 //Test if primitive shape loads correctly when light position is manually set.
-int UtcDaliRendererFactoryGetPrimitiveRenderer8(void)
+int UtcDaliVisualFactoryGetPrimitiveVisual8(void)
 {
   //Set up test application first, so everything else can be handled.
   ToolkitTestApplication application;
 
-  tet_infoline( "UtcDaliRendererFactoryGetPrimitiveRenderer8:  Request primitive renderer with set light position" );
+  tet_infoline( "UtcDaliVisualFactoryGetPrimitiveVisual8:  Request primitive visual with set light position" );
 
-  //Set up renderer properties.
+  //Set up visual properties.
   Property::Map propertyMap;
-  propertyMap.Insert( "rendererType", "PRIMITIVE" );
-  propertyMap.Insert( "shape", "SPHERE" );
-  propertyMap.Insert( "color", Vector4( 0.5, 0.5, 0.5, 1.0 ) );
-  propertyMap.Insert( "uLightPosition", Vector3( 0.0, 1.0, 2.0 ) );
+  propertyMap.Insert( Visual::Property::TYPE, Visual::PRIMITIVE );
+  propertyMap.Insert( PrimitiveVisual::Property::SHAPE, PrimitiveVisual::Shape::SPHERE );
+  propertyMap.Insert( PrimitiveVisual::Property::COLOR, Vector4( 0.5, 0.5, 0.5, 1.0 ) );
+  propertyMap.Insert( MeshVisual::Property::LIGHT_POSITION, Vector3( 0.0, 1.0, 2.0 ) );
 
   //Test to see if shape loads correctly.
-  TestPrimitiveRendererWithProperties( propertyMap, application );
+  TestPrimitiveVisualWithProperties( propertyMap, application );
 
   END_TEST;
 }
 
 //Test if primitive shape renderer handles the case of not being passed a specific shape to use.
-int UtcDaliRendererFactoryGetPrimitiveRendererN1(void)
+int UtcDaliVisualFactoryGetPrimitiveVisualN1(void)
 {
   //Set up test application first, so everything else can be handled.
   ToolkitTestApplication application;
 
-  tet_infoline( "UtcDaliRendererFactoryGetPrimitiveRendererN1:  Request primitive renderer without shape" );
+  tet_infoline( "UtcDaliVisualFactoryGetPrimitiveVisualN1:  Request primitive visual without shape" );
 
-  //Set up renderer properties, without supplying shape.
+  //Set up visual properties, without supplying shape.
   Property::Map propertyMap;
-  propertyMap.Insert( "rendererType", "PRIMITIVE" );
+  propertyMap.Insert( Visual::Property::TYPE, Visual::PRIMITIVE );
 
   //Test to see if shape loads regardless of missing input.
-  TestPrimitiveRendererWithProperties( propertyMap, application );
+  TestPrimitiveVisualWithProperties( propertyMap, application );
 
   END_TEST;
 }
index 7383ebe..99c1821 100644 (file)
@@ -1,5 +1,5 @@
 #
-# Copyright (c) 2014 Samsung Electronics Co., Ltd.
+# Copyright (c) 2016 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.
@@ -102,7 +102,6 @@ develapibloomviewdir =          $(develapicontrolsdir)/bloom-view
 develapibubbleemitterdir =      $(develapicontrolsdir)/bubble-effect
 develapieffectsviewdir =        $(develapicontrolsdir)/effects-view
 develapimagnifierdir =          $(develapicontrolsdir)/magnifier
-develapirendererfactorydir =    $(develapicontrolsdir)/renderer-factory
 develapipopupdir =              $(develapicontrolsdir)/popup
 develapishadowviewdir =         $(develapicontrolsdir)/shadow-view
 develapisuperblurviewdir =      $(develapicontrolsdir)/super-blur-view
@@ -113,8 +112,10 @@ develapishadereffectsdir =      $(develapidir)/shader-effects
 develapitransitioneffectsdir =  $(develapidir)/transition-effects
 develapitoolbardir =            $(develapicontrolsdir)/tool-bar
 develapitextselectionpopupdir = $(develapicontrolsdir)/text-controls
+develapivisualfactorydir =      $(develapidir)/visual-factory
 
 # devel headers
+develapi_HEADERS =                  $(devel_api_header_files)
 develapicontrols_HEADERS =          $(devel_api_controls_header_files)
 develapibloomview_HEADERS =         $(devel_api_bloom_view_header_files)
 develapibubbleemitter_HEADERS =     $(devel_api_bubble_emitter_header_files)
@@ -124,7 +125,7 @@ develapifocusmanager_HEADERS =      $(devel_api_focus_manager_header_files)
 develapiimageatlas_HEADERS =        $(devel_api_image_atlas_header_files)
 develapimagnifier_HEADERS =         $(devel_api_magnifier_header_files)
 develapipopup_HEADERS =             $(devel_api_popup_header_files)
-develapirendererfactory_HEADERS =   $(devel_api_renderer_factory_header_files)
+develapivisualfactory_HEADERS =     $(devel_api_visual_factory_header_files)
 develapiscripting_HEADERS =         $(devel_api_scripting_header_files)
 develapishadowview_HEADERS =        $(devel_api_shadow_view_header_files)
 develapishadereffects_HEADERS =     $(devel_api_shader_effects_header_files)
@@ -156,6 +157,7 @@ publicapitextcontrolsdir =         $(publicapicontrolsdir)/text-controls
 publicapifocusmanagerdir =         $(publicapidir)/focus-manager
 publicapirenderingbackenddir =     $(publicapidir)/text
 publicapisliderdir =               $(publicapicontrolsdir)/slider
+publicapivisualsdir =              $(publicapidir)/visuals
 
 # public api headers
 publicapi_HEADERS =                     $(public_api_header_files)
@@ -180,6 +182,7 @@ publicapitextcontrols_HEADERS =         $(public_api_text_controls_header_files)
 publicapifocusmanager_HEADERS =         $(public_api_focus_manager_header_files)
 publicapirenderingbackend_HEADERS =     $(public_api_rendering_backend_header_files)
 publicapislider_HEADERS =               $(public_api_slider_header_files)
+publicapivisuals_HEADERS =              $(public_api_visuals_header_files)
 
 # package doxygen file (contains doxygen grouping information)
 packagedoxydir = $(topleveldir)/doc
index 1dc6861..5a9d08d 100644 (file)
@@ -2,7 +2,7 @@
 #define __DALI_TOOLKIT_H__
 
 /*
- * Copyright (c) 2014 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2016 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.
@@ -20,7 +20,6 @@
 
 #include <dali/dali.h>
 
-// Toolkit
 #include <dali-toolkit/public-api/controls/alignment/alignment.h>
 #include <dali-toolkit/public-api/controls/buttons/button.h>
 #include <dali-toolkit/public-api/controls/buttons/check-box-button.h>
 #include <dali-toolkit/public-api/controls/text-controls/text-field.h>
 #include <dali-toolkit/public-api/controls/text-controls/text-label.h>
 #include <dali-toolkit/public-api/controls/video-view/video-view.h>
+
 #include <dali-toolkit/public-api/accessibility-manager/accessibility-manager.h>
+
 #include <dali-toolkit/public-api/focus-manager/keyboard-focus-manager.h>
+
 #include <dali-toolkit/public-api/styling/style-manager.h>
+
 #include <dali-toolkit/public-api/text/rendering-backend.h>
+
+#include <dali-toolkit/public-api/visuals/border-visual-properties.h>
+#include <dali-toolkit/public-api/visuals/color-visual-properties.h>
+#include <dali-toolkit/public-api/visuals/gradient-visual-properties.h>
+#include <dali-toolkit/public-api/visuals/image-visual-properties.h>
+#include <dali-toolkit/public-api/visuals/mesh-visual-properties.h>
+#include <dali-toolkit/public-api/visuals/primitive-visual-properties.h>
+#include <dali-toolkit/public-api/visuals/visual-properties.h>
+
 #include <dali-toolkit/public-api/dali-toolkit-version.h>
 #include <dali-toolkit/public-api/enums.h>
+#include <dali-toolkit/public-api/toolkit-property-index-ranges.h>
 
 #endif // __DALI_TOOLKIT_H__
diff --git a/dali-toolkit/devel-api/controls/renderer-factory/renderer-factory.h b/dali-toolkit/devel-api/controls/renderer-factory/renderer-factory.h
deleted file mode 100644 (file)
index 52e0d5c..0000000
+++ /dev/null
@@ -1,172 +0,0 @@
-#ifndef __DALI_TOOLKIT_RENDERER_FACTORY_H__
-#define __DALI_TOOLKIT_RENDERER_FACTORY_H__
-/*
- * Copyright (c) 2015 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.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-// EXTERNAL INCLUDES
-#include <dali/public-api/object/base-handle.h>
-#include <dali/public-api/images/image-operations.h>
-#include <dali/public-api/object/property-map.h>
-
-// INTERNAK INCLUDES
-#include <dali-toolkit/devel-api/controls/renderer-factory/control-renderer.h>
-
-namespace Dali
-{
-class Image;
-class Vector4;
-
-namespace Toolkit
-{
-
-namespace Internal DALI_INTERNAL
-{
-class RendererFactory;
-}
-
-/**
- * @brief RendererFactory is a singleton object that provides and shares renderers for controls
- *
- * By setting environment variable 'DALI_DEBUG_RENDERING', all concrete renderer is replaced with the debug renderer which renders a quad wireframe.
- *
- * The renderer type is required in the property map for requesting a control renderer.
- *
- * | %Property Name           | Type             |
- * |--------------------------|------------------|
- * | rendererType             | STRING           |
- */
-class DALI_IMPORT_API RendererFactory : public BaseHandle
-{
-public:
-
-  /**
-   * @brief Create or retrieve RendererFactory singleton.
-   *
-   * @return A handle to the RendererFactory control.
-   */
-  static RendererFactory Get();
-
-  /**
-   * @brief Create a RendererFactory handle.
-   *
-   * Calling member functions with an uninitialised handle is not allowed.
-   */
-  RendererFactory();
-
-  /**
-   * @brief Destructor
-   *
-   * This is non-virtual since derived Handle types must not contain data or virtual methods.
-   */
-  ~RendererFactory();
-
-  /**
-   * @brief This copy constructor is required for (smart) pointer semantics.
-   *
-   * @param[in] handle A reference to the copied handle.
-   */
-  RendererFactory( const RendererFactory& handle );
-
-  /**
-   * @brief This assignment operator is required for (smart) pointer semantics.
-   *
-   * @param [in] handle  A reference to the copied handle.
-   * @return A reference to this.
-   */
-  RendererFactory& operator=( const RendererFactory& handle );
-
-  /**
-   * @brief Request the control renderer
-   *
-   * @param[in] propertyMap The map contains the properties required by the control renderer
-   *            Depends on the content of the map, different kind of renderer would be returned.
-   * @return The pointer pointing to control renderer
-   */
-  ControlRenderer CreateControlRenderer( const Property::Map& propertyMap  );
-
-  /**
-   * @brief Request the control renderer to render the image.
-   *
-   * @param[in] image The image to be rendered.
-   * @return The pointer pointing to the control renderer
-   */
-  ControlRenderer CreateControlRenderer( const Image& image );
-
-  /**
-   * @brief Request the control renderer to render the given resource at the url.
-   *
-   * @param[in] url The URL to the resource to be rendered.
-   * @param[in] size The width and height to fit the loaded image to.
-   * @return The pointer pointing to the control renderer
-   */
-  ControlRenderer CreateControlRenderer( const std::string& url, ImageDimensions size );
-
-private:
-
-  explicit DALI_INTERNAL RendererFactory(Internal::RendererFactory *impl);
-
-};
-
-
-/**
- * @brief Template to allow discard old renderer, get new one and set it on stage if possible
- *
- * @tparam ParameterType0 The type of first argument passed to the CreateControlRenderer()
- * @tparam ParameterType1 The type of second argument passed to the CreateControlRenderer()
- * @SINCE_1_0.39
- * @param[in] actor Actor for which the renderer will be replaced
- * @param[in,out] renderer The renderer object to be replaced
- * @param[in] param0 First template based argument passed to the renderer factory
- * @param[in] param1 Second template based argument passed to the renderer factory
- */
-template< class ParameterType0, class ParameterType1 >
-void InitializeControlRenderer( Actor& actor, ControlRenderer& renderer, ParameterType0& param0, ParameterType1& param1 )
-{
-  renderer.RemoveAndReset( actor );
-  renderer = Toolkit::RendererFactory::Get().CreateControlRenderer( param0, param1 );
-  if( renderer && actor && actor.OnStage() )
-  {
-    renderer.SetOnStage( actor );
-  }
-}
-
-/**
- * @brief Template to allow discard old renderer, get new one and set it on stage if possible
- *
- * @tparam ParameterType The type of argument passed to the CreateControlRenderer()
- * @SINCE_1_0.39
- * @param[in] actor Actor for which the renderer will be replaced
- * @param[in,out] renderer The renderer object to be replaced
- * @param[in] param Template based argument passed to the renderer factory
- */
-template< class ParameterType >
-void InitializeControlRenderer( Actor& actor, ControlRenderer& renderer, ParameterType& param )
-{
-  renderer.RemoveAndReset( actor );
-  renderer =  Toolkit::RendererFactory::Get().CreateControlRenderer( param );
-  if( renderer && actor && actor.OnStage() )
-  {
-    renderer.SetOnStage( actor );
-  }
-}
-
-} // namespace Toolkit
-
-} // namespace Dali
-
-
-#endif /* __DALI_TOOLKIT_RENDERER_FACTORY_H__ */
index cc879a8..0dca497 100755 (executable)
@@ -10,8 +10,6 @@ devel_api_src_files = \
   $(devel_api_src_dir)/controls/magnifier/magnifier.cpp \
   $(devel_api_src_dir)/controls/popup/confirmation-popup.cpp \
   $(devel_api_src_dir)/controls/popup/popup.cpp \
-  $(devel_api_src_dir)/controls/renderer-factory/renderer-factory.cpp \
-  $(devel_api_src_dir)/controls/renderer-factory/control-renderer.cpp \
   $(devel_api_src_dir)/controls/shadow-view/shadow-view.cpp \
   $(devel_api_src_dir)/controls/super-blur-view/super-blur-view.cpp \
   $(devel_api_src_dir)/controls/text-controls/text-selection-popup.cpp \
@@ -23,7 +21,9 @@ devel_api_src_files = \
   $(devel_api_src_dir)/transition-effects/cube-transition-cross-effect.cpp \
   $(devel_api_src_dir)/transition-effects/cube-transition-effect.cpp \
   $(devel_api_src_dir)/transition-effects/cube-transition-fold-effect.cpp \
-  $(devel_api_src_dir)/transition-effects/cube-transition-wave-effect.cpp
+  $(devel_api_src_dir)/transition-effects/cube-transition-wave-effect.cpp \
+  $(devel_api_src_dir)/visual-factory/visual-factory.cpp \
+  $(devel_api_src_dir)/visual-factory/visual-base.cpp
 
 # Add devel header files here
 
@@ -51,9 +51,9 @@ devel_api_popup_header_files = \
   $(devel_api_src_dir)/controls/popup/confirmation-popup.h \
   $(devel_api_src_dir)/controls/popup/popup.h
 
-devel_api_renderer_factory_header_files = \
-  $(devel_api_src_dir)/controls/renderer-factory/renderer-factory.h \
-  $(devel_api_src_dir)/controls/renderer-factory/control-renderer.h
+devel_api_visual_factory_header_files = \
+  $(devel_api_src_dir)/visual-factory/visual-factory.h \
+  $(devel_api_src_dir)/visual-factory/visual-base.h
 
 devel_api_shadow_view_header_files = \
   $(devel_api_src_dir)/controls/shadow-view/shadow-view.h
index 0b557a0..6e893d3 100644 (file)
@@ -2,7 +2,7 @@
 #define __DALI_TOOLKIT_ALPHA_DISCARD_EFFECT_H__
 
 /*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2016 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.
  */
 
 // EXTERNAL INCLUDES
-#include <dali/public-api/shader-effects/shader-effect.h>
+#include <dali/public-api/object/property-map.h>
+
+// INTERNAL INCLUDES
+#include <dali-toolkit/public-api/visuals/visual-properties.h>
 
 namespace Dali
 {
@@ -61,10 +64,11 @@ inline Property::Map CreateAlphaDiscardEffect()
   Property::Map map;
 
   Property::Map customShader;
-  customShader[ "fragmentShader" ] = ALPHA_DISCARD_FRAGMENT_SHADER_SOURCE;
+  customShader[ Visual::Shader::Property::FRAGMENT_SHADER ] = ALPHA_DISCARD_FRAGMENT_SHADER_SOURCE;
 
-  map[ "shader" ] = customShader;
-  return map;}
+  map[ Visual::Property::SHADER ] = customShader;
+  return map;
+}
 
 } // namespace Toolkit
 
index fdea5d0..0c26d95 100644 (file)
@@ -22,6 +22,9 @@
 #include <string.h>
 #include <dali/public-api/rendering/shader.h>
 
+// INTERNAL INCLUDES
+#include <dali-toolkit/public-api/visuals/visual-properties.h>
+
 namespace Dali
 {
 
@@ -214,15 +217,15 @@ inline Property::Map CreateDissolveEffect( bool useHighPrecision = true )
   vertexShaderString.append( vertexShader );
   fragmentShaderString.append( fragmentShader );
 
-  customShader[ "vertexShader" ] = vertexShaderString;
-  customShader[ "fragmentShader" ] = fragmentShaderString;
+  customShader[ Visual::Shader::Property::VERTEX_SHADER ] = vertexShaderString;
+  customShader[ Visual::Shader::Property::FRAGMENT_SHADER ] = fragmentShaderString;
 
-  customShader[ "subdivideGridX" ] = 20;
-  customShader[ "subdivideGridY" ] = 20;
+  customShader[ Visual::Shader::Property::SUBDIVIDE_GRID_X ] = 20;
+  customShader[ Visual::Shader::Property::SUBDIVIDE_GRID_Y ] = 20;
 
-  customShader[ "hints" ] = "outputIsTransparent";
+  customShader[ Visual::Shader::Property::HINTS ] = Shader::Hint::OUTPUT_IS_TRANSPARENT;
 
-  map[ "shader" ] = customShader;
+  map[ Visual::Property::SHADER ] = customShader;
   return map;
 }
 
index d495030..a5d6c26 100644 (file)
@@ -2,7 +2,7 @@
 #define __DALI_TOOLKIT_SHADER_EFFECT_DISTANCEFIELD_H__
 
 /*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2016 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.
 
 // EXTERNAL INCLUDES
 #include <string.h>
-#include <dali/public-api/shader-effects/shader-effect.h>
+#include <dali/public-api/object/property-map.h>
+
+// INTERNAL INCLUDES
+#include <dali-toolkit/public-api/visuals/visual-properties.h>
 
 namespace Dali
 {
@@ -165,10 +168,10 @@ inline Dali::Property::Map CreateDistanceFieldEffect()
   fragmentShaderString.append( fragmentShaderPrefix );
   fragmentShaderString.append( fragmentShader );
 
-  customShader[ "fragmentShader" ] = fragmentShaderString;
-  customShader[ "hints" ] = "outputIsTransparent";
+  customShader[ Visual::Shader::Property::FRAGMENT_SHADER ] = fragmentShaderString;
+  customShader[ Visual::Shader::Property::HINTS ] = Shader::Hint::OUTPUT_IS_TRANSPARENT;
 
-  map[ "shader" ] = customShader;
+  map[ Visual::Property::SHADER ] = customShader;
   return map;
 }
 
index 4f3f3f1..af2c1e9 100644 (file)
@@ -2,7 +2,7 @@
 #define __DALI_TOOLKIT_IMAGE_REGION_EFFECT_H__
 
 /*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2016 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.
@@ -21,6 +21,9 @@
 // EXTERNAL INCLUDES
 #include <dali/public-api/object/property-map.h>
 
+// INTERNAL INCLUDES
+#include <dali-toolkit/public-api/visuals/visual-properties.h>
+
 namespace Dali
 {
 
@@ -73,9 +76,9 @@ inline Property::Map CreateImageRegionEffect()
   Property::Map map;
 
   Property::Map customShader;
-  customShader[ "vertexShader" ] = vertexShader;
+  customShader[ Visual::Shader::Property::VERTEX_SHADER ] = vertexShader;
 
-  map[ "shader" ] = customShader;
+  map[ Visual::Property::SHADER ] = customShader;
   return map;
 }
 
index 8e71791..70fd967 100644 (file)
@@ -2,7 +2,7 @@
 #define __DALI_TOOLKIT_SHADER_EFFECT_MOTION_BLUR_H__
 
 /*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2016 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.
  */
 
 // EXTERNAL INCLUDES
-#include <dali/public-api/shader-effects/shader-effect.h>
+#include <dali/public-api/actors/actor.h>
+#include <dali/public-api/animation/constraint.h>
+#include <dali/public-api/object/property-map.h>
+#include <dali/public-api/rendering/shader.h>
+
+// INTERNAL INCLUDES
+#include <dali-toolkit/public-api/visuals/visual-properties.h>
 
 namespace Dali
 {
@@ -77,11 +83,11 @@ inline void SetMotionBlurProperties( Actor& actor, unsigned int numBlurSamples =
  *  "uObjectFadeStart"        - The displacement from the centre of the actor that the actor will start to fade towards its
  *                              edges. This is used to prevent an unsightly hard edge between the blurred actor and the scene.
  *                              Depends on the values of the vertices in the vertex stream. When the actor is at rest this is
- *                              not applied. Default 0.25, which is half way towards the edge for an ImageRenderer::QUAD.
+ *                              not applied. Default 0.25, which is half way towards the edge for an ImageVisual::QUAD.
  *  "uObjectFadeEnd"          - The displacement from the centre of the actor that the actor will finish fading towards its
  *                              edges. This is used to prevent an unsightly hard edge between the blurred actor and the scene.
  *                              Depends on the values of the vertices in the vertex stream. When the actor is at rest this is
- *                              not applied.Default 0.5, which is all the way towards the edge for an ImageRenderer::QUAD.
+ *                              not applied.Default 0.5, which is all the way towards the edge for an ImageVisual::QUAD.
  *  "uAlphaScale"             - Global scaler applied to the alpha of the actor. Used to make the blurred actor a bit more subtle
  *                              (helps to hide discontinuities due to limited number of texture samples) and reveal a bit of the
  *                              background behind it as it moves. When the actor is at rest this is not applied. Default 0.75.
@@ -223,16 +229,15 @@ inline Property::Map CreateMotionBlurEffect()
   Property::Map map;
 
   Property::Map customShader;
-  customShader[ "vertexShader" ] = vertexSource;
-  customShader[ "fragmentShader" ] = fragmentSource;
+  customShader[ Visual::Shader::Property::VERTEX_SHADER ] = vertexSource;
+  customShader[ Visual::Shader::Property::FRAGMENT_SHADER ] = fragmentSource;
 
-  customShader[ "subdivideGridX" ] = 10;
-  customShader[ "subdivideGridY" ] = 10;
+  customShader[ Visual::Shader::Property::SUBDIVIDE_GRID_X ] = 10;
+  customShader[ Visual::Shader::Property::SUBDIVIDE_GRID_Y ] = 10;
 
-  // NOTE: we must turn on alpha blending for the actor (HINT_BLENDING)
-  customShader[ "hints" ] = "outputIsTransparent";
+  customShader[ Visual::Shader::Property::HINTS ] = Shader::Hint::OUTPUT_IS_TRANSPARENT;
 
-  map[ "shader" ] = customShader;
+  map[ Visual::Property::SHADER ] = customShader;
   return map;
 }
 
index 326c7bd..dcbda9e 100644 (file)
@@ -2,7 +2,7 @@
 #define __DALI_TOOLKIT_SHADER_EFFECT_MOTION_STRETCH_H__
 
 /*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2016 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.
  */
 
 // EXTERNAL INCLUDES
-#include <dali/public-api/shader-effects/shader-effect.h>
+#include <dali/public-api/actors/actor.h>
+#include <dali/public-api/animation/constraint.h>
+#include <dali/public-api/object/property-map.h>
+#include <dali/public-api/rendering/shader.h>
+
+// INTERNAL INCLUDES
+#include <dali-toolkit/public-api/visuals/visual-properties.h>
 
 namespace Dali
 {
@@ -58,11 +64,11 @@ inline void SetMotionStretchProperties( Actor& actor )
  *                              its edges. This is used to prevent an unsightly hard edge between the stretched actor and
  *                              the scene. Depends on the values of the vertices in the vertex stream. When the actor is at
  *                              rest this is not applied. Default Vector2(0.25, 0.25), which is half way towards the edge for
- *                              an ImageRenderer::QUAD.
+ *                              an ImageVisual::QUAD.
  *  "uObjectFadeEnd"          - The displacement from the centre of the actor that the actor will finish fading towards its edges.
  *                              This is used to prevent an unsightly hard edge between the stretched actor and the scene. Depends
  *                              on the values of the vertices in the vertex stream. When the actor is at rest this is not applied.
- *                              Default 0.5, which is all the way towards the edge for an ImageRenderer::QUAD.
+ *                              Default 0.5, which is all the way towards the edge for an ImageVisual::QUAD.
  *  "uAlphaScale"             - Global scaler applied to the alpha of the actor. Used to make the stretched actor a bit more subtle
  *                              and reveal a bit of the background behind it as it moves. When the actor is at rest this is not
  *                              applied. Default 0.75.
@@ -187,16 +193,15 @@ inline Property::Map CreateMotionStretchEffect()
   Property::Map map;
 
   Property::Map customShader;
-  customShader[ "vertexShader" ] = vertexSource;
-  customShader[ "fragmentShader" ] = fragmentSource;
+  customShader[ Visual::Shader::Property::VERTEX_SHADER ] = vertexSource;
+  customShader[ Visual::Shader::Property::FRAGMENT_SHADER ] = fragmentSource;
 
-  customShader[ "subdivideGridX" ] = 10;
-  customShader[ "subdivideGridY" ] = 10;
+  customShader[ Visual::Shader::Property::SUBDIVIDE_GRID_X ] = 10;
+  customShader[ Visual::Shader::Property::SUBDIVIDE_GRID_Y ] = 10;
 
-  // NOTE: we must turn on alpha blending for the actor (HINT_BLENDING)
-  customShader[ "hints" ] = "outputIsTransparent";
+  customShader[ Visual::Shader::Property::HINTS ] = Shader::Hint::OUTPUT_IS_TRANSPARENT;
 
-  map[ "shader" ] = customShader;
+  map[ Visual::Property::SHADER ] = customShader;
   return map;
 }
 
  */
 
 // CLASS HEADER
-#include "control-renderer.h"
+#include <dali-toolkit/devel-api/visual-factory/visual-base.h>
 
-// INTERNAL INCLUDES
-#include <dali-toolkit/internal/controls/renderers/control-renderer-impl.h>
+// INTERAL INCLUDES
+#include <dali-toolkit/internal/visuals/visual-base-impl.h>
 
 namespace Dali
 {
@@ -27,66 +27,69 @@ namespace Dali
 namespace Toolkit
 {
 
-ControlRenderer::ControlRenderer()
+namespace Visual
+{
+
+Base::Base()
 {
 }
 
-ControlRenderer::~ControlRenderer()
+Base::~Base()
 {
 }
 
-ControlRenderer::ControlRenderer( const ControlRenderer& handle )
+Base::Base( const Base& handle )
 : BaseHandle( handle )
 {
 }
 
-ControlRenderer& ControlRenderer::operator=( const ControlRenderer& handle )
+Base& Base::operator=( const Base& handle )
 {
   BaseHandle::operator=( handle );
   return *this;
 }
 
-ControlRenderer::ControlRenderer(Internal::ControlRenderer *impl)
+Base::Base(Internal::Visual::Base *impl)
 : BaseHandle( impl )
 {
 }
 
-void ControlRenderer::SetSize( const Vector2& size )
+void Base::SetSize( const Vector2& size )
 {
   GetImplementation( *this ).SetSize( size );
 }
 
-const Vector2& ControlRenderer::GetSize() const
+const Vector2& Base::GetSize() const
 {
   return GetImplementation( *this ).GetSize();
 }
 
-void ControlRenderer::GetNaturalSize(Vector2& naturalSize ) const
+void Base::GetNaturalSize(Vector2& naturalSize ) const
 {
   GetImplementation( *this ).GetNaturalSize( naturalSize );
 }
 
-void ControlRenderer::SetDepthIndex( float index )
+void Base::SetDepthIndex( float index )
 {
   GetImplementation( *this ).SetDepthIndex( index );
 }
 
-float ControlRenderer::GetDepthIndex() const
+float Base::GetDepthIndex() const
 {
   return GetImplementation( *this ).GetDepthIndex();
 }
 
-void ControlRenderer::SetOnStage( Actor& actor )
+void Base::SetOnStage( Actor& actor )
 {
   GetImplementation( *this ).SetOnStage( actor );
 }
 
-void ControlRenderer::SetOffStage( Actor& actor )
+void Base::SetOffStage( Actor& actor )
 {
   GetImplementation( *this ).SetOffStage( actor );
 }
 
-void ControlRenderer::RemoveAndReset( Actor& actor )
+void Base::RemoveAndReset( Actor& actor )
 {
   if( actor && *this )
   {
@@ -95,11 +98,13 @@ void ControlRenderer::RemoveAndReset( Actor& actor )
   Reset();
 }
 
-void ControlRenderer::CreatePropertyMap( Property::Map& map ) const
+void Base::CreatePropertyMap( Property::Map& map ) const
 {
   GetImplementation( *this ).CreatePropertyMap( map );
 }
 
+} // namespace Visual
+
 } // namespace Toolkit
 
 } // namespace Dali
@@ -1,7 +1,7 @@
-#ifndef __DALI_TOOLKIT_CONTROL_RENDERER_H__
-#define __DALI_TOOLKIT_CONTROL_RENDERER_H__
+#ifndef DALI_TOOLKIT_VISUAL_BASE_H
+#define DALI_TOOLKIT_VISUAL_BASE_H
 /*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2016 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.
@@ -29,38 +29,43 @@ namespace Toolkit
 
 namespace Internal DALI_INTERNAL
 {
-class ControlRenderer;
+namespace Visual
+{
+class Base;
+}
 }
 
+namespace Visual
+{
 /**
- * @brief ControlRenderer provides renderer for rendering the controls. A control may have multiple ControlRenders.
+ * @brief Visual provides a renderer for rendering the controls. A control may have multiple visuals.
  *
- * ControlRenderers reuses geometry, shader etc. across controls and manages the renderer and texture sets to exist only when control is on-stage.
+ * Visuals reuses geometry, shader etc. across controls and manages the renderer and texture sets to exist only when control is on-stage.
  * It also responds to actor size and color change, and provides the clipping at the renderer level.
- * Note: The control renderer responds to the the Actor::COLOR by blending it with the 'Multiply' operator.
+ * Note: The visual responds to the the Actor::COLOR by blending it with the 'Multiply' operator.
  */
-class DALI_IMPORT_API ControlRenderer : public BaseHandle
+class DALI_IMPORT_API Base : public BaseHandle
 {
 public:
 
   /**
-   * @brief Create an empty ControlRenderer Handle
+   * @brief Create an empty Visual Handle
    */
-  ControlRenderer();
+  Base();
 
   /**
    * @brief Destructor
    *
    * This is non-virtual since derived Handle types must not contain data or virtual methods.
    */
-  ~ControlRenderer();
+  ~Base();
 
   /**
    * @brief This copy constructor is required for (smart) pointer semantics.
    *
    * @param[in] handle A reference to the copied handle.
    */
-  ControlRenderer( const ControlRenderer& handle );
+  Base( const Base& handle );
 
   /**
    * @brief This assignment operator is required for (smart) pointer semantics.
@@ -68,7 +73,7 @@ public:
    * @param [in] handle  A reference to the copied handle.
    * @return A reference to this.
    */
-  ControlRenderer& operator=( const ControlRenderer& handle );
+  Base& operator=( const Base& handle );
 
   /**
    * @brief Set the size of the painting area.
@@ -80,79 +85,81 @@ public:
   /**
    * @brief Get the size of the painting area.
    *
-   * @return The size of the renderer's painting area.
+   * @return The size of the visual's painting area.
    */
   const Vector2& GetSize() const;
 
   /**
-   * @brief Return the natural size of the renderer.
+   * @brief Return the natural size of the visual.
    *
-   * Deriving classes stipulate the natural size and by default a renderer has a ZERO natural size.
+   * Deriving classes stipulate the natural size and by default a visual has a ZERO natural size.
    *
-   * @param[out] naturalSize The renderer's natural size
+   * @param[out] naturalSize The visual's natural size
    */
   void GetNaturalSize( Vector2& naturalSize ) const;
 
   /**
-   * @brief Set the depth index of this renderer.
+   * @brief Set the depth index of this visual.
    *
-   * Depth-index controls draw-order for overlapping renderers.
-   * Renderer with higher depth indices are rendered in front of other renderer with smaller values
+   * Depth-index controls draw-order for overlapping visuals.
+   * Visuals with higher depth indices are rendered in front of other visual with smaller values
    *
-   * @param[in] index The depth index of this renderer.
+   * @param[in] index The depth index of this visual.
    */
   void SetDepthIndex( float index );
 
   /**
-   * @brief Get the depth index of this renderer
+   * @brief Get the depth index of this visual
    *
-   * @return The depth index of this renderer.
+   * @return The depth index of this visual.
    */
   float GetDepthIndex() const;
 
   /**
-   * @brief Renderer only exists when control is on stage.
+   * @brief Visual needs to know when when the control is put on to the stage to add the renderer.
    *
-   * This function should be called when the control put on stage.
+   * This function should be called when the control is put on to the stage.
    *
-   * @param[in] actor The actor applying this renderer.
+   * @param[in] actor The actor using this visual.
    * @post SetOffStage should be called with the same actor when the control is put off stage otherwise memory will be leaked
    */
   void SetOnStage( Actor& actor );
 
   /**
-   * @brief Renderer is destroyed when control is off stage.
+   * @brief Visual needs to know when when the control is removed from the stage to remove the renderer.
    *
-   * This function should be called when the control removes from stage
+   * This function should be called when the control is removed from the stage
    *
-   * @param[in] actor The actor applying this renderer.
+   * @param[in] actor The actor using this visual.
    */
   void SetOffStage( Actor& actor );
 
   /**
-   * @brief Remove the renderer from actor and reset the control renderer self.
+   * @brief Remove the renderer from the actor and reset the visual self.
    *
-   * This function can be called with an empty handle. If the control renderer is empty, do nothing.
+   * This function can be called with an empty handle. If the visual is empty, this is a no-op.
    *
    * @param[in] actor The actor to be set off stage.
    */
   void RemoveAndReset( Actor& actor );
 
   /**
-   * @brief Create the property map representing this renderer.
+   * @brief Create the property map representing this visual.
    *
-   * @param[out] map The renderer property map.
+   * @param[out] map The visual property map.
    */
-  void CreatePropertyMap( Property::Map& map ) const;
+  void CreatePropertyMap( Dali::Property::Map& map ) const;
 
 public: // Not intended for application developers
 
-  explicit DALI_INTERNAL ControlRenderer(Internal::ControlRenderer *impl);
+  explicit DALI_INTERNAL Base(Internal::Visual::Base *impl);
 
 };
 
+} // namespace Visual
+
 } // namespace Toolkit
 
 } // namespace Dali
 
-#endif /*__DALI_TOOLKIT_CONTROL_RENDERER_H__*/
+#endif /*DALI_TOOLKIT_VISUAL_BASE_H*/
  */
 
 // CLASS HEADER
-#include "renderer-factory.h"
+#include "visual-factory.h"
 
 // EXTERNAL INCLUDES
 #include <dali/devel-api/adaptor-framework/singleton-service.h>
 #include <dali/devel-api/adaptor-framework/environment-variable.h>
 
 // INTERNAL INCLUDES
-#include <dali-toolkit/internal/controls/renderers/renderer-factory-impl.h>
+#include <dali-toolkit/internal/visuals/visual-factory-impl.h>
 
 namespace Dali
 {
@@ -36,33 +36,33 @@ namespace
   const char * const DALI_DEBUG_RENDERING("DALI_DEBUG_RENDERING");
 }
 
-RendererFactory RendererFactory::Get()
+VisualFactory VisualFactory::Get()
 {
-  RendererFactory factory;
+  VisualFactory factory;
 
-  // Check whether the RendererFactory is already created
+  // Check whether the VisualFactory is already created
   SingletonService singletonService( SingletonService::Get() );
   if( singletonService )
   {
-    BaseHandle handle = singletonService.GetSingleton( typeid(RendererFactory) );
+    BaseHandle handle = singletonService.GetSingleton( typeid(VisualFactory) );
     if( handle )
     {
-      //If so, downcast the handle of singleton to RendererFactory
-      factory = RendererFactory( dynamic_cast<Internal::RendererFactory*>(handle.GetObjectPtr()) );
+      //If so, downcast the handle of singleton to VisualFactory
+      factory = VisualFactory( dynamic_cast<Internal::VisualFactory*>(handle.GetObjectPtr()) );
     }
 
-    if( !factory )// If not, create the RendererFactory and register it as a singleton
+    if( !factory )// If not, create the VisualFactory and register it as a singleton
     {
       // Check whether debug rendering is required
       if( EnvironmentVariable::GetEnvironmentVariable( DALI_DEBUG_RENDERING ) )
       {
-        factory = RendererFactory( new Internal::RendererFactory(true) );
+        factory = VisualFactory( new Internal::VisualFactory(true) );
       }
       else
       {
-        factory = RendererFactory( new Internal::RendererFactory(false) );
+        factory = VisualFactory( new Internal::VisualFactory(false) );
       }
-      singletonService.Register( typeid(RendererFactory), factory );
+      singletonService.Register( typeid(VisualFactory), factory );
 
     }
   }
@@ -70,43 +70,43 @@ RendererFactory RendererFactory::Get()
   return factory;
 }
 
-RendererFactory::RendererFactory()
+VisualFactory::VisualFactory()
 {
 }
 
-RendererFactory::~RendererFactory()
+VisualFactory::~VisualFactory()
 {
 }
 
-RendererFactory::RendererFactory( const RendererFactory& handle )
+VisualFactory::VisualFactory( const VisualFactory& handle )
 : BaseHandle( handle )
 {
 }
 
-RendererFactory& RendererFactory::operator=( const RendererFactory& handle )
+VisualFactory& VisualFactory::operator=( const VisualFactory& handle )
 {
   BaseHandle::operator=( handle );
   return *this;
 }
 
-RendererFactory::RendererFactory(Internal::RendererFactory *impl)
+VisualFactory::VisualFactory(Internal::VisualFactory *impl)
 : BaseHandle(impl)
 {
 }
 
-ControlRenderer RendererFactory::CreateControlRenderer( const Property::Map& propertyMap )
+Visual::Base VisualFactory::CreateVisual( const Property::Map& propertyMap )
 {
-  return GetImplementation( *this ).CreateControlRenderer( propertyMap );
+  return GetImplementation( *this ).CreateVisual( propertyMap );
 }
 
-ControlRenderer RendererFactory::CreateControlRenderer( const Image& image )
+Visual::Base VisualFactory::CreateVisual( const Image& image )
 {
-  return GetImplementation( *this ).CreateControlRenderer( image );
+  return GetImplementation( *this ).CreateVisual( image );
 }
 
-ControlRenderer RendererFactory::CreateControlRenderer( const std::string& url, ImageDimensions size )
+Visual::Base VisualFactory::CreateVisual( const std::string& url, ImageDimensions size )
 {
-  return GetImplementation( *this ).CreateControlRenderer( url, size );
+  return GetImplementation( *this ).CreateVisual( url, size );
 }
 
 } // namespace Toolkit
diff --git a/dali-toolkit/devel-api/visual-factory/visual-factory.h b/dali-toolkit/devel-api/visual-factory/visual-factory.h
new file mode 100644 (file)
index 0000000..636147d
--- /dev/null
@@ -0,0 +1,173 @@
+#ifndef DALI_TOOLKIT_VISUAL_FACTORY_H
+#define DALI_TOOLKIT_VISUAL_FACTORY_H
+
+/*
+ * Copyright (c) 2016 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.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+// EXTERNAL INCLUDES
+#include <dali/public-api/object/base-handle.h>
+#include <dali/public-api/images/image-operations.h>
+#include <dali/public-api/object/property-map.h>
+
+// INTERNAL INCLUDES
+#include <dali-toolkit/devel-api/visual-factory/visual-base.h>
+
+namespace Dali
+{
+class Image;
+class Vector4;
+
+namespace Toolkit
+{
+
+namespace Internal DALI_INTERNAL
+{
+class VisualFactory;
+}
+
+/**
+ * @brief VisualFactory is a singleton object that provides and shares visuals between controls
+ *
+ * By setting environment variable 'DALI_DEBUG_RENDERING', a debug visual is used which renders a quad wireframe.
+ *
+ * The visual type is required in the property map for requesting a visual.
+ *
+ * | %Property Name           | Type              |
+ * |--------------------------|-------------------|
+ * | visualType               | INTEGER or STRING |
+ * | shader                   | MAP               |
+ */
+class DALI_IMPORT_API VisualFactory : public BaseHandle
+{
+public:
+
+  /**
+   * @brief Create or retrieve VisualFactory singleton.
+   *
+   * @return A handle to the VisualFactory control.
+   */
+  static VisualFactory Get();
+
+  /**
+   * @brief Create a VisualFactory handle.
+   *
+   * Calling member functions with an uninitialised handle is not allowed.
+   */
+  VisualFactory();
+
+  /**
+   * @brief Destructor
+   *
+   * This is non-virtual since derived Handle types must not contain data or virtual methods.
+   */
+  ~VisualFactory();
+
+  /**
+   * @brief This copy constructor is required for (smart) pointer semantics.
+   *
+   * @param[in] handle A reference to the copied handle.
+   */
+  VisualFactory( const VisualFactory& handle );
+
+  /**
+   * @brief This assignment operator is required for (smart) pointer semantics.
+   *
+   * @param [in] handle  A reference to the copied handle.
+   * @return A reference to this.
+   */
+  VisualFactory& operator=( const VisualFactory& handle );
+
+  /**
+   * @brief Request the visual
+   *
+   * @param[in] propertyMap The map contains the properties required by the visual.
+   *            The content of the map determines the type of visual that will be returned.
+   * @return The handle to the created visual
+   */
+  Visual::Base CreateVisual( const Property::Map& propertyMap  );
+
+  /**
+   * @brief Request the visual to render the image.
+   *
+   * @param[in] image The image to be rendered.
+   * @return The pointer pointing to the visual
+   */
+  Visual::Base CreateVisual( const Image& image );
+
+  /**
+   * @brief Request the visual to render the given resource at the url.
+   *
+   * @param[in] url The URL to the resource to be rendered.
+   * @param[in] size The width and height to fit the loaded image to.
+   * @return The pointer pointing to the visual
+   */
+  Visual::Base CreateVisual( const std::string& url, ImageDimensions size );
+
+private:
+
+  explicit DALI_INTERNAL VisualFactory(Internal::VisualFactory *impl);
+
+};
+
+
+/**
+ * @brief Template to allow discard old visual, get new one and set it on stage if possible
+ *
+ * @tparam ParameterType0 The type of first argument passed to the CreateVisual()
+ * @tparam ParameterType1 The type of second argument passed to the CreateVisual()
+ * @SINCE_1_0.39
+ * @param[in] actor Actor for which the visual will be replaced
+ * @param[in,out] visual The visual to be replaced
+ * @param[in] param0 First template based argument passed to the visual factory
+ * @param[in] param1 Second template based argument passed to the visual factory
+ */
+template< class ParameterType0, class ParameterType1 >
+void InitializeVisual( Actor& actor, Visual::Base& visual, ParameterType0& param0, ParameterType1& param1 )
+{
+  visual.RemoveAndReset( actor );
+  visual = Toolkit::VisualFactory::Get().CreateVisual( param0, param1 );
+  if( visual && actor && actor.OnStage() )
+  {
+    visual.SetOnStage( actor );
+  }
+}
+
+/**
+ * @brief Template to allow discard old visual, get new one and set it on stage if possible
+ *
+ * @tparam ParameterType The type of argument passed to the CreateVisual()
+ * @SINCE_1_0.39
+ * @param[in] actor Actor for which the visual will be replaced
+ * @param[in,out] visual The visual to be replaced
+ * @param[in] param Template based argument passed to the visual factory
+ */
+template< class ParameterType >
+void InitializeVisual( Actor& actor, Visual::Base& visual, ParameterType& param )
+{
+  visual.RemoveAndReset( actor );
+  visual =  Toolkit::VisualFactory::Get().CreateVisual( param );
+  if( visual && actor && actor.OnStage() )
+  {
+    visual.SetOnStage( actor );
+  }
+}
+
+} // namespace Toolkit
+
+} // namespace Dali
+
+#endif // DALI_TOOLKIT_VISUAL_FACTORY_H
index e64289e..d6e218e 100644 (file)
@@ -33,8 +33,9 @@
 
 // INTERNAL INCLUDES
 #include <dali-toolkit/public-api/controls/gaussian-blur-view/gaussian-blur-view.h>
+#include <dali-toolkit/public-api/visuals/visual-properties.h>
 #include <dali-toolkit/devel-api/controls/bloom-view/bloom-view.h>
-#include "../gaussian-blur-view/gaussian-blur-view-impl.h"
+#include <dali-toolkit/internal/controls/gaussian-blur-view/gaussian-blur-view-impl.h>
 
 namespace Dali
 {
@@ -375,10 +376,10 @@ void BloomView::AllocateResources()
     mBloomExtractImageView.SetSize(mDownsampledWidth, mDownsampledHeight); // size needs to match render target
     // Create shader used for extracting the bright parts of an image
     Property::Map customShader;
-    customShader[ "fragmentShader" ] = BLOOM_EXTRACT_FRAGMENT_SOURCE;
-    Property::Map rendererMap;
-    rendererMap.Insert( "shader", customShader );
-    mBloomExtractImageView.SetProperty( Toolkit::ImageView::Property::IMAGE, rendererMap );
+    customShader[ Toolkit::Visual::Shader::Property::FRAGMENT_SHADER ] = BLOOM_EXTRACT_FRAGMENT_SOURCE;
+    Property::Map visualMap;
+    visualMap.Insert( Toolkit::Visual::Property::SHADER, customShader );
+    mBloomExtractImageView.SetProperty( Toolkit::ImageView::Property::IMAGE, visualMap );
 
     // set GaussianBlurView to blur our extracted bloom
     mGaussianBlurView.SetUserImageAndOutputRenderTarget(mBloomExtractTarget, mBlurExtractTarget);
@@ -386,9 +387,9 @@ void BloomView::AllocateResources()
     // use the completed blur in the first buffer and composite with the original child actors render
     mCompositeImageView.SetImage( mRenderTargetForRenderingChildren );
     // Create shader used to composite bloom and original image to output render target
-    customShader[ "fragmentShader" ] = COMPOSITE_FRAGMENT_SOURCE;
-    rendererMap[ "shader" ] = customShader;
-    mCompositeImageView.SetProperty( Toolkit::ImageView::Property::IMAGE, rendererMap );
+    customShader[ Toolkit::Visual::Shader::Property::FRAGMENT_SHADER ] = COMPOSITE_FRAGMENT_SOURCE;
+    visualMap[ Toolkit::Visual::Property::SHADER ] = customShader;
+    mCompositeImageView.SetProperty( Toolkit::ImageView::Property::IMAGE, visualMap );
     TextureSet textureSet = mCompositeImageView.GetRendererAt(0).GetTextures();
     TextureSetImage( textureSet, 1u, mBlurExtractTarget );
 
index c48dfe7..1810031 100644 (file)
@@ -1,8 +1,8 @@
-#ifndef __DALI_TOOLKIT_INTERNAL_COLOR_ADJUSTER_H_
-#define __DALI_TOOLKIT_INTERNAL_COLOR_ADJUSTER_H_
+#ifndef DALI_TOOLKIT_INTERNAL_COLOR_ADJUSTER_H
+#define DALI_TOOLKIT_INTERNAL_COLOR_ADJUSTER_H
 
 /*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2016 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.
  * limitations under the License.
  *
  */
+
+// EXTERNAL INCLUDES
 #include <dali/public-api/math/vector3.h>
 #include <dali/public-api/object/property-map.h>
 
+// INTERNAL INCLUDES
+#include <dali-toolkit/public-api/visuals/visual-properties.h>
+
 #define DALI_COMPOSE_SHADER(STR) #STR
 
 namespace Dali
@@ -89,10 +94,10 @@ inline Property::Map CreateColorAdjuster()
   );
 
   Property::Map customShader;
-  customShader[ "fragmentShader" ] = fragmentShader;
+  customShader[ Toolkit::Visual::Shader::Property::FRAGMENT_SHADER ] = fragmentShader;
 
   Property::Map map;
-  map[ "shader" ] = customShader;
+  map[ Toolkit::Visual::Property::SHADER ] = customShader;
 
   return map;
 }
@@ -103,4 +108,4 @@ inline Property::Map CreateColorAdjuster()
 
 } // namespace Dali
 
-#endif /* __DALI_TOOLKIT_INTERNAL_COLOR_ADJUSTER_H_ */
+#endif // DALI_TOOLKIT_INTERNAL_COLOR_ADJUSTER_H
index 5e99442..5fc7a89 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2016 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.
@@ -29,7 +29,9 @@
 // INTERNAL INCLUDES
 #include <dali-toolkit/public-api/controls/text-controls/text-label.h>
 #include <dali-toolkit/public-api/controls/image-view/image-view.h>
-#include <dali-toolkit/devel-api/controls/renderer-factory/renderer-factory.h>
+#include <dali-toolkit/public-api/visuals/color-visual-properties.h>
+#include <dali-toolkit/devel-api/visual-factory/visual-factory.h>
+
 
 /**
  * Button states and contents
@@ -562,14 +564,14 @@ void Button::SetColor( const Vector4& color, Button::PaintState selectedState )
     {
       // If there is no existing content, create a new actor to use for flat color.
       Actor placementActor = Actor::New();
-      Toolkit::RendererFactory rendererFactory = Toolkit::RendererFactory::Get();
-      Toolkit::ControlRenderer colorRenderer;
+      Toolkit::VisualFactory rendererFactory = Toolkit::VisualFactory::Get();
+      Toolkit::Visual::Base colorRenderer;
 
       Property::Map map;
-      map["rendererType"] = "COLOR";
-      map["mixColor"] = color;
+      map[ Toolkit::Visual::Property::TYPE ] = Toolkit::Visual::COLOR;
+      map[ Toolkit::ColorVisual::Property::MIX_COLOR ] = color;
 
-      colorRenderer = rendererFactory.CreateControlRenderer( map );
+      colorRenderer = rendererFactory.CreateVisual( map );
       colorRenderer.SetOnStage( placementActor );
 
       SetupContent( *contentActor, placementActor ); //
index 4fb7e85..70dbd3f 100644 (file)
@@ -30,8 +30,9 @@
 #include <dali/devel-api/images/texture-set-image.h>
 
 // INTERNAL INCLUDES
+#include <dali-toolkit/public-api/visuals/visual-properties.h>
 #include <dali-toolkit/devel-api/controls/control-depth-index-ranges.h>
-#include <dali-toolkit/devel-api/controls/renderer-factory/renderer-factory.h>
+#include <dali-toolkit/devel-api/visual-factory/visual-factory.h>
 #include <dali-toolkit/internal/filters/blur-two-pass-filter.h>
 #include <dali-toolkit/internal/filters/emboss-filter.h>
 #include <dali-toolkit/internal/filters/spread-filter.h>
@@ -160,8 +161,8 @@ void EffectsView::SetType( Toolkit::EffectsView::EffectType type )
     RemoveFilters();
 
     Actor self = Self();
-    Property::Map rendererMap;
-    rendererMap.Insert( "rendererType", "IMAGE" );
+    Property::Map visualMap;
+    visualMap.Insert( Toolkit::Visual::Property::TYPE, Toolkit::Visual::IMAGE );
 
     switch( type )
     {
@@ -185,10 +186,10 @@ void EffectsView::SetType( Toolkit::EffectsView::EffectType type )
     }
 
     Property::Map customShader;
-    customShader[ "vertexShader" ] = EFFECTS_VIEW_VERTEX_SOURCE;
-    customShader[ "fragmentShader" ] = EFFECTS_VIEW_FRAGMENT_SOURCE;
-    rendererMap[ "shader" ] = customShader;
-    InitializeControlRenderer( self, mRendererPostFilter, rendererMap );
+    customShader[ Toolkit::Visual::Shader::Property::VERTEX_SHADER ] = EFFECTS_VIEW_VERTEX_SOURCE;
+    customShader[ Toolkit::Visual::Shader::Property::FRAGMENT_SHADER ] = EFFECTS_VIEW_FRAGMENT_SOURCE;
+    visualMap[ Toolkit::Visual::Property::SHADER ] = customShader;
+    InitializeVisual( self, mVisualPostFilter, visualMap );
 
     mEffectType = type;
   }
@@ -302,13 +303,13 @@ void EffectsView::OnStageConnection( int depth )
   Enable();
 
   Actor self = Self();
-  if( mRendererPostFilter )
+  if( mVisualPostFilter )
   {
-    mRendererPostFilter.SetOnStage( self );
+    mVisualPostFilter.SetOnStage( self );
   }
-  if( mRendererForChildren )
+  if( mVisualForChildren )
   {
-    mRendererForChildren.SetOnStage( self );
+    mVisualForChildren.SetOnStage( self );
   }
 }
 
@@ -323,13 +324,13 @@ void EffectsView::OnStageDisconnection()
   }
 
   Actor self = Self();
-  if( mRendererPostFilter )
+  if( mVisualPostFilter )
   {
-    mRendererPostFilter.SetOffStage( self );
+    mVisualPostFilter.SetOffStage( self );
   }
-  if( mRendererForChildren )
+  if( mVisualForChildren )
   {
-    mRendererForChildren.SetOffStage( self );
+    mVisualForChildren.SetOffStage( self );
   }
 
   Control::OnStageDisconnection();
@@ -435,14 +436,14 @@ void EffectsView::AllocateResources()
     Actor self( Self() );
 
     mImageForChildren = FrameBufferImage::New( mTargetSize.width, mTargetSize.height, mPixelFormat, Dali::Image::UNUSED );
-    InitializeControlRenderer( self, mRendererForChildren, mImageForChildren );
-    mRendererForChildren.SetDepthIndex( DepthIndex::CONTENT+1 );
+    InitializeVisual( self, mVisualForChildren, mImageForChildren );
+    mVisualForChildren.SetDepthIndex( DepthIndex::CONTENT+1 );
 
     mImagePostFilter = FrameBufferImage::New( mTargetSize.width, mTargetSize.height, mPixelFormat, Dali::Image::UNUSED );
     TextureSet textureSet = TextureSet::New();
     TextureSetImage( textureSet, 0u,  mImagePostFilter );
     self.GetRendererAt( 0 ).SetTextures( textureSet );
-    mRendererPostFilter.SetDepthIndex( DepthIndex::CONTENT );
+    mVisualPostFilter.SetDepthIndex( DepthIndex::CONTENT );
 
     SetupFilters();
   }
index bf6569d..5c49da3 100644 (file)
@@ -27,7 +27,7 @@
 #include <dali-toolkit/devel-api/controls/effects-view/effects-view.h>
 #include <dali-toolkit/public-api/controls/control-impl.h>
 #include <dali-toolkit/public-api/controls/gaussian-blur-view/gaussian-blur-view.h>
-#include <dali-toolkit/devel-api/controls/renderer-factory/renderer-factory.h>
+#include <dali-toolkit/devel-api/visual-factory/visual-factory.h>
 
 namespace Dali
 {
@@ -215,11 +215,11 @@ private: // attributes/properties
 
   /////////////////////////////////////////////////////////////
   // for rendering all user added children to offscreen target
-  FrameBufferImage mImageForChildren;
-  Toolkit::ControlRenderer mRendererForChildren;
-  RenderTask mRenderTaskForChildren;
-  CameraActor mCameraForChildren;
-  Actor mChildrenRoot; // for creating a subtree for all user added child actors
+  FrameBufferImage      mImageForChildren;
+  Toolkit::Visual::Base mVisualForChildren;
+  RenderTask            mRenderTaskForChildren;
+  CameraActor           mCameraForChildren;
+  Actor                 mChildrenRoot; // for creating a subtree for all user added child actors
 
   /////////////////////////////////////////////////////////////
   // background fill color
@@ -231,8 +231,8 @@ private: // attributes/properties
   Vector2 mLastSize;
   /////////////////////////////////////////////////////////////
   // post blur image
-  FrameBufferImage mImagePostFilter;
-  Toolkit::ControlRenderer mRendererPostFilter;
+  FrameBufferImage      mImagePostFilter;
+  Toolkit::Visual::Base mVisualPostFilter;
 
   Vector<ImageFilter*> mFilters;
 
index 7b5b1f6..56fd9e5 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2016 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.
@@ -31,6 +31,7 @@
 
 // INTERNAL INCLUDES
 #include <dali-toolkit/public-api/controls/gaussian-blur-view/gaussian-blur-view.h>
+#include <dali-toolkit/public-api/visuals/visual-properties.h>
 
 // TODO:
 // pixel format / size - set from JSON
@@ -260,8 +261,8 @@ void GaussianBlurView::OnInitialize()
   horizFragmentShaderStringStream << "#define NUM_SAMPLES " << mNumSamples << "\n";
   horizFragmentShaderStringStream << GAUSSIAN_BLUR_FRAGMENT_SOURCE;
   Property::Map source;
-  source[ "fragmentShader" ] = horizFragmentShaderStringStream.str();
-  mCustomShader["shader"] = source;
+  source[ Toolkit::Visual::Shader::Property::FRAGMENT_SHADER ] = horizFragmentShaderStringStream.str();
+  mCustomShader[ Toolkit::Visual::Property::SHADER ] = source;
 
   //////////////////////////////////////////////////////
   // Create actors
index 4571113..7962e2e 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (c) 2014 Samsung Electronics Co., Ltd.
+// Copyright (c) 2016 Samsung Electronics Co., Ltd.
 
 // CLASS HEADER
 #include "image-view-impl.h"
 
 // INTERNAL INCLUDES
 #include <dali-toolkit/public-api/controls/image-view/image-view.h>
-#include <dali-toolkit/devel-api/controls/renderer-factory/renderer-factory.h>
-#include <dali-toolkit/internal/controls/renderers/renderer-string-constants.h>
-#include <dali-toolkit/internal/controls/renderers/control-renderer-impl.h>
+#include <dali-toolkit/public-api/visuals/visual-properties.h>
+#include <dali-toolkit/devel-api/visual-factory/visual-factory.h>
+#include <dali-toolkit/internal/visuals/visual-string-constants.h>
+#include <dali-toolkit/internal/visuals/visual-base-impl.h>
 
 namespace Dali
 {
@@ -81,7 +82,7 @@ void ImageView::SetImage( Image image )
     mImage = image;
 
     Actor self( Self() );
-    InitializeControlRenderer( self, mRenderer, image );
+    InitializeVisual( self, mVisual, image );
     mImageSize = image ? ImageDimensions( image.GetWidth(), image.GetHeight() ) : ImageDimensions( 0, 0 );
 
     RelayoutRequest();
@@ -95,7 +96,7 @@ void ImageView::SetImage( Property::Map map )
   mPropertyMap = map;
 
   Actor self( Self() );
-  InitializeControlRenderer( self, mRenderer, mPropertyMap );
+  InitializeVisual( self, mVisual, mPropertyMap );
 
   Property::Value* widthValue = mPropertyMap.Find( "width" );
   if( widthValue )
@@ -137,9 +138,9 @@ void ImageView::SetImage( const std::string& url, ImageDimensions size )
     }
 
     Actor self( Self() );
-    InitializeControlRenderer( self, mRenderer, url, size );
+    InitializeVisual( self, mVisual, url, size );
 
-    mRenderer.SetSize( mSizeSet );
+    mVisual.SetSize( mSizeSet );
 
     RelayoutRequest();
   }
@@ -152,35 +153,35 @@ Image ImageView::GetImage() const
 
 void ImageView::EnablePreMultipliedAlpha( bool preMultipled )
 {
-  if( mRenderer )
+  if( mVisual )
   {
-     GetImplementation( mRenderer ).EnablePreMultipliedAlpha( preMultipled );
+    Toolkit::GetImplementation( mVisual ).EnablePreMultipliedAlpha( preMultipled );
   }
 }
 
 bool ImageView::IsPreMultipliedAlphaEnabled() const
 {
-  if( mRenderer )
+  if( mVisual )
   {
-    return GetImplementation( mRenderer ).IsPreMultipliedAlphaEnabled();
+    return Toolkit::GetImplementation( mVisual ).IsPreMultipliedAlphaEnabled();
   }
   return false;
 }
 
 void ImageView::SetDepthIndex( int depthIndex )
 {
-  if( mRenderer )
+  if( mVisual )
   {
-    mRenderer.SetDepthIndex( depthIndex );
+    mVisual.SetDepthIndex( depthIndex );
   }
 }
 
 Vector3 ImageView::GetNaturalSize()
 {
-  if( mRenderer )
+  if( mVisual )
   {
     Vector2 rendererNaturalSize;
-    mRenderer.GetNaturalSize( rendererNaturalSize );
+    mVisual.GetNaturalSize( rendererNaturalSize );
     return Vector3( rendererNaturalSize );
   }
 
@@ -234,19 +235,19 @@ void ImageView::OnStageConnection( int depth )
 {
   Control::OnStageConnection( depth );
 
-  if( mRenderer )
+  if( mVisual )
   {
     CustomActor self = Self();
-    mRenderer.SetOnStage( self );
+    mVisual.SetOnStage( self );
   }
 }
 
 void ImageView::OnStageDisconnection()
 {
-  if( mRenderer )
+  if( mVisual )
   {
     CustomActor self = Self();
-    mRenderer.SetOffStage( self );
+    mVisual.SetOffStage( self );
   }
 
   Control::OnStageDisconnection();
@@ -257,10 +258,10 @@ void ImageView::OnSizeSet( const Vector3& targetSize )
   Control::OnSizeSet( targetSize );
   mSizeSet = targetSize;
 
-  if( mRenderer )
+  if( mVisual )
   {
     Vector2 size( targetSize );
-    mRenderer.SetSize( size );
+    mVisual.SetSize( size );
   }
 }
 
@@ -299,25 +300,25 @@ void ImageView::SetProperty( BaseObject* object, Property::Index index, const Pr
         // if its not a string then get a Property::Map from the property if possible.
         else if( value.Get( map ) )
         {
-          Property::Value* shaderValue = map.Find( "shader" );
+          Property::Value* shaderValue = map.Find( Toolkit::Visual::Property::SHADER, CUSTOM_SHADER );
           // set image only if property map contains image information other than custom shader
           if( map.Count() > 1u ||  !shaderValue )
           {
             impl.SetImage( map );
           }
           // the property map contains only the custom shader
-          else if(  impl.mRenderer && map.Count() == 1u &&  shaderValue )
+          else if(  impl.mVisual && map.Count() == 1u &&  shaderValue )
           {
             Property::Map shaderMap;
             if( shaderValue->Get( shaderMap ) )
             {
-              Internal::ControlRenderer& renderer = GetImplementation( impl.mRenderer );
-              renderer.SetCustomShader( shaderMap );
+              Internal::Visual::Base& visual = Toolkit::GetImplementation( impl.mVisual );
+              visual.SetCustomShader( shaderMap );
               if( imageView.OnStage() )
               {
                 // force to create new core renderer to use the newly set shader
-                renderer.SetOffStage( imageView );
-                renderer.SetOnStage( imageView );
+                visual.SetOffStage( imageView );
+                visual.SetOnStage( imageView );
               }
             }
           }
index 150fbd5..669a84f 100644 (file)
@@ -22,7 +22,7 @@
 #include <dali/public-api/object/property-map.h>
 
 // INTERNAL INCLUDES
-#include <dali-toolkit/internal/controls/renderers/image/image-renderer.h>
+#include <dali-toolkit/internal/visuals/image/image-visual.h>
 #include <dali-toolkit/public-api/controls/control-impl.h>
 #include <dali-toolkit/public-api/controls/image-view/image-view.h>
 
@@ -114,7 +114,7 @@ public:
   /**
    * @brief Set the depth index of this image renderer
    *
-   * Renderer with higher depth indices are rendered in front of other renderers with smaller values
+   * Renderer with higher depth indices are rendered in front of other visuals with smaller values
    *
    * @param[in] depthIndex The depth index of this renderer
    */
@@ -158,9 +158,9 @@ private:
   ImageView& operator=( const ImageView& );
 
 private:
-  Toolkit::ControlRenderer  mRenderer;
-  ImageDimensions  mImageSize;
-  Vector2 mSizeSet;
+  Toolkit::Visual::Base  mVisual;
+  ImageDimensions        mImageSize;
+  Vector2                mSizeSet;
 
   std::string      mUrl;          ///< the url for the image if the image came from a URL, empty otherwise
   Image            mImage;        ///< the Image if the image came from a Image, null otherwise
index cc60dd6..d3c4def 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2016 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.
@@ -29,8 +29,8 @@
 #include <dali/public-api/object/property-map.h>
 
 // INTERNAL INCLUDES
-#include <dali-toolkit/devel-api/controls/renderer-factory/renderer-factory.h>
-#include <dali-toolkit/internal/controls/renderers/renderer-string-constants.h>
+#include <dali-toolkit/public-api/visuals/border-visual-properties.h>
+#include <dali-toolkit/devel-api/visual-factory/visual-factory.h>
 
 namespace Dali
 {
@@ -263,14 +263,14 @@ void Magnifier::SetFrameVisibility(bool visible)
     Vector3 sizeOffset(IMAGE_BORDER_INDENT*2.f - 2.f, IMAGE_BORDER_INDENT*2.f - 2.f, 0.0f);
     mFrame.SetSizeModeFactor( sizeOffset );
 
-    Toolkit::RendererFactory rendererFactory = Toolkit::RendererFactory::Get();
+    Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get();
 
     Property::Map map;
-    map[ RENDERER_TYPE ] = BORDER_RENDERER;
-    map[ "borderColor"  ] = Color::WHITE;
-    map[ "borderSize"   ] = IMAGE_BORDER_INDENT;
-    Toolkit::ControlRenderer borderRenderer = rendererFactory.CreateControlRenderer( map );
-    borderRenderer.SetOnStage( mFrame );
+    map[ Toolkit::Visual::Property::TYPE ] = Toolkit::Visual::BORDER;
+    map[ Toolkit::BorderVisual::Property::COLOR ] = Color::WHITE;
+    map[ Toolkit::BorderVisual::Property::SIZE   ] = IMAGE_BORDER_INDENT;
+    Toolkit::Visual::Base borderVisual = visualFactory.CreateVisual( map );
+    borderVisual.SetOnStage( mFrame );
 
     Constraint constraint = Constraint::New<Vector3>( mFrame, Actor::Property::POSITION, EqualToConstraint() );
     constraint.AddSource( ParentSource( Actor::Property::WORLD_POSITION ) );
index 2d75ede..38e7d3e 100644 (file)
@@ -328,6 +328,7 @@ void Model3dView::SetProperty( BaseObject* object, Property::Index index, const
         {
           impl.LoadMaterial();
           impl.CreateMaterial();
+          impl.LoadTextures();
         }
         break;
       }
@@ -434,7 +435,7 @@ void Model3dView::OnStageConnection( int depth )
 
   if( mObjLoader.IsSceneLoaded() )
   {
-    mMesh = mObjLoader.CreateGeometry( GetShaderProperties( mIlluminationType ) );
+    mMesh = mObjLoader.CreateGeometry( GetShaderProperties( mIlluminationType ), true );
 
     CreateMaterial();
     LoadTextures();
@@ -529,7 +530,7 @@ void Model3dView::CreateGeometry()
 {
   if( mObjLoader.IsSceneLoaded() )
   {
-    mMesh = mObjLoader.CreateGeometry( GetShaderProperties( mIlluminationType ) );
+    mMesh = mObjLoader.CreateGeometry( GetShaderProperties( mIlluminationType ), true );
 
     if( mRenderer )
     {
index 2a34f59..6717bab 100644 (file)
@@ -65,34 +65,103 @@ bool ObjLoader::IsMaterialLoaded()
   return mMaterialLoaded;
 }
 
-//TODO: Use a function that can generate more than one normal/tangent per vertex (using angle)
-void ObjLoader::CalculateTangentArray(const Dali::Vector<Vector3>& vertex,
-                                      const Dali::Vector<Vector2>& texcoord,
-                                      Dali::Vector<TriIndex>& triangle,
-                                      Dali::Vector<Vector3>& normal,
-                                      Dali::Vector<Vector3>& tangent)
+void ObjLoader::CalculateHardFaceNormals( const Dali::Vector<Vector3>& vertices, Dali::Vector<TriIndex>& triangles,
+                                          Dali::Vector<Vector3>& normals )
 {
-  Dali::Vector<Vector3> tangents;
-  tangents.Resize( vertex.Size() );
+  int numFaceVertices = 3 * triangles.Size();  //Vertex per face, as each point has different normals for each face.
+  int normalIndex = 0;  //Tracks progress through the array of normals.
 
-  // Resize of a vector of Vector3 will initialise with the default constructor, setting to all zeros.
+  normals.Clear();
+  normals.Resize( numFaceVertices );
 
-  for ( unsigned long a = 0; a < triangle.Size(); a++ )
+  //For each triangle, calculate the normal by crossing two vectors on the triangle's plane.
+  for( unsigned long i = 0; i < triangles.Size(); i++ )
   {
-    Vector3 tangentVector, normalVector;
+    //Triangle vertices.
+    const Vector3& v0 = vertices[triangles[i].pointIndex[0]];
+    const Vector3& v1 = vertices[triangles[i].pointIndex[1]];
+    const Vector3& v2 = vertices[triangles[i].pointIndex[2]];
+
+    //Triangle edges.
+    Vector3 edge1 = v1 - v0;
+    Vector3 edge2 = v2 - v0;
+
+    //Using edges as vectors on the plane, cross to get the normal.
+    Vector3 normalVector = edge1.Cross(edge2);
+    normalVector.Normalize();
+
+    //Assign normals to points.
+    for( unsigned long j = 0; j < 3; j++, normalIndex++ )
+    {
+      triangles[i].normalIndex[j] = normalIndex;
+      normals[normalIndex] = normalVector;
+    }
+  }
+}
 
-    const Vector3& v0 = vertex[triangle[a].pntIndex[0]];
-    const Vector3& v1 = vertex[triangle[a].pntIndex[1]];
-    const Vector3& v2 = vertex[triangle[a].pntIndex[2]];
+void ObjLoader::CalculateSoftFaceNormals( const Dali::Vector<Vector3>& vertices, Dali::Vector<TriIndex>& triangles,
+                                          Dali::Vector<Vector3>& normals )
+{
+  int normalIndex = 0;  //Tracks progress through the array of normals.
+
+  normals.Clear();
+  normals.Resize( vertices.Size() );  //One (averaged) normal per point.
+
+  //For each triangle, calculate the normal by crossing two vectors on the triangle's plane
+  //We then add the triangle's normal to the cumulative normals at each point of it
+  for( unsigned long i = 0; i < triangles.Size(); i++ )
+  {
+    //Triangle vertices.
+    const Vector3& v0 = vertices[triangles[i].pointIndex[0]];
+    const Vector3& v1 = vertices[triangles[i].pointIndex[1]];
+    const Vector3& v2 = vertices[triangles[i].pointIndex[2]];
 
+    //Triangle edges.
     Vector3 edge1 = v1 - v0;
     Vector3 edge2 = v2 - v0;
 
-    normalVector = edge1.Cross(edge2);
+    //Using edges as vectors on the plane, cross to get the normal.
+    Vector3 normalVector = edge1.Cross(edge2);
+
+    //Add this triangle's normal to the cumulative normal of each constituent point and set the index of the normal accordingly.
+    for( unsigned long j = 0; j < 3; j++, normalIndex++ )
+    {
+      triangles[i].normalIndex[j] = triangles[i].pointIndex[j]; //Normal index matches up to vertex index, as one normal per vertex.
+      normals[triangles[i].normalIndex[j]] += normalVector;
+    }
+  }
+
+  //Normalise the normals.
+  for( unsigned long i = 0; i < normals.Size(); i++ )
+  {
+    normals[i].Normalize();
+  }
+}
+
+//TODO: Use a function that can generate more than one normal/tangent per vertex (using angle)
+void ObjLoader::CalculateTangentFrame()
+{
+  //Reset tangent and bitangent vectors to hold new values.
+  mTangents.Clear();
+  mBiTangents.Clear();
+  mTangents.Resize( mPoints.Size() );
+  mBiTangents.Resize( mPoints.Size() );
+
+  //For each triangle, calculate the tangent vector and then add it to the total tangent vector of each point.
+  for ( unsigned long a = 0; a < mTriangles.Size(); a++ )
+  {
+    Vector3 tangentVector;
 
-    const Vector2& w0 = texcoord[triangle[a].texIndex[0]];
-    const Vector2& w1 = texcoord[triangle[a].texIndex[1]];
-    const Vector2& w2 = texcoord[triangle[a].texIndex[2]];
+    const Vector3& v0 = mPoints[mTriangles[a].pointIndex[0]];
+    const Vector3& v1 = mPoints[mTriangles[a].pointIndex[1]];
+    const Vector3& v2 = mPoints[mTriangles[a].pointIndex[2]];
+
+    Vector3 edge1 = v1 - v0;
+    Vector3 edge2 = v2 - v0;
+
+    const Vector2& w0 = mTextures[mTriangles[a].textureIndex[0]];
+    const Vector2& w1 = mTextures[mTriangles[a].textureIndex[1]];
+    const Vector2& w2 = mTextures[mTriangles[a].textureIndex[2]];
 
     float deltaU1 = w1.x - w0.x;
     float deltaV1 = w1.y - w0.y;
@@ -105,38 +174,25 @@ void ObjLoader::CalculateTangentArray(const Dali::Vector<Vector3>& vertex,
     tangentVector.y = f * ( deltaV2 * edge1.y - deltaV1 * edge2.y );
     tangentVector.z = f * ( deltaV2 * edge1.z - deltaV1 * edge2.z );
 
-    tangents[triangle[a].pntIndex[0]] += tangentVector;
-    tangents[triangle[a].pntIndex[1]] += tangentVector;
-    tangents[triangle[a].pntIndex[2]] += tangentVector;
-
-    normal[triangle[a].pntIndex[0]] += normalVector;
-    normal[triangle[a].pntIndex[1]] += normalVector;
-    normal[triangle[a].pntIndex[2]] += normalVector;
+    mTangents[mTriangles[a].pointIndex[0]] += tangentVector;
+    mTangents[mTriangles[a].pointIndex[1]] += tangentVector;
+    mTangents[mTriangles[a].pointIndex[2]] += tangentVector;
   }
 
-  for ( unsigned long a = 0; a < triangle.Size(); a++ )
+  //Orthogonalize tangents and set binormals.
+  for ( unsigned long a = 0; a < mTangents.Size(); a++ )
   {
-    for ( unsigned long j = 0; j < 3; j++ )
-    {
-      triangle[a].nrmIndex[j] = triangle[a].pntIndex[j];
-    }
-  }
-
-  for ( unsigned long a = 0; a < normal.Size(); a++ )
-  {
-    normal[a].Normalize();
-
-    const Vector3& n = normal[a];
-    const Vector3& t = tangents[a];
+    const Vector3& n = mNormals[a];
+    const Vector3& t = mTangents[a];
 
     // Gram-Schmidt orthogonalize
-    Vector3 calc = t - n * n.Dot(t);
-    calc.Normalize();
-    tangent[a] = Vector3( calc.x,calc.y,calc.z );
+    mTangents[a] = t - n * n.Dot(t);
+    mTangents[a].Normalize();
+
+    mBiTangents[a] = mNormals[a].Cross( mTangents[a] );
   }
 }
 
-
 void ObjLoader::CenterAndScale( bool center, Dali::Vector<Vector3>& points )
 {
   BoundingVolume newAABB;
@@ -153,7 +209,6 @@ void ObjLoader::CenterAndScale( bool center, Dali::Vector<Vector3>& points )
     biggestDimension = sceneSize.z;
   }
 
-
   newAABB.Init();
   for( unsigned int ui = 0; ui < points.Size(); ++ui )
   {
@@ -165,29 +220,39 @@ void ObjLoader::CenterAndScale( bool center, Dali::Vector<Vector3>& points )
   mSceneAABB = newAABB;
 }
 
-void ObjLoader::CreateGeometryArray(Dali::Vector<Vertex> & vertices,
-                                    Dali::Vector<Vector2> & textures,
-                                    Dali::Vector<VertexExt> & verticesExt,
-                                    Dali::Vector<unsigned short> & indices)
+void ObjLoader::CreateGeometryArray( Dali::Vector<Vertex> & vertices,
+                                     Dali::Vector<Vector2> & textures,
+                                     Dali::Vector<VertexExt> & verticesExt,
+                                     Dali::Vector<unsigned short> & indices,
+                                     bool useSoftNormals )
 {
-  //If we don't have tangents, calculate them
-  //we need to recalculate the normals too, because we need just one normal,tangent, bitangent per vertex
-  //In the case of a textureless object, we don't need tangents for our shader and so we skip this step
-  //TODO: Use a better function to calculate tangents
-  if( mTangents.Size() == 0 && mHasTexturePoints )
+  //We must calculate the tangents and bitangents if they weren't supplied, or if they don't match up.
+  bool mustCalculateTangents = mTangents.Size() == 0 || mBiTangents.Size() == 0 ||
+                               mTangents.Size() != mBiTangents.Size() || mTangents.Size() != mNormals.Size() ||
+                               mBiTangents.Size() != mNormals.Size();
+
+  //However, we don't need to do this if the object doesn't use textures to begin with.
+  mustCalculateTangents &= mHasTexturePoints;
+
+  //We also have to recalculate the normals if we need to calculate tangents,
+  // as we need just one normal, tangent and bitangent per vertex, rather than the supplied per-face vertices.
+  //Alternatively, we need to calculate the normals if there weren't any to begin with.
+  if( mNormals.Size() == 0 || mustCalculateTangents )
   {
-    mNormals.Clear();
-
-    mNormals.Resize( mPoints.Size() );
-    mTangents.Resize( mPoints.Size() );
-    mBiTangents.Resize( mPoints.Size() );
-
-    CalculateTangentArray( mPoints, mTextures, mTriangles, mNormals, mTangents );
-
-    for ( unsigned int ui = 0 ; ui < mNormals.Size() ; ++ui )
+    if( useSoftNormals || mustCalculateTangents )
     {
-      mBiTangents[ui] = mNormals[ui].Cross(mTangents[ui]);
+      CalculateSoftFaceNormals( mPoints, mTriangles, mNormals );
     }
+    else
+    {
+      CalculateHardFaceNormals( mPoints, mTriangles, mNormals );
+    }
+  }
+
+  //TODO: Use a better function to calculate tangents
+  if( mHasTexturePoints && mustCalculateTangents )
+  {
+    CalculateTangentFrame();
   }
 
   bool mapsCorrespond; //True if the sizes of the arrays necessary for the object agree.
@@ -232,16 +297,16 @@ void ObjLoader::CreateGeometryArray(Dali::Vector<Vertex> & vertices,
     {
       for ( int j = 0 ; j < 3 ; ++j )
       {
-        indices[indiceIndex] = mTriangles[ui].pntIndex[j];
+        indices[indiceIndex] = mTriangles[ui].pointIndex[j];
         indiceIndex++;
 
-        vertices[mTriangles[ui].pntIndex[j]].normal = mNormals[mTriangles[ui].nrmIndex[j]];
+        vertices[mTriangles[ui].pointIndex[j]].normal = mNormals[mTriangles[ui].normalIndex[j]];
 
         if ( mHasTexturePoints )
         {
-          textures[mTriangles[ui].pntIndex[j]] = mTextures[mTriangles[ui].texIndex[j]];
-          verticesExt[mTriangles[ui].pntIndex[j]].tangent = mTangents[mTriangles[ui].nrmIndex[j]];
-          verticesExt[mTriangles[ui].pntIndex[j]].bitangent = mBiTangents[mTriangles[ui].nrmIndex[j]];
+          textures[mTriangles[ui].pointIndex[j]] = mTextures[mTriangles[ui].textureIndex[j]];
+          verticesExt[mTriangles[ui].pointIndex[j]].tangent = mTangents[mTriangles[ui].normalIndex[j]];
+          verticesExt[mTriangles[ui].pointIndex[j]].bitangent = mBiTangents[mTriangles[ui].normalIndex[j]];
         }
       }
     }
@@ -261,18 +326,17 @@ void ObjLoader::CreateGeometryArray(Dali::Vector<Vertex> & vertices,
       for ( int j = 0 ; j < 3 ; ++j )
       {
         Vertex vertex;
-        vertex.position = mPoints[mTriangles[ui].pntIndex[j]];
-        vertex.normal = mNormals[mTriangles[ui].nrmIndex[j]];
+        vertex.position = mPoints[mTriangles[ui].pointIndex[j]];
+        vertex.normal = mNormals[mTriangles[ui].normalIndex[j]];
         vertices[index] = vertex;
 
         if ( mHasTexturePoints )
         {
-          textures[index] = mTextures[mTriangles[ui].texIndex[j]];
+          textures[index] = mTextures[mTriangles[ui].textureIndex[j]];
           VertexExt vertexExt;
-          vertexExt.tangent = mTangents[mTriangles[ui].nrmIndex[j]];
-          vertexExt.bitangent = mBiTangents[mTriangles[ui].nrmIndex[j]];
+          vertexExt.tangent = mTangents[mTriangles[ui].normalIndex[j]];
+          vertexExt.bitangent = mBiTangents[mTriangles[ui].normalIndex[j]];
           verticesExt[index] = vertexExt;
-
         }
 
         index++;
@@ -440,9 +504,9 @@ bool ObjLoader::LoadObject( char* objBuffer, std::streampos fileSize )
       {
         for( int i = 0 ; i < 3; i++ )
         {
-          triangle.pntIndex[i] = ptIdx[i] - 1 - pntAcum;
-          triangle.nrmIndex[i] = nrmIdx[i] - 1 - nrmAcum;
-          triangle.texIndex[i] = texIdx[i] - 1 - texAcum;
+          triangle.pointIndex[i] = ptIdx[i] - 1 - pntAcum;
+          triangle.normalIndex[i] = nrmIdx[i] - 1 - nrmAcum;
+          triangle.textureIndex[i] = texIdx[i] - 1 - texAcum;
         }
         mTriangles.PushBack( triangle );
         face++;
@@ -452,9 +516,9 @@ bool ObjLoader::LoadObject( char* objBuffer, std::streampos fileSize )
       {
         for( int i = 0 ; i < 3; i++ )
         {
-          triangle.pntIndex[i] = ptIdx[i] - 1 - pntAcum;
-          triangle.nrmIndex[i] = nrmIdx[i] - 1 - nrmAcum;
-          triangle.texIndex[i] = texIdx[i] - 1 - texAcum;
+          triangle.pointIndex[i] = ptIdx[i] - 1 - pntAcum;
+          triangle.normalIndex[i] = nrmIdx[i] - 1 - nrmAcum;
+          triangle.textureIndex[i] = texIdx[i] - 1 - texAcum;
         }
         mTriangles.PushBack( triangle );
         face++;
@@ -462,9 +526,9 @@ bool ObjLoader::LoadObject( char* objBuffer, std::streampos fileSize )
         for( int i = 0 ; i < 3; i++ )
         {
           int idx = ( i + 2 ) % numIndices;
-          triangle2.pntIndex[i] = ptIdx[idx] - 1 - pntAcum;
-          triangle2.nrmIndex[i] = nrmIdx[idx] - 1 - nrmAcum;
-          triangle2.texIndex[i] = texIdx[idx] - 1 - texAcum;
+          triangle2.pointIndex[i] = ptIdx[idx] - 1 - pntAcum;
+          triangle2.normalIndex[i] = nrmIdx[idx] - 1 - nrmAcum;
+          triangle2.textureIndex[i] = texIdx[idx] - 1 - texAcum;
         }
         mTriangles.PushBack( triangle2 );
         face++;
@@ -561,7 +625,7 @@ void ObjLoader::LoadMaterial( char* objBuffer, std::streampos fileSize, std::str
   mMaterialLoaded = true;
 }
 
-Geometry ObjLoader::CreateGeometry( int objectProperties )
+Geometry ObjLoader::CreateGeometry( int objectProperties, bool useSoftNormals )
 {
   Geometry surface = Geometry::New();
 
@@ -570,7 +634,7 @@ Geometry ObjLoader::CreateGeometry( int objectProperties )
   Dali::Vector<VertexExt> verticesExt;
   Dali::Vector<unsigned short> indices;
 
-  CreateGeometryArray( vertices, textures, verticesExt, indices );
+  CreateGeometryArray( vertices, textures, verticesExt, indices, useSoftNormals );
 
   //All vertices need at least Position and Normal
   Property::Map vertexFormat;
index 5f4662d..78de233 100644 (file)
@@ -38,9 +38,9 @@ public:
 
   struct TriIndex
   {
-    int pntIndex[3];
-    int nrmIndex[3];
-    int texIndex[3];
+    int pointIndex[3];
+    int normalIndex[3];
+    int textureIndex[3];
   };
 
   struct Vertex
@@ -111,7 +111,7 @@ public:
   void      LoadMaterial( char* objBuffer, std::streampos fileSize, std::string& diffuseTextureUrl,
                           std::string& normalTextureUrl, std::string& glossTextureUrl );
 
-  Geometry  CreateGeometry( int objectProperties );
+  Geometry  CreateGeometry( int objectProperties, bool useSoftNormals );
 
   Vector3   GetCenter();
   Vector3   GetSize();
@@ -136,27 +136,63 @@ private:
   bool mHasNormalMap;
   bool mHasSpecularMap;
 
-  Dali::Vector<Vector3> mPoints;
-  Dali::Vector<Vector2> mTextures;
-  Dali::Vector<Vector2> mTextures2;
-  Dali::Vector<Vector3> mNormals;
-  Dali::Vector<Vector3> mTangents;
-  Dali::Vector<Vector3> mBiTangents;
+  Dali::Vector<Vector3>  mPoints;
+  Dali::Vector<Vector2>  mTextures;
+  Dali::Vector<Vector2>  mTextures2;
+  Dali::Vector<Vector3>  mNormals;
+  Dali::Vector<Vector3>  mTangents;
+  Dali::Vector<Vector3>  mBiTangents;
   Dali::Vector<TriIndex> mTriangles;
 
-  void CalculateTangentArray( const Dali::Vector<Vector3>& vertex,
-                              const Dali::Vector<Vector2>& texcoord,
-                              Dali::Vector<TriIndex>& triangle,
-                              Dali::Vector<Vector3>& normal,
-                              Dali::Vector<Vector3>& tangent );
+  /**
+   * @brief Calculates normals for each point on a per-face basis.
+   *
+   * There are multiple normals per point, each corresponding to the normal of a face connecting to the point.
+   *
+   * @param[in] vertices The vertices of the object.
+   * @param[in, out] triangles The triangles that form the faces. The normals of each triangle will be updated.
+   * @param[in, out] normals The normals to be calculated.
+   */
+  void CalculateHardFaceNormals( const Dali::Vector<Vector3>& vertices,
+                                 Dali::Vector<TriIndex>& triangles,
+                                 Dali::Vector<Vector3>& normals );
+
+  /**
+   * @brief Calculates smoothed normals for each point.
+   *
+   * There is one normal per point, an average of the connecting faces.
+   *
+   * @param[in] vertices The vertices of the object.
+   * @param[in, out] triangles The triangles that form the faces. The normals of each triangle will be updated.
+   * @param[in, out] normals The normals to be calculated.
+   */
+  void CalculateSoftFaceNormals( const Dali::Vector<Vector3>& vertices,
+                                 Dali::Vector<TriIndex>& triangles,
+                                 Dali::Vector<Vector3>& normals );
+
+  /**
+   * @brief Calculates tangents and bitangents for each point of the object.
+   *
+   * These are calculated using the object's points, texture coordinates and normals, so these must be initialised first.
+   */
+  void CalculateTangentFrame();
 
   void CenterAndScale( bool center, Dali::Vector<Vector3>& points );
 
-
+  /**
+   * @brief Using the data loaded from the file, create arrays of data to be used in creating the geometry.
+   *
+   * @param[in] vertices The vertices of the object.
+   * @param[in] textures The texture coordinates of the object.
+   * @param[in] verticesExt Extension to vertices, storing tangents and bitangents.
+   * @param[in] indices Indices of corresponding values to match triangles to their respective data.
+   * @param[in] useSoftNormals Indicates whether we should average the normals at each point to smooth the surface or not.
+   */
   void CreateGeometryArray( Dali::Vector<Vertex> & vertices,
                             Dali::Vector<Vector2> & textures,
                             Dali::Vector<VertexExt> & verticesExt,
-                            Dali::Vector<unsigned short> & indices );
+                            Dali::Vector<unsigned short> & indices,
+                            bool useSoftNormals );
 
 };
 
index 73e8537..c64f5ca 100644 (file)
@@ -1,8 +1,8 @@
-#ifndef __DALI_PAGE_TURN_BOOK_SPINE_EFFECT_H__
-#define __DALI_PAGE_TURN_BOOK_SPINE_EFFECT_H__
+#ifndef DALI_PAGE_TURN_BOOK_SPINE_EFFECT_H
+#define DALI_PAGE_TURN_BOOK_SPINE_EFFECT_H
 
 /*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2016 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.
@@ -18,6 +18,9 @@
  *
  */
 
+// INTERNAL INCLUDES
+#include <dali-toolkit/public-api/visuals/visual-properties.h>
+
 #define DALI_COMPOSE_SHADER(STR) #STR
 
 namespace Dali
@@ -98,10 +101,10 @@ inline Property::Map CreatePageTurnBookSpineEffect()
 
   Property::Map customShader;
 
-  customShader[ "vertexShader" ] = vertexSource;
-  customShader[ "fragmentShader" ] = fragmentSource;
+  customShader[ Toolkit::Visual::Shader::Property::VERTEX_SHADER ] = vertexSource;
+  customShader[ Toolkit::Visual::Shader::Property::FRAGMENT_SHADER ] = fragmentSource;
 
-  map[ "shader" ] = customShader;
+  map[ Toolkit::Visual::Property::SHADER ] = customShader;
   return map;
 }
 
@@ -111,4 +114,4 @@ inline Property::Map CreatePageTurnBookSpineEffect()
 
 } // namespace Dali
 
-#endif /* __DALI_PAGE_TURN_BOOK_SPINE_EFFECT_H__ */
+#endif // DALI_PAGE_TURN_BOOK_SPINE_EFFECT_H
index f4d1126..889062f 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2016 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.
  *
  */
 
-//EXTERNAL INCLUDES
+// EXTERNAL INCLUDES
 #include <string.h>
 #include <dali/public-api/animation/constraint.h>
 #include <dali/public-api/actors/actor.h>
 #include <dali/public-api/object/property-map.h>
 
-//INTERNAL INCLUDES
+// INTERNAL INCLUDES
+#include <dali-toolkit/public-api/visuals/visual-properties.h>
 #include <dali-toolkit/internal/controls/page-turn-view/page-turn-effect.h>
 
 using namespace Dali;
@@ -331,12 +332,12 @@ Property::Map Dali::Toolkit::Internal::CreatePageTurnEffect()
 
   Property::Map customShader;
 
-  customShader[ "vertexShader" ] = vertexShader;
-  customShader[ "fragmentShader" ] = fragmentShader;
-  customShader[ "subdivideGridX" ] = 20;
-  customShader[ "subdivideGridY" ] = 20;
+  customShader[ Toolkit::Visual::Shader::Property::VERTEX_SHADER ] = vertexShader;
+  customShader[ Toolkit::Visual::Shader::Property::FRAGMENT_SHADER ] = fragmentShader;
+  customShader[ Toolkit::Visual::Shader::Property::SUBDIVIDE_GRID_X ] = 20;
+  customShader[ Toolkit::Visual::Shader::Property::SUBDIVIDE_GRID_Y ] = 20;
 
-  map[ "shader" ] = customShader;
+  map[ Toolkit::Visual::Property::SHADER ] = customShader;
   return map;
 
 }
index 01a335c..ddaf292 100644 (file)
 #include <dali/integration-api/debug.h>
 
 // INTERNAL INCLUDES
+#include <dali-toolkit/public-api/visuals/visual-properties.h>
 #include <dali-toolkit/internal/controls/page-turn-view/page-turn-effect.h>
 #include <dali-toolkit/internal/controls/page-turn-view/page-turn-book-spine-effect.h>
-#include <dali-toolkit/internal/controls/renderers/renderer-factory-cache.h>
+#include <dali-toolkit/internal/visuals/visual-factory-cache.h>
+#include <dali-toolkit/internal/visuals/visual-string-constants.h>
 
 using namespace Dali;
 
@@ -40,11 +42,6 @@ namespace //Unnamed namespace
 // broken image is loaded if there is no valid image provided for the page
 const char * const BROKEN_IMAGE_URL( DALI_IMAGE_DIR "broken.png");
 
-// names of shader property map
-const char * const CUSTOM_SHADER( "shader" );
-const char * const CUSTOM_VERTEX_SHADER( "vertexShader" );
-const char * const CUSTOM_FRAGMENT_SHADER( "fragmentShader" );
-
 // properties set on shader, these properties have the constant value in regardless of the page status
 const char * const PROPERTY_SPINE_SHADOW ( "uSpineShadowParameter" ); // uniform for both spine and turn effect
 
@@ -391,7 +388,7 @@ void PageTurnView::OnInitialize()
   // create the grid geometry for pages
   uint16_t width = static_cast<uint16_t>(mPageSize.width / DEFAULT_GRID_DENSITY + 0.5f);
   uint16_t height = static_cast<uint16_t>(mPageSize.height / DEFAULT_GRID_DENSITY + 0.5f);
-  mGeometry = RendererFactoryCache::CreateGridGeometry( Uint16Pair( width, height ) );
+  mGeometry = VisualFactoryCache::CreateGridGeometry( Uint16Pair( width, height ) );
 
   mPages.reserve( NUMBER_OF_CACHED_PAGES );
   for( int i = 0; i < NUMBER_OF_CACHED_PAGES; i++ )
@@ -428,18 +425,18 @@ void PageTurnView::OnInitialize()
 Shader PageTurnView::CreateShader( const Property::Map& shaderMap )
 {
   Shader shader;
-  Property::Value* shaderValue = shaderMap.Find( CUSTOM_SHADER );
+  Property::Value* shaderValue = shaderMap.Find( Toolkit::Visual::Property::SHADER, CUSTOM_SHADER );
   Property::Map shaderSource;
   if( shaderValue && shaderValue->Get( shaderSource ) )
   {
     std::string vertexShader;
-    Property::Value* vertexShaderValue = shaderSource.Find( CUSTOM_VERTEX_SHADER );
+    Property::Value* vertexShaderValue = shaderSource.Find( Toolkit::Visual::Shader::Property::VERTEX_SHADER, CUSTOM_VERTEX_SHADER );
     if( !vertexShaderValue || !vertexShaderValue->Get( vertexShader ) )
     {
       DALI_LOG_ERROR("PageTurnView::CreateShader failed: vertex shader source is not available.\n");
     }
     std::string fragmentShader;
-    Property::Value* fragmentShaderValue = shaderSource.Find( CUSTOM_FRAGMENT_SHADER );
+    Property::Value* fragmentShaderValue = shaderSource.Find( Toolkit::Visual::Shader::Property::FRAGMENT_SHADER, CUSTOM_FRAGMENT_SHADER );
     if( !fragmentShaderValue || !fragmentShaderValue->Get( fragmentShader ) )
     {
       DALI_LOG_ERROR("PageTurnView::CreateShader failed: fragment shader source is not available.\n");
diff --git a/dali-toolkit/internal/controls/renderers/control-renderer-data-impl.cpp b/dali-toolkit/internal/controls/renderers/control-renderer-data-impl.cpp
deleted file mode 100644 (file)
index 168f579..0000000
+++ /dev/null
@@ -1,221 +0,0 @@
-/*
- * Copyright (c) 2015 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.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-// CLASS HEADER
-#include "control-renderer-data-impl.h"
-
-// EXTERNAL HEADER
-#include <dali/public-api/common/dali-common.h>
-#include <dali/integration-api/debug.h>
-#include <dali/public-api/object/property-array.h>
-
-// EXTERNAL HEADER
-
-namespace Dali
-{
-
-namespace Toolkit
-{
-
-namespace Internal
-{
-
-namespace
-{
-//custom shader
-const char * const CUSTOM_SHADER( "shader" );
-const char * const CUSTOM_VERTEX_SHADER( "vertexShader" );
-const char * const CUSTOM_FRAGMENT_SHADER( "fragmentShader" );
-const char * const CUSTOM_SUBDIVIDE_GRID_X( "subdivideGridX" );
-const char * const CUSTOM_SUBDIVIDE_GRID_Y( "subdivideGridY" );
-const char * const CUSTOM_SHADER_HINTS( "hints" ); ///< type STRING for a hint from the below hint strings or an ARRAY of of hint strings
-
-/**
- * where hints should be contain strings of the following shader hints:
- *   "none"                    | corresponds to HINT_NONE
- *   "outputIsTransparent"     | corresponds to HINT_OUTPUT_IS_TRANSPARENT
- *   "modifiesGeometry"        | corresponds to HINT_MODIFIES_GEOMETRY
- */
-
-Shader::ShaderHints HintFromString( std::string hintString )
-{
-  if( hintString == "none" )
-  {
-    return Shader::HINT_NONE;
-  }
-  else if( hintString == "outputIsTransparent" )
-  {
-    return Shader::HINT_OUTPUT_IS_TRANSPARENT;
-  }
-  else if( hintString == "modifiesGeometry" )
-  {
-    return Shader::HINT_MODIFIES_GEOMETRY;
-  }
-  else
-  {
-    DALI_LOG_ERROR( "'%s' hint string is not recognised", hintString.c_str() );
-  }
-
-  return Shader::HINT_NONE;
-}
-
-}// unnamed namespace
-
-Internal::ControlRenderer::Impl::Impl()
-: mCustomShader(NULL),
-  mDepthIndex( 0.0f ),
-  mFlags( 0 )
-{
-}
-
-Internal::ControlRenderer::Impl::~Impl()
-{
-  delete mCustomShader;
-}
-
-Internal::ControlRenderer::Impl::CustomShader::CustomShader( const Property::Map& map )
-: mGridSize( 1, 1 ),
-  mHints( Shader::HINT_NONE )
-{
-  SetPropertyMap( map );
-}
-
-void Internal::ControlRenderer::Impl::CustomShader::SetPropertyMap( const Property::Map& shaderMap )
-{
-  mVertexShader.clear();
-  mFragmentShader.clear();
-  mGridSize = ImageDimensions( 1, 1 );
-  mHints = Shader::HINT_NONE;
-
-  Property::Value* vertexShaderValue = shaderMap.Find( CUSTOM_VERTEX_SHADER );
-  if( vertexShaderValue )
-  {
-    if( !vertexShaderValue->Get( mVertexShader ) )
-    {
-      DALI_LOG_ERROR( "'%s' parameter does not correctly specify a string", CUSTOM_VERTEX_SHADER );
-    }
-  }
-
-  Property::Value* fragmentShaderValue = shaderMap.Find( CUSTOM_FRAGMENT_SHADER );
-  if( fragmentShaderValue )
-  {
-    if( !fragmentShaderValue->Get( mFragmentShader ) )
-    {
-      DALI_LOG_ERROR( "'%s' parameter does not correctly specify a string", CUSTOM_FRAGMENT_SHADER );
-    }
-  }
-
-  Property::Value* subdivideXValue = shaderMap.Find( CUSTOM_SUBDIVIDE_GRID_X );
-  if( subdivideXValue )
-  {
-    int subdivideX;
-    if( !subdivideXValue->Get( subdivideX ) || subdivideX < 1 )
-    {
-      DALI_LOG_ERROR( "'%s' parameter does not correctly specify a value greater than 1", CUSTOM_SUBDIVIDE_GRID_X );
-    }
-    else
-    {
-      mGridSize = ImageDimensions( subdivideX, mGridSize.GetY() );
-    }
-  }
-
-  Property::Value* subdivideYValue = shaderMap.Find( CUSTOM_SUBDIVIDE_GRID_Y );
-  if( subdivideYValue )
-  {
-    int subdivideY;
-    if( !subdivideYValue->Get( subdivideY ) || subdivideY < 1 )
-    {
-      DALI_LOG_ERROR( "'%s' parameter does not correctly specify a value greater than 1", CUSTOM_SUBDIVIDE_GRID_Y );
-    }
-    else
-    {
-      mGridSize = ImageDimensions( mGridSize.GetX(), subdivideY );
-    }
-  }
-
-  Property::Value* hintsValue = shaderMap.Find( CUSTOM_SHADER_HINTS );
-  if( hintsValue )
-  {
-    std::string hintString;
-    Property::Array hintsArray;
-
-    if( hintsValue->Get( hintString ) )
-    {
-      mHints = HintFromString( hintString );
-    }
-    else if( hintsValue->Get( hintsArray ) )
-    {
-      int hints = Shader::HINT_NONE;
-      for( Property::Array::SizeType i = 0; i < hintsArray.Count(); ++i)
-      {
-        Property::Value hintValue = hintsArray[ i ];
-        if( hintValue.Get( hintString ) )
-        {
-          hints |= static_cast< int >( HintFromString( hintString ) );
-        }
-        else
-        {
-          DALI_LOG_ERROR( "'%s' parameter does not correctly specify an hint string at index %d", CUSTOM_SHADER_HINTS, i );
-        }
-
-        mHints = static_cast< Shader::ShaderHints >( hints );
-      }
-    }
-    else
-    {
-      DALI_LOG_ERROR( "'%s' parameter does not correctly specify a hint string or an array of hint strings", CUSTOM_SHADER_HINTS );
-    }
-  }
-}
-
-void Internal::ControlRenderer::Impl::CustomShader::CreatePropertyMap( Property::Map& map ) const
-{
-  if( !mVertexShader.empty() || !mFragmentShader.empty() )
-  {
-    Property::Map customShader;
-    if( !mVertexShader.empty() )
-    {
-      customShader.Insert(CUSTOM_VERTEX_SHADER, mVertexShader );
-    }
-    if( !mFragmentShader.empty() )
-    {
-      customShader.Insert(CUSTOM_FRAGMENT_SHADER, mFragmentShader );
-    }
-
-    if( mGridSize.GetWidth() != 1 )
-    {
-      customShader.Insert(CUSTOM_SUBDIVIDE_GRID_X, mGridSize.GetWidth() );
-    }
-    if( mGridSize.GetHeight() != 1 )
-    {
-      customShader.Insert(CUSTOM_SUBDIVIDE_GRID_Y, mGridSize.GetHeight() );
-    }
-
-    if( mHints != Dali::Shader::HINT_NONE )
-    {
-      customShader.Insert(CUSTOM_SHADER_HINTS, static_cast< int >(mHints) );
-    }
-
-    map.Insert( CUSTOM_SHADER, customShader );
-  }
-}
-
-} // namespace Internal
-
-} // namespace Toolkit
-
-} // namespace Dali
diff --git a/dali-toolkit/internal/controls/renderers/renderer-factory-impl.cpp b/dali-toolkit/internal/controls/renderers/renderer-factory-impl.cpp
deleted file mode 100644 (file)
index e1c75a2..0000000
+++ /dev/null
@@ -1,307 +0,0 @@
- /*
- * Copyright (c) 2015 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.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-// CLASS HEADER
-#include <dali-toolkit/internal/controls/renderers/renderer-factory-impl.h>
-
-// EXTERNAL INCLUDES
-#include <dali/integration-api/debug.h>
-#include <dali/public-api/images/image.h>
-#include <dali/public-api/object/property-array.h>
-#include <dali/public-api/object/type-registry.h>
-#include <dali/public-api/object/type-registry-helper.h>
-
-// INTERNAL INCLUDES
-#include <dali-toolkit/internal/controls/renderers/border/border-renderer.h>
-#include <dali-toolkit/internal/controls/renderers/color/color-renderer.h>
-#include <dali-toolkit/internal/controls/renderers/debug/debug-renderer.h>
-#include <dali-toolkit/internal/controls/renderers/gradient/gradient-renderer.h>
-#include <dali-toolkit/internal/controls/renderers/npatch/npatch-renderer.h>
-#include <dali-toolkit/internal/controls/renderers/image/image-renderer.h>
-#include <dali-toolkit/internal/controls/renderers/svg/svg-renderer.h>
-#include <dali-toolkit/internal/controls/renderers/mesh/mesh-renderer.h>
-#include <dali-toolkit/internal/controls/renderers/primitive/primitive-renderer.h>
-#include <dali-toolkit/internal/controls/renderers/renderer-factory-cache.h>
-#include <dali-toolkit/internal/controls/renderers/renderer-string-constants.h>
-#include <dali-toolkit/internal/controls/renderers/image-atlas-manager.h>
-
-namespace
-{
-const char * const BROKEN_RENDERER_IMAGE_URL( DALI_IMAGE_DIR "broken.png");
-}
-
-namespace Dali
-{
-
-namespace Toolkit
-{
-
-namespace Internal
-{
-
-namespace
-{
-
-BaseHandle Create()
-{
-  BaseHandle handle = Toolkit::RendererFactory::Get();
-
-  return handle;
-}
-
-DALI_TYPE_REGISTRATION_BEGIN_CREATE( Toolkit::RendererFactory, Dali::BaseHandle, Create, true )
-DALI_TYPE_REGISTRATION_END()
-
-} // namespace
-
-RendererFactory::RendererFactory( bool debugEnabled )
-:mDebugEnabled( debugEnabled )
-{
-}
-
-RendererFactory::~RendererFactory()
-{
-}
-
-RendererFactory::RendererType RendererFactory::GetRendererType( const Property::Map& propertyMap )
-{
-  RendererType rendererType = UNDEFINED;
-
-  Property::Value* type = propertyMap.Find( RENDERER_TYPE );
-  std::string typeValue ;
-  if( type && type->Get( typeValue ))
-  {
-    if( typeValue == COLOR_RENDERER )
-    {
-      rendererType = COLOR;
-    }
-    else if( typeValue == BORDER_RENDERER )
-    {
-      rendererType = BORDER;
-    }
-    else if( typeValue == GRADIENT_RENDERER )
-    {
-      rendererType = GRADIENT;
-    }
-    else if( typeValue == IMAGE_RENDERER )
-    {
-      rendererType = IMAGE;
-    }
-    else if( typeValue == MESH_RENDERER )
-    {
-      rendererType = MESH;
-    }
-    else if( typeValue == PRIMITIVE_RENDERER )
-    {
-      rendererType = PRIMITIVE;
-    }
-  }
-
-  // check the url if exist, to decide the renderer type
-  if( rendererType == IMAGE || rendererType == UNDEFINED )
-  {
-    Property::Value* imageURLValue = propertyMap.Find( IMAGE_URL_NAME );
-    std::string imageUrl;
-    if( imageURLValue && imageURLValue->Get( imageUrl ))
-    {
-      if( NinePatchImage::IsNinePatchUrl( imageUrl ) )
-      {
-        rendererType = N_PATCH;
-      }
-      else if( SvgRenderer::IsSvgUrl( imageUrl ) )
-      {
-        rendererType = SVG;
-      }
-      else
-      {
-        rendererType = IMAGE;
-      }
-    }
-  }
-
-  return rendererType;
-}
-
-Toolkit::ControlRenderer RendererFactory::CreateControlRenderer( const Property::Map& propertyMap )
-{
-  ControlRenderer* rendererPtr = NULL;
-
-  RendererType type = GetRendererType( propertyMap );
-  if( type != UNDEFINED)
-  {
-    if( !mFactoryCache )
-    {
-      mFactoryCache = new RendererFactoryCache();
-    }
-
-    if( mDebugEnabled )
-    {
-      return Toolkit::ControlRenderer( new DebugRenderer( *( mFactoryCache.Get() ) ) );
-    }
-  }
-
-  switch( type )
-  {
-    case COLOR:
-    {
-      rendererPtr = new ColorRenderer( *( mFactoryCache.Get() ) );
-      break;
-    }
-     case GRADIENT:
-     {
-       rendererPtr = new GradientRenderer( *( mFactoryCache.Get() ) );
-       break;
-     }
-    case BORDER:
-    {
-      rendererPtr = new BorderRenderer( *( mFactoryCache.Get() ) );
-      break;
-    }
-    case IMAGE:
-    {
-      CreateAtlasManager();
-      rendererPtr = new ImageRenderer( *( mFactoryCache.Get() ), *( mAtlasManager.Get() ) );
-      break;
-    }
-    case N_PATCH:
-    {
-      rendererPtr = new NPatchRenderer( *( mFactoryCache.Get() ) );
-      break;
-    }
-    case SVG:
-    {
-      CreateAtlasManager();
-      rendererPtr = new SvgRenderer( *( mFactoryCache.Get() ), *( mAtlasManager.Get() ) );
-      break;
-    }
-    case MESH:
-    {
-      rendererPtr = new MeshRenderer( *( mFactoryCache.Get() ) );
-      break;
-    }
-    case PRIMITIVE:
-    {
-      rendererPtr = new PrimitiveRenderer( *( mFactoryCache.Get() ) );
-      break;
-    }
-    case UNDEFINED:
-    default:
-    {
-      break;
-    }
-  }
-
-  if( rendererPtr )
-  {
-    Actor actor;
-    rendererPtr->Initialize( actor, propertyMap );
-  }
-  else
-  {
-    DALI_LOG_ERROR( "Renderer type unknown" );
-  }
-
-  return Toolkit::ControlRenderer( rendererPtr );
-}
-
-Toolkit::ControlRenderer RendererFactory::CreateControlRenderer( const Image& image )
-{
-  if( !mFactoryCache )
-  {
-    mFactoryCache = new RendererFactoryCache();
-  }
-
-  if( mDebugEnabled )
-  {
-    return Toolkit::ControlRenderer( new DebugRenderer( *( mFactoryCache.Get() ) ) );
-  }
-
-  NinePatchImage npatchImage = NinePatchImage::DownCast( image );
-  if( npatchImage )
-  {
-    NPatchRenderer* rendererPtr = new NPatchRenderer( *( mFactoryCache.Get() ) );
-    rendererPtr->SetImage( npatchImage );
-
-    return Toolkit::ControlRenderer( rendererPtr );
-  }
-  else
-  {
-    CreateAtlasManager();
-    ImageRenderer* rendererPtr = new ImageRenderer( *( mFactoryCache.Get() ), *( mAtlasManager.Get() ) );
-    Actor actor;
-    rendererPtr->SetImage( actor, image );
-
-    return Toolkit::ControlRenderer( rendererPtr );
-  }
-}
-
-Toolkit::ControlRenderer RendererFactory::CreateControlRenderer( const std::string& url, ImageDimensions size )
-{
-  if( !mFactoryCache )
-  {
-    mFactoryCache = new RendererFactoryCache();
-  }
-
-  if( mDebugEnabled )
-  {
-    return Toolkit::ControlRenderer( new DebugRenderer( *( mFactoryCache.Get() ) ) );
-  }
-
-  if( NinePatchImage::IsNinePatchUrl( url ) )
-  {
-    NPatchRenderer* rendererPtr = new NPatchRenderer( *( mFactoryCache.Get() ) );
-    rendererPtr->SetImage( url );
-
-    return Toolkit::ControlRenderer( rendererPtr );
-  }
-  else if( SvgRenderer::IsSvgUrl( url ) )
-  {
-    CreateAtlasManager();
-    SvgRenderer* rendererPtr = new SvgRenderer( *( mFactoryCache.Get() ), *( mAtlasManager.Get() ) );
-    rendererPtr->SetImage( url, size );
-    return Toolkit::ControlRenderer( rendererPtr );
-  }
-  else
-  {
-    CreateAtlasManager();
-    ImageRenderer* rendererPtr = new ImageRenderer( *( mFactoryCache.Get() ), *( mAtlasManager.Get() ) );
-    Actor actor;
-    rendererPtr->SetImage( actor, url, size );
-
-    return Toolkit::ControlRenderer( rendererPtr );
-  }
-}
-
-Image RendererFactory::GetBrokenRendererImage()
-{
-  return ResourceImage::New( BROKEN_RENDERER_IMAGE_URL );
-}
-
-void RendererFactory::CreateAtlasManager()
-{
-  if( !mAtlasManager )
-  {
-    Shader shader = ImageRenderer::GetImageShader( *( mFactoryCache.Get() ) );
-    mAtlasManager = new ImageAtlasManager();
-    mAtlasManager->SetBrokenImage( BROKEN_RENDERER_IMAGE_URL );
-  }
-}
-
-} // namespace Internal
-
-} // namespace Toolkit
-
-} // namespace Dali
diff --git a/dali-toolkit/internal/controls/renderers/renderer-factory-impl.h b/dali-toolkit/internal/controls/renderers/renderer-factory-impl.h
deleted file mode 100644 (file)
index 57f5f59..0000000
+++ /dev/null
@@