Let we support cutout policy to ignore outside of view, for color visual.
It will be useful if user want to impelemnt InnerShadow effect as visual level
Change-Id: I57b83e3acfd9318a6a2b46fbff4434f6196a8156
Signed-off-by: Eunki, Hong <eunkiki.hong@samsung.com>
static std::vector<UniformData> customUniforms =
{
UniformData("uCutoutWithCornerRadius", Property::Type::INTEGER),
+ UniformData("uCutoutOutside", Property::Type::INTEGER),
};
TestGraphicsController& graphics = application.GetGraphicsController();
VisualFactory factory = VisualFactory::Get();
- // Test (Enable/Disable) CornerRadius, (Enable/Disable) Borderline, (Enable/Disable) Blur, and 3 kind of CutoutPolicy
- for(int testCase = 0; testCase < 2 * 2 * 2 * 3; ++testCase)
+ // Test (Enable/Disable) CornerRadius, (Enable/Disable) Borderline, (Enable/Disable) Blur, and 5 kind of CutoutPolicy
+ for(int testCase = 0; testCase < 2 * 2 * 2 * 5; ++testCase)
{
const bool enableCornerRadius = (testCase & 1);
const bool enableBorderline = (testCase & 2);
// clang-format off
const DevelColorVisual::CutoutPolicy::Type cutoutPolicy = (testCase / 8) == 0 ? DevelColorVisual::CutoutPolicy::NONE :
(testCase / 8) == 1 ? DevelColorVisual::CutoutPolicy::CUTOUT_VIEW :
- DevelColorVisual::CutoutPolicy::CUTOUT_VIEW_WITH_CORNER_RADIUS;
+ (testCase / 8) == 2 ? DevelColorVisual::CutoutPolicy::CUTOUT_VIEW_WITH_CORNER_RADIUS :
+ (testCase / 8) == 3 ? DevelColorVisual::CutoutPolicy::CUTOUT_OUTSIDE :
+ DevelColorVisual::CutoutPolicy::CUTOUT_OUTSIDE_WITH_CORNER_RADIUS;
// clang-format on
Property::Map propertyMap;
if(cutoutPolicy != DevelColorVisual::CutoutPolicy::NONE)
{
auto& gl = application.GetGlAbstraction();
- DALI_TEST_EQUALS(gl.CheckUniformValue<int>("uCutoutWithCornerRadius", cutoutPolicy == DevelColorVisual::CutoutPolicy::CUTOUT_VIEW_WITH_CORNER_RADIUS ? 1 : 0), true, TEST_LOCATION);
+ DALI_TEST_EQUALS(gl.CheckUniformValue<int>("uCutoutWithCornerRadius", (cutoutPolicy == DevelColorVisual::CutoutPolicy::CUTOUT_VIEW_WITH_CORNER_RADIUS || cutoutPolicy == DevelColorVisual::CutoutPolicy::CUTOUT_OUTSIDE_WITH_CORNER_RADIUS) ? 1 : 0), true, TEST_LOCATION);
+ DALI_TEST_EQUALS(gl.CheckUniformValue<int>("uCutoutOutside", (cutoutPolicy == DevelColorVisual::CutoutPolicy::CUTOUT_OUTSIDE || cutoutPolicy == DevelColorVisual::CutoutPolicy::CUTOUT_OUTSIDE_WITH_CORNER_RADIUS) ? 1 : 0), true, TEST_LOCATION);
}
dummyControl.Unparent();
{
enum Type
{
- NONE, ///< Fully render the visual area (Default)
- CUTOUT_VIEW, ///< Cutout the area of the view. It will use size of view.
- CUTOUT_VIEW_WITH_CORNER_RADIUS, ///< Cutout the area of the view include visual's corner radius. It will use size of view.
+ NONE, ///< Fully render the visual area (Default)
+ CUTOUT_VIEW, ///< Cutout the area of the view. It will use size of view.
+ CUTOUT_VIEW_WITH_CORNER_RADIUS, ///< Cutout the area of the view include visual's corner radius. It will use size of view.
+ CUTOUT_OUTSIDE, ///< Cutout the outside area of the view. It will use size of view.
+ CUTOUT_OUTSIDE_WITH_CORNER_RADIUS, ///< Cutout the outside area of the view include visual's corner radius. It will use size of view.
};
} // namespace CutoutPolicy
#if defined(IS_REQUIRED_CUTOUT)
UNIFORM lowp int uCutoutWithCornerRadius;
+ UNIFORM lowp int uCutoutOutside;
#endif
#ifdef IS_REQUIRED_SQUIRCLE_CORNER
#ifdef IS_REQUIRED_CUTOUT
mediump float discardOpacity = 1.0;
+ lowp int cutoutInsideOccured = 0;
if(abs(vPositionFromCenter.x) <= uSize.x * 0.5 && abs(vPositionFromCenter.y) <= uSize.y * 0.5)
{
{
discardOpacity = 0.0;
}
-
- if(discardOpacity < 0.001)
- {
- discard;
- }
#else
- discard;
+ cutoutInsideOccured = 1;
+#endif
+ }
+
+#if defined(IS_REQUIRED_ROUNDED_CORNER)
+ if(uCutoutOutside == 1)
+ {
+ discardOpacity = 1.0 - discardOpacity;
+ }
+
+ if(discardOpacity < 0.001)
+ {
+ cutoutInsideOccured = 1;
+ }
#endif
+
+ if((uCutoutOutside ^ cutoutInsideOccured) == 0)
+ {
+ discard;
}
#endif
DALI_ENUM_TO_STRING_WITH_SCOPE(Dali::Toolkit::DevelColorVisual::CutoutPolicy, NONE)
DALI_ENUM_TO_STRING_WITH_SCOPE(Dali::Toolkit::DevelColorVisual::CutoutPolicy, CUTOUT_VIEW)
DALI_ENUM_TO_STRING_WITH_SCOPE(Dali::Toolkit::DevelColorVisual::CutoutPolicy, CUTOUT_VIEW_WITH_CORNER_RADIUS)
+ DALI_ENUM_TO_STRING_WITH_SCOPE(Dali::Toolkit::DevelColorVisual::CutoutPolicy, CUTOUT_OUTSIDE)
+ DALI_ENUM_TO_STRING_WITH_SCOPE(Dali::Toolkit::DevelColorVisual::CutoutPolicy, CUTOUT_OUTSIDE_WITH_CORNER_RADIUS)
DALI_ENUM_TO_STRING_TABLE_END(CUTOUT_POLICY)
} // unnamed namespace
if(IsCutoutRequired())
{
- int cutoutWithCornerRadius = (mCutoutPolicy == DevelColorVisual::CutoutPolicy::CUTOUT_VIEW_WITH_CORNER_RADIUS) ? 1 : 0;
+ int cutoutWithCornerRadius = ((mCutoutPolicy == DevelColorVisual::CutoutPolicy::CUTOUT_VIEW_WITH_CORNER_RADIUS) || (mCutoutPolicy == DevelColorVisual::CutoutPolicy::CUTOUT_OUTSIDE_WITH_CORNER_RADIUS));
+ int cutoutOutside = ((mCutoutPolicy == DevelColorVisual::CutoutPolicy::CUTOUT_OUTSIDE) || (mCutoutPolicy == DevelColorVisual::CutoutPolicy::CUTOUT_OUTSIDE_WITH_CORNER_RADIUS));
mImpl->mRenderer.RegisterUniqueProperty("uCutoutWithCornerRadius", cutoutWithCornerRadius);
+ mImpl->mRenderer.RegisterUniqueProperty("uCutoutOutside", cutoutOutside);
}
// Register transform properties