Is there a framework to resolve location of events better? Sent from my iPhone
On 2011-12-16, at 11:48 AM, Leich Tobias <tobias.le...@telent.de> wrote: > 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.de<mailto:tobias.le...@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