The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/env perl

use SDL;
use SDL::App;
use SDL::Surface;
use SDL::Rect;
use SDL::Event;

my $menu = new SDL::Surface -name => 'data/menu.png';

my $app = new SDL::App -w => $menu->width(), -h => $menu->height(), -resizeable => 1;

my $hilight = new SDL::Surface -name => 'data/highlight.png';

my %menu = (
	'start' => [ 115, 30, 160, 40 ],
	'help' => [ 120, 100, 120, 40 ],
	'giveup' => [ 120, 230, 120, 40 ],
	'spawnserver' => [ 115, 170, 165, 40 ], 
	'credits' => [ 115, 285, 160, 40 ],
);

my $needblit;
sub drawMenu {
	my ($a,$dx,$dy,$no,$hi,%m) = @_;
	for (keys %m) {
		my ($x,$y,$w,$h) = @{$m{$_}};
		next unless $dx >= $x && $dx <= $x+$w
			 && $dy >= $y && $dy <= $y+$h;
		unless ($needblit) {
			my $rect = new SDL::Rect -w => $w, -h => $h, 
					 -x => $x, -y => $y;
			$hi->blit($rect,$a,$rect);
			$needblit = 1;
		}
		return $_;
	}
	$no->blit(NULL,$a,NULL) if $needblit;
	$needblit = 0;
	return 0;
}

sub help {
	print STDERR <<USAGE;
This should print a help message

USAGE

}

sub credits {
	print STDERR <<CREDITS;
David J. Goehrig

CREDITS

}

sub spawnserver {
	print STDERR <<SPAWN;
Spawinging new server...

SPAWN

}

sub start  {
	print STDERR <<START;
This should start the game

START

}

sub giveup {
	print STDERR <<GIVEUP;
Giving up

GIVEUP

	exit(0);
}

my %events = (
	SDL_MOUSEMOTION() =>  sub {
		my ($e) = @_;
		drawMenu($app,
			 $e->motion_x(),
			 $e->motion_y(),
			 $menu,
			 $hilight,
			 %menu);
	},
	SDL_MOUSEBUTTONUP() => sub {
		my ($e) = @_;
		my $routine = drawMenu($app,
			 $e->motion_x(),
			 $e->motion_y(),
			 $menu,
			 $hilight,
			 %menu);
		&{$routine} if ($routine);
	},
	SDL_QUIT() => sub { exit(0); },
	SDL_KEYDOWN() => sub { 
		my ($e) = @_;
		exit(0) if ($e->key_sym() == SDLK_ESCAPE);
	},
);

$menu->blit(NULL,$app,NULL);
$app->sync();
$app->loop(\%events);