NAME
SDLx::Surface - Graphic surface matrix extension
CATEGORY
Extension
SYNOPSIS
use SDL;
use SDL::Video;
use SDLx::Surface;
# Create the main surface (display)
SDL::init(SDL_INIT_VIDEO);
my $display = SDL::Video::set_video_mode(640, 480, 16, SDL_SWSURFACE);
my $surf_matrix = SDLx::Surface->new( surface => $display);
$surf_matrix->[10][10] = 0xFFFF; #for 16bpp write white at x = 10 and y=10
$surf_matrix->surface( $new_surface );
my $orig_surface = $surf_matrix->surface();
DESCRIPTION
An SDLx::Surface
allows matrix read and write to a surface, safely.
CONSTRUCTOR
new
Takes a SDL::Surface in hash format.
If a surface is passed to 'surface =>' that is loaded. Otherwise you can define at least a width and a height.
SDLx::Surface->new( surface => $surface) # The $surface is loaded
SDLx::Surface->new( width=> 400, height=>200)
# A SDL::Surface->new( SDL_ANYFORMAT, 400, 200, 32) is loaded
SDLx::Surface->new( width=> 400, height=>200, flags=> SDL_SWSURFACE, depth=>24 )
# A SDL::Surface->new( SDL_SWSURFACE, 400, 200, 24) is loaded
SDLx::Surface->new( width=> 400, height=>200, flags=> SDL_SWSURFACE, depth=>32, greenmask=>0xFF000000 )
# A SDL::Surface->new( SDL_ANYFORMAT, 400, 200, 32, 0, 0xFF000000,0, 0, 0 ) is loaded
SDLx::Surface->new( w => 1, h => 1, color => 0xFF0000FF )
# A SDL::Surface->new( SDL_ANYFORMAT, 1, 1, 32, 0, 0, 0, 0 ) is loaded
all pixels are colored with color (red)
display
If SDLx::App::new or SDL::Video::get_video_mode called before then:
my $appx = SDLx::Surface::display();
gets the display if it is already made. Passed options are ignored. Otherwise you can quickly make the display with :
SDLx::Surface::display( width => 20, height => 20) #depth => 32 and SDL_ANYFORMAT used
or you can also pass flags and depth.
SDLx::Surface::display( width => 20, height => 20, flags=> SDL_HWSURFACE, depth=>24)
You can also use the keys w
and h
in place of width
and height
, as with new
.
Get or create the main display surface and attach to a SDLx::Surface.
duplicate
Does a attributes only, no pixel, copy of another SDLx::Surface.
ATTRIBUTES
surface
If a SDL::Surface is passed it is attached to the matrix. Returns the SDL::Surface that is currently attached to this SDLx::Surface
w, h, format, pitch, flags
Returns the inner SDL::Surface's respective attribute. See SDL::Surface
.
clip_rect
Sets the passed SDL::Rect
as the new clip_rect for the surface. Returns the SDL::Surface's clip_rect. See SDL::Video::get_clip_rect
and SDL::Video::set_clip_rect
.
EXTENSIONS
blit
$sdlx_surface->blit( $dest, $src_rect, $dest_rect );
Blits SDLx::Surface onto $dest surface. $src_rect or $dest_rect are optional. If $src_rect is ommited, it will be the size of the entire surface. If $dest_rect is ommited, it will be blitted at (0, 0)
. $src_rect or $dest_rect can be array refs or SDL::Rect. $dest can be SDLx::Surface or SDL::Surface.
Returns $self
blit_by
$sdlx_surface->blit_by( $src, $src_rect, $dest_rect );
Does the same as blit
but the SDLx::Surface
is the one being blitted to. This is useful when the surface you have isn't an SDLx::Surface
, but the surface it is being blitted to is.
flip
Applies SDL::Video::flip to the Surface, with error checking.
Returns $self
update
$sdlx_surface->update(); # whole surface is updated
$sdlx_surface->update([0,0,1,1]); # only that area (0,0,1,1) is updated
$sdlx_surface->update( [ SDL::Rect->new(0,0,1,2) ... ]); # defined rects are updated
Applies SDL::Video::update_rect for no rect or 1 array ref. Applies SDL::Video::update_rects for array of SDL::Rects.
Returns $self
draw_rect
$sdlx_surface->draw_rect( [$x,$y,$w,$h], 0xFFFF00FF );
$sdlx_surface->draw_rect( SDL::Rect->new($x,$y,$w,$h), 0xFFFF00FF );
Draws a rect on the surface with the given color. If the rect is ommited, the colored rect will be drawn to the entire surface.
Returns $self
draw_line
$sdlx_surface->draw_line( [$x1, $y1], [$x2, $y2], $color, $antialias); # $color is a number
$sdlx_surface->draw_line( [$x1, $y1], [$x2, $y2], \@color, $antialias); #
Draws a line on the surface. Antialias is turned on if $antialias is true.
Returns $self
AUTHOR
kthakore