The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
;
 use strict;
 use warnings;
 use PDL;
 # Windows dynamic loading requires that Prima comes before PDL::Drawing::Prima
 use Prima qw(Application);
 use PDL::Drawing::Prima;
 
package My::Application;
our @ISA = qw(Prima::MainWindow);

sub color {
	print 'color got args [', join('], [', @_), "]\n";
	return $_[0]->SUPER::color($_[1]);
}

sub polyline {
	my $self = shift;
	print "polyline got args ", join(', ', @{$_[0]}), "\n";
	$self->SUPER::polyline(@_);
	print "Returning!\n";
}

sub fillpoly {
	my $self = shift;
	print "fillpoly got args ", join(', ', @{$_[0]}), "\n";
	$self->SUPER::fillpoly(@_);
	print "Returning!\n";
}

package main;

 my $window = My::Application->create(
     text    => 'PDL::Graphics::Prima Test',
     onPaint => sub {
         my ( $self, $canvas) = @_;
 
         # wipe and replot:
         $canvas->clear;
         
         ### Example code goes here ###
 use PDL::NiceSlice;
 
 # Draw a simple polyline
 my $x = sequence(50) * 10;
 my $y = 2 * $x + $x->grandom * 10;
 $canvas->pdl_polylines($x, $y);
 
 
 # Draw 50 shapes at random points:
 my ($width, $height) = $canvas->size;
 $x = random(50) * $width;
 $y = $x->random * $height;
 
 # Generate some fun random shapes and sizes:
 my $N_points = 1 + 9 * $x->random;
 my $orientation = $x->random * 360;
 my $filled = ($x->random < 0.5);
 my $size = 5 + 10 * $x->random;
 my $skip = ($x->random * $N_points)->byte;
 
 # Make a rainbow of colors:
 my $deg = $x->xlinvals(0, 360);
 my $hsv = ones(3, $x->nelem);
 $hsv(0, :) .= $deg->transpose;
 my $colors = $hsv->hsv_to_rgb->rgb_to_color;
 
 # Draw them:
 $canvas->pdl_symbols($x, $y, $N_points, $orientation, $filled, $size, $skip
	, colors => $colors);
         
     },
     backColor => cl::White,
 );
 
 run Prima;