@@ -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