Merge "Fix the framebuffer texture context loss handling" into tizen
[platform/core/uifw/dali-core.git] / dali / public-api / images / image.cpp
1 /*
2  * Copyright (c) 2014 Samsung Electronics Co., Ltd.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  *
16  */
17
18 // CLASS HEADER
19 #include <dali/public-api/images/image.h>
20
21 // INTERNAL INCLUDES
22 #include <dali/public-api/images/image-attributes.h>
23 #include <dali/public-api/math/vector2.h>
24 #include <dali/internal/event/images/image-impl.h>
25 #include <dali/internal/event/common/thread-local-storage.h>
26 #include <dali/integration-api/platform-abstraction.h>
27
28 namespace Dali
29 {
30
31 const char* const Image::SIGNAL_IMAGE_LOADING_FINISHED = "image-loading-finished";
32 const char* const Image::SIGNAL_IMAGE_UPLOADED = "uploaded";
33
34 Vector2 Image::GetImageSize(const std::string fileName)
35 {
36   Vector2 size;
37   Internal::ThreadLocalStorage::Get().GetPlatformAbstraction().GetClosestImageSize(fileName, ImageAttributes::DEFAULT_ATTRIBUTES, size);
38   return size;
39 }
40
41 Image::Image()
42 {
43 }
44
45 Image::Image(Internal::Image* internal) : BaseHandle(internal)
46 {
47 }
48
49 Image::~Image()
50 {
51 }
52
53 Image::Image(const Image& handle)
54 : BaseHandle(handle)
55 {
56 }
57
58 Image& Image::operator=(const Image& rhs)
59 {
60   BaseHandle::operator=(rhs);
61   return *this;
62 }
63
64 Image& Image::operator=(BaseHandle::NullType* rhs)
65 {
66   DALI_ASSERT_ALWAYS( (rhs == NULL) && "Can only assign NULL pointer to handle");
67   Reset();
68   return *this;
69 }
70
71 Image Image::New(const std::string& filename)
72 {
73   Internal::ImagePtr internal = Internal::Image::New( filename,
74                                                       Dali::ImageAttributes::DEFAULT_ATTRIBUTES );
75   return Image(internal.Get());
76 }
77
78 Image Image::New(const std::string& filename, LoadPolicy loadPol, ReleasePolicy releasePol)
79 {
80   Internal::ImagePtr internal = Internal::Image::New( filename,
81                                                       Dali::ImageAttributes::DEFAULT_ATTRIBUTES,
82                                                       loadPol, releasePol );
83   return Image(internal.Get());
84 }
85
86 Image Image::New(const std::string& filename, const ImageAttributes& attributes)
87 {
88   Internal::ImagePtr internal = Internal::Image::New(filename, attributes);
89   return Image(internal.Get());
90 }
91
92 Image Image::New(const std::string& filename, const ImageAttributes& attributes, LoadPolicy loadPol, ReleasePolicy releasePol)
93 {
94   Internal::ImagePtr internal = Internal::Image::New(filename, attributes, loadPol, releasePol);
95   return Image(internal.Get());
96 }
97
98 Image Image::NewDistanceField(const std::string& filename)
99 {
100   ImageAttributes attributes = ImageAttributes::NewDistanceField();
101   Internal::ImagePtr internal = Internal::Image::New(filename, attributes);
102   return Image(internal.Get());
103 }
104
105 Image Image::NewDistanceField(const std::string& filename, LoadPolicy loadPol, ReleasePolicy releasePol)
106 {
107   ImageAttributes attributes = ImageAttributes::NewDistanceField();
108   Internal::ImagePtr internal = Internal::Image::New(filename, attributes, loadPol, releasePol);
109   return Image(internal.Get());
110 }
111
112 Image Image::NewDistanceField(const std::string& filename, const ImageAttributes& attributes)
113 {
114   DALI_ASSERT_DEBUG(attributes.IsDistanceField());
115
116   Internal::ImagePtr internal = Internal::Image::New(filename, attributes);
117   return Image(internal.Get());
118 }
119
120 Image Image::NewDistanceField(const std::string& filename, const ImageAttributes& attributes, LoadPolicy loadPol, ReleasePolicy releasePol)
121 {
122   DALI_ASSERT_DEBUG(attributes.IsDistanceField());
123
124   Internal::ImagePtr internal = Internal::Image::New(filename, attributes, loadPol, releasePol);
125   return Image(internal.Get());
126 }
127
128 Image Image::New(NativeImage& nativeImg)
129 {
130   Internal::ImagePtr internal = Internal::Image::New(nativeImg);
131   return Image(internal.Get());
132 }
133
134 Image Image::New(NativeImage& nativeImg, LoadPolicy loadPol, ReleasePolicy releasePol)
135 {
136   Internal::ImagePtr internal = Internal::Image::New(nativeImg, loadPol, releasePol);
137   return Image(internal.Get());
138 }
139
140 Image Image::DownCast( BaseHandle handle )
141 {
142   return Image( dynamic_cast<Dali::Internal::Image*>(handle.GetObjectPtr()) );
143 }
144
145 LoadingState Image::GetLoadingState() const
146 {
147   return GetImplementation(*this).GetLoadingState();
148 }
149
150 ImageAttributes Image::GetAttributes() const
151 {
152   return GetImplementation(*this).GetAttributes();
153 }
154
155 std::string Image::GetFilename() const
156 {
157   return GetImplementation(*this).GetFilename();
158 }
159
160 Image::LoadPolicy Image::GetLoadPolicy() const
161 {
162   return GetImplementation(*this).GetLoadPolicy();
163 }
164
165 Image::ReleasePolicy Image::GetReleasePolicy() const
166 {
167   return GetImplementation(*this).GetReleasePolicy();
168 }
169
170 unsigned int Image::GetWidth() const
171 {
172   return GetImplementation(*this).GetWidth();
173 }
174
175 unsigned int Image::GetHeight() const
176 {
177   return GetImplementation(*this).GetHeight();
178 }
179
180 void Image::Reload()
181 {
182   GetImplementation(*this).Reload();
183 }
184
185 Image::ImageSignalV2& Image::LoadingFinishedSignal()
186 {
187   return GetImplementation(*this).LoadingFinishedSignal();
188 }
189
190 Image::ImageSignalV2& Image::UploadedSignal()
191 {
192   return GetImplementation(*this).UploadedSignal();
193 }
194
195 } // namespace Dali