-#ifndef __DALI_TOOLKIT_INTERNAL_EFFECTS_VIEW_H__
-#define __DALI_TOOLKIT_INTERNAL_EFFECTS_VIEW_H__
+#ifndef DALI_TOOLKIT_INTERNAL_EFFECTS_VIEW_H
+#define DALI_TOOLKIT_INTERNAL_EFFECTS_VIEW_H
/*
- * Copyright (c) 2014 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2021 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.
// EXTERNAL INCLUDES
#include <dali/public-api/actors/camera-actor.h>
-#include <dali/public-api/actors/image-actor.h>
#include <dali/public-api/common/dali-vector.h>
#include <dali/public-api/render-tasks/render-task.h>
-#include <dali/public-api/shader-effects/shader-effect.h>
+#include <dali/public-api/rendering/frame-buffer.h>
+#include <dali/public-api/rendering/renderer.h>
// INTERNAL INCLUDES
-#include <dali-toolkit/public-api/controls/control-impl.h>
#include <dali-toolkit/devel-api/controls/effects-view/effects-view.h>
-#include <dali-toolkit/public-api/controls/gaussian-blur-view/gaussian-blur-view.h>
+#include <dali-toolkit/public-api/controls/control-impl.h>
namespace Dali
{
-
namespace Toolkit
{
-
namespace Internal
{
-
class GaussianBlurView;
class ImageFilter;
EffectsView();
/**
- * Constructor.
- * @copydoc Toolkit::EffectsView New(const unsigned int,const float,const Pixel::Format,const float,const float)
- */
- EffectsView(const unsigned int numSamples, const float blurBellCurveWidth, const int spread,
- const Pixel::Format pixelFormat,
- const float downsampleWidthScale, const float downsampleHeightScale,
- FrameBufferImage image);
-
- /**
* A reference counted object may only be deleted by calling Unreference()
*/
virtual ~EffectsView();
public:
-
/// @copydoc Dali::Toolkit::EffectsView::SetType
- void SetType( Toolkit::EffectsView::EffectType type );
+ void SetType(Toolkit::EffectsView::EffectType type);
/// @copydoc Dali::Toolkit::EffectsView::GetType
Toolkit::EffectsView::EffectType GetType() const;
- /// @copydoc Dali::Toolkit::EffectsView::Enable
- void Enable();
-
- /// @copydoc Dali::Toolkit::EffectsView::Disable
- void Disable();
-
/// @copydoc Dali::Toolkit::EffectsView::Refresh
void Refresh();
/// @copydoc Dali::Toolkit::EffectsView::SetRefreshOnDemand
- void SetRefreshOnDemand( bool onDemand );
+ void SetRefreshOnDemand(bool onDemand);
/// @copydoc Dali::Toolkit::EffectsView::SetPixelFormat
- void SetPixelFormat( Pixel::Format pixelFormat );
+ void SetPixelFormat(Pixel::Format pixelFormat);
- /// @copydoc Dali::Toolkit::EffectsView::SetOutputImage
- void SetOutputImage( FrameBufferImage image );
+ /// @copydoc Dali::Toolkit::EffectsView::SetBackgroundColor(const Vector4&)
+ void SetBackgroundColor(const Vector4& color);
- /// @copydoc Dali::Toolkit::EffectsView::GetOutputImage
- FrameBufferImage GetOutputImage();
+ /// @copydoc Dali::Toolkit::GaussianBlurView::GetBackgroundColor
+ Vector4 GetBackgroundColor() const;
- /// @copydoc Dali::Toolkit::EffectsView::GetEffectSizePropertyIndex
- Property::Index GetEffectSizePropertyIndex() const;
+ /**
+ * Set the effect size which decides the size of filter kernel.
+ * @param[in] effectSize The effect size.
+ */
+ void SetEffectSize(int effectSize);
- /// @copydoc Dali::Toolkit::EffectsView::GetEffectStrengthPropertyIndex
- Property::Index GetEffectStrengthPropertyIndex() const;
+ /**
+ * Get the effect size.
+ * @return The effect size.
+ */
+ int GetEffectSize();
- /// @copydoc Dali::Toolkit::EffectsView::GetEffectOffsetPropertyIndex
- Property::Index GetEffectOffsetPropertyIndex() const;
+ // Properties
+ /**
+ * Called when a property of an object of this type is set.
+ * @param[in] object The object whose property is set.
+ * @param[in] index The property index.
+ * @param[in] value The new property value.
+ */
+ static void SetProperty(BaseObject* object, Property::Index index, const Property::Value& value);
- /// @copydoc Dali::Toolkit::EffectsView::GetEffectColorPropertyIndex
- Property::Index GetEffectColorPropertyIndex() const;
+ /**
+ * Called to retrieve a property of an object of this type.
+ * @param[in] object The object whose property is to be retrieved.
+ * @param[in] index The property index.
+ * @return The current value of the property.
+ */
+ static Property::Value GetProperty(BaseObject* object, Property::Index propertyIndex);
- /// @copydoc Dali::Toolkit::EffectsView::SetBackgroundColor(const Vector4&)
- void SetBackgroundColor( const Vector4& color );
+private: // From Control
+ /**
+ * @copydoc Toolkit::Internal::Control::OnInitialize()
+ */
+ void OnInitialize() override;
- /// @copydoc Dali::Toolkit::GaussianBlurView::GetBackgroundColor
- Vector4 GetBackgroundColor() const;
+ /**
+ * @copydoc CustomActorImpl::OnSizeSet( const Vector3& targetSize )
+ */
+ void OnSizeSet(const Vector3& targetSize) override;
-private:
/**
- * Register and setup indices for EffectsView properties
+ * @copydoc Toolkit::Internal::Control::OnSceneConnection
*/
- void SetupProperties();
+ void OnSceneConnection(int depth) override;
-private: // From Control
+ /**
+ * @copydoc Toolkit::Internal::Control::OnSceneDisconnection
+ */
+ void OnSceneDisconnection() override;
/**
- * @copydoc Toolkit::Control::OnInitialize()
+ * @copydoc Toolkit::Internal::Control::OnChildAdd
*/
- virtual void OnInitialize();
+ void OnChildAdd(Actor& child) override;
/**
- * @copydoc CustomActorImpl::OnSizeSet( const Vector3& targetSize )
+ * @copydoc Toolkit::Internal::Control::OnChildRemove
*/
- virtual void OnSizeSet( const Vector3& targetSize );
+ void OnChildRemove(Actor& child) override;
private:
+ /**
+ * Enable the effect when the control is set on stage
+ */
+ void Enable();
/**
- * Callback received when the control is disconnected from the stage.
+ * Disable the effect when the control is set off stage
*/
- void OnStageDisconnection();
+ void Disable();
/**
* Setup image filters
void RemoveFilters();
private:
-
// Undefined
- EffectsView( const EffectsView& );
+ EffectsView(const EffectsView&);
// Undefined
- EffectsView& operator = ( const EffectsView& );
+ EffectsView& operator=(const EffectsView&);
private: // attributes/properties
- Toolkit::EffectsView::EffectType mEffectType;
-
/////////////////////////////////////////////////////////////
// for rendering all user added children to offscreen target
- FrameBufferImage mImageForChildren;
- ImageActor mActorForChildren;
- RenderTask mRenderTaskForChildren;
+ FrameBuffer mFrameBufferForChildren;
+ Renderer mRendererForChildren;
+ RenderTask mRenderTaskForChildren;
CameraActor mCameraForChildren;
-
- /////////////////////////////////////////////////////////////
- Pixel::Format mPixelFormat; ///< pixel format used by render targets
-
- /////////////////////////////////////////////////////////////
- // downsampling is used for the separated blur passes to get increased blur with the same number of samples and also to make rendering quicker
- float mSpread;
+ Actor mChildrenRoot; // for creating a subtree for all user added child actors
/////////////////////////////////////////////////////////////
// background fill color
// for checking if we need to reallocate render targets
Vector2 mTargetSize;
Vector2 mLastSize;
-
- bool mRefreshOnDemand;
-
- /////////////////////////////////////////////////////////////
- // horizontal spread objects
- FrameBufferImage mImageForHorzSpread;
- ImageActor mActorForHorzSpread;
- RenderTask mRenderTaskForHorzSpread;
-
/////////////////////////////////////////////////////////////
- // vertical spread objects
- FrameBufferImage mImageForVertSpread;
- ImageActor mActorForVertSpread;
- RenderTask mRenderTaskForVertSpread;
+ // post blur image
+ FrameBuffer mFrameBufferPostFilter;
+ Renderer mRendererPostFilter;
- CameraActor mCameraForSpread;
+ Vector<ImageFilter*> mFilters;
/////////////////////////////////////////////////////////////
- // post blur image
- FrameBufferImage mImagePostFilter;
- ImageActor mActorPostFilter;
+ // downsampling is used for the separated blur passes to get increased blur with the same number of samples and also to make rendering quicker
+ int mEffectSize;
/////////////////////////////////////////////////////////////
- // final image
- FrameBufferImage mImageForResult;
- Actor mActorForResult;
- RenderTask mRenderTaskForResult;
-
- Property::Index mEffectSizePropertyIndex;
- Property::Index mEffectStrengthPropertyIndex;
- Property::Index mEffectOffsetPropertyIndex;
- Property::Index mEffectColorPropertyIndex;
+ Toolkit::EffectsView::EffectType mEffectType;
+ Pixel::Format mPixelFormat; ///< pixel format used by render targets
- std::vector<ImageFilter*> mFilters;
+ bool mEnabled : 1;
+ bool mRefreshOnDemand : 1;
}; // class EffectsView
} // namespace Internal
-
// Helpers for public-api forwarding methods
-inline Toolkit::Internal::EffectsView& GetImpl( Toolkit::EffectsView& effectsView )
+inline Toolkit::Internal::EffectsView& GetImpl(Toolkit::EffectsView& effectsView)
{
- DALI_ASSERT_ALWAYS( effectsView );
+ DALI_ASSERT_ALWAYS(effectsView);
Dali::RefObject& handle = effectsView.GetImplementation();
- return static_cast<Toolkit::Internal::EffectsView&>( handle );
+ return static_cast<Toolkit::Internal::EffectsView&>(handle);
}
-inline const Toolkit::Internal::EffectsView& GetImpl( const Toolkit::EffectsView& effectsView )
+inline const Toolkit::Internal::EffectsView& GetImpl(const Toolkit::EffectsView& effectsView)
{
- DALI_ASSERT_ALWAYS( effectsView );
+ DALI_ASSERT_ALWAYS(effectsView);
const Dali::RefObject& handle = effectsView.GetImplementation();
- return static_cast<const Toolkit::Internal::EffectsView&>( handle );
+ return static_cast<const Toolkit::Internal::EffectsView&>(handle);
}
} // namespace Toolkit
} // namespace Dali
-#endif // __DALI_TOOLKIT_INTERNAL_EFFECTS_VIEW_H__
-
+#endif // DALI_TOOLKIT_INTERNAL_EFFECTS_VIEW_H