Gtk2-Ex-Dragger

 view release on metacpan or  search on metacpan

devel/run.pl  view on Meta::CPAN

my $vscroll = Gtk2::VScrollBar->new ($vadj);
$table->attach ($vscroll, 1,2, 0,1,
                [],['expand','shrink','fill'], 0,0);

my $hadj = Gtk2::Adjustment->new (100, 0, 300, 1, 10, 100);
my $hscroll = Gtk2::HScrollBar->new ($hadj);
$table->attach ($hscroll, 0,1, 1,2,
                ['expand','shrink','fill'],[], 0,0);

my $dragger;
my $confine = 0;
my $hinverted = 0;
my $vinverted = 0;
my $update_policy = 0;
sub make {
  $dragger = Gtk2::Ex::Dragger->new (widget        => $area,
                                     hadjustment   => $hadj,
                                     vadjustment   => $vadj,
                                     hinverted     => $hinverted,
                                     vinverted     => $vinverted,
                                     update_policy => $update_policy,
                                     confine       => $confine,
                                     cursor        => 'fleur');
  print "$progname ",($confine?"confined ":"unconfined "),
    ($hinverted?"hinv ":"hnorm "),
      ($vinverted?"vinv":"vnorm"),
        "policy $update_policy\n";
}
# make();

sub update {
  if (defined $dragger) {
    make ();
  }
}
{
  my $button = Gtk2::CheckButton->new_with_label ('Confine');
  $vbox->pack_start ($button, 0,0,0);
  $button->signal_connect (toggled => sub {
                             $confine = $button->get_active;
                             update();
                           });
}
{
  my $button = Gtk2::CheckButton->new_with_label ('H Inverted');
  $vbox->pack_start ($button, 0,0,0);
  $button->signal_connect ('notify::active' => sub {
                             $hinverted = $button->get_active;
                             update();
                           });
}
{
  my $button = Gtk2::CheckButton->new_with_label ('V Inverted');
  $vbox->pack_start ($button, 0,0,0);
  $button->signal_connect ('notify::active' => sub {
                             $vinverted = $button->get_active;
                             update();
                           });
}
# {
#   my $combobox = Gtk2::ComboBox->new_text;
#   $vbox->pack_start ($combobox, 0,0,0);
#   foreach my $policy ('default', 'continuous', 'discontinuous', 'delayed') {
#     $combobox->append_text ($policy);
#   }
#   $combobox->set_active (0);
#   $combobox->signal_connect
#     (changed => sub {
#        $update_policy = $combobox->get_active_text;
#        update();
#      });
# }
{
  require Gtk2::Ex::ComboBox::Enum;
  my $combobox = Gtk2::Ex::ComboBox::Enum->new
    (enum_type   => 'Gtk2::Ex::Dragger::UpdatePolicy',
     active_nick => Gtk2::Ex::Dragger->find_property('update-policy')->get_default_value);
  $vbox->pack_start ($combobox, 0,0,0);
  $combobox->signal_connect
    ('notify::active-nick' => sub {
       $update_policy = $combobox->get('active-nick');
       update();
     });
}
{
  my $button = Gtk2::CheckButton->new_with_label ('Hint Mask');
  $vbox->pack_start ($button, 0,0,0);
  $button->signal_connect
    (notify => sub {
       $area->unrealize;
       my $motion_mask = $button->get_active
         ? ['pointer-motion-hint-mask'] : [];
       my $new_mask = $area->get('events')
         - 'pointer-motion-hint-mask'
           + $motion_mask;
       $area->set(events => $new_mask);
       print "$progname: area widget events ",$area->get('events'),"\n";
       $area->show;
       $area->map;
       my ($width, $height) = $area->window->get_size;
       print "$progname: area ${width}x${height} window events ",$area->window->get_events,"\n";

       $update_policy = 'continuous';
       update();
     });
}
my $sleep = 0;
{
  my $button = Gtk2::CheckButton->new_with_label ('Sleep on Start');
  $vbox->pack_start ($button, 0,0,0);
  $button->signal_connect
    ('notify::active' => sub {
       $sleep = $button->get_active;
       print "$progname: setup sleep $sleep\n";
     });
}

{
  my $label = Gtk2::Label->new ('Keys:
Up,Down,Left,Right,
PgUp, PgDown');
  $vbox->pack_start ($label, 0,0,0);

  $area->signal_connect
    (key_press_event => sub {
       my ($area, $event) = @_;
       if ($event->keyval == Gtk2::Gdk->keyval_from_name('Page_Down')) {
         $vadj->set_value (min ($vadj->upper - $vadj->page_size,
                                $vadj->value + $vadj->page_increment));

       } elsif ($event->keyval == Gtk2::Gdk->keyval_from_name('Page_Up')) {
         $vadj->set_value (max ($vadj->lower,
                                $vadj->value - $vadj->page_increment));

       } elsif ($event->keyval == Gtk2::Gdk->keyval_from_name('Down')) {
         $vadj->set_value (min ($vadj->upper - $vadj->page_size,
                                $vadj->value + $vadj->step_increment));

       } elsif ($event->keyval == Gtk2::Gdk->keyval_from_name('Up')) {
         $vadj->set_value (max ($vadj->lower,
                                $vadj->value - $vadj->step_increment));



( run in 1.038 second using v1.01-cache-2.11-cpan-8dfa8b56332 )