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 Flora License, Version 1.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://floralicense.org/license/
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.
21 #include <dali/public-api/images/nine-patch-image.h>
22 #include <dali/internal/event/images/bitmap-image-impl.h>
31 typedef IntrusivePtr<NinePatchImage> NinePatchImagePtr;
34 class ResourceManager;
42 * NinePatchImage represents an image resource that can be added to actors etc.
43 * It's image data has a border which determines stretch and fill areas
44 * Its pixel buffer data is loaded synchronously from file.
46 class NinePatchImage : public Image
51 * Create a new NinePatchImage.
52 * Also a pixel buffer for image data is allocated.
53 * Dali has ownership of the buffer.
54 * @param [in] filename File to load synchronously into buffer
55 * @param [in] attributes Image attributes of the file
56 * @param [in] loadPol controls time of loading a resource from the filesystem (default: load when Image is created).
57 * @param [in] releasePol optionally relase memory when image is not visible on screen (default: keep image data until Image object is alive).
59 static NinePatchImagePtr New( const std::string& filename,
60 const ImageAttributes& attributes,
61 LoadPolicy loadPol = ImageLoadPolicyDefault,
62 ReleasePolicy releasePol = ImageReleasePolicyDefault );
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] loadPol controls time of loading a resource from the filesystem (default: load when Image is created).
71 * @param [in] releasePol optionally relase memory when image is not visible on screen (default: keep image data until Image object is alive).
73 NinePatchImage( const std::string& filename,
74 const ImageAttributes& attributes,
75 LoadPolicy loadPol = ImageLoadPolicyDefault,
76 ReleasePolicy releasePol = ImageReleasePolicyDefault );
79 * Convert Image object to a 9 patch image object if possible.
80 * @param[in] image The image to convert
81 * @return A pointer to the 9 patch image object, or NULL
82 * if the conversion is not possible.
84 static NinePatchImage* GetNinePatchImage( Image* image);
89 * A reference counted object may only be deleted by calling Unreference()
91 virtual ~NinePatchImage();
95 * Get the stretch borders
96 * @return The border in pixels from the left, top, right, and bottom of the image respectively.
98 Vector4 GetStretchBorders();
101 * Get the child rectangle
102 * @return the position and size of the child rectangle
104 Rect<int> GetChildRectangle();
107 * @brief Create a cropped image from the bitmap with the 1 pixel border cropped off.
108 * This does not change the internal bitmap.
110 * @return the cropped bitmap.
112 BitmapImagePtr CreateCroppedBitmapImage();
115 protected: // From Resource
117 * @copydoc Dali::Internal::Image::Connect
119 virtual void Connect();
122 * @copydoc Dali::Internal::Image::Disconnect
124 virtual void Disconnect();
128 * Read the borders of the bitmap and determine the child area
129 * and stretch borders
134 ResourceClient* mResourceClient;
135 Integration::BitmapPtr mBitmap;
136 SceneGraph::UpdateManager* mUpdateManager;
137 Vector4 mStretchBorders;
138 Rect<int> mChildRectangle;
142 } // namespace Internal
145 * Helper methods for public API.
147 inline Internal::NinePatchImage& GetImplementation(Dali::NinePatchImage& handle)
149 DALI_ASSERT_ALWAYS( handle && "NinePatchImage handle is empty" );
151 BaseObject& image = handle.GetBaseObject();
153 return static_cast<Internal::NinePatchImage&>(image);
156 inline const Internal::NinePatchImage& GetImplementation(const Dali::NinePatchImage& handle)
158 DALI_ASSERT_ALWAYS( handle && "NinePatchImage handle is empty" );
160 const BaseObject& image = handle.GetBaseObject();
162 return static_cast<const Internal::NinePatchImage&>(image);
167 #endif // __DALI_INTERNAL_NINE_PATCH_IMAGE_H__