App-GUI-Harmonograph
view release on metacpan or search on metacpan
lib/App/GUI/Harmonograph/Frame/Panel/Board.pm view on Meta::CPAN
# painting area on left side
package App::GUI::Harmonograph::Frame::Panel::Board;
use v5.12;
use warnings;
use utf8;
use Wx;
use base qw/Wx::Panel/;
use App::GUI::Harmonograph::Compute::Drawing;
sub new {
my ( $class, $parent, $x, $y ) = @_;
my $self = $class->SUPER::new( $parent, -1, [-1,-1], [$x+5, $y+5] );
$self->{'menu_size'} = 27;
$self->{'size'}{'x'} = $x;
$self->{'size'}{'y'} = $y;
$self->{'center'}{'x'} = $x / 2;
$self->{'center'}{'y'} = $y / 2;
$self->{'hard_radius'} = ($x > $y ? $self->{'center'}{'y'} : $self->{'center'}{'x'});
# $self->{'dc'} = Wx::PaintDC->new( $self );
$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'} = '';
$self->{'never_painted'} = 1;
Wx::Event::EVT_PAINT( $self, sub {
my( $self, $event ) = @_;
return if exists $self->{'never_painted'};
$self->{'x_pos'} = $self->GetPosition->x;
$self->{'y_pos'} = $self->GetPosition->y;
if (exists $self->{'draw_args'}) {
$self->{'dc'}->Blit (0, 0, # x y destination
$self->{'size'}{'x'} + $self->{'x_pos'}, # width
$self->{'size'}{'y'} + $self->{'y_pos'} + $self->{'menu_size'}, # height
$self->paint( Wx::PaintDC->new( $self ), $self->{'size'} ), # source
0, 0, &Wx::wxCOPY ); # x y source
} else {
Wx::PaintDC->new( $self )->Blit (0, 0, # dest
$self->{'size'}{'x'}, $self->{'size'}{'y'} - 1, # size
$self->{'dc'}, 5, $self->{'menu_size'} + 6);
}
1;
});
return $self;
}
sub draw {
my( $self, $settings, $progress_bar ) = @_;
return unless ref $settings eq 'HASH' and ref $progress_bar;
delete $self->{'never_painted'};
$self->{'draw_args'} = {settings => $settings, progress_bar => $progress_bar, redraw => 1 };
$self->Refresh;
}
sub sketch {
my( $self, $settings, $progress_bar ) = @_;
return unless ref $settings eq 'HASH' and ref $progress_bar;
delete $self->{'never_painted'};
$self->{'draw_args'} = {settings => $settings, progress_bar => $progress_bar, redraw => 1, sketch => 1};
$self->Refresh;
}
sub paint {
my( $self, $dc, $size) = @_;
return unless ref $size eq 'HASH' and exists $self->{'draw_args'}{'settings'};
$dc->SetBackground( Wx::Brush->new( Wx::Colour->new( 255, 255, 255 ), &Wx::wxBRUSHSTYLE_SOLID ) );
$dc->Clear();
( run in 1.168 second using v1.01-cache-2.11-cpan-0bb4e1dffa6 )