# IUP::Canvas example
#
# Redraw demo
use strict;
use warnings;
use IUP ':all';
my ($dlg, $bt, $gauge, $tabs, $cv, $cdcanvas);
my $need_redraw = 0;
my $redraw_count = 0;
sub toggle_redraw {
$cv->cdActivate();
$need_redraw = !$need_redraw;
return IUP_DEFAULT;
}
sub redraw {
if ($need_redraw) {
$cv->cdBox(0, 300, 0, $redraw_count/100);
$gauge->VALUE($redraw_count/30000.0);
$redraw_count++;
if ($redraw_count == 30000) {
$cv->cdClear();
$redraw_count = 0;
$need_redraw = 0;
}
}
return IUP_DEFAULT;
};
$gauge = IUP::ProgressBar->new( SIZE=>"200x15" );
$cv = IUP::Canvas->new( SIZE=>"200x200" );
$bt = IUP::Button->new( TITLE=>"Start/Stop", SIZE=>"50x50", ACTION=>\&toggle_redraw );
$dlg = IUP::Dialog->new( TITLE=>"Redraw test",
child=>IUP::Vbox->new( [$cv, IUP::Hbox->new( [$gauge, $bt] )] ));
$dlg->ShowXY(IUP_CENTER, IUP_CENTER);
#the folloving canvas calls have to go after ShowXY
$cv->cdForeground(CD_BLUE);
$cv->cdClear();
IUP->SetIdle(\&redraw);
IUP->MainLoop();