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 )