X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=blobdiff_plain;f=dali-toolkit%2Finternal%2Fimage-loader%2Fimage-atlas-impl.h;h=49dd3efdc7c058246497bc5ecc92da241f0393e5;hp=34924d3327f2db07750e955cbe449cea27429233;hb=9ddd5fea6278d06b8874988498c7c4c6508750ba;hpb=bd75dc4cad4ce62cc9206abf19280b40825b9726 diff --git a/dali-toolkit/internal/image-loader/image-atlas-impl.h b/dali-toolkit/internal/image-loader/image-atlas-impl.h index 34924d3..49dd3ef 100644 --- a/dali-toolkit/internal/image-loader/image-atlas-impl.h +++ b/dali-toolkit/internal/image-loader/image-atlas-impl.h @@ -1,8 +1,8 @@ -#ifndef __DALI_TOOLKIT_IMAGE_ATLAS_IMPL_H__ -#define __DALI_TOOLKIT_IMAGE_ATLAS_IMPL_H__ +#ifndef DALI_TOOLKIT_IMAGE_ATLAS_IMPL_H +#define DALI_TOOLKIT_IMAGE_ATLAS_IMPL_H /* - * Copyright (c) 2015 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. @@ -18,16 +18,15 @@ */ // EXTERNAL INCLUDES +#include #include #include #include -#include -#include // INTERNAL INCLUDES #include -#include #include +#include namespace Dali { @@ -35,28 +34,30 @@ class EventThreadCallback; namespace Toolkit { - namespace Internal { - class ImageAtlas : public BaseObject, public ConnectionTracker { public: - typedef Toolkit::ImageAtlas::SizeType SizeType; /** + * @copydoc ImageAtlas::PackToAtlas( const std::vector&, Dali::Vector& ) + */ + static Texture PackToAtlas(const std::vector& pixelData, Dali::Vector& textureRects); + + /** * Constructor * @param [in] width The atlas width in pixels. * @param [in] height The atlas height in pixels. * @param [in] pixelFormat The pixel format. */ - ImageAtlas( SizeType width, SizeType height, Pixel::Format pixelFormat ); + ImageAtlas(SizeType width, SizeType height, Pixel::Format pixelFormat); /** * @copydoc Toolkit::ImageAtlas::New */ - static IntrusivePtr New( SizeType width, SizeType height, Pixel::Format pixelFormat ); + static IntrusivePtr New(SizeType width, SizeType height, Pixel::Format pixelFormat); /** * @copydoc Toolkit::ImageAtlas::GetAtlas @@ -71,72 +72,83 @@ public: /** * @copydoc Toolkit::ImageAtlas::SetBrokenImage */ - void SetBrokenImage( const std::string& brokenImageUrl ); + void SetBrokenImage(const std::string& brokenImageUrl); /** * @copydoc Toolkit::ImageAtlas::Upload( Vector4&, const std::string&, ImageDimensions,FittingMode::Type, bool ) */ - bool Upload( Vector4& textureRect, - const std::string& url, - ImageDimensions size, - FittingMode::Type fittingMode, - bool orientationCorrection); + bool Upload(Vector4& textureRect, + const std::string& url, + ImageDimensions size, + FittingMode::Type fittingMode, + bool orientationCorrection, + AtlasUploadObserver* atlasUploadObserver); /** * @copydoc Toolkit::ImageAtlas::Upload( Vector4&, PixelData ) */ - bool Upload( Vector4& textureRect, PixelData pixelData ); + bool Upload(Vector4& textureRect, PixelData pixelData); /** * @copydoc Toolkit::ImageAtlas::Remove */ - void Remove( const Vector4& textureRect ); + void Remove(const Vector4& textureRect); -protected: + /** + * Resets the destroying observer pointer so that we know not to call methods of this object any more. + */ + void ObserverDestroyed(AtlasUploadObserver* observer); +protected: /** * Destructor */ ~ImageAtlas(); private: - /** * @copydoc PixelDataRequester::ProcessPixels */ - void UploadToAtlas( unsigned int id, PixelData pixelData ); + void UploadToAtlas(uint32_t id, PixelData pixelData); /** * Upload broken image * * @param[in] area The pixel area for uploading. */ - void UploadBrokenImage( const Rect& area ); + void UploadBrokenImage(const Rect& area); // Undefined - ImageAtlas( const ImageAtlas& imageAtlas); + ImageAtlas(const ImageAtlas& imageAtlas); // Undefined - ImageAtlas& operator=( const ImageAtlas& imageAtlas ); + ImageAtlas& operator=(const ImageAtlas& imageAtlas); private: - - struct IdRectPair + /** + * Each loading task( identified with an ID ) is associated with a rect region for packing the loaded pixel data into the atlas, + * and an AtlasUploadObserver whose UploadCompleted method should get executed once the sub texture is ready. + */ + struct LoadingTaskInfo { - IdRectPair( unsigned short loadTaskId, - unsigned int packPositionX, - unsigned int packPositionY, - unsigned int width, - unsigned int height ) - : loadTaskId( loadTaskId ), - packRect( packPositionX, packPositionY, width, height ) - {} - - unsigned short loadTaskId; - Rect packRect; + LoadingTaskInfo(unsigned short loadTaskId, + unsigned int packPositionX, + unsigned int packPositionY, + unsigned int width, + unsigned int height, + AtlasUploadObserver* observer) + : loadTaskId(loadTaskId), + packRect(packPositionX, packPositionY, width, height), + observer(observer) + { + } + + unsigned short loadTaskId; + Rect packRect; + AtlasUploadObserver* observer; }; - OwnerContainer mIdRectContainer; + OwnerContainer mLoadingTaskInfoContainer; Texture mAtlas; AtlasPacker mPacker; @@ -146,23 +158,22 @@ private: float mWidth; float mHeight; Pixel::Format mPixelFormat; - }; } // namespace Internal -inline const Internal::ImageAtlas& GetImplementation( const Toolkit::ImageAtlas& imageAtlas ) +inline const Internal::ImageAtlas& GetImplementation(const Toolkit::ImageAtlas& imageAtlas) { - DALI_ASSERT_ALWAYS( imageAtlas && "ImageAtlas handle is empty" ); + DALI_ASSERT_ALWAYS(imageAtlas && "ImageAtlas handle is empty"); const BaseObject& handle = imageAtlas.GetBaseObject(); return static_cast(handle); } -inline Internal::ImageAtlas& GetImplementation( Toolkit::ImageAtlas& imageAtlas ) +inline Internal::ImageAtlas& GetImplementation(Toolkit::ImageAtlas& imageAtlas) { - DALI_ASSERT_ALWAYS( imageAtlas && "ImageAtlas handle is empty" ); + DALI_ASSERT_ALWAYS(imageAtlas && "ImageAtlas handle is empty"); BaseObject& handle = imageAtlas.GetBaseObject(); @@ -173,4 +184,4 @@ inline Internal::ImageAtlas& GetImplementation( Toolkit::ImageAtlas& imageAtlas } // namespace Dali -#endif /* __DALI_TOOLKIT_IMAGE_ATLAS_IMPL_H__ */ +#endif // DALI_TOOLKIT_IMAGE_ATLAS_IMPL_H