--- /dev/null
+=pod
+
+=head1 NAME
+
+SDL::App - a SDL perl extension
+
+=head1 SYNOPSIS
+
+ use SDL;
+ use SDL::Event;
+ use SDL::App;
+
+ my $app = new SDL::App (
+ -title => 'Application Title',
+ -width => 640,
+ -height => 480,
+ -depth => 32 );
+
+This is the manual way of doing things
+
+ my $event = new SDL::Event; # create a new event
+
+ $event->pump();
+ $event->poll();
+
+ while ($event->wait()) {
+ my $type = $event->type(); # get event type
+ print $type;
+ exit if $type == SDL_QUIT;
+ }
+An alternative to the manual Event processing is the L<SDL::App::loop> .
+
+=head1 DESCRIPTION
+
+L<SDL::App> controls the root window of the of your SDL based application.
+It extends the L<SDL::Surface> class, and provides an interface to the window
+manager oriented functions.
+
+=head1 METHODS
+
+=head2 new
+
+C<SDL::App::new> initializes the SDL, creates a new screen,
+and initializes some of the window manager properties.
+C<SDL::App::new> takes a series of named parameters:
+
+=over 4
+
+=item *
+
+-title
+
+=item *
+
+-icon_title
+
+=item *
+
+-icon
+
+=item *
+
+-width
+
+=item *
+
+-height
+
+=item *
+
+-depth
+
+=item *
+
+-flags
+
+=item *
+
+-resizeable
+
+=back
+
+=head2 title
+
+C<SDL::App::title> takes 0, 1, or 2 arguments. It returns the current
+application window title. If one parameter is passed, both the window
+title and icon title will be set to its value. If two parameters are
+passed the window title will be set to the first, and the icon title
+to the second.
+
+=head2 delay
+
+C<SDL::App::delay> takes 1 argument, and will sleep the application for
+that many ms.
+
+=head2 ticks
+
+C<SDL::App::ticks> returns the number of ms since the application began.
+
+=head2 error
+
+C<SDL::App::error> returns the last error message set by the SDL.
+
+=head2 resize
+
+C<SDL::App::resize> takes a new height and width of the application
+if the application was originally created with the -resizable option.
+
+=head2 fullscreen
+
+C<SDL::App::fullscreen> toggles the application in and out of fullscreen mode.
+
+=head2 iconify
+
+C<SDL::App::iconify> iconifies the applicaiton window.
+
+=head2 grab_input
+
+C<SDL::App::grab_input> can be used to change the input focus behavior of
+the application. It takes one argument, which should be one of the following:
+
+=over 4
+
+=item *
+SDL_GRAB_QUERY
+
+=item *
+SDL_GRAB_ON
+
+=item *
+SDL_GRAB_OFF
+
+=back
+
+=head2 loop
+
+C<SDL::App::loop> is a simple event loop method which takes a reference to a hash
+of event handler subroutines. The keys of the hash must be SDL event types such
+as SDL_QUIT(), SDL_KEYDOWN(), and the like. The event method recieves as its parameter
+the event object used in the loop.
+
+ Example:
+
+ my $app = new SDL::App -title => "test.app",
+ -width => 800,
+ -height => 600,
+ -depth => 32;
+
+ my %actions = (
+ SDL_QUIT() => sub { exit(0); },
+ SDL_KEYDOWN() => sub { print "Key Pressed" },
+ );
+
+ $app->loop(\%actions);
+
+=head2 sync
+
+C<SDL::App::sync> encapsulates the various methods of syncronizing the screen with the
+current video buffer. C<SDL::App::sync> will do a fullscreen update, using the double buffer
+or OpenGL buffer if applicable. This is prefered to calling flip on the application window.
+
+=head2 attribute ( attr, [value] )
+
+C<SDL::App::attribute> allows one to set and get GL attributes. By passing a value
+in addition to the attribute selector, the value will be set. C<SDL:::App::attribute>
+always returns the current value of the given attribute, or croaks on failure.
+
+=head1 AUTHOR
+
+David J. Goehrig
+Kartik Thakore
+
+=head1 SEE ALSO
+
+L<perl> L<SDL::Surface> L<SDL::Event> L<SDL::OpenGL>
+
+=cut