/*
- * Copyright (c) 2021 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2022 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/internal/visuals/npatch/npatch-visual.h>
#include <dali-toolkit/internal/visuals/primitive/primitive-visual.h>
#include <dali-toolkit/internal/visuals/svg/svg-visual.h>
+#include <dali-toolkit/internal/visuals/text-visual-shader-factory.h>
#include <dali-toolkit/internal/visuals/text/text-visual.h>
#include <dali-toolkit/internal/visuals/visual-factory-cache.h>
#include <dali-toolkit/internal/visuals/visual-string-constants.h>
Debug::Filter* gLogFilter = Debug::Filter::New(Debug::NoLogging, false, "LOG_CONTROL_VISUALS");
#endif
-static constexpr int32_t COUNT_BROKEN_IMAGE_MAX = 3;
-
BaseHandle Create()
{
BaseHandle handle = Toolkit::VisualFactory::Get();
VisualFactory::VisualFactory(bool debugEnabled)
: mFactoryCache(),
mImageVisualShaderFactory(),
+ mTextVisualShaderFactory(),
mSlotDelegate(this),
mDebugEnabled(debugEnabled),
mPreMultiplyOnLoad(true)
}
}
+void VisualFactory::OnBrokenImageChangedSignal(Toolkit::StyleManager styleManager)
+{
+ SetBrokenImageUrl(styleManager);
+}
+
Toolkit::Visual::Base VisualFactory::CreateVisual(const Property::Map& propertyMap)
{
Visual::BasePtr visualPtr;
visualPtr = NPatchVisual::New(GetFactoryCache(), GetImageVisualShaderFactory(), visualUrl, propertyMap);
break;
}
+ case VisualUrl::TVG:
case VisualUrl::SVG:
{
visualPtr = SvgVisual::New(GetFactoryCache(), GetImageVisualShaderFactory(), visualUrl, propertyMap);
else
{
Property::Array* array = imageURLValue->GetArray();
- if(array)
+ if(array && array->Count() > 0)
{
visualPtr = AnimatedImageVisual::New(GetFactoryCache(), GetImageVisualShaderFactory(), *array, propertyMap);
}
case Toolkit::Visual::TEXT:
{
- visualPtr = TextVisual::New(GetFactoryCache(), propertyMap);
+ visualPtr = TextVisual::New(GetFactoryCache(), GetTextVisualShaderFactory(), propertyMap);
break;
}
std::string imageUrl;
if(imageURLValue && imageURLValue->Get(imageUrl))
{
- visualPtr = NPatchVisual::New(GetFactoryCache(), GetImageVisualShaderFactory(), imageUrl, propertyMap);
+ if(!imageUrl.empty())
+ {
+ visualPtr = NPatchVisual::New(GetFactoryCache(), GetImageVisualShaderFactory(), imageUrl, propertyMap);
+ }
}
break;
}
std::string imageUrl;
if(imageURLValue && imageURLValue->Get(imageUrl))
{
- visualPtr = SvgVisual::New(GetFactoryCache(), GetImageVisualShaderFactory(), imageUrl, propertyMap);
+ if(!imageUrl.empty())
+ {
+ visualPtr = SvgVisual::New(GetFactoryCache(), GetImageVisualShaderFactory(), imageUrl, propertyMap);
+ }
}
break;
}
{
if(imageURLValue->Get(imageUrl))
{
- visualPtr = AnimatedImageVisual::New(GetFactoryCache(), GetImageVisualShaderFactory(), imageUrl, propertyMap);
+ if(!imageUrl.empty())
+ {
+ visualPtr = AnimatedImageVisual::New(GetFactoryCache(), GetImageVisualShaderFactory(), imageUrl, propertyMap);
+ }
}
else
{
Property::Array* array = imageURLValue->GetArray();
- if(array)
+ if(array && array->Count() > 0)
{
visualPtr = AnimatedImageVisual::New(GetFactoryCache(), GetImageVisualShaderFactory(), *array, propertyMap);
}
std::string imageUrl;
if(imageURLValue && imageURLValue->Get(imageUrl))
{
- visualPtr = AnimatedVectorImageVisual::New(GetFactoryCache(), GetImageVisualShaderFactory(), imageUrl, propertyMap);
+ if(!imageUrl.empty())
+ {
+ visualPtr = AnimatedVectorImageVisual::New(GetFactoryCache(), GetImageVisualShaderFactory(), imageUrl, propertyMap);
+ }
}
break;
}
visualPtr = NPatchVisual::New(GetFactoryCache(), GetImageVisualShaderFactory(), visualUrl);
break;
}
+ case VisualUrl::TVG:
case VisualUrl::SVG:
{
visualPtr = SvgVisual::New(GetFactoryCache(), GetImageVisualShaderFactory(), visualUrl);
}
case VisualUrl::JSON:
{
- visualPtr = AnimatedVectorImageVisual::New(GetFactoryCache(), GetImageVisualShaderFactory(), visualUrl);
+ visualPtr = AnimatedVectorImageVisual::New(GetFactoryCache(), GetImageVisualShaderFactory(), visualUrl, size);
break;
}
case VisualUrl::REGULAR_IMAGE:
void VisualFactory::SetBrokenImageUrl(Toolkit::StyleManager& styleManager)
{
- const std::string imageDirPath = AssetManager::GetDaliImagePath();
- std::string brokenImageUrl = imageDirPath + BROKEN_IMAGE_FILE_NAME;
- std::string customBrokenImageUrl[COUNT_BROKEN_IMAGE_MAX];
+ const std::string imageDirPath = AssetManager::GetDaliImagePath();
+ std::string brokenImageUrl = imageDirPath + BROKEN_IMAGE_FILE_NAME;
+ std::vector<std::string> customBrokenImageUrlList;
if(styleManager)
{
- Property::Map config = Toolkit::DevelStyleManager::GetConfigurations(styleManager);
- config["brokenImageUrl"].Get(brokenImageUrl);
- styleManager.StyleChangedSignal().Connect(mSlotDelegate, &VisualFactory::OnStyleChangedSignal);
-
- bool findCustomBrokenImage = false;
- for(int i=0;i<COUNT_BROKEN_IMAGE_MAX;i++)
- {
- customBrokenImageUrl[i] = Toolkit::DevelStyleManager::GetBrokenImageUrl(styleManager,Toolkit::DevelStyleManager::BrokenImageType(i));
- if(!customBrokenImageUrl[i].empty())
- {
- findCustomBrokenImage = true;
- }
- }
-
- if(findCustomBrokenImage)
+ customBrokenImageUrlList = Toolkit::DevelStyleManager::GetBrokenImageUrlList(styleManager);
+ const Property::Map& config = Toolkit::DevelStyleManager::GetConfigurations(styleManager);
+ const auto brokenImageUrlValue = config.Find("brokenImageUrl", Property::Type::STRING);
+ if(brokenImageUrlValue)
{
- std::string customDefaultBrokenUrl = "";
- mFactoryCache->EnableCustomBrokenImage(true);
- customDefaultBrokenUrl = customBrokenImageUrl[0];
-
- for(int i=0;i<COUNT_BROKEN_IMAGE_MAX;i++)
- {
- if(customDefaultBrokenUrl.empty())
- {
- if(!customBrokenImageUrl[i].empty())
- {
- customDefaultBrokenUrl = customBrokenImageUrl[i];
- mFactoryCache->SetBrokenImageUrl(Toolkit::Internal::VisualFactoryCache::BrokenImageType::SMALL, customBrokenImageUrl[i]);
- }
- }
- mFactoryCache->SetBrokenImageUrl(Toolkit::Internal::VisualFactoryCache::BrokenImageType(i), customBrokenImageUrl[i]);
- }
- }
- else
- {
- mFactoryCache->SetBrokenImageUrl(Toolkit::Internal::VisualFactoryCache::BrokenImageType::SMALL, brokenImageUrl);
+ brokenImageUrlValue->Get(brokenImageUrl);
}
}
- else
- {
- mFactoryCache->SetBrokenImageUrl(Toolkit::Internal::VisualFactoryCache::BrokenImageType::SMALL, brokenImageUrl);
- }
+
+ // Add default image
+ mFactoryCache->SetBrokenImageUrl(brokenImageUrl, customBrokenImageUrlList);
}
Internal::VisualFactoryCache& VisualFactory::GetFactoryCache()
{
if(!mFactoryCache)
{
- mFactoryCache = std::unique_ptr<VisualFactoryCache>(new VisualFactoryCache(mPreMultiplyOnLoad));
+ mFactoryCache = std::unique_ptr<VisualFactoryCache>(new VisualFactoryCache(mPreMultiplyOnLoad));
Toolkit::StyleManager styleManager = Toolkit::StyleManager::Get();
+ if(styleManager)
+ {
+ styleManager.StyleChangedSignal().Connect(mSlotDelegate, &VisualFactory::OnStyleChangedSignal);
+ Toolkit::DevelStyleManager::BrokenImageChangedSignal(styleManager).Connect(mSlotDelegate, &VisualFactory::OnBrokenImageChangedSignal);
+ }
SetBrokenImageUrl(styleManager);
}
return *mFactoryCache;
return *mImageVisualShaderFactory;
}
+TextVisualShaderFactory& VisualFactory::GetTextVisualShaderFactory()
+{
+ if(!mTextVisualShaderFactory)
+ {
+ mTextVisualShaderFactory = std::unique_ptr<TextVisualShaderFactory>(new TextVisualShaderFactory());
+ }
+ return *mTextVisualShaderFactory;
+}
+
} // namespace Internal
} // namespace Toolkit