/usr/local/CPAN/Tk-SlideShow/Tk/SlideShow/Arrow.pm


package Tk::SlideShow::Arrow;
@Tk::SlideShow::Arrow::ISA = qw(Tk::SlideShow::Link);
use strict;

sub New {
  my $class = shift;
  my $s = $class->SUPER::New(@_);
  bless $s;
  $s->{'shape'}=[8,10,3];
  $s->{'width'} = 1;

  my $id = $s->id;
  $s->initbind;
  $s->{-arrowoptions} = ['-arrow','last', '-width', $s->width, '-arrowshape', $s->shape];
  $s->trace_link(-100,-100,-10,-10);
  return $s;
}

sub initbind {
  my $s = shift;
  my $id = $s->id;
  my $c = Tk::SlideShow->canvas;
  
  $c->bind($id,"<ButtonPress-2>", 
	   sub { 
	       my $e = (shift)->XEvent;
	       $c->raise($id);
	       print "B2 \n";
	       $c->configure(-cursor,'sizing');
	       ($s->{'sx'},$s->{'sy'}) = ($c->canvasx($e->x),$c->canvasy($e->y));
	     });
  $c->bind($id,"<B2-Motion>", 
	   sub {
	     my $e = (shift)->XEvent;
	     my ($nx,$ny) = ($c->canvasx($e->x),$c->canvasy($e->y));
	     my ($dx,$dy) = ($nx - $s->{'sx'}, $ny - $s->{'sy'});
	     if ($dx == 0) {
	       $s->{'width'} -= $dy > 0 ? 1 : - 1;
	       $s->{'width'} = abs($s->{'width'});
	     } elsif (($dx > 0 or $dy > 0) and ($dx*$dy < 0 )) {
	       $s->{'shape'}[0] += $dx > 0 ? 1 : - 1;
	       $s->{'shape'}[0] = abs($s->{'shape'}[0]);
	     } elsif ( $dy == 0 ) {
	       $s->{'shape'}[1] += $dx > 0 ? 1 : - 1;
	       $s->{'shape'}[1] = abs($s->{'shape'}[1]);
	     } elsif ($dx*$dy > 0) {
	       $s->{'shape'}[2] += $dx > 0 ? 1 : - 1;
	       $s->{'shape'}[2] = abs($s->{'shape'}[2]);
	     } else {
	       print "*** anormal\n";
	     }

	     ($s->{'sx'}, $s->{'sy'}) = ($nx,$ny);
	     $c->itemconfigure($s->{'lineid'},'-width',$s->{'width'});
	     $c->itemconfigure($s->{'lineid'},'-arrowshape', $s->shape);
	   });

}

sub evalplace {
  my $s = shift;
  return sprintf("ftpos(%d,%d)->width(%d)->shape(%d,%d,%d)",
		 $s->fpos,$s->tpos,$s->width,@{$s->shape});
}

sub shape {
  my ($s,@vals) = @_;
  if (scalar(@vals>0) and @vals == 3) {
    $s->{'shape'} = [@vals];
    Tk::SlideShow->canvas->itemconfigure($s->{'lineid'},'-arrowshape', [@vals] );
    return $s;
  }
  return $s->{'shape'};
}
sub width {
  my ($s,$val) = @_;
  if (defined $val) {
    $s->{'width'} = $val;
    Tk::SlideShow->canvas->itemconfigure($s->{'lineid'},'-width',$val);
    return $s;
  }
  return $s->{'width'};
}

1;