Wireframe visual provides correct natural size in debug rendering 03/108503/4
authorXiangyin Ma <x1.ma@samsung.com>
Wed, 4 Jan 2017 15:30:03 +0000 (15:30 +0000)
committerXiangyin Ma <x1.ma@samsung.com>
Thu, 5 Jan 2017 14:46:34 +0000 (14:46 +0000)
Change-Id: I34a5ebd57b467004a1c1b06c64f7a08f44a3a96f

automated-tests/src/dali-toolkit-internal/CMakeLists.txt
automated-tests/src/dali-toolkit-internal/utc-Dali-DebugRendering.cpp [moved from automated-tests/src/dali-toolkit/utc-Dali-DebugRendering.cpp with 59% similarity]
automated-tests/src/dali-toolkit/CMakeLists.txt
dali-toolkit/internal/filters/blur-two-pass-filter.cpp
dali-toolkit/internal/visuals/primitive/primitive-visual.cpp
dali-toolkit/internal/visuals/visual-base-impl.h
dali-toolkit/internal/visuals/visual-factory-impl.cpp
dali-toolkit/internal/visuals/wireframe/wireframe-visual.cpp
dali-toolkit/internal/visuals/wireframe/wireframe-visual.h

index 20d76c0..fc24948 100644 (file)
@@ -21,6 +21,7 @@ SET(TC_SOURCES
  utc-Dali-Text-Markup.cpp
  utc-Dali-Text-Typesetter.cpp
  utc-Dali-Text-ViewModel.cpp
  utc-Dali-Text-Markup.cpp
  utc-Dali-Text-Typesetter.cpp
  utc-Dali-Text-ViewModel.cpp
+ utc-Dali-DebugRendering.cpp
 )
 
 # Append list of test harness files (Won't get parsed for test cases)
 )
 
 # Append list of test harness files (Won't get parsed for test cases)
