App-GUI-Harmonograph
view release on metacpan or search on metacpan
lib/App/GUI/Wx/Widget/Custom/Canvas.pm view on Meta::CPAN
Wx::Event::EVT_LEFT_DCLICK( $self, sub {
#~ my $dx = ($pos->x / $self->{'center'}{'x'} ) - 1;
#~ my $dy = ($pos->y / $self->{'center'}{'y'} ) - 1;
});
Wx::Event::EVT_RIGHT_DOWN( $self, sub {
#~ my $dx = ($pos->x / $self->{'center'}{'x'} ) - 1;
#~ my $dy = ($pos->y / $self->{'center'}{'y'} ) - 1;
});
Wx::Event::EVT_MIDDLE_DOWN( $self, sub {
#~ my $dx = ($pos->x / $self->{'center'}{'x'} ) - 1;
#~ my $dy = ($pos->y / $self->{'center'}{'y'} ) - 1;
});
return $self;
}
sub connect_constrains_tab {
my ($self, $ref) = @_;
return unless ref $ref eq 'App::GUI::Spirograph::Frame::Tab::Constraints';
$self->{'tab'}{'constraint'} = $ref;
}
sub draw {
my( $self, $settings ) = @_;
return unless $self->set_settings( $settings );
$self->{'flag'}{'draw'} = 1;
$self->Refresh;
}
sub sketch {
my( $self, $settings ) = @_;
return unless $self->set_settings( $settings );
$self->{'flag'}{'sketch'} = 1;
$self->Refresh;
}
sub set_settings {
my( $self, $settings ) = @_;
return unless ref $settings eq 'HASH';
$self->{'settings'} = $settings;
$self->{'flag'}{'new'} = 1;
}
sub paint {
my( $self, $dc, $width, $height ) = @_;
my $img = App::GUI::Spirograph::Compute::Image::from_settings(
$self->{'settings'}, $self->{'size'}, $self->{'flag'}{'sketch'},
);
$dc->DrawBitmap( Wx::Bitmap->new( $img ), 0, 0, 0 ); # at point (0, 0) with no mask
$self->{'image'} = $img unless $self->{'flag'}{'sketch'};
delete $self->{'flag'};
$dc;
}
sub save_file {
my( $self, $file_name, $width, $height ) = @_;
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, $height );
}
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'};
# reuse $set->{'image'}
my $bmp = Wx::Bitmap->new( $width, $height, 24); # bit depth
my $dc = Wx::MemoryDC->new( );
$dc->SelectObject( $bmp );
$self->paint( $dc, $width, $height);
# $dc->Blit (0, 0, $width, $height, $self->{'dc'}, 10, 10 + $self->{'menu_size'});
$dc->SelectObject( &Wx::wxNullBitmap );
$bmp->SaveFile( $file_name, $file_end eq 'png' ? &Wx::wxBITMAP_TYPE_PNG : &Wx::wxBITMAP_TYPE_JPEG );
}
1;
( run in 0.761 second using v1.01-cache-2.11-cpan-df04353d9ac )