lxgui
gui_matrix4.hpp
1 #ifndef LXGUI_GUI_MATRIX4_HPP
2 #define LXGUI_GUI_MATRIX4_HPP
3 
4 #include "lxgui/gui_vector2.hpp"
5 #include "lxgui/lxgui.hpp"
6 
7 #include <initializer_list>
8 #include <iosfwd>
9 
10 namespace lxgui::gui {
11 
13 struct matrix4f {
14  using element_type = float;
15 
16  matrix4f() noexcept = default;
17  matrix4f(std::initializer_list<element_type> list) noexcept;
18  explicit matrix4f(const element_type* mat) noexcept;
19 
20  element_type& operator()(std::size_t row, std::size_t col) noexcept {
21  return data[col + row * 4];
22  }
23 
24  element_type operator()(std::size_t row, std::size_t col) const noexcept {
25  return data[col + row * 4];
26  }
27 
28  element_type& operator()(std::size_t i) noexcept {
29  return data[i];
30  }
31 
32  element_type operator()(std::size_t i) const noexcept {
33  return data[i];
34  }
35 
36  void transpose() noexcept;
37  void invert() noexcept;
38 
39  static matrix4f translation(const vector2f& dx) noexcept;
40  static matrix4f scaling(const vector2f& scale) noexcept;
41  static matrix4f rotation(float rot) noexcept;
42  static matrix4f transformation(const vector2f& dx, const vector2f& scale, float rot) noexcept;
43  static matrix4f view(const vector2f& window) noexcept;
44  static matrix4f view(const vector2f& window, const vector2f& center) noexcept;
45 
46  static matrix4f transpose(const matrix4f& m) noexcept;
47  static matrix4f invert(const matrix4f& m) noexcept;
48 
49  element_type data[16] = {1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1};
50 
51  static const matrix4f identity;
52 };
53 
54 matrix4f operator+(const matrix4f& m1, const matrix4f& m2) noexcept;
55 matrix4f operator-(const matrix4f& m1, const matrix4f& m2) noexcept;
56 matrix4f operator*(const matrix4f& m1, const matrix4f& m2) noexcept;
57 vector2f operator*(const matrix4f& m, const vector2f& v) noexcept;
58 vector2f operator*(const vector2f& v, const matrix4f& m) noexcept;
59 
60 std::ostream& operator<<(std::ostream& o, const matrix4f& m);
61 
62 } // namespace lxgui::gui
63 
64 #endif
std::ostream & operator<<(std::ostream &stream, const color &c)
Definition: gui_color.cpp:212
color operator+(const color &c1, const color &c2) noexcept
Definition: gui_color.cpp:192
color operator*(const color &c1, const color &c2) noexcept
Definition: gui_color.cpp:200
color operator-(const color &c1, const color &c2) noexcept
Definition: gui_color.cpp:196
A 4x4 matrix, used for coordinate transformations.
Definition: gui_matrix4.hpp:13
static matrix4f scaling(const vector2f &scale) noexcept
Definition: gui_matrix4.cpp:34
void invert() noexcept
Definition: gui_matrix4.cpp:69
static const matrix4f identity
Definition: gui_matrix4.hpp:51
element_type data[16]
Definition: gui_matrix4.hpp:49
element_type operator()(std::size_t i) const noexcept
Definition: gui_matrix4.hpp:32
void transpose() noexcept
Definition: gui_matrix4.cpp:62
element_type & operator()(std::size_t i) noexcept
Definition: gui_matrix4.hpp:28
matrix4f() noexcept=default
static matrix4f translation(const vector2f &dx) noexcept
Definition: gui_matrix4.cpp:29
static matrix4f transformation(const vector2f &dx, const vector2f &scale, float rot) noexcept
Definition: gui_matrix4.cpp:46
static matrix4f view(const vector2f &window) noexcept
Definition: gui_matrix4.cpp:53
element_type operator()(std::size_t row, std::size_t col) const noexcept
Definition: gui_matrix4.hpp:24
static matrix4f rotation(float rot) noexcept
Definition: gui_matrix4.cpp:39