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;
use PDL::NiceSlice;
use Prima qw(Application);
use PDL::Drawing::Prima;

die "You must supply pairs of points\n" unless @ARGV > 2 and @ARGV % 2 == 0;
my $coords = pdl(join(' ', @ARGV));
my $xs = $coords(0:-1:2);
my $ys = $coords(1:-1:2);

my $wDisplay = Prima::MainWindow-> create(
	text    => 'PrimaPoly Test',
	backColor => cl::White,
	color => cl::Black,
	clipRect => [40, 40, 40, 40],
	onPaint => sub {
		my ($self) = @_;
		$self->clear;
		$self->pdl_polylines($xs, $ys);
	},
	onMouseDown => sub {
		my ($self, $down_button, undef, $x, $y) = @_;
		$self->{mouse_prev} = [$x, $y];
	},

	onMouseMove => sub {
		my ($self, $drag_button, $x_stop, $y_stop) = @_;
		
		return unless $drag_button;
		
		if (not defined $self->{mouse_prev}) {
			$self->{mouse_prev} = [$x_stop, $y_stop];
			return 1;
		}
		
		my ($x_start, $y_start) = @{$self->{mouse_prev}};

		my $dx = $x_stop - $x_start;
		$xs += $dx;
		my $dy = $y_stop - $y_start;
		$ys += $dy;
	
		# Store the intermediate locations:
		$self->{mouse_prev} = [$x_stop, $y_stop];
		
		$self->repaint;
	},
	
	onMouseUp => sub {
		delete $_[0]->{mouse_down};
		delete $_[0]->{mouse_move};
	},
);


run Prima;