Audio

 view release on metacpan or  search on metacpan

Tk/Scope.pm  view on Meta::CPAN

package Tk::Scope;
use strict;
use Tk;
use Tk::widgets qw(Canvas Scrollbar DialogBox);
use Audio::Data;
use base qw(Tk::Derived Tk::Canvas);
use File::Temp qw(tempfile);

Construct Tk::Widget 'Scope';

sub ClassInit
{
 my ($class,$mw) = @_;
 
 $mw->bind($class,'<4>',[Wheel => -1, Ev('x')]); 
 $mw->bind($class,'<5>',[Wheel => 1, Ev('x')]); 
 
 $mw->bind($class,'<1>',[Cursor => 1,Ev('x')]); 
 $mw->bind($class,'<B1-Motion>',[Cursor => 2,Ev('x')]); 
 $mw->bind($class,'<ButtonRelease-1>',[Range => Ev('x'),-rangecmd => 1,2,Ev('s')]); 

 $mw->bind($class,'<3>',[Cursor => 'z1',Ev('x')]); 
 $mw->bind($class,'<B3-Motion>',[Cursor => 'z2',Ev('x')]); 
 $mw->bind($class,'<ButtonRelease-3>',[Range => Ev('x'),-zoomcmd => 'z1','z2',Ev('s')]); 
 
 $mw->bind($class,'<Configure>','scheduleRedisplay');
 $mw->bind($class,'<Print>','Print');
 return $class;
}
 
sub Wheel
{
 my ($c,$n,$x) = @_;
 $c->xview(scroll => $n*0.1, 'pages');
}

sub doZoom
{
 my ($c,$t1,$t2,$s) = @_; 
 # warn "Zoom '$s' $t1 -> $t2\n";
 if ($s =~ /Shift/)
  {
   my $s = $c->start;
   my $e = $c->end;
   my $w = $e-$s;               # width now
   my $dt = $t2-$t1;
   my $l1 = $w*$w/$dt;
   my $s1 = $s - ($t1-$s)*$w/$dt;
   $s1 = 0 if ($s1 < 0);
   my $e1 = $s1+$l1;
   $e1 = $c->xmax if ($e1 > $c->xmax);
   $c->start($s1); 
   $c->end($e1); 
  }
 else
  { 
   $c->start($t1); 
   $c->end($t2); 
  } 
}
 
sub Range
{
 my ($c,$x,$callback,$n,$m,@args) = @_;
 $m = 1 if ($m eq '2' && !$c->cget('-range1'));
 $c->Cursor($m,$x);



( run in 0.682 second using v1.01-cache-2.11-cpan-d7a12ab2c7f )