Skip to content

Commit 01bfa88

Browse files
committed
Simplify management of window object
1 parent ad8c8d4 commit 01bfa88

File tree

1 file changed

+77
-79
lines changed

1 file changed

+77
-79
lines changed

src/Mandelbrot.cpp

Lines changed: 77 additions & 79 deletions
Original file line numberDiff line numberDiff line change
@@ -86,93 +86,91 @@ int main()
8686
};
8787

8888
auto window
89-
= std::make_optional<sf::RenderWindow>(sf::VideoMode({ length, length }), "Mandelbrot", sf::Style::Default ^ sf::Style::Resize);
90-
window->setFramerateLimit(60);
91-
while (window) {
92-
while (const std::optional event = window->pollEvent()) {
93-
if (event->is<sf::Event::Closed>()) {
94-
window.reset();
95-
} else if (const auto* key_pressed = event->getIf<sf::Event::KeyPressed>()) {
96-
switch (key_pressed->scancode) {
97-
case sf::Keyboard::Scan::Escape:
98-
window.reset();
99-
break;
100-
case sf::Keyboard::Scan::Up:
101-
origin = { origin.real(), origin.imag() + extent / 25 };
102-
break;
103-
case sf::Keyboard::Scan::Down:
104-
origin = { origin.real(), origin.imag() - extent / 25 };
105-
break;
106-
case sf::Keyboard::Scan::Left:
107-
origin = { origin.real() - extent / 25, origin.imag() };
108-
break;
109-
case sf::Keyboard::Scan::Right:
110-
origin = { origin.real() + extent / 25, origin.imag() };
111-
break;
112-
case sf::Keyboard::Scan::W:
113-
extent /= 1.5;
114-
zoom_sound.setPitch(zoom_sound.getPitch() * 1.02f);
89+
= sf::RenderWindow(sf::VideoMode({ length, length }), "Mandelbrot", sf::Style::Default ^ sf::Style::Resize);
90+
window.setFramerateLimit(60);
91+
92+
while (const std::optional event = window.pollEvent()) {
93+
if (event->is<sf::Event::Closed>()) {
94+
return 0;
95+
} else if (const auto* key_pressed = event->getIf<sf::Event::KeyPressed>()) {
96+
switch (key_pressed->scancode) {
97+
case sf::Keyboard::Scan::Escape:
98+
return 0;
99+
case sf::Keyboard::Scan::Up:
100+
origin = { origin.real(), origin.imag() + extent / 25 };
101+
break;
102+
case sf::Keyboard::Scan::Down:
103+
origin = { origin.real(), origin.imag() - extent / 25 };
104+
break;
105+
case sf::Keyboard::Scan::Left:
106+
origin = { origin.real() - extent / 25, origin.imag() };
107+
break;
108+
case sf::Keyboard::Scan::Right:
109+
origin = { origin.real() + extent / 25, origin.imag() };
110+
break;
111+
case sf::Keyboard::Scan::W:
112+
extent /= 1.5;
113+
zoom_sound.setPitch(zoom_sound.getPitch() * 1.02f);
114+
zoom_sound.play();
115+
break;
116+
case sf::Keyboard::Scan::S:
117+
if (extent * 1.5 <= max_extent) {
118+
extent = extent * 1.5;
119+
zoom_sound.setPitch(zoom_sound.getPitch() / 1.02f);
115120
zoom_sound.play();
116-
break;
117-
case sf::Keyboard::Scan::S:
118-
if (extent * 1.5 <= max_extent) {
119-
extent = extent * 1.5;
120-
zoom_sound.setPitch(zoom_sound.getPitch() / 1.02f);
121-
zoom_sound.play();
122-
}
123-
break;
124-
case sf::Keyboard::Scan::R:
125-
origin = initial_origin;
126-
extent = initial_extent;
127-
iteration_limit = initial_iteration_limit;
128-
zoom_sound.setPitch(1);
129-
break;
130-
case sf::Keyboard::Scan::RBracket:
131-
iteration_limit += 25;
132-
break;
133-
case sf::Keyboard::Scan::LBracket:
134-
iteration_limit = std::max(iteration_limit - 25, 25);
135-
break;
136-
default:
137-
break;
138121
}
139-
recalculate = true;
140-
} else if (const auto* mouse_button_pressed = event->getIf<sf::Event::MouseButtonPressed>()) {
141-
origin += extent
142-
* Complex(double(mouse_button_pressed->position.x) / double(window->getSize().x) - 0.5,
143-
-double(mouse_button_pressed->position.y) / double(window->getSize().y) + 0.5);
144-
recalculate = true;
145-
} else if (const auto* mouse_wheel_scrolled = event->getIf<sf::Event::MouseWheelScrolled>()) {
146-
if (mouse_wheel_scrolled->delta > 0)
147-
extent /= 1.2;
148-
else if (mouse_wheel_scrolled->delta < 0)
149-
extent = std::min(extent * 1.2, max_extent);
150-
recalculate = true;
122+
break;
123+
case sf::Keyboard::Scan::R:
124+
origin = initial_origin;
125+
extent = initial_extent;
126+
iteration_limit = initial_iteration_limit;
127+
zoom_sound.setPitch(1);
128+
break;
129+
case sf::Keyboard::Scan::RBracket:
130+
iteration_limit += 25;
131+
break;
132+
case sf::Keyboard::Scan::LBracket:
133+
iteration_limit = std::max(iteration_limit - 25, 25);
134+
break;
135+
default:
136+
break;
151137
}
138+
recalculate = true;
139+
} else if (const auto* mouse_button_pressed = event->getIf<sf::Event::MouseButtonPressed>()) {
140+
origin += extent
141+
* Complex(double(mouse_button_pressed->position.x) / double(window.getSize().x) - 0.5,
142+
-double(mouse_button_pressed->position.y) / double(window.getSize().y) + 0.5);
143+
recalculate = true;
144+
} else if (const auto* mouse_wheel_scrolled = event->getIf<sf::Event::MouseWheelScrolled>()) {
145+
if (mouse_wheel_scrolled->delta > 0)
146+
extent /= 1.2;
147+
else if (mouse_wheel_scrolled->delta < 0)
148+
extent = std::min(extent * 1.2, max_extent);
149+
recalculate = true;
152150
}
151+
}
153152

154-
window->clear();
153+
window.clear();
155154

156-
if (recalculate) {
157-
recalculate = false;
155+
if (recalculate) {
156+
recalculate = false;
158157

159-
const auto rows_per_thread = std::size_t(length / threads.size());
160-
for (std::size_t i = 0; i < threads.size(); ++i)
161-
threads[i] = std::thread(render_rows, i * rows_per_thread, (i + 1) * rows_per_thread);
162-
for (auto& thread : threads)
163-
thread.join();
158+
const auto rows_per_thread = std::size_t(length / threads.size());
159+
for (std::size_t i = 0; i < threads.size(); ++i)
160+
threads[i] = std::thread(render_rows, i * rows_per_thread, (i + 1) * rows_per_thread);
161+
for (auto& thread : threads)
162+
thread.join();
164163

165-
texture = sf::Texture::loadFromImage(image).value();
166-
}
164+
texture = sf::Texture::loadFromImage(image).value();
165+
}
167166

168-
window->draw(sf::Sprite(*texture));
169-
window->draw(text);
170-
window->display();
167+
window.draw(sf::Sprite(*texture));
168+
window.draw(text);
169+
window.display();
171170

172-
auto text_builder = std::ostringstream();
173-
text_builder << std::setw(2) << int(1 / clock.restart().asSeconds()) << " fps\n";
174-
text_builder << iteration_limit << " iters\n";
175-
text_builder << std::setprecision(1) << std::scientific << initial_extent / extent << '\n';
176-
text.setString(text_builder.str());
177-
}
171+
auto text_builder = std::ostringstream();
172+
text_builder << std::setw(2) << int(1 / clock.restart().asSeconds()) << " fps\n";
173+
text_builder << iteration_limit << " iters\n";
174+
text_builder << std::setprecision(1) << std::scientific << initial_extent / extent << '\n';
175+
text.setString(text_builder.str());
178176
}

0 commit comments

Comments
 (0)