X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali-toolkit%2Finternal%2Fvisuals%2Fvisual-factory-impl.cpp;h=7cc51198fb1a378b01b75f207541150c4b48b6df;hb=2924ca60a4f301c4b0a5559daa6aac9652e4c10e;hp=ce19a6b26a4a7eb149ce7c8be13102241cbcee47;hpb=24513084007fb981ed006ad2e8f8649d7b54e176;p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git diff --git a/dali-toolkit/internal/visuals/visual-factory-impl.cpp b/dali-toolkit/internal/visuals/visual-factory-impl.cpp index ce19a6b..7cc5119 100644 --- a/dali-toolkit/internal/visuals/visual-factory-impl.cpp +++ b/dali-toolkit/internal/visuals/visual-factory-impl.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2022 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. @@ -19,6 +19,7 @@ // EXTERNAL INCLUDES #include +#include #include #include #include @@ -26,6 +27,7 @@ // INTERNAL INCLUDES #include +#include #include #include #include @@ -40,6 +42,7 @@ #include #include #include +#include #include #include #include @@ -77,7 +80,9 @@ const char* const BROKEN_IMAGE_FILE_NAME = "broken.png"; ///< The file name of t VisualFactory::VisualFactory(bool debugEnabled) : mFactoryCache(), mImageVisualShaderFactory(), + mTextVisualShaderFactory(), mSlotDelegate(this), + mIdleCallback(nullptr), mDebugEnabled(debugEnabled), mPreMultiplyOnLoad(true) { @@ -85,6 +90,12 @@ VisualFactory::VisualFactory(bool debugEnabled) VisualFactory::~VisualFactory() { + if(mIdleCallback && Adaptor::IsAvailable()) + { + // Removes the callback from the callback manager in case the control is destroyed before the callback is executed. + Adaptor::Get().RemoveIdle(mIdleCallback); + mIdleCallback = nullptr; + } } void VisualFactory::OnStyleChangedSignal(Toolkit::StyleManager styleManager, StyleChange::Type type) @@ -207,7 +218,7 @@ Toolkit::Visual::Base VisualFactory::CreateVisual(const Property::Map& propertyM case Toolkit::Visual::TEXT: { - visualPtr = TextVisual::New(GetFactoryCache(), propertyMap); + visualPtr = TextVisual::New(GetFactoryCache(), GetTextVisualShaderFactory(), propertyMap); break; } @@ -330,18 +341,18 @@ Toolkit::Visual::Base VisualFactory::CreateVisual(const std::string& url, ImageD case VisualUrl::TVG: case VisualUrl::SVG: { - visualPtr = SvgVisual::New(GetFactoryCache(), GetImageVisualShaderFactory(), visualUrl); + visualPtr = SvgVisual::New(GetFactoryCache(), GetImageVisualShaderFactory(), visualUrl, size); break; } case VisualUrl::GIF: case VisualUrl::WEBP: { - visualPtr = AnimatedImageVisual::New(GetFactoryCache(), GetImageVisualShaderFactory(), visualUrl); + visualPtr = AnimatedImageVisual::New(GetFactoryCache(), GetImageVisualShaderFactory(), visualUrl, size); break; } case VisualUrl::JSON: { - visualPtr = AnimatedVectorImageVisual::New(GetFactoryCache(), GetImageVisualShaderFactory(), visualUrl); + visualPtr = AnimatedVectorImageVisual::New(GetFactoryCache(), GetImageVisualShaderFactory(), visualUrl, size); break; } case VisualUrl::REGULAR_IMAGE: @@ -375,6 +386,13 @@ bool VisualFactory::GetPreMultiplyOnLoad() const return mPreMultiplyOnLoad; } +void VisualFactory::DiscardVisual(Toolkit::Visual::Base visual) +{ + mDiscardedVisuals.emplace_back(visual); + + RegisterDiscardCallback(); +} + Internal::TextureManager& VisualFactory::GetTextureManager() { return GetFactoryCache().GetTextureManager(); @@ -388,9 +406,12 @@ void VisualFactory::SetBrokenImageUrl(Toolkit::StyleManager& styleManager) if(styleManager) { - customBrokenImageUrlList = Toolkit::DevelStyleManager::GetBrokenImageUrlList(styleManager); - Property::Map config = Toolkit::DevelStyleManager::GetConfigurations(styleManager); - config["brokenImageUrl"].Get(brokenImageUrl); + customBrokenImageUrlList = Toolkit::DevelStyleManager::GetBrokenImageUrlList(styleManager); + const auto brokenImageUrlValue = Toolkit::DevelStyleManager::GetConfigurations(styleManager).Find("brokenImageUrl", Property::Type::STRING); + if(brokenImageUrlValue) + { + brokenImageUrlValue->Get(brokenImageUrl); + } } // Add default image @@ -422,6 +443,40 @@ ImageVisualShaderFactory& VisualFactory::GetImageVisualShaderFactory() return *mImageVisualShaderFactory; } +TextVisualShaderFactory& VisualFactory::GetTextVisualShaderFactory() +{ + if(!mTextVisualShaderFactory) + { + mTextVisualShaderFactory = std::unique_ptr(new TextVisualShaderFactory()); + } + return *mTextVisualShaderFactory; +} + +void VisualFactory::OnDiscardCallback() +{ + mIdleCallback = nullptr; + + // Discard visual now. + mDiscardedVisuals.clear(); +} + +void VisualFactory::RegisterDiscardCallback() +{ + if(!mIdleCallback && Adaptor::IsAvailable()) + { + // The callback manager takes the ownership of the callback object. + mIdleCallback = MakeCallback(this, &VisualFactory::OnDiscardCallback); + + Adaptor& adaptor = Adaptor::Get(); + + if(!adaptor.AddIdle(mIdleCallback, false)) + { + // Fail to add idle. (Maybe adaptor is paused.) + mIdleCallback = nullptr; + } + } +} + } // namespace Internal } // namespace Toolkit