common: code refactoring
[platform/core/graphics/tizenvg.git] / src / lib / tvgLinearGradient.cpp
1 /*
2  * Copyright (c) 2020 Samsung Electronics Co., Ltd All Rights Reserved
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 #ifndef _TVG_LINEAR_GRADIENT_CPP_
18 #define _TVG_LINEAR_GRADIENT_CPP_
19
20 #include "tvgCommon.h"
21
22 /************************************************************************/
23 /* Internal Class Implementation                                        */
24 /************************************************************************/
25
26 struct LinearGradient::Impl
27 {
28     float x1, y1, x2, y2;
29 };
30
31
32 /************************************************************************/
33 /* External Class Implementation                                        */
34 /************************************************************************/
35
36 LinearGradient::LinearGradient():pImpl(make_unique<Impl>())
37 {
38     _id = FILL_ID_LINEAR;
39 }
40
41
42 LinearGradient::~LinearGradient()
43 {
44 }
45
46
47 Result LinearGradient::linear(float x1, float y1, float x2, float y2) noexcept
48 {
49     if (fabsf(x2 - x1) < FLT_EPSILON && fabsf(y2 - y1) < FLT_EPSILON)
50         return Result::InvalidArguments;
51
52     IMPL->x1 = x1;
53     IMPL->y1 = y1;
54     IMPL->x2 = x2;
55     IMPL->y2 = y2;
56
57     return Result::Success;
58 }
59
60
61 Result LinearGradient::linear(float* x1, float* y1, float* x2, float* y2) const noexcept
62 {
63     if (x1) *x1 = IMPL->x1;
64     if (x2) *x2 = IMPL->x2;
65     if (y1) *y1 = IMPL->y1;
66     if (y2) *y2 = IMPL->y2;
67
68     return Result::Success;
69 }
70
71
72 unique_ptr<LinearGradient> LinearGradient::gen() noexcept
73 {
74     auto fill = unique_ptr<LinearGradient>(new LinearGradient);
75     assert(fill);
76
77     return fill;
78 }
79
80 #endif /* _TVG_LINEAR_GRADIENT_CPP_ */