AboutDialog.pm 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. package Slic3r::GUI::AboutDialog;
  2. use strict;
  3. use warnings;
  4. use utf8;
  5. use Wx qw(:font :html :misc :dialog :sizer :systemsettings);
  6. use Wx::Event qw(EVT_HTML_LINK_CLICKED);
  7. use Wx::Print;
  8. use Wx::Html;
  9. use base 'Wx::Dialog';
  10. sub new {
  11. my $class = shift;
  12. my ($parent) = @_;
  13. my $self = $class->SUPER::new($parent, -1, 'About Slic3r', wxDefaultPosition, [600, 300], &Wx::wxCLOSE_BOX);
  14. $self->SetBackgroundColour(Wx::wxWHITE);
  15. my $hsizer = Wx::BoxSizer->new(wxHORIZONTAL);
  16. $self->SetSizer($hsizer);
  17. # logo
  18. my $logo = Slic3r::GUI::AboutDialog::Logo->new($self, -1, wxDefaultPosition, wxDefaultSize);
  19. $logo->SetBackgroundColour(Wx::wxWHITE);
  20. $hsizer->Add($logo, 0, wxEXPAND | wxLEFT | wxRIGHT, 30);
  21. my $vsizer = Wx::BoxSizer->new(wxVERTICAL);
  22. $hsizer->Add($vsizer, 1, wxEXPAND, 0);
  23. # title
  24. my $title = Wx::StaticText->new($self, -1, 'Slic3r', wxDefaultPosition, wxDefaultSize);
  25. my $title_font = Wx::SystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT);
  26. $title_font->SetWeight(wxFONTWEIGHT_BOLD);
  27. $title_font->SetFamily(wxFONTFAMILY_ROMAN);
  28. $title_font->SetPointSize(24);
  29. $title->SetFont($title_font);
  30. $vsizer->Add($title, 0, wxALIGN_LEFT | wxTOP, 30);
  31. # version
  32. my $version = Wx::StaticText->new($self, -1, "Version $Slic3r::VERSION", wxDefaultPosition, wxDefaultSize);
  33. my $version_font = Wx::SystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT);
  34. $version_font->SetPointSize(&Wx::wxMSW ? 9 : 11);
  35. $version->SetFont($version_font);
  36. $vsizer->Add($version, 0, wxALIGN_LEFT | wxBOTTOM, 10);
  37. # text
  38. my $text =
  39. '<html>' .
  40. '<body bgcolor="#ffffff" link="#808080">' .
  41. '<font color="#808080">' .
  42. 'Copyright &copy; 2011-2015 Alessandro Ranellucci. <br />' .
  43. '<a href="http://slic3r.org/">Slic3r</a> is licensed under the ' .
  44. '<a href="http://www.gnu.org/licenses/agpl-3.0.html">GNU Affero General Public License, version 3</a>.' .
  45. '<br /><br /><br />' .
  46. 'Contributions by Henrik Brix Andersen, Nicolas Dandrimont, Mark Hindess, Petr Ledvina, Y. Sapir, Mike Sheldrake and numerous others. ' .
  47. 'Manual by Gary Hodgson. Inspired by the RepRap community. <br />' .
  48. 'Slic3r logo designed by Corey Daniels, <a href="http://www.famfamfam.com/lab/icons/silk/">Silk Icon Set</a> designed by Mark James. ' .
  49. '</font>' .
  50. '</body>' .
  51. '</html>';
  52. my $html = Wx::HtmlWindow->new($self, -1, wxDefaultPosition, wxDefaultSize, wxHW_SCROLLBAR_NEVER);
  53. my $font = Wx::SystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT);
  54. my $size = &Wx::wxMSW ? 8 : 10;
  55. $html->SetFonts($font->GetFaceName, $font->GetFaceName, [$size, $size, $size, $size, $size, $size, $size]);
  56. $html->SetBorders(2);
  57. $html->SetPage($text);
  58. $vsizer->Add($html, 1, wxEXPAND | wxALIGN_LEFT | wxRIGHT | wxBOTTOM, 20);
  59. EVT_HTML_LINK_CLICKED($self, $html, \&link_clicked);
  60. return $self;
  61. }
  62. sub link_clicked {
  63. my ($self, $event) = @_;
  64. Wx::LaunchDefaultBrowser($event->GetLinkInfo->GetHref);
  65. $event->Skip(0);
  66. }
  67. package Slic3r::GUI::AboutDialog::Logo;
  68. use Wx qw(:bitmap :dc);
  69. use Wx::Event qw(EVT_PAINT);
  70. use base 'Wx::Panel';
  71. sub new {
  72. my $class = shift;
  73. my $self = $class->SUPER::new(@_);
  74. $self->{logo} = Wx::Bitmap->new("$Slic3r::var/Slic3r_192px.png", wxBITMAP_TYPE_PNG);
  75. $self->SetMinSize(Wx::Size->new($self->{logo}->GetWidth, $self->{logo}->GetHeight));
  76. EVT_PAINT($self, \&repaint);
  77. return $self;
  78. }
  79. sub repaint {
  80. my ($self, $event) = @_;
  81. my $dc = Wx::PaintDC->new($self);
  82. $dc->SetBackgroundMode(wxTRANSPARENT);
  83. my $size = $self->GetSize;
  84. my $logo_w = $self->{logo}->GetWidth;
  85. my $logo_h = $self->{logo}->GetHeight;
  86. $dc->DrawBitmap($self->{logo}, ($size->GetWidth - $logo_w) / 2, ($size->GetHeight - $logo_h) / 2, 1);
  87. $event->Skip;
  88. }
  89. 1;