NAME
SDL::App::FPS::Button - a clickable area (aka button) for SDL::App::FPS
SYNOPSIS
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
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
DESCRIPTION
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.
CALLBACK
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.
METHODS
- new()
-
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. - move_to()
-
$button->move_to($x,$y);
Move the button center to the new coordinates $x and $y.
- resize()
-
$button->resize($w,$h);
Resize the button's width and height to
$w
and$h
. - is_active()
-
if ($button->is_active()) { ... }
Returns true if the button is active.
- deactivate()
-
$button->deactivate();
Deactivate the button. It will no longer respond to mouse clicks.
- activate()
-
$button->activate();
Re-activate the button. It will now again respond to mouse clicks.
- hit()
-
$button->hit($x,$y);
Returns true if the point $x,$y is inside the button area.
- id()
-
$group->id();
Returns the ID of the group itself.
- x()
-
$button->x(8); if ($button->x() < 78) { ... }
Get/set the button's x coordinate.
- y()
-
$button->y(1); if ($button->y() < 28) { ... }
Get/set the button's y coordinate.
- width()
-
$button->width(1); if ($button->width() < 28) { ... }
Get/set the button's width (aka size in X direction).
- height()
-
$button->height(1); if ($button->height() < 28) { ... }
Get/set the button's height (aka size in Y direction).
BUGS
None known yet.
AUTHORS
(c) 2002, 2003 Tels <http://bloodgate.com/>
SEE ALSO
SDL:App::FPS, SDL::App and SDL.