X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=blobdiff_plain;f=dali-toolkit%2Finternal%2Fvisuals%2Fimage-atlas-manager.cpp;h=577a433b4442b0f3c17461bbb0dcc196fae533b6;hp=9697e5021395abe71a10eb8e719512246f7f7cee;hb=48000ec3ab1ca2d1f8001d192112e32357bb1dfc;hpb=257a9991486e4e05335212b21ecc1f5a0aacbc63 diff --git a/dali-toolkit/internal/visuals/image-atlas-manager.cpp b/dali-toolkit/internal/visuals/image-atlas-manager.cpp index 9697e50..577a433 100644 --- a/dali-toolkit/internal/visuals/image-atlas-manager.cpp +++ b/dali-toolkit/internal/visuals/image-atlas-manager.cpp @@ -1,5 +1,5 @@ - /* - * Copyright (c) 2016 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. @@ -19,27 +19,26 @@ #include "image-atlas-manager.h" // EXTERNAL HEADER -#include -#include +#include + +// INTERNAL HEADERS +#include namespace Dali { - namespace Toolkit { - namespace Internal { - namespace { -const uint32_t DEFAULT_ATLAS_SIZE( 1024u ); // this size can fit 8 by 8 images of average size 128*128 -const uint32_t MAX_ITEM_SIZE( 512u ); -const uint32_t MAX_ITEM_AREA( MAX_ITEM_SIZE*MAX_ITEM_SIZE ); -} +const uint32_t DEFAULT_ATLAS_SIZE(1024u); // this size can fit 8 by 8 images of average size 128*128 +const uint32_t MAX_ITEM_SIZE(512u); +const uint32_t MAX_ITEM_AREA(MAX_ITEM_SIZE* MAX_ITEM_SIZE); +} // namespace ImageAtlasManager::ImageAtlasManager() -: mBrokenImageUrl( "" ) +: mBrokenImageUrl("") { } @@ -47,31 +46,48 @@ ImageAtlasManager::~ImageAtlasManager() { } -TextureSet ImageAtlasManager::Add( Vector4& textureRect, - const std::string& url, - ImageDimensions size, - FittingMode::Type fittingMode, - bool orientationCorrection ) +bool ImageAtlasManager::CheckAtlasAvailable(const VisualUrl& url, const ImageDimensions& size) const +{ + ImageDimensions dimensions = size; + ImageDimensions zero; + if(size == zero) + { + dimensions = Dali::GetClosestImageSize(url.GetUrl()); + } + + // big image, atlasing is not applied + if(static_cast(dimensions.GetWidth()) * static_cast(dimensions.GetHeight()) > MAX_ITEM_AREA || dimensions.GetWidth() > DEFAULT_ATLAS_SIZE || dimensions.GetHeight() > DEFAULT_ATLAS_SIZE) + { + return false; + } + return true; +} + +TextureSet ImageAtlasManager::Add(Vector4& textureRect, + const VisualUrl& url, + ImageDimensions& size, + FittingMode::Type fittingMode, + bool orientationCorrection, + AtlasUploadObserver* atlasUploadObserver) { ImageDimensions dimensions = size; ImageDimensions zero; - if( size == zero ) + if(size == zero) { - dimensions = ResourceImage::GetImageSize( url ); + dimensions = Dali::GetClosestImageSize(url.GetUrl()); } // big image, atlasing is not applied - if( static_cast(dimensions.GetWidth()) * static_cast(dimensions.GetHeight()) > MAX_ITEM_AREA - || dimensions.GetWidth()>DEFAULT_ATLAS_SIZE - || dimensions.GetHeight()>DEFAULT_ATLAS_SIZE) + if(static_cast(dimensions.GetWidth()) * static_cast(dimensions.GetHeight()) > MAX_ITEM_AREA || dimensions.GetWidth() > DEFAULT_ATLAS_SIZE || dimensions.GetHeight() > DEFAULT_ATLAS_SIZE) { return TextureSet(); } + size = dimensions; unsigned int i = 0; - for( AtlasContainer::iterator iter = mAtlasList.begin(); iter != mAtlasList.end(); ++iter) + for(AtlasContainer::iterator iter = mAtlasList.begin(); iter != mAtlasList.end(); ++iter) { - if( (*iter).Upload( textureRect, url, size, fittingMode, orientationCorrection ) ) + if(GetImplementation(*iter).Upload(textureRect, url, size, fittingMode, orientationCorrection, atlasUploadObserver)) { return mTextureSetList[i]; } @@ -79,26 +95,23 @@ TextureSet ImageAtlasManager::Add( Vector4& textureRect, } CreateNewAtlas(); - mAtlasList.back().Upload( textureRect, url, size, fittingMode, orientationCorrection ); + GetImplementation(mAtlasList.back()).Upload(textureRect, url, size, fittingMode, orientationCorrection, atlasUploadObserver); return mTextureSetList.back(); } -TextureSet ImageAtlasManager::Add( Vector4& textureRect, - PixelData pixelData ) +TextureSet ImageAtlasManager::Add(Vector4& textureRect, + PixelData pixelData) { - // big buffer, atlasing is not applied - if( static_cast(pixelData.GetWidth()) * static_cast(pixelData.GetHeight()) > MAX_ITEM_AREA - || pixelData.GetWidth()>DEFAULT_ATLAS_SIZE - || pixelData.GetHeight()>DEFAULT_ATLAS_SIZE ) + if(static_cast(pixelData.GetWidth()) * static_cast(pixelData.GetHeight()) > MAX_ITEM_AREA || pixelData.GetWidth() > DEFAULT_ATLAS_SIZE || pixelData.GetHeight() > DEFAULT_ATLAS_SIZE) { return TextureSet(); } unsigned int i = 0; - for( AtlasContainer::iterator iter = mAtlasList.begin(); iter != mAtlasList.end(); ++iter) + for(AtlasContainer::iterator iter = mAtlasList.begin(); iter != mAtlasList.end(); ++iter) { - if( (*iter).Upload( textureRect, pixelData ) ) + if((*iter).Upload(textureRect, pixelData)) { return mTextureSetList[i]; } @@ -106,17 +119,16 @@ TextureSet ImageAtlasManager::Add( Vector4& textureRect, } CreateNewAtlas(); - mAtlasList.back().Upload( textureRect, pixelData ); + mAtlasList.back().Upload(textureRect, pixelData); return mTextureSetList.back(); - } -void ImageAtlasManager::Remove( TextureSet textureSet, const Vector4& textureRect ) +void ImageAtlasManager::Remove(TextureSet textureSet, const Vector4& textureRect) { unsigned int i = 0; - for( TextureSetContainer::iterator iter = mTextureSetList.begin(); iter != mTextureSetList.end(); ++iter) + for(TextureSetContainer::iterator iter = mTextureSetList.begin(); iter != mTextureSetList.end(); ++iter) { - if( (*iter) == textureSet ) + if((*iter) == textureSet) { mAtlasList[i].Remove(textureRect); return; @@ -125,9 +137,9 @@ void ImageAtlasManager::Remove( TextureSet textureSet, const Vector4& textureRec } } -void ImageAtlasManager::SetBrokenImage( const std::string& brokenImageUrl ) +void ImageAtlasManager::SetBrokenImage(const std::string& brokenImageUrl) { - if( !brokenImageUrl.empty() ) + if(!brokenImageUrl.empty()) { mBrokenImageUrl = brokenImageUrl; } @@ -135,15 +147,15 @@ void ImageAtlasManager::SetBrokenImage( const std::string& brokenImageUrl ) void ImageAtlasManager::CreateNewAtlas() { - Toolkit::ImageAtlas newAtlas = Toolkit::ImageAtlas::New( DEFAULT_ATLAS_SIZE, DEFAULT_ATLAS_SIZE ); - if( !mBrokenImageUrl.empty() ) + Toolkit::ImageAtlas newAtlas = Toolkit::ImageAtlas::New(DEFAULT_ATLAS_SIZE, DEFAULT_ATLAS_SIZE); + if(!mBrokenImageUrl.empty()) { - newAtlas.SetBrokenImage( mBrokenImageUrl ); + newAtlas.SetBrokenImage(mBrokenImageUrl); } - mAtlasList.push_back( newAtlas ); + mAtlasList.push_back(newAtlas); TextureSet textureSet = TextureSet::New(); - TextureSetImage( textureSet, 0u, newAtlas.GetAtlas() ); - mTextureSetList.push_back( textureSet ); + textureSet.SetTexture(0u, newAtlas.GetAtlas()); + mTextureSetList.push_back(textureSet); } } // namespace Internal