Front page | perl.sdl.devel |
Postings from December 2011
Re: Button-Binding
Thread Previous
|
Thread Next
From:
Kartik Thakore
Date:
December 16, 2011 08:52
Subject:
Re: Button-Binding
Message ID:
-3191584242836348199@unknownmsgid
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.Leich@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.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