Front page | perl.sdl.devel |
Postings from December 2011
Re: Button-Binding
Thread Previous
|
Thread Next
From:
Leich Tobias
Date:
December 16, 2011 08:47
Subject:
Re: Button-Binding
Message ID:
4EE86BE3.7020004@telent.de
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.leich@telent.de<mailto:tobias.leich@telent.de>
Internet: www.telent.de<http://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. L<http://www.perl-community.de/bat/poard/thread/7847><http://www.perl-community.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
Thread Previous
|
Thread Next