Control control1 = Control::New();
control1.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
control1.SetProperty(Actor::Property::SIZE, Vector2(1.0f, 1.0f));
- control1.SetRenderEffect(RenderEffect::CreateBackgroundBlurEffect());
+ control1.SetRenderEffect(BackgroundBlurEffect::New());
panel.Add(control1);
Control control1 = Control::New();
control1.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
control1.SetProperty(Actor::Property::SIZE, Vector2(1.0f, 1.0f));
- control1.SetRenderEffect(RenderEffect::CreateBackgroundBlurEffect());
+ control1.SetRenderEffect(BackgroundBlurEffect::New());
sceneView.Add(control1);
return handle;
}
- RenderEffectImplPtr Clone() const override
- {
- return New();
- }
-
OffScreenRenderable::Type GetOffScreenRenderableType() override
{
return OffScreenRenderable::Type::NONE;
Toolkit::TestRenderEffect testEffect = Toolkit::TestRenderEffect::New();
DALI_TEST_CHECK(testEffect);
- // Check that effect is not activate yet.
+ // Check that effect is not activated yet.
Toolkit::Internal::TestRenderEffectImpl& impl = Toolkit::Internal::GetImplementation(testEffect);
DALI_TEST_EQUALS(impl.mOnActivated, false, TEST_LOCATION);
DALI_TEST_EQUALS(impl.GetOwnerControl(), Toolkit::Control(), TEST_LOCATION);
int UtcDaliInternalRenderEffectGetOwnerControl01(void)
{
- tet_infoline("UtcDaliInternalRenderEffecGetOwnerControl01");
ToolkitTestApplication application;
+ tet_infoline("UtcDaliInternalRenderEffecGetOwnerControl01");
Toolkit::TestRenderEffect testEffect = Toolkit::TestRenderEffect::New();
DALI_TEST_CHECK(testEffect);
- // Check that effect prototype is not activated.
- Toolkit::Internal::TestRenderEffectImpl& prototype = Toolkit::Internal::GetImplementation(testEffect);
- DALI_TEST_EQUALS(prototype.mOnActivated, false, TEST_LOCATION);
- DALI_TEST_EQUALS(prototype.GetOwnerControl(), Toolkit::Control(), TEST_LOCATION);
+ // Check that effect is not activated yet.
+ Toolkit::Internal::TestRenderEffectImpl& impl = Toolkit::Internal::GetImplementation(testEffect);
+
+ DALI_TEST_EQUALS(impl.mOnActivated, false, TEST_LOCATION);
+ DALI_TEST_EQUALS(impl.GetOwnerControl(), Toolkit::Control(), TEST_LOCATION);
Integration::Scene scene = application.GetScene();
tet_printf("Test effect set, and activate due to control scene on.\n");
control.SetRenderEffect(testEffect);
- Toolkit::Internal::TestRenderEffectImplPtr impl =
- dynamic_cast<Toolkit::Internal::TestRenderEffectImpl*>(control.GetRenderEffect().GetObjectPtr());
-
- { // Check that effect prototype is not activated,
- DALI_TEST_EQUALS(impl == &prototype, false, TEST_LOCATION);
-
- DALI_TEST_EQUALS(prototype.mOnActivated, false, TEST_LOCATION);
- DALI_TEST_EQUALS(prototype.GetOwnerControl(), Toolkit::Control(), TEST_LOCATION);
-
- // but the effect is set and activated.
- DALI_TEST_EQUALS(impl->mOnActivated, true, TEST_LOCATION);
- DALI_TEST_EQUALS(impl->GetOwnerControl(), control, TEST_LOCATION);
- }
+ DALI_TEST_EQUALS(impl.mOnActivated, true, TEST_LOCATION);
+ DALI_TEST_EQUALS(impl.GetOwnerControl(), control, TEST_LOCATION);
control.Unparent();
- {
- DALI_TEST_EQUALS(impl->mOnActivated, false, TEST_LOCATION);
- DALI_TEST_EQUALS(impl->GetOwnerControl(), control, TEST_LOCATION);
- }
+ DALI_TEST_EQUALS(impl.mOnActivated, false, TEST_LOCATION);
+ DALI_TEST_EQUALS(impl.GetOwnerControl(), control, TEST_LOCATION);
scene.Add(control);
- {
- DALI_TEST_EQUALS(impl->mOnActivated, true, TEST_LOCATION);
- DALI_TEST_EQUALS(impl->GetOwnerControl(), control, TEST_LOCATION);
- }
+ DALI_TEST_EQUALS(impl.mOnActivated, true, TEST_LOCATION);
+ DALI_TEST_EQUALS(impl.GetOwnerControl(), control, TEST_LOCATION);
// Control released.
+
control.Unparent();
control.Reset();
tet_printf("Test effect owner control is empty after control destructed.\n");
DALI_TEST_CHECK(testEffect);
- {
- DALI_TEST_EQUALS(impl->mOnActivated, false, TEST_LOCATION);
- DALI_TEST_EQUALS(impl->GetOwnerControl(), Toolkit::Control(), TEST_LOCATION);
- }
+ DALI_TEST_EQUALS(impl.mOnActivated, false, TEST_LOCATION);
+ DALI_TEST_EQUALS(impl.GetOwnerControl(), Toolkit::Control(), TEST_LOCATION);
control = Control::New();
control.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
tet_printf("Test effect set again.\n");
control.SetRenderEffect(testEffect);
- Toolkit::Internal::TestRenderEffectImplPtr impl2 =
- dynamic_cast<Toolkit::Internal::TestRenderEffectImpl*>(control.GetRenderEffect().GetObjectPtr());
- {
- DALI_TEST_EQUALS(impl == impl2, false, TEST_LOCATION);
-
- DALI_TEST_EQUALS(impl->mOnActivated, false, TEST_LOCATION);
- DALI_TEST_EQUALS(impl->GetOwnerControl(), Toolkit::Control(), TEST_LOCATION); // may be false?
-
- DALI_TEST_EQUALS(impl2->mOnActivated, true, TEST_LOCATION);
- DALI_TEST_EQUALS(impl2->GetOwnerControl(), control, TEST_LOCATION);
- }
+ DALI_TEST_EQUALS(impl.mOnActivated, true, TEST_LOCATION);
+ DALI_TEST_EQUALS(impl.GetOwnerControl(), control, TEST_LOCATION);
END_TEST;
}
DALI_TEST_CHECK(testEffect);
// Check that effect is not activate yet.
- Toolkit::Internal::TestRenderEffectImpl& prototype = Toolkit::Internal::GetImplementation(testEffect);
- DALI_TEST_EQUALS(prototype.mOnActivated, false, TEST_LOCATION);
- DALI_TEST_EQUALS(prototype.GetOwnerControl(), Toolkit::Control(), TEST_LOCATION);
+ Toolkit::Internal::TestRenderEffectImpl& impl = Toolkit::Internal::GetImplementation(testEffect);
+ DALI_TEST_EQUALS(impl.mOnActivated, false, TEST_LOCATION);
+ DALI_TEST_EQUALS(impl.GetOwnerControl(), Toolkit::Control(), TEST_LOCATION);
tet_printf("Test effect set, and activate due to control scene on.\n");
control1.SetRenderEffect(testEffect);
- Toolkit::Internal::TestRenderEffectImplPtr impl1 =
- dynamic_cast<Toolkit::Internal::TestRenderEffectImpl*>(control1.GetRenderEffect().GetObjectPtr());
-
- DALI_TEST_EQUALS(&prototype == impl1, false, TEST_LOCATION);
- DALI_TEST_EQUALS(prototype.mOnActivated, false, TEST_LOCATION);
- DALI_TEST_EQUALS(prototype.GetOwnerControl(), Toolkit::Control(), TEST_LOCATION);
-
- DALI_TEST_EQUALS(impl1->mOnActivated, true, TEST_LOCATION);
- DALI_TEST_EQUALS(impl1->GetOwnerControl(), control1, TEST_LOCATION);
+ DALI_TEST_EQUALS(impl.mOnActivated, true, TEST_LOCATION);
+ DALI_TEST_EQUALS(impl.GetOwnerControl(), control1, TEST_LOCATION);
tet_printf("Test effect set to another control\n");
control2.SetRenderEffect(testEffect);
- Toolkit::Internal::TestRenderEffectImplPtr impl2 =
- dynamic_cast<Toolkit::Internal::TestRenderEffectImpl*>(control2.GetRenderEffect().GetObjectPtr());
- DALI_TEST_EQUALS(impl1 == impl2, false, TEST_LOCATION);
-
- DALI_TEST_EQUALS(impl2->mOnActivated, true, TEST_LOCATION);
- DALI_TEST_EQUALS(impl2->GetOwnerControl(), control2, TEST_LOCATION);
+ DALI_TEST_EQUALS(impl.mOnActivated, true, TEST_LOCATION);
+ DALI_TEST_EQUALS(impl.GetOwnerControl(), control2, TEST_LOCATION);
tet_printf("Test control1 call ClearRenderEffect don't have any effort to control2's effect\n");
control1.ClearRenderEffect();
- DALI_TEST_EQUALS(impl1->mOnActivated, false, TEST_LOCATION);
- DALI_TEST_EQUALS(impl1->GetOwnerControl(), Toolkit::Control(), TEST_LOCATION);
-
- DALI_TEST_EQUALS(impl2->mOnActivated, true, TEST_LOCATION);
- DALI_TEST_EQUALS(impl2->GetOwnerControl(), control2, TEST_LOCATION);
+ DALI_TEST_EQUALS(impl.mOnActivated, true, TEST_LOCATION);
+ DALI_TEST_EQUALS(impl.GetOwnerControl(), control2, TEST_LOCATION);
tet_printf("Test control2 call ClearRenderEffect\n");
control2.ClearRenderEffect();
- DALI_TEST_EQUALS(impl2->mOnActivated, false, TEST_LOCATION);
- DALI_TEST_EQUALS(impl2->GetOwnerControl(), Toolkit::Control(), TEST_LOCATION);
+ DALI_TEST_EQUALS(impl.mOnActivated, false, TEST_LOCATION);
+ DALI_TEST_EQUALS(impl.GetOwnerControl(), Toolkit::Control(), TEST_LOCATION);
tet_printf("Reset control1 effect\n");
control1.SetRenderEffect(testEffect);
- Toolkit::Internal::TestRenderEffectImplPtr impl3 =
- dynamic_cast<Toolkit::Internal::TestRenderEffectImpl*>(control1.GetRenderEffect().GetObjectPtr());
-
- DALI_TEST_EQUALS(impl1 == impl3, false, TEST_LOCATION);
- DALI_TEST_EQUALS(impl1->mOnActivated, false, TEST_LOCATION);
- DALI_TEST_EQUALS(impl1->GetOwnerControl(), Toolkit::Control(), TEST_LOCATION);
-
- DALI_TEST_EQUALS(impl3->mOnActivated, true, TEST_LOCATION);
- DALI_TEST_EQUALS(impl3->GetOwnerControl(), control1, TEST_LOCATION);
+ DALI_TEST_EQUALS(impl.mOnActivated, true, TEST_LOCATION);
+ DALI_TEST_EQUALS(impl.GetOwnerControl(), control1, TEST_LOCATION);
tet_printf("Test control1 call SetRenderEffect with empty handle\n");
control1.SetRenderEffect(Toolkit::RenderEffect());
- DALI_TEST_CHECK(!control1.GetRenderEffect());
+
+ DALI_TEST_EQUALS(impl.mOnActivated, false, TEST_LOCATION);
+ DALI_TEST_EQUALS(impl.GetOwnerControl(), Toolkit::Control(), TEST_LOCATION);
END_TEST;
}
application.GetScene().Add(control);
- RenderEffect effect = RenderEffect::CreateBackgroundBlurEffect(0.25f, 50.0f);
+ RenderEffect effect = BackgroundBlurEffect::New(0.25f, 50.0f);
control.SetRenderEffect(effect);
control.SetProperty(DevelControl::Property::OFFSCREEN_RENDERING, DevelControl::OffScreenRenderingType::REFRESH_ALWAYS);
#include <dali-toolkit-test-suite-utils.h>
#include <dali-toolkit/devel-api/controls/control-devel.h>
#include <dali-toolkit/devel-api/visuals/visual-properties-devel.h>
-#include <dali-toolkit/public-api/controls/render-effects/render-effect.h>
+#include <dali-toolkit/public-api/controls/render-effects/background-blur-effect.h>
#include <dali/devel-api/adaptor-framework/image-loading.h>
using namespace Dali;
ToolkitTestApplication application;
tet_infoline("UtcDaliRenderEffectNewP");
- RenderEffect blurEffect = RenderEffect::CreateBackgroundBlurEffect();
+ RenderEffect blurEffect = BackgroundBlurEffect::New();
DALI_TEST_CHECK(blurEffect);
- RenderEffect blurEffect2 = RenderEffect::CreateBackgroundBlurEffect(0.5f, 10);
+ RenderEffect blurEffect2 = BackgroundBlurEffect::New(0.5f, 10);
DALI_TEST_CHECK(blurEffect2);
END_TEST;
tet_printf("Check some invalid parameters clamp internally\n");
- RenderEffect blurEffect = RenderEffect::CreateBackgroundBlurEffect(-0.5f, 10);
- RenderEffect blurEffect2 = RenderEffect::CreateBackgroundBlurEffect(10.0f, 10);
- RenderEffect blurEffect3 = RenderEffect::CreateBackgroundBlurEffect(0.5f, 0);
- RenderEffect blurEffect4 = RenderEffect::CreateBackgroundBlurEffect(0.5f, 2147483647);
+ RenderEffect blurEffect = BackgroundBlurEffect::New(-0.5f, 10);
+ RenderEffect blurEffect2 = BackgroundBlurEffect::New(10.0f, 10);
+ RenderEffect blurEffect3 = BackgroundBlurEffect::New(0.5f, 0);
+ RenderEffect blurEffect4 = BackgroundBlurEffect::New(0.5f, 2147483647);
DALI_TEST_CHECK(blurEffect);
DALI_TEST_CHECK(blurEffect2);
RenderTaskList taskList = scene.GetRenderTaskList();
DALI_TEST_EQUALS(1u, taskList.GetTaskCount(), TEST_LOCATION);
- childControl.SetRenderEffect(RenderEffect::CreateBackgroundBlurEffect());
+ childControl.SetRenderEffect(BackgroundBlurEffect::New());
taskList = scene.GetRenderTaskList();
DALI_TEST_EQUALS(4u, taskList.GetTaskCount(), TEST_LOCATION);
control.SetProperty(Actor::Property::SIZE, Vector2(1.0f, 1.0f));
scene.Add(control);
- RenderEffect blurEffect = RenderEffect::CreateBackgroundBlurEffect();
+ RenderEffect blurEffect = BackgroundBlurEffect::New();
control.SetRenderEffect(blurEffect);
RenderTaskList taskList = scene.GetRenderTaskList();
control2.SetProperty(Actor::Property::SIZE, Vector2(1.0f, 1.0f));
scene.Add(control2);
- control2.SetRenderEffect(blurEffect); // Clone effect
+ control2.SetRenderEffect(blurEffect);
taskList = scene.GetRenderTaskList();
- DALI_TEST_EQUALS(7u, taskList.GetTaskCount(), TEST_LOCATION);
+ DALI_TEST_EQUALS(4u, taskList.GetTaskCount(), TEST_LOCATION);
END_TEST;
}
scene.Add(control);
uint32_t count = control.GetRendererCount();
- control.SetRenderEffect(RenderEffect::CreateBackgroundBlurEffect());
+ control.SetRenderEffect(BackgroundBlurEffect::New());
RenderTaskList taskList = scene.GetRenderTaskList();
DALI_TEST_EQUALS(4u, taskList.GetTaskCount(), TEST_LOCATION);
control.SetProperty(Actor::Property::SIZE, Vector2(1.0f, 1.0f));
scene.Add(control);
- RenderEffect blurEffect = RenderEffect::CreateBackgroundBlurEffect();
+ RenderEffect blurEffect = BackgroundBlurEffect::New();
control.SetRenderEffect(blurEffect);
RenderTaskList taskList = scene.GetRenderTaskList();
control.SetProperty(Actor::Property::SIZE, Vector2(1.0f, 1.0f));
scene.Add(control);
- RenderEffect blurEffect = RenderEffect::CreateBackgroundBlurEffect();
- control.SetRenderEffect(blurEffect);
+ RenderEffect blurEffect = BackgroundBlurEffect::New();
control.SetRenderEffect(blurEffect); // Duplicate actions will be ignored
control.SetRenderEffect(blurEffect); // Duplicate actions will be ignored
control.SetRenderEffect(blurEffect); // Duplicate actions will be ignored
Control control = Control::New();
control.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
scene.Add(control);
- control.SetRenderEffect(RenderEffect::CreateBackgroundBlurEffect());
+ control.SetRenderEffect(BackgroundBlurEffect::New());
application.SendNotification();
application.Render();
blackDimmerMap.Insert(Toolkit::DevelVisual::Property::CORNER_RADIUS, 0.20f);
blackDimmerMap.Insert(Toolkit::DevelVisual::Property::CORNER_RADIUS_POLICY, Visual::Transform::Policy::Type::RELATIVE);
blackDimmerMap.Insert(Toolkit::DevelVisual::Property::CORNER_SQUARENESS, 0.3f);
- RenderEffect effect = RenderEffect::CreateBackgroundBlurEffect();
+ RenderEffect effect = BackgroundBlurEffect::New(0.4f, 40);
Control control = Control::New();
DALI_TEST_CHECK(control.GetRendererCount() == 0u);
control.SetProperty(Actor::Property::SIZE_WIDTH, maxTextureSize + 1000.0f);
control.SetProperty(Actor::Property::SIZE_HEIGHT, maxTextureSize + 1000.0f);
scene.Add(control);
- control.SetRenderEffect(RenderEffect::CreateBackgroundBlurEffect(0.4f, 40));
+ control.SetRenderEffect(BackgroundBlurEffect::New(0.4f, 40));
application.SendNotification();
application.Render();
uint32_t count = control.GetRendererCount();
// Add render effect during scene off.
- control.SetRenderEffect(RenderEffect::CreateBackgroundBlurEffect());
+ control.SetRenderEffect(BackgroundBlurEffect::New());
RenderTaskList taskList = scene.GetRenderTaskList();
scene.Add(control);
// Add render effect during scene on.
- control.SetRenderEffect(RenderEffect::CreateBackgroundBlurEffect());
+ control.SetRenderEffect(BackgroundBlurEffect::New());
RenderTaskList taskList = scene.GetRenderTaskList();
// Add render effect during invisible.
control.SetProperty(Actor::Property::VISIBLE, false);
- control.SetRenderEffect(RenderEffect::CreateBackgroundBlurEffect());
+ control.SetRenderEffect(BackgroundBlurEffect::New());
RenderTaskList taskList = scene.GetRenderTaskList();
scene.Add(control);
// Add render effect during scene on.
- control.SetRenderEffect(RenderEffect::CreateBackgroundBlurEffect());
+ control.SetRenderEffect(BackgroundBlurEffect::New());
RenderTaskList taskList = scene.GetRenderTaskList();
tet_printf("render task cnt : %d\n", taskList.GetTaskCount());
// Add render effect during scene on.
- control1.SetRenderEffect(RenderEffect::CreateBackgroundBlurEffect());
+ control1.SetRenderEffect(BackgroundBlurEffect::New());
tet_printf("render task cnt after set : %d\n", taskList.GetTaskCount());
DALI_TEST_EQUALS(1, taskList.GetTaskCount(), TEST_LOCATION);
tet_printf("render task cnt : %d\n", taskList.GetTaskCount());
// Add render effect during scene on.
- control2.SetRenderEffect(RenderEffect::CreateBackgroundBlurEffect());
+ control2.SetRenderEffect(BackgroundBlurEffect::New());
tet_printf("render task cnt after set : %d\n", taskList.GetTaskCount());
scene.Add(control);
// Add render effect during scene on.
- control.SetRenderEffect(RenderEffect::CreateBackgroundBlurEffect());
+ control.SetRenderEffect(BackgroundBlurEffect::New());
application.SendNotification();
tet_printf("order : %d\n", taskList.GetTask(taskList.GetTaskCount() - 1).GetOrderIndex());
DALI_TEST_EQUALS(INT32_MIN + 2, taskList.GetTask(taskList.GetTaskCount() - 1).GetOrderIndex(), TEST_LOCATION);
- control.SetRenderEffect(RenderEffect::CreateBackgroundBlurEffect());
+ control.SetRenderEffect(BackgroundBlurEffect::New());
application.SendNotification();
scene.Add(control);
// Add render effect during scene on.
- control.SetRenderEffect(RenderEffect::CreateBackgroundBlurEffect(0.5f, 20u, true));
+ control.SetRenderEffect(BackgroundBlurEffect::New(0.5f, 20u, true));
application.SendNotification();
#define DALI_TOOLKIT_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.
#include <dali-toolkit/public-api/styling/style-manager.h>
+#include <dali-toolkit/public-api/controls/render-effects/background-blur-effect.h>
#include <dali-toolkit/public-api/controls/render-effects/render-effect.h>
#include <dali-toolkit/public-api/text/text-enumerations.h>
return handle;
}
-RenderEffectImplPtr BlurEffectImpl::Clone() const
-{
- BlurEffectImplPtr blurEffectImpl = new BlurEffectImpl(mDownscaleFactor, mPixelRadius, mBlurOnce, mIsBackground);
- blurEffectImpl->Initialize();
- return RenderEffectImplPtr(blurEffectImpl);
-}
-
OffScreenRenderable::Type BlurEffectImpl::GetOffScreenRenderableType()
{
return mSkipBlur ? OffScreenRenderable::NONE : OffScreenRenderable::BACKWARD;
return;
}
- // Create CameraActors
- {
- mRenderDownsampledCamera = CameraActor::New();
- mRenderDownsampledCamera.SetInvertYAxis(true);
- mRenderDownsampledCamera.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
- mRenderDownsampledCamera.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER);
- mRenderDownsampledCamera.SetType(Dali::Camera::FREE_LOOK);
- mInternalRoot.Add(mRenderDownsampledCamera);
- }
-
// Calculate bell curve width
{
const float epsilon = 1e-2f / (mDownscaledPixelRadius * 2);
uint32_t downsampledHeight = std::max(static_cast<uint32_t>(size.height * mDownscaleFactor), 1u);
// Set size
+ if(!mRenderDownsampledCamera)
+ {
+ mRenderDownsampledCamera = CameraActor::New();
+ mRenderDownsampledCamera.SetInvertYAxis(true);
+ mRenderDownsampledCamera.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
+ mRenderDownsampledCamera.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER);
+ mRenderDownsampledCamera.SetType(Dali::Camera::FREE_LOOK);
+ mInternalRoot.Add(mRenderDownsampledCamera);
+ }
mRenderDownsampledCamera.SetPerspectiveProjection(Size(downsampledWidth, downsampledHeight));
mHorizontalBlurActor.SetProperty(Actor::Property::SIZE, Vector2(downsampledWidth, downsampledHeight));
// INTERNAL INCLUDES
#include <dali-toolkit/internal/controls/render-effects/render-effect-impl.h>
+#include <dali-toolkit/public-api/controls/render-effects/background-blur-effect.h>
namespace Dali
{
*/
static BlurEffectImplPtr New(float downscaleFactor, uint32_t blurRadius, bool blurOnce, bool isBackground);
- /**
- * @copydoc Toolkit::Intenral::RenderEffectImpl::Clone
- */
- RenderEffectImplPtr Clone() const override;
-
/**
* @copydoc Toolkit::Internal::RenderEffectImpl::GetOffScreenRenderableType
*/
bool mIsBackground : 1;
};
} // namespace Internal
+
+inline Toolkit::Internal::BlurEffectImpl& GetImplementation(Toolkit::BackgroundBlurEffect& obj)
+{
+ BaseObject& handle = obj.GetBaseObject();
+ return static_cast<Toolkit::Internal::BlurEffectImpl&>(handle);
+}
+
+inline const Toolkit::Internal::BlurEffectImpl& GetImplementation(const Toolkit::BackgroundBlurEffect& obj)
+{
+ const BaseObject& handle = obj.GetBaseObject();
+ return static_cast<const Toolkit::Internal::BlurEffectImpl&>(handle);
+}
+
} // namespace Toolkit
} // namespace Dali
}
}
-RenderEffectImplPtr OffScreenRenderingImpl::Clone() const
-{
- DALI_LOG_ERROR("Cloning offscreen rendering is not allowed.\n");
- return RenderEffectImplPtr();
-}
-
OffScreenRenderable::Type OffScreenRenderingImpl::GetOffScreenRenderableType()
{
return OffScreenRenderable::Type::FORWARD;
*/
void SetType(DevelControl::OffScreenRenderingType type);
- // @copydoc Dali::Toolkit::Internal::RenderEffectImpl::Clone
- RenderEffectImplPtr Clone() const override;
// @copydoc Dali::Toolkit::Internal::RenderEffectImpl::GetOffScreenRenderableType
OffScreenRenderable::Type GetOffScreenRenderableType() override;
// @copydoc Dali::Toolkit::Internal::RenderEffectImpl::GetOffScreenRenderTasks
void RenderEffectImpl::Initialize()
{
- if(!mCamera)
- {
- mCamera = CameraActor::New();
- mCamera.SetInvertYAxis(true);
- mCamera.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
- mCamera.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER);
- mCamera.SetType(Dali::Camera::FREE_LOOK);
- }
-
if(!mRenderer)
{
mRenderer = CreateRenderer(SHADER_RENDER_EFFECT_VERT, SHADER_RENDER_EFFECT_FRAG);
}
mPlacementSceneHolder = sceneHolder;
- Vector2 size = GetTargetSize();
- mCamera.SetPerspectiveProjection(size);
+ if(!mCamera)
+ {
+ mCamera = CameraActor::New();
+ mCamera.SetInvertYAxis(true);
+ mCamera.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
+ mCamera.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER);
+ mCamera.SetType(Dali::Camera::FREE_LOOK);
+ }
+ mCamera.SetPerspectiveProjection(GetTargetSize());
ownerControl.Add(mCamera);
// Activate logic for subclass.
// Deactivate logic for subclass.
OnDeactivate();
- mCamera.Unparent();
+ if(mCamera)
+ {
+ mCamera.Unparent();
+ }
}
}
*/
void SetCornerConstants(Property::Map map);
- /**
- * @brief Clones current instance.
- * @return Clone implementation
- */
- virtual RenderEffectImplPtr Clone() const = 0;
-
/**
* @brief Retrieves OffScreenRenderableType of this RenderEffect.
*
void Control::SetRenderEffect(Toolkit::RenderEffect effect)
{
+ ClearRenderEffect();
+
if(effect)
{
Internal::RenderEffectImpl* object = dynamic_cast<Internal::RenderEffectImpl*>(effect.GetObjectPtr());
- DALI_ASSERT_ALWAYS(object && "Not a valid RenderEffect set.");
-
- ClearRenderEffect();
-
- RenderEffectImplPtr clone = object->Clone();
+ DALI_ASSERT_ALWAYS(object && "Given render effect is not valid.");
- SetOffScreenRenderableType(clone->GetOffScreenRenderableType());
+ SetOffScreenRenderableType(object->GetOffScreenRenderableType());
Dali::Toolkit::Control ownerControl(GetOwner());
- clone->SetOwnerControl(ownerControl);
+ object->SetOwnerControl(ownerControl);
- mImpl->mRenderEffect = clone;
+ mImpl->mRenderEffect = object;
}
else
{
--- /dev/null
+
+/*
+ * 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.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+// CLASS HEADER
+#include <dali-toolkit/public-api/controls/render-effects/background-blur-effect.h>
+// INTERNAL INCLUDES
+#include <dali-toolkit/internal/controls/render-effects/blur-effect-impl.h>
+namespace Dali
+{
+namespace Toolkit
+{
+BackgroundBlurEffect::BackgroundBlurEffect() = default;
+BackgroundBlurEffect::BackgroundBlurEffect(const BackgroundBlurEffect& handle)
+: RenderEffect(handle)
+{
+}
+BackgroundBlurEffect::BackgroundBlurEffect(Internal::BlurEffectImpl* blurEffectImpl)
+: RenderEffect(blurEffectImpl)
+{
+}
+BackgroundBlurEffect::~BackgroundBlurEffect() = default;
+BackgroundBlurEffect BackgroundBlurEffect::New()
+{
+ Internal::BlurEffectImplPtr internal = Internal::BlurEffectImpl::New(true);
+ return BackgroundBlurEffect(internal.Get());
+}
+BackgroundBlurEffect BackgroundBlurEffect::New(float downscaleFactor, uint32_t blurRadius, bool blurOnce)
+{
+ Internal::BlurEffectImplPtr internal = Internal::BlurEffectImpl::New(downscaleFactor, blurRadius, blurOnce, true);
+ return BackgroundBlurEffect(internal.Get());
+}
+} // namespace Toolkit
+} // namespace Dali
--- /dev/null
+#ifndef DALI_TOOLKIT_BACKGROUND_BLUR_EFFECT_H
+#define DALI_TOOLKIT_BACKGROUND_BLUR_EFFECT_H
+/*
+ * 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.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+// INTERNAL INCLUDES
+#include <dali-toolkit/public-api/controls/render-effects/render-effect.h>
+namespace Dali
+{
+namespace Toolkit
+{
+namespace Internal DALI_INTERNAL
+{
+class BlurEffectImpl;
+} // namespace DALI_INTERNAL
+/**
+ * @brief BackgroundBlurEffect is a visual effect that blurs owner control's background.
+ * This class is a concrete class from RenderEffect interface.
+ * Add this effect to a control, clear manually to deactivate.
+ *
+ * Toolkit::Control control = Toolkit::Control::New();
+ * parent.Add(control);
+ * control.SetRenderEffect(BackgroundBlurEffect::New()); // Activate
+ * ...
+ * control.ClearRenderEffect(); // Deactivate
+ *
+ * Note that tree hierarchy matters for BackgroundBlurEffect. You should determine "what is the background".
+ * Add() should preceed SetRenderEffect(), and the effect cannot have multiple owner controls.
+ *
+ * @SINCE_2_3.28
+ */
+class DALI_TOOLKIT_API BackgroundBlurEffect : public RenderEffect
+{
+public:
+ /**
+ * @brief Creates an initialized BackgroundBlurEffect, using default settings. The default settings are:
+ *
+ * downscaleFactor = 0.4f
+ * pixelRadius = 5u
+ *
+ * @SINCE_2_3.28
+ * @return A handle to a newly allocated Dali resource
+ */
+ static BackgroundBlurEffect New();
+ /**
+ * @brief Creates an initialized BackgroundBlurEffect.
+ * @param[in] downscaleFactor This value should reside in the range [0.0, 1.0].
+ * @param[in] blurRadius The radius of Gaussian kernel.
+ * @param[in] blurOnce Whether to blur once or always. Default is false(always).
+ * @SINCE_2_3.28
+ * @return A handle to a newly allocated Dali resource
+ */
+ static BackgroundBlurEffect New(float downscaleFactor, uint32_t blurRadius, bool blurOnce = false);
+ /**
+ * @brief Creates an uninitialized blur effect.
+ * @SINCE_2_3.28
+ */
+ BackgroundBlurEffect();
+ /**
+ * @brief Copy constructor.
+ * @SINCE_2_3.28
+ */
+ BackgroundBlurEffect(const BackgroundBlurEffect& handle);
+ /**
+ * @brief Destructor
+ * @SINCE_2_3.28
+ */
+ ~BackgroundBlurEffect();
+
+public: // Not intended for use by Application developers
+ ///@cond internal
+ /**
+ * @brief Creates a handle using the Toolkit::Internal implementation.
+ * @SINCE_2_3.28
+ * @param[in] blurEffectImpl The UI Control implementation.
+ */
+ explicit DALI_INTERNAL BackgroundBlurEffect(Internal::BlurEffectImpl* blurEffectImpl);
+ ///@endcond
+};
+} // namespace Toolkit
+} // namespace Dali
+#endif //DALI_TOOLKIT_BACKGROUND_BLUR_EFFECT_H
#include <dali-toolkit/public-api/controls/render-effects/render-effect.h>
// INTERNAL INCLUDES
-#include <dali-toolkit/internal/controls/render-effects/blur-effect-impl.h>
#include <dali-toolkit/internal/controls/render-effects/render-effect-impl.h>
namespace Dali
{
}
-RenderEffect RenderEffect::CreateBackgroundBlurEffect()
-{
- Internal::BlurEffectImplPtr internal = Internal::BlurEffectImpl::New(true);
- return RenderEffect(internal.Get());
-}
-
-RenderEffect RenderEffect::CreateBackgroundBlurEffect(float downscaleFactor, uint32_t blurRadius, bool blurOnce)
-{
- Internal::BlurEffectImplPtr internal = Internal::BlurEffectImpl::New(downscaleFactor, blurRadius, blurOnce, true);
- return RenderEffect(internal.Get());
-}
} // namespace Toolkit
} // namespace Dali
*/
RenderEffect(const RenderEffect& handle);
- /**
- * @brief Creates background blur effect with default parameters.
- * @SINCE_2_4.1
- */
- static RenderEffect CreateBackgroundBlurEffect();
-
- /**
- * @brief Creates background blur effect.
- * @param[in] downscaleFactor Input texture downscaler for better performance.
- * @param[in] blurRadius Gaussian kernel size.
- * @param[in] blurOnce Whether to perform blur once or always. Default is false(always).
- * @SINCE_2_4.1
- */
- static RenderEffect CreateBackgroundBlurEffect(float downscaleFactor, uint32_t blurRadius, bool blurOnce = false);
-
public: // Not intended for Application developers
///@cond internal
/**
${public_api_src_dir}/controls/model3d-view/model3d-view.cpp
${public_api_src_dir}/controls/progress-bar/progress-bar.cpp
${public_api_src_dir}/controls/render-effects/render-effect.cpp
+ ${public_api_src_dir}/controls/render-effects/background-blur-effect.cpp
${public_api_src_dir}/controls/scrollable/item-view/default-item-layout.cpp
${public_api_src_dir}/controls/scrollable/item-view/item-layout.cpp
${public_api_src_dir}/controls/scrollable/item-view/item-view.cpp
SET( public_api_render_effects_header_files
${public_api_src_dir}/controls/render-effects/render-effect.h
+ ${public_api_src_dir}/controls/render-effects/background-blur-effect.h
)
SET( public_api_scrollable_header_files