1 #ifndef __DALI_INTERNAL_NINE_PATCH_IMAGE_H__
2 #define __DALI_INTERNAL_NINE_PATCH_IMAGE_H__
5 * Copyright (c) 2014 Samsung Electronics Co., Ltd.
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
22 #include <dali/public-api/images/nine-patch-image.h>
23 #include <dali/internal/event/images/resource-image-impl.h>
24 #include <dali/internal/event/images/buffer-image-impl.h>
33 typedef IntrusivePtr<NinePatchImage> NinePatchImagePtr;
36 class ResourceManager;
44 * NinePatchImage represents an image resource that can be added to actors etc.
45 * It's image data has a border which determines stretch and fill areas
46 * Its pixel buffer data is loaded synchronously from file.
48 class NinePatchImage : public ResourceImage
53 * Create a new NinePatchImage.
54 * Also a pixel buffer for image data is allocated.
55 * Dali has ownership of the buffer.
56 * @param [in] filename File to load synchronously into buffer
57 * @param [in] attributes Image attributes of the file
58 * @param [in] releasePol optionally relase memory when image is not visible on screen (default: keep image data until Image object is alive).
60 static NinePatchImagePtr New( const std::string& filename,
61 const ImageAttributes& attributes,
62 ReleasePolicy releasePol = IMAGE_RELEASE_POLICY_DEFAULT );
65 * Create a new NinePatchImage
66 * For better performance and portability use power of two dimensions.
67 * The maximum size of the image is limited by GL_MAX_TEXTURE_SIZE.
68 * @param [in] filename File to load synchronously into buffer
69 * @param [in] attributes Image attributes of the file
70 * @param [in] releasePol optionally relase memory when image is not visible on screen (default: keep image data until Image object is alive).
72 NinePatchImage( const std::string& filename,
73 const ImageAttributes& attributes,
74 ReleasePolicy releasePol = IMAGE_RELEASE_POLICY_DEFAULT );
77 * Convert Image object to a 9 patch image object if possible.
78 * @param[in] image The image to convert
79 * @return A pointer to the 9 patch image object, or NULL
80 * if the conversion is not possible.
82 static NinePatchImage* DownCast( Image* image);
87 * A reference counted object may only be deleted by calling Unreference()
89 virtual ~NinePatchImage();
93 * Get the stretch borders
94 * @return The border in pixels from the left, top, right, and bottom of the image respectively.
96 Vector4 GetStretchBorders();
99 * Get the child rectangle
100 * @return the position and size of the child rectangle
102 Rect<int> GetChildRectangle();
105 * @brief Create a cropped image from the bitmap with the 1 pixel border cropped off.
106 * This does not change the internal bitmap.
108 * @return the cropped bitmap.
110 BufferImagePtr CreateCroppedBufferImage();
113 protected: // From Resource
115 * @copydoc Dali::Internal::Image::Connect
117 virtual void Connect();
120 * @copydoc Dali::Internal::Image::Disconnect
122 virtual void Disconnect();
126 * Read the borders of the bitmap and determine the child area
127 * and stretch borders
132 ResourceClient* mResourceClient;
133 Integration::BitmapPtr mBitmap;
134 Vector4 mStretchBorders;
135 Rect<int> mChildRectangle;
139 } // namespace Internal
142 * Helper methods for public API.
144 inline Internal::NinePatchImage& GetImplementation(Dali::NinePatchImage& handle)
146 DALI_ASSERT_ALWAYS( handle && "NinePatchImage handle is empty" );
148 BaseObject& image = handle.GetBaseObject();
150 return static_cast<Internal::NinePatchImage&>(image);
153 inline const Internal::NinePatchImage& GetImplementation(const Dali::NinePatchImage& handle)
155 DALI_ASSERT_ALWAYS( handle && "NinePatchImage handle is empty" );
157 const BaseObject& image = handle.GetBaseObject();
159 return static_cast<const Internal::NinePatchImage&>(image);
164 #endif // __DALI_INTERNAL_NINE_PATCH_IMAGE_H__