From: Eunki, Hong Date: Fri, 12 Aug 2022 04:45:13 +0000 (+0900) Subject: UpdateProperty action set some missed DecoratedVisualRenderer properties X-Git-Tag: dali_2.1.36~4 X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=commitdiff_plain;h=00f6852da309388731ce612090a4004f30890982 UpdateProperty action set some missed DecoratedVisualRenderer properties Bug fix when CornerRadius / BorderlinewWidth = 0.0f so visual didn't regist uniforms. Change-Id: I48e5a6eea2a9611264ab3f4835e463bda5650b14 Signed-off-by: Eunki, Hong --- diff --git a/automated-tests/src/dali-toolkit/utc-Dali-Visual.cpp b/automated-tests/src/dali-toolkit/utc-Dali-Visual.cpp index dae8540..8f5c433 100644 --- a/automated-tests/src/dali-toolkit/utc-Dali-Visual.cpp +++ b/automated-tests/src/dali-toolkit/utc-Dali-Visual.cpp @@ -5665,10 +5665,10 @@ int UtcDaliVisualGetVisualProperty07(void) END_TEST; } -int UtcDaliVisualUpdateProperty(void) +int UtcDaliVisualUpdateProperty01(void) { ToolkitTestApplication application; - tet_infoline("UtcDaliVisualUpdateProperty: Test update property by DoAction. Standard case"); + tet_infoline("UtcDaliVisualUpdateProperty01: Test update property by DoAction. Standard case"); VisualFactory factory = VisualFactory::Get(); Property::Map propertyMap; @@ -5760,6 +5760,82 @@ int UtcDaliVisualUpdateProperty(void) END_TEST; } +int UtcDaliVisualUpdateProperty02(void) +{ + ToolkitTestApplication application; + tet_infoline("UtcDaliVisualUpdateProperty02: Test update property by DoAction. Initialize as zero, and update non-zero case"); + + Vector4 borderlineColor = Color::BLUE; + float borderlineOffset = 1.0f; + + VisualFactory factory = VisualFactory::Get(); + Property::Map propertyMap; + propertyMap[Visual::Property::TYPE] = Visual::Type::IMAGE; + propertyMap[ImageVisual::Property::URL] = TEST_IMAGE_FILE_NAME; + propertyMap[Visual::Property::MIX_COLOR] = Color::BLUE; + propertyMap[DevelVisual::Property::VISUAL_FITTING_MODE] = DevelVisual::FIT_WIDTH; + propertyMap[DevelVisual::Property::CORNER_RADIUS] = 0.0f; + propertyMap[DevelVisual::Property::CORNER_RADIUS_POLICY] = Toolkit::Visual::Transform::Policy::RELATIVE; + propertyMap[DevelVisual::Property::BORDERLINE_WIDTH] = 0.0f; + propertyMap[DevelVisual::Property::BORDERLINE_COLOR] = borderlineColor; + propertyMap[DevelVisual::Property::BORDERLINE_OFFSET] = borderlineOffset; + + Visual::Base imageVisual = factory.CreateVisual(propertyMap); + + DummyControl dummyControl = DummyControl::New(true); + Impl::DummyControl& dummyImpl = static_cast(dummyControl.GetImplementation()); + dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, imageVisual); + 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(); + + Property::Map originalMap; + imageVisual.CreatePropertyMap(originalMap); + + Vector4 targetCornerRadius = Vector4(10.0f, 0.0f, 1.0f, 2.0f); + float targetBorderlineWidth = 20.0f; + + Property::Map targetPropertyMap; + targetPropertyMap[DevelVisual::Property::CORNER_RADIUS] = targetCornerRadius; + targetPropertyMap[DevelVisual::Property::BORDERLINE_WIDTH] = targetBorderlineWidth; + + // Update Properties + DevelControl::DoAction(dummyControl, DummyControl::Property::TEST_VISUAL, DevelVisual::Action::UPDATE_PROPERTY, targetPropertyMap); + + Property::Map resultMap; + imageVisual.CreatePropertyMap(resultMap); + + Property::Value* cornerRadiusValue = resultMap.Find(DevelVisual::Property::CORNER_RADIUS, Property::VECTOR4); + DALI_TEST_CHECK(cornerRadiusValue); + DALI_TEST_EQUALS(cornerRadiusValue->Get(), targetCornerRadius, TEST_LOCATION); + + Property::Value* cornerRadiusPolicyValue = resultMap.Find(DevelVisual::Property::CORNER_RADIUS_POLICY, Property::INTEGER); + DALI_TEST_CHECK(cornerRadiusPolicyValue); + DALI_TEST_EQUALS(cornerRadiusPolicyValue->Get(), static_cast(Toolkit::Visual::Transform::Policy::RELATIVE), TEST_LOCATION); + + Property::Value* borderlineWidthValue = resultMap.Find(DevelVisual::Property::BORDERLINE_WIDTH, Property::FLOAT); + DALI_TEST_CHECK(borderlineWidthValue); + DALI_TEST_EQUALS(borderlineWidthValue->Get(), targetBorderlineWidth, TEST_LOCATION); + + Property::Value* borderlineColorValue = resultMap.Find(DevelVisual::Property::BORDERLINE_COLOR, Property::VECTOR4); + DALI_TEST_CHECK(borderlineColorValue); + DALI_TEST_EQUALS(borderlineColorValue->Get(), borderlineColor, TEST_LOCATION); + + Property::Value* borderlineOffsetValue = resultMap.Find(DevelVisual::Property::BORDERLINE_OFFSET, Property::FLOAT); + DALI_TEST_CHECK(borderlineOffsetValue); + DALI_TEST_EQUALS(borderlineOffsetValue->Get(), borderlineOffset, TEST_LOCATION); + + END_TEST; +} + int UtcDaliVisualUpdatePropertyInvalidType(void) { ToolkitTestApplication application; diff --git a/dali-toolkit/internal/visuals/visual-base-impl.cpp b/dali-toolkit/internal/visuals/visual-base-impl.cpp index ce78b7e..55610ec 100644 --- a/dali-toolkit/internal/visuals/visual-base-impl.cpp +++ b/dali-toolkit/internal/visuals/visual-base-impl.cpp @@ -306,6 +306,10 @@ void Visual::Base::SetProperties(const Property::Map& propertyMap) // Check whether we must update shader. if(!mImpl->mAlwaysUsingBorderline && IsBorderlineRequired()) { + // Required to change shader mean, we didn't setup BORDERLINE_COLOR and BORDERLINE_OFFSET into mRenderer before. Set property now. + mImpl->mRenderer.SetProperty(DecoratedVisualRenderer::Property::BORDERLINE_COLOR, mImpl->mBorderlineColor); + mImpl->mRenderer.SetProperty(DecoratedVisualRenderer::Property::BORDERLINE_OFFSET, mImpl->mBorderlineOffset); + // Make Blend mode ON_WITHOUT_CULL for transparent mix color. mImpl->mRenderer.SetProperty(Renderer::Property::BLEND_MODE, BlendMode::ON_WITHOUT_CULL); @@ -387,6 +391,9 @@ void Visual::Base::SetProperties(const Property::Map& propertyMap) // Check whether we must update shader. if(!mImpl->mAlwaysUsingCornerRadius && IsRoundedCornerRequired()) { + // Required to change shader mean, we didn't setup CORNER_RADIUS_POLICY into mRenderer before. Set property now. + mImpl->mRenderer.SetProperty(DecoratedVisualRenderer::Property::CORNER_RADIUS_POLICY, mImpl->mCornerRadiusPolicy); + // Change the shader must not be occured many times. we always have to use corner radius feature. mImpl->mAlwaysUsingCornerRadius = true; @@ -574,11 +581,11 @@ void Visual::Base::CreatePropertyMap(Property::Map& map) const mImpl->mTransform.mOffset = mImpl->mRenderer.GetProperty(VisualRenderer::Property::TRANSFORM_OFFSET); mImpl->mTransform.mSize = mImpl->mRenderer.GetProperty(VisualRenderer::Property::TRANSFORM_SIZE); - if(IsTypeAvailableForCornerRadius(mImpl->mType)) + if(IsRoundedCornerRequired()) { mImpl->mCornerRadius = mImpl->mRenderer.GetProperty(DecoratedVisualRenderer::Property::CORNER_RADIUS); } - if(IsTypeAvailableForBorderline(mImpl->mType)) + if(IsBorderlineRequired()) { mImpl->mBorderlineWidth = mImpl->mRenderer.GetProperty(DecoratedVisualRenderer::Property::BORDERLINE_WIDTH); mImpl->mBorderlineColor = mImpl->mRenderer.GetProperty(DecoratedVisualRenderer::Property::BORDERLINE_COLOR);