The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
# 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();