From 9fff4fa5534b563329dc8cd6c0598888f667ee39 Mon Sep 17 00:00:00 2001 From: "adam.b" Date: Mon, 20 Jun 2016 17:31:14 +0100 Subject: [PATCH] Cleaning up RendererFactory API Change-Id: I5d7ad002962ef4a757b5d2900d25d272873060bc --- .../src/dali-toolkit/utc-Dali-ControlRenderer.cpp | 57 +++-- .../src/dali-toolkit/utc-Dali-DebugRenderer.cpp | 65 ++--- .../src/dali-toolkit/utc-Dali-ImageView.cpp | 9 +- .../src/dali-toolkit/utc-Dali-RendererFactory.cpp | 265 +++------------------ .../src/dali-toolkit/utc-Dali-ToolBar.cpp | 5 +- .../controls/renderer-factory/renderer-factory.cpp | 48 +--- .../controls/renderer-factory/renderer-factory.h | 130 ++++------ .../controls/bloom-view/bloom-view-impl.cpp | 23 +- .../controls/bubble-effect/bubble-emitter-impl.cpp | 2 +- .../controls/effects-view/effects-view-impl.cpp | 13 +- .../gaussian-blur-view/gaussian-blur-view-impl.cpp | 14 +- .../gaussian-blur-view/gaussian-blur-view-impl.h | 3 + .../controls/image-view/image-view-impl.cpp | 55 +++-- .../internal/controls/image-view/image-view-impl.h | 1 + .../internal/controls/magnifier/magnifier-impl.cpp | 10 +- .../renderers/control-renderer-data-impl.cpp | 148 +++++------- .../controls/renderers/control-renderer-impl.cpp | 24 +- .../controls/renderers/control-renderer-impl.h | 6 + .../controls/renderers/renderer-factory-impl.cpp | 207 +--------------- .../controls/renderers/renderer-factory-impl.h | 42 +--- .../controls/shadow-view/shadow-view-impl.cpp | 3 +- .../super-blur-view/super-blur-view-impl.cpp | 55 +++-- .../super-blur-view/super-blur-view-impl.h | 6 + .../controls/video-view/video-view-impl.cpp | 8 +- dali-toolkit/internal/filters/emboss-filter.cpp | 30 +-- dali-toolkit/public-api/controls/control-impl.cpp | 32 +-- 26 files changed, 400 insertions(+), 861 deletions(-) diff --git a/automated-tests/src/dali-toolkit/utc-Dali-ControlRenderer.cpp b/automated-tests/src/dali-toolkit/utc-Dali-ControlRenderer.cpp index 0983366..43caadd 100644 --- a/automated-tests/src/dali-toolkit/utc-Dali-ControlRenderer.cpp +++ b/automated-tests/src/dali-toolkit/utc-Dali-ControlRenderer.cpp @@ -54,7 +54,7 @@ int UtcDaliControlRendererCopyAndAssignment(void) Property::Map propertyMap; propertyMap.Insert("rendererType", "color"); propertyMap.Insert("mixColor", Color::BLUE); - ControlRenderer controlRenderer = factory.GetControlRenderer( propertyMap ); + ControlRenderer controlRenderer = factory.CreateControlRenderer( propertyMap ); ControlRenderer controlRendererCopy( controlRenderer ); DALI_TEST_CHECK(controlRenderer == controlRendererCopy); @@ -87,7 +87,7 @@ int UtcDaliControlRendererSetGetDepthIndex(void) Property::Map propertyMap; propertyMap.Insert("rendererType", "color"); propertyMap.Insert("mixColor", Color::BLUE); - ControlRenderer controlRenderer = factory.GetControlRenderer( propertyMap ); + ControlRenderer controlRenderer = factory.CreateControlRenderer( propertyMap ); controlRenderer.SetDepthIndex( 1.f ); @@ -118,7 +118,10 @@ int UtcDaliControlRendererSize(void) Vector2 naturalSize; // color renderer - ControlRenderer colorRenderer = factory.GetControlRenderer( Color::MAGENTA ); + 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); @@ -126,7 +129,7 @@ int UtcDaliControlRendererSize(void) // image renderer Image image = ResourceImage::New(TEST_IMAGE_FILE_NAME, ImageDimensions(100, 200)); - ControlRenderer imageRenderer = factory.GetControlRenderer( image ); + ControlRenderer imageRenderer = factory.CreateControlRenderer( image ); imageRenderer.SetSize( rendererSize ); DALI_TEST_EQUALS( imageRenderer.GetSize(), rendererSize, TEST_LOCATION ); imageRenderer.GetNaturalSize(naturalSize); @@ -137,7 +140,7 @@ int UtcDaliControlRendererSize(void) Vector2 testSize(80.f, 160.f); platform.SetClosestImageSize(testSize); image = ResourceImage::New(TEST_NPATCH_FILE_NAME); - ControlRenderer nPatchRenderer = factory.GetControlRenderer( image ); + ControlRenderer nPatchRenderer = factory.CreateControlRenderer( image ); nPatchRenderer.SetSize( rendererSize ); DALI_TEST_EQUALS( nPatchRenderer.GetSize(), rendererSize, TEST_LOCATION ); nPatchRenderer.GetNaturalSize(naturalSize); @@ -145,7 +148,11 @@ int UtcDaliControlRendererSize(void) // border renderer float borderSize = 5.f; - ControlRenderer borderRenderer = factory.GetControlRenderer( borderSize, Color::RED ); + 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); @@ -163,14 +170,14 @@ int UtcDaliControlRendererSize(void) stopColors.PushBack( Color::RED ); stopColors.PushBack( Color::GREEN ); propertyMap.Insert("stopColor", stopColors); - ControlRenderer gradientRenderer = factory.GetControlRenderer(propertyMap); + 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.GetControlRenderer( TEST_SVG_FILE_NAME ); + ControlRenderer svgRenderer = factory.CreateControlRenderer( TEST_SVG_FILE_NAME, ImageDimensions() ); svgRenderer.SetSize( rendererSize ); DALI_TEST_EQUALS( svgRenderer.GetSize(), rendererSize, TEST_LOCATION ); svgRenderer.GetNaturalSize(naturalSize); @@ -191,7 +198,7 @@ int UtcDaliControlRendererSetOnOffStage(void) Property::Map propertyMap; propertyMap.Insert("rendererType", "color"); propertyMap.Insert("mixColor", Color::BLUE); - ControlRenderer controlRenderer = factory.GetControlRenderer( propertyMap ); + ControlRenderer controlRenderer = factory.CreateControlRenderer( propertyMap ); Actor actor = Actor::New(); actor.SetSize(200.f, 200.f); @@ -238,7 +245,7 @@ int UtcDaliControlRendererRemoveAndReset(void) } Image image = ResourceImage::New(TEST_IMAGE_FILE_NAME, ImageDimensions(100, 200)); - imageRenderer = factory.GetControlRenderer(image); + imageRenderer = factory.CreateControlRenderer(image); DALI_TEST_CHECK( imageRenderer ); imageRenderer.SetOnStage( actor ); @@ -264,7 +271,7 @@ int UtcDaliControlRendererGetPropertyMap1(void) Property::Map propertyMap; propertyMap.Insert("rendererType", "color"); propertyMap.Insert("mixColor", Color::BLUE); - ControlRenderer colorRenderer = factory.GetControlRenderer( propertyMap ); + ControlRenderer colorRenderer = factory.CreateControlRenderer( propertyMap ); Property::Map resultMap; colorRenderer.CreatePropertyMap( resultMap ); @@ -279,7 +286,9 @@ int UtcDaliControlRendererGetPropertyMap1(void) // change the blend color Actor actor; - factory.ResetRenderer( colorRenderer, actor, Color::CYAN ); + colorRenderer.RemoveAndReset( actor ); + propertyMap["mixColor"] = Color::CYAN; + colorRenderer = factory.CreateControlRenderer( propertyMap ); colorRenderer.CreatePropertyMap( resultMap ); colorValue = resultMap.Find( "mixColor", Property::VECTOR4 ); @@ -299,7 +308,7 @@ int UtcDaliControlRendererGetPropertyMap2(void) propertyMap.Insert("rendererType", "border"); propertyMap.Insert("borderColor", Color::BLUE); propertyMap.Insert("borderSize", 5.f); - ControlRenderer borderRenderer = factory.GetControlRenderer( propertyMap ); + ControlRenderer borderRenderer = factory.CreateControlRenderer( propertyMap ); Property::Map resultMap; borderRenderer.CreatePropertyMap( resultMap ); @@ -317,7 +326,11 @@ int UtcDaliControlRendererGetPropertyMap2(void) DALI_TEST_CHECK( sizeValue ); DALI_TEST_CHECK( sizeValue->Get() == 5.f ); - borderRenderer = factory.GetControlRenderer( 10.f, Color::CYAN ); + 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 ); @@ -359,7 +372,7 @@ int UtcDaliControlRendererGetPropertyMap3(void) stopColors.PushBack( Color::GREEN ); propertyMap.Insert("stopColor", stopColors); - ControlRenderer gradientRenderer = factory.GetControlRenderer(propertyMap); + ControlRenderer gradientRenderer = factory.CreateControlRenderer(propertyMap); Property::Map resultMap; gradientRenderer.CreatePropertyMap( resultMap ); @@ -426,7 +439,7 @@ int UtcDaliControlRendererGetPropertyMap4(void) stopColors.PushBack( Color::GREEN ); propertyMap.Insert("stopColor", stopColors); - ControlRenderer gradientRenderer = factory.GetControlRenderer(propertyMap); + ControlRenderer gradientRenderer = factory.CreateControlRenderer(propertyMap); DALI_TEST_CHECK( gradientRenderer ); Property::Map resultMap; @@ -488,7 +501,7 @@ int UtcDaliControlRendererGetPropertyMap5(void) propertyMap.Insert( "samplingMode", "BOX_THEN_NEAREST" ); propertyMap.Insert( "synchronousLoading", true ); - ControlRenderer imageRenderer = factory.GetControlRenderer(propertyMap); + ControlRenderer imageRenderer = factory.CreateControlRenderer(propertyMap); DALI_TEST_CHECK( imageRenderer ); Property::Map resultMap; @@ -525,7 +538,7 @@ int UtcDaliControlRendererGetPropertyMap5(void) // 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.GetControlRenderer(image); + imageRenderer = factory.CreateControlRenderer(image); imageRenderer.CreatePropertyMap( resultMap ); value = resultMap.Find( "rendererType", Property::STRING ); @@ -569,7 +582,7 @@ int UtcDaliControlRendererGetPropertyMap6(void) propertyMap.Insert( "rendererType", "image" ); propertyMap.Insert( "url", TEST_NPATCH_FILE_NAME ); propertyMap.Insert( "borderOnly", true ); - ControlRenderer nPatchRenderer = factory.GetControlRenderer( propertyMap ); + ControlRenderer nPatchRenderer = factory.CreateControlRenderer( propertyMap ); Property::Map resultMap; nPatchRenderer.CreatePropertyMap( resultMap ); @@ -600,7 +613,7 @@ int UtcDaliControlRendererGetPropertyMap7(void) Property::Map propertyMap; propertyMap.Insert( "rendererType", "image" ); propertyMap.Insert( "url", TEST_SVG_FILE_NAME ); - ControlRenderer svgRenderer = factory.GetControlRenderer( propertyMap ); + ControlRenderer svgRenderer = factory.CreateControlRenderer( propertyMap ); Property::Map resultMap; svgRenderer.CreatePropertyMap( resultMap ); @@ -614,7 +627,7 @@ int UtcDaliControlRendererGetPropertyMap7(void) DALI_TEST_CHECK( value->Get() == TEST_SVG_FILE_NAME ); // request SvgRenderer with an URL - ControlRenderer svgRenderer2 = factory.GetControlRenderer( TEST_SVG_FILE_NAME ); + 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 @@ -643,7 +656,7 @@ int UtcDaliControlRendererGetPropertyMap8(void) propertyMap.Insert( "materialUrl", TEST_MTL_FILE_NAME ); propertyMap.Insert( "texturesPath", TEST_RESOURCE_LOCATION ); propertyMap.Insert( "shaderType", "textureless" ); - ControlRenderer meshRenderer = factory.GetControlRenderer( propertyMap ); + ControlRenderer meshRenderer = factory.CreateControlRenderer( propertyMap ); Property::Map resultMap; meshRenderer.CreatePropertyMap( resultMap ); diff --git a/automated-tests/src/dali-toolkit/utc-Dali-DebugRenderer.cpp b/automated-tests/src/dali-toolkit/utc-Dali-DebugRenderer.cpp index 702f726..52f16ed 100644 --- a/automated-tests/src/dali-toolkit/utc-Dali-DebugRenderer.cpp +++ b/automated-tests/src/dali-toolkit/utc-Dali-DebugRenderer.cpp @@ -74,7 +74,7 @@ int UtcDaliDebugRendererGetRenderer1(void) Property::Map propertyMap1; propertyMap1.Insert("rendererType", "color"); propertyMap1.Insert("mixColor", Color::BLUE); - ControlRenderer colorRenderer = factory.GetControlRenderer(propertyMap1); + ControlRenderer colorRenderer = factory.CreateControlRenderer(propertyMap1); DALI_TEST_CHECK( colorRenderer ); DALI_TEST_CHECK( IsDebugRenderer( colorRenderer ) ); @@ -83,7 +83,7 @@ int UtcDaliDebugRendererGetRenderer1(void) propertyMap2.Insert("rendererType", "border"); propertyMap2.Insert("borderColor", Color::BLUE); propertyMap2.Insert("borderSize", 2.f); - ControlRenderer borderRenderer = factory.GetControlRenderer(propertyMap2); + ControlRenderer borderRenderer = factory.CreateControlRenderer(propertyMap2); DALI_TEST_CHECK( borderRenderer ); DALI_TEST_CHECK( IsDebugRenderer( borderRenderer ) ); @@ -103,7 +103,7 @@ int UtcDaliDebugRendererGetRenderer1(void) stopColors.PushBack( Color::RED ); stopColors.PushBack( Color::GREEN ); propertyMap3.Insert("gradientStopColor", stopColors); - ControlRenderer gradientRenderer = factory.GetControlRenderer(propertyMap3); + ControlRenderer gradientRenderer = factory.CreateControlRenderer(propertyMap3); DALI_TEST_CHECK( gradientRenderer ); DALI_TEST_CHECK( IsDebugRenderer( gradientRenderer ) ); @@ -111,7 +111,7 @@ int UtcDaliDebugRendererGetRenderer1(void) Property::Map propertyMap4; propertyMap4.Insert( "rendererType", "image" ); propertyMap4.Insert( "url", TEST_IMAGE_FILE_NAME ); - ControlRenderer imageRenderer = factory.GetControlRenderer( propertyMap4 ); + ControlRenderer imageRenderer = factory.CreateControlRenderer( propertyMap4 ); DALI_TEST_CHECK( imageRenderer ); DALI_TEST_CHECK( IsDebugRenderer( imageRenderer ) ); @@ -119,7 +119,7 @@ int UtcDaliDebugRendererGetRenderer1(void) Property::Map propertyMap5; propertyMap5.Insert( "rendererType", "image" ); propertyMap5.Insert( "url", TEST_NPATCH_FILE_NAME ); - ControlRenderer nPatchRenderer = factory.GetControlRenderer( propertyMap4 ); + ControlRenderer nPatchRenderer = factory.CreateControlRenderer( propertyMap4 ); DALI_TEST_CHECK( nPatchRenderer ); DALI_TEST_CHECK( IsDebugRenderer( nPatchRenderer ) ); @@ -137,65 +137,34 @@ int UtcDaliDebugRendererGetRenderer2(void) DALI_TEST_CHECK( factory ); // Test that color renderer is replaced with debug renderer - ControlRenderer colorRenderer = factory.GetControlRenderer(Color::CYAN); + 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 - ControlRenderer borderRenderer = factory.GetControlRenderer(2.f, Color::GREEN); + 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.GetControlRenderer( image ); + 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.GetControlRenderer( TEST_NPATCH_FILE_NAME ); + ControlRenderer nPatchRenderer = factory.CreateControlRenderer( TEST_NPATCH_FILE_NAME, ImageDimensions() ); DALI_TEST_CHECK( nPatchRenderer ); DALI_TEST_CHECK( IsDebugRenderer( nPatchRenderer ) ); EnvironmentVariable::SetTestingEnvironmentVariable(false); END_TEST; } - -int UtcDaliDebugRendererResetRenderer(void) -{ - EnvironmentVariable::SetTestingEnvironmentVariable(true); - ToolkitTestApplication application; - tet_infoline( "UtcDaliDebugRendererResetRenderer: Reset renderer with various parameters" ); - - RendererFactory factory = RendererFactory::Get(); - DALI_TEST_CHECK( factory ); - - // Test that color renderer is replaced with debug renderer - ControlRenderer controlRenderer = factory.GetControlRenderer(Color::CYAN); - DALI_TEST_CHECK( controlRenderer ); - DALI_TEST_CHECK( IsDebugRenderer( controlRenderer ) ); - - Actor actor; - // Reset to render another color - // Test that color renderer is replaced with debug renderer - factory.ResetRenderer( controlRenderer, actor, Color::BLUE ); - DALI_TEST_CHECK( IsDebugRenderer( controlRenderer ) ); - - // Reset to render an image - // Test that image renderer is replaced with debug renderer - Image image = ResourceImage::New(TEST_IMAGE_FILE_NAME); - factory.ResetRenderer( controlRenderer, actor, image ); - DALI_TEST_CHECK( IsDebugRenderer( controlRenderer ) ); - - // Reset with a property map of border renderer - // Test that border renderer is replaced with debug renderer - Property::Map propertyMap; - propertyMap.Insert("rendererType", "border"); - propertyMap.Insert("borderColor", Color::BLUE); - propertyMap.Insert("borderSize", 2.f); - factory.ResetRenderer( controlRenderer, actor, propertyMap ); - DALI_TEST_CHECK( IsDebugRenderer( controlRenderer ) ); - - EnvironmentVariable::SetTestingEnvironmentVariable(false); - END_TEST; -} diff --git a/automated-tests/src/dali-toolkit/utc-Dali-ImageView.cpp b/automated-tests/src/dali-toolkit/utc-Dali-ImageView.cpp index bd04f56..709282a 100644 --- a/automated-tests/src/dali-toolkit/utc-Dali-ImageView.cpp +++ b/automated-tests/src/dali-toolkit/utc-Dali-ImageView.cpp @@ -442,9 +442,10 @@ int UtcDaliImageViewSyncLoading(void) // Sync loading, no atlasing for big size image { - ImageView imageView = ImageView::New( gImage_600_RGB ); + ImageView imageView = ImageView::New(); // Sync loading is used + syncLoadingMap[ "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. @@ -993,7 +994,6 @@ int UtcDaliImageViewSetImageNativeImageWithCustomShader(void) customShader.Insert( "hints", shaderHints ); Property::Map map; - map.Insert( "rendererType", "image" ); map.Insert( "shader", customShader ); TestNativeImagePointer nativeImageInterface = TestNativeImage::New( width, height ); @@ -1003,8 +1003,6 @@ int UtcDaliImageViewSetImageNativeImageWithCustomShader(void) imageView.SetProperty( ImageView::Property::IMAGE, map ); Stage::GetCurrent().Add( imageView ); - imageView.SetProperty( ImageView::Property::IMAGE, map ); - TestGlAbstraction& gl = application.GetGlAbstraction(); gl.EnableTextureCallTrace( true ); @@ -1045,7 +1043,6 @@ int UtcDaliImageViewSetImageBufferImageWithCustomShaderToNativeImage(void) customShader.Insert( "hints", shaderHints ); Property::Map map; - map.Insert( "rendererType", "image" ); map.Insert( "shader", customShader ); BufferImage image = CreateBufferImage( width, height, Color::WHITE ); @@ -1054,8 +1051,6 @@ int UtcDaliImageViewSetImageBufferImageWithCustomShaderToNativeImage(void) imageView.SetProperty( ImageView::Property::IMAGE, map ); Stage::GetCurrent().Add( imageView ); - imageView.SetProperty( ImageView::Property::IMAGE, map ); - TestGlAbstraction& gl = application.GetGlAbstraction(); gl.EnableTextureCallTrace( true ); diff --git a/automated-tests/src/dali-toolkit/utc-Dali-RendererFactory.cpp b/automated-tests/src/dali-toolkit/utc-Dali-RendererFactory.cpp index 94a369f..0e33b72 100644 --- a/automated-tests/src/dali-toolkit/utc-Dali-RendererFactory.cpp +++ b/automated-tests/src/dali-toolkit/utc-Dali-RendererFactory.cpp @@ -296,7 +296,7 @@ int UtcDaliRendererFactoryGetColorRenderer1(void) propertyMap.Insert("rendererType", "color"); propertyMap.Insert("mixColor", testColor); - ControlRenderer controlRenderer = factory.GetControlRenderer(propertyMap); + ControlRenderer controlRenderer = factory.CreateControlRenderer(propertyMap); DALI_TEST_CHECK( controlRenderer ); Actor actor = Actor::New(); @@ -319,7 +319,10 @@ int UtcDaliRendererFactoryGetColorRenderer2(void) DALI_TEST_CHECK( factory ); Vector4 testColor( 1.f, 0.5f, 0.3f, 0.2f ); - ControlRenderer controlRenderer = factory.GetControlRenderer(testColor); + Dali::Property::Map map; + map[ "rendererType" ] = "color"; + map[ "mixColor" ] = testColor; + ControlRenderer controlRenderer = factory.CreateControlRenderer( map ); DALI_TEST_CHECK( controlRenderer ); Actor actor = Actor::New(); @@ -351,7 +354,7 @@ int UtcDaliRendererFactoryGetBorderRenderer1(void) propertyMap.Insert("borderColor", testColor); propertyMap.Insert("borderSize", testSize); - ControlRenderer controlRenderer = factory.GetControlRenderer(propertyMap); + ControlRenderer controlRenderer = factory.CreateControlRenderer(propertyMap); DALI_TEST_CHECK( controlRenderer ); Actor actor = Actor::New(); @@ -394,7 +397,11 @@ int UtcDaliRendererFactoryGetBorderRenderer2(void) Vector4 testColor( 1.f, 0.5f, 0.3f, 1.f ); float testSize = 5.f; - ControlRenderer controlRenderer = factory.GetControlRenderer(testSize, testColor ); + Dali::Property::Map propertyMap; + propertyMap[ "rendererType" ] = "border"; + propertyMap[ "borderColor" ] = testColor; + propertyMap[ "borderSize" ] = testSize; + ControlRenderer controlRenderer = factory.CreateControlRenderer( propertyMap ); DALI_TEST_CHECK( controlRenderer ); Actor actor = Actor::New(); @@ -424,7 +431,12 @@ int UtcDaliRendererFactoryGetBorderRenderer2(void) controlRenderer.SetOffStage( actor ); // enable the anti-aliasing - controlRenderer = factory.GetControlRenderer(testSize, testColor, true ); + Dali::Property::Map map; + map[ "rendererType" ] = "border"; + map[ "borderColor" ] = testColor; + map[ "borderSize" ] = testSize; + map[ "antiAliasing" ] = true; + controlRenderer = factory.CreateControlRenderer( map ); controlRenderer.SetOnStage( actor ); application.SendNotification(); @@ -462,7 +474,7 @@ int UtcDaliRendererFactoryGetLinearGradientRenderer(void) stopColors.PushBack( Color::GREEN ); propertyMap.Insert("stopColor", stopColors); - ControlRenderer controlRenderer = factory.GetControlRenderer(propertyMap); + ControlRenderer controlRenderer = factory.CreateControlRenderer(propertyMap); DALI_TEST_CHECK( controlRenderer ); // A lookup texture is generated and pass to shader as sampler @@ -502,7 +514,7 @@ int UtcDaliRendererFactoryGetRadialGradientRenderer(void) stopColors.PushBack( Color::GREEN ); propertyMap.Insert("stopColor", stopColors); - ControlRenderer controlRenderer = factory.GetControlRenderer(propertyMap); + ControlRenderer controlRenderer = factory.CreateControlRenderer(propertyMap); DALI_TEST_CHECK( controlRenderer ); // A lookup texture is generated and pass to shader as sampler @@ -542,7 +554,7 @@ int UtcDaliRendererFactoryDefaultOffsetsGradientRenderer(void) stopColors.PushBack( Color::GREEN ); propertyMap.Insert("stopColor", stopColors); - ControlRenderer controlRenderer = factory.GetControlRenderer(propertyMap); + ControlRenderer controlRenderer = factory.CreateControlRenderer(propertyMap); DALI_TEST_CHECK( controlRenderer ); // A lookup texture is generated and pass to shader as sampler @@ -567,7 +579,7 @@ int UtcDaliRendererFactoryGetImageRenderer1(void) propertyMap.Insert( "rendererType", "image" ); propertyMap.Insert( "url", TEST_IMAGE_FILE_NAME ); - ControlRenderer controlRenderer = factory.GetControlRenderer( propertyMap ); + ControlRenderer controlRenderer = factory.CreateControlRenderer( propertyMap ); DALI_TEST_CHECK( controlRenderer ); Actor actor = Actor::New(); @@ -604,7 +616,7 @@ int UtcDaliRendererFactoryGetImageRenderer2(void) DALI_TEST_CHECK( factory ); Image image = ResourceImage::New(TEST_IMAGE_FILE_NAME); - ControlRenderer controlRenderer = factory.GetControlRenderer( image ); + ControlRenderer controlRenderer = factory.CreateControlRenderer( image ); Actor actor = Actor::New(); // For tesing the LoadResourceFunc is called, a big image size should be set, so the atlasing is not applied. @@ -650,7 +662,7 @@ int UtcDaliRendererFactoryGetNPatchRenderer1(void) propertyMap.Insert( "url", TEST_NPATCH_FILE_NAME ); { tet_infoline( "whole grid" ); - ControlRenderer controlRenderer = factory.GetControlRenderer( propertyMap ); + ControlRenderer controlRenderer = factory.CreateControlRenderer( propertyMap ); DALI_TEST_CHECK( controlRenderer ); Actor actor = Actor::New(); @@ -669,7 +681,7 @@ int UtcDaliRendererFactoryGetNPatchRenderer1(void) propertyMap.Insert( "borderOnly", true ); { tet_infoline( "border only" ); - ControlRenderer controlRenderer = factory.GetControlRenderer( propertyMap ); + ControlRenderer controlRenderer = factory.CreateControlRenderer( propertyMap ); DALI_TEST_CHECK( controlRenderer ); Actor actor = Actor::New(); @@ -713,7 +725,7 @@ int UtcDaliRendererFactoryGetNPatchRenderer2(void) propertyMap.Insert( "rendererType", "image" ); propertyMap.Insert( "url", TEST_NPATCH_FILE_NAME ); { - ControlRenderer controlRenderer = factory.GetControlRenderer( propertyMap ); + ControlRenderer controlRenderer = factory.CreateControlRenderer( propertyMap ); DALI_TEST_CHECK( controlRenderer ); Actor actor = Actor::New(); @@ -735,7 +747,7 @@ int UtcDaliRendererFactoryGetNPatchRenderer2(void) propertyMap.Insert( "borderOnly", true ); { tet_infoline( "border only" ); - ControlRenderer controlRenderer = factory.GetControlRenderer( propertyMap ); + ControlRenderer controlRenderer = factory.CreateControlRenderer( propertyMap ); DALI_TEST_CHECK( controlRenderer ); TestGlAbstraction& gl = application.GetGlAbstraction(); @@ -772,7 +784,7 @@ int UtcDaliRendererFactoryGetNPatchRenderer3(void) stretchRangesY.PushBack( Uint16Pair( 4, 5 ) ); Integration::ResourcePointer ninePatchResource = CustomizeNinePatch( application, ninePatchImageWidth, ninePatchImageHeight, stretchRangesX, stretchRangesY ); - ControlRenderer controlRenderer = factory.GetControlRenderer( TEST_NPATCH_FILE_NAME ); + ControlRenderer controlRenderer = factory.CreateControlRenderer( TEST_NPATCH_FILE_NAME, ImageDimensions() ); DALI_TEST_CHECK( controlRenderer ); Actor actor = Actor::New(); @@ -811,7 +823,7 @@ int UtcDaliRendererFactoryGetNPatchRenderer4(void) stretchRangesY.PushBack( Uint16Pair( 25, 27 ) ); Integration::ResourcePointer ninePatchResource = CustomizeNinePatch( application, ninePatchImageWidth, ninePatchImageHeight, stretchRangesX, stretchRangesY ); - ControlRenderer controlRenderer = factory.GetControlRenderer( TEST_NPATCH_FILE_NAME ); + ControlRenderer controlRenderer = factory.CreateControlRenderer( TEST_NPATCH_FILE_NAME, ImageDimensions() ); DALI_TEST_CHECK( controlRenderer ); Actor actor = Actor::New(); @@ -839,7 +851,7 @@ int UtcDaliRendererFactoryGetNPatchRendererN1(void) RendererFactory factory = RendererFactory::Get(); DALI_TEST_CHECK( factory ); - ControlRenderer controlRenderer = factory.GetControlRenderer( "ERROR.9.jpg" ); + ControlRenderer controlRenderer = factory.CreateControlRenderer( "ERROR.9.jpg", ImageDimensions() ); DALI_TEST_CHECK( controlRenderer ); Actor actor = Actor::New(); @@ -875,7 +887,7 @@ int UtcDaliRendererFactoryGetNPatchRendererN2(void) propertyMap.Insert( "rendererType", 111 ); propertyMap.Insert( "url", "ERROR.9.jpg" ); - ControlRenderer controlRenderer = factory.GetControlRenderer( propertyMap ); + ControlRenderer controlRenderer = factory.CreateControlRenderer( propertyMap ); DALI_TEST_CHECK( controlRenderer ); Actor actor = Actor::New(); @@ -903,7 +915,7 @@ int UtcDaliRendererFactoryGetSvgRenderer(void) tet_infoline( "UtcDaliRendererFactoryGetSvgRenderer: Request svg renderer with a svg url" ); RendererFactory factory = RendererFactory::Get(); - ControlRenderer controlRenderer = factory.GetControlRenderer( TEST_SVG_FILE_NAME ); + ControlRenderer controlRenderer = factory.CreateControlRenderer( TEST_SVG_FILE_NAME, ImageDimensions() ); DALI_TEST_CHECK( controlRenderer ); TestGlAbstraction& gl = application.GetGlAbstraction(); @@ -951,7 +963,7 @@ int UtcDaliRendererFactoryGetMeshRenderer1(void) propertyMap.Insert( "rendererType", "mesh" ); propertyMap.Insert( "objectUrl", TEST_OBJ_FILE_NAME ); - ControlRenderer controlRenderer = factory.GetControlRenderer( propertyMap ); + ControlRenderer controlRenderer = factory.CreateControlRenderer( propertyMap ); DALI_TEST_CHECK( controlRenderer ); Actor actor = Actor::New(); @@ -1005,7 +1017,7 @@ int UtcDaliRendererFactoryGetMeshRenderer2(void) propertyMap.Insert( "materialUrl", "" ); propertyMap.Insert( "texturesPath", "" ); - ControlRenderer controlRenderer = factory.GetControlRenderer( propertyMap ); + ControlRenderer controlRenderer = factory.CreateControlRenderer( propertyMap ); DALI_TEST_CHECK( controlRenderer ); //Add renderer to an actor on stage. @@ -1061,7 +1073,7 @@ int UtcDaliRendererFactoryGetMeshRenderer3(void) propertyMap.Insert( "materialUrl", TEST_MTL_FILE_NAME ); propertyMap.Insert( "texturesPath", TEST_RESOURCE_DIR "/" ); - ControlRenderer controlRenderer = factory.GetControlRenderer( propertyMap ); + ControlRenderer controlRenderer = factory.CreateControlRenderer( propertyMap ); DALI_TEST_CHECK( controlRenderer ); //Add renderer to an actor on stage. @@ -1117,7 +1129,7 @@ int UtcDaliRendererFactoryGetMeshRenderer4(void) propertyMap.Insert( "materialUrl", TEST_SIMPLE_MTL_FILE_NAME ); propertyMap.Insert( "texturesPath", TEST_RESOURCE_DIR "/" ); - ControlRenderer controlRenderer = factory.GetControlRenderer( propertyMap ); + ControlRenderer controlRenderer = factory.CreateControlRenderer( propertyMap ); DALI_TEST_CHECK( controlRenderer ); //Add renderer to an actor on stage. @@ -1172,7 +1184,7 @@ int UtcDaliRendererFactoryGetMeshRendererN1(void) propertyMap.Insert( "materialUrl", TEST_MTL_FILE_NAME ); propertyMap.Insert( "texturesPath", TEST_RESOURCE_DIR "/" ); - ControlRenderer controlRenderer = factory.GetControlRenderer( propertyMap ); + ControlRenderer controlRenderer = factory.CreateControlRenderer( propertyMap ); DALI_TEST_CHECK( controlRenderer ); //Add renderer to an actor on stage. @@ -1224,7 +1236,7 @@ int UtcDaliRendererFactoryGetMeshRendererN2(void) propertyMap.Insert( "materialUrl", "invalid" ); propertyMap.Insert( "texturesPath", "also invalid" ); - ControlRenderer controlRenderer = factory.GetControlRenderer( propertyMap ); + ControlRenderer controlRenderer = factory.CreateControlRenderer( propertyMap ); DALI_TEST_CHECK( controlRenderer ); //Add renderer to an actor on stage. @@ -1276,7 +1288,7 @@ int UtcDaliRendererFactoryGetMeshRendererN3(void) propertyMap.Insert( "materialUrl", TEST_MTL_FILE_NAME ); propertyMap.Insert( "texturesPath", TEST_RESOURCE_DIR "/" ); - ControlRenderer controlRenderer = factory.GetControlRenderer( propertyMap ); + ControlRenderer controlRenderer = factory.CreateControlRenderer( propertyMap ); DALI_TEST_CHECK( controlRenderer ); //Add renderer to an actor on stage. @@ -1311,204 +1323,3 @@ int UtcDaliRendererFactoryGetMeshRendererN3(void) END_TEST; } - -int UtcDaliRendererFactoryResetRenderer1(void) -{ - ToolkitTestApplication application; - tet_infoline( "UtcDaliRendererFactoryResetRenderer1" ); - - RendererFactory factory = RendererFactory::Get(); - DALI_TEST_CHECK( factory ); - - ControlRenderer controlRenderer = factory.GetControlRenderer( Color::RED ); - DALI_TEST_CHECK( controlRenderer ); - - Actor actor = Actor::New(); - TestControlRendererRender( application, actor, controlRenderer ); - - Vector4 actualValue(Vector4::ZERO); - TestGlAbstraction& gl = application.GetGlAbstraction(); - DALI_TEST_CHECK( gl.GetUniformValue( "mixColor", actualValue ) ); - DALI_TEST_EQUALS( actualValue, Color::RED, TEST_LOCATION ); - - factory.ResetRenderer( controlRenderer, actor, Color::GREEN ); - application.SendNotification(); - application.Render(0); - DALI_TEST_CHECK( gl.GetUniformValue( "mixColor", actualValue ) ); - DALI_TEST_EQUALS( actualValue, Color::GREEN, TEST_LOCATION ); - - Image bufferImage = CreateBufferImage( 100, 200, Vector4( 1.f, 1.f, 1.f, 1.f ) ); - factory.ResetRenderer( controlRenderer, actor, bufferImage ); - - Actor actor2 = Actor::New(); - actor2.SetSize(200.f, 200.f); - Stage::GetCurrent().Add( actor2 ); - controlRenderer.SetSize(Vector2(200.f, 200.f)); - controlRenderer.SetOnStage( actor2 ); - application.SendNotification(); - application.Render(0); - - END_TEST; -} - -int UtcDaliRendererFactoryResetRenderer2(void) -{ - ToolkitTestApplication application; - tet_infoline( "UtcDaliRendererFactoryResetRenderer2" ); - - Actor actor = Actor::New(); - actor.SetSize(200.f, 200.f); - Stage::GetCurrent().Add( actor ); - RendererFactory factory = RendererFactory::Get(); - DALI_TEST_CHECK( factory ); - - Image resourceImage = ResourceImage::New(TEST_IMAGE_FILE_NAME); - ControlRenderer controlRenderer = factory.GetControlRenderer( resourceImage ); - DALI_TEST_CHECK( controlRenderer ); - controlRenderer.SetSize(Vector2(200.f, 200.f)); - controlRenderer.SetOnStage( actor ); - DALI_TEST_CHECK( actor.GetRendererCount() == 1u ); - - application.SendNotification(); - application.Render(0); - - Image bufferImage = CreateBufferImage( 100, 200, Vector4( 1.f, 1.f, 1.f, 1.f ) ); - factory.ResetRenderer( controlRenderer, actor, bufferImage ); - application.SendNotification(); - application.Render(0); - - factory.ResetRenderer( controlRenderer, actor, Color::RED ); - - Actor actor2 = Actor::New(); - actor2.SetSize(200.f, 200.f); - Stage::GetCurrent().Add( actor2 ); - controlRenderer.SetSize(Vector2(200.f, 200.f)); - controlRenderer.SetOnStage( actor2 ); - TestGlAbstraction& gl = application.GetGlAbstraction(); - application.SendNotification(); - application.Render(0); - Vector4 actualValue(Vector4::ZERO); - DALI_TEST_CHECK( gl.GetUniformValue( "mixColor", actualValue ) ); - DALI_TEST_EQUALS( actualValue, Color::RED, TEST_LOCATION ); - - END_TEST; -} - -int UtcDaliRendererFactoryResetRenderer3(void) -{ - ToolkitTestApplication application; - tet_infoline( "UtcDaliRendererFactoryResetRenderer3" ); - - Actor actor = Actor::New(); - actor.SetSize(200.f, 200.f); - Stage::GetCurrent().Add( actor ); - RendererFactory factory = RendererFactory::Get(); - DALI_TEST_CHECK( factory ); - - // Get renderer for rendering a resource image - Image resourceImage = ResourceImage::New(TEST_IMAGE_FILE_NAME); - ControlRenderer controlRenderer = factory.GetControlRenderer( resourceImage ); - DALI_TEST_CHECK( controlRenderer ); - controlRenderer.SetSize(Vector2(200.f, 200.f)); - controlRenderer.SetOnStage( actor ); - application.SendNotification(); - application.Render(); - - DALI_TEST_CHECK( actor.GetRendererCount() == 1u ); - - // reset the renderer to renderer a svg image - factory.ResetRenderer( controlRenderer, actor, TEST_SVG_FILE_NAME, ImageDimensions( 100, 100 ) ); - application.SendNotification(); - application.Render(); - - DALI_TEST_CHECK( actor.GetRendererCount() == 1u ); - - EventThreadCallback* eventTrigger = EventThreadCallback::Get(); - CallbackBase* callback = eventTrigger->GetCallback(); - - eventTrigger->WaitingForTrigger( 1 );// waiting until the svg image is rasterized. - CallbackBase::Execute( *callback ); - - END_TEST; -} - -//Test resetting mesh and primitive shape renderers -int UtcDaliRendererFactoryResetRenderer4(void) -{ - ToolkitTestApplication application; - tet_infoline( "UtcDaliRendererFactoryResetRenderer4: Mesh and primitive renderers" ); - - Actor actor = Actor::New(); - actor.SetSize( 200.f, 200.f ); - Stage::GetCurrent().Add( actor ); - RendererFactory factory = RendererFactory::Get(); - DALI_TEST_CHECK( factory ); - - Property::Map map; - - //****** - - //Start with basic color renderer - ControlRenderer controlRenderer = factory.GetControlRenderer( Color::RED ); - DALI_TEST_CHECK( controlRenderer ); - - TestControlRendererRender( application, actor, controlRenderer ); - - DALI_TEST_CHECK( actor.GetRendererCount() == 1u ); - - //Ensure set correctly. - Vector4 actualValue( Vector4::ZERO ); - TestGlAbstraction& gl = application.GetGlAbstraction(); - DALI_TEST_CHECK( gl.GetUniformValue( "mixColor", actualValue ) ); - DALI_TEST_EQUALS( actualValue, Color::RED, TEST_LOCATION ); - - //****** - - //Reset to mesh renderer - map.Insert( "rendererType", "mesh" ); - map.Insert( "objectUrl", TEST_OBJ_FILE_NAME ); - map.Insert( "materialUrl", TEST_MTL_FILE_NAME ); - map.Insert( "texturesPath", TEST_RESOURCE_DIR "/" ); - factory.ResetRenderer( controlRenderer, actor, map ); - 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(); - - //Render again to upload the now-loaded textures. - application.SendNotification(); - application.Render( 0 ); - - //Ensure set correctly. - controlRenderer.CreatePropertyMap( map ); - DALI_TEST_EQUALS( map.Find( "objectUrl", Property::STRING )->Get(), TEST_OBJ_FILE_NAME, TEST_LOCATION ); - - 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( "uObjectMatrix", actualScaleMatrix ) ); - DALI_TEST_EQUALS( actualScaleMatrix, testScaleMatrix, Math::MACHINE_EPSILON_100, TEST_LOCATION ); - - //****** - - //Reset back to color renderer - factory.ResetRenderer( controlRenderer, actor, Color::GREEN ); - application.SendNotification(); - application.Render( 0 ); - - DALI_TEST_CHECK( actor.GetRendererCount() == 1u ); - - //Ensure set correctly. - DALI_TEST_CHECK( gl.GetUniformValue( "mixColor", actualValue ) ); - DALI_TEST_EQUALS( actualValue, Color::GREEN, TEST_LOCATION ); - - //****** - - END_TEST; -} diff --git a/automated-tests/src/dali-toolkit/utc-Dali-ToolBar.cpp b/automated-tests/src/dali-toolkit/utc-Dali-ToolBar.cpp index fec7948..9adf9cd 100644 --- a/automated-tests/src/dali-toolkit/utc-Dali-ToolBar.cpp +++ b/automated-tests/src/dali-toolkit/utc-Dali-ToolBar.cpp @@ -40,7 +40,10 @@ Actor CreateColorActor( const Vector4& color ) Actor solidColorActor = Actor::New(); RendererFactory factory = RendererFactory::Get(); - ControlRenderer colorRenderer = factory.GetControlRenderer( color ); + Dali::Property::Map map; + map[ "rendererType" ] = "color"; + map[ "mixColor" ] = color; + ControlRenderer colorRenderer = factory.CreateControlRenderer( map ); colorRenderer.SetOnStage( solidColorActor ); return solidColorActor; diff --git a/dali-toolkit/devel-api/controls/renderer-factory/renderer-factory.cpp b/dali-toolkit/devel-api/controls/renderer-factory/renderer-factory.cpp index b1de7f0..cbcadc7 100644 --- a/dali-toolkit/devel-api/controls/renderer-factory/renderer-factory.cpp +++ b/dali-toolkit/devel-api/controls/renderer-factory/renderer-factory.cpp @@ -94,55 +94,19 @@ RendererFactory::RendererFactory(Internal::RendererFactory *impl) { } -ControlRenderer RendererFactory::GetControlRenderer( const Property::Map& propertyMap ) +ControlRenderer RendererFactory::CreateControlRenderer( const Property::Map& propertyMap ) { - return GetImplementation( *this ).GetControlRenderer( propertyMap ); + return GetImplementation( *this ).CreateControlRenderer( propertyMap ); } -ControlRenderer RendererFactory::GetControlRenderer( const Vector4& color ) +ControlRenderer RendererFactory::CreateControlRenderer( const Image& image ) { - return GetImplementation( *this ).GetControlRenderer( color ); + return GetImplementation( *this ).CreateControlRenderer( image ); } -void RendererFactory::ResetRenderer( ControlRenderer& renderer, Actor& actor, const Vector4& color ) +ControlRenderer RendererFactory::CreateControlRenderer( const std::string& url, ImageDimensions size ) { - GetImplementation( *this ).ResetRenderer( renderer, actor, color ); -} - -ControlRenderer RendererFactory::GetControlRenderer( float borderSize, const Vector4& borderColor ) -{ - return GetImplementation( *this ).GetControlRenderer( borderSize, borderColor, false ); -} - - -ControlRenderer RendererFactory::GetControlRenderer( float borderSize, const Vector4& borderColor, bool antiAliasing ) -{ - return GetImplementation( *this ).GetControlRenderer( borderSize, borderColor, antiAliasing ); -} - -ControlRenderer RendererFactory::GetControlRenderer( const Image& image ) -{ - return GetImplementation( *this ).GetControlRenderer( image ); -} - -void RendererFactory::ResetRenderer( ControlRenderer& renderer, Actor& actor, const Image& image ) -{ - GetImplementation( *this ).ResetRenderer( renderer, actor, image ); -} - -ControlRenderer RendererFactory::GetControlRenderer( const std::string& url, ImageDimensions size ) -{ - return GetImplementation( *this ).GetControlRenderer( url, size ); -} - -void RendererFactory::ResetRenderer( ControlRenderer& renderer, Actor& actor, const std::string& url, ImageDimensions size ) -{ - GetImplementation( *this ).ResetRenderer( renderer, actor, url, size ); -} - -void RendererFactory::ResetRenderer( ControlRenderer& renderer, Actor& actor, const Property::Map& propertyMap ) -{ - GetImplementation( *this ).ResetRenderer( renderer, actor, propertyMap ); + return GetImplementation( *this ).CreateControlRenderer( url, size ); } } // namespace Toolkit diff --git a/dali-toolkit/devel-api/controls/renderer-factory/renderer-factory.h b/dali-toolkit/devel-api/controls/renderer-factory/renderer-factory.h index fb52bf3..52e0d5c 100644 --- a/dali-toolkit/devel-api/controls/renderer-factory/renderer-factory.h +++ b/dali-toolkit/devel-api/controls/renderer-factory/renderer-factory.h @@ -20,6 +20,7 @@ // EXTERNAL INCLUDES #include #include +#include // INTERNAK INCLUDES #include @@ -95,46 +96,7 @@ public: * Depends on the content of the map, different kind of renderer would be returned. * @return The pointer pointing to control renderer */ - ControlRenderer GetControlRenderer( const Property::Map& propertyMap ); - - /** - * @brief Request the control renderer to render the given color - * - * @param[in] color The color to be rendered - * @return The pointer pointing to the control renderer - */ - ControlRenderer GetControlRenderer( const Vector4& color ); - - /** - * @brief Request the current control renderer to render the given color - * - * if the current renderer is a handle to an internal color renderer, set this color to it, - * else the renderer would be a handle to a newly created internal color renderer. - * - * @param[in] renderer The ControlRenderer to reset - * @param[in] actor The Actor the renderer is applied to, empty if the renderer has not been applied to any Actor - * @param[in] color The color to be rendered. - */ - void ResetRenderer( ControlRenderer& renderer, Actor& actor, const Vector4& color ); - - /** - * @brief Request the control renderer to renderer the border with the given size and color. - * - * @param[in] borderSize The size of the border. Border size is the same along all edges. - * @param[in] borderColor The color of the border. - * @return The pointer pointing to the control renderer - */ - ControlRenderer GetControlRenderer( float borderSize, const Vector4& borderColor ); - - /** - * @brief Request the control renderer to renderer the border with the given size and color, and specify whether anti-aliasing is needed. - * - * @param[in] borderSize The size of the border. Border size is the same along all edges. - * @param[in] borderColor The color of the border. - * @param[in] antiAliasing Whether anti-aliasing is required for border rendering. - * @return The pointer pointing to the control renderer - */ - ControlRenderer GetControlRenderer( float borderSize, const Vector4& borderColor, bool antiAliasing ); + ControlRenderer CreateControlRenderer( const Property::Map& propertyMap ); /** * @brief Request the control renderer to render the image. @@ -142,19 +104,7 @@ public: * @param[in] image The image to be rendered. * @return The pointer pointing to the control renderer */ - ControlRenderer GetControlRenderer( const Image& image ); - - /** - * @brief Request the current control renderer to render the given image - * - * if the current renderer is a handle to an internal image renderer, set this image to it, - * else the renderer would be a handle to a newly created internal image renderer. - * - * @param[in] renderer The ControlRenderer to reset - * @param[in] actor The Actor the renderer is applied to, empty if the renderer has not been applied to any Actor - * @param[in] image The Image to be rendered. - */ - void ResetRenderer( ControlRenderer& renderer, Actor& actor, const Image& image ); + ControlRenderer CreateControlRenderer( const Image& image ); /** * @brief Request the control renderer to render the given resource at the url. @@ -163,35 +113,7 @@ public: * @param[in] size The width and height to fit the loaded image to. * @return The pointer pointing to the control renderer */ - ControlRenderer GetControlRenderer( const std::string& url, - ImageDimensions size = ImageDimensions() ); - - /** - * @brief Request the current control renderer to render the given resource at the url - * - * if the current renderer is a handle to an internal image renderer, set this image to it, - * else the renderer would be a handle to a newly created internal image renderer. - * - * @param[in] renderer The ControlRenderer to reset - * @param[in] actor The Actor the renderer is applied to, empty if the renderer has not been applied to any Actor - * @param[in] url The URL to the resource to be rendered. - * @param[in] size The width and height to fit the loaded image to. - */ - void ResetRenderer( ControlRenderer& renderer, Actor& actor, const std::string& url, - ImageDimensions size = ImageDimensions() ); - - /** - * @brief Request the current control renderer from the property map, merging the property map with the renderer - * - * if the current renderer is capable of merging with the property map the reset the renderer with the merged properties - * else the renderer would be a handle to a newly created internal renderer. - * - * @param[in] renderer The ControlRenderer to reset - * @param[in] actor The Actor the renderer is applied to, empty if the renderer has not been applied to any Actor - * @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. - */ - void ResetRenderer( ControlRenderer& renderer, Actor& actor, const Property::Map& propertyMap ); + ControlRenderer CreateControlRenderer( const std::string& url, ImageDimensions size ); private: @@ -199,8 +121,52 @@ private: }; + +/** + * @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__ */ diff --git a/dali-toolkit/internal/controls/bloom-view/bloom-view-impl.cpp b/dali-toolkit/internal/controls/bloom-view/bloom-view-impl.cpp index 353a7c2..a2c607f 100644 --- a/dali-toolkit/internal/controls/bloom-view/bloom-view-impl.cpp +++ b/dali-toolkit/internal/controls/bloom-view/bloom-view-impl.cpp @@ -231,23 +231,10 @@ void BloomView::OnInitialize() mBloomExtractImageView = Toolkit::ImageView::New(); mBloomExtractImageView.SetParentOrigin( ParentOrigin::CENTER ); - // 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( "rendererType", "image" ); - rendererMap.Insert( "shader", customShader ); - mBloomExtractImageView.SetProperty( Toolkit::ImageView::Property::IMAGE, rendererMap ); - // Create an image view for compositing the result (scene and bloom textures) to output mCompositeImageView = Toolkit::ImageView::New(); mCompositeImageView.SetParentOrigin( ParentOrigin::CENTER ); - // 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 ); - // Create an image view for holding final result, i.e. the blurred image. This will get rendered to screen later, via default / user render task mTargetImageView = Toolkit::ImageView::New(); mTargetImageView.SetParentOrigin( ParentOrigin::CENTER ); @@ -385,12 +372,22 @@ void BloomView::AllocateResources() mBloomExtractImageView.SetImage( mRenderTargetForRenderingChildren ); 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 ); // set GaussianBlurView to blur our extracted bloom mGaussianBlurView.SetUserImageAndOutputRenderTarget(mBloomExtractTarget, mBlurExtractTarget); // 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 ); TextureSet textureSet = mCompositeImageView.GetRendererAt(0).GetTextures(); textureSet.SetImage( 1u, mBlurExtractTarget ); diff --git a/dali-toolkit/internal/controls/bubble-effect/bubble-emitter-impl.cpp b/dali-toolkit/internal/controls/bubble-effect/bubble-emitter-impl.cpp index ef7f8b7..b13765b 100644 --- a/dali-toolkit/internal/controls/bubble-effect/bubble-emitter-impl.cpp +++ b/dali-toolkit/internal/controls/bubble-effect/bubble-emitter-impl.cpp @@ -176,7 +176,7 @@ void BubbleEmitter::SetBackground( Image bgImage, const Vector3& hsvDelta ) mBackgroundImage = bgImage; mHSVDelta = hsvDelta; - Toolkit::ImageView sourceActor = Toolkit::ImageView::New( bgImage ); + Toolkit::ImageView sourceActor = Toolkit::ImageView::New(bgImage); sourceActor.SetSize( mMovementArea ); sourceActor.SetParentOrigin(ParentOrigin::CENTER); diff --git a/dali-toolkit/internal/controls/effects-view/effects-view-impl.cpp b/dali-toolkit/internal/controls/effects-view/effects-view-impl.cpp index a11dfed..ae4ac45 100644 --- a/dali-toolkit/internal/controls/effects-view/effects-view-impl.cpp +++ b/dali-toolkit/internal/controls/effects-view/effects-view-impl.cpp @@ -26,9 +26,11 @@ #include #include #include +#include // INTERNAL INCLUDES #include +#include #include #include #include @@ -185,7 +187,7 @@ void EffectsView::SetType( Toolkit::EffectsView::EffectType type ) customShader[ "vertexShader" ] = EFFECTS_VIEW_VERTEX_SOURCE; customShader[ "fragmentShader" ] = EFFECTS_VIEW_FRAGMENT_SOURCE; rendererMap[ "shader" ] = customShader; - Toolkit::RendererFactory::Get().ResetRenderer( mRendererPostFilter, self, rendererMap ); + InitializeControlRenderer( self, mRendererPostFilter, rendererMap ); mEffectType = type; } @@ -429,15 +431,16 @@ void EffectsView::AllocateResources() mLastSize = mTargetSize; SetupCameras(); - Toolkit::RendererFactory rendererFactory = Toolkit::RendererFactory::Get(); - Actor self = Self(); + Actor self( Self() ); mImageForChildren = FrameBufferImage::New( mTargetSize.width, mTargetSize.height, mPixelFormat, Dali::Image::UNUSED ); - rendererFactory.ResetRenderer(mRendererForChildren, self, mImageForChildren); + InitializeControlRenderer( self, mRendererForChildren, mImageForChildren ); mRendererForChildren.SetDepthIndex( DepthIndex::CONTENT+1 ); mImagePostFilter = FrameBufferImage::New( mTargetSize.width, mTargetSize.height, mPixelFormat, Dali::Image::UNUSED ); - rendererFactory.ResetRenderer(mRendererPostFilter, self, mImagePostFilter); + TextureSet textureSet = TextureSet::New(); + textureSet.SetImage( 0u, mImagePostFilter); + self.GetRendererAt( 0 ).SetTextures( textureSet ); mRendererPostFilter.SetDepthIndex( DepthIndex::CONTENT ); SetupFilters(); diff --git a/dali-toolkit/internal/controls/gaussian-blur-view/gaussian-blur-view-impl.cpp b/dali-toolkit/internal/controls/gaussian-blur-view/gaussian-blur-view-impl.cpp index e7e14eb..7b5b1f6 100644 --- a/dali-toolkit/internal/controls/gaussian-blur-view/gaussian-blur-view-impl.cpp +++ b/dali-toolkit/internal/controls/gaussian-blur-view/gaussian-blur-view-impl.cpp @@ -24,7 +24,6 @@ #include #include #include -#include #include #include #include @@ -218,6 +217,7 @@ void GaussianBlurView::SetUserImageAndOutputRenderTarget(Image inputImage, Frame mUserInputImage = inputImage; mImageViewHorizBlur.SetImage( mUserInputImage ); + mImageViewHorizBlur.SetProperty( Toolkit::ImageView::Property::IMAGE, mCustomShader ); mUserOutputRenderTarget = outputRenderTarget; } @@ -259,11 +259,9 @@ void GaussianBlurView::OnInitialize() std::ostringstream horizFragmentShaderStringStream; horizFragmentShaderStringStream << "#define NUM_SAMPLES " << mNumSamples << "\n"; horizFragmentShaderStringStream << GAUSSIAN_BLUR_FRAGMENT_SOURCE; - Property::Map customShader; - customShader[ "fragmentShader" ] = horizFragmentShaderStringStream.str(); - Property::Map rendererMap; - rendererMap.Insert( "rendererType", "image" ); - rendererMap.Insert( "shader", customShader ); + Property::Map source; + source[ "fragmentShader" ] = horizFragmentShaderStringStream.str(); + mCustomShader["shader"] = source; ////////////////////////////////////////////////////// // Create actors @@ -271,12 +269,10 @@ void GaussianBlurView::OnInitialize() // Create an image view for performing a horizontal blur on the texture mImageViewHorizBlur = Toolkit::ImageView::New(); mImageViewHorizBlur.SetParentOrigin(ParentOrigin::CENTER); - mImageViewHorizBlur.SetProperty( Toolkit::ImageView::Property::IMAGE, rendererMap ); // Create an image view for performing a vertical blur on the texture mImageViewVertBlur = Toolkit::ImageView::New(); mImageViewVertBlur.SetParentOrigin(ParentOrigin::CENTER); - mImageViewVertBlur.SetProperty( Toolkit::ImageView::Property::IMAGE, rendererMap ); // Register a property that the user can control to fade the blur in / out via the GaussianBlurView object Actor self = Self(); @@ -414,6 +410,7 @@ void GaussianBlurView::AllocateResources() // Set image view for performing a horizontal blur on the texture mImageViewHorizBlur.SetImage( mRenderTargetForRenderingChildren ); + mImageViewHorizBlur.SetProperty( Toolkit::ImageView::Property::IMAGE, mCustomShader ); // Create offscreen buffer for vert blur pass mRenderTarget1 = FrameBufferImage::New( mDownsampledWidth, mDownsampledHeight, mPixelFormat ); @@ -433,6 +430,7 @@ void GaussianBlurView::AllocateResources() // size needs to match render target mImageViewVertBlur.SetImage( mRenderTarget2 ); + mImageViewVertBlur.SetProperty( Toolkit::ImageView::Property::IMAGE, mCustomShader ); mImageViewVertBlur.SetSize(mDownsampledWidth, mDownsampledHeight); // set gaussian blur up for new sized render targets diff --git a/dali-toolkit/internal/controls/gaussian-blur-view/gaussian-blur-view-impl.h b/dali-toolkit/internal/controls/gaussian-blur-view/gaussian-blur-view-impl.h index f3f46d9..b4b9baf 100644 --- a/dali-toolkit/internal/controls/gaussian-blur-view/gaussian-blur-view-impl.h +++ b/dali-toolkit/internal/controls/gaussian-blur-view/gaussian-blur-view-impl.h @@ -21,6 +21,7 @@ // EXTERNAL INCLUDES #include #include +#include // INTERNAL INCLUDES #include @@ -169,6 +170,8 @@ private: Toolkit::ImageView mImageViewHorizBlur; Toolkit::ImageView mImageViewVertBlur; + Property::Map mCustomShader; + RenderTask mHorizBlurTask; RenderTask mVertBlurTask; diff --git a/dali-toolkit/internal/controls/image-view/image-view-impl.cpp b/dali-toolkit/internal/controls/image-view/image-view-impl.cpp index 03229f9..4571113 100644 --- a/dali-toolkit/internal/controls/image-view/image-view-impl.cpp +++ b/dali-toolkit/internal/controls/image-view/image-view-impl.cpp @@ -12,6 +12,8 @@ // INTERNAL INCLUDES #include #include +#include +#include namespace Dali { @@ -78,8 +80,8 @@ void ImageView::SetImage( Image image ) mImage = image; - Actor self = Self(); - Toolkit::RendererFactory::Get().ResetRenderer( mRenderer, self, image ); + Actor self( Self() ); + InitializeControlRenderer( self, mRenderer, image ); mImageSize = image ? ImageDimensions( image.GetWidth(), image.GetHeight() ) : ImageDimensions( 0, 0 ); RelayoutRequest(); @@ -92,8 +94,8 @@ void ImageView::SetImage( Property::Map map ) mImage.Reset(); mPropertyMap = map; - Actor self = Self(); - Toolkit::RendererFactory::Get().ResetRenderer( mRenderer, self, mPropertyMap ); + Actor self( Self() ); + InitializeControlRenderer( self, mRenderer, mPropertyMap ); Property::Value* widthValue = mPropertyMap.Find( "width" ); if( widthValue ) @@ -121,7 +123,7 @@ void ImageView::SetImage( Property::Map map ) void ImageView::SetImage( const std::string& url, ImageDimensions size ) { if( ( mUrl != url ) || - mImage || // If we're changing from an Image type to a URL type + mImage || // If we're changing from an Image type to a URL type ! mPropertyMap.Empty() ) // If we're changing from a property map type to a URL type { mImage.Reset(); @@ -134,8 +136,10 @@ void ImageView::SetImage( const std::string& url, ImageDimensions size ) mImageSize = size; } - Actor self = Self(); - Toolkit::RendererFactory::Get().ResetRenderer( mRenderer, self, mUrl, size ); + Actor self( Self() ); + InitializeControlRenderer( self, mRenderer, url, size ); + + mRenderer.SetSize( mSizeSet ); RelayoutRequest(); } @@ -251,6 +255,7 @@ void ImageView::OnStageDisconnection() void ImageView::OnSizeSet( const Vector3& targetSize ) { Control::OnSizeSet( targetSize ); + mSizeSet = targetSize; if( mRenderer ) { @@ -270,6 +275,7 @@ void ImageView::SetProperty( BaseObject* object, Property::Index index, const Pr if ( imageView ) { + ImageView& impl = GetImpl( imageView ); switch ( index ) { case Toolkit::ImageView::Property::RESOURCE_URL: @@ -277,7 +283,7 @@ void ImageView::SetProperty( BaseObject* object, Property::Index index, const Pr std::string imageUrl; if( value.Get( imageUrl ) ) { - GetImpl( imageView ).SetImage( imageUrl, ImageDimensions() ); + impl.SetImage( imageUrl, ImageDimensions() ); } break; } @@ -285,20 +291,37 @@ void ImageView::SetProperty( BaseObject* object, Property::Index index, const Pr case Toolkit::ImageView::Property::IMAGE: { std::string imageUrl; + Property::Map map; if( value.Get( imageUrl ) ) { - ImageView& impl = GetImpl( imageView ); impl.SetImage( imageUrl, ImageDimensions() ); } - // if its not a string then get a Property::Map from the property if possible. - Property::Map map; - if( value.Get( map ) ) + else if( value.Get( map ) ) { - ImageView& impl = GetImpl( imageView ); - impl.SetImage( map ); + Property::Value* shaderValue = map.Find( "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 ) + { + Property::Map shaderMap; + if( shaderValue->Get( shaderMap ) ) + { + Internal::ControlRenderer& renderer = GetImplementation( impl.mRenderer ); + renderer.SetCustomShader( shaderMap ); + if( imageView.OnStage() ) + { + // force to create new core renderer to use the newly set shader + renderer.SetOffStage( imageView ); + renderer.SetOnStage( imageView ); + } + } + } } - break; } @@ -307,7 +330,7 @@ void ImageView::SetProperty( BaseObject* object, Property::Index index, const Pr bool isPre; if( value.Get( isPre ) ) { - GetImpl(imageView).EnablePreMultipliedAlpha( isPre ); + impl.EnablePreMultipliedAlpha( isPre ); } break; } diff --git a/dali-toolkit/internal/controls/image-view/image-view-impl.h b/dali-toolkit/internal/controls/image-view/image-view-impl.h index fcc0c63..150fbd5 100644 --- a/dali-toolkit/internal/controls/image-view/image-view-impl.h +++ b/dali-toolkit/internal/controls/image-view/image-view-impl.h @@ -160,6 +160,7 @@ private: private: Toolkit::ControlRenderer mRenderer; 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 diff --git a/dali-toolkit/internal/controls/magnifier/magnifier-impl.cpp b/dali-toolkit/internal/controls/magnifier/magnifier-impl.cpp index 5baf152..cc60dd6 100644 --- a/dali-toolkit/internal/controls/magnifier/magnifier-impl.cpp +++ b/dali-toolkit/internal/controls/magnifier/magnifier-impl.cpp @@ -26,9 +26,11 @@ #include #include #include +#include // INTERNAL INCLUDES #include +#include namespace Dali { @@ -261,9 +263,13 @@ 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 ); - //TODO Set the renderer onto the control self when Actor::RemoveRenderer is supported Toolkit::RendererFactory rendererFactory = Toolkit::RendererFactory::Get(); - Toolkit::ControlRenderer borderRenderer = rendererFactory.GetControlRenderer(IMAGE_BORDER_INDENT, Color::WHITE); + + 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 ); Constraint constraint = Constraint::New( mFrame, Actor::Property::POSITION, EqualToConstraint() ); diff --git a/dali-toolkit/internal/controls/renderers/control-renderer-data-impl.cpp b/dali-toolkit/internal/controls/renderers/control-renderer-data-impl.cpp index df5a006..168f579 100644 --- a/dali-toolkit/internal/controls/renderers/control-renderer-data-impl.cpp +++ b/dali-toolkit/internal/controls/renderers/control-renderer-data-impl.cpp @@ -94,106 +94,90 @@ Internal::ControlRenderer::Impl::CustomShader::CustomShader( const Property::Map SetPropertyMap( map ); } -void Internal::ControlRenderer::Impl::CustomShader::SetPropertyMap( const Property::Map& propertyMap ) +void Internal::ControlRenderer::Impl::CustomShader::SetPropertyMap( const Property::Map& shaderMap ) { - Property::Value* shaderValue = propertyMap.Find( CUSTOM_SHADER ); - if( shaderValue ) + mVertexShader.clear(); + mFragmentShader.clear(); + mGridSize = ImageDimensions( 1, 1 ); + mHints = Shader::HINT_NONE; + + Property::Value* vertexShaderValue = shaderMap.Find( CUSTOM_VERTEX_SHADER ); + if( vertexShaderValue ) { - mVertexShader.clear(); - mFragmentShader.clear(); - mGridSize = ImageDimensions( 1, 1 ); - mHints = Shader::HINT_NONE; + if( !vertexShaderValue->Get( mVertexShader ) ) + { + DALI_LOG_ERROR( "'%s' parameter does not correctly specify a string", CUSTOM_VERTEX_SHADER ); + } + } - Property::Map shaderMap; - if( shaderValue->Get( shaderMap ) ) + Property::Value* fragmentShaderValue = shaderMap.Find( CUSTOM_FRAGMENT_SHADER ); + if( fragmentShaderValue ) + { + if( !fragmentShaderValue->Get( mFragmentShader ) ) { - 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 ); - } - } + DALI_LOG_ERROR( "'%s' parameter does not correctly specify a string", CUSTOM_FRAGMENT_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* 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* 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; - Property::Value* hintsValue = shaderMap.Find( CUSTOM_SHADER_HINTS ); - if( hintsValue ) + 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) { - std::string hintString; - Property::Array hintsArray; - - if( hintsValue->Get( hintString ) ) - { - mHints = HintFromString( hintString ); - } - else if( hintsValue->Get( hintsArray ) ) + Property::Value hintValue = hintsArray[ i ]; + if( hintValue.Get( hintString ) ) { - 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 ); - } + hints |= static_cast< int >( HintFromString( hintString ) ); } else { - DALI_LOG_ERROR( "'%s' parameter does not correctly specify a hint string or an array of hint strings", CUSTOM_SHADER_HINTS ); + 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 { - //use value with no type to mean reseting the shader back to default - if( shaderValue->GetType() != Dali::Property::NONE ) - { - DALI_LOG_ERROR( "'%s' parameter does not correctly specify a property map", CUSTOM_SHADER ); - } + DALI_LOG_ERROR( "'%s' parameter does not correctly specify a hint string or an array of hint strings", CUSTOM_SHADER_HINTS ); } } } diff --git a/dali-toolkit/internal/controls/renderers/control-renderer-impl.cpp b/dali-toolkit/internal/controls/renderers/control-renderer-impl.cpp index 2009f8a..4155a9c 100644 --- a/dali-toolkit/internal/controls/renderers/control-renderer-impl.cpp +++ b/dali-toolkit/internal/controls/renderers/control-renderer-impl.cpp @@ -56,24 +56,30 @@ ControlRenderer::~ControlRenderer() delete mImpl; } -void ControlRenderer::Initialize( Actor& actor, const Property::Map& propertyMap ) +void ControlRenderer::SetCustomShader( const Property::Map& shaderMap ) { if( mImpl->mCustomShader ) { - mImpl->mCustomShader->SetPropertyMap( propertyMap ); + mImpl->mCustomShader->SetPropertyMap( shaderMap ); } else { - Property::Value* customShaderValue = propertyMap.Find( CUSTOM_SHADER ); - if( customShaderValue ) + mImpl->mCustomShader = new Impl::CustomShader( shaderMap ); + } +} + +void ControlRenderer::Initialize( Actor& actor, const Property::Map& propertyMap ) +{ + Property::Value* customShaderValue = propertyMap.Find( CUSTOM_SHADER ); + if( customShaderValue ) + { + Property::Map shaderMap; + if( customShaderValue->Get( shaderMap ) ) { - Property::Map customShader; - if( customShaderValue->Get( customShader ) ) - { - mImpl->mCustomShader = new Impl::CustomShader( propertyMap ); - } + SetCustomShader( shaderMap ); } } + DoInitialize( actor, propertyMap ); } diff --git a/dali-toolkit/internal/controls/renderers/control-renderer-impl.h b/dali-toolkit/internal/controls/renderers/control-renderer-impl.h index 70ffb35..3880b0b 100644 --- a/dali-toolkit/internal/controls/renderers/control-renderer-impl.h +++ b/dali-toolkit/internal/controls/renderers/control-renderer-impl.h @@ -146,6 +146,12 @@ public: */ bool IsPreMultipliedAlphaEnabled() const; + /** + * @brief Sets properties of custom shader + * @param[in] propertyMap Property map containing the custom shader data + */ + void SetCustomShader( const Property::Map& propertyMap ); + protected: /** diff --git a/dali-toolkit/internal/controls/renderers/renderer-factory-impl.cpp b/dali-toolkit/internal/controls/renderers/renderer-factory-impl.cpp index fe00209..6cb0aa0 100644 --- a/dali-toolkit/internal/controls/renderers/renderer-factory-impl.cpp +++ b/dali-toolkit/internal/controls/renderers/renderer-factory-impl.cpp @@ -130,7 +130,7 @@ RendererFactory::RendererType RendererFactory::GetRendererType( const Property:: return rendererType; } -Toolkit::ControlRenderer RendererFactory::GetControlRenderer( const Property::Map& propertyMap ) +Toolkit::ControlRenderer RendererFactory::CreateControlRenderer( const Property::Map& propertyMap ) { ControlRenderer* rendererPtr = NULL; @@ -207,72 +207,7 @@ Toolkit::ControlRenderer RendererFactory::GetControlRenderer( const Property::Ma return Toolkit::ControlRenderer( rendererPtr ); } -Toolkit::ControlRenderer RendererFactory::GetControlRenderer( const Vector4& color ) -{ - if( !mFactoryCache ) - { - mFactoryCache = new RendererFactoryCache(); - } - - if( mDebugEnabled ) - { - return Toolkit::ControlRenderer( new DebugRenderer( *( mFactoryCache.Get() ) ) ); - } - - ColorRenderer* rendererPtr = new ColorRenderer( *( mFactoryCache.Get() ) ); - rendererPtr->SetColor( color ); - - return Toolkit::ControlRenderer( rendererPtr ); -} - -void RendererFactory::ResetRenderer( Toolkit::ControlRenderer& renderer, Actor& actor, const Vector4& color ) -{ - if( mDebugEnabled && renderer ) - { - return; - } - - if( renderer ) - { - ColorRenderer* rendererPtr = dynamic_cast< ColorRenderer* >( &GetImplementation( renderer ) ); - if( rendererPtr ) - { - rendererPtr->SetColor( color ); - return; - } - - renderer.RemoveAndReset( actor ); - } - - renderer = GetControlRenderer( color ); - if( actor && actor.OnStage() ) - { - renderer.SetOnStage( actor ); - } -} - -Toolkit::ControlRenderer RendererFactory::GetControlRenderer( float borderSize, const Vector4& borderColor, bool antiAliasing ) -{ - if( !mFactoryCache ) - { - mFactoryCache = new RendererFactoryCache(); - } - - if( mDebugEnabled ) - { - return Toolkit::ControlRenderer( new DebugRenderer( *( mFactoryCache.Get() ) ) ); - } - - BorderRenderer* rendererPtr = new BorderRenderer( *mFactoryCache.Get() ); - - rendererPtr->SetBorderSize( borderSize ); - rendererPtr->SetBorderColor( borderColor ); - rendererPtr->RequireAntiAliasing( antiAliasing ); - - return Toolkit::ControlRenderer( rendererPtr ); -} - -Toolkit::ControlRenderer RendererFactory::GetControlRenderer( const Image& image ) +Toolkit::ControlRenderer RendererFactory::CreateControlRenderer( const Image& image ) { if( !mFactoryCache ) { @@ -303,53 +238,7 @@ Toolkit::ControlRenderer RendererFactory::GetControlRenderer( const Image& image } } -void RendererFactory::ResetRenderer( Toolkit::ControlRenderer& renderer, Actor& actor, const Image& image ) -{ - if( mDebugEnabled && renderer ) - { - return; - } - - if( renderer ) - { - if( ! image ) - { - // If the image is empty, then reset the renderer and return - renderer.RemoveAndReset( actor ); - return; - } - - NinePatchImage npatchImage = NinePatchImage::DownCast( image ); - if( npatchImage ) - { - NPatchRenderer* rendererPtr = dynamic_cast< NPatchRenderer* >( &GetImplementation( renderer ) ); - if( rendererPtr ) - { - rendererPtr->SetImage( npatchImage ); - return; - } - } - else - { - ImageRenderer* rendererPtr = dynamic_cast< ImageRenderer* >( &GetImplementation( renderer ) ); - if( rendererPtr ) - { - rendererPtr->SetImage( actor, image ); - return; - } - } - - renderer.RemoveAndReset( actor ); - } - - renderer = GetControlRenderer( image ); - if( actor && actor.OnStage() ) - { - renderer.SetOnStage( actor ); - } -} - -Toolkit::ControlRenderer RendererFactory::GetControlRenderer( const std::string& url, ImageDimensions size ) +Toolkit::ControlRenderer RendererFactory::CreateControlRenderer( const std::string& url, ImageDimensions size ) { if( !mFactoryCache ) { @@ -386,96 +275,6 @@ Toolkit::ControlRenderer RendererFactory::GetControlRenderer( const std::string& } } -void RendererFactory::ResetRenderer( Toolkit::ControlRenderer& renderer, Actor& actor, const std::string& url, ImageDimensions size ) -{ - if( mDebugEnabled && renderer ) - { - return; - } - - if( renderer ) - { - if( url.empty() ) - { - // If the URL is empty, then reset the renderer and return - renderer.RemoveAndReset( actor ); - return; - } - else if( NinePatchImage::IsNinePatchUrl( url ) ) - { - NPatchRenderer* rendererPtr = dynamic_cast< NPatchRenderer* >( &GetImplementation( renderer ) ); - if( rendererPtr ) - { - rendererPtr->SetImage( url ); - return; - } - } - else if( SvgRenderer::IsSvgUrl( url ) ) - { - SvgRenderer* rendererPtr = dynamic_cast< SvgRenderer* >( &GetImplementation( renderer ) ); - if( rendererPtr ) - { - rendererPtr->SetImage( url, size ); - return; - } - } - else - { - ImageRenderer* rendererPtr = dynamic_cast< ImageRenderer* >( &GetImplementation( renderer ) ); - if( rendererPtr ) - { - rendererPtr->SetImage( actor, url, size ); - return; - } - } - - renderer.RemoveAndReset( actor ); - } - - renderer = GetControlRenderer( url, size ); - if( actor && actor.OnStage() ) - { - renderer.SetOnStage( actor ); - } -} - -void RendererFactory::ResetRenderer( Toolkit::ControlRenderer& renderer, Actor& actor, const Property::Map& propertyMap ) -{ - if( mDebugEnabled && renderer ) - { - return; - } - - if( renderer ) - { - ControlRenderer& controlRenderer = GetImplementation( renderer ); - - RendererType type = GetRendererType( propertyMap ); - - //If there's no renderer type specified or if there hasn't been a renderer type change then we can reuse the renderer - if( type == UNDEFINED || - ( type == IMAGE && typeid( controlRenderer ) == typeid( ImageRenderer ) ) || - ( type == N_PATCH && typeid( controlRenderer ) == typeid( NPatchRenderer ) ) || - ( type == COLOR && typeid( controlRenderer ) == typeid( ColorRenderer ) ) || - ( type == GRADIENT && typeid( controlRenderer ) == typeid( GradientRenderer ) ) || - ( type == BORDER && typeid( controlRenderer ) == typeid( BorderRenderer ) ) || - ( type == SVG && typeid( controlRenderer ) == typeid( SvgRenderer ) ) || - ( type == MESH && typeid( controlRenderer ) == typeid( MeshRenderer ) ) ) - { - controlRenderer.Initialize( actor, propertyMap ); - return; - } - - renderer.RemoveAndReset( actor ); - } - - renderer = GetControlRenderer( propertyMap ); - if( renderer && actor && actor.OnStage() ) - { - renderer.SetOnStage( actor ); - } -} - Image RendererFactory::GetBrokenRendererImage() { return ResourceImage::New( BROKEN_RENDERER_IMAGE_URL ); diff --git a/dali-toolkit/internal/controls/renderers/renderer-factory-impl.h b/dali-toolkit/internal/controls/renderers/renderer-factory-impl.h index 87e321f..671c752 100644 --- a/dali-toolkit/internal/controls/renderers/renderer-factory-impl.h +++ b/dali-toolkit/internal/controls/renderers/renderer-factory-impl.h @@ -66,49 +66,19 @@ public: RendererFactory( bool debugEnabled ); /** - * @copydoc Toolkit::RenderFactory::GetControlRenderer( const Property::Map& ) + * @copydoc Toolkit::RenderFactory::CreateControlRenderer( const Property::Map& ) */ - Toolkit::ControlRenderer GetControlRenderer( const Property::Map& propertyMap ); + Toolkit::ControlRenderer CreateControlRenderer( const Property::Map& propertyMap ); /** - * @copydoc Toolkit::RenderFactory::ResetRenderer( Toolkit::ControlRenderer& renderer, Actor& actor, const Property::Map& propertyMap ) + * @copydoc Toolkit::RenderFactory::CreateControlRenderer( const Image& ) */ - void ResetRenderer( Toolkit::ControlRenderer& renderer, Actor& actor, const Property::Map& propertyMap ); + Toolkit::ControlRenderer CreateControlRenderer( const Image& image ); /** - * @copydoc Toolkit::RenderFactory::GetControlRenderer( const Vector4& ) + * @copydoc Toolkit::RenderFactory::CreateControlRenderer( const std::string&, ImageDimensions ) */ - Toolkit::ControlRenderer GetControlRenderer( const Vector4& color ); - - /** - * @copydoc Toolkit::RendererFactory::ResetRenderer( Toolkit::ControlRenderer&, Actor& actor, const Vector4& ) - */ - void ResetRenderer( Toolkit::ControlRenderer& renderer, Actor& actor, const Vector4& color ); - - /** - * @copydoc Toolkit::RenderFactory::GetControlRenderer( float, const Vector4&, bool ) - */ - Toolkit::ControlRenderer GetControlRenderer( float borderSize, const Vector4& borderColor, bool antiAliasing ); - - /** - * @copydoc Toolkit::RenderFactory::GetControlRenderer( const Image& ) - */ - Toolkit::ControlRenderer GetControlRenderer( const Image& image ); - - /** - * @copydoc Toolkit::RendererFactory::ResetRenderer( Toolkit::ControlRenderer&, Actor& actor, const Image& ) - */ - void ResetRenderer( Toolkit::ControlRenderer& renderer, Actor& actor, const Image& image ); - - /** - * @copydoc Toolkit::RenderFactory::GetControlRenderer( const std::string&, ImageDimensions ) - */ - Toolkit::ControlRenderer GetControlRenderer( const std::string& image, ImageDimensions size ); - - /** - * @copydoc Toolkit::RendererFactory::ResetRenderer( Toolkit::ControlRenderer&, Actor& actor, const std::string&, ImageDimensions ) - */ - void ResetRenderer( Toolkit::ControlRenderer& renderer, Actor& actor, const std::string& image, ImageDimensions size ); + Toolkit::ControlRenderer CreateControlRenderer( const std::string& image, ImageDimensions size ); public: /** diff --git a/dali-toolkit/internal/controls/shadow-view/shadow-view-impl.cpp b/dali-toolkit/internal/controls/shadow-view/shadow-view-impl.cpp index 1191778..1d107a2 100644 --- a/dali-toolkit/internal/controls/shadow-view/shadow-view-impl.cpp +++ b/dali-toolkit/internal/controls/shadow-view/shadow-view-impl.cpp @@ -151,12 +151,11 @@ void ShadowView::SetShadowPlaneBackground(Actor shadowPlaneBackground) { mShadowPlaneBg = shadowPlaneBackground; - mShadowPlane = Toolkit::ImageView::New(); + mShadowPlane = Toolkit::ImageView::New( mOutputImage ); mShadowPlane.SetName( "SHADOW_PLANE" ); mShadowPlane.SetParentOrigin(ParentOrigin::CENTER); mShadowPlane.SetAnchorPoint(AnchorPoint::CENTER); - mShadowPlane.SetImage(mOutputImage); mShadowPlane.SetProperty( Toolkit::ImageView::Property::IMAGE, mShadowRenderShader ); SetShaderConstants(); diff --git a/dali-toolkit/internal/controls/super-blur-view/super-blur-view-impl.cpp b/dali-toolkit/internal/controls/super-blur-view/super-blur-view-impl.cpp index 2a4979b..47a0790 100644 --- a/dali-toolkit/internal/controls/super-blur-view/super-blur-view-impl.cpp +++ b/dali-toolkit/internal/controls/super-blur-view/super-blur-view-impl.cpp @@ -29,6 +29,9 @@ #include #include +// INTERNAL_INCLUDES +#include + namespace //Unnamed namespace { @@ -154,21 +157,6 @@ Toolkit::SuperBlurView SuperBlurView::New( unsigned int blurLevels ) void SuperBlurView::OnInitialize() { mBlurStrengthPropertyIndex = Self().RegisterProperty( "blurStrength", 0.f ); - - Property::Map rendererMap; - rendererMap.Insert( "rendererType", "image"); - - Property::Map shaderMap; - std::stringstream verterShaderString; - shaderMap[ "fragmentShader" ] = FRAGMENT_SHADER; - rendererMap.Insert( "shader", shaderMap ); - - Toolkit::RendererFactory rendererFactory = Toolkit::RendererFactory::Get(); - for(unsigned int i=0; i<=mBlurLevels; i++) - { - mRenderers[i] = rendererFactory.GetControlRenderer( rendererMap ); - mRenderers[i].SetDepthIndex(i); - } } void SuperBlurView::SetImage(Image inputImage) @@ -181,8 +169,14 @@ void SuperBlurView::SetImage(Image inputImage) ClearBlurResource(); mInputImage = inputImage; - Actor self = Self(); - Toolkit::RendererFactory::Get().ResetRenderer( mRenderers[0], self, mInputImage ); + Actor self( Self() ); + InitializeControlRenderer( self, mRenderers[0], mInputImage ); + mRenderers[0].SetDepthIndex(0); + SetShaderEffect( mRenderers[0] ); + if( self.OnStage() ) + { + mRenderers[0].SetOnStage( self ); + } BlurImage( 0, inputImage); for(unsigned int i=1; i(i); mBlurredImage[i-1] = FrameBufferImage::New( mTargetSize.width/std::pow(2.f,exponent) , mTargetSize.height/std::pow(2.f,exponent), GAUSSIAN_BLUR_RENDER_TARGET_PIXEL_FORMAT, Dali::Image::NEVER ); - rendererFactory.ResetRenderer( mRenderers[i], self, mBlurredImage[i-1] ); + InitializeControlRenderer( self, mRenderers[i], mBlurredImage[i - 1] ); + mRenderers[ i ].SetDepthIndex( i ); + SetShaderEffect( mRenderers[ i ] ); } if( mInputImage ) @@ -289,7 +294,7 @@ void SuperBlurView::OnSizeSet( const Vector3& targetSize ) if( self.OnStage() ) { - for(unsigned int i=0; i<=mBlurLevels;i++) + for( unsigned int i = 1; i <= mBlurLevels; i++ ) { mRenderers[i].SetOnStage( self ); } @@ -307,10 +312,16 @@ void SuperBlurView::OnStageConnection( int depth ) } Actor self = Self(); - mRenderers[0].SetOnStage( self ); + if( mRenderers[0] ) + { + mRenderers[0].SetOnStage( self ); + } for(unsigned int i=1; i<=mBlurLevels;i++) { - mRenderers[i].SetOnStage( self ); + if( mRenderers[i] ) + { + mRenderers[i].SetOnStage( self ); + } Renderer renderer = self.GetRendererAt( i ); Property::Index index = renderer.RegisterProperty( ALPHA_UNIFORM_NAME, 0.f ); diff --git a/dali-toolkit/internal/controls/super-blur-view/super-blur-view-impl.h b/dali-toolkit/internal/controls/super-blur-view/super-blur-view-impl.h index 594693c..fa5be8e 100644 --- a/dali-toolkit/internal/controls/super-blur-view/super-blur-view-impl.h +++ b/dali-toolkit/internal/controls/super-blur-view/super-blur-view-impl.h @@ -161,6 +161,12 @@ private: */ void ClearBlurResource(); + /** + * Sets shader effect on the control renderer + * @param[in,out] Sets custom shader effect on the given renderer + */ + void SetShaderEffect( Toolkit::ControlRenderer& renderer ); + private: std::vector mGaussianBlurView; std::vector mBlurredImage; diff --git a/dali-toolkit/internal/controls/video-view/video-view-impl.cpp b/dali-toolkit/internal/controls/video-view/video-view-impl.cpp index 28cb38a..0b431fc 100644 --- a/dali-toolkit/internal/controls/video-view/video-view-impl.cpp +++ b/dali-toolkit/internal/controls/video-view/video-view-impl.cpp @@ -119,8 +119,8 @@ void VideoView::SetPropertyMap( Property::Map map ) { mPropertyMap = map; - Actor self = Self(); - Toolkit::RendererFactory::Get().ResetRenderer( mRenderer, self, mPropertyMap ); + Actor self( Self() ); + InitializeControlRenderer( self, mRenderer, mPropertyMap ); Property::Value* widthValue = mPropertyMap.Find( "width" ); if( widthValue ) @@ -525,7 +525,7 @@ void VideoView::SetWindowSurfaceTarget() void VideoView::SetNativeImageTarget() { - Actor self = Self(); + Actor self( Self() ); int curPos = mVideoPlayer.GetPlayPosition(); mSetRenderingTarget = true; @@ -538,7 +538,7 @@ void VideoView::SetNativeImageTarget() mVideoPlayer.SetUrl( mUrl ); mVideoPlayer.FinishedSignal().Connect( this, &VideoView::EmitSignalFinish ); - Toolkit::RendererFactory::Get().ResetRenderer( mRenderer, self, mNativeImage ); + InitializeControlRenderer( self, mRenderer, mNativeImage ); if( mIsPlay ) { diff --git a/dali-toolkit/internal/filters/emboss-filter.cpp b/dali-toolkit/internal/filters/emboss-filter.cpp index e44877e..c96d1bc 100644 --- a/dali-toolkit/internal/filters/emboss-filter.cpp +++ b/dali-toolkit/internal/filters/emboss-filter.cpp @@ -27,8 +27,6 @@ #include #include -// INTERNAL INCLUDES - namespace Dali { @@ -96,7 +94,7 @@ void EmbossFilter::Enable() rendererMap.Insert( "shader", customShader ); // create actor to render input with applied emboss effect - mActorForInput1 = Toolkit::ImageView::New( mInputImage ); + mActorForInput1 = Toolkit::ImageView::New(mInputImage); mActorForInput1.SetParentOrigin( ParentOrigin::CENTER ); mActorForInput1.SetSize(mTargetSize); Vector2 textureScale( 1.5f/mTargetSize.width, 1.5f/mTargetSize.height); @@ -106,7 +104,7 @@ void EmbossFilter::Enable() mActorForInput1.SetProperty( Toolkit::ImageView::Property::IMAGE, rendererMap ); mRootActor.Add( mActorForInput1 ); - mActorForInput2 = Toolkit::ImageView::New( mInputImage ); + mActorForInput2 = Toolkit::ImageView::New(mInputImage); mActorForInput2.SetParentOrigin( ParentOrigin::CENTER ); mActorForInput2.SetSize(mTargetSize); mActorForInput2.RegisterProperty( TEX_SCALE_UNIFORM_NAME, textureScale ); @@ -122,18 +120,22 @@ void EmbossFilter::Enable() customShader[ "fragmentShader" ] = COMPOSITE_FRAGMENT_SOURCE; rendererMap[ "shader"] = customShader; - Toolkit::RendererFactory rendererFactory = Toolkit::RendererFactory::Get(); - mRendererForEmboss1 = rendererFactory.GetControlRenderer( mImageForEmboss1 ); - mRendererForEmboss2 = rendererFactory.GetControlRenderer( mImageForEmboss2 ); - // set COMPOSITE custom shader to both renderers - rendererFactory.ResetRenderer( mRendererForEmboss1, mActorForComposite, rendererMap); - rendererFactory.ResetRenderer( mRendererForEmboss2, mActorForComposite, rendererMap); - // apply renderers to the actor - mRendererForEmboss1.SetOnStage( mActorForComposite ); - mRendererForEmboss2.SetOnStage( mActorForComposite ); + rendererMap[ "rendererType"] = "image"; + + mRootActor.Add( mActorForComposite ); + + InitializeControlRenderer( mActorForComposite, mRendererForEmboss1, rendererMap ); + InitializeControlRenderer( mActorForComposite, mRendererForEmboss2, rendererMap ); + + TextureSet textureSet1 = TextureSet::New(); + textureSet1.SetImage( 0, mImageForEmboss1 ); + mActorForComposite.GetRendererAt(0).SetTextures( textureSet1 ); mActorForComposite.GetRendererAt(0).RegisterProperty( COLOR_UNIFORM_NAME, Color::BLACK ); + + TextureSet textureSet2 = TextureSet::New(); + textureSet2.SetImage( 0, mImageForEmboss2 ); + mActorForComposite.GetRendererAt(1).SetTextures( textureSet2 ); mActorForComposite.GetRendererAt(1).RegisterProperty( COLOR_UNIFORM_NAME, Color::WHITE ); - mRootActor.Add( mActorForComposite ); SetupCamera(); CreateRenderTasks(); diff --git a/dali-toolkit/public-api/controls/control-impl.cpp b/dali-toolkit/public-api/controls/control-impl.cpp index ef276bb..0a2c3c8 100644 --- a/dali-toolkit/public-api/controls/control-impl.cpp +++ b/dali-toolkit/public-api/controls/control-impl.cpp @@ -40,6 +40,7 @@ #include #include #include +#include namespace Dali { @@ -441,12 +442,16 @@ const std::string& Control::GetStyleName() const void Control::SetBackgroundColor( const Vector4& color ) { - mImpl->mBackgroundColor = color; - Actor self( Self() ); - Toolkit::RendererFactory factory = Toolkit::RendererFactory::Get(); - factory.ResetRenderer( mImpl->mBackgroundRenderer, self, color ); - mImpl->mBackgroundRenderer.SetDepthIndex( DepthIndex::BACKGROUND ); + mImpl->mBackgroundColor = color; + Property::Map map; + map[ RENDERER_TYPE ] = COLOR_RENDERER; + map[ "mixColor" ] = color; + InitializeControlRenderer( self, mImpl->mBackgroundRenderer, map ); + if( mImpl->mBackgroundRenderer ) + { + mImpl->mBackgroundRenderer.SetDepthIndex( DepthIndex::BACKGROUND ); + } } Vector4 Control::GetBackgroundColor() const @@ -454,25 +459,24 @@ Vector4 Control::GetBackgroundColor() const return mImpl->mBackgroundColor; } -void Control::SetBackground(const Property::Map& map) +void Control::SetBackground( const Property::Map& map ) { Actor self( Self() ); - mImpl->mBackgroundRenderer.RemoveAndReset( self ); - Toolkit::RendererFactory factory = Toolkit::RendererFactory::Get(); - mImpl->mBackgroundRenderer = factory.GetControlRenderer( map ); - if( mImpl->mBackgroundRenderer && self.OnStage() ) // Request control renderer with a property map might return an empty handle + InitializeControlRenderer( self, mImpl->mBackgroundRenderer, map ); + if( mImpl->mBackgroundRenderer ) { mImpl->mBackgroundRenderer.SetDepthIndex( DepthIndex::BACKGROUND ); - mImpl->mBackgroundRenderer.SetOnStage( self ); } } void Control::SetBackgroundImage( Image image ) { Actor self( Self() ); - Toolkit::RendererFactory factory = Toolkit::RendererFactory::Get(); - factory.ResetRenderer( mImpl->mBackgroundRenderer, self, image ); - mImpl->mBackgroundRenderer.SetDepthIndex( DepthIndex::BACKGROUND ); + InitializeControlRenderer( self, mImpl->mBackgroundRenderer, image ); + if( mImpl->mBackgroundRenderer ) + { + mImpl->mBackgroundRenderer.SetDepthIndex( DepthIndex::BACKGROUND ); + } } void Control::ClearBackground() -- 2.7.4