2 * Copyright (c) 2014 Samsung Electronics Co., Ltd.
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
19 #include <dali/internal/common/image-attributes.h>
29 const ImageAttributes ImageAttributes::DEFAULT_ATTRIBUTES;
31 struct ImageAttributes::ImageAttributesImpl
36 scaling(Dali::FittingMode::SHRINK_TO_FIT),
37 filtering(SamplingMode::BOX),
38 mOrientationCorrection(false)
42 ~ImageAttributesImpl()
46 ImageAttributesImpl(const ImageAttributesImpl& rhs)
49 scaling( rhs.scaling ),
50 filtering( rhs.filtering ),
51 mOrientationCorrection( rhs.mOrientationCorrection )
55 ImageAttributesImpl& operator=(const ImageAttributesImpl& rhs)
61 scaling = rhs.scaling;
62 filtering = rhs.filtering;
64 mOrientationCorrection = rhs.mOrientationCorrection;
70 unsigned int width : 16; ///< image width in pixels
71 unsigned int height : 16; ///< image height in pixels
72 ScalingMode scaling : 3; ///< scaling option, ShrinkToFit is default
73 FilterMode filtering : 3; ///< filtering option. Box is the default
74 bool mOrientationCorrection : 1; ///< If true, image pixels are reordered according to orientation metadata on load.
75 bool isDistanceField : 1; ///< true, if the image is a distancefield. Default is false.
79 ImageAttributes::ImageAttributes()
80 : impl( new ImageAttributesImpl() )
84 ImageAttributes::ImageAttributes(const ImageAttributes& rhs)
85 : impl( new ImageAttributesImpl(*rhs.impl) )
89 ImageAttributes& ImageAttributes::operator=(const ImageAttributes& rhs)
96 ImageAttributes::~ImageAttributes()
101 void ImageAttributes::SetSize(unsigned int width, unsigned int height)
104 impl->height = height;
107 void ImageAttributes::SetSize( const Size& size )
109 impl->width = size.width;
110 impl->height = size.height;
113 void ImageAttributes::SetScalingMode( ScalingMode scale )
115 impl->scaling = scale;
118 void ImageAttributes::SetFilterMode( FilterMode filtering )
120 impl->filtering = filtering;
123 void ImageAttributes::SetOrientationCorrection(const bool enabled)
125 impl->mOrientationCorrection = enabled;
128 void ImageAttributes::Reset( ImageDimensions dimensions, ScalingMode scaling, FilterMode sampling, bool orientationCorrection )
130 impl->width = dimensions.GetWidth();
131 impl->height = dimensions.GetHeight();
132 impl->scaling = scaling;
133 impl->filtering = sampling;
134 impl->mOrientationCorrection = orientationCorrection;
137 unsigned int ImageAttributes::GetWidth() const
142 unsigned int ImageAttributes::GetHeight() const
147 Size ImageAttributes::GetSize() const
149 return Size(impl->width, impl->height);
152 ImageAttributes::ScalingMode ImageAttributes::GetScalingMode() const
154 return impl->scaling;
157 ImageAttributes::FilterMode ImageAttributes::GetFilterMode() const
159 return impl->filtering;
162 bool ImageAttributes::GetOrientationCorrection() const
164 return impl->mOrientationCorrection;
167 ImageAttributes ImageAttributes::New()
169 return ImageAttributes();
172 ImageAttributes ImageAttributes::New(unsigned int imageWidth, unsigned int imageHeight)
174 ImageAttributes attributes;
175 attributes.impl->width = imageWidth;
176 attributes.impl->height = imageHeight;
181 * Less then comparison operator.
182 * @param [in] a parameter tested
183 * @param [in] b parameter tested
185 bool operator<(const ImageAttributes& a, const ImageAttributes& b)
187 // Bail out if one is distance field and the other is not.
188 if (a.impl->isDistanceField != b.impl->isDistanceField)
190 return a.impl->isDistanceField < b.impl->isDistanceField;
193 if (a.impl->width != b.impl->width)
195 return a.impl->width < b.impl->width;
198 if (a.impl->height != b.impl->height)
200 return a.impl->height < b.impl->height;
203 if (a.impl->mOrientationCorrection != b.impl->mOrientationCorrection)
205 return a.impl->mOrientationCorrection < b.impl->mOrientationCorrection;
208 if (a.impl->scaling != b.impl->scaling)
210 return a.impl->scaling < b.impl->scaling;
213 if (a.impl->filtering != b.impl->filtering)
215 return a.impl->filtering < b.impl->filtering;
223 * Equal to comparison operator.
224 * @param [in] a parameter tested for equality
225 * @param [in] b parameter tested for equality
227 bool operator==(const ImageAttributes& a, const ImageAttributes& b)
229 return a.impl->width == b.impl->width &&
230 a.impl->height == b.impl->height &&
231 a.impl->mOrientationCorrection == b.impl->mOrientationCorrection &&
232 a.impl->scaling == b.impl->scaling &&
233 a.impl->filtering == b.impl->filtering;
237 * Not equal to comparison operator.
238 * @param [in] a parameter tested for equality
239 * @param [in] b parameter tested for equality
241 bool operator!=(const ImageAttributes& a, const ImageAttributes& b)
246 } // namespace Internal