
SDL::App::FPS::Button - a clickable area (aka button) for SDL::App::FPS

use SDL::FPS::App;
use SDL::FPS::App::Button;
$app = SDL::FPS::App->new( ... );
my $button = $app->add_button( $x,$y,$w,$h,
BUTTON_CLICK, BUTTON_RECTANGULAR, BUTTON_MOUSE_LEFT, sub { ... } );

Exports on request the following symbols:
Event types:
BUTTON_IN BUTTON_OUT BUTTON_HOVER BUTTON_DOWN BUTTON_UP BUTTON_CLICK
Button shapes:
BUTTON_RECTANGULAR BUTTON_ELLIPTIC
Mouse button types:
BUTTON_MOUSE_LEFT BUTTON_MOUSE_RIGHT BUTTON_MOUSE_MIDDLE BUTTON_MOUSE_WHEEL_DOWN BUTTON_MOUSE_WHEEL_UP BUTTON_MOUSE_MIDDLE

This package provides a class for rectangular, elliptic or round 'clickable' areas, which you can use as buttons.
Each of these buttons will watch for SDL_MOUSEMOVED, SDL_MOUSEBUTTONUP and SDL_MOUSEBUTTONDOWND events and when they occured, call the corrosponding callback function.

Once the specific event occurs, the given callback code (CODE ref) is called with the following parameters:
&{$callback}($self,$button,@arguments);
$self is the app the object resides in (e.g. the object of type SDL::App::FPS), $button is the button itself, and the additional arguments are whatever was passed when new() was called.

my $button = SDL::App::FPS::Button->new(
$app,$x,$y,$w,$h,$type,$button,$shape,$callback,@args);
Creates a new button, and registers it with the application $app. $type is one of the following event types:
BUTTON_IN The mouse was moved from the outside to the
inside the area, happens only when the mouse
crossed the border from outside to inside
BUTTON_OUT Like BUTTON_IN, but in the other direction
BUTTON_HOVER Happens whenever the mouse is moved and the
pointers final position is inside the area
In most cases you want to use BUTTON_IN instead
BUTTON_DOWN A mouse button was pressed inside the area
BUTTON_UP A mouse button was released inside the area
BUTTON_CLICK A mouse button was pressed inside the area and
then released again inside the area
The last type gives a user a chance to move the mouse pointer out of the area while holding it pressed and so prevent the callback from happening.
You can use || or + add them together, the callback will then happen when any one of these events occured:
my $button = SDL::App::FPS::Button->new(
$app,$x,$y,$w,$h,BUTTON_DOWN+BUTTON_UP,
$button,$shape,$callback,@args);
Please note that for a single click inside the area, both pressed and released events will occur, resulting in the callback being called twice.
For types BUTTON_IN, BUTTON_OUT and BUTTON_HOVER, the $button argument will be ignored.
The $button argument is one of the three mouse buttons BUTTON_MOUSE_LEFT, BUTTON_MOUSE_RIGHT or BUTTON_MOUSE_MIDDLE. You can add them together to trigger the callback for more than one button, like:
my $button = SDL::App::FPS::Button->new(
$app,$x,$y,$w,$h,BUTTON_CLICK,
BUTTON_MOUSE_LEFT+BUTTON_MOUSE_RIGHT,
$shape,$callback,@args);
$shape is one of the two BUTTON_RECTANGULAR or BUTTON_ELLIPTIC shapes.
$button->move_to($x,$y);
Move the button center to the new coordinates $x and $y.
$button->resize($w,$h);
Resize the button's width and height to $w and $h.
if ($button->is_active())
{
...
}
Returns true if the button is active.
$button->deactivate();
Deactivate the button. It will no longer respond to mouse clicks.
$button->activate();
Re-activate the button. It will now again respond to mouse clicks.
$button->hit($x,$y);
Returns true if the point $x,$y is inside the button area.
$group->id();
Returns the ID of the group itself.
$button->x(8);
if ($button->x() < 78)
{
...
}
Get/set the button's x coordinate.
$button->y(1);
if ($button->y() < 28)
{
...
}
Get/set the button's y coordinate.
$button->width(1);
if ($button->width() < 28)
{
...
}
Get/set the button's width (aka size in X direction).
$button->height(1);
if ($button->height() < 28)
{
...
}
Get/set the button's height (aka size in Y direction).

None known yet.

(c) 2002, 2003 Tels <http://bloodgate.com/>

SDL:App::FPS, SDL::App and SDL.