Hi, if you use SDLx::App and its -run method you can use the event
handlers. SDLx::App is basically a huge while loop that loops over its
registered handlers.
If you are not using SDLx::App, you have to do it yourself in a while loop.
Thats it.
--
Cheers, FROGGS
PS: please forget about my office mail address.
Am 18.12.2011 21:34, schrieb Alex:
Hm, when do I use a selfmade while loop that processes the event queue and
when do I use add_event_handler() from SDLx for processing events?
Kind regards,
Alex
-Ursprüngliche Nachricht-
Von: Leich Tobias [mailto:tobias.le...@telent.de]
Gesendet: Mittwoch, 14. Dezember 2011 10:27
An: Alex
Cc: sdl-devel@perl.org
Betreff: Re: Button-Binding
Hi, for b)
Add an event listener like this
http://sdl.perl.org/SDL-Events.html#SYNOPSIS
and call the tk-callback when receiving the right event.
(SDL_MOUSEBUTTONUP
I suppose)
Cheers, FROGGS
mit freundlichen Grüßen
Tobias Leich
Entwicklung ICT
telent GmbH - ein Unternehmen der euromicron Gruppe Rheinstraße 10B,
D-14513
Teltow
Tel.: +49-(0)3328 4590-512
Fax.: +49-(0)3328 4590-55 512
Mobil: +49-(0)152 579 39 064
E-Mail: tobias.le...@telent.demailto:tobias.le...@telent.de
Internet: www.telent.dehttp://www.telent.de
telent GmbH - ein Unternehmen der euomicron Gruppe, Sitz Backnang;
Registergericht: Amtsgericht Stuttgart, HRB 738199
Geschäftsführung: Dr. Stefan Kindt, Hans-Peter Fischer, Robert Blum,
Alexander Thome
Am 09.12.2011 22:00, schrieb Alex:
Deal all!
I continue my experiments with SDL. I found some old thread somewhere and
now I have a button-like image that switches its appearance when I hover
over it (with the mouse).
Here are the questions:
a) Is the code attached the recommended way to do it or should it be
done in
another fashion?
b) I would like to add an action, when someone clicks the button. In
Tk-terminology, this would be a callback. Any suggestions on how I
should do
this?
Best regards,
Alex
[code]
#!perl
package My::SimpleButton;
use strict;
use warnings;
use SDL;
use SDLx::Rect;
use Data::Dumper qw/Dumper/;
=head1
=cut
sub new {
my ($class,@params) = @_;
my $self = {};
bless($self,$class);
for(qw(ID APP X Y IMG IMGHV IMGPRESSED)){
$self-{$_} = shift(@params);
}
$self-{HV} = 0;
$self-draw($self-{IMG});
return($self);
}
sub draw{
my ($self, $img) = @_;
my $frame_rect = SDLx::Rect-new(0, 0, $img-width(), $img-height());
my $dest_rect = SDLx::Rect-new(
$self-{X},
$self-{Y},
$img-width(),
$img-height(),
);
$self-{APP}-blit_by($img, [0, 0, $img-width(), $img-height()], [
$self-{X},
$self-{Y},
$img-width(),
$img-height(),
]);
$self-{APP}-update();
return 1;
}
sub check{
my ($self,$mx,$my,$event) = @_;
my $img = $self-{IMG};
#Hover - Effekt
if( $mx $self-{X}
$mx ($self-{X}+ $img-width)
$my $self-{Y}
$my ($self-{Y}+ $img-height) ){
if( !$self-{HV} ) {
$self-{HV} = 1;
$self-draw($self-{IMGHV});
}
} else {
if($self-{HV}) {
$self-{HV}=0;
$self-draw($self-{IMG});
}
return 0;
}
return;
}
=head1 CREDITS
c.f.
Lhttp://www.perl-community.de/bat/poard/thread/7847http://www.perl-commun
ity.de/bat/poard/thread/7847
=cut
1; # /My::SimpleButton
use SDL;
use SDLx::App;
use SDL::Event;
use SDL::Events;
use SDLx::Surface;
use SDL::Color;
my $app = SDLx::App-new(
w = 640,
h = 400,
exit_on_quit = 1,
);
$app-add_event_handler( \quit_event ); $app-add_event_handler(
\mnouseover );
my $img = SDLx::Surface-load( 'images/blueOpera_1.png' ); my $img2 =
SDLx::Surface-load( 'images/blueOpera_2.png' ); my $img3 =
SDLx::Surface-load( 'images/redOpera_2.png' );
my $SimpleButton = My::SimpleButton-new(1, $app, 65, 25, $img, $img2,
$img3);
$app-run();
sub quit_event {
#The callback is provided a SDL::Event to use
my $event = shift;
#Each event handler also returns you back the Controller call it
my $controller = shift;
#Stopping the controller for us will exit $app-run() for us
$controller-stop if $event-type == SDL_QUIT; } # /quit_event
sub mnouseover {
#The callback is provided a SDL::Event to use
my $event = shift;
#Each event handler also returns you back the Controller call it
my $controller = shift;
if( $event-type == SDL_MOUSEMOTION ) {
my $click = $SimpleButton-check($event-motion_x,
$event-motion_y,$event);
}
} # /mnouseover
exit(0);
[/code]
Scanned by MailDefender - managed email security from intY -
www.maildefender.net
-
eMail ist virenfrei.
Von AVG überprüft - www.avg.de
Version: 10.0.1415 / Virendatenbank: 2108/4084 - Ausgabedatum: 16.12.2011