Once in a while .... (set_event_filter)


Once in a while
Things just work!



So I have been hacking for a while on SDL::Events::set_event_filter. The code below is an example usage. The magic behind this is here

 1 #!/usr/bin/perl -w
 2 use strict;
 3 use warnings;
 4 use SDL v2.3; #Require the redesign branch
 5 use SDL::Video;
 6 use SDL::Event;
 7 use SDL::Events;
 8 
 9 SDL::init(SDL_INIT_VIDEO);
10 my $display = SDL::Video::set_video_mode(640,480,32, SDL_SWSURFACE );
11 my  $event = SDL::Event->new();
12 
13 #This filters out all ActiveEvents
14 my $filter = sub { 
15      my ($e, $type) = ($_[0], $_[0]->type); 
16      if($type == SDL_ACTIVEEVENT){ return 0 } 
17      elsif($type == SDL_MOUSEBUTTONDOWN && $e->button_button == 1){ return 0 }
18      else { return 1; }
19       };
20 
21 SDL::Events::set_event_filter($filter);
22 
23 while(1)
24 {
25 
26   SDL::Events::pump_events();
27   if(SDL::Events::poll_event($event))
28   {
29 
30   if(  $event->type == SDL_ACTIVEEVENT)
31  {
32  print "Hello Mouse!!!\n" if ($event->active_gain && ($event->active_state == SDL_APPMOUSEFOCUS) );
33  print "Bye Mouse!!!\n" if (!$event->active_gain && ($event->active_state == SDL_APPMOUSEFOCUS) );
34         }
35   if( $event->type == SDL_MOUSEBUTTONDOWN)
36    {
37  my ($x, $y, $but ) = ($event->button_x, $event->button_y, $event->button_button);
38  warn "$but CLICK!!! at $x and $y \n";
39  }
40 
41       last if($event->type == SDL_QUIT);
42   }
43 }
44 SDL::quit()
 
 
Tinker with $filter and look at perldoc lib/SDL/pods/Event.pod. 
 
Have fun,
--yapgh