@@ -65,6 +66,8 @@ PKG_CHECK_MODULES(${CAPI_LIB} REQUIRED
 
 SET(CMAKE_CXX_FLAGS  "${CMAKE_CXX_FLAGS} -O0 -ggdb --coverage -Wall -Werror")
 
 
 SET(CMAKE_CXX_FLAGS  "${CMAKE_CXX_FLAGS} -O0 -ggdb --coverage -Wall -Werror")
 
+ADD_DEFINITIONS(-DTEST_RESOURCE_DIR=\"${CMAKE_CURRENT_SOURCE_DIR}/../../resources\" )
+
 FOREACH(directory ${${CAPI_LIB}_LIBRARY_DIRS})
     SET(CMAKE_CXX_LINK_FLAGS "${CMAKE_CXX_LINK_FLAGS} -L${directory}")
 ENDFOREACH(directory ${CAPI_LIB_LIBRARY_DIRS})
 FOREACH(directory ${${CAPI_LIB}_LIBRARY_DIRS})
     SET(CMAKE_CXX_LINK_FLAGS "${CMAKE_CXX_LINK_FLAGS} -L${directory}")
 ENDFOREACH(directory ${CAPI_LIB_LIBRARY_DIRS})
  * limitations under the License.
  *
  */
  * limitations under the License.
  *
  */
+#include <unistd.h>
 
 #include <dali-toolkit-test-suite-utils.h>
 #include <dali-toolkit/devel-api/visual-factory/visual-factory.h>
 
 #include <dali-toolkit-test-suite-utils.h>
 #include <dali-toolkit/devel-api/visual-factory/visual-factory.h>
+#include <dali-toolkit/internal/visuals/wireframe/wireframe-visual.h>
+#include <dali-toolkit/devel-api/visuals/text-visual-properties.h>
+#include <dali-toolkit/devel-api/visuals/visual-properties-devel.h>
 #include <dali/public-api/rendering/renderer.h>
 #include <dali/public-api/rendering/geometry.h>
 
 #include <dali/public-api/rendering/renderer.h>
 #include <dali/public-api/rendering/geometry.h>
 
@@ -32,18 +36,25 @@ namespace
 {
 const char* TEST_IMAGE_FILE_NAME =  "image_01.jpg";
 const char* TEST_NPATCH_FILE_NAME =  "image_01.9.jpg";
 {
 const char* TEST_IMAGE_FILE_NAME =  "image_01.jpg";
 const char* TEST_NPATCH_FILE_NAME =  "image_01.9.jpg";
+const char* TEST_SVG_FILE_NAME = TEST_RESOURCE_DIR "/svg1.svg";
+const char* TEST_GIF_FILE_NAME = TEST_RESOURCE_DIR "/anim.gif";
 
 
-bool IsDebugVisual( Visual::Base& visual )
+const std::string DEFAULT_FONT_DIR( "/resources/fonts" );
+
+void TestDebugVisual( Visual::Base& visual, Visual::Type actualType, Vector2 expectedNaturalSize )
 {
 {
-  bool isDebugVisualType = false;
-  bool isGeometryLineType = false;
+  DALI_TEST_CHECK( &typeid( Toolkit::Internal::WireframeVisual ) == &typeid( GetImplementation(visual) ) );
+
+  Vector2 naturalSize;
+  visual.GetNaturalSize( naturalSize );
+  DALI_TEST_EQUALS( naturalSize, expectedNaturalSize, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
 
   Property::Map propertyMap;
   visual.CreatePropertyMap( propertyMap );
   Property::Value* typeValue = propertyMap.Find( Visual::Property::TYPE,  Property::INTEGER );
   if ( typeValue )
   {
 
   Property::Map propertyMap;
   visual.CreatePropertyMap( propertyMap );
   Property::Value* typeValue = propertyMap.Find( Visual::Property::TYPE,  Property::INTEGER );
   if ( typeValue )
   {
-    isDebugVisualType = ( typeValue->Get<int>() == Visual::WIREFRAME ); // Debug Rendering uses the WireframeVisual
+    DALI_TEST_CHECK( typeValue->Get<int>() == actualType );
   }
 
   DummyControl actor = DummyControl::New();
   }
 
   DummyControl actor = DummyControl::New();
@@ -55,10 +66,8 @@ bool IsDebugVisual( Visual::Base& visual )
   if( actor.GetRendererCount() > 0 )
   {
     Geometry geometry = actor.GetRendererAt( 0 ).GetGeometry();
   if( actor.GetRendererCount() > 0 )
   {
     Geometry geometry = actor.GetRendererAt( 0 ).GetGeometry();
-    isGeometryLineType = ( geometry.GetType() == Geometry::LINES );
+    DALI_TEST_CHECK( geometry.GetType() == Geometry::LINES );
   }
   }
-
-  return isDebugVisualType && isGeometryLineType;
 }
 }
 
 }
 }
 
@@ -87,7 +96,7 @@ int UtcDaliDebugRenderingGetVisual1(void)
   propertyMap1.Insert(ColorVisual::Property::MIX_COLOR,  Color::BLUE);
   Visual::Base colorVisual = factory.CreateVisual(propertyMap1);
   DALI_TEST_CHECK( colorVisual );
   propertyMap1.Insert(ColorVisual::Property::MIX_COLOR,  Color::BLUE);
   Visual::Base colorVisual = factory.CreateVisual(propertyMap1);
   DALI_TEST_CHECK( colorVisual );
-  DALI_TEST_CHECK( IsDebugVisual( colorVisual ) );
+  TestDebugVisual( colorVisual, Visual::COLOR, Vector2::ZERO );
 
   // Test that border visual is replaced with debug visual
   Property::Map propertyMap2;
 
   // Test that border visual is replaced with debug visual
   Property::Map propertyMap2;
@@ -96,7 +105,7 @@ int UtcDaliDebugRenderingGetVisual1(void)
   propertyMap2.Insert(BorderVisual::Property::SIZE,  2.f);
   Visual::Base borderVisual = factory.CreateVisual(propertyMap2);
   DALI_TEST_CHECK( borderVisual );
   propertyMap2.Insert(BorderVisual::Property::SIZE,  2.f);
   Visual::Base borderVisual = factory.CreateVisual(propertyMap2);
   DALI_TEST_CHECK( borderVisual );
-  DALI_TEST_CHECK( IsDebugVisual( borderVisual ) );
+  TestDebugVisual( borderVisual, Visual::BORDER, Vector2::ZERO );
 
   // Test that gradient visual is replaced with debug visual
   Property::Map propertyMap3;
 
   // Test that gradient visual is replaced with debug visual
   Property::Map propertyMap3;
@@ -116,23 +125,68 @@ int UtcDaliDebugRenderingGetVisual1(void)
   propertyMap3.Insert(GradientVisual::Property::STOP_COLOR, stopColors);
   Visual::Base gradientVisual = factory.CreateVisual(propertyMap3);
   DALI_TEST_CHECK( gradientVisual );
   propertyMap3.Insert(GradientVisual::Property::STOP_COLOR, stopColors);
   Visual::Base gradientVisual = factory.CreateVisual(propertyMap3);
   DALI_TEST_CHECK( gradientVisual );
-  DALI_TEST_CHECK( IsDebugVisual( gradientVisual ) );
+  TestDebugVisual( gradientVisual, Visual::GRADIENT, Vector2::ZERO );
 
   // 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 );
 
   // 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 );
+  propertyMap4.Insert( ImageVisual::Property::DESIRED_WIDTH,  50.f );
+  propertyMap4.Insert( ImageVisual::Property::DESIRED_HEIGHT,  100.f );
   Visual::Base imageVisual = factory.CreateVisual( propertyMap4 );
   DALI_TEST_CHECK( imageVisual );
   Visual::Base imageVisual = factory.CreateVisual( propertyMap4 );
   DALI_TEST_CHECK( imageVisual );
-  DALI_TEST_CHECK( IsDebugVisual( imageVisual ) );
+  TestDebugVisual( imageVisual, Visual::IMAGE, Vector2( 50.f, 100.f ) );
 
 
-  // Test that n patch visual is replaced with debug visual
+  // Test that SVG visual is replaced with debug visual
+  // TEST_SVG_FILE:
+  //  <svg width="100" height="100">
+  //  <circle cx="50" cy="50" r="40" stroke="green" stroke-width="4" fill="yellow" />
+  //  </svg>
   Property::Map propertyMap5;
   propertyMap5.Insert( Visual::Property::TYPE,  Visual::IMAGE );
   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 ) );
+  propertyMap5.Insert( ImageVisual::Property::URL,  TEST_SVG_FILE_NAME );
+  Visual::Base svgVisual = factory.CreateVisual( propertyMap5 );
+  DALI_TEST_CHECK( svgVisual );
+  TestDebugVisual( svgVisual, Visual::IMAGE, Vector2(100.f, 100.f) );
+
+  // Test that AnimatedImageVisual is replaced with debug visual
+  // TEST_GIF_FILE: anim.gif
+  // resolution: 50*50, frame count: 4, frame delay: 0.2 second for each frame
+  Property::Map propertyMap6;
+  propertyMap6.Insert( Visual::Property::TYPE,  Visual::IMAGE );
+  propertyMap6.Insert( ImageVisual::Property::URL,  TEST_GIF_FILE_NAME );
+  Visual::Base animatedImageVisual = factory.CreateVisual( propertyMap6 );
+  DALI_TEST_CHECK( animatedImageVisual );
+  TestDebugVisual( animatedImageVisual, Visual::IMAGE, Vector2(50.f, 50.f) );
+
+  // Test that text visual is replaced with debug visual
+
+  // Load some fonts to get the same metrics on different platforms.
+  TextAbstraction::FontClient fontClient = TextAbstraction::FontClient::Get();
+  fontClient.SetDpi( 96u, 96u );
+
+  char* pathNamePtr = get_current_dir_name();
+  const std::string pathName( pathNamePtr );
+  free( pathNamePtr );
+
+  fontClient.GetFontId( pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansRegular.ttf" );
+
+  Property::Map propertyMap7;
+  propertyMap7.Insert( Visual::Property::TYPE, DevelVisual::TEXT );
+  propertyMap7.Insert( TextVisual::Property::ENABLE_MARKUP, true );
+  propertyMap7.Insert( TextVisual::Property::TEXT, "<font family='TizenSans' size='12'>Hello world</font>" );
+  propertyMap7.Insert( TextVisual::Property::MULTI_LINE, true );
+
+  Visual::Base textVisual = factory.CreateVisual( propertyMap7 );
+  DALI_TEST_CHECK( textVisual );
+  DALI_TEST_CHECK( &typeid( Toolkit::Internal::WireframeVisual ) == &typeid( GetImplementation(textVisual) ) );
+
+  Vector2 naturalSize;
+  textVisual.GetNaturalSize( naturalSize );
+  DALI_TEST_EQUALS( naturalSize, Vector2( 80.f, 20.f ), Math::MACHINE_EPSILON_1000, TEST_LOCATION );
+
+  const float height = textVisual.GetHeightForWidth( 40.f );
+  DALI_TEST_EQUALS( height, 40.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION );
 
   EnvironmentVariable::SetTestingEnvironmentVariable(false);
   END_TEST;
 
   EnvironmentVariable::SetTestingEnvironmentVariable(false);
   END_TEST;
@@ -154,7 +208,7 @@ int UtcDaliDebugRenderingGetVisual2(void)
 
   Visual::Base colorVisual = factory.CreateVisual( map);
   DALI_TEST_CHECK( colorVisual );
 
   Visual::Base colorVisual = factory.CreateVisual( map);
   DALI_TEST_CHECK( colorVisual );
-  DALI_TEST_CHECK( IsDebugVisual( colorVisual ) );
+  TestDebugVisual( colorVisual, Visual::COLOR, Vector2::ZERO );
 
   // Test that border visual is replaced with debug visual
   map.Clear();
 
   // Test that border visual is replaced with debug visual
   map.Clear();
@@ -163,18 +217,18 @@ int UtcDaliDebugRenderingGetVisual2(void)
   map[ BorderVisual::Property::SIZE   ] = 2.f;
   Visual::Base borderVisual = factory.CreateVisual( map );
   DALI_TEST_CHECK( borderVisual );
   map[ BorderVisual::Property::SIZE   ] = 2.f;
   Visual::Base borderVisual = factory.CreateVisual( map );
   DALI_TEST_CHECK( borderVisual );
-  DALI_TEST_CHECK( IsDebugVisual( borderVisual ) );
+  TestDebugVisual( borderVisual, Visual::BORDER, Vector2::ZERO );
 
   // 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 );
 
   // 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 ) );
+  TestDebugVisual( imageVisual, Visual::IMAGE, Vector2::ZERO);
 
   // Test that n patch visual is replaced with debug visual
   Visual::Base nPatchVisual = factory.CreateVisual( TEST_NPATCH_FILE_NAME, ImageDimensions() );
   DALI_TEST_CHECK( nPatchVisual );
 
   // 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 ) );
+  TestDebugVisual( nPatchVisual, Visual::IMAGE, Vector2::ZERO );
 
   EnvironmentVariable::SetTestingEnvironmentVariable(false);
   END_TEST;
 
   EnvironmentVariable::SetTestingEnvironmentVariable(false);
   END_TEST;
index 4e59f15..1297575 100644 (file)
@@ -54,7 +54,6 @@ SET(TC_SOURCES
    utc-Dali-Model3dView.cpp
    utc-Dali-Visual.cpp
    utc-Dali-VisualFactory.cpp
    utc-Dali-Model3dView.cpp
    utc-Dali-Visual.cpp
    utc-Dali-VisualFactory.cpp
-   utc-Dali-DebugRendering.cpp
    utc-Dali-ImageAtlas.cpp
    utc-Dali-VideoView.cpp
    utc-Dali-AsyncImageLoader.cpp
    utc-Dali-ImageAtlas.cpp
    utc-Dali-VideoView.cpp
    utc-Dali-AsyncImageLoader.cpp
index 3a258f1..307a3a1 100644 (file)
@@ -187,7 +187,10 @@ void BlurTwoPassFilter::Enable()
 
   // Add effect texture to blend-two-image custom shader
   TextureSet textureSet = mActorForBlending.GetRendererAt(0).GetTextures();
 
   // Add effect texture to blend-two-image custom shader
   TextureSet textureSet = mActorForBlending.GetRendererAt(0).GetTextures();
-  TextureSetImage( textureSet, 1u, mInputImage );
+  if( textureSet )
+  {
+    TextureSetImage( textureSet, 1u, mInputImage );
+  }
 
   SetupCamera();
   CreateRenderTasks();
 
   SetupCamera();
   CreateRenderTasks();
index e949728..4fb6e82 100644 (file)
@@ -392,6 +392,11 @@ void PrimitiveVisual::DoSetProperties( const Property::Map& propertyMap )
 
 void PrimitiveVisual::GetNaturalSize( Vector2& naturalSize )
 {
 
 void PrimitiveVisual::GetNaturalSize( Vector2& naturalSize )
 {
+  if( !mGeometry )
+  {
+    CreateGeometry();
+  }
+
   naturalSize.x = mObjectDimensions.x;
   naturalSize.y = mObjectDimensions.y;
 }
   naturalSize.x = mObjectDimensions.x;
   naturalSize.y = mObjectDimensions.y;
 }
index f496467..f740909 100644 (file)
@@ -178,6 +178,7 @@ protected:
   virtual ~Base();
 
 protected:
   virtual ~Base();
 
 protected:
+
   /**
    * @brief Called by CreatePropertyMap() allowing sub classes to respond to the CreatePropertyMap event
    *
   /**
    * @brief Called by CreatePropertyMap() allowing sub classes to respond to the CreatePropertyMap event
    *
@@ -198,8 +199,6 @@ protected:
    */
   virtual void OnSetTransform() = 0;
 
    */
   virtual void OnSetTransform() = 0;
 
-protected:
-
   /**
    * @brief Called by SetOnStage() allowing sub classes to respond to the SetOnStage event
    *
   /**
    * @brief Called by SetOnStage() allowing sub classes to respond to the SetOnStage event
    *
index e829889..2410f0a 100644 (file)
@@ -89,106 +89,98 @@ Toolkit::Visual::Base VisualFactory::CreateVisual( const Property::Map& property
 
   Visual::BasePtr visualPtr;
 
 
   Visual::BasePtr visualPtr;
 
-  if( mDebugEnabled )
+  Property::Value* typeValue = propertyMap.Find( Toolkit::DevelVisual::Property::TYPE, VISUAL_TYPE );
+  Toolkit::DevelVisual::Type visualType = Toolkit::DevelVisual::IMAGE; // Default to IMAGE type.
+  if( typeValue )
   {
   {
-    //Create a WireframeVisual if we have debug enabled
-    visualPtr = WireframeVisual::New( *( mFactoryCache.Get() ) );
+    Scripting::GetEnumerationProperty( *typeValue, VISUAL_TYPE_TABLE, VISUAL_TYPE_TABLE_COUNT, visualType );
   }
   }
-  else
+
+  switch( visualType )
   {
   {
-    Property::Value* typeValue = propertyMap.Find( Toolkit::DevelVisual::Property::TYPE, VISUAL_TYPE );
-    Toolkit::DevelVisual::Type visualType = Toolkit::DevelVisual::IMAGE; // Default to IMAGE type.
-    if( typeValue )
+    case Toolkit::Visual::BORDER:
     {
     {
-      Scripting::GetEnumerationProperty( *typeValue, VISUAL_TYPE_TABLE, VISUAL_TYPE_TABLE_COUNT, visualType );
+      visualPtr = BorderVisual::New( *( mFactoryCache.Get() ), propertyMap );
+      break;
     }
 
     }
 
-    switch( visualType )
+    case Toolkit::Visual::COLOR:
     {
     {
-      case Toolkit::Visual::BORDER:
-      {
-        visualPtr = BorderVisual::New( *( mFactoryCache.Get() ), propertyMap );
-        break;
-      }
-
-      case Toolkit::Visual::COLOR:
-      {
-        visualPtr = ColorVisual::New( *( mFactoryCache.Get() ), propertyMap );
-        break;
-      }
+      visualPtr = ColorVisual::New( *( mFactoryCache.Get() ), propertyMap );
+      break;
+    }
 
 
-      case Toolkit::Visual::GRADIENT:
-      {
-        visualPtr = GradientVisual::New( *( mFactoryCache.Get() ), propertyMap );
-        break;
-      }
+    case Toolkit::Visual::GRADIENT:
+    {
+      visualPtr = GradientVisual::New( *( mFactoryCache.Get() ), propertyMap );
+      break;
+    }
 
 
-      case Toolkit::Visual::IMAGE:
+    case Toolkit::Visual::IMAGE:
+    {
+      Property::Value* imageURLValue = propertyMap.Find( Toolkit::ImageVisual::Property::URL, IMAGE_URL_NAME );
+      std::string imageUrl;
+      if( imageURLValue && imageURLValue->Get( imageUrl ) )
       {
       {
-        Property::Value* imageURLValue = propertyMap.Find( Toolkit::ImageVisual::Property::URL, IMAGE_URL_NAME );
-        std::string imageUrl;
-        if( imageURLValue && imageURLValue->Get( imageUrl ) )
+        // first resolve url type to know which visual to create
+        UrlType::Type type = ResolveUrlType( imageUrl );
+        if( UrlType::N_PATCH == type )
         {
         {
-          // first resolve url type to know which visual to create
-          UrlType::Type type = ResolveUrlType( imageUrl );
-          if( UrlType::N_PATCH == type )
-          {
-            visualPtr = NPatchVisual::New( *( mFactoryCache.Get() ), imageUrl, propertyMap );
-          }
-          else if( UrlType::SVG == type )
+          visualPtr = NPatchVisual::New( *( mFactoryCache.Get() ), imageUrl, propertyMap );
+        }
+        else if( UrlType::SVG == type )
+        {
+          visualPtr = SvgVisual::New( *( mFactoryCache.Get() ), imageUrl, propertyMap );
+        }
+        else if( UrlType::GIF == type )
+        {
+          visualPtr = AnimatedImageVisual::New( *( mFactoryCache.Get() ), imageUrl, propertyMap );
+        }
+        else // Regular image
+        {
+          bool batchingEnabled( false );
+          Property::Value* batchingEnabledValue = propertyMap.Find( Toolkit::ImageVisual::Property::BATCHING_ENABLED, BATCHING_ENABLED );
+          if( batchingEnabledValue  )
           {
           {
-            visualPtr = SvgVisual::New( *( mFactoryCache.Get() ), imageUrl, propertyMap );
+            batchingEnabledValue->Get( batchingEnabled );
           }
           }
-          else if( UrlType::GIF == type )
+
+          if( batchingEnabled )
           {
           {
-            visualPtr = AnimatedImageVisual::New( *( mFactoryCache.Get() ), imageUrl, propertyMap );
+            visualPtr = BatchImageVisual::New( *( mFactoryCache.Get() ), imageUrl, propertyMap );
           }
           }
-          else // Regular image
+          else
           {
           {
-            bool batchingEnabled( false );
-            Property::Value* batchingEnabledValue = propertyMap.Find( Toolkit::ImageVisual::Property::BATCHING_ENABLED, BATCHING_ENABLED );
-            if( batchingEnabledValue  )
-            {
-              batchingEnabledValue->Get( batchingEnabled );
-            }
-
-            if( batchingEnabled )
-            {
-              visualPtr = BatchImageVisual::New( *( mFactoryCache.Get() ), imageUrl, propertyMap );
-            }
-            else
-            {
-              visualPtr = ImageVisual::New( *( mFactoryCache.Get() ), imageUrl, propertyMap );
-            }
+            visualPtr = ImageVisual::New( *( mFactoryCache.Get() ), imageUrl, propertyMap );
           }
         }
           }
         }
-
-        break;
       }
 
       }
 
-      case Toolkit::Visual::MESH:
-      {
-        visualPtr = MeshVisual::New( *( mFactoryCache.Get() ), propertyMap );
-        break;
-      }
+      break;
+    }
 
 
-      case Toolkit::Visual::PRIMITIVE:
-      {
-        visualPtr = PrimitiveVisual::New( *( mFactoryCache.Get() ), propertyMap );
-        break;
-      }
+    case Toolkit::Visual::MESH:
+    {
+      visualPtr = MeshVisual::New( *( mFactoryCache.Get() ), propertyMap );
+      break;
+    }
 
 
-      case Toolkit::Visual::WIREFRAME:
-      {
-        visualPtr = WireframeVisual::New( *( mFactoryCache.Get() ) );
-        break;
-      }
+    case Toolkit::Visual::PRIMITIVE:
+    {
+      visualPtr = PrimitiveVisual::New( *( mFactoryCache.Get() ), propertyMap );
+      break;
+    }
 
 
-      case Toolkit::DevelVisual::TEXT:
-      {
-        visualPtr = TextVisual::New( *( mFactoryCache.Get() ), propertyMap );
-        break;
-      }
+    case Toolkit::Visual::WIREFRAME:
+    {
+      visualPtr = WireframeVisual::New( *( mFactoryCache.Get() ), propertyMap );
+      break;
+    }
+
+    case Toolkit::DevelVisual::TEXT:
+    {
+      visualPtr = TextVisual::New( *( mFactoryCache.Get() ), propertyMap );
+      break;
     }
   }
 
     }
   }
 
@@ -197,6 +189,12 @@ Toolkit::Visual::Base VisualFactory::CreateVisual( const Property::Map& property
     DALI_LOG_ERROR( "Renderer type unknown\n" );
   }
 
     DALI_LOG_ERROR( "Renderer type unknown\n" );
   }
 
+  if( mDebugEnabled && visualType !=  Toolkit::DevelVisual::WIREFRAME )
+  {
+    //Create a WireframeVisual if we have debug enabled
+    visualPtr = WireframeVisual::New( *( mFactoryCache.Get() ), visualPtr, propertyMap );
+  }
+
   return Toolkit::Visual::Base( visualPtr.Get() );
 }
 
   return Toolkit::Visual::Base( visualPtr.Get() );
 }
 
@@ -207,11 +205,6 @@ Toolkit::Visual::Base VisualFactory::CreateVisual( const Image& image )
     mFactoryCache = new VisualFactoryCache();
   }
 
     mFactoryCache = new VisualFactoryCache();
   }
 
-  if( mDebugEnabled )
-  {
-    return Toolkit::Visual::Base( WireframeVisual::New( *( mFactoryCache.Get() ) ).Get() );
-  }
-
   Visual::BasePtr visualPtr;
 
   NinePatchImage npatchImage = NinePatchImage::DownCast( image );
   Visual::BasePtr visualPtr;
 
   NinePatchImage npatchImage = NinePatchImage::DownCast( image );
@@ -224,6 +217,12 @@ Toolkit::Visual::Base VisualFactory::CreateVisual( const Image& image )
     visualPtr = ImageVisual::New( *( mFactoryCache.Get() ), image );
   }
 
     visualPtr = ImageVisual::New( *( mFactoryCache.Get() ), image );
   }
 
+  if( mDebugEnabled )
+  {
+    //Create a WireframeVisual if we have debug enabled
+    visualPtr = WireframeVisual::New( *( mFactoryCache.Get() ), visualPtr );
+  }
+
   return Toolkit::Visual::Base( visualPtr.Get() );
 }
 
   return Toolkit::Visual::Base( visualPtr.Get() );
 }
 
@@ -234,11 +233,6 @@ Toolkit::Visual::Base VisualFactory::CreateVisual( const std::string& url, Image
     mFactoryCache = new VisualFactoryCache();
   }
 
     mFactoryCache = new VisualFactoryCache();
   }
 
-  if( mDebugEnabled )
-  {
-    return Toolkit::Visual::Base( WireframeVisual::New( *( mFactoryCache.Get() ) ).Get() );
-  }
-
   Visual::BasePtr visualPtr;
 
   // first resolve url type to know which visual to create
   Visual::BasePtr visualPtr;
 
   // first resolve url type to know which visual to create
@@ -260,6 +254,12 @@ Toolkit::Visual::Base VisualFactory::CreateVisual( const std::string& url, Image
     visualPtr = ImageVisual::New( *( mFactoryCache.Get() ), url, size );
   }
 
     visualPtr = ImageVisual::New( *( mFactoryCache.Get() ), url, size );
   }
 
+  if( mDebugEnabled )
+  {
+    //Create a WireframeVisual if we have debug enabled
+    visualPtr = WireframeVisual::New( *( mFactoryCache.Get() ), visualPtr );
+  }
+
   return Toolkit::Visual::Base( visualPtr.Get() );
 }
 
   return Toolkit::Visual::Base( visualPtr.Get() );
 }
 
index 52a7710..5fd3160 100644 (file)
@@ -77,13 +77,36 @@ void main()\n
 
 }
 
 
 }
 
-WireframeVisualPtr WireframeVisual::New( VisualFactoryCache& factoryCache )
+WireframeVisualPtr WireframeVisual::New( VisualFactoryCache& factoryCache, const Property::Map& properties )
 {
 {
-  return new WireframeVisual( factoryCache );
+  Visual::BasePtr emtptyVisual;
+
+  return New(factoryCache, emtptyVisual, properties);
 }
 
 }
 
-WireframeVisual::WireframeVisual( VisualFactoryCache& factoryCache )
-: Visual::Base( factoryCache )
+WireframeVisualPtr WireframeVisual::New( VisualFactoryCache& factoryCache, Visual::BasePtr actualVisual )
+{
+  return new WireframeVisual( factoryCache, actualVisual );
+}
+
+WireframeVisualPtr WireframeVisual::New( VisualFactoryCache& factoryCache, Visual::BasePtr actualVisual, const Property::Map& properties )
+{
+  WireframeVisualPtr wireframeVisual( new WireframeVisual( factoryCache, actualVisual ) );
+
+  // Instead of calling SetProperties, looking for the only valid property 'transform'
+  Property::Value* transformValue = properties.Find( DevelVisual::Property::TRANSFORM, TRANSFORM );
+  Property::Map transformMap;
+  if( transformValue && transformValue->Get( transformMap ) )
+  {
+    wireframeVisual->SetTransformAndSize( transformMap, Vector2::ZERO );
+  }
+
+  return wireframeVisual;
+}
+
+WireframeVisual::WireframeVisual( VisualFactoryCache& factoryCache, Visual::BasePtr actualVisual )
+: Visual::Base( factoryCache ),
+  mActualVisual( actualVisual )
 {
 }
 
 {
 }
 
@@ -91,6 +114,43 @@ WireframeVisual::~WireframeVisual()
 {
 }
 
 {
 }
 
+float WireframeVisual::GetHeightForWidth( float width )
+{
+  if( mActualVisual )
+  {
+    return mActualVisual->GetHeightForWidth( width );
+  }
+  else
+  {
+    return Visual::Base::GetHeightForWidth( width );
+  }
+}
+
+void WireframeVisual::GetNaturalSize( Vector2& naturalSize )
+{
+  if( mActualVisual )
+  {
+    mActualVisual->GetNaturalSize( naturalSize );
+  }
+  else
+  {
+    Visual::Base::GetNaturalSize( naturalSize );
+  }
+}
+
+void WireframeVisual::DoCreatePropertyMap( Property::Map& map ) const
+{
+  if( mActualVisual )
+  {
+    mActualVisual->CreatePropertyMap( map );
+  }
+  else
+  {
+    map.Clear();
+    map.Insert( Toolkit::DevelVisual::Property::TYPE, Toolkit::Visual::WIREFRAME );
+  }
+}
+
 void WireframeVisual::DoSetProperties( const Property::Map& propertyMap )
 {
   // no properties supported at the moment
 void WireframeVisual::DoSetProperties( const Property::Map& propertyMap )
 {
   // no properties supported at the moment
@@ -103,12 +163,6 @@ void WireframeVisual::DoSetOnStage( Actor& actor )
   actor.AddRenderer( mImpl->mRenderer );
 }
 
   actor.AddRenderer( mImpl->mRenderer );
 }
 
-void WireframeVisual::DoCreatePropertyMap( Property::Map& map ) const
-{
-  map.Clear();
-  map.Insert( Toolkit::DevelVisual::Property::TYPE, Toolkit::Visual::WIREFRAME );
-}
-
 void WireframeVisual::InitializeRenderer()
 {
   Shader shader = mFactoryCache.GetShader( VisualFactoryCache::WIREFRAME_SHADER );
 void WireframeVisual::InitializeRenderer()
 {
   Shader shader = mFactoryCache.GetShader( VisualFactoryCache::WIREFRAME_SHADER );
index d35beb3..f446806 100644 (file)
@@ -47,9 +47,34 @@ public:
    * @brief Create a new wireframe visual.
    *
    * @param[in] factoryCache A pointer pointing to the VisualFactoryCache object
    * @brief Create a new wireframe visual.
    *
    * @param[in] factoryCache A pointer pointing to the VisualFactoryCache object
+   * @param[in] properties A Property::Map containing settings for this visual
    * @return A smart-pointer to the newly allocated visual.
    */
    * @return A smart-pointer to the newly allocated visual.
    */
-  static WireframeVisualPtr New( VisualFactoryCache& factoryCache );
+  static WireframeVisualPtr New( VisualFactoryCache& factoryCache, const Property::Map& properties );
+
+  /**
+   * @brief Create a new wireframe visual with an encapsulated actual visual.
+   *
+   * For debugging purpose, the rendering of the encapsulated visual is replaced with wireframe
+   *
+   * @param[in] factoryCache A pointer pointing to the VisualFactoryCache object
+   * @param[in] actualVisual The encapsulated actual visual.
+   * @return A smart-pointer to the newly allocated visual.
+   */
+  static WireframeVisualPtr New( VisualFactoryCache& factoryCache, Visual::BasePtr actualVisual );
+
+  /**
+   * @brief Create a new wireframe visual with an encapsulated actual visual.
+   *
+   * For debugging purpose, the rendering of the encapsulated visual is replaced with wireframe
+   *
+   * @param[in] factoryCache A pointer pointing to the VisualFactoryCache object
+   * @param[in] actualVisual The encapsulated actual visual.
+   * @param[in] properties A Property::Map containing settings for this visual
+   * @return A smart-pointer to the newly allocated visual.
+   */
+  static WireframeVisualPtr New( VisualFactoryCache& factoryCache, Visual::BasePtr actualVisual, const Property::Map& properties );
+
 
 protected:
 
 
 protected:
 
@@ -57,30 +82,43 @@ protected:
    * @brief Constructor.
    *
    * @param[in] factoryCache A pointer pointing to the VisualFactoryCache object
    * @brief Constructor.
    *
    * @param[in] factoryCache A pointer pointing to the VisualFactoryCache object
+   * @param[in] actualVisual The encapsulated actual visual.
    */
    */
-  WireframeVisual( VisualFactoryCache& factoryCache );
+  WireframeVisual( VisualFactoryCache& factoryCache, Visual::BasePtr actualVisual );
 
   /**
    * @brief A reference counted object may only be deleted by calling Unreference().
    */
   virtual ~WireframeVisual();
 
 
   /**
    * @brief A reference counted object may only be deleted by calling Unreference().
    */
   virtual ~WireframeVisual();
 
+protected: // from Visual::Base
+
   /**
   /**
-   * @copydoc Visual::Base::DoSetProperties()
+   * @copydoc Visual::Base::GetHeightForWidth()
    */
    */
-  virtual void DoSetProperties( const Property::Map& propertyMap );
+  virtual float GetHeightForWidth( float width );
 
   /**
 
   /**
-   * @copydoc Visual::Base::DoSetOnStage
+   * @copydoc Visual::Base::GetNaturalSize()
    */
    */
-  virtual void DoSetOnStage( Actor& actor );
+  virtual void GetNaturalSize( Vector2& naturalSize );
 
   /**
 
   /**
-   * @copydoc Visual::Base::CreatePropertyMap
+   * @copydoc Visual::Base::CreatePropertyMap()
    */
   virtual void DoCreatePropertyMap( Property::Map& map ) const;
 
   /**
    */
   virtual void DoCreatePropertyMap( Property::Map& map ) const;
 
   /**
+   * @copydoc Visual::Base::DoSetProperties()
+   */
+  virtual void DoSetProperties( const Property::Map& propertyMap );
+
+  /**
+   * @copydoc Visual::Base::DoSetOnStage
+   */
+  virtual void DoSetOnStage( Actor& actor );
+
+  /**
    * @copydoc Visual::Base::OnSetTransform
    */
   virtual void OnSetTransform();
    * @copydoc Visual::Base::OnSetTransform
    */
   virtual void OnSetTransform();
@@ -97,14 +135,16 @@ private:
    */
   void InitializeRenderer();
 
    */
   void InitializeRenderer();
 
-private:
-
   // Undefined
   WireframeVisual( const WireframeVisual& visual);
 
   // Undefined
   WireframeVisual& operator=( const WireframeVisual& visual );
 
   // Undefined
   WireframeVisual( const WireframeVisual& visual);
 
   // Undefined
   WireframeVisual& operator=( const WireframeVisual& visual );
 
+private:
+
+  Visual::BasePtr mActualVisual;
+
 };
 
 } // namespace Internal
 };
 
 } // namespace Internal