App-GUI-Juliagraph

 view release on metacpan or  search on metacpan

lib/App/GUI/Juliagraph/Frame/Panel/Board.pm  view on Meta::CPAN


# drawing board

package App::GUI::Juliagraph::Frame::Panel::Board;
use v5.12;
use warnings;
use Wx;
use base qw/Wx::Panel/;
use App::GUI::Juliagraph::Compute::Image;

sub new {
    my ( $class, $parent, $x, $y ) = @_;
    my $self = $class->SUPER::new( $parent, -1, [-1,-1], [$x, $y] );
    $self->{'menu_size'} = 28;
    $self->{'size'}{'x'} = $x;
    $self->{'size'}{'y'} = $y;
    $self->{'center'}{'x'} = $x / 2;
    $self->{'center'}{'y'} = $y / 2;
    $self->{'dc'} = Wx::MemoryDC->new( );
    $self->{'bmp'} = Wx::Bitmap->new( $self->{'size'}{'x'} + 10, $self->{'size'}{'y'} +10 + $self->{'menu_size'}, 24);
    $self->{'dc'}->SelectObject( $self->{'bmp'} );
    $self->{'tab'}{'constraint'} = '';

    Wx::Event::EVT_PAINT( $self, sub {
        my( $self, $event ) = @_;

        return unless ref $self->{'settings'};
        $self->{'x_pos'} = $self->GetPosition->x;
        $self->{'y_pos'} = $self->GetPosition->y;

        if (exists $self->{'flag'}{'new'}) {
            $self->{'dc'}->Blit (0, 0, $self->{'size'}{'x'} + $self->{'x_pos'},
                                       $self->{'size'}{'y'} + $self->{'y_pos'} + $self->{'menu_size'},
                                       $self->paint( Wx::PaintDC->new( $self ), $self->{'size'}{'x'}, $self->{'size'}{'y'} ), 0, 0);
        } else {
            Wx::PaintDC->new( $self )->Blit (0, 0, $self->{'size'}{'x'},
                                                   $self->{'size'}{'y'} + $self->{'menu_size'},
                                                   $self->{'dc'},
                                                   $self->{'x_pos'} , $self->{'y_pos'} + $self->{'menu_size'} );
        }
        1;
    });
    #  Wx::Event::EVT_ENTER_WINDOW( $self, sub {  });
    #  Wx::Event::EVT_LEFT_DOWN( $self, sub { });
    #  Wx::Event::EVT_MOTION( $self, sub { });
    Wx::Event::EVT_LEFT_DOWN( $self, sub {
        if (ref $self->{'tab'}{'constraint'}){
            my $pos = $_[1]->GetLogicalPosition( $self->{'dc'} );
            my $dx = ($pos->x / $self->{'center'}{'x'} ) - 1;
            my $dy = ($pos->y / $self->{'center'}{'y'} ) - 1;
            $self->{'tab'}{'constraint'}->move_center_position( $dx, $dy, 0);
        }
    });
    Wx::Event::EVT_LEFT_DCLICK( $self, sub {
        if (ref $self->{'tab'}{'constraint'}){
            my $pos = $_[1]->GetLogicalPosition($self->{'dc'});
            my $dx = ($pos->x / $self->{'center'}{'x'} ) - 1;
            my $dy = ($pos->y / $self->{'center'}{'y'} ) - 1;
            $self->{'tab'}{'constraint'}->move_center_position( $dx, $dy, 1);
        }
    });
    Wx::Event::EVT_RIGHT_DOWN( $self, sub {
        if (ref $self->{'tab'}{'constraint'}){
            my $pos = $_[1]->GetLogicalPosition($self->{'dc'});
            my $dx = ($pos->x / $self->{'center'}{'x'} ) - 1;
            my $dy = ($pos->y / $self->{'center'}{'y'} ) - 1;
            $self->{'tab'}{'constraint'}->move_center_position( $dx, $dy, -1);
        }
    });
    Wx::Event::EVT_MIDDLE_DOWN( $self, sub { $self->GetParent->draw });

    return $self;
}



( run in 1.222 second using v1.01-cache-2.11-cpan-0bb4e1dffa6 )