• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2022 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #ifndef GEOMETRY_OFFSET_H
17 #define GEOMETRY_OFFSET_H
18 
19 #include <limits>
20 
21 #include "size.h"
22 #include "utils.h"
23 
24 namespace OHOS::uitest {
25 class Offset {
26 public:
27     Offset() = default;
28     ~Offset() = default;
Offset(double deltaX,double deltaY)29     Offset(double deltaX, double deltaY) : deltaX_(deltaX), deltaY_(deltaY) {}
30 
Resets()31     void Resets()
32     {
33         deltaX_ = 0.0;
34         deltaY_ = 0.0;
35     }
36 
Zero()37     static Offset Zero()
38     {
39         return Offset();
40     }
41 
ErrorOffset()42     static Offset ErrorOffset()
43     {
44         return Offset((std::numeric_limits<double>::max)(), (std::numeric_limits<double>::max)());
45     }
46 
IsZero()47     bool IsZero() const
48     {
49         return operator==(Offset());
50     }
51 
IsErrorOffset()52     bool IsErrorOffset() const
53     {
54         return operator==(ErrorOffset());
55     }
56 
GetX()57     double GetX() const
58     {
59         return deltaX_;
60     }
61 
GetY()62     double GetY() const
63     {
64         return deltaY_;
65     }
66 
GetDistance()67     double GetDistance() const
68     {
69         return std::sqrt((deltaX_ * deltaX_) + (deltaY_ * deltaY_));
70     }
71 
72     Offset operator+(const Offset& offset) const
73     {
74         return Offset(deltaX_ + offset.deltaX_, deltaY_ + offset.deltaY_);
75     }
76 
77     Offset operator+(const Size& size) const
78     {
79         return Offset(deltaX_ + size.Width(), deltaY_ + size.Height());
80     }
81 
82     Offset operator-(const Offset& offset) const
83     {
84         return Offset(deltaX_ - offset.deltaX_, deltaY_ - offset.deltaY_);
85     }
86 
87     Offset operator-(const Size& size) const
88     {
89         return Offset(deltaX_ - size.Width(), deltaY_ - size.Height());
90     }
91 
92     Offset operator*(double value) const
93     {
94         return Offset(deltaX_ * value, deltaY_ * value);
95     }
96 
97     Offset operator/(double value) const
98     {
99         if (NearZero(value)) {
100             return ErrorOffset();
101         }
102         return Offset(deltaX_ / value, deltaY_ / value);
103     }
104 
105     Offset& operator+=(const Offset& offset)
106     {
107         deltaX_ += offset.deltaX_;
108         deltaY_ += offset.deltaY_;
109         return *this;
110     }
111 
112     Offset& operator-=(const Offset& offset)
113     {
114         deltaX_ -= offset.deltaX_;
115         deltaY_ -= offset.deltaY_;
116         return *this;
117     }
118 
119     bool operator==(const Offset& offset) const
120     {
121         return NearEqual(deltaX_, offset.deltaX_) && NearEqual(deltaY_, offset.deltaY_);
122     }
123 
124     bool operator!=(const Offset& offset) const
125     {
126         return !operator==(offset);
127     }
128 
ToString()129     std::string ToString() const
130     {
131         std::stringstream ss;
132         ss << "Offset (" << std::fixed << std::setprecision(TWO) << deltaX_ << ", " << deltaY_ << ")";
133         std::string output = ss.str();
134         return output;
135     }
136 
IsPositiveOffset()137     bool IsPositiveOffset() const
138     {
139         return deltaX_ >= 0 && deltaY_ >= 0;
140     }
141 
142 private:
143     double deltaX_ = 0.0;
144     double deltaY_ = 0.0;
145 };
146 } // namespace OHOS::uitest
147 
148 #endif // GEOMETRY_OFFSET_H
149