From 73126d07cd133b1122320de702951adbf29c50b2 Mon Sep 17 00:00:00 2001 From: tscholb Date: Mon, 1 Nov 2021 17:00:34 +0900 Subject: [PATCH] Revert "[Tizen] Support to use NPatchImage in brokenImage" This reverts commit bc3933c59153f3e59d22222941be39e5e6551e31. Change-Id: I0fc09ccf431657e83132e01f38f6c0bdc1c74894 --- .../devel-api/styling/style-manager-devel.cpp | 10 - .../devel-api/styling/style-manager-devel.h | 25 -- .../internal/styling/style-manager-impl.cpp | 16 - dali-toolkit/internal/styling/style-manager-impl.h | 23 -- .../animated-image/animated-image-visual.cpp | 11 +- .../animated-vector-image-visual.cpp | 10 +- .../internal/visuals/image/image-visual.cpp | 54 ++- dali-toolkit/internal/visuals/npatch-loader.cpp | 2 + .../internal/visuals/npatch/npatch-visual.cpp | 9 +- dali-toolkit/internal/visuals/svg/svg-visual.cpp | 14 +- .../internal/visuals/visual-factory-cache.cpp | 366 +-------------------- .../internal/visuals/visual-factory-cache.h | 132 +------- .../internal/visuals/visual-factory-impl.cpp | 76 ++--- .../internal/visuals/visual-factory-impl.h | 6 - 14 files changed, 88 insertions(+), 666 deletions(-) diff --git a/dali-toolkit/devel-api/styling/style-manager-devel.cpp b/dali-toolkit/devel-api/styling/style-manager-devel.cpp index 94b3ecc..29f0e8b 100644 --- a/dali-toolkit/devel-api/styling/style-manager-devel.cpp +++ b/dali-toolkit/devel-api/styling/style-manager-devel.cpp @@ -30,16 +30,6 @@ const Property::Map GetConfigurations(StyleManager styleManager) return GetImpl(styleManager).GetConfigurations(); } -void SetBrokenImageUrl(StyleManager styleManager, DevelStyleManager::BrokenImageType brokenImageType, const std::string& brokenImageUrl) -{ - return GetImpl(styleManager).SetBrokenImageUrl(Internal::StyleManager::BrokenImageType(brokenImageType), brokenImageUrl); -} - -std::string GetBrokenImageUrl(StyleManager styleManager, DevelStyleManager::BrokenImageType brokenImageType) -{ - return GetImpl(styleManager).GetBrokenImageUrl(Internal::StyleManager::BrokenImageType(brokenImageType)); -} - } // namespace DevelStyleManager } // namespace Toolkit diff --git a/dali-toolkit/devel-api/styling/style-manager-devel.h b/dali-toolkit/devel-api/styling/style-manager-devel.h index 44162fd..efcff7d 100644 --- a/dali-toolkit/devel-api/styling/style-manager-devel.h +++ b/dali-toolkit/devel-api/styling/style-manager-devel.h @@ -28,16 +28,6 @@ namespace Toolkit namespace DevelStyleManager { /** - * @brief The Type of BrokenImage - */ -enum BrokenImageType -{ - SMALL, - NORMAL, - LARGE -}; - -/** * @brief Gets all currently defined configurations. * * @pre The Builder has been initialized. @@ -46,21 +36,6 @@ enum BrokenImageType **/ DALI_TOOLKIT_API const Property::Map GetConfigurations(StyleManager styleManager); -/** - * @brief Sets an image to be used when a visual has failed to correctly render - * @param[in] styleManager The instance of StyleManager - * @param[in] brokenImageType The type of broken image - * @param[in] brokenImageUrl The broken image url - */ -DALI_TOOLKIT_API void SetBrokenImageUrl(StyleManager styleManager, DevelStyleManager::BrokenImageType brokenImageType, const std::string& brokenImageUrl); - -/** - * @brief Gets an image to be used when a visual has failed to correctly render - * @param[in] styleManager The instance of StyleManager - * @param[in] brokenImageType BrokenImage type - */ -DALI_TOOLKIT_API std::string GetBrokenImageUrl(StyleManager styleManager, DevelStyleManager::BrokenImageType brokenImageType); - } // namespace DevelStyleManager } // namespace Toolkit diff --git a/dali-toolkit/internal/styling/style-manager-impl.cpp b/dali-toolkit/internal/styling/style-manager-impl.cpp index 13d5f7d..0968081 100644 --- a/dali-toolkit/internal/styling/style-manager-impl.cpp +++ b/dali-toolkit/internal/styling/style-manager-impl.cpp @@ -45,8 +45,6 @@ const char* APPLICATION_RESOURCE_PATH_KEY = "APPLICATION_RESOURCE_PATH"; const char* DEFAULT_TOOLKIT_PACKAGE_PATH = "/toolkit/"; -static constexpr int32_t COUNT_BROKEN_IMAGE_MAX = 3; - #if defined(DEBUG_ENABLED) Debug::Filter* gLogFilter = Debug::Filter::New(Debug::NoLogging, false, "LOG_STYLE"); #endif @@ -127,9 +125,6 @@ StyleManager::StyleManager() // Sound & haptic style mFeedbackStyle = new FeedbackStyle(); - - // Initialize BrokenImages - mBrokenImageUrls.assign(COUNT_BROKEN_IMAGE_MAX, ""); } StyleManager::~StyleManager() @@ -314,17 +309,6 @@ const Property::Map StyleManager::GetConfigurations() return result; } -void StyleManager::SetBrokenImageUrl(BrokenImageType brokenImageType, const std::string& brokenImageUrl) -{ - mBrokenImageUrls[brokenImageType] = brokenImageUrl; - EmitStyleChangeSignals(StyleChange::THEME_CHANGE); -} - -std::string StyleManager::GetBrokenImageUrl(BrokenImageType brokenImageType) -{ - return mBrokenImageUrls[brokenImageType]; -} - bool StyleManager::LoadFile(const std::string& filename, std::string& stringOut) { DALI_ASSERT_DEBUG(0 != filename.length()); diff --git a/dali-toolkit/internal/styling/style-manager-impl.h b/dali-toolkit/internal/styling/style-manager-impl.h index ef10d9a..b6eaff5 100644 --- a/dali-toolkit/internal/styling/style-manager-impl.h +++ b/dali-toolkit/internal/styling/style-manager-impl.h @@ -46,17 +46,6 @@ class StyleManager : public Dali::BaseObject, public ConnectionTracker { public: /** - * @brief The Type of BrokenImage - */ - enum BrokenImageType - { - SMALL, - NORMAL, - LARGE - }; - -public: - /** * Singleton access * * @return The StyleManager object @@ -106,16 +95,6 @@ public: // Public API const Property::Map GetConfigurations(); /** - * @copydoc Toolkit::DevelStyleManager::SetBrokenImageUrl - */ - void SetBrokenImageUrl(BrokenImageType brokenImageType, const std::string& brokenImageUrl); - - /** - * @copydoc Toolkit::DevelStyleManager::GetBrokenImageUrl - */ - std::string GetBrokenImageUrl(BrokenImageType brokenImageType); - - /** * @brief Apply the theme style to a control. * * @param[in] control The control to apply style. @@ -254,8 +233,6 @@ private: Toolkit::Internal::FeedbackStyle* mFeedbackStyle; ///< Feedback style - std::vector mBrokenImageUrls; ///< For brokenImage - // Signals Toolkit::StyleManager::StyleChangedSignalType mControlStyleChangeSignal; ///< Emitted when the style( theme/font ) changes for the controls to style themselves Toolkit::StyleManager::StyleChangedSignalType mStyleChangedSignal; ///< Emitted after the controls have been styled diff --git a/dali-toolkit/internal/visuals/animated-image/animated-image-visual.cpp b/dali-toolkit/internal/visuals/animated-image/animated-image-visual.cpp index 7d91e62..da54e1e 100644 --- a/dali-toolkit/internal/visuals/animated-image/animated-image-visual.cpp +++ b/dali-toolkit/internal/visuals/animated-image/animated-image-visual.cpp @@ -807,14 +807,9 @@ TextureSet AnimatedImageVisual::SetLoadingFailed() DALI_LOG_INFO(gAnimImgLogFilter, Debug::Concise, "ResourceReady(ResourceStatus::FAILED)\n"); ResourceReady(Toolkit::Visual::ResourceStatus::FAILED); - Actor actor = mPlacementActor.GetHandle(); - Vector2 imageSize = Vector2::ZERO; - if(actor) - { - imageSize = actor.GetProperty(Actor::Property::SIZE).Get(); - } - mFactoryCache.GetBrokenImageRenderer(mImpl->mRenderer, imageSize); - TextureSet textureSet = mImpl->mRenderer.GetTextures(); + TextureSet textureSet = TextureSet::New(); + Texture brokenImage = mFactoryCache.GetBrokenVisualImage(); + textureSet.SetTexture(0u, brokenImage); if(mFrameDelayTimer) { diff --git a/dali-toolkit/internal/visuals/animated-vector-image/animated-vector-image-visual.cpp b/dali-toolkit/internal/visuals/animated-vector-image/animated-vector-image-visual.cpp index 0fef82d..35d7456 100644 --- a/dali-toolkit/internal/visuals/animated-vector-image/animated-vector-image-visual.cpp +++ b/dali-toolkit/internal/visuals/animated-vector-image/animated-vector-image-visual.cpp @@ -305,10 +305,14 @@ void AnimatedVectorImageVisual::DoSetOnScene(Actor& actor) if(mLoadFailed) { - Vector2 imageSize = Vector2::ZERO; - imageSize = actor.GetProperty(Actor::Property::SIZE).Get(); - mFactoryCache.GetBrokenImageRenderer(mImpl->mRenderer, imageSize); + TextureSet textureSet = TextureSet::New(); + mImpl->mRenderer.SetTextures(textureSet); + + Texture brokenImage = mFactoryCache.GetBrokenVisualImage(); + textureSet.SetTexture(0u, brokenImage); + actor.AddRenderer(mImpl->mRenderer); + ResourceReady(Toolkit::Visual::ResourceStatus::FAILED); } else diff --git a/dali-toolkit/internal/visuals/image/image-visual.cpp b/dali-toolkit/internal/visuals/image/image-visual.cpp index 292f3f9..0251a1d 100644 --- a/dali-toolkit/internal/visuals/image/image-visual.cpp +++ b/dali-toolkit/internal/visuals/image/image-visual.cpp @@ -513,14 +513,8 @@ void ImageVisual::GetNaturalSize(Vector2& naturalSize) } else { - Actor actor = mPlacementActor.GetHandle(); - Vector2 imageSize = Vector2::ZERO; - if(actor) - { - imageSize = actor.GetProperty(Actor::Property::SIZE).Get(); - } - mFactoryCache.GetBrokenImageRenderer(mImpl->mRenderer, imageSize); - Texture brokenImage = mImpl->mRenderer.GetTextures().GetTexture(0); + Texture brokenImage = mFactoryCache.GetBrokenVisualImage(); + naturalSize.x = brokenImage.GetWidth(); naturalSize.y = brokenImage.GetWidth(); } @@ -716,12 +710,12 @@ void ImageVisual::DoSetOnScene(Actor& actor) } else if(mLoadState == TextureManager::LoadState::LOAD_FAILED) { - Vector2 imageSize = Vector2::ZERO; - if(actor) - { - imageSize = actor.GetProperty(Actor::Property::SIZE).Get(); - } - mFactoryCache.GetBrokenImageRenderer(mImpl->mRenderer, imageSize); + Texture brokenImage = mFactoryCache.GetBrokenVisualImage(); + + mTextures = TextureSet::New(); + mTextures.SetTexture(0u, brokenImage); + mImpl->mRenderer.SetTextures(mTextures); + actor.AddRenderer(mImpl->mRenderer); mPlacementActor.Reset(); @@ -866,30 +860,26 @@ void ImageVisual::UploadComplete(bool loadingSuccess, int32_t textureId, Texture EnablePreMultipliedAlpha(preMultiplied); Actor actor = mPlacementActor.GetHandle(); - if(!loadingSuccess) - { - Vector2 imageSize = Vector2::ZERO; - if(actor) - { - imageSize = actor.GetProperty(Actor::Property::SIZE).Get(); - } - mFactoryCache.GetBrokenImageRenderer(mImpl->mRenderer, imageSize); - textureSet = mImpl->mRenderer.GetTextures(); - } - else - { - Sampler sampler = Sampler::New(); - sampler.SetWrapMode(mWrapModeU, mWrapModeV); - textureSet.SetSampler(0u, sampler); - mImpl->mRenderer.SetTextures(textureSet); - } - if(actor) { actor.AddRenderer(mImpl->mRenderer); // reset the weak handle so that the renderer only get added to actor once mPlacementActor.Reset(); } + + if(!loadingSuccess) + { + Texture brokenImage = mFactoryCache.GetBrokenVisualImage(); + + textureSet = TextureSet::New(); + textureSet.SetTexture(0u, brokenImage); + mImpl->mRenderer.SetTextures(textureSet); + } + + Sampler sampler = Sampler::New(); + sampler.SetWrapMode(mWrapModeU, mWrapModeV); + textureSet.SetSampler(0u, sampler); + mImpl->mRenderer.SetTextures(textureSet); } // Storing TextureSet needed when renderer staged. diff --git a/dali-toolkit/internal/visuals/npatch-loader.cpp b/dali-toolkit/internal/visuals/npatch-loader.cpp index cb2850d..5f8ddff 100644 --- a/dali-toolkit/internal/visuals/npatch-loader.cpp +++ b/dali-toolkit/internal/visuals/npatch-loader.cpp @@ -104,6 +104,7 @@ std::size_t NPatchLoader::Load(TextureManager& textureManager, TextureUploadObse newData->AddObserver(textureObserver); mCache.PushBack(newData); + return newData->GetId(); // valid ids start from 1u } } @@ -132,6 +133,7 @@ std::size_t NPatchLoader::Load(TextureManager& textureManager, TextureUploadObse preMultiplyOnLoad = (preMultiplyOnLoading == TextureManager::MultiplyOnLoad::MULTIPLY_ON_LOAD) ? true : false; data->SetLoadedNPatchData(pixelBuffer, preMultiplyOnLoad); } + return data->GetId(); } diff --git a/dali-toolkit/internal/visuals/npatch/npatch-visual.cpp b/dali-toolkit/internal/visuals/npatch/npatch-visual.cpp index aea229b..d9c26aa 100644 --- a/dali-toolkit/internal/visuals/npatch/npatch-visual.cpp +++ b/dali-toolkit/internal/visuals/npatch/npatch-visual.cpp @@ -562,14 +562,7 @@ void NPatchVisual::ApplyTextureAndUniforms() DALI_LOG_ERROR("The N patch image '%s' is not a valid N patch image\n", mImageUrl.GetUrl().c_str()); textureSet = TextureSet::New(); - Actor actor = mPlacementActor.GetHandle(); - Vector2 imageSize = Vector2::ZERO; - if(actor) - { - imageSize = actor.GetProperty(Actor::Property::SIZE).Get(); - } - mFactoryCache.GetBrokenImageRenderer(mImpl->mRenderer, imageSize); - Texture croppedImage = mImpl->mRenderer.GetTextures().GetTexture(0); + Texture croppedImage = mFactoryCache.GetBrokenVisualImage(); textureSet.SetTexture(0u, croppedImage); mImpl->mRenderer.RegisterProperty("uFixed[0]", Vector2::ZERO); mImpl->mRenderer.RegisterProperty("uFixed[1]", Vector2::ZERO); diff --git a/dali-toolkit/internal/visuals/svg/svg-visual.cpp b/dali-toolkit/internal/visuals/svg/svg-visual.cpp index 2dbbffe..67fd435 100644 --- a/dali-toolkit/internal/visuals/svg/svg-visual.cpp +++ b/dali-toolkit/internal/visuals/svg/svg-visual.cpp @@ -157,9 +157,9 @@ void SvgVisual::DoSetOnScene(Actor& actor) if(mLoadFailed) { - Vector2 imageSize = Vector2::ZERO; - imageSize = actor.GetProperty(Actor::Property::SIZE).Get(); - mFactoryCache.GetBrokenImageRenderer(mImpl->mRenderer, imageSize); + Texture brokenImage = mFactoryCache.GetBrokenVisualImage(); + textureSet.SetTexture(0u, brokenImage); + actor.AddRenderer(mImpl->mRenderer); ResourceReady(Toolkit::Visual::ResourceStatus::FAILED); @@ -327,9 +327,11 @@ void SvgVisual::ApplyRasterizedImage(VectorImageRenderer vectorRenderer, PixelDa Actor actor = mPlacementActor.GetHandle(); if(actor) { - Vector2 imageSize = Vector2::ZERO; - imageSize = actor.GetProperty(Actor::Property::SIZE).Get(); - mFactoryCache.GetBrokenImageRenderer(mImpl->mRenderer, imageSize); + TextureSet textureSet = mImpl->mRenderer.GetTextures(); + + Texture brokenImage = mFactoryCache.GetBrokenVisualImage(); + textureSet.SetTexture(0u, brokenImage); + actor.AddRenderer(mImpl->mRenderer); } diff --git a/dali-toolkit/internal/visuals/visual-factory-cache.cpp b/dali-toolkit/internal/visuals/visual-factory-cache.cpp index 83bf574..b4fde0a 100644 --- a/dali-toolkit/internal/visuals/visual-factory-cache.cpp +++ b/dali-toolkit/internal/visuals/visual-factory-cache.cpp @@ -26,8 +26,6 @@ #include #include #include -#include -#include namespace Dali { @@ -35,72 +33,12 @@ namespace Toolkit { namespace Internal { -namespace -{ - -static constexpr int32_t COUNT_BROKEN_IMAGE_MAX = 3; - -/** - * @brief Creates the geometry formed from the vertices and indices - * - * @param[in] vertices The vertices to generate the geometry from - * @param[in] indices The indices to generate the geometry from - * @return The geometry formed from the vertices and indices - */ -Geometry GenerateGeometry(const Vector& vertices, const Vector& indices) -{ - Property::Map vertexFormat; - vertexFormat["aPosition"] = Property::VECTOR2; - VertexBuffer vertexBuffer = VertexBuffer::New(vertexFormat); - if(vertices.Size() > 0) - { - vertexBuffer.SetData(&vertices[0], vertices.Size()); - } - - // Create the geometry object - Geometry geometry = Geometry::New(); - geometry.AddVertexBuffer(vertexBuffer); - if(indices.Size() > 0) - { - geometry.SetIndexBuffer(&indices[0], indices.Size()); - } - - return geometry; -} - -/** - * @brief Adds the indices to form a quad composed off two triangles where the indices are organised in a grid - * - * @param[out] indices The indices to add to - * @param[in] rowIdx The row index to start the quad - * @param[in] nextRowIdx The index to the next row - */ -void AddQuadIndices(Vector& indices, unsigned int rowIdx, unsigned int nextRowIdx) -{ - indices.PushBack(rowIdx); - indices.PushBack(nextRowIdx + 1); - indices.PushBack(rowIdx + 1); - - indices.PushBack(rowIdx); - indices.PushBack(nextRowIdx); - indices.PushBack(nextRowIdx + 1); -} - -void AddVertex(Vector& vertices, unsigned int x, unsigned int y) -{ - vertices.PushBack(Vector2(x, y)); -} - -} //unnamed namespace - VisualFactoryCache::VisualFactoryCache(bool preMultiplyOnLoad) : mSvgRasterizeThread(NULL), mVectorAnimationManager(), - mPreMultiplyOnLoad(preMultiplyOnLoad), - mBrokenImageInfoContainer(), - mUseCustomBrokenImage(false) + mBrokenImageUrl(""), + mPreMultiplyOnLoad(preMultiplyOnLoad) { - mBrokenImageInfoContainer.assign(COUNT_BROKEN_IMAGE_MAX, BrokenImageInfo()); } VisualFactoryCache::~VisualFactoryCache() @@ -166,7 +104,7 @@ ImageAtlasManagerPtr VisualFactoryCache::GetAtlasManager() if(!mAtlasManager) { mAtlasManager = new ImageAtlasManager(); - mAtlasManager->SetBrokenImage(mBrokenImageInfoContainer[BrokenImageType::SMALL].url); + mAtlasManager->SetBrokenImage(mBrokenImageUrl); } return mAtlasManager; @@ -269,22 +207,20 @@ Geometry VisualFactoryCache::CreateGridGeometry(Uint16Pair gridSize) return geometry; } -Texture VisualFactoryCache::GetBrokenVisualImage(BrokenImageType brokenImageType) +Texture VisualFactoryCache::GetBrokenVisualImage() { - if(!(mBrokenImageInfoContainer[brokenImageType].texture) && !mBrokenImageInfoContainer[brokenImageType].url.empty()) + if(!mBrokenImageTexture && mBrokenImageUrl.size()) { - PixelData pixelData; - Devel::PixelBuffer pixelBuffer = LoadImageFromFile(mBrokenImageInfoContainer[brokenImageType].url); + PixelData data; + Devel::PixelBuffer pixelBuffer = LoadImageFromFile(mBrokenImageUrl); if(pixelBuffer) { - pixelData = Devel::PixelBuffer::Convert(pixelBuffer); // takes ownership of buffer - mBrokenImageInfoContainer[brokenImageType].texture = Texture::New(Dali::TextureType::TEXTURE_2D, pixelData.GetPixelFormat(), pixelData.GetWidth(), pixelData.GetHeight()); - mBrokenImageInfoContainer[brokenImageType].texture.Upload(pixelData); - mBrokenImageInfoContainer[brokenImageType].width = pixelData.GetWidth(); - mBrokenImageInfoContainer[brokenImageType].height = pixelData.GetHeight(); + data = Devel::PixelBuffer::Convert(pixelBuffer); // takes ownership of buffer + mBrokenImageTexture = Texture::New(Dali::TextureType::TEXTURE_2D, data.GetPixelFormat(), data.GetWidth(), data.GetHeight()); + mBrokenImageTexture.Upload(data); } } - return mBrokenImageInfoContainer[brokenImageType].texture; + return mBrokenImageTexture; } void VisualFactoryCache::SetPreMultiplyOnLoad(bool preMultiply) @@ -297,290 +233,16 @@ bool VisualFactoryCache::GetPreMultiplyOnLoad() return mPreMultiplyOnLoad; } -void VisualFactoryCache::EnableCustomBrokenImage(bool enabled) -{ - mUseCustomBrokenImage = enabled; -} - -void VisualFactoryCache::SetBrokenImageUrl(BrokenImageType brokenImageType, const std::string& brokenImageUrl) +void VisualFactoryCache::SetBrokenImageUrl(const std::string& brokenImageUrl) { - const NPatchData* data; - mBrokenImageInfoContainer[brokenImageType].url = brokenImageUrl; + mBrokenImageUrl = brokenImageUrl; if(!mAtlasManager) { mAtlasManager = new ImageAtlasManager(); } - mAtlasManager->SetBrokenImage(mBrokenImageInfoContainer[brokenImageType].url); - - // Update BrokenImageType - if(!mBrokenImageInfoContainer[brokenImageType].url.empty()) - { - Rect border; - VisualUrl visualUrl(mBrokenImageInfoContainer[brokenImageType].url); - mBrokenImageInfoContainer[brokenImageType].visualType = visualUrl.GetType(); - if(mBrokenImageInfoContainer[brokenImageType].visualType == VisualUrl::Type::N_PATCH) - { - mBrokenImageInfoContainer[brokenImageType].npatchId = mNPatchLoader.Load( mTextureManager, NULL, mBrokenImageInfoContainer[brokenImageType].url, border, mPreMultiplyOnLoad, true); - if(mNPatchLoader.GetNPatchData(mBrokenImageInfoContainer[brokenImageType].npatchId, data) && data->GetLoadingState() == NPatchData::LoadingState::LOAD_COMPLETE) - { - mBrokenImageInfoContainer[brokenImageType].width = data->GetCroppedWidth(); - mBrokenImageInfoContainer[brokenImageType].height = data->GetCroppedHeight(); - } - } - else - { - GetBrokenVisualImage(brokenImageType); - } - } -} - -VisualUrl::Type VisualFactoryCache::GetBrokenImageVisualType(BrokenImageType brokenImageType) -{ - return mBrokenImageInfoContainer[brokenImageType].visualType; -} - -Geometry VisualFactoryCache::CreateNPatchGeometry(Uint16Pair gridSize) -{ - uint16_t gridWidth = gridSize.GetWidth(); - uint16_t gridHeight = gridSize.GetHeight(); - - // Create vertices - Vector vertices; - vertices.Reserve((gridWidth + 1) * (gridHeight + 1)); - - for(int y = 0; y < gridHeight + 1; ++y) - { - for(int x = 0; x < gridWidth + 1; ++x) - { - AddVertex(vertices, x, y); - } - } - - // Create indices - Vector indices; - indices.Reserve(gridWidth * gridHeight * 6); - - unsigned int rowIdx = 0; - unsigned int nextRowIdx = gridWidth + 1; - for(int y = 0; y < gridHeight; ++y, ++nextRowIdx, ++rowIdx) - { - for(int x = 0; x < gridWidth; ++x, ++nextRowIdx, ++rowIdx) - { - AddQuadIndices(indices, rowIdx, nextRowIdx); - } - } - - return GenerateGeometry(vertices, indices); -} - -Geometry VisualFactoryCache::GetNPatchGeometry(BrokenImageType brokenImageType) -{ - Geometry geometry; - const NPatchData* data; - if(mNPatchLoader.GetNPatchData(mBrokenImageInfoContainer[brokenImageType].npatchId, data) && data->GetLoadingState() == NPatchData::LoadingState::LOAD_COMPLETE) - { - if(data->GetStretchPixelsX().Size() == 1 && data->GetStretchPixelsY().Size() == 1) - { - geometry = GetGeometry(VisualFactoryCache::NINE_PATCH_GEOMETRY); - if(!geometry) - { - geometry = CreateNPatchGeometry(Uint16Pair(3,3)); - SaveGeometry(VisualFactoryCache::NINE_PATCH_GEOMETRY, geometry); - } - } - else if(data->GetStretchPixelsX().Size() > 0 || data->GetStretchPixelsY().Size() > 0) - { - Uint16Pair gridSize(2 * data->GetStretchPixelsX().Size() + 1, 2 * data->GetStretchPixelsY().Size() + 1); - if(!data->GetRenderingMap()) - { - geometry = CreateNPatchGeometry(gridSize); - } - } - } - else - { - // no N patch data so use default geometry - geometry = GetGeometry(VisualFactoryCache::NINE_PATCH_GEOMETRY); - if(!geometry) - { - geometry = CreateNPatchGeometry(Uint16Pair(3,3)); - SaveGeometry(VisualFactoryCache::NINE_PATCH_GEOMETRY, geometry); - } - } - return geometry; -} - -Shader VisualFactoryCache::GetNPatchShader(BrokenImageType brokenImageType) -{ - Shader shader; - const NPatchData* data; - // 0 is either no data (load failed?) or no stretch regions on image - // for both cases we use the default shader - NPatchUtility::StretchRanges::SizeType xStretchCount = 0; - NPatchUtility::StretchRanges::SizeType yStretchCount = 0; - - // ask loader for the regions - if(mNPatchLoader.GetNPatchData(mBrokenImageInfoContainer[brokenImageType].npatchId, data)) - { - xStretchCount = data->GetStretchPixelsX().Count(); - yStretchCount = data->GetStretchPixelsY().Count(); - } - - if(DALI_LIKELY((xStretchCount == 1 && yStretchCount == 1) || - (xStretchCount == 0 && yStretchCount == 0))) - { - shader = GetShader(VisualFactoryCache::NINE_PATCH_SHADER); - if(DALI_UNLIKELY(!shader)) - { - shader = Shader::New(SHADER_NPATCH_VISUAL_3X3_SHADER_VERT, SHADER_NPATCH_VISUAL_SHADER_FRAG); - - // Only cache vanilla 9 patch shaders - SaveShader(VisualFactoryCache::NINE_PATCH_SHADER, shader); - } - } - else if(xStretchCount > 0 || yStretchCount > 0) - { - std::stringstream vertexShader; - vertexShader << "#define FACTOR_SIZE_X " << xStretchCount + 2 << "\n" - << "#define FACTOR_SIZE_Y " << yStretchCount + 2 << "\n" - << SHADER_NPATCH_VISUAL_SHADER_VERT; - shader = Shader::New(vertexShader.str(), SHADER_NPATCH_VISUAL_SHADER_FRAG); - } - return shader; -} - -void VisualFactoryCache::RegisterStretchProperties(Renderer& renderer, BrokenImageType brokenImageType, const char* uniformName, const NPatchUtility::StretchRanges& stretchPixels, uint16_t imageExtent) -{ - uint16_t prevEnd = 0; - uint16_t prevFix = 0; - uint16_t prevStretch = 0; - unsigned int i = 1; - for(NPatchUtility::StretchRanges::ConstIterator it = stretchPixels.Begin(); it != stretchPixels.End(); ++it, ++i) - { - uint16_t start = it->GetX(); - uint16_t end = it->GetY(); - - uint16_t fix = prevFix + start - prevEnd; - uint16_t stretch = prevStretch + end - start; - - std::stringstream uniform; - uniform << uniformName << "[" << i << "]"; - renderer.RegisterProperty(uniform.str(), Vector2(fix, stretch)); - - prevEnd = end; - prevFix = fix; - prevStretch = stretch; - } - - { - prevFix += imageExtent - prevEnd; - std::stringstream uniform; - uniform << uniformName << "[" << i << "]"; - renderer.RegisterProperty(uniform.str(), Vector2(prevFix, prevStretch)); - } -} - -void VisualFactoryCache::ApplyTextureAndUniforms(Renderer& renderer, BrokenImageType brokenImageType) -{ - const NPatchData* data; - TextureSet textureSet; - if(mNPatchLoader.GetNPatchData(mBrokenImageInfoContainer[brokenImageType].npatchId, data) && data->GetLoadingState() == NPatchData::LoadingState::LOAD_COMPLETE) - { - textureSet = data->GetTextures(); - mBrokenImageInfoContainer[brokenImageType].texture = data->GetTextures().GetTexture(0); - - if(data->GetStretchPixelsX().Size() == 1 && data->GetStretchPixelsY().Size() == 1) - { - //special case for 9 patch - Uint16Pair stretchX = data->GetStretchPixelsX()[0]; - Uint16Pair stretchY = data->GetStretchPixelsY()[0]; - - uint16_t stretchWidth = (stretchX.GetY() >= stretchX.GetX()) ? stretchX.GetY() - stretchX.GetX() : 0; - uint16_t stretchHeight = (stretchY.GetY() >= stretchY.GetX()) ? stretchY.GetY() - stretchY.GetX() : 0; - - renderer.RegisterProperty("uFixed[0]", Vector2::ZERO); - renderer.RegisterProperty("uFixed[1]", Vector2(stretchX.GetX(), stretchY.GetX())); - renderer.RegisterProperty("uFixed[2]", Vector2(data->GetCroppedWidth() - stretchWidth, data->GetCroppedHeight() - stretchHeight)); - renderer.RegisterProperty("uStretchTotal", Vector2(stretchWidth, stretchHeight)); - } - else - { - renderer.RegisterProperty("uNinePatchFactorsX[0]", Vector2::ZERO); - renderer.RegisterProperty("uNinePatchFactorsY[0]", Vector2::ZERO); - - RegisterStretchProperties(renderer, brokenImageType, "uNinePatchFactorsX", data->GetStretchPixelsX(), data->GetCroppedWidth()); - RegisterStretchProperties(renderer, brokenImageType, "uNinePatchFactorsY", data->GetStretchPixelsY(), data->GetCroppedHeight()); - } - } - else - { - textureSet = TextureSet::New(); - - Texture croppedImage = GetBrokenVisualImage(brokenImageType); - textureSet.SetTexture(0u, croppedImage); - renderer.RegisterProperty("uFixed[0]", Vector2::ZERO); - renderer.RegisterProperty("uFixed[1]", Vector2::ZERO); - renderer.RegisterProperty("uFixed[2]", Vector2::ZERO); - renderer.RegisterProperty("uStretchTotal", Vector2(croppedImage.GetWidth(), croppedImage.GetHeight())); - } - - renderer.SetTextures(textureSet); -} - -void VisualFactoryCache::GetBrokenImageRenderer(Renderer& renderer, const Vector2& size) -{ - BrokenImageType brokenImageType = GetProperBrokenImageType(size); - - if(GetBrokenImageVisualType(brokenImageType) == VisualUrl::N_PATCH) - { - // Set geometry and shader for npatch - Geometry geometry = GetNPatchGeometry(brokenImageType); - Shader shader = GetNPatchShader(brokenImageType); - renderer.SetGeometry(geometry); - renderer.SetShader(shader); - ApplyTextureAndUniforms(renderer, brokenImageType); - } - else - { - Texture brokenImage = GetBrokenVisualImage(brokenImageType); - TextureSet textureSet = TextureSet::New(); - textureSet.SetTexture(0u, brokenImage); - renderer.SetTextures(textureSet); - } -} - -VisualFactoryCache::BrokenImageType VisualFactoryCache::GetProperBrokenImageType(const Vector2& size) -{ - // Sets the default broken type - BrokenImageType returnType = BrokenImageType::SMALL; - - if((size.width == 0 && size.height == 0) || !mUseCustomBrokenImage ) - { - // To do : Need to add observer about size - // Can't get size , just use default size of brokenImage - return returnType; - } - - // Find the proper value if we know the size of the image - for(auto brokenImageIter = mBrokenImageInfoContainer.rbegin(); brokenImageIter != mBrokenImageInfoContainer.rend(); brokenImageIter++) - { - // Skip if the value is not set - if(brokenImageIter->width == 0 && brokenImageIter->height == 0) - { - continue; - } - - if(brokenImageIter->width < size.width && brokenImageIter->height < size.height) - { - int index = std::distance(brokenImageIter,mBrokenImageInfoContainer.rend()-1); - returnType = (BrokenImageType)index; - break; - } - } - - return returnType; + mAtlasManager->SetBrokenImage(mBrokenImageUrl); } } // namespace Internal diff --git a/dali-toolkit/internal/visuals/visual-factory-cache.h b/dali-toolkit/internal/visuals/visual-factory-cache.h index d7e390f..6e8f37d 100644 --- a/dali-toolkit/internal/visuals/visual-factory-cache.h +++ b/dali-toolkit/internal/visuals/visual-factory-cache.h @@ -28,7 +28,6 @@ #include #include #include -#include namespace Dali { @@ -125,18 +124,7 @@ public: GEOMETRY_TYPE_MAX = WIREFRAME_GEOMETRY }; - /** - * @brief The Type of BrokenImage - */ - enum BrokenImageType - { - SMALL, - NORMAL, - LARGE - }; - public: - /** * @brief Constructor * @@ -189,6 +177,12 @@ public: static Geometry CreateGridGeometry(Uint16Pair gridSize); /** + * @brief Returns a new Texture to use when a visual has failed to correctly render + * @return The broken image texture. + */ + Texture GetBrokenVisualImage(); + + /** * @copydoc Toolkit::VisualFactory::SetPreMultiplyOnLoad() */ void SetPreMultiplyOnLoad(bool preMultiply); @@ -199,32 +193,10 @@ public: bool GetPreMultiplyOnLoad(); /** - * @brief Enable a custom broken image - * - * @param[in] enabled True if cache use custom broken image - */ - void EnableCustomBrokenImage(bool enabled); - - /** * @brief Set an image to be used when a visual has failed to correctly render - * @param[in] brokenImageType BrokenImage type - * @param[in] brokenImageUrl The broken image url - */ - void SetBrokenImageUrl(BrokenImageType brokenImageType, const std::string& brokenImageUrl); - - /** - * @brief Returns a broken image type - * @param[in] brokenImageType BrokenImage type - * @return The broken image type. - */ - VisualUrl::Type GetBrokenImageVisualType(BrokenImageType brokenImageType); - - /** - * @brief Get the Npatch Renderer object - * @param[in] renderer renderer for npatch - * @param[in] size the size of actor + * @param[in] brokenImageUrl The broken image url. */ - void GetBrokenImageRenderer(Renderer& renderer, const Vector2& size); + void SetBrokenImageUrl(const std::string& brokenImageUrl); public: /** @@ -269,101 +241,17 @@ protected: VisualFactoryCache& operator=(const VisualFactoryCache& rhs); private: - /** - * @brief Returns a new Texture to use when a visual has failed to correctly render - * @return The broken image texture. - */ - Texture GetBrokenVisualImage(BrokenImageType brokenImageType); - - /** - * @brief Change the Proper broken image type - * @param[in] size The size of actor - * - * @return The type of broken image - */ - BrokenImageType GetProperBrokenImageType(const Vector2& size); - - /** - * @brief Apply a texture and uniforms - * - * @param renderer The renderer for broken image - * @param brokenImageType The type of broken image - */ - void ApplyTextureAndUniforms(Renderer& renderer, BrokenImageType brokenImageType); - - /** - * @brief Creates a Npatch Geometry object - * - * @param[in] gridSize The gridSize for creating a geometry - * @return The Geometry for NPatch - */ - Geometry CreateNPatchGeometry(Uint16Pair gridSize); - - /** - * @brief Gets a geometry for npatch image - * - * @param[in] brokenImageType the type of broken image - * @return The Geometry for NPatch - */ - Geometry GetNPatchGeometry(BrokenImageType brokenImageType); - - /** - * @brief Gets the Npatch Shader object - * - * @param[in] brokenImageType The type of broken image - * @return The Shader for NPatch - */ - Shader GetNPatchShader(BrokenImageType brokenImageType); - - /** - * @brief Registers a properties for Stretch Ranges - * - * @param renderer The renderer for broken image - * @param brokenImageType The type of broken image - * @param uniformName The name of the uniform - * @param stretchPixels The stretchable pixels in the cropped image space - * @param imageExtent The imageExtent - */ - void RegisterStretchProperties(Renderer& renderer, BrokenImageType brokenImageType, const char* uniformName, const NPatchUtility::StretchRanges& stretchPixels, uint16_t imageExtent); - -private: - struct BrokenImageInfo - { - BrokenImageInfo() - :visualType(), - url(""), - npatchId(NPatchData::INVALID_NPATCH_DATA_ID), - texture(), - width(0), - height(0) - { - } - - ~BrokenImageInfo() - { - } - - // Data - VisualUrl::Type visualType; - std::string url; - NPatchData::NPatchDataId npatchId; - Texture texture; - uint32_t width; - uint32_t height; - }; - Geometry mGeometry[GEOMETRY_TYPE_MAX + 1]; Shader mShader[SHADER_TYPE_MAX + 1]; ImageAtlasManagerPtr mAtlasManager; TextureManager mTextureManager; NPatchLoader mNPatchLoader; - + Texture mBrokenImageTexture; SvgRasterizeThread* mSvgRasterizeThread; std::unique_ptr mVectorAnimationManager; + std::string mBrokenImageUrl; bool mPreMultiplyOnLoad; - std::vector mBrokenImageInfoContainer; - bool mUseCustomBrokenImage; }; } // namespace Internal diff --git a/dali-toolkit/internal/visuals/visual-factory-impl.cpp b/dali-toolkit/internal/visuals/visual-factory-impl.cpp index ab4a15b..8c4b2f8 100644 --- a/dali-toolkit/internal/visuals/visual-factory-impl.cpp +++ b/dali-toolkit/internal/visuals/visual-factory-impl.cpp @@ -61,8 +61,6 @@ namespace 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(); @@ -93,7 +91,16 @@ void VisualFactory::OnStyleChangedSignal(Toolkit::StyleManager styleManager, Sty { if(type == StyleChange::THEME_CHANGE) { - SetBrokenImageUrl(styleManager); + const std::string imageDirPath = AssetManager::GetDaliImagePath(); + std::string brokenImageUrl = imageDirPath + BROKEN_IMAGE_FILE_NAME; + + Property::Map config = Toolkit::DevelStyleManager::GetConfigurations(styleManager); + config["brokenImageUrl"].Get(brokenImageUrl); + + if(mFactoryCache) + { + mFactoryCache->SetBrokenImageUrl(brokenImageUrl); + } } } @@ -363,65 +370,24 @@ Internal::TextureManager& VisualFactory::GetTextureManager() return GetFactoryCache().GetTextureManager(); } -void VisualFactory::SetBrokenImageUrl(Toolkit::StyleManager& styleManager) +Internal::VisualFactoryCache& VisualFactory::GetFactoryCache() { - const std::string imageDirPath = AssetManager::GetDaliImagePath(); - std::string brokenImageUrl = imageDirPath + BROKEN_IMAGE_FILE_NAME; - std::string customBrokenImageUrl[COUNT_BROKEN_IMAGE_MAX]; - - if(styleManager) + if(!mFactoryCache) { - 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(new VisualFactoryCache(mPreMultiplyOnLoad)); - if(findCustomBrokenImage) - { - std::string customDefaultBrokenUrl = ""; - mFactoryCache->EnableCustomBrokenImage(true); - customDefaultBrokenUrl = customBrokenImageUrl[0]; + const std::string imageDirPath = AssetManager::GetDaliImagePath(); + std::string brokenImageUrl = imageDirPath + BROKEN_IMAGE_FILE_NAME; - for(int i=0;iSetBrokenImageUrl(Toolkit::Internal::VisualFactoryCache::BrokenImageType::SMALL, customBrokenImageUrl[i]); - } - } - mFactoryCache->SetBrokenImageUrl(Toolkit::Internal::VisualFactoryCache::BrokenImageType(i), customBrokenImageUrl[i]); - } - } - else + Toolkit::StyleManager styleManager = Toolkit::StyleManager::Get(); + if(styleManager) { - mFactoryCache->SetBrokenImageUrl(Toolkit::Internal::VisualFactoryCache::BrokenImageType::SMALL, brokenImageUrl); + Property::Map config = Toolkit::DevelStyleManager::GetConfigurations(styleManager); + config["brokenImageUrl"].Get(brokenImageUrl); + styleManager.StyleChangedSignal().Connect(mSlotDelegate, &VisualFactory::OnStyleChangedSignal); } - } - else - { - mFactoryCache->SetBrokenImageUrl(Toolkit::Internal::VisualFactoryCache::BrokenImageType::SMALL, brokenImageUrl); - } -} -Internal::VisualFactoryCache& VisualFactory::GetFactoryCache() -{ - if(!mFactoryCache) - { - mFactoryCache = std::unique_ptr(new VisualFactoryCache(mPreMultiplyOnLoad)); - Toolkit::StyleManager styleManager = Toolkit::StyleManager::Get(); - SetBrokenImageUrl(styleManager); + mFactoryCache->SetBrokenImageUrl(brokenImageUrl); } return *mFactoryCache; } diff --git a/dali-toolkit/internal/visuals/visual-factory-impl.h b/dali-toolkit/internal/visuals/visual-factory-impl.h index 670567b..f038301 100644 --- a/dali-toolkit/internal/visuals/visual-factory-impl.h +++ b/dali-toolkit/internal/visuals/visual-factory-impl.h @@ -90,12 +90,6 @@ protected: private: /** - * @brief Set the Broken Image url - * - */ - void SetBrokenImageUrl(Toolkit::StyleManager& styleManager); - - /** * Get the factory cache, creating it if necessary. */ Internal::VisualFactoryCache& GetFactoryCache(); -- 2.7.4