App-GUI-Harmonograph
view release on metacpan or search on metacpan
lib/App/GUI/Harmonograph/Frame/Panel/Board.pm view on Meta::CPAN
$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();
my $Cx = (exists $size->{'width'}) ? ($size->{'width'} / 2) : $self->{'center'}{'x'};
my $Cy = (defined $size->{'height'}) ? ($size->{'height'} / 2) : $self->{'center'}{'y'};
my $Cr = (defined $size->{'height'}) ? ($size->{'width'} > $size->{'height'} ? $Cx : $Cy)
: $self->{'hard_radius'};
my $board_size = $Cr;
$Cr -= 15;
#~ my $cr = App::GUI::Harmonograph::Compute::Drawing::draw( $dc );
#~ $cr->($dc);
my $code_ref = App::GUI::Harmonograph::Compute::Drawing::compile( $self->{'draw_args'}, $Cr );
$code_ref->( $dc, $Cx, $Cy ) if ref $code_ref;
delete $self->{'draw_args'};
$dc;
}
sub save_file {
my( $self, $file_name, $settings, $progress_bar, $width, $height ) = @_;
$self->{'temp'} = {settings => $settings, progress_bar => $progress_bar};
my $file_end = lc substr( $file_name, -3 );
if ($file_end eq 'svg') { $self->save_svg_file( $file_name, $width, $height ) }
elsif ($file_end eq 'png' or $file_end eq 'jpg') { $self->save_bmp_file( $file_name, $file_end, $width, $height ) }
else { return "unknown file ending: '$file_end'" }
}
sub save_svg_file {
my( $self, $file_name, $width, $height ) = @_;
$width //= $self->GetParent->{'config'}->get_value('image_size');
$height //= $self->GetParent->{'config'}->get_value('image_size');
$width //= $self->{'size'}{'x'};
$height //= $self->{'size'}{'y'};
my $dc = Wx::SVGFileDC->new( $file_name, $width, $height, 250 ); # 250 dpi
$self->paint( $dc, { width => $width, height => $height });
#my $dc = Wx::SVGFileDC->new( $file_name, $width, $height, 250 ) # 250 dpi
#->Blit (0, 0, $width, $height, $memDC, 10, 10);
}
sub save_bmp_file {
my( $self, $file_name, $file_end, $width, $height ) = @_;
$width //= $self->GetParent->{'config'}->get_value('image_size');
$height //= $self->GetParent->{'config'}->get_value('image_size');
$width //= $self->{'size'}{'x'};
$height //= $self->{'size'}{'y'};
#~ my $bmp = Wx::Bitmap->new( $width, $height, 24); # bit depth
#~ my $dc = Wx::MemoryDC->new( );
#~ $self->paint( $dc, { width => $width, height => $height });
#~ $dc->SelectObject( $bmp );
#~ $dc->SelectObject( &Wx::wxNullBitmap );
# $dc->SaveFile( $file_name, $file_end eq 'png' ? &Wx::wxBITMAP_TYPE_PNG : &Wx::wxBITMAP_TYPE_JPEG );
}
1;
( run in 0.508 second using v1.01-cache-2.11-cpan-df04353d9ac )