Let we allow to blur radius applied to borderline cases.
For now, let we implement it as simple smoothstep.
But final version should resolve "Optical Illusion Effect"
Change-Id: I97c105c7c12ff89830842ba9bc51e71e8e2d7fbd
Signed-off-by: Eunki, Hong <eunkiki.hong@samsung.com>
/*
- * Copyright (c) 2024 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2025 Samsung Electronics Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
application.GetScene().Remove(actor);
}
- // Case 4 : Test which animated corner radius occur.
+ // Case 4 : Test which animated corner radius or blur radius occur.
{
tet_printf("Test borderline animate case\n");
Property::Map propertyMap;
Animation animation = Animation::New(0.1f);
animation.AnimateTo(DevelControl::GetVisualProperty(actor, DummyControl::Property::TEST_VISUAL, DevelVisual::Property::CORNER_RADIUS), Vector4(1.0f, 1.0f, 1.0f, 1.0f));
+ animation.AnimateTo(DevelControl::GetVisualProperty(actor, DummyControl::Property::TEST_VISUAL, DevelColorVisual::Property::BLUR_RADIUS), 1.0f);
animation.Play();
application.SendNotification();
application.Render(101u); // End of animation
blendModeValue = renderer.GetProperty(Renderer::Property::BLEND_MODE);
- // BlendMode is ON_WITHOUT_CULL.
+ // BlendMode is still ON_WITHOUT_CULL.
DALI_TEST_EQUALS(blendModeValue.Get<int>(), (int)BlendMode::ON_WITHOUT_CULL, TEST_LOCATION);
application.GetScene().Remove(actor);
END_TEST;
}
+int UtcDaliVisualGetPropertyObject03(void)
+{
+ ToolkitTestApplication application;
+ tet_infoline("UtcDaliVisualGetPropertyObject03 GetProperty for color visual");
+
+ VisualFactory factory = VisualFactory::Get();
+
+ Property::Map properties;
+ properties[Visual::Property::TYPE] = Visual::COLOR;
+ properties.Insert(ColorVisual::Property::MIX_COLOR, Color::RED);
+ Visual::Base visual = factory.CreateVisual(properties);
+
+ DALI_TEST_CHECK(visual.GetType() == Visual::COLOR);
+
+ auto propertyTest = [](Visual::Base visual, Property::Key key, bool expect) {
+ {
+ std::ostringstream oss;
+ oss << "Test for key[" << key << "]";
+ tet_printf("%s\n", oss.str().c_str());
+ }
+
+ Dali::Property property = visual.GetPropertyObject(std::move(key));
+ tet_printf("Result object[%p] index of property[%d]\n", property.object.GetObjectPtr(), property.propertyIndex);
+
+ if(expect)
+ {
+ DALI_TEST_CHECK(property.object && property.propertyIndex != Property::INVALID_INDEX);
+ }
+ else
+ {
+ DALI_TEST_CHECK(!property.object && property.propertyIndex == Property::INVALID_INDEX);
+ }
+ };
+
+ // Test to get valid objects
+ propertyTest(visual, Visual::Property::MIX_COLOR, true);
+ propertyTest(visual, Visual::Property::OPACITY, true);
+ propertyTest(visual, Visual::Transform::Property::SIZE, true);
+
+ // Test subclass only property success to get
+ propertyTest(visual, DevelColorVisual::Property::BLUR_RADIUS, true);
+ propertyTest(visual, "blurRadius", true);
+
+ propertyTest(visual, DevelVisual::Property::CORNER_RADIUS, true);
+ propertyTest(visual, DevelVisual::Property::BORDERLINE_WIDTH, true);
+
+ END_TEST;
+}
int UtcDaliVisualGetVisualProperty01(void)
{
Property::Map targetPropertyMap;
targetPropertyMap[DevelColorVisual::Property::BLUR_RADIUS] = targetBlurRadius;
targetPropertyMap[DevelVisual::Property::CORNER_RADIUS] = targetCornerRadius;
- targetPropertyMap[DevelVisual::Property::BORDERLINE_WIDTH] = 10.0f; // Don't care. just dummy
callStack.Reset();
callStack.Enable(true);
dummyControl,
{
{"#define IS_REQUIRED_BLUR", true},
- {"#define IS_REQUIRED_BORDERLINE", false}, // Note : We ignore borderline when blur radius occured
+ {"#define IS_REQUIRED_BORDERLINE", false},
{"#define IS_REQUIRED_ROUNDED_CORNER", true},
{"#define IS_REQUIRED_SQUIRCLE_CORNER", false},
},
Property::Map targetPropertyMap2;
targetPropertyMap2[DevelColorVisual::Property::BLUR_RADIUS] = 0.0f;
targetPropertyMap2[DevelVisual::Property::CORNER_RADIUS] = Vector4::ZERO;
- targetPropertyMap2[DevelVisual::Property::BORDERLINE_WIDTH] = 15.0f; // Don't care. just dummy
// Update Properties with CornerRadius
DevelControl::DoAction(dummyControl, DummyControl::Property::TEST_VISUAL, DevelVisual::Action::UPDATE_PROPERTY, targetPropertyMap2);
TestShaderCodeContainSubstrings(
dummyControl,
{
- {"#define IS_REQUIRED_BLUR", true}, // Note : mAlwaysUsingBlurRadius is true.
- {"#define IS_REQUIRED_BORDERLINE", false}, // Note : We ignore borderline when blur radius occured
+ {"#define IS_REQUIRED_BLUR", true}, // Note : mAlwaysUsingBlurRadius is true.
+ {"#define IS_REQUIRED_BORDERLINE", false},
{"#define IS_REQUIRED_ROUNDED_CORNER", true}, // Note : mAlwaysUsingCornerRadius is true.
{"#define IS_REQUIRED_SQUIRCLE_CORNER", false},
},
dummyControl,
{
{"#define IS_REQUIRED_BLUR", true},
- {"#define IS_REQUIRED_BORDERLINE", false}, // Note : We ignore borderline when blur radius occured
+ {"#define IS_REQUIRED_BORDERLINE", true},
{"#define IS_REQUIRED_ROUNDED_CORNER", true},
{"#define IS_REQUIRED_SQUIRCLE_CORNER", {false, true}},
{"#define SL_VERSION_LOW", {false, true}},
dummyControl,
{
{"#define IS_REQUIRED_BLUR", true}, // Note : mAlwaysUsingBlurRadius is true.
- {"#define IS_REQUIRED_BORDERLINE", false}, // Note : We ignore borderline when blur radius occured
+ {"#define IS_REQUIRED_BORDERLINE", true}, // Note : mAlwaysUsingBorderline is true.
{"#define IS_REQUIRED_ROUNDED_CORNER", true}, // Note : mAlwaysUsingCornerRadius is true.
{"#define IS_REQUIRED_SQUIRCLE_CORNER", {false, true}}, // Note : mAlwaysUsingCornerSquareness is true.
{"#define SL_VERSION_LOW", {false, true}},
dummyControl,
{
{"#define IS_REQUIRED_BLUR", enableBlur},
- {"#define IS_REQUIRED_BORDERLINE", !enableBlur && enableBorderline}, ///< Since borderline is ignored, due to blur enabled.
+ {"#define IS_REQUIRED_BORDERLINE", enableBorderline},
{"#define IS_REQUIRED_ROUNDED_CORNER", enableCornerRadius},
{"#define IS_REQUIRED_CUTOUT", cutoutPolicy != DevelColorVisual::CutoutPolicy::NONE},
},
#define DALI_TOOLKIT_COLOR_VISUAL_PROPERTIES_DEVEL_H
/*
- * Copyright (c) 2024 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2025 Samsung Electronics Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* @note Optional.
* @note The default is 0.
* @note The visual size increases by the blur radius.
- * @note If squareness is not zero, the width of borderline might not equal with it's real value.
- * @note We cannot use blur radius and borderline properties at the same time.
+ * @note If squareness is not zero, the width of blur radius might not equal with it's real value.
*/
BLUR_RADIUS = MIX_COLOR + 2,
#ifdef IS_REQUIRED_BLUR
UNIFORM highp float blurRadius;
-#elif defined(IS_REQUIRED_BORDERLINE)
+#endif
+#ifdef IS_REQUIRED_BORDERLINE
UNIFORM highp float borderlineWidth;
UNIFORM highp float borderlineOffset;
UNIFORM lowp vec4 borderlineColor;
highp float gPotentialRange = 0.0;
highp float gMaxOutlinePotential = 0.0;
highp float gMinOutlinePotential = 0.0;
-#ifdef IS_REQUIRED_BLUR
-#elif defined(IS_REQUIRED_BORDERLINE)
+#ifdef IS_REQUIRED_BORDERLINE
highp float gMaxInlinePotential = 0.0;
highp float gMinInlinePotential = 0.0;
#endif
void calculatePosition(highp float currentBorderlineWidth)
{
gCenterPosition = -gRadius;
-#ifdef IS_REQUIRED_BLUR
-#elif defined(IS_REQUIRED_BORDERLINE)
+#ifdef IS_REQUIRED_BORDERLINE
gCenterPosition += currentBorderlineWidth * (clamp(borderlineOffset, -1.0, 1.0) + 1.0) * 0.5;
#endif
gDiff = gFragmentPosition - gCenterPosition;
gMaxOutlinePotential = gRadius + gPotentialRange;
gMinOutlinePotential = gRadius - gPotentialRange;
-#ifdef IS_REQUIRED_BLUR
-#elif defined(IS_REQUIRED_BORDERLINE)
+#ifdef IS_REQUIRED_BORDERLINE
gMaxInlinePotential = gMaxOutlinePotential - currentBorderlineWidth;
gMinInlinePotential = gMinOutlinePotential - currentBorderlineWidth;
-#else
#endif
// reduce defect near edge of rounded corner.
}
#endif
+#ifdef IS_REQUIRED_BORDERLINE
#ifdef IS_REQUIRED_BLUR
-#elif defined(IS_REQUIRED_BORDERLINE)
+// TODO : Current logic is only for PoC! We should make clean up!
+lowp vec4 convertBorderlineColorWithBlur(lowp vec4 textureColor,highp float currentBorderlineWidth, highp float blurRadius)
+{
+ highp float potential = gPotential;
+
+ blurRadius = max(blurRadius, 0.0) + vAliasMargin;
+
+ lowp vec3 borderlineColorRGB = borderlineColor.rgb * uActorColor.rgb;
+ lowp float borderlineColorAlpha = borderlineColor.a * uActorColor.a;
+ // NOTE : color-visual is always preMultiplied.
+ borderlineColorRGB *= borderlineColorAlpha;
+
+ mediump float borderlineOpacity = 0.0;
+ mediump float textureOpacity = 0.0;
+
+ highp float outsideThreshold = gRadius;
+ highp float insideThreshold = gRadius - currentBorderlineWidth;
+ highp float textureOutlineThreshold = -gCenterPosition;
+
+ // borderlineOpacity should be 0~1 whenever potential over insideThreshold
+ // and 1~0 whenever potential outsideThreshold.
+ // To combine this 2 information, we can use smoothstep and multiply function.
+
+ borderlineOpacity = smoothstep(insideThreshold - blurRadius, insideThreshold + blurRadius, potential) *
+ (1.0 - smoothstep(outsideThreshold - blurRadius, outsideThreshold + blurRadius, potential));
+
+ textureOpacity = 1.0 - smoothstep(textureOutlineThreshold - blurRadius, textureOutlineThreshold + blurRadius, potential);
+
+ // NOTE : color-visual is always preMultiplied.
+ borderlineColorRGB *= borderlineOpacity;
+ borderlineColorAlpha *= borderlineOpacity;
+ textureColor *= textureOpacity;
+
+ // Manual blend operation with premultiplied colors.
+ // Final alpha = borderlineColorAlpha + (1.0 - borderlineColorAlpha) * textureColor.a.
+ // (Final rgb * alpha) = borderlineColorRGB + (1.0 - borderlineColorAlpha) * textureColor.rgb
+ // If premultipliedAlpha == 1.0, just return vec4(rgb*alpha, alpha)
+ // Else, return vec4((rgb*alpha) / alpha, alpha)
+
+ lowp float finalAlpha = mix(textureColor.a, 1.0, borderlineColorAlpha);
+ lowp vec3 finalMultipliedRGB = borderlineColorRGB + (1.0 - borderlineColorAlpha) * textureColor.rgb;
+ return vec4(finalMultipliedRGB, finalAlpha);
+}
+#else
lowp vec4 convertBorderlineColor(lowp vec4 textureColor)
{
highp float potential = gPotential;
return mix(textureColor, vec4(borderlineColorRGB, borderlineColorAlpha), borderlineOpacity);
}
#endif
+#endif
#ifdef IS_REQUIRED_BLUR
#elif defined(IS_REQUIRED_ROUNDED_CORNER)
#endif
#ifdef IS_REQUIRED_BLUR
-#if defined(SL_VERSION_LOW) || defined(IS_REQUIRED_SQUIRCLE_CORNER)
+#if defined(SL_VERSION_LOW) || defined(IS_REQUIRED_SQUIRCLE_CORNER) || defined(IS_REQUIRED_BORDERLINE)
// Legacy code for low version glsl
mediump float calculateBlurOpacity()
{
#endif
#ifdef IS_REQUIRED_BLUR
+#ifdef IS_REQUIRED_BORDERLINE
+ tempBorderlineWidth = borderlineWidth;
+#endif
calculatePosition(tempBorderlineWidth);
calculatePotential();
+
+#ifdef IS_REQUIRED_BORDERLINE
+ gl_FragColor = convertBorderlineColorWithBlur(targetColor, tempBorderlineWidth, blurRadius);
+#else
setupMinMaxPotential(tempBorderlineWidth);
gl_FragColor = targetColor;
mediump float opacity = calculateBlurOpacity();
gl_FragColor *= opacity;
+#endif
#else
#if defined(IS_REQUIRED_ROUNDED_CORNER) && !defined(IS_REQUIRED_BORDERLINE)
// skip rounded corner calculate for performance
#ifdef IS_REQUIRED_BLUR
UNIFORM highp float blurRadius;
-#elif defined(IS_REQUIRED_BORDERLINE)
+#endif
+#ifdef IS_REQUIRED_BORDERLINE
UNIFORM highp float borderlineWidth;
UNIFORM highp float borderlineOffset;
UNIFORM lowp vec4 borderlineColor;
#endif
#ifdef IS_REQUIRED_ROUNDED_CORNER
-#ifdef IS_REQUIRED_BLUR
- highp float maxSize = max(visualSize.x, visualSize.y);
- highp float minSize = min(visualSize.x, visualSize.y);
-#elif defined(IS_REQUIRED_BORDERLINE)
- highp float maxSize = max(visualSize.x, visualSize.y) + (1.0 + clamp(borderlineOffset, -1.0, 1.0)) * borderlineWidth;
- highp float minSize = min(visualSize.x, visualSize.y) + (1.0 + clamp(borderlineOffset, -1.0, 1.0)) * borderlineWidth;
-#else
- highp float maxSize = max(visualSize.x, visualSize.y);
- highp float minSize = min(visualSize.x, visualSize.y);
-#endif
+ #ifdef IS_REQUIRED_BORDERLINE
+ highp float maxSize = max(visualSize.x, visualSize.y) + (1.0 + clamp(borderlineOffset, -1.0, 1.0)) * borderlineWidth;
+ highp float minSize = min(visualSize.x, visualSize.y) + (1.0 + clamp(borderlineOffset, -1.0, 1.0)) * borderlineWidth;
+ #else
+ highp float maxSize = max(visualSize.x, visualSize.y);
+ highp float minSize = min(visualSize.x, visualSize.y);
+ #endif
vCornerRadius = mix(cornerRadius * minSize, cornerRadius, cornerRadiusPolicy);
vCornerRadius = min(vCornerRadius, minSize * 0.5);
// Optimize fragment shader. 0.2929 ~= 1.0 - sqrt(0.5)
#endif
#ifdef IS_REQUIRED_BLUR
- vPosition = aPosition * (visualSize + 2.0 * blurRadius + vertexMargin);
- vOptRectSize -= blurRadius + 1.0;
+ #ifdef IS_REQUIRED_BORDERLINE
+ vPosition = aPosition * (visualSize + (1.0 + clamp(borderlineOffset, -1.0, 1.0)) * borderlineWidth + 2.0 * blurRadius + vertexMargin);
+ vOptRectSize -= (1.0 - clamp(borderlineOffset, -1.0, 1.0)) * 0.5 * borderlineWidth + blurRadius + 1.0;
+ #else
+ vPosition = aPosition * (visualSize + 2.0 * blurRadius + vertexMargin);
+ vOptRectSize -= blurRadius + 1.0;
+ #endif
#elif defined(IS_REQUIRED_BORDERLINE)
- vPosition = aPosition * (visualSize + (1.0 + clamp(borderlineOffset, -1.0, 1.0))* borderlineWidth + vertexMargin);
+ vPosition = aPosition * (visualSize + (1.0 + clamp(borderlineOffset, -1.0, 1.0)) * borderlineWidth + vertexMargin);
vOptRectSize -= (1.0 - clamp(borderlineOffset, -1.0, 1.0)) * 0.5 * borderlineWidth + 1.0;
#elif defined(IS_REQUIRED_ROUNDED_CORNER)
vPosition = aPosition * (visualSize + vertexMargin);
/*
- * Copyright (c) 2024 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2025 Samsung Electronics Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
VisualFactoryCache::COLOR_SHADER_BLUR_EDGE,
VisualFactoryCache::COLOR_SHADER_ROUNDED_CORNER_BLUR_EDGE,
VisualFactoryCache::COLOR_SHADER_SQUIRCLE_CORNER_BLUR_EDGE,
+ VisualFactoryCache::COLOR_SHADER_BORDERLINE_BLUR_EDGE,
+ VisualFactoryCache::COLOR_SHADER_ROUNDED_BORDERLINE_BLUR_EDGE,
+ VisualFactoryCache::COLOR_SHADER_SQUIRCLE_BORDERLINE_BLUR_EDGE,
VisualFactoryCache::COLOR_SHADER_CUTOUT,
VisualFactoryCache::COLOR_SHADER_CUTOUT_ROUNDED_CORNER,
VisualFactoryCache::COLOR_SHADER_CUTOUT_SQUIRCLE_CORNER,
VisualFactoryCache::COLOR_SHADER_CUTOUT_BLUR_EDGE,
VisualFactoryCache::COLOR_SHADER_CUTOUT_ROUNDED_CORNER_BLUR_EDGE,
VisualFactoryCache::COLOR_SHADER_CUTOUT_SQUIRCLE_CORNER_BLUR_EDGE,
+ VisualFactoryCache::COLOR_SHADER_CUTOUT_BORDERLINE_BLUR_EDGE,
+ VisualFactoryCache::COLOR_SHADER_CUTOUT_ROUNDED_BORDERLINE_BLUR_EDGE,
+ VisualFactoryCache::COLOR_SHADER_CUTOUT_SQUIRCLE_BORDERLINE_BLUR_EDGE,
};
constexpr uint32_t SHADER_TYPE_TABLE_COUNT = sizeof(SHADER_TYPE_TABLE) / sizeof(SHADER_TYPE_TABLE[0]);
ROUNDED_CORNER = 1,
SQUIRCLE_CORNER = 2,
- BORDERLINE = (1) * 3,
- BLUR = (2) * 3,
-
- CUTOUT = (1) * 3 * 3,
+ BORDERLINE = (1 << 0) * 3,
+ BLUR = (1 << 1) * 3,
+ CUTOUT = (1 << 2) * 3,
};
constexpr uint32_t MINIMUM_SHADER_VERSION_SUPPORT_ROUNDED_BLUR = 300;
shaderTypeFlag += ColorVisualRequireFlag::ROUNDED_CORNER;
}
- if(mColorBorderline && !mColorBlur)
+ if(mColorBorderline)
{
shaderTypeFlag += ColorVisualRequireFlag::BORDERLINE;
}
{
vertexShaderPrefixList += "#define IS_REQUIRED_BLUR\n";
}
- if(mColorBorderline == Borderline::ENABLED && mColorBlur == Blur::DISABLED)
+ if(mColorBorderline == Borderline::ENABLED)
{
vertexShaderPrefixList += "#define IS_REQUIRED_BORDERLINE\n";
}
fragmentShaderPrefixList += "#define SL_VERSION_LOW\n";
}
}
- if(mColorBorderline == Borderline::ENABLED && mColorBlur == Blur::DISABLED)
+ if(mColorBorderline == Borderline::ENABLED)
{
fragmentShaderPrefixList += "#define IS_REQUIRED_BORDERLINE\n";
}
#define DALI_TOOLKIT_COLOR_VISUAL_SHADER_FACTORY_H
/*
- * Copyright (c) 2024 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2025 Samsung Electronics Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
void GetFragmentShaderPrefixList(std::string& fragmentShaderPrefixList) const;
private:
- RoundedCorner::Type mColorRoundCorner : 2; ///< Whether use rounded corner, or not. default as RoundedCorner::DISABLED
+ RoundedCorner::Type mColorRoundCorner : 3; ///< Whether use rounded corner, or not. default as RoundedCorner::DISABLED
Borderline::Type mColorBorderline : 2; ///< Whether use border line, or not. default as Borderline::DISABLED
Blur::Type mColorBlur : 2; ///< Whether use blur, or not. default as Blur::DISABLED
Cutout::Type mColorCutout : 2; ///< Whether use cutout, or not. default as Cutout::DISABLED
/*
- * Copyright (c) 2024 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2025 Samsung Electronics Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
// Change the shader must not be occured many times. we always have to use blur feature.
mAlwaysUsingBlurRadius = true;
- mImpl->mRenderer.SetProperty(Renderer::Property::BLEND_MODE, BlendMode::ON);
+ if(!IsBorderlineRequired())
+ {
+ // If IsBorderlineRequired is true, BLEND_MODE is already BlendMode::ON_WITHOUT_CULL. So we don't overwrite it.
+ mImpl->mRenderer.SetProperty(Renderer::Property::BLEND_MODE, BlendMode::ON);
+ }
+
// Change shader
if(!mImpl->mCustomShader)
{
return Dali::Property(handle, Property::INVALID_INDEX);
}
- if((key.type == Property::Key::INDEX && key.indexKey == DevelColorVisual::Property::BLUR_RADIUS) || (key.type == Property::Key::STRING && key.stringKey == BLUR_RADIUS_NAME))
+ if((key.type == Property::Key::INDEX && key.indexKey == DevelColorVisual::Property::BLUR_RADIUS) ||
+ (key.type == Property::Key::STRING && key.stringKey == BLUR_RADIUS_NAME))
{
const bool updateShader = !mImpl->mCustomShader && !IsBlurRequired();
// Change shader
UpdateShader();
}
- mImpl->mRenderer.SetProperty(Renderer::Property::BLEND_MODE, BlendMode::ON);
+ if(!IsBorderlineRequired())
+ {
+ // If IsBorderlineRequired is true, BLEND_MODE is already BlendMode::ON_WITHOUT_CULL. So we don't overwrite it.
+ mImpl->mRenderer.SetProperty(Renderer::Property::BLEND_MODE, BlendMode::ON);
+ }
return Dali::Property(mImpl->mRenderer, DecoratedVisualRenderer::Property::BLUR_RADIUS);
}
#define DALI_TOOLKIT_VISUAL_FACTORY_CACHE_H
/*
- * Copyright (c) 2024 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2025 Samsung Electronics Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
COLOR_SHADER_BLUR_EDGE,
COLOR_SHADER_ROUNDED_CORNER_BLUR_EDGE,
COLOR_SHADER_SQUIRCLE_CORNER_BLUR_EDGE,
+ COLOR_SHADER_BORDERLINE_BLUR_EDGE,
+ COLOR_SHADER_ROUNDED_BORDERLINE_BLUR_EDGE,
+ COLOR_SHADER_SQUIRCLE_BORDERLINE_BLUR_EDGE,
COLOR_SHADER_CUTOUT,
COLOR_SHADER_CUTOUT_ROUNDED_CORNER,
COLOR_SHADER_CUTOUT_SQUIRCLE_CORNER,
COLOR_SHADER_CUTOUT_BLUR_EDGE,
COLOR_SHADER_CUTOUT_ROUNDED_CORNER_BLUR_EDGE,
COLOR_SHADER_CUTOUT_SQUIRCLE_CORNER_BLUR_EDGE,
+ COLOR_SHADER_CUTOUT_BORDERLINE_BLUR_EDGE,
+ COLOR_SHADER_CUTOUT_ROUNDED_BORDERLINE_BLUR_EDGE,
+ COLOR_SHADER_CUTOUT_SQUIRCLE_BORDERLINE_BLUR_EDGE,
BORDER_SHADER,
BORDER_SHADER_ANTI_ALIASING,
GRADIENT_SHADER_LINEAR_BOUNDING_BOX,
/*
- * Copyright (c) 2024 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2025 Samsung Electronics Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
DALI_ENUM_TO_STRING_WITH_SCOPE(Toolkit::Internal::VisualFactoryCache::ShaderType, COLOR_SHADER_BLUR_EDGE)
DALI_ENUM_TO_STRING_WITH_SCOPE(Toolkit::Internal::VisualFactoryCache::ShaderType, COLOR_SHADER_ROUNDED_CORNER_BLUR_EDGE)
DALI_ENUM_TO_STRING_WITH_SCOPE(Toolkit::Internal::VisualFactoryCache::ShaderType, COLOR_SHADER_SQUIRCLE_CORNER_BLUR_EDGE)
+ DALI_ENUM_TO_STRING_WITH_SCOPE(Toolkit::Internal::VisualFactoryCache::ShaderType, COLOR_SHADER_BORDERLINE_BLUR_EDGE)
+ DALI_ENUM_TO_STRING_WITH_SCOPE(Toolkit::Internal::VisualFactoryCache::ShaderType, COLOR_SHADER_ROUNDED_BORDERLINE_BLUR_EDGE)
+ DALI_ENUM_TO_STRING_WITH_SCOPE(Toolkit::Internal::VisualFactoryCache::ShaderType, COLOR_SHADER_SQUIRCLE_BORDERLINE_BLUR_EDGE)
DALI_ENUM_TO_STRING_WITH_SCOPE(Toolkit::Internal::VisualFactoryCache::ShaderType, COLOR_SHADER_CUTOUT)
DALI_ENUM_TO_STRING_WITH_SCOPE(Toolkit::Internal::VisualFactoryCache::ShaderType, COLOR_SHADER_CUTOUT_ROUNDED_CORNER)
DALI_ENUM_TO_STRING_WITH_SCOPE(Toolkit::Internal::VisualFactoryCache::ShaderType, COLOR_SHADER_CUTOUT_SQUIRCLE_CORNER)
DALI_ENUM_TO_STRING_WITH_SCOPE(Toolkit::Internal::VisualFactoryCache::ShaderType, COLOR_SHADER_CUTOUT_BLUR_EDGE)
DALI_ENUM_TO_STRING_WITH_SCOPE(Toolkit::Internal::VisualFactoryCache::ShaderType, COLOR_SHADER_CUTOUT_ROUNDED_CORNER_BLUR_EDGE)
DALI_ENUM_TO_STRING_WITH_SCOPE(Toolkit::Internal::VisualFactoryCache::ShaderType, COLOR_SHADER_CUTOUT_SQUIRCLE_CORNER_BLUR_EDGE)
+ DALI_ENUM_TO_STRING_WITH_SCOPE(Toolkit::Internal::VisualFactoryCache::ShaderType, COLOR_SHADER_CUTOUT_BORDERLINE_BLUR_EDGE)
+ DALI_ENUM_TO_STRING_WITH_SCOPE(Toolkit::Internal::VisualFactoryCache::ShaderType, COLOR_SHADER_CUTOUT_ROUNDED_BORDERLINE_BLUR_EDGE)
+ DALI_ENUM_TO_STRING_WITH_SCOPE(Toolkit::Internal::VisualFactoryCache::ShaderType, COLOR_SHADER_CUTOUT_SQUIRCLE_BORDERLINE_BLUR_EDGE)
DALI_ENUM_TO_STRING_WITH_SCOPE(Toolkit::Internal::VisualFactoryCache::ShaderType, BORDER_SHADER)
DALI_ENUM_TO_STRING_WITH_SCOPE(Toolkit::Internal::VisualFactoryCache::ShaderType, BORDER_SHADER_ANTI_ALIASING)
DALI_ENUM_TO_STRING_WITH_SCOPE(Toolkit::Internal::VisualFactoryCache::ShaderType, GRADIENT_SHADER_LINEAR_BOUNDING_BOX)