X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali-toolkit%2Finternal%2Fvisuals%2Fnpatch-loader.h;h=48301a6d7b336f796cf4abef00bc2d75de572646;hb=a6e73b84ce0442ad28197c3ef2ed1b48fa682508;hp=64756135da738b051d88af082cf6711165d159c5;hpb=7946b5a1a7188e31803ac8de5c4a8ea3cbc560cc;p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git diff --git a/dali-toolkit/internal/visuals/npatch-loader.h b/dali-toolkit/internal/visuals/npatch-loader.h index 6475613..48301a6 100644 --- a/dali-toolkit/internal/visuals/npatch-loader.h +++ b/dali-toolkit/internal/visuals/npatch-loader.h @@ -19,7 +19,6 @@ // EXTERNAL INCLUDES #include -#include #include #include @@ -90,8 +89,9 @@ public: /** * @brief Remove a texture matching id. - * Erase the observer from the observer list of cache. - * If the observer list is empty, the textureSet will be reset. + * Erase the observer from the observer list of cache if we need. + * This API decrease cached NPatchInfo reference. + * If the NPatchInfo reference become 0, the textureSet will be reset. * * @param [in] id cache data id * @param [in] textureObserver The NPatchVisual that requested loading. @@ -103,6 +103,60 @@ private: int32_t GetCacheIndexFromId(const NPatchData::NPatchDataId id); +private: + /** + * @brief Information of NPatchData + * It also hold ownership of NPatchData memory. + */ + struct NPatchInfo + { + NPatchInfo(NPatchData* data) + : mData(data), + mReferenceCount(1u) + { + } + ~NPatchInfo() + { + if(mData) + { + delete mData; + } + } + NPatchInfo(NPatchInfo&& info) // move constructor + { + mData = std::move(info.mData); + mReferenceCount = info.mReferenceCount; + info.mData = nullptr; + info.mReferenceCount = 0u; + } + NPatchInfo& operator=(NPatchInfo&& info) // move operator + { + mData = std::move(info.mData); + mReferenceCount = info.mReferenceCount; + info.mData = nullptr; + info.mReferenceCount = 0u; + return *this; + } + + NPatchInfo() = delete; // Do not use default constructor + NPatchInfo(const NPatchInfo& info) = delete; // Do not use copy constructor + + NPatchData* mData; + std::int16_t mReferenceCount; ///< The number of N-patch visuals that use this data. + }; + + /** + * @brief Get cached NPatchData by inputed url and border. If there is no cached data, create new one. + * @note This API increase cached NPatchInfo reference. + * + * @param [in] url to retrieve + * @param [in] border The border size of the image + * @param [in,out] preMultiplyOnLoad True if the image color should be multiplied by it's alpha. Set to false if the + * image has no alpha channel + * @return NPatchData pointer that Load function will used. + */ + NPatchData* GetNPatchData(const VisualUrl& url, const Rect& border, bool& preMultiplyOnLoad); + protected: /** * Undefined copy constructor. @@ -115,8 +169,8 @@ protected: NPatchLoader& operator=(const NPatchLoader& rhs); private: - NPatchData::NPatchDataId mCurrentNPatchDataId; - OwnerContainer mCache; + NPatchData::NPatchDataId mCurrentNPatchDataId; + std::vector mCache; }; } // namespace Internal