#pragma once #include "GUI.h" // for Simple_window only (doesn't really belong in Window.h) using namespace Graph_lib; // Simple_window is basic scaffolding for ultra-simple interaction with graphics // it provides one window with one "next" button for ultra-simple animation struct Simple_window : Graph_lib::Window { Simple_window(Point xy, int w, int h, const string& title) : Window(xy, w, h, title), next_button(Point{x_max() - 70, 0}, 70, 20, "Next", cb_next), button_pushed(false) { attach(next_button); } void wait_for_button() // modified event loop // handle all events (as per default), but quit when button_pushed // becomes true this allows graphics without control inversion { while (!button_pushed) Fl::wait(); button_pushed = false; Fl::redraw(); } Button next_button; private: bool button_pushed; static void cb_next(Address, Address addr) // callback for next_button // { // reference_to(addr).next(); // } { static_cast(addr)->next(); } void next() { button_pushed = true; } };