1 #ifndef __DALI_TOOLKIT_IMAGE_ATLAS_H__
2 #define __DALI_TOOLKIT_IMAGE_ATLAS_H__
4 * Copyright (c) 2015 Samsung Electronics Co., Ltd.
6 * Licensed under the Apache License, Version 2.0 (the "License");
7 * you may not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
10 * http://www.apache.org/licenses/LICENSE-2.0
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
23 #include <dali/public-api/object/base-handle.h>
24 #include <dali/public-api/images/image.h>
25 #include <dali/public-api/images/image-operations.h>
26 #include <dali/public-api/images/pixel.h>
34 namespace Internal DALI_INTERNAL
40 * @brief An ImageAtlas is a large image containing multiple smaller images.
42 * Only images with url provided are supported for uploading.
43 * The image are loaded by a worker thread to avoid blocking the main event thread.
45 class DALI_IMPORT_API ImageAtlas : public BaseHandle
49 typedef uint32_t SizeType;
54 * @brief Create a new ImageAtlas.
56 * @param [in] width The atlas width in pixels.
57 * @param [in] height The atlas height in pixels.
58 * @param [in] pixelFormat The pixel format (rgba 32 bit by default).
59 * @return A handle to a new ImageAtlas.
61 static ImageAtlas New( SizeType width, SizeType height,
62 Pixel::Format pixelFormat = Pixel::RGBA8888 );
65 * @brief Create an empty handle.
67 * Calling member functions of an empty handle is not allowed.
77 * @brief This copy constructor is required for (smart) pointer semantics.
79 * @param [in] handle A reference to the copied handle
81 ImageAtlas( const ImageAtlas& handle );
84 * @brief This assignment operator is required for (smart) pointer semantics.
86 * @param [in] rhs A reference to the copied handle
87 * @return A reference to this
89 ImageAtlas& operator=( const ImageAtlas& handle );
92 * @brief Get the atlas image.
94 * This atlas image is still valid after destroying the ImageAtlas object.
96 * @return the atlas image with type of Dali::Atlas
101 * @brief Set the broken image which is used to replace the image if loading fails.
103 * @param[in] brokenImageUrl The url of the broken image.
105 void SetBrokenImage( const std::string& brokenImageUrl );
108 * @brief Upload a resource image to the atlas.
110 * @note To make the atlasing efficient, an valid size should be provided.
111 * If size is not provided, then the image file will be opened to read the actual size for loading.
112 * Do not set a size that is bigger than the actual image size, as the up-scaling is not available,
113 * the content of the area not covered by actual image is undefined, it will not be cleared.
115 * SamplingMode::BOX_THEN_LINEAR is used to sampling pixels from the input image while fitting it to desired size.
117 * @param [out] textureRect The texture area of the resource image in the atlas.
118 * @param [in] url The URL of the resource image file to use.
119 * @param [in] size The width and height to fit the loaded image to.
120 * @param [in] fittingMode The method used to fit the shape of the image before loading to the shape defined by the size parameter.
121 * @param [in] orientationCorrection Reorient the image to respect any orientation metadata in its header.
122 * @return True if there is enough space to fit this image in,false otherwise.
124 bool Upload( Vector4& textureRect,
125 const std::string& url,
126 ImageDimensions size = ImageDimensions(),
127 FittingMode::Type fittingMode = FittingMode::DEFAULT,
128 bool orientationCorrection = true );
131 * @brief Remove the image at the given rectangle.
133 * The rectangular area is marked unoccupied, so new image can be added to this area.
135 * @param [in] textureRect The texture area to be removed.
137 void Remove( const Vector4& textureRect );
139 public: // Not intended for developer use
141 explicit DALI_INTERNAL ImageAtlas( Internal::ImageAtlas* impl );
144 } // namespace Toolkit
148 #endif /* __DALI_TOOLKIT_IMAGE_ATLAS_H__ */