2 * Copyright (c) 2018 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 uint16_t width; ///< image width in pixels
71 uint16_t height; ///< image height in pixels
72 ScalingMode scaling : 3; ///< scaling option, ShrinkToFit is default
73 FilterMode filtering : 4; ///< filtering option. Box is the default
74 bool mOrientationCorrection : 1; ///< If true, image pixels are reordered according to orientation metadata on load.
78 ImageAttributes::ImageAttributes()
79 : impl( new ImageAttributesImpl() )
83 ImageAttributes::ImageAttributes(const ImageAttributes& rhs)
84 : impl( new ImageAttributesImpl(*rhs.impl) )
88 ImageAttributes& ImageAttributes::operator=(const ImageAttributes& rhs)
95 ImageAttributes::~ImageAttributes()
100 void ImageAttributes::SetSize(uint32_t width, uint32_t height)
102 impl->width = static_cast<uint16_t>( width ); // truncated
103 impl->height = static_cast<uint16_t>( height ); // truncated
106 void ImageAttributes::SetSize( const Size& size )
108 impl->width = static_cast<uint16_t>( size.width ); // truncated
109 impl->height = static_cast<uint16_t>( size.height ); // truncated
112 void ImageAttributes::SetScalingMode( ScalingMode scale )
114 impl->scaling = scale;
117 void ImageAttributes::SetFilterMode( FilterMode filtering )
119 impl->filtering = filtering;
122 void ImageAttributes::SetOrientationCorrection(const bool enabled)
124 impl->mOrientationCorrection = enabled;
127 void ImageAttributes::Reset( ImageDimensions dimensions, ScalingMode scaling, FilterMode sampling, bool orientationCorrection )
129 impl->width = dimensions.GetWidth();
130 impl->height = dimensions.GetHeight();
131 impl->scaling = scaling;
132 impl->filtering = sampling;
133 impl->mOrientationCorrection = orientationCorrection;
136 uint32_t ImageAttributes::GetWidth() const
141 uint32_t ImageAttributes::GetHeight() const
146 Size ImageAttributes::GetSize() const
148 return Size(impl->width, impl->height);
151 ImageAttributes::ScalingMode ImageAttributes::GetScalingMode() const
153 return impl->scaling;
156 ImageAttributes::FilterMode ImageAttributes::GetFilterMode() const
158 return impl->filtering;
161 bool ImageAttributes::GetOrientationCorrection() const
163 return impl->mOrientationCorrection;
166 ImageAttributes ImageAttributes::New()
168 return ImageAttributes();
172 * Less then comparison operator.
173 * @param [in] a parameter tested
174 * @param [in] b parameter tested
176 bool operator<(const ImageAttributes& a, const ImageAttributes& b)
178 if (a.impl->width != b.impl->width)
180 return a.impl->width < b.impl->width;
183 if (a.impl->height != b.impl->height)
185 return a.impl->height < b.impl->height;
188 if (a.impl->mOrientationCorrection != b.impl->mOrientationCorrection)
190 return a.impl->mOrientationCorrection < b.impl->mOrientationCorrection;
193 if (a.impl->scaling != b.impl->scaling)
195 return a.impl->scaling < b.impl->scaling;
198 if (a.impl->filtering != b.impl->filtering)
200 return a.impl->filtering < b.impl->filtering;
208 * Equal to comparison operator.
209 * @param [in] a parameter tested for equality
210 * @param [in] b parameter tested for equality
212 bool operator==(const ImageAttributes& a, const ImageAttributes& b)
214 return a.impl->width == b.impl->width &&
215 a.impl->height == b.impl->height &&
216 a.impl->mOrientationCorrection == b.impl->mOrientationCorrection &&
217 a.impl->scaling == b.impl->scaling &&
218 a.impl->filtering == b.impl->filtering;
222 * Not equal to comparison operator.
223 * @param [in] a parameter tested for equality
224 * @param [in] b parameter tested for equality
226 bool operator!=(const ImageAttributes& a, const ImageAttributes& b)
231 } // namespace Internal