TCOD
view release on metacpan or search on metacpan
lib/TCOD/SDL2.pm view on Meta::CPAN
# ABSTRACT: A minimal SDL2 binding, while we wait for a stable one in CPAN
package
TCOD::SDL2;
use strict;
use warnings;
use Config;
use FFI::C;
use FFI::CheckLib ();
use FFI::Platypus 1.00;
use Ref::Util ();
my $enum;
BEGIN {
$enum = sub {
require constant;
my %enums = @_;
while ( my ( $name, $values ) = each %enums ) {
my $const;
if ( Ref::Util::is_arrayref $values ) {
my $i = 0;
for ( @$values ) {
my ( $k, $v ) = split '=', $_, 2;
$i = eval $v if defined $v;
$const->{$k} = $i++;
}
}
elsif ( Ref::Util::is_hashref $values ) {
$const = $values;
}
else {
die 'Unrecognised reference: ' . ref $values;
}
constant->import($const);
my $variable = __PACKAGE__ . '::' . $name;
no strict 'refs';
%{$variable} = ( %{$variable}, reverse %$const );
}
};
}
use constant {
BYTEORDER => $Config{byteorder},
BIG_ENDIAN => 4321,
PIXELFORMAT_RGBA8888 => 373694468,
PIXELFORMAT_ABGR8888 => 376840196,
K_SCANCODE_MASK => 1 << 30,
};
use constant PIXELFORMAT_RGBA32 => ( BYTEORDER == BIG_ENDIAN )
? PIXELFORMAT_RGBA8888
: PIXELFORMAT_ABGR8888;
BEGIN {
$enum->(
InitFlags => {
INIT_TIMER => 0x000001,
INIT_AUDIO => 0x000010,
INIT_VIDEO => 0x000020,
INIT_JOYSTICK => 0x000200,
INIT_HAPTIC => 0x001000,
INIT_GAMECONTROLLER => 0x002000,
INIT_EVENTS => 0x004000,
INIT_SENSOR => 0x008000,
INIT_NOPARACHUTE => 0x100000,
},
EventType => [qw(
FIRSTEVENT=0
QUIT=0x100
APP_TERMINATING
APP_LOWMEMORY
APP_WILLENTERBACKGROUND
APP_DIDENTERBACKGROUND
APP_WILLENTERFOREGROUND
APP_DIDENTERFOREGROUND
LOCALECHANGED
DISPLAYEVENT=0x150
WINDOWEVENT=0x200
SYSWMEVENT
KEYDOWN=0x300
( run in 1.236 second using v1.01-cache-2.11-cpan-8f98c5d2c55 )