App-PLab

 view release on metacpan or  search on metacpan

bin/PrAverB  view on Meta::CPAN

   unless ( $dbl) {
      if ( $me-> {lastStateSelected}) {
         $me-> {state} = $me-> {state} ? 0 : 1;
         $me-> repaint;
         return 1;
      }
   } elsif ( $btn == mb::Left) {
      $me-> {state} = $me-> {state} ? 0 : 1;
      $me-> repaint;
      $w-> fig_propdialog( $me);
      return 1;
   }
   return 0;
}


sub selected
{
   return 0 unless $_[0]-> {owner}->{selectedRect};
   return $_[0] == $_[0]-> {owner}->{selectedRect};
}

sub select
{
   return if $_[0]-> selected;
   $_[0]-> {owner}->{selectedRect} = $_[0];
   $_[0]-> {IV}-> repaint;
   $_[0]-> {IV}-> update_view;
}

sub open_transaction
{
   my ( $w, $iv) = ( $_[0]->{owner}, $_[0]-> {IV});
   my ( $me, $mode, $x, $y, $ax, $ay) = @_;
   $w-> iv_entermode( $iv, $mode);
   my @r = @{$_[0]-> {bounds}};
   $me-> repaint;
   $iv-> update_view;
   $iv-> {xorData} = [ $iv-> point2screen( @r[0,1,0,3,2,3,2,1])];
   $iv-> {xorPolyData} = [ $iv-> point2screen( @{$_[0]-> {rect}})];
   $w-> IV_xorrect( $iv);
   $w-> IV_xorpoly( $iv) unless $me->{rectLike};
   $iv-> {screenPoints} = [ $x, $y];
   $iv-> {points} = [ $ax, $ay];
}

sub close_transaction
{
   my ( $w, $iv) = ( $_[0]->{owner}, $_[0]-> {IV});
   $iv-> pointer( $iv-> {savePointer});
   $iv-> {transaction} = undef;
   $iv-> capture(0);
   $w-> IV_xorpoly( $iv) unless $_[0]->{rectLike};
   $w-> IV_xorrect( $iv);
   $iv-> repaint;
   $w-> modified( 1);
}

sub repaint
{
   $_[0]-> {IV}-> invalidate_rect( $_[0]-> get_screen_bounds);
}

sub on_paint
{
   my ( $me, $w, $iv, $canvas) = @_;
   my @r = $iv-> point2screen( @{$_-> {rect}});
   push @r, @r[0,1];
   $canvas-> polyline(\@r);
   if ( defined $me->{number}) {
      $canvas-> text_out( $me->{number}, $iv-> point2screen( $me->{bounds}->[0], $me->{bounds}->[1]));
   }
   if ( $w-> {selectedRect} && $me == $w-> {selectedRect} && !$iv->{transaction}) {
      my $c = $canvas-> color;
      my $pc = $w->{ini}->{Color_Selection} + 0;
      $pc = ~($pc) & 0xFFFFFF;
      $canvas-> color( $pc);
      $canvas-> rop( rop::XorPut);
      @r = $me-> get_screen_bounds;
      my $hw = $r[0]+($r[2]-$r[0])/2;
      my $hh = $r[1]+($r[3]-$r[1])/2;
      if ( $me->{state} == 0) {
         $canvas-> bar( $r[0],$r[1],$r[0]+4,$r[1]+4);
         $canvas-> bar( $hw-2,$r[1],$hw+2,$r[1]+4);
         $canvas-> bar( $r[2]-5,$r[1],$r[2]-1,$r[1]+4);
         $canvas-> bar( $r[0],$r[3]-5,$r[0]+4,$r[3]-1);
         $canvas-> bar( $hw-2,$r[3]-5,$hw+2,$r[3]-1);
         $canvas-> bar( $r[2]-5,$r[3]-5,$r[2]-1,$r[3]-1);
         $canvas-> bar( $r[0],$hh-2,$r[0]+4,$hh+2);
         $canvas-> bar( $r[2]-5,$hh-2,$r[2]-1,$hh+2);
      } else {
         $canvas-> arc( $r[0]+16, $r[1]+16, 8, 8, 180, 270);
         $canvas-> arc( $r[0]+16, $r[3]-16, 8, 8, 90, 180);
         $canvas-> arc( $r[2]-16, $r[3]-16, 8, 8, 0, 90);
         $canvas-> arc( $r[2]-16, $r[1]+16, 8, 8, 270, 360);
         $canvas-> line( $r[0]+2, $hh - 5, $r[0]+2, $hh + 5);
         $canvas-> line( $hw - 5, $r[1]+2, $hw + 5, $r[1]+2);
         $canvas-> line( $r[2]-2, $hh - 5, $r[2]-2, $hh + 5);
         $canvas-> line( $hw - 5, $r[3]-2, $hw + 5, $r[3]-2);
      }
      $r[0] += 3;
      $r[1] += 3;
      $r[2] -= 3;
      $r[3] -= 3;
      $canvas-> rectangle( @r);
      $canvas-> rop( rop::CopyPut);
      $canvas-> color( $c);
   }
}

sub compare_to
{
   my @d  = map {
      my $g = $_[0]-> {bounds}-> [$_] - $_[1]-> {bounds}->[$_];
      $g = 0 if abs($g) < 8; # XXX
      $g;
   } 0,1;
   return ($d[1] != 0) ? -$d[1] : $d[0];
}

package AveWindow;



( run in 0.760 second using v1.01-cache-2.11-cpan-39bf76dae61 )