NAME
SDL2::rect - SDL2::Rect Management Functions
SYNOPSIS
use SDL2 qw[:rect];
DESCRIPTION
This package defines functions used to manage SDL2::Rect structures they may be imported by name of with the given tag.
Functions
These functions may be imported with the :rect
tag.
SDL_PointInRect( ... )
Find out if a given point
lies within a rectangle
.
my $dot = SDL2::Point->new( { x => 100, y => 100 } );
my $box1 = SDL2::Rect->new( { x => 0, y => 0, w => 50, h => 50 } );
my $box2 = SDL2::Rect->new( { x => 50, y => 0, w => 100, h => 101 } );
printf "point %dx%d is %sside of box 1\n", $dot->x, $dot->y,
SDL_PointInRect( $dot, $box1 ) ? 'in' : 'out';
printf "point %dx%d is %sside of box 2\n", $dot->x, $dot->y,
SDL_PointInRect( $dot, $box2 ) ? 'in' : 'out';
Expected parameters include:
point
- an SDL2::Point structurerectangle
- an SDL2::Rect structure
Returns true if point
resides inside a rectangle
.
SDL_RectEmpty( ... )
my $box = SDL2::Rect->new( { w => 0, h => 100 } );
printf 'box is %sempty', SDL_RectEmpty($box) ? '' : 'not ';
Expected parameters include:
rectangle
- an SDL2::Rect structure to query
Returns true if the rectangle
has no area.
SDL_RectEquals( ... )
Calculates whether or not two given rectangles are positionally and dimensionally the same.
my $box1 = SDL2::Rect->new( { w => 0, h => 100, x => 5 } );
my $box2 = SDL2::Rect->new( { w => 0, h => 100, x => 10 } );
my $box3 = SDL2::Rect->new( { w => 0, h => 100, x => 10 } );
printf "box 1 is %sthe same as box 2\n", SDL_RectEquals( $box1, $box2 ) ? '' : 'not ';
printf "box 2 is %sthe same as box 3\n", SDL_RectEquals( $box2, $box3 ) ? '' : 'not ';
printf "box 3 is %sthe same as box 1\n", SDL_RectEquals( $box3, $box1 ) ? '' : 'not ';
Expected parameters include:
lhs
- first SDL2::Rect structurerhs
- second SDL2::Rect structure
Returns a true value if the two rectangles are equal.
SDL_HasIntersection( ... )
Determine whether two rectangles intersect.
my $box1 = SDL2::Rect->new( { w => 10, h => 100, x => 5, y => 10 } );
my $box2 = SDL2::Rect->new( { w => 10, h => 100, x => 10, y => 0 } );
my $box3 = SDL2::Rect->new( { w => 10, h => 100, x => 100, y => 0 } );
printf "box 1 %s box 2\n",
SDL_HasIntersection( $box1, $box2 ) ? 'intersects' : 'does not intersect';
printf "box 2 %s box 3\n",
SDL_HasIntersection( $box2, $box3 ) ? 'intersects' : 'does not intersect';
printf "box 3 %s box 1\n",
SDL_HasIntersection( $box3, $box1 ) ? 'intersects' : 'does not intersect';
If either pointer is undef the function will return SDL_FALSE
.
Expected parameters include:
lhs
- an SDL2::Rect structure representing the first rectanglerhs
- an SDL2::Rect structure representing the second rectangle
Returns SDL_TRUE
if there is an intersection, SDL_FALSE
otherwise.
SDL_IntersectRect( ... )
Calculate the intersection of two rectangles.
my $box1 = SDL2::Rect->new( { w => 10, h => 100, x => 5, y => 10 } );
my $box2 = SDL2::Rect->new( { w => 10, h => 100, x => 10, y => 0 } );
my $res = SDL2::Rect->new();
printf 'the intersection of boxes 1 and 2 looks like { x => %d, y => %d, w => %d, h => %d }',
$res->x, $res->y, $res->w, $res->h
if SDL_IntersectRect( $box1, $box2, $res );
If result
is undef then this function will return SDL_FALSE
.
Expected parameters include:
lhs
- an SDL2::Rect structure representing the first rectanglerhs
- an SDL2::Rect structure representing the second rectangleresult
an SDL2::Rect structure which will be filled in with the intersection of rectangleslhs
andrhs
Returns SDL_TRUE
if there is an intersection, SDL_FALSE
otherwise.
SDL_UnionRect( ... )
Calculate the union of two rectangles.
my $box1 = SDL2::Rect->new( { w => 10, h => 100, x => 5, y => 10 } );
my $box2 = SDL2::Rect->new( { w => 10, h => 100, x => 10, y => 0 } );
my $res = SDL2::Rect->new();
SDL_UnionRect( $box1, $box2, $res );
printf 'the union of boxes 1 and 2 looks like { x => %d, y => %d, w => %d, h => %d }', $res->x,
$res->y, $res->w, $res->h;
Expected parameters include:
lhs
- an SDL2::Rect structure representing the first rectanglerhs
- an SDL2::Rect structure representing the second rectangleresult
an SDL2::Rect structure which will be filled in with the intersection of rectangleslhs
andrhs
SDL_EnclosePoints( ... )
Calculate a minimal rectangle enclosing a set of points.
my $p1 = SDL2::Point->new( { x => 1, y => 10 } );
my $p2 = SDL2::Point->new( { x => 5, y => 20 } );
my $res = SDL2::Rect->new();
printf 'points 1 and 2 are enclosed by a box like { x => %d, y => %d, w => %d, h => %d }',
$res->x, $res->y, $res->w, $res->h
if SDL_EnclosePoints( [ $p1, $p2 ], 2, undef, $res );
If clip
is not undef then only points inside of the clipping rectangle are considered.
Expected parameters include:
points
- an array of SDL2::Point structures representing points to be enclosedcount
- the number of structures in thepoints
arrayclip
- an SDL2::Rect used for clipping orundef
to enclose all pointsresult
- an SDL2::Rect structure filled in with the minimal enclosing rectangle
Returns SDL_TRUE
if any points were enclosed or SDL_FALSE
if all the points were outside of the clipping rectangle.
SDL_IntersectRectAndLine( ... )
Calculate the intersection of a rectangle and line segment.
my $box = SDL2::Rect->new( { x => 0, y => 0, w => 32, h => 32 } );
my $x1 = 0;
my $y1 = 0;
my $x2 = 31;
my $y2 = 31;
printf 'line fully inside rect was clipped: %d,%d - %d,%d', $x1, $y1, $x2, $y2
if SDL_IntersectRectAndLine( $box, \$x1, \$y1, \$x2, \$y2 );
This function is used to clip a line segment to a rectangle. A line segment contained entirely within the rectangle or that does not intersect will remain unchanged. A line segment that crosses the rectangle at either or both ends will be clipped to the boundary of the rectangle and the new coordinates saved in X1
, Y1
, X2
, and/or Y2
as necessary.
Expected parameters include:
rect
- an SDL2::Rect structure representing the rectangle to intersectX1
- a pointer to the starting X-coordinate of the lineY1
- a pointer to the starting Y-coordinate of the lineX2
- a pointer to the ending X-coordinate of the lineY2
- a pointer to the ending Y-coordinate of the line
Returns SDL_TRUE
if there is an intersection, SDL_FALSE
otherwise.
LICENSE
Copyright (C) Sanko Robinson.
This library is free software; you can redistribute it and/or modify it under the terms found in the Artistic License 2. Other copyrights, terms, and conditions may apply to data transmitted through this module.
AUTHOR
Sanko Robinson <sanko@cpan.org>