X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=blobdiff_plain;f=dali-toolkit%2Finternal%2Fvisuals%2Fvisual-factory-impl.h;h=4a4ab4c978ae32edbdc536daa05604b86c1ae968;hp=257b03cdf633bfcad18fce2469c394772745c021;hb=HEAD;hpb=64d0a7e7289061aca3d578e91c4df288b73ae86f diff --git a/dali-toolkit/internal/visuals/visual-factory-impl.h b/dali-toolkit/internal/visuals/visual-factory-impl.h index 257b03c..76bacf9 100644 --- a/dali-toolkit/internal/visuals/visual-factory-impl.h +++ b/dali-toolkit/internal/visuals/visual-factory-impl.h @@ -2,7 +2,7 @@ #define DALI_TOOLKIT_VISUAL_FACTORY_IMPL_H /* - * Copyright (c) 2017 Samsung Electronics Co., Ltd. + * Copyright (c) 2023 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. @@ -18,24 +18,25 @@ */ // EXTERNAL INCLUDES +#include #include +#include // INTERNAL INCLUDES -#include #include +#include #include +#include namespace Dali { - namespace Toolkit { - namespace Internal { - class VisualFactoryCache; -typedef IntrusivePtr VisualFactoryCachePtr; +class ImageVisualShaderFactory; +class TextVisualShaderFactory; /** * @copydoc Toolkit::VisualFactory @@ -43,28 +44,57 @@ typedef IntrusivePtr VisualFactoryCachePtr; class VisualFactory : public BaseObject { public: - /** * @brief Constructor * * @param[in] debugEnabled If true, use debug renderer to replace all the concrete renderer. */ - VisualFactory( bool debugEnabled ); + VisualFactory(bool debugEnabled); /** - * @copydoc Toolkit::RenderFactory::CreateVisual( const Property::Map& ) + * @brief StyleChanged callback + * + * @param[in] styleManager Handle for style manager. + * @param[in] type Style change type. + */ + void OnStyleChangedSignal(Toolkit::StyleManager styleManager, StyleChange::Type type); + + /** + * @brief BrokenImageChanged callback + * + * @param[in] styleManager Handle for style manager. */ - Toolkit::Visual::Base CreateVisual( const Property::Map& propertyMap ); + void OnBrokenImageChangedSignal(Toolkit::StyleManager styleManager); /** - * @copydoc Toolkit::RenderFactory::CreateVisual( const Image& ) + * @copydoc Toolkit::VisualFactory::CreateVisual( const Property::Map& ) */ - Toolkit::Visual::Base CreateVisual( const Image& image ); + Toolkit::Visual::Base CreateVisual(const Property::Map& propertyMap); /** - * @copydoc Toolkit::RenderFactory::CreateVisual( const std::string&, ImageDimensions ) + * @copydoc Toolkit::VisualFactory::CreateVisual( const std::string&, ImageDimensions ) */ - Toolkit::Visual::Base CreateVisual( const std::string& image, ImageDimensions size ); + Toolkit::Visual::Base CreateVisual(const std::string& image, ImageDimensions size); + + /** + * @copydoc Toolkit::VisualFactory::SetPreMultiplyOnLoad() + */ + void SetPreMultiplyOnLoad(bool preMultiply); + + /** + * @copydoc Toolkit::VisualFactory::GetPreMultiplyOnLoad() + */ + bool GetPreMultiplyOnLoad() const; + + /** + * @copydoc Toolkit::VisualFactory::DiscardVisual() + */ + void DiscardVisual(Toolkit::Visual::Base visual); + + /** + * @copydoc Toolkit::VisualFactory::UsePreCompiledShader() + */ + void UsePreCompiledShader(); /** * @return the reference to texture manager @@ -72,28 +102,64 @@ public: Internal::TextureManager& GetTextureManager(); protected: - /** * A reference counted object may only be deleted by calling Unreference() */ - virtual ~VisualFactory(); + ~VisualFactory() override; private: + /** + * @brief Set the Broken Image url + * @param[in] styleManager The instance of StyleManager + */ + void SetBrokenImageUrl(Toolkit::StyleManager& styleManager); /** - * Undefined copy constructor. + * @brief Get the default shader source. + * @param[in] shaders shaderList for precompile */ - VisualFactory(const VisualFactory&); + void GetPreCompiledShader(RawShaderData& shaders); /** - * Undefined assignment operator. + * Get the factory cache, creating it if necessary. */ - VisualFactory& operator=(const VisualFactory& rhs); + Internal::VisualFactoryCache& GetFactoryCache(); -private: + /** + * Get the image visual shader factory, creating it if necessary. + */ + ImageVisualShaderFactory& GetImageVisualShaderFactory(); + + /** + * Get the text visual shader factory, creating it if necessary. + */ + TextVisualShaderFactory& GetTextVisualShaderFactory(); + + /** + * @brief Callbacks called for clear discarded visuals. + */ + void OnDiscardCallback(); + + /** + * @brief Register idle callback for discard visuals if need. + */ + void RegisterDiscardCallback(); + + VisualFactory(const VisualFactory&) = delete; - VisualFactoryCachePtr mFactoryCache; - bool mDebugEnabled; + VisualFactory& operator=(const VisualFactory& rhs) = delete; + +private: + std::unique_ptr mFactoryCache; + std::unique_ptr mImageVisualShaderFactory; + std::unique_ptr mTextVisualShaderFactory; + SlotDelegate mSlotDelegate; + CallbackBase* mIdleCallback; + using DiscardedVisualContainer = std::vector; + DiscardedVisualContainer mDiscardedVisuals{}; + bool mDebugEnabled : 1; + bool mPreMultiplyOnLoad : 1; ///< Local store for this flag + bool mPrecompiledShaderRequested : 1; }; /** @@ -107,17 +173,17 @@ private: * @param[in] param0 First template based argument passed to the visual factory * @param[in] param1 Second template based argument passed to the visual factory */ -template< class ParameterType0, class ParameterType1 > -void InitializeVisual( Actor& actor, Toolkit::Visual::Base& visual, ParameterType0& param0, ParameterType1& param1 ) +template +void InitializeVisual(Actor& actor, Toolkit::Visual::Base& visual, ParameterType0& param0, ParameterType1& param1) { - if( actor ) + if(actor) { - Toolkit::GetImplementation(visual).SetOffStage( actor ); + Toolkit::GetImplementation(visual).SetOffScene(actor); } - visual = Toolkit::VisualFactory::Get().CreateVisual( param0, param1 ); - if( visual && actor && actor.OnStage() ) + visual = Toolkit::VisualFactory::Get().CreateVisual(param0, param1); + if(visual && actor && actor.GetProperty(Actor::Property::CONNECTED_TO_SCENE)) { - Toolkit::GetImplementation(visual).SetOnStage(actor); + Toolkit::GetImplementation(visual).SetOnScene(actor); } } @@ -130,17 +196,17 @@ void InitializeVisual( Actor& actor, Toolkit::Visual::Base& visual, ParameterTyp * @param[in,out] visual The visual to be replaced * @param[in] param Template based argument passed to the visual factory */ -template< class ParameterType > -void InitializeVisual( Actor& actor, Toolkit::Visual::Base& visual, ParameterType& param ) +template +void InitializeVisual(Actor& actor, Toolkit::Visual::Base& visual, ParameterType& param) { - if( actor && visual ) + if(actor && visual) { - Toolkit::GetImplementation(visual).SetOffStage( actor ); + Toolkit::GetImplementation(visual).SetOffScene(actor); } - visual = Toolkit::VisualFactory::Get().CreateVisual( param ); - if( visual && actor && actor.OnStage() ) + visual = Toolkit::VisualFactory::Get().CreateVisual(param); + if(visual && actor && actor.GetProperty(Actor::Property::CONNECTED_TO_SCENE)) { - Toolkit::GetImplementation(visual).SetOnStage(actor); + Toolkit::GetImplementation(visual).SetOnScene(actor); } } @@ -148,7 +214,7 @@ void InitializeVisual( Actor& actor, Toolkit::Visual::Base& visual, ParameterTyp inline const Internal::VisualFactory& GetImplementation(const Toolkit::VisualFactory& factory) { - DALI_ASSERT_ALWAYS( factory && "VisualFactory handle is empty" ); + DALI_ASSERT_ALWAYS(factory && "VisualFactory handle is empty"); const BaseObject& handle = factory.GetBaseObject(); @@ -157,7 +223,7 @@ inline const Internal::VisualFactory& GetImplementation(const Toolkit::VisualFac inline Internal::VisualFactory& GetImplementation(Toolkit::VisualFactory& factory) { - DALI_ASSERT_ALWAYS( factory && "VisualFactory handle is empty" ); + DALI_ASSERT_ALWAYS(factory && "VisualFactory handle is empty"); BaseObject& handle = factory.GetBaseObject();