// @topic T01030 FLTK Graphics
// @brief Animation with Fl::repeat_timeout()

#include "txtbook/Simple_window.h"
#include "txtbook/Graph.h"

using namespace Graph_lib;
const double TICK_TIMEOUT = 0.1; // 50 ms

void callback( void* pthing )
{
    Graph_lib::Polygon* ppoly = static_cast< Graph_lib::Polygon* >( pthing );
    std::cout << "TICK ";
    ppoly->move( 1, 1 ); // +1 pixel along x and y axis
    Fl::redraw();
    Fl::repeat_timeout( TICK_TIMEOUT, callback, pthing );
}

int main()
{
    Point tl( 100, 100 );
    Simple_window win( tl, 600, 600, "Canvas" );

    Graph_lib::Polygon poly;
    poly.add( Point( 300, 200 ) );
    poly.add( Point( 350, 100 ) );
    poly.add( Point( 400, 200 ) );
    poly.set_color( Color::blue );
    poly.set_fill_color( Color::yellow );

    win.attach( poly );

    Fl::add_timeout( TICK_TIMEOUT, callback, &poly );
    win.wait_for_button();
}