quad.h
1/*
2** ClanLib SDK
3** Copyright (c) 1997-2020 The ClanLib Team
4**
5** This software is provided 'as-is', without any express or implied
6** warranty. In no event will the authors be held liable for any damages
7** arising from the use of this software.
8**
9** Permission is granted to anyone to use this software for any purpose,
10** including commercial applications, and to alter it and redistribute it
11** freely, subject to the following restrictions:
12**
13** 1. The origin of this software must not be misrepresented; you must not
14** claim that you wrote the original software. If you use this software
15** in a product, an acknowledgment in the product documentation would be
16** appreciated but is not required.
17** 2. Altered source versions must be plainly marked as such, and must not be
18** misrepresented as being the original software.
19** 3. This notice may not be removed or altered from any source distribution.
20**
21** Note: Some of the libraries ClanLib may link to may have additional
22** requirements or restrictions.
23**
24** File Author(s):
25**
26** Magnus Norddahl
27** Mark Page
28*/
29
30#pragma once
31
32#include "rect.h"
33#include "size.h"
34#include "point.h"
35#include "origin.h"
36
37namespace clan
38{
41
46 template<typename Type>
47 class Quadx
48 {
49 public:
51 Quadx() : p(), q(), r(), s() {}
52
59 Quadx(const Vec2<Type> &new_p, const Vec2<Type> &new_q, const Vec2<Type> &new_r, const Vec2<Type> &new_s)
60 : p(new_p), q(new_q), r(new_r), s(new_s) {}
61
73 Quadx(const Rectx<Type> &rect) : p(rect.left, rect.top), q(rect.right, rect.top),
74 r(rect.right, rect.bottom), s(rect.left, rect.bottom) {}
75
79 Quadx(const Quadx<Type> &quad) : p(quad.p), q(quad.q), r(quad.r), s(quad.s) {}
80
83 {
84 p += quad.p; q += quad.q; r += quad.r; s += quad.s; return *this;
85 }
86
89 {
90 p -= quad.p; q -= quad.q; r -= quad.r; s -= quad.s; return *this;
91 }
92
95 {
96 p += point; q += point; r += point; s += point; return *this;
97 }
98
101 {
102 p -= point; q -= point; r -= point; s -= point; return *this;
103 }
104
107 {
108 return Quadx(p + quad.p, q + quad.q, r + quad.r, s + quad.s);
109 }
110
113 {
114 return Quadx(p - quad.p, q - quad.q, r - quad.r, s - quad.s);
115 }
116
119 {
120 return Quadx(p + point, q + point, r + point, s + point);
121 }
122
125 {
126 return Quadx(p - point, q - point, r - point, s - point);
127 }
128
130 bool operator==(const Quadx<Type> &quad) const
131 {
132 return (p == quad.p && q == quad.q && r == quad.r && s == quad.s);
133 }
134
136 bool operator!=(const Quadx<Type> &quad) const
137 {
138 return (p != quad.p || q != quad.q || r != quad.r || s != quad.s);
139 }
140
143
146
149
152
154 Type get_width() const;
155
157 Type get_height() const;
158
161
164
171 Quadx<Type> &rotate(const Vec2<Type> &hotspot, const Angle &angle);
172
179 Quadx<Type> &scale(float sx, float sy);
180
188 Quadx<Type> &scale(const Vec2<Type> &hotspot, float sx, float sy);
189
192
199 Quadx<Type> &apply_alignment(Origin origin, Type x, Type y);
200
202 bool is_inside(const Vec2<Type> &point) const;
203 };
204
206 class Quad : public Quadx<int>
207 {
208 public:
209 Quad() : Quadx<int>() {}
210 Quad(const Vec2<int> &new_p, const Vec2<int> &new_q, const Vec2<int> &new_r, const Vec2<int> &new_s) : Quadx<int>(new_p, new_q, new_r, new_s) {}
211 Quad(const Rect &rect) : Quadx<int>(rect) {}
212 Quad(const Quadx<int> &quad) : Quadx<int>(quad) {}
213 };
214
216 class Quadf : public Quadx<float>
217 {
218 public:
219 Quadf() : Quadx<float>() {}
220 Quadf(const Vec2<float> &new_p, const Vec2<float> &new_q, const Vec2<float> &new_r, const Vec2<float> &new_s) : Quadx<float>(new_p, new_q, new_r, new_s) {}
221 Quadf(const Rectf &rect) : Quadx<float>(rect) {}
222 Quadf(const Quadx<float> &quad) : Quadx<float>(quad) {}
223 };
224
226 class Quadd : public Quadx<double>
227 {
228 public:
229 Quadd() : Quadx<double>() {}
230 Quadd(const Vec2<double> &new_p, const Vec2<double> &new_q, const Vec2<double> &new_r, const Vec2<double> &new_s) : Quadx<double>(new_p, new_q, new_r, new_s) {}
231 Quadd(const Rectd &rect) : Quadx<double>(rect) {}
232 Quadd(const Quadx<double> &quad) : Quadx<double>(quad) {}
233 };
234
236}
Angle class.
Definition angle.h:60
2D quad structure - Integer
Definition quad.h:207
Quad()
Definition quad.h:209
Quad(const Vec2< int > &new_p, const Vec2< int > &new_q, const Vec2< int > &new_r, const Vec2< int > &new_s)
Definition quad.h:210
Quad(const Rect &rect)
Definition quad.h:211
Quad(const Quadx< int > &quad)
Definition quad.h:212
2D quad structure - Double
Definition quad.h:227
Quadd()
Definition quad.h:229
Quadd(const Vec2< double > &new_p, const Vec2< double > &new_q, const Vec2< double > &new_r, const Vec2< double > &new_s)
Definition quad.h:230
Quadd(const Rectd &rect)
Definition quad.h:231
Quadd(const Quadx< double > &quad)
Definition quad.h:232
2D quad structure - Float
Definition quad.h:217
Quadf(const Rectf &rect)
Definition quad.h:221
Quadf(const Quadx< float > &quad)
Definition quad.h:222
Quadf(const Vec2< float > &new_p, const Vec2< float > &new_q, const Vec2< float > &new_r, const Vec2< float > &new_s)
Definition quad.h:220
Quadf()
Definition quad.h:219
2D quad structure.
Definition quad.h:48
Vec2< Type > q
Second Point.
Definition quad.h:145
Quadx< Type > & scale(float sx, float sy)
Scale the Quad.
Quadx< Type > & operator+=(const Vec2< Type > &point)
Quad += Point operator.
Definition quad.h:94
Quadx< Type > operator-(const Vec2< Type > &point) const
Quad - Point operator.
Definition quad.h:124
Quadx(const Quadx< Type > &quad)
Constructs a quad.
Definition quad.h:79
Quadx(const Vec2< Type > &new_p, const Vec2< Type > &new_q, const Vec2< Type > &new_r, const Vec2< Type > &new_s)
Constructs a quad.
Definition quad.h:59
Sizex< Type > get_size() const
Returns the size of the rectangle.
Definition quad.h:160
bool operator==(const Quadx< Type > &quad) const
Quad == Quad operator.
Definition quad.h:130
Quadx< Type > & rotate(const Vec2< Type > &hotspot, const Angle &angle)
Rotates the Quad.
Quadx(const Rectx< Type > &rect)
Constructs a quad.
Definition quad.h:73
bool operator!=(const Quadx< Type > &quad) const
Quad != Quad operator.
Definition quad.h:136
Quadx< Type > operator+(const Vec2< Type > &point) const
Quad + Point operator.
Definition quad.h:118
Quadx< Type > & scale(const Vec2< Type > &hotspot, float sx, float sy)
Scale the Quad.
Vec2< Type > s
Fourth Point.
Definition quad.h:151
Quadx< Type > operator+(const Quadx< Type > &quad) const
Quad + Quad operator.
Definition quad.h:106
Quadx()
Constructs a quad.
Definition quad.h:51
Vec2< Type > center() const
Returns the center point of the quad.
Quadx< Type > operator-(const Quadx< Type > &quad) const
Quad - Quad operator.
Definition quad.h:112
Rect get_bounds() const
Returns the bounding box of the quad as a Rect.
Type get_height() const
Returns the height of the quad.
Vec2< Type > r
Third Point.
Definition quad.h:148
bool is_inside(const Vec2< Type > &point) const
Check if a point is inside or outside the quad.
Quadx< Type > & apply_alignment(Origin origin, Type x, Type y)
Applies an origin and offset pair to this rectangle.
Vec2< Type > p
First Point.
Definition quad.h:142
Quadx< Type > & operator-=(const Quadx< Type > &quad)
Quad -= Quad operator.
Definition quad.h:88
Type get_width() const
Returns the width of the quad.
Quadx< Type > & operator+=(const Quadx< Type > &quad)
Quad += Quad operator.
Definition quad.h:82
Quadx< Type > & operator-=(const Vec2< Type > &point)
Quad -= Point operator.
Definition quad.h:100
2D (left,top,right,bottom) rectangle structure - Integer
Definition rect.h:489
2D (left,top,right,bottom) rectangle structure - Double
Definition rect.h:518
2D (left,top,right,bottom) rectangle structure - Float
Definition rect.h:503
2D (left,top,right,bottom) rectangle structure.
Definition rect.h:51
2D (width,height) size structure.
Definition size.h:55
2D vector
Definition vec2.h:76
Origin
Alignment origins.
Definition origin.h:39
Definition clanapp.h:36
@ angle
value is a color