From 8baeadfe23cbb78ccc879aec3350edde7bf8424a Mon Sep 17 00:00:00 2001 From: Xiangyin Ma Date: Wed, 4 Jan 2017 15:30:03 +0000 Subject: [PATCH] Wireframe visual provides correct natural size in debug rendering Change-Id: I34a5ebd57b467004a1c1b06c64f7a08f44a3a96f --- .../src/dali-toolkit-internal/CMakeLists.txt | 3 + .../utc-Dali-DebugRendering.cpp | 94 ++++++++--- automated-tests/src/dali-toolkit/CMakeLists.txt | 1 - .../internal/filters/blur-two-pass-filter.cpp | 5 +- .../visuals/primitive/primitive-visual.cpp | 5 + dali-toolkit/internal/visuals/visual-base-impl.h | 3 +- .../internal/visuals/visual-factory-impl.cpp | 174 ++++++++++----------- .../visuals/wireframe/wireframe-visual.cpp | 74 +++++++-- .../internal/visuals/wireframe/wireframe-visual.h | 58 +++++-- 9 files changed, 287 insertions(+), 130 deletions(-) rename automated-tests/src/{dali-toolkit => dali-toolkit-internal}/utc-Dali-DebugRendering.cpp (59%) diff --git a/automated-tests/src/dali-toolkit-internal/CMakeLists.txt b/automated-tests/src/dali-toolkit-internal/CMakeLists.txt index 20d76c0..fc24948 100644 --- a/automated-tests/src/dali-toolkit-internal/CMakeLists.txt +++ b/automated-tests/src/dali-toolkit-internal/CMakeLists.txt @@ -21,6 +21,7 @@ SET(TC_SOURCES 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) @@ -65,6 +66,8 @@ PKG_CHECK_MODULES(${CAPI_LIB} REQUIRED 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}) diff --git a/automated-tests/src/dali-toolkit/utc-Dali-DebugRendering.cpp b/automated-tests/src/dali-toolkit-internal/utc-Dali-DebugRendering.cpp similarity index 59% rename from automated-tests/src/dali-toolkit/utc-Dali-DebugRendering.cpp rename to automated-tests/src/dali-toolkit-internal/utc-Dali-DebugRendering.cpp index 096bf4d..7348859 100644 --- a/automated-tests/src/dali-toolkit/utc-Dali-DebugRendering.cpp +++ b/automated-tests/src/dali-toolkit-internal/utc-Dali-DebugRendering.cpp @@ -14,9 +14,13 @@ * limitations under the License. * */ +#include #include #include +#include +#include +#include #include #include @@ -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_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 ) { - isDebugVisualType = ( typeValue->Get() == Visual::WIREFRAME ); // Debug Rendering uses the WireframeVisual + DALI_TEST_CHECK( typeValue->Get() == actualType ); } DummyControl actor = DummyControl::New(); @@ -55,10 +66,8 @@ bool IsDebugVisual( Visual::Base& visual ) 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 ); - DALI_TEST_CHECK( IsDebugVisual( colorVisual ) ); + TestDebugVisual( colorVisual, Visual::COLOR, Vector2::ZERO ); // 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 ); - DALI_TEST_CHECK( IsDebugVisual( borderVisual ) ); + TestDebugVisual( borderVisual, Visual::BORDER, Vector2::ZERO ); // 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 ); - 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 ); + 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 ); - 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: + // + // + // 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, "Hello world" ); + 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; @@ -154,7 +208,7 @@ int UtcDaliDebugRenderingGetVisual2(void) 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(); @@ -163,18 +217,18 @@ int UtcDaliDebugRenderingGetVisual2(void) 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 ); - 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 ); - DALI_TEST_CHECK( IsDebugVisual( nPatchVisual ) ); + TestDebugVisual( nPatchVisual, Visual::IMAGE, Vector2::ZERO ); EnvironmentVariable::SetTestingEnvironmentVariable(false); END_TEST; diff --git a/automated-tests/src/dali-toolkit/CMakeLists.txt b/automated-tests/src/dali-toolkit/CMakeLists.txt index 4e59f15..1297575 100644 --- a/automated-tests/src/dali-toolkit/CMakeLists.txt +++ b/automated-tests/src/dali-toolkit/CMakeLists.txt @@ -54,7 +54,6 @@ SET(TC_SOURCES 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 diff --git a/dali-toolkit/internal/filters/blur-two-pass-filter.cpp b/dali-toolkit/internal/filters/blur-two-pass-filter.cpp index 3a258f1..307a3a1 100644 --- a/dali-toolkit/internal/filters/blur-two-pass-filter.cpp +++ b/dali-toolkit/internal/filters/blur-two-pass-filter.cpp @@ -187,7 +187,10 @@ void BlurTwoPassFilter::Enable() // 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(); diff --git a/dali-toolkit/internal/visuals/primitive/primitive-visual.cpp b/dali-toolkit/internal/visuals/primitive/primitive-visual.cpp index e949728..4fb6e82 100644 --- a/dali-toolkit/internal/visuals/primitive/primitive-visual.cpp +++ b/dali-toolkit/internal/visuals/primitive/primitive-visual.cpp @@ -392,6 +392,11 @@ void PrimitiveVisual::DoSetProperties( const Property::Map& propertyMap ) void PrimitiveVisual::GetNaturalSize( Vector2& naturalSize ) { + if( !mGeometry ) + { + CreateGeometry(); + } + naturalSize.x = mObjectDimensions.x; naturalSize.y = mObjectDimensions.y; } diff --git a/dali-toolkit/internal/visuals/visual-base-impl.h b/dali-toolkit/internal/visuals/visual-base-impl.h index f496467..f740909 100644 --- a/dali-toolkit/internal/visuals/visual-base-impl.h +++ b/dali-toolkit/internal/visuals/visual-base-impl.h @@ -178,6 +178,7 @@ protected: virtual ~Base(); protected: + /** * @brief Called by CreatePropertyMap() allowing sub classes to respond to the CreatePropertyMap event * @@ -198,8 +199,6 @@ protected: */ virtual void OnSetTransform() = 0; -protected: - /** * @brief Called by SetOnStage() allowing sub classes to respond to the SetOnStage event * diff --git a/dali-toolkit/internal/visuals/visual-factory-impl.cpp b/dali-toolkit/internal/visuals/visual-factory-impl.cpp index e829889..2410f0a 100644 --- a/dali-toolkit/internal/visuals/visual-factory-impl.cpp +++ b/dali-toolkit/internal/visuals/visual-factory-impl.cpp @@ -89,106 +89,98 @@ Toolkit::Visual::Base VisualFactory::CreateVisual( const Property::Map& property 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" ); } + 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() ); } @@ -207,11 +205,6 @@ Toolkit::Visual::Base VisualFactory::CreateVisual( const Image& image ) mFactoryCache = new VisualFactoryCache(); } - if( mDebugEnabled ) - { - return Toolkit::Visual::Base( WireframeVisual::New( *( mFactoryCache.Get() ) ).Get() ); - } - 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 ); } + if( mDebugEnabled ) + { + //Create a WireframeVisual if we have debug enabled + visualPtr = WireframeVisual::New( *( mFactoryCache.Get() ), visualPtr ); + } + return Toolkit::Visual::Base( visualPtr.Get() ); } @@ -234,11 +233,6 @@ Toolkit::Visual::Base VisualFactory::CreateVisual( const std::string& url, Image 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 @@ -260,6 +254,12 @@ Toolkit::Visual::Base VisualFactory::CreateVisual( const std::string& url, Image 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() ); } diff --git a/dali-toolkit/internal/visuals/wireframe/wireframe-visual.cpp b/dali-toolkit/internal/visuals/wireframe/wireframe-visual.cpp index 52a7710..5fd3160 100644 --- a/dali-toolkit/internal/visuals/wireframe/wireframe-visual.cpp +++ b/dali-toolkit/internal/visuals/wireframe/wireframe-visual.cpp @@ -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 @@ -103,12 +163,6 @@ void WireframeVisual::DoSetOnStage( Actor& actor ) 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 ); diff --git a/dali-toolkit/internal/visuals/wireframe/wireframe-visual.h b/dali-toolkit/internal/visuals/wireframe/wireframe-visual.h index d35beb3..f446806 100644 --- a/dali-toolkit/internal/visuals/wireframe/wireframe-visual.h +++ b/dali-toolkit/internal/visuals/wireframe/wireframe-visual.h @@ -47,9 +47,34 @@ public: * @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. */ - 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: @@ -57,30 +82,43 @@ protected: * @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(); +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; /** + * @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(); @@ -97,14 +135,16 @@ private: */ void InitializeRenderer(); -private: - // Undefined WireframeVisual( const WireframeVisual& visual); // Undefined WireframeVisual& operator=( const WireframeVisual& visual ); +private: + + Visual::BasePtr mActualVisual; + }; } // namespace Internal -- 2.7.4