Re: Button-Binding

2011-12-18 Thread Tobias Leich
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

Re: Button-Binding

2011-12-16 Thread Kartik Thakore
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.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-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