From: Adeel Kazmi Date: Fri, 10 Sep 2021 15:24:26 +0000 (+0000) Subject: Merge "DALi Version 2.0.43" into devel/master X-Git-Tag: dali_2.0.44~4 X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=commitdiff_plain;h=8d0ccc12714da58e6e2c971188b221ed2158d658;hp=9fc9df7aa6380e29deed383a5964965d3ee7fd24 Merge "DALi Version 2.0.43" into devel/master --- diff --git a/automated-tests/src/dali-toolkit/utc-Dali-Visual.cpp b/automated-tests/src/dali-toolkit/utc-Dali-Visual.cpp index 5864554..bd389ad 100644 --- a/automated-tests/src/dali-toolkit/utc-Dali-Visual.cpp +++ b/automated-tests/src/dali-toolkit/utc-Dali-Visual.cpp @@ -3663,7 +3663,6 @@ int UtcDaliSvgVisualCustomShader(void) int UtcDaliVisualRoundedCorner(void) { -#ifdef OLD_GRAPHICS_TEST ToolkitTestApplication application; tet_infoline( "UtcDaliVisualRoundedCorner" ); @@ -3738,8 +3737,11 @@ int UtcDaliVisualRoundedCorner(void) application.SendNotification(); application.Render(); +#ifdef OLD_GRAPHICS_TEST + // Currently test with multiple program doesn't work well. will fix another day DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< Vector4 >( "cornerRadius", Vector4(cornerRadius, cornerRadius, cornerRadius, cornerRadius) ), true, TEST_LOCATION ); DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< float >( "cornerRadiusPolicy", Toolkit::Visual::Transform::Policy::ABSOLUTE ), true, TEST_LOCATION ); +#endif } // color visual 2 @@ -3770,8 +3772,11 @@ int UtcDaliVisualRoundedCorner(void) application.SendNotification(); application.Render(); +#ifdef OLD_GRAPHICS_TEST + // Currently test with multiple program doesn't work well. will fix another day DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< Vector4 >( "cornerRadius", cornerRadius ), true, TEST_LOCATION ); DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< float >( "cornerRadiusPolicy", Toolkit::Visual::Transform::Policy::RELATIVE ), true, TEST_LOCATION ); +#endif } // color visual 3 - invalid value @@ -3802,9 +3807,12 @@ int UtcDaliVisualRoundedCorner(void) application.SendNotification(); application.Render(); +#ifdef OLD_GRAPHICS_TEST + // Currently test with multiple program doesn't work well. will fix another day DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< Vector4 >( "cornerRadius", cornerRadius ), true, TEST_LOCATION ); // Default corner radius policy is absolute. DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< float >( "cornerRadiusPolicy", Toolkit::Visual::Transform::Policy::ABSOLUTE ), true, TEST_LOCATION ); +#endif } // gradient visual @@ -3849,9 +3857,12 @@ int UtcDaliVisualRoundedCorner(void) application.SendNotification(); application.Render(); +#ifdef OLD_GRAPHICS_TEST + // Currently test with multiple program doesn't work well. will fix another day DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< Vector4 >( "cornerRadius", Vector4(cornerRadius, cornerRadius, cornerRadius, cornerRadius) ), true, TEST_LOCATION ); // Default corner radius policy is absolute. DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< float >( "cornerRadiusPolicy", Toolkit::Visual::Transform::Policy::ABSOLUTE ), true, TEST_LOCATION ); +#endif } // animated image visual @@ -3885,8 +3896,11 @@ int UtcDaliVisualRoundedCorner(void) application.SendNotification(); application.Render(); +#ifdef OLD_GRAPHICS_TEST + // Currently test with multiple program doesn't work well. will fix another day DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< Vector4 >( "cornerRadius", cornerRadius ), true, TEST_LOCATION ); DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< float >( "cornerRadiusPolicy", Toolkit::Visual::Transform::Policy::ABSOLUTE ), true, TEST_LOCATION ); +#endif } // vector image visual @@ -3918,9 +3932,12 @@ int UtcDaliVisualRoundedCorner(void) application.SendNotification(); application.Render(); +#ifdef OLD_GRAPHICS_TEST + // Currently test with multiple program doesn't work well. will fix another day DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< Vector4 >( "cornerRadius", cornerRadius ), true, TEST_LOCATION ); // Default corner radius policy is absolute. DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< float >( "cornerRadiusPolicy", Toolkit::Visual::Transform::Policy::ABSOLUTE ), true, TEST_LOCATION ); +#endif } // animated vector image visual @@ -3954,19 +3971,18 @@ int UtcDaliVisualRoundedCorner(void) application.SendNotification(); application.Render(); +#ifdef OLD_GRAPHICS_TEST + // Currently test with multiple program doesn't work well. will fix another day DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< Vector4 >( "cornerRadius", Vector4(cornerRadius, cornerRadius, cornerRadius, cornerRadius) ), true, TEST_LOCATION ); DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< float >( "cornerRadiusPolicy", Toolkit::Visual::Transform::Policy::RELATIVE ), true, TEST_LOCATION ); - } -#else - tet_result(TET_PASS); #endif + } END_TEST; } int UtcDaliVisualBorderline(void) { -#ifdef OLD_GRAPHICS_TEST ToolkitTestApplication application; tet_infoline( "UtcDaliVisualBorderline" ); @@ -4058,10 +4074,13 @@ int UtcDaliVisualBorderline(void) application.SendNotification(); application.Render(); +#ifdef OLD_GRAPHICS_TEST + // Currently test with multiple program doesn't work well. will fix another day DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< Vector4 >( "cornerRadius", cornerRadius ), true, TEST_LOCATION ); DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< float >( "borderlineWidth", borderlineWidth ), true, TEST_LOCATION ); DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< Vector4 >( "borderlineColor", borderlineColor ), true, TEST_LOCATION ); DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< float >( "borderlineOffset", borderlineOffset ), true, TEST_LOCATION ); +#endif } // color visual 2, default color, default offset @@ -4091,11 +4110,14 @@ int UtcDaliVisualBorderline(void) application.SendNotification(); application.Render(); +#ifdef OLD_GRAPHICS_TEST + // Currently test with multiple program doesn't work well. will fix another day DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< float >( "borderlineWidth", borderlineWidth ), true, TEST_LOCATION ); // Default borderline color is BLACK. DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< Vector4 >( "borderlineColor", Color::BLACK ), true, TEST_LOCATION ); // Default borderline offset is 0.0f. DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< float >( "borderlineOffset", 0.0f ), true, TEST_LOCATION ); +#endif } // color visual 3, offset not [-1.0 ~ 1.0], but uniform value is same anyway @@ -4129,10 +4151,13 @@ int UtcDaliVisualBorderline(void) application.SendNotification(); application.Render(); +#ifdef OLD_GRAPHICS_TEST + // Currently test with multiple program doesn't work well. will fix another day DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< float >( "borderlineWidth", borderlineWidth ), true, TEST_LOCATION ); DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< Vector4 >( "borderlineColor", borderlineColor ), true, TEST_LOCATION ); // NOTE : borderlineOffset will clamp in fragment shader. not visual itself DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< float >( "borderlineOffset", borderlineOffset ), true, TEST_LOCATION ); +#endif } // gradient visual @@ -4179,6 +4204,8 @@ int UtcDaliVisualBorderline(void) application.SendNotification(); application.Render(); +#ifdef OLD_GRAPHICS_TEST + // Currently test with multiple program doesn't work well. will fix another day DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< Vector4 >( "cornerRadius", Vector4(cornerRadius, cornerRadius, cornerRadius, cornerRadius) ), true, TEST_LOCATION ); // Default corner radius policy is absolute. DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< float >( "cornerRadiusPolicy", Toolkit::Visual::Transform::Policy::ABSOLUTE ), true, TEST_LOCATION ); @@ -4187,6 +4214,7 @@ int UtcDaliVisualBorderline(void) DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< Vector4 >( "borderlineColor", Color::BLACK ), true, TEST_LOCATION ); // Default borderline offset is 0.0f. DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< float >( "borderlineOffset", 0.0f ), true, TEST_LOCATION ); +#endif } // animated image visual @@ -4221,10 +4249,13 @@ int UtcDaliVisualBorderline(void) application.SendNotification(); application.Render(); +#ifdef OLD_GRAPHICS_TEST + // Currently test with multiple program doesn't work well. will fix another day DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< float >( "borderlineWidth", borderlineWidth ), true, TEST_LOCATION ); // Default borderline color is BLACK. DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< Vector4 >( "borderlineColor", Color::BLACK ), true, TEST_LOCATION ); DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< float >( "borderlineOffset", borderlineOffset ), true, TEST_LOCATION ); +#endif } // vector image visual @@ -4260,6 +4291,8 @@ int UtcDaliVisualBorderline(void) application.SendNotification(); application.Render(); +#ifdef OLD_GRAPHICS_TEST + // Currently test with multiple program doesn't work well. will fix another day DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< Vector4 >( "cornerRadius", cornerRadius ), true, TEST_LOCATION ); // Default corner radius policy is absolute. DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< float >( "cornerRadiusPolicy", Toolkit::Visual::Transform::Policy::ABSOLUTE ), true, TEST_LOCATION ); @@ -4267,6 +4300,7 @@ int UtcDaliVisualBorderline(void) DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< Vector4 >( "borderlineColor", borderlineColor ), true, TEST_LOCATION ); // Default borderline offset is 0.0. DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< float >( "borderlineOffset", 0.0f ), true, TEST_LOCATION ); +#endif } // animated vector image visual @@ -4305,15 +4339,15 @@ int UtcDaliVisualBorderline(void) application.SendNotification(); application.Render(); +#ifdef OLD_GRAPHICS_TEST + // Currently test with multiple program doesn't work well. will fix another day DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< Vector4 >( "cornerRadius", cornerRadius ), true, TEST_LOCATION ); DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< float >( "cornerRadiusPolicy", Toolkit::Visual::Transform::Policy::RELATIVE ), true, TEST_LOCATION ); DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< float >( "borderlineWidth", borderlineWidth ), true, TEST_LOCATION ); DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< Vector4 >( "borderlineColor", borderlineColor ), true, TEST_LOCATION ); DALI_TEST_EQUALS( application.GetGlAbstraction().CheckUniformValue< float >( "borderlineOffset", borderlineOffset ), true, TEST_LOCATION ); - } -#else - tet_result(TET_PASS); #endif + } END_TEST; } @@ -4631,7 +4665,7 @@ int UtcDaliVisualGetVisualProperty01(void) int UtcDaliVisualGetVisualProperty02(void) { ToolkitTestApplication application; - tet_infoline( "UtcDaliVisualGetVisualProperty02: Test animatable property" ); + tet_infoline( "UtcDaliVisualGetVisualProperty02: Test animatable property, ColorVisual" ); static std::vector customUniforms = { @@ -4730,6 +4764,7 @@ int UtcDaliVisualGetVisualProperty02(void) DALI_TEST_EQUALS(blurRadiusValue->Get< float >(), targetBlurRadius, TEST_LOCATION); #ifdef OLD_GRAPHICS_TEST + // Currently test with multiple program doesn't work well. will fix another day // Test uniform values DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue("mixColor", targetColor), true, TEST_LOCATION); DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue("offset", targetOffset), true, TEST_LOCATION); @@ -4743,7 +4778,6 @@ int UtcDaliVisualGetVisualProperty02(void) int UtcDaliVisualGetVisualProperty03(void) { -#ifdef OLD_GRAPHICS_TEST ToolkitTestApplication application; tet_infoline( "UtcDaliVisualGetVisualProperty03: Test animatable property, ImageVisual" ); @@ -4762,9 +4796,6 @@ int UtcDaliVisualGetVisualProperty03(void) Property::Map propertyMap; propertyMap.Insert(Visual::Property::TYPE, Visual::IMAGE); propertyMap.Insert(ImageVisual::Property::URL, TEST_IMAGE_FILE_NAME); - //We must set some value because application cannot notify shader changed - propertyMap.Insert(DevelVisual::Property::CORNER_RADIUS, 1.0f); - propertyMap.Insert(DevelVisual::Property::BORDERLINE_WIDTH, 1.0f); Visual::Base imageVisual = factory.CreateVisual(propertyMap); @@ -4822,13 +4853,13 @@ int UtcDaliVisualGetVisualProperty03(void) DALI_TEST_CHECK(borderlineOffsetValue); DALI_TEST_EQUALS(borderlineOffsetValue->Get< float >(), targetBorderlineOffset, TEST_LOCATION); +#ifdef OLD_GRAPHICS_TEST + // Currently test with multiple program doesn't work well. will fix another day // Test uniform value DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue("cornerRadius", targetCornerRadius), true, TEST_LOCATION); DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue("borderlineWidth", targetBorderlineWidth), true, TEST_LOCATION); DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue("borderlineColor", targetBorderlineColor), true, TEST_LOCATION); DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue("borderlineOffset", targetBorderlineOffset), true, TEST_LOCATION); -#else - tet_result(TET_PASS); #endif END_TEST; @@ -4836,9 +4867,8 @@ int UtcDaliVisualGetVisualProperty03(void) int UtcDaliVisualGetVisualProperty04(void) { -#ifdef OLD_GRAPHICS_TEST ToolkitTestApplication application; - tet_infoline( "UtcDaliVisualGetVisualProperty01: Test animatable property, GradientVisual" ); + tet_infoline( "UtcDaliVisualGetVisualProperty04: Test animatable property, GradientVisual" ); static std::vector customUniforms = { @@ -4897,11 +4927,287 @@ int UtcDaliVisualGetVisualProperty04(void) DALI_TEST_CHECK(cornerRadiusValue); DALI_TEST_EQUALS(cornerRadiusValue->Get< Vector4 >(), targetCornerRadius, TEST_LOCATION); +#ifdef OLD_GRAPHICS_TEST + // Currently test with multiple program doesn't work well. will fix another day + // Test uniform value + DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue("cornerRadius", targetCornerRadius), true, TEST_LOCATION); +#endif + + END_TEST; +} + +int UtcDaliVisualGetVisualProperty05(void) +{ + ToolkitTestApplication application; + tet_infoline( "UtcDaliVisualGetVisualProperty05: Test animatable property, SvgVisual" ); + + static std::vector customUniforms = + { + UniformData("cornerRadius", Property::Type::VECTOR4), + UniformData("borderlineWidth", Property::Type::FLOAT), + UniformData("borderlineColor", Property::Type::VECTOR4), + UniformData("borderlineOffset", Property::Type::FLOAT), + }; + + TestGraphicsController& graphics = application.GetGraphicsController(); + graphics.AddCustomUniforms(customUniforms); + + VisualFactory factory = VisualFactory::Get(); + Property::Map propertyMap; + propertyMap.Insert(Visual::Property::TYPE, Visual::SVG); + propertyMap.Insert(ImageVisual::Property::URL, TEST_SVG_FILE_NAME); + + Visual::Base svgVisual = factory.CreateVisual(propertyMap); + + DummyControl dummyControl = DummyControl::New(true); + Impl::DummyControl& dummyImpl = static_cast(dummyControl.GetImplementation()); + dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, svgVisual); + dummyControl[Actor::Property::SIZE] = Vector2(200.f, 200.f); + application.GetScene().Add(dummyControl); + + application.SendNotification(); + application.Render(); + + // Wait for image loading + DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION); + + application.SendNotification(); + application.Render(); + + float targetOpacity = 0.5f; + Vector4 targetCornerRadius(20.0f, 20.0f, 0.0f, 0.0f); + float targetBorderlineWidth = 10.0f; + Vector4 targetBorderlineColor(1.0f, 0.0f, 1.0f, 0.5f); + float targetBorderlineOffset = -1.5f; + + Animation animation = Animation::New(1.0f); + animation.AnimateTo(DevelControl::GetVisualProperty(dummyControl, DummyControl::Property::TEST_VISUAL, Visual::Property::OPACITY), targetOpacity); + animation.AnimateTo(DevelControl::GetVisualProperty(dummyControl, DummyControl::Property::TEST_VISUAL, DevelVisual::Property::CORNER_RADIUS), targetCornerRadius); + animation.AnimateTo(DevelControl::GetVisualProperty(dummyControl, DummyControl::Property::TEST_VISUAL, DevelVisual::Property::BORDERLINE_WIDTH), targetBorderlineWidth); + animation.AnimateTo(DevelControl::GetVisualProperty(dummyControl, DummyControl::Property::TEST_VISUAL, DevelVisual::Property::BORDERLINE_COLOR), targetBorderlineColor); + animation.AnimateTo(DevelControl::GetVisualProperty(dummyControl, DummyControl::Property::TEST_VISUAL, DevelVisual::Property::BORDERLINE_OFFSET), targetBorderlineOffset); + animation.Play(); + + application.SendNotification(); + application.Render(); + application.Render(1001u); // End of animation + + Property::Map resultMap; + svgVisual.CreatePropertyMap( resultMap ); + + // Test property values: they should be updated + Property::Value* colorValue = resultMap.Find(Visual::Property::MIX_COLOR, Property::VECTOR4); + DALI_TEST_CHECK(colorValue); + DALI_TEST_EQUALS(colorValue->Get(), Vector4(1.0f, 1.0f, 1.0f, targetOpacity), TEST_LOCATION); + + Property::Value* cornerRadiusValue = resultMap.Find(DevelVisual::Property::CORNER_RADIUS, Property::VECTOR4); + DALI_TEST_CHECK(cornerRadiusValue); + DALI_TEST_EQUALS(cornerRadiusValue->Get< Vector4 >(), targetCornerRadius, TEST_LOCATION); + + Property::Value* borderlineWidthValue = resultMap.Find(DevelVisual::Property::BORDERLINE_WIDTH, Property::FLOAT); + DALI_TEST_CHECK(borderlineWidthValue); + DALI_TEST_EQUALS(borderlineWidthValue->Get< float >(), targetBorderlineWidth, TEST_LOCATION); + + Property::Value* borderlineColorValue = resultMap.Find(DevelVisual::Property::BORDERLINE_COLOR, Property::VECTOR4); + DALI_TEST_CHECK(borderlineColorValue); + DALI_TEST_EQUALS(borderlineColorValue->Get< Vector4 >(), targetBorderlineColor, TEST_LOCATION); + + Property::Value* borderlineOffsetValue = resultMap.Find(DevelVisual::Property::BORDERLINE_OFFSET, Property::FLOAT); + DALI_TEST_CHECK(borderlineOffsetValue); + DALI_TEST_EQUALS(borderlineOffsetValue->Get< float >(), targetBorderlineOffset, TEST_LOCATION); + +#ifdef OLD_GRAPHICS_TEST + // Currently test with multiple program doesn't work well. will fix another day + // Test uniform value + DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue("cornerRadius", targetCornerRadius), true, TEST_LOCATION); + DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue("borderlineWidth", targetBorderlineWidth), true, TEST_LOCATION); + DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue("borderlineColor", targetBorderlineColor), true, TEST_LOCATION); + DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue("borderlineOffset", targetBorderlineOffset), true, TEST_LOCATION); +#endif + + END_TEST; +} + +int UtcDaliVisualGetVisualProperty06(void) +{ + ToolkitTestApplication application; + tet_infoline( "UtcDaliVisualGetVisualProperty06: Test animatable property, AnimatedImageVisual" ); + + static std::vector customUniforms = + { + UniformData("cornerRadius", Property::Type::VECTOR4), + UniformData("borderlineWidth", Property::Type::FLOAT), + UniformData("borderlineColor", Property::Type::VECTOR4), + UniformData("borderlineOffset", Property::Type::FLOAT), + }; + + TestGraphicsController& graphics = application.GetGraphicsController(); + graphics.AddCustomUniforms(customUniforms); + + VisualFactory factory = VisualFactory::Get(); + Property::Map propertyMap; + propertyMap.Insert(Visual::Property::TYPE, Visual::ANIMATED_IMAGE); + propertyMap.Insert(ImageVisual::Property::URL, TEST_GIF_FILE_NAME); + + Visual::Base animatedImageVisual = factory.CreateVisual(propertyMap); + + DummyControl dummyControl = DummyControl::New(true); + Impl::DummyControl& dummyImpl = static_cast(dummyControl.GetImplementation()); + dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, animatedImageVisual); + dummyControl[Actor::Property::SIZE] = Vector2(200.f, 200.f); + application.GetScene().Add(dummyControl); + + application.SendNotification(); + application.Render(); + + // Wait for image loading + DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION); + + application.SendNotification(); + application.Render(); + + float targetOpacity = 0.5f; + Vector4 targetCornerRadius(20.0f, 20.0f, 0.0f, 0.0f); + float targetBorderlineWidth = 10.0f; + Vector4 targetBorderlineColor(1.0f, 0.0f, 1.0f, 0.5f); + float targetBorderlineOffset = -1.5f; + + Animation animation = Animation::New(1.0f); + animation.AnimateTo(DevelControl::GetVisualProperty(dummyControl, DummyControl::Property::TEST_VISUAL, Visual::Property::OPACITY), targetOpacity); + animation.AnimateTo(DevelControl::GetVisualProperty(dummyControl, DummyControl::Property::TEST_VISUAL, DevelVisual::Property::CORNER_RADIUS), targetCornerRadius); + animation.AnimateTo(DevelControl::GetVisualProperty(dummyControl, DummyControl::Property::TEST_VISUAL, DevelVisual::Property::BORDERLINE_WIDTH), targetBorderlineWidth); + animation.AnimateTo(DevelControl::GetVisualProperty(dummyControl, DummyControl::Property::TEST_VISUAL, DevelVisual::Property::BORDERLINE_COLOR), targetBorderlineColor); + animation.AnimateTo(DevelControl::GetVisualProperty(dummyControl, DummyControl::Property::TEST_VISUAL, DevelVisual::Property::BORDERLINE_OFFSET), targetBorderlineOffset); + animation.Play(); + + application.SendNotification(); + application.Render(); + application.Render(1001u); // End of animation + + Property::Map resultMap; + animatedImageVisual.CreatePropertyMap( resultMap ); + + // Test property values: they should be updated + Property::Value* colorValue = resultMap.Find(Visual::Property::MIX_COLOR, Property::VECTOR4); + DALI_TEST_CHECK(colorValue); + DALI_TEST_EQUALS(colorValue->Get(), Vector4(1.0f, 1.0f, 1.0f, targetOpacity), TEST_LOCATION); + + Property::Value* cornerRadiusValue = resultMap.Find(DevelVisual::Property::CORNER_RADIUS, Property::VECTOR4); + DALI_TEST_CHECK(cornerRadiusValue); + DALI_TEST_EQUALS(cornerRadiusValue->Get< Vector4 >(), targetCornerRadius, TEST_LOCATION); + + Property::Value* borderlineWidthValue = resultMap.Find(DevelVisual::Property::BORDERLINE_WIDTH, Property::FLOAT); + DALI_TEST_CHECK(borderlineWidthValue); + DALI_TEST_EQUALS(borderlineWidthValue->Get< float >(), targetBorderlineWidth, TEST_LOCATION); + + Property::Value* borderlineColorValue = resultMap.Find(DevelVisual::Property::BORDERLINE_COLOR, Property::VECTOR4); + DALI_TEST_CHECK(borderlineColorValue); + DALI_TEST_EQUALS(borderlineColorValue->Get< Vector4 >(), targetBorderlineColor, TEST_LOCATION); + + Property::Value* borderlineOffsetValue = resultMap.Find(DevelVisual::Property::BORDERLINE_OFFSET, Property::FLOAT); + DALI_TEST_CHECK(borderlineOffsetValue); + DALI_TEST_EQUALS(borderlineOffsetValue->Get< float >(), targetBorderlineOffset, TEST_LOCATION); + +#ifdef OLD_GRAPHICS_TEST + // Currently test with multiple program doesn't work well. will fix another day // Test uniform value DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue("cornerRadius", targetCornerRadius), true, TEST_LOCATION); -#else - tet_result(TET_PASS); + DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue("borderlineWidth", targetBorderlineWidth), true, TEST_LOCATION); + DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue("borderlineColor", targetBorderlineColor), true, TEST_LOCATION); + DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue("borderlineOffset", targetBorderlineOffset), true, TEST_LOCATION); #endif END_TEST; } + +int UtcDaliVisualGetVisualProperty07(void) +{ + ToolkitTestApplication application; + tet_infoline( "UtcDaliVisualGetVisualProperty07: Test animatable property, AnimatedVectorVisual" ); + + static std::vector customUniforms = + { + UniformData("cornerRadius", Property::Type::VECTOR4), + UniformData("borderlineWidth", Property::Type::FLOAT), + UniformData("borderlineColor", Property::Type::VECTOR4), + UniformData("borderlineOffset", Property::Type::FLOAT), + }; + + TestGraphicsController& graphics = application.GetGraphicsController(); + graphics.AddCustomUniforms(customUniforms); + + VisualFactory factory = VisualFactory::Get(); + Property::Map propertyMap; + propertyMap.Insert(Visual::Property::TYPE, DevelVisual::Type::ANIMATED_VECTOR_IMAGE); + propertyMap.Insert(ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME); + + Visual::Base animatedVectorVisual = factory.CreateVisual(propertyMap); + + DummyControl dummyControl = DummyControl::New(true); + Impl::DummyControl& dummyImpl = static_cast(dummyControl.GetImplementation()); + dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, animatedVectorVisual); + dummyControl[Actor::Property::SIZE] = Vector2(200.f, 200.f); + application.GetScene().Add(dummyControl); + + application.SendNotification(); + application.Render(); + + // Wait for image loading + DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION); + + application.SendNotification(); + application.Render(); + + float targetOpacity = 0.5f; + Vector4 targetCornerRadius(20.0f, 20.0f, 0.0f, 0.0f); + float targetBorderlineWidth = 10.0f; + Vector4 targetBorderlineColor(1.0f, 0.0f, 1.0f, 0.5f); + float targetBorderlineOffset = -1.5f; + + Animation animation = Animation::New(1.0f); + animation.AnimateTo(DevelControl::GetVisualProperty(dummyControl, DummyControl::Property::TEST_VISUAL, Visual::Property::OPACITY), targetOpacity); + animation.AnimateTo(DevelControl::GetVisualProperty(dummyControl, DummyControl::Property::TEST_VISUAL, DevelVisual::Property::CORNER_RADIUS), targetCornerRadius); + animation.AnimateTo(DevelControl::GetVisualProperty(dummyControl, DummyControl::Property::TEST_VISUAL, DevelVisual::Property::BORDERLINE_WIDTH), targetBorderlineWidth); + animation.AnimateTo(DevelControl::GetVisualProperty(dummyControl, DummyControl::Property::TEST_VISUAL, DevelVisual::Property::BORDERLINE_COLOR), targetBorderlineColor); + animation.AnimateTo(DevelControl::GetVisualProperty(dummyControl, DummyControl::Property::TEST_VISUAL, DevelVisual::Property::BORDERLINE_OFFSET), targetBorderlineOffset); + animation.Play(); + + application.SendNotification(); + application.Render(); + application.Render(1001u); // End of animation + + Property::Map resultMap; + animatedVectorVisual.CreatePropertyMap( resultMap ); + + // Test property values: they should be updated + Property::Value* colorValue = resultMap.Find(Visual::Property::MIX_COLOR, Property::VECTOR4); + DALI_TEST_CHECK(colorValue); + DALI_TEST_EQUALS(colorValue->Get(), Vector4(1.0f, 1.0f, 1.0f, targetOpacity), TEST_LOCATION); + + Property::Value* cornerRadiusValue = resultMap.Find(DevelVisual::Property::CORNER_RADIUS, Property::VECTOR4); + DALI_TEST_CHECK(cornerRadiusValue); + DALI_TEST_EQUALS(cornerRadiusValue->Get< Vector4 >(), targetCornerRadius, TEST_LOCATION); + + Property::Value* borderlineWidthValue = resultMap.Find(DevelVisual::Property::BORDERLINE_WIDTH, Property::FLOAT); + DALI_TEST_CHECK(borderlineWidthValue); + DALI_TEST_EQUALS(borderlineWidthValue->Get< float >(), targetBorderlineWidth, TEST_LOCATION); + + Property::Value* borderlineColorValue = resultMap.Find(DevelVisual::Property::BORDERLINE_COLOR, Property::VECTOR4); + DALI_TEST_CHECK(borderlineColorValue); + DALI_TEST_EQUALS(borderlineColorValue->Get< Vector4 >(), targetBorderlineColor, TEST_LOCATION); + + Property::Value* borderlineOffsetValue = resultMap.Find(DevelVisual::Property::BORDERLINE_OFFSET, Property::FLOAT); + DALI_TEST_CHECK(borderlineOffsetValue); + DALI_TEST_EQUALS(borderlineOffsetValue->Get< float >(), targetBorderlineOffset, TEST_LOCATION); + +#ifdef OLD_GRAPHICS_TEST + // Currently test with multiple program doesn't work well. will fix another day + // Test uniform value + DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue("cornerRadius", targetCornerRadius), true, TEST_LOCATION); + DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue("borderlineWidth", targetBorderlineWidth), true, TEST_LOCATION); + DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue("borderlineColor", targetBorderlineColor), true, TEST_LOCATION); + DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue("borderlineOffset", targetBorderlineOffset), true, TEST_LOCATION); +#endif + + END_TEST; +} \ No newline at end of file diff --git a/dali-toolkit/devel-api/visuals/visual-properties-devel.h b/dali-toolkit/devel-api/visuals/visual-properties-devel.h index 0042451..679a31f 100644 --- a/dali-toolkit/devel-api/visuals/visual-properties-devel.h +++ b/dali-toolkit/devel-api/visuals/visual-properties-devel.h @@ -108,7 +108,6 @@ enum Type * @brief The color for the borderline of the visual. * @details Name "borderlineColor", type Property::VECTOR4, animatable * @note Default value is Color::BLACK. - * @note This color is affected by opacity. */ BORDERLINE_COLOR = OPACITY + 5, diff --git a/dali-toolkit/internal/graphics/shaders/gradient-visual-shader.frag b/dali-toolkit/internal/graphics/shaders/gradient-visual-shader.frag index f859a24..cb72c67 100644 --- a/dali-toolkit/internal/graphics/shaders/gradient-visual-shader.frag +++ b/dali-toolkit/internal/graphics/shaders/gradient-visual-shader.frag @@ -128,18 +128,19 @@ lowp vec4 convertBorderlineColor(lowp vec4 textureColor) mediump float tCornerRadius = -gCenterPosition; mediump float MaxTexturelinePotential = tCornerRadius + gPotentialRange; mediump float MinTexturelinePotential = tCornerRadius - gPotentialRange; + lowp vec3 BorderlineColorRGB = borderlineColor.xyz * borderlineColor.a; if(potential > MaxTexturelinePotential) { // potential is out of texture range. use borderline color instead of texture - textureColor = vec4(borderlineColor.xyz, 0.0); + textureColor = vec4(BorderlineColorRGB, 0.0); } else if(potential > MinTexturelinePotential) { // potential is in texture range - textureColor = mix(textureColor, vec4(borderlineColor.xyz, 0.0), smoothstep(MinTexturelinePotential, MaxTexturelinePotential, potential)); + textureColor = mix(textureColor, vec4(BorderlineColorRGB, 0.0), smoothstep(MinTexturelinePotential, MaxTexturelinePotential, potential)); } borderlineOpacity *= borderlineColor.a; - return mix(textureColor, vec4(borderlineColor.xyz, 1.0), borderlineOpacity); + return mix(textureColor, vec4(BorderlineColorRGB, 1.0), borderlineOpacity); } return mix(textureColor, borderlineColor, borderlineOpacity); } diff --git a/dali-toolkit/internal/text/text-controller-impl-event-handler.cpp b/dali-toolkit/internal/text/text-controller-impl-event-handler.cpp index e298a5a..290c229 100644 --- a/dali-toolkit/internal/text/text-controller-impl-event-handler.cpp +++ b/dali-toolkit/internal/text/text-controller-impl-event-handler.cpp @@ -418,13 +418,23 @@ void ControllerImplEventHandler::OnCursorKeyEvent(Controller::Impl& impl, const if(cursorPositionDelta > 0 || eventData.mRightSelectionPosition > 0u) // Check the boundary { eventData.mRightSelectionPosition += cursorPositionDelta; + eventData.mPrimaryCursorPosition = eventData.mRightSelectionPosition; if(impl.mSelectableControlInterface != nullptr) { impl.mSelectableControlInterface->SelectionChanged(oldSelStart, oldSelEnd, eventData.mLeftSelectionPosition, eventData.mRightSelectionPosition); } } - selecting = true; + + if(impl.mSelectableControlInterface != nullptr && eventData.mLeftSelectionPosition == eventData.mRightSelectionPosition) + { + // If left selection position and right selection position are the same, the selection is canceled. + selecting = false; + } + else + { + selecting = true; + } } else if(eventData.mLeftSelectionPosition != eventData.mRightSelectionPosition) { @@ -454,6 +464,12 @@ void ControllerImplEventHandler::OnCursorKeyEvent(Controller::Impl& impl, const eventData.mDecorator->SetPopupActive(false); } } + else + { + // If no selection, set a normal cursor. + impl.ChangeState(EventData::EDITING); + eventData.mUpdateCursorPosition = true; + } } else { @@ -701,6 +717,7 @@ void ControllerImplEventHandler::OnSelectAllEvent(Controller::Impl& impl) eventData.mLeftSelectionPosition = 0u; eventData.mRightSelectionPosition = model->mLogicalModel->mText.Count(); + eventData.mPrimaryCursorPosition = eventData.mRightSelectionPosition; if(impl.mSelectableControlInterface != nullptr) { @@ -719,8 +736,8 @@ void ControllerImplEventHandler::OnSelectNoneEvent(Controller::Impl& impl) EventData& eventData = *impl.mEventData; if(eventData.mSelectionEnabled && eventData.mState == EventData::SELECTING) { - uint32_t oldStart = eventData.mLeftSelectionPosition; - uint32_t oldEnd = eventData.mRightSelectionPosition; + uint32_t oldStart = eventData.mLeftSelectionPosition; + uint32_t oldEnd = eventData.mRightSelectionPosition; eventData.mLeftSelectionPosition = eventData.mRightSelectionPosition = eventData.mPrimaryCursorPosition; impl.ChangeState(EventData::EDITING); @@ -758,6 +775,7 @@ void ControllerImplEventHandler::OnSelectRangeEvent(Controller::Impl& impl, cons impl.mEventData->mLeftSelectionPosition = start; impl.mEventData->mRightSelectionPosition = end; + impl.mEventData->mPrimaryCursorPosition = end; if(impl.mSelectableControlInterface != nullptr) { diff --git a/dali-toolkit/internal/text/text-controller-impl.cpp b/dali-toolkit/internal/text/text-controller-impl.cpp index b298bf0..045fb8a 100644 --- a/dali-toolkit/internal/text/text-controller-impl.cpp +++ b/dali-toolkit/internal/text/text-controller-impl.cpp @@ -507,10 +507,14 @@ void Controller::Impl::ClearGlyphModelData(CharacterIndex startIndex, CharacterI mModel->mVisualModel->mCharactersPerGlyph.Erase(charactersPerGlyphBuffer + mTextUpdateInfo.mStartGlyphIndex, charactersPerGlyphBuffer + endGlyphIndexPlusOne); - // Clear the positions buffer. - Vector2* positionsBuffer = mModel->mVisualModel->mGlyphPositions.Begin(); - mModel->mVisualModel->mGlyphPositions.Erase(positionsBuffer + mTextUpdateInfo.mStartGlyphIndex, - positionsBuffer + endGlyphIndexPlusOne); + // Should pass if mGlyphPositions has already been cleared in Controller::Relayouter::Relayout + if(0u != mModel->mVisualModel->mGlyphPositions.Count()) + { + // Clear the positions buffer. + Vector2* positionsBuffer = mModel->mVisualModel->mGlyphPositions.Begin(); + mModel->mVisualModel->mGlyphPositions.Erase(positionsBuffer + mTextUpdateInfo.mStartGlyphIndex, + positionsBuffer + endGlyphIndexPlusOne); + } } if(NO_OPERATION != (LAYOUT & operations)) diff --git a/dali-toolkit/internal/visuals/animated-image/animated-image-visual.cpp b/dali-toolkit/internal/visuals/animated-image/animated-image-visual.cpp index 58506fd..da54e1e 100644 --- a/dali-toolkit/internal/visuals/animated-image/animated-image-visual.cpp +++ b/dali-toolkit/internal/visuals/animated-image/animated-image-visual.cpp @@ -535,15 +535,19 @@ void AnimatedImageVisual::OnSetTransform() } } +void AnimatedImageVisual::UpdateShader() +{ + if(mImpl->mRenderer) + { + Shader shader = GenerateShader(); + mImpl->mRenderer.SetShader(shader); + } +} + void AnimatedImageVisual::OnInitialize() { bool defaultWrapMode = mWrapModeU <= WrapMode::CLAMP_TO_EDGE && mWrapModeV <= WrapMode::CLAMP_TO_EDGE; - Shader shader = mImageVisualShaderFactory.GetShader( - mFactoryCache, - TextureAtlas::DISABLED, - defaultWrapMode ? DefaultTextureWrapMode::APPLY : DefaultTextureWrapMode::DO_NOT_APPLY, - IsRoundedCornerRequired() ? RoundedCorner::ENABLED : RoundedCorner::DISABLED, - IsBorderlineRequired() ? Borderline::ENABLED : Borderline::DISABLED); + Shader shader = GenerateShader(); Geometry geometry = mFactoryCache.GetGeometry(VisualFactoryCache::QUAD_GEOMETRY); @@ -818,6 +822,19 @@ TextureSet AnimatedImageVisual::SetLoadingFailed() return textureSet; } +Shader AnimatedImageVisual::GenerateShader() const +{ + bool defaultWrapMode = mWrapModeU <= WrapMode::CLAMP_TO_EDGE && mWrapModeV <= WrapMode::CLAMP_TO_EDGE; + Shader shader; + shader = mImageVisualShaderFactory.GetShader( + mFactoryCache, + TextureAtlas::DISABLED, + defaultWrapMode ? DefaultTextureWrapMode::APPLY : DefaultTextureWrapMode::DO_NOT_APPLY, + IsRoundedCornerRequired() ? RoundedCorner::ENABLED : RoundedCorner::DISABLED, + IsBorderlineRequired() ? Borderline::ENABLED : Borderline::DISABLED); + return shader; +} + } // namespace Internal } // namespace Toolkit diff --git a/dali-toolkit/internal/visuals/animated-image/animated-image-visual.h b/dali-toolkit/internal/visuals/animated-image/animated-image-visual.h index 608b43f..347e9d3 100644 --- a/dali-toolkit/internal/visuals/animated-image/animated-image-visual.h +++ b/dali-toolkit/internal/visuals/animated-image/animated-image-visual.h @@ -181,6 +181,16 @@ protected: */ void OnSetTransform() override; + /** + * @copydoc Visual::Base::UpdateShader + */ + void UpdateShader() override; + + /** + * @copydoc Visual::Base::GenerateShader + */ + Shader GenerateShader() const override; + private: /** * Creates the renderer for the animated image diff --git a/dali-toolkit/internal/visuals/animated-vector-image/animated-vector-image-visual.cpp b/dali-toolkit/internal/visuals/animated-vector-image/animated-vector-image-visual.cpp index edd7b1b..35d7456 100644 --- a/dali-toolkit/internal/visuals/animated-vector-image/animated-vector-image-visual.cpp +++ b/dali-toolkit/internal/visuals/animated-vector-image/animated-vector-image-visual.cpp @@ -283,26 +283,7 @@ void AnimatedVectorImageVisual::DoSetProperty(Property::Index index, const Prope void AnimatedVectorImageVisual::OnInitialize(void) { - Shader shader; - - if(mImpl->mCustomShader) - { - shader = Shader::New(mImpl->mCustomShader->mVertexShader.empty() ? mImageVisualShaderFactory.GetVertexShaderSource().data() : mImpl->mCustomShader->mVertexShader, - mImpl->mCustomShader->mFragmentShader.empty() ? mImageVisualShaderFactory.GetFragmentShaderSource().data() : mImpl->mCustomShader->mFragmentShader, - mImpl->mCustomShader->mHints); - - shader.RegisterProperty(PIXEL_AREA_UNIFORM_NAME, FULL_TEXTURE_RECT); - } - else - { - shader = mImageVisualShaderFactory.GetShader( - mFactoryCache, - TextureAtlas::DISABLED, - DefaultTextureWrapMode::APPLY, - IsRoundedCornerRequired() ? RoundedCorner::ENABLED : RoundedCorner::DISABLED, - IsBorderlineRequired() ? Borderline::ENABLED : Borderline::DISABLED - ); - } + Shader shader = GenerateShader(); Geometry geometry = mFactoryCache.GetGeometry(VisualFactoryCache::QUAD_GEOMETRY); @@ -411,6 +392,15 @@ void AnimatedVectorImageVisual::OnSetTransform() } } +void AnimatedVectorImageVisual::UpdateShader() +{ + if(mImpl->mRenderer) + { + Shader shader = GenerateShader(); + mImpl->mRenderer.SetShader(shader); + } +} + void AnimatedVectorImageVisual::OnDoAction(const Property::Index actionId, const Property::Value& attributes) { // Check if action is valid for this visual type and perform action if possible @@ -633,6 +623,31 @@ void AnimatedVectorImageVisual::OnProcessEvents() mEventCallback = nullptr; // The callback will be deleted in the VectorAnimationManager } +Shader AnimatedVectorImageVisual::GenerateShader() const +{ + Shader shader; + if(mImpl->mCustomShader) + { + shader = Shader::New(mImpl->mCustomShader->mVertexShader.empty() ? mImageVisualShaderFactory.GetVertexShaderSource().data() : mImpl->mCustomShader->mVertexShader, + mImpl->mCustomShader->mFragmentShader.empty() ? mImageVisualShaderFactory.GetFragmentShaderSource().data() : mImpl->mCustomShader->mFragmentShader, + mImpl->mCustomShader->mHints); + + shader.RegisterProperty(PIXEL_AREA_UNIFORM_NAME, FULL_TEXTURE_RECT); + } + else + { + shader = mImageVisualShaderFactory.GetShader( + mFactoryCache, + TextureAtlas::DISABLED, + DefaultTextureWrapMode::APPLY, + IsRoundedCornerRequired() ? RoundedCorner::ENABLED : RoundedCorner::DISABLED, + IsBorderlineRequired() ? Borderline::ENABLED : Borderline::DISABLED + ); + } + return shader; +} + + } // namespace Internal } // namespace Toolkit diff --git a/dali-toolkit/internal/visuals/animated-vector-image/animated-vector-image-visual.h b/dali-toolkit/internal/visuals/animated-vector-image/animated-vector-image-visual.h index c809634..4f1a859 100644 --- a/dali-toolkit/internal/visuals/animated-vector-image/animated-vector-image-visual.h +++ b/dali-toolkit/internal/visuals/animated-vector-image/animated-vector-image-visual.h @@ -140,6 +140,16 @@ protected: void OnSetTransform() override; /** + * @copydoc Visual::Base::UpdateShader + */ + void UpdateShader() override; + + /** + * @copydoc Visual::Base::GenerateShader + */ + Shader GenerateShader() const override; + + /** * @copydoc Visual::Base::OnDoAction */ void OnDoAction(const Property::Index actionId, const Property::Value& attributes) override; diff --git a/dali-toolkit/internal/visuals/color/color-visual.cpp b/dali-toolkit/internal/visuals/color/color-visual.cpp index 8f748cf..9863364 100644 --- a/dali-toolkit/internal/visuals/color/color-visual.cpp +++ b/dali-toolkit/internal/visuals/color/color-visual.cpp @@ -182,7 +182,7 @@ void ColorVisual::UpdateShader() { if(mImpl->mRenderer) { - Shader shader = GetShader(); + Shader shader = GenerateShader(); mImpl->mRenderer.SetShader(shader); } } @@ -191,7 +191,7 @@ void ColorVisual::OnInitialize() { Geometry geometry = mFactoryCache.GetGeometry(VisualFactoryCache::QUAD_GEOMETRY); - Shader shader = GetShader(); + Shader shader = GenerateShader(); mImpl->mRenderer = Renderer::New(geometry, shader); @@ -210,7 +210,7 @@ void ColorVisual::OnInitialize() mImpl->mTransform.RegisterUniforms(mImpl->mRenderer, Direction::LEFT_TO_RIGHT); } -Shader ColorVisual::GetShader() +Shader ColorVisual::GenerateShader() const { Shader shader; VisualFactoryCache::ShaderType shaderType; diff --git a/dali-toolkit/internal/visuals/color/color-visual.h b/dali-toolkit/internal/visuals/color/color-visual.h index 6fe1f43..1f2af5c 100644 --- a/dali-toolkit/internal/visuals/color/color-visual.h +++ b/dali-toolkit/internal/visuals/color/color-visual.h @@ -114,16 +114,14 @@ protected: void UpdateShader() override; /** - * @copydoc Visual::Base::OnGetPropertyObject + * @copydoc Visual::Base::GenerateShader */ - Dali::Property OnGetPropertyObject(Dali::Property::Key key) override; + Shader GenerateShader() const override; -private: /** - * @brief Get a shader for the current properties. - * @return The shader for the current properties. + * @copydoc Visual::Base::OnGetPropertyObject */ - Shader GetShader(); + Dali::Property OnGetPropertyObject(Dali::Property::Key key) override; private: // Undefined diff --git a/dali-toolkit/internal/visuals/gradient/gradient-visual.cpp b/dali-toolkit/internal/visuals/gradient/gradient-visual.cpp index 896b095..18e4767 100644 --- a/dali-toolkit/internal/visuals/gradient/gradient-visual.cpp +++ b/dali-toolkit/internal/visuals/gradient/gradient-visual.cpp @@ -183,7 +183,7 @@ void GradientVisual::UpdateShader() { if(mImpl->mRenderer) { - Shader shader = GetShader(); + Shader shader = GenerateShader(); mImpl->mRenderer.SetShader(shader); } } @@ -239,7 +239,7 @@ void GradientVisual::DoCreateInstancePropertyMap(Property::Map& map) const void GradientVisual::OnInitialize() { Geometry geometry = mFactoryCache.GetGeometry(VisualFactoryCache::QUAD_GEOMETRY); - Shader shader = GetShader(); + Shader shader = GenerateShader(); //Set up the texture set TextureSet textureSet = TextureSet::New(); @@ -345,7 +345,7 @@ bool GradientVisual::NewGradient(Type gradientType, const Property::Map& propert return true; } -Shader GradientVisual::GetShader() +Shader GradientVisual::GenerateShader() const { bool userspaceUnit = (mGradient->GetGradientUnits() == Toolkit::GradientVisual::Units::USER_SPACE); bool roundedCorner = IsRoundedCornerRequired(); diff --git a/dali-toolkit/internal/visuals/gradient/gradient-visual.h b/dali-toolkit/internal/visuals/gradient/gradient-visual.h index 0dde8b4..40223b8 100644 --- a/dali-toolkit/internal/visuals/gradient/gradient-visual.h +++ b/dali-toolkit/internal/visuals/gradient/gradient-visual.h @@ -139,6 +139,11 @@ protected: */ void UpdateShader() override; + /** + * @copydoc Visual::Base::GenerateShader + */ + Shader GenerateShader() const override; + private: /** * New a gradient object with the given property map. @@ -148,12 +153,6 @@ private: bool NewGradient(Type gradientType, const Property::Map& propertyMap); /** - * @brief Get a shader for the current properties. - * @return The shader for the current properties. - */ - Shader GetShader(); - - /** * Get the stop-offsets from the property. * The valid property type are ARRAY, VECTOR2, VECTOR3, VECTOR4. * diff --git a/dali-toolkit/internal/visuals/image/image-visual.cpp b/dali-toolkit/internal/visuals/image/image-visual.cpp index 4ae09f6..0251a1d 100644 --- a/dali-toolkit/internal/visuals/image/image-visual.cpp +++ b/dali-toolkit/internal/visuals/image/image-visual.cpp @@ -556,7 +556,7 @@ void ImageVisual::OnInitialize() textureManager.UseExternalResource(mImageUrl.GetUrl()); } - Shader shader = GetShader(); + Shader shader = GenerateShader(); // Create the renderer mImpl->mRenderer = Renderer::New(geometry, shader); @@ -822,7 +822,7 @@ void ImageVisual::UpdateShader() { if(mImpl->mRenderer) { - Shader shader = GetShader(); + Shader shader = GenerateShader(); mImpl->mRenderer.SetShader(shader); } } @@ -960,7 +960,7 @@ void ImageVisual::RemoveTexture() } } -Shader ImageVisual::GetShader() +Shader ImageVisual::GenerateShader() const { Shader shader; diff --git a/dali-toolkit/internal/visuals/image/image-visual.h b/dali-toolkit/internal/visuals/image/image-visual.h index 598660f..c0a3f75 100644 --- a/dali-toolkit/internal/visuals/image/image-visual.h +++ b/dali-toolkit/internal/visuals/image/image-visual.h @@ -233,6 +233,11 @@ protected: */ void UpdateShader() override; + /** + * @copydoc Visual::Base::GenerateShader + */ + Shader GenerateShader() const override; + public: /** * @copydoc AtlasUploadObserver::UploadCompleted @@ -315,12 +320,6 @@ private: */ void DoSetProperty(Property::Index index, const Property::Value& value); - /** - * @brief Get a shader for the current properties. - * @return The shader for the current properties. - */ - Shader GetShader(); - private: Vector4 mPixelArea; WeakHandle mPlacementActor; diff --git a/dali-toolkit/internal/visuals/svg/svg-visual.cpp b/dali-toolkit/internal/visuals/svg/svg-visual.cpp index b6f9520..67fd435 100644 --- a/dali-toolkit/internal/visuals/svg/svg-visual.cpp +++ b/dali-toolkit/internal/visuals/svg/svg-visual.cpp @@ -84,26 +84,7 @@ SvgVisual::~SvgVisual() void SvgVisual::OnInitialize() { - Shader shader; - if(!mImpl->mCustomShader) - { - shader = mImageVisualShaderFactory.GetShader( - mFactoryCache, - mAttemptAtlasing ? TextureAtlas::ENABLED : TextureAtlas::DISABLED, - DefaultTextureWrapMode::APPLY, - IsRoundedCornerRequired() ? RoundedCorner::ENABLED : RoundedCorner::DISABLED, - IsBorderlineRequired() ? Borderline::ENABLED : Borderline::DISABLED - ); - } - else - { - shader = Shader::New(mImpl->mCustomShader->mVertexShader.empty() ? mImageVisualShaderFactory.GetVertexShaderSource().data() : mImpl->mCustomShader->mVertexShader, - mImpl->mCustomShader->mFragmentShader.empty() ? mImageVisualShaderFactory.GetFragmentShaderSource().data() : mImpl->mCustomShader->mFragmentShader, - mImpl->mCustomShader->mHints); - - shader.RegisterProperty(PIXEL_AREA_UNIFORM_NAME, FULL_TEXTURE_RECT); - } - + Shader shader = GenerateShader(); Geometry geometry = mFactoryCache.GetGeometry(VisualFactoryCache::QUAD_GEOMETRY); mImpl->mRenderer = Renderer::New(geometry, shader); } @@ -383,6 +364,39 @@ bool SvgVisual::IsResourceReady() const mImpl->mResourceStatus == Toolkit::Visual::ResourceStatus::FAILED); } +void SvgVisual::UpdateShader() +{ + if(mImpl->mRenderer) + { + Shader shader = GenerateShader(); + mImpl->mRenderer.SetShader(shader); + } +} + +Shader SvgVisual::GenerateShader() const +{ + Shader shader; + if(!mImpl->mCustomShader) + { + shader = mImageVisualShaderFactory.GetShader( + mFactoryCache, + mAttemptAtlasing ? TextureAtlas::ENABLED : TextureAtlas::DISABLED, + DefaultTextureWrapMode::APPLY, + IsRoundedCornerRequired() ? RoundedCorner::ENABLED : RoundedCorner::DISABLED, + IsBorderlineRequired() ? Borderline::ENABLED : Borderline::DISABLED + ); + } + else + { + shader = Shader::New(mImpl->mCustomShader->mVertexShader.empty() ? mImageVisualShaderFactory.GetVertexShaderSource().data() : mImpl->mCustomShader->mVertexShader, + mImpl->mCustomShader->mFragmentShader.empty() ? mImageVisualShaderFactory.GetFragmentShaderSource().data() : mImpl->mCustomShader->mFragmentShader, + mImpl->mCustomShader->mHints); + + shader.RegisterProperty(PIXEL_AREA_UNIFORM_NAME, FULL_TEXTURE_RECT); + } + return shader; +} + } // namespace Internal } // namespace Toolkit diff --git a/dali-toolkit/internal/visuals/svg/svg-visual.h b/dali-toolkit/internal/visuals/svg/svg-visual.h index 2ccd337..66de43c 100644 --- a/dali-toolkit/internal/visuals/svg/svg-visual.h +++ b/dali-toolkit/internal/visuals/svg/svg-visual.h @@ -137,6 +137,16 @@ protected: */ bool IsResourceReady() const override; + /** + * @copydoc Visual::Base::UpdateShader + */ + void UpdateShader() override; + + /** + * @copydoc Visual::Base::GenerateShader + */ + Shader GenerateShader() const override; + public: /** * @bried Apply the rasterized image to the visual. diff --git a/dali-toolkit/internal/visuals/visual-base-impl.h b/dali-toolkit/internal/visuals/visual-base-impl.h index 8800ad8..d04d3df 100644 --- a/dali-toolkit/internal/visuals/visual-base-impl.h +++ b/dali-toolkit/internal/visuals/visual-base-impl.h @@ -363,6 +363,16 @@ protected: } /** + * @brief Generate a shader by the current properties from each sub classes's own shader-generate logic. + * @param[in] factoryCache The visual factory cache to store the generated shader. + * @return If the function defined, Generated shader by the current properties. Else, empty shader. + */ + virtual Dali::Shader GenerateShader() const + { + return Dali::Shader(); + } + + /** * @brief Called by GetPropertyObject() allowing sub classes to respond to the GetPropertyObject event * @note The derived class is required to register the given property. * @param[in] key The key of the visual's property.