1
1
#include " basic_display.hpp"
2
2
3
+ #include < fmt/format.h>
3
4
#include < SFML/Graphics.hpp>
5
+ #include < SFML/Graphics/RectangleShape.hpp>
4
6
5
7
namespace fractal {
6
8
void BasicDisplay::set_pixel (std::size_t x_pos, std::size_t y_pos, uint8_t value)
@@ -31,9 +33,53 @@ void BasicDisplay::display_window()
31
33
32
34
sf::Sprite sprite (texture);
33
35
36
+ bool left_mouse_down{};
37
+ float selection_start_x{};
38
+ float selection_start_y{};
39
+ float mouse_x{};
40
+ float mouse_y{};
41
+
34
42
while (window.isOpen ()) {
35
43
sf::Event event;
36
44
while (window.pollEvent (event)) {
45
+ switch (event.type ) {
46
+ case sf::Event::Closed:
47
+ window.close ();
48
+ break ;
49
+ case sf::Event::MouseMoved:
50
+ mouse_x = static_cast <float >(event.mouseMove .x );
51
+ mouse_y = static_cast <float >(event.mouseMove .y );
52
+ break ;
53
+
54
+ case sf::Event::MouseButtonPressed:
55
+ if (event.mouseButton .button != sf::Mouse::Left) {
56
+ break ;
57
+ }
58
+ left_mouse_down = true ;
59
+ selection_start_x = static_cast <float >(event.mouseButton .x );
60
+ selection_start_y = static_cast <float >(event.mouseButton .y );
61
+ break ;
62
+
63
+ case sf::Event::MouseButtonReleased:
64
+ if (event.mouseButton .button != sf::Mouse::Left) {
65
+ break ;
66
+ }
67
+ on_resize_ (
68
+ sf::Vector2f (
69
+ std::min (mouse_x, selection_start_x),
70
+ std::min (mouse_y, selection_start_y)
71
+ ),
72
+ sf::Vector2f (
73
+ std::max (mouse_x, selection_start_x),
74
+ std::max (mouse_y, selection_start_y)
75
+ )
76
+ );
77
+ left_mouse_down = false ;
78
+ break ;
79
+
80
+ default :
81
+ break ;
82
+ }
37
83
if (event.type == sf::Event::Closed) {
38
84
window.close ();
39
85
}
@@ -42,6 +88,19 @@ void BasicDisplay::display_window()
42
88
window.clear (sf::Color::Black);
43
89
44
90
window.draw (sprite);
91
+ if (left_mouse_down) {
92
+ sf::RectangleShape selection_rectangle (sf::Vector2f (
93
+ std::abs (mouse_x - selection_start_x),
94
+ std::abs (mouse_y - selection_start_y)
95
+ ));
96
+ selection_rectangle.setPosition (
97
+ std::min (mouse_x, selection_start_x),
98
+ std::min (mouse_y, selection_start_y)
99
+ );
100
+
101
+ selection_rectangle.setFillColor (sf::Color (255 , 0 , 0 , 127 ));
102
+ window.draw (selection_rectangle);
103
+ }
45
104
46
105
window.display ();
47
106
}
0 commit comments