mirror of
				https://github.com/SoftFever/OrcaSlicer.git
				synced 2025-10-30 20:21:12 -06:00 
			
		
		
		
	
		
			
				
	
	
		
			422 lines
		
	
	
	
		
			18 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			422 lines
		
	
	
	
		
			18 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| #include "AboutDialog.hpp"
 | |
| #include "I18N.hpp"
 | |
| 
 | |
| #include "libslic3r/Utils.hpp"
 | |
| #include "GUI.hpp"
 | |
| #include "GUI_App.hpp"
 | |
| #include "MainFrame.hpp"
 | |
| #include "format.hpp"
 | |
| #include "Widgets/Button.hpp"
 | |
| 
 | |
| #include <wx/clipbrd.h>
 | |
| 
 | |
| namespace Slic3r {
 | |
| namespace GUI {
 | |
| 
 | |
| AboutDialogLogo::AboutDialogLogo(wxWindow* parent)
 | |
|     : wxPanel(parent, wxID_ANY, wxDefaultPosition, wxDefaultSize)
 | |
| {
 | |
|     this->SetBackgroundColour(*wxWHITE);
 | |
|     this->logo = ScalableBitmap(this, Slic3r::var("BambuStudio_192px.png"), wxBITMAP_TYPE_PNG);
 | |
|     this->SetMinSize(this->logo.GetBmpSize());
 | |
| 
 | |
|     this->Bind(wxEVT_PAINT, &AboutDialogLogo::onRepaint, this);
 | |
| }
 | |
| 
 | |
| void AboutDialogLogo::onRepaint(wxEvent &event)
 | |
| {
 | |
|     wxPaintDC dc(this);
 | |
|     dc.SetBackgroundMode(wxTRANSPARENT);
 | |
| 
 | |
|     wxSize size = this->GetSize();
 | |
|     int logo_w = this->logo.GetBmpWidth();
 | |
|     int logo_h = this->logo.GetBmpHeight();
 | |
|     dc.DrawBitmap(this->logo.bmp(), (size.GetWidth() - logo_w)/2, (size.GetHeight() - logo_h)/2, true);
 | |
| 
 | |
|     event.Skip();
 | |
| }
 | |
| 
 | |
| 
 | |
| // -----------------------------------------
 | |
| // CopyrightsDialog
 | |
| // -----------------------------------------
 | |
| CopyrightsDialog::CopyrightsDialog()
 | |
|     : DPIDialog(static_cast<wxWindow*>(wxGetApp().mainframe), wxID_ANY, from_u8((boost::format("%1% - %2%")
 | |
|         % (wxGetApp().is_editor() ? SLIC3R_APP_FULL_NAME : GCODEVIEWER_APP_NAME)
 | |
|         % _utf8(L("Portions copyright"))).str()),
 | |
|         wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER)
 | |
| {
 | |
|     this->SetFont(wxGetApp().normal_font());
 | |
| 	this->SetBackgroundColour(*wxWHITE);
 | |
| 
 | |
|     std::string icon_path = (boost::format("%1%/images/BambuStudioTitle.ico") % resources_dir()).str();
 | |
|     SetIcon(wxIcon(encode_path(icon_path.c_str()), wxBITMAP_TYPE_ICO));
 | |
| 
 | |
|     wxStaticLine *staticline1 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL );
 | |
| 
 | |
| 	auto sizer = new wxBoxSizer(wxVERTICAL);
 | |
|     sizer->Add( staticline1, 0, wxEXPAND | wxALL, 5 );
 | |
| 
 | |
|     fill_entries();
 | |
| 
 | |
|     m_html = new wxHtmlWindow(this, wxID_ANY, wxDefaultPosition,
 | |
|                               wxSize(40 * em_unit(), 20 * em_unit()), wxHW_SCROLLBAR_AUTO);
 | |
|     m_html->SetMinSize(wxSize(FromDIP(870),FromDIP(520)));
 | |
|     m_html->SetBackgroundColour(*wxWHITE);
 | |
|     wxFont font = get_default_font(this);
 | |
|     const int fs = font.GetPointSize();
 | |
|     const int fs2 = static_cast<int>(1.2f*fs);
 | |
|     int size[] = { fs, fs, fs, fs, fs2, fs2, fs2 };
 | |
| 
 | |
|     m_html->SetFonts(font.GetFaceName(), font.GetFaceName(), size);
 | |
|     m_html->SetBorders(2);
 | |
|     m_html->SetPage(get_html_text());
 | |
| 
 | |
|     sizer->Add(m_html, 1, wxEXPAND | wxALL, 15);
 | |
|     m_html->Bind(wxEVT_HTML_LINK_CLICKED, &CopyrightsDialog::onLinkClicked, this);
 | |
| 
 | |
|     SetSizer(sizer);
 | |
|     sizer->SetSizeHints(this);
 | |
|     CenterOnParent();
 | |
|     wxGetApp().UpdateDlgDarkUI(this);
 | |
| }
 | |
| 
 | |
| void CopyrightsDialog::fill_entries()
 | |
| {
 | |
|     m_entries = {
 | |
|         { "Admesh",                                         "",      "https://admesh.readthedocs.io/" },
 | |
|         { "Anti-Grain Geometry",                            "",      "http://antigrain.com" },
 | |
|         { "ArcWelderLib",                                   "",      "https://plugins.octoprint.org/plugins/arc_welder" },
 | |
|         { "Boost",                                          "",      "http://www.boost.org" },
 | |
|         { "Cereal",                                         "",      "http://uscilab.github.io/cereal" },
 | |
|         { "CGAL",                                           "",      "https://www.cgal.org" },
 | |
|         { "Clipper",                                        "",      "http://www.angusj.co" },
 | |
|         { "libcurl",                                        "",      "https://curl.se/libcurl" },
 | |
|         { "Eigen3",                                         "",      "http://eigen.tuxfamily.org" },
 | |
|         { "Expat",                                          "",      "http://www.libexpat.org" },
 | |
|         { "fast_float",                                     "",      "https://github.com/fastfloat/fast_float" },
 | |
|         { "GLEW (The OpenGL Extension Wrangler Library)",   "",      "http://glew.sourceforge.net" },
 | |
|         { "GLFW",                                           "",      "https://www.glfw.org" },
 | |
|         { "GNU gettext",                                    "",      "https://www.gnu.org/software/gettext" },
 | |
|         { "ImGUI",                                          "",      "https://github.com/ocornut/imgui" },
 | |
|         { "Libigl",                                         "",      "https://libigl.github.io" },
 | |
|         { "libnest2d",                                      "",      "https://github.com/tamasmeszaros/libnest2d" },
 | |
|         { "lib_fts",                                        "",      "https://www.forrestthewoods.com" },
 | |
|         { "Mesa 3D",                                        "",      "https://mesa3d.org" },
 | |
|         { "Miniz",                                          "",      "https://github.com/richgel999/miniz" },
 | |
|         { "Nanosvg",                                        "",      "https://github.com/memononen/nanosvg" },
 | |
|         { "nlohmann/json",                                  "",      "https://json.nlohmann.me" },
 | |
|         { "Qhull",                                          "",      "http://qhull.org" },
 | |
|         { "Open Cascade",                                   "",      "https://www.opencascade.com" },
 | |
|         { "OpenGL",                                         "",      "https://www.opengl.org" },
 | |
|         { "PoEdit",                                         "",      "https://poedit.net" },
 | |
|         { "PrusaSlicer",                                    "",      "https://www.prusa3d.com" },
 | |
|         { "Real-Time DXT1/DXT5 C compression library",      "",      "https://github.com/Cyan4973/RygsDXTc" },
 | |
|         { "SemVer",                                         "",      "https://semver.org" },
 | |
|         { "Shinyprofiler",                                  "",      "https://code.google.com/p/shinyprofiler" },
 | |
|         { "SuperSlicer",                                    "",      "https://github.com/supermerill/SuperSlicer" },
 | |
|         { "TBB",                                            "",      "https://www.intel.cn/content/www/cn/zh/developer/tools/oneapi/onetbb.html" },
 | |
|         { "wxWidgets",                                      "",      "https://www.wxwidgets.org" },
 | |
|         { "zlib",                                           "",      "http://zlib.net" },
 | |
| 
 | |
|     };
 | |
| }
 | |
| 
 | |
| wxString CopyrightsDialog::get_html_text()
 | |
| {
 | |
|     wxColour bgr_clr = wxGetApp().get_window_default_clr();//wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW);
 | |
| 
 | |
|     const auto text_clr = wxGetApp().get_label_clr_default();// wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOWTEXT);
 | |
|     const auto text_clr_str = wxString::Format(wxT("#%02X%02X%02X"), text_clr.Red(), text_clr.Green(), text_clr.Blue());
 | |
|     const auto bgr_clr_str = wxString::Format(wxT("#%02X%02X%02X"), bgr_clr.Red(), bgr_clr.Green(), bgr_clr.Blue());
 | |
| 
 | |
|     const wxString copyright_str = _(L("Copyright")) + "© ";
 | |
| 
 | |
|     wxString text = wxString::Format(
 | |
|         "<html>"
 | |
|             "<body bgcolor= %s link= %s>"
 | |
|             "<font color=%s>"
 | |
|                 "<font size=\"5\">%s</font><br/>"
 | |
|                 "<font size=\"5\">%s</font>"
 | |
|                 "<a href=\"%s\">%s.</a><br/>"
 | |
|                 "<font size=\"5\">%s.</font><br/>"
 | |
|                 "<br /><br />"
 | |
|                 "<font size=\"5\">%s</font><br/>"
 | |
|                 "<font size=\"5\">%s:</font><br/>"
 | |
|                 "<br />"
 | |
|                 "<font size=\"3\">",
 | |
|          bgr_clr_str, text_clr_str, text_clr_str,
 | |
|         _L("License"),
 | |
|         _L("Bambu Studio is licensed under "),
 | |
|         "https://www.gnu.org/licenses/agpl-3.0.html",_L("GNU Affero General Public License, version 3"),
 | |
|         _L("Bambu Studio is based on PrusaSlicer by Prusa Research, which is from Slic3r by Alessandro Ranellucci and the RepRap community"),
 | |
|         _L("Libraries"),
 | |
|         _L("This software uses open source components whose copyright and other proprietary rights belong to their respective owners"));
 | |
| 
 | |
|     for (auto& entry : m_entries) {
 | |
|         text += format_wxstr(
 | |
|                     "%s<br/>"
 | |
|                     , entry.lib_name);
 | |
| 
 | |
|          text += wxString::Format(
 | |
|                     "<a href=\"%s\">%s</a><br/><br/>"
 | |
|                     , entry.link, entry.link);
 | |
|     }
 | |
| 
 | |
|     text += wxString(
 | |
|                 "</font>"
 | |
|             "</font>"
 | |
|             "</body>"
 | |
|         "</html>");
 | |
| 
 | |
|     return text;
 | |
| }
 | |
| 
 | |
| void CopyrightsDialog::on_dpi_changed(const wxRect &suggested_rect)
 | |
| {
 | |
|     const wxFont& font = GetFont();
 | |
|     const int fs = font.GetPointSize();
 | |
|     const int fs2 = static_cast<int>(1.2f*fs);
 | |
|     int font_size[] = { fs, fs, fs, fs, fs2, fs2, fs2 };
 | |
| 
 | |
|     m_html->SetFonts(font.GetFaceName(), font.GetFaceName(), font_size);
 | |
| 
 | |
|     const int& em = em_unit();
 | |
| 
 | |
|     msw_buttons_rescale(this, em, { wxID_CLOSE });
 | |
| 
 | |
|     const wxSize& size = wxSize(40 * em, 20 * em);
 | |
| 
 | |
|     m_html->SetMinSize(size);
 | |
|     m_html->Refresh();
 | |
| 
 | |
|     SetMinSize(size);
 | |
|     Fit();
 | |
| 
 | |
|     Refresh();
 | |
| }
 | |
| 
 | |
| void CopyrightsDialog::onLinkClicked(wxHtmlLinkEvent &event)
 | |
| {
 | |
|     wxGetApp().open_browser_with_warning_dialog(event.GetLinkInfo().GetHref());
 | |
|     event.Skip(false);
 | |
| }
 | |
| 
 | |
| void CopyrightsDialog::onCloseDialog(wxEvent &)
 | |
| {
 | |
|      this->EndModal(wxID_CLOSE);
 | |
| }
 | |
| 
 | |
| AboutDialog::AboutDialog()
 | |
|     : DPIDialog(static_cast<wxWindow *>(wxGetApp().mainframe),wxID_ANY,from_u8((boost::format(_utf8(L("About %s"))) % (wxGetApp().is_editor() ? SLIC3R_APP_FULL_NAME : GCODEVIEWER_APP_NAME)).str()),wxDefaultPosition,
 | |
|         wxDefaultSize, /*wxCAPTION*/wxDEFAULT_DIALOG_STYLE)
 | |
| {
 | |
|     SetFont(wxGetApp().normal_font());
 | |
| 	SetBackgroundColour(*wxWHITE);
 | |
| 
 | |
|     std::string icon_path = (boost::format("%1%/images/BambuStudioTitle.ico") % resources_dir()).str();
 | |
|     SetIcon(wxIcon(encode_path(icon_path.c_str()), wxBITMAP_TYPE_ICO));
 | |
| 
 | |
|     wxPanel *m_panel = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxSize(FromDIP(560), FromDIP(237)), wxTAB_TRAVERSAL);
 | |
| 
 | |
|     wxBoxSizer *panel_versizer = new wxBoxSizer(wxVERTICAL);
 | |
|     wxBoxSizer *vesizer  = new wxBoxSizer(wxVERTICAL);
 | |
| 
 | |
|     m_panel->SetSizer(panel_versizer);
 | |
| 
 | |
|     wxBoxSizer *ver_sizer = new wxBoxSizer(wxVERTICAL);
 | |
| 
 | |
| 	auto main_sizer = new wxBoxSizer(wxVERTICAL);
 | |
|     main_sizer->Add(m_panel, 1, wxEXPAND | wxALL, 0);
 | |
|     main_sizer->Add(ver_sizer, 0, wxEXPAND | wxALL, 0);
 | |
| 
 | |
|     // logo
 | |
|     m_logo_bitmap = ScalableBitmap(this, "BambuStudio_about", 250);
 | |
|     m_logo = new wxStaticBitmap(this, wxID_ANY, m_logo_bitmap.bmp(), wxDefaultPosition,wxDefaultSize, 0);
 | |
|     m_logo->SetSizer(vesizer);
 | |
| 
 | |
|     panel_versizer->Add(m_logo, 1, wxALL | wxEXPAND, 0);
 | |
| 
 | |
|     // version
 | |
|     {
 | |
|         vesizer->Add(0, FromDIP(165), 1, wxEXPAND, FromDIP(5));
 | |
|         auto version_text = GUI_App::format_display_version();
 | |
| #if BBL_INTERNAL_TESTING
 | |
|         auto version_string = _L("Internal Version") + " " + std::string(version_text);
 | |
| #else
 | |
|         auto version_string = _L("Version") + " " + std::string(version_text);
 | |
| #endif
 | |
|         wxStaticText* version = new wxStaticText(this, wxID_ANY, version_string.c_str(), wxDefaultPosition, wxDefaultSize);
 | |
|         wxFont version_font = GetFont();
 | |
|         #ifdef __WXMSW__
 | |
|         version_font.SetPointSize(version_font.GetPointSize()-1);
 | |
|         #else
 | |
|             version_font.SetPointSize(11);
 | |
|         #endif
 | |
|         version_font.SetPointSize(FromDIP(16));
 | |
|         version->SetFont(version_font);
 | |
|         version->SetForegroundColour(wxColour("#FFFFFE"));
 | |
|         version->SetBackgroundColour(wxColour("#00AF42"));
 | |
|         vesizer->Add(version, 0, wxALL | wxALIGN_CENTER_HORIZONTAL, FromDIP(5));
 | |
|         vesizer->Add(0, 0, 1, wxEXPAND, FromDIP(5));
 | |
|     }
 | |
| 
 | |
|     wxBoxSizer *text_sizer_horiz = new wxBoxSizer(wxHORIZONTAL);
 | |
|     wxBoxSizer *text_sizer = new wxBoxSizer(wxVERTICAL);
 | |
|     text_sizer_horiz->Add( 0, 0, 0, wxLEFT, FromDIP(23));
 | |
| 
 | |
|     std::vector<wxString> text_list;
 | |
|     text_list.push_back(_L("Bambu Studio is based on PrusaSlicer by PrusaResearch and SuperSlicer by Merill(supermerill)."));
 | |
|     text_list.push_back(_L("PrusaSlicer is originally based on Slic3r by Alessandro Ranellucci."));
 | |
|     text_list.push_back(_L("Slic3r was created by Alessandro Ranellucci with the help of many other contributors."));
 | |
|     text_list.push_back(_L("Bambu Studio also referenced some ideas from Cura by Ultimaker."));
 | |
|     text_list.push_back(_L("There many parts of the software that come from community contributions, so we're unable to list them one-by-one, and instead, they'll be attributed in the corresponding code comments."));
 | |
| 
 | |
|     text_sizer->Add( 0, 0, 0, wxTOP, FromDIP(33));
 | |
|     bool is_zh = wxGetApp().app_config->get("language") == "zh_CN";
 | |
|     for (int i = 0; i < text_list.size(); i++)
 | |
|     {
 | |
|         auto staticText = new wxStaticText( this, wxID_ANY, wxEmptyString,wxDefaultPosition,wxSize(FromDIP(520), -1), wxALIGN_LEFT );
 | |
|         staticText->SetForegroundColour(wxColour(107, 107, 107));
 | |
|         staticText->SetBackgroundColour(*wxWHITE);
 | |
|         staticText->SetMinSize(wxSize(FromDIP(520), -1));
 | |
|         staticText->SetFont(Label::Body_12);
 | |
|         if (is_zh) {
 | |
|             wxString find_txt = "";
 | |
|             wxString count_txt = "";
 | |
|             for (auto  o = 0; o < text_list[i].length(); o++) {
 | |
|                 auto size = staticText->GetTextExtent(count_txt);
 | |
|                 if (size.x < FromDIP(506)) {
 | |
|                     find_txt += text_list[i][o];
 | |
|                     count_txt += text_list[i][o];
 | |
|                 } else {
 | |
|                     find_txt += std::string("\n") + text_list[i][o];
 | |
|                     count_txt = text_list[i][o];
 | |
|                 }
 | |
|             }
 | |
|             staticText->SetLabel(find_txt);
 | |
|         } else {
 | |
|             staticText->SetLabel(text_list[i]);
 | |
|             staticText->Wrap(FromDIP(520));
 | |
|         }
 | |
| 
 | |
|         text_sizer->Add( staticText, 0, wxUP | wxDOWN, FromDIP(3));
 | |
|     }
 | |
| 
 | |
|     text_sizer_horiz->Add(text_sizer, 1, wxALL,0);
 | |
|     ver_sizer->Add(text_sizer_horiz, 0, wxALL,0);
 | |
|     ver_sizer->Add( 0, 0, 0, wxTOP, FromDIP(43));
 | |
| 
 | |
|     wxBoxSizer *copyright_ver_sizer = new wxBoxSizer(wxVERTICAL);
 | |
|     wxBoxSizer *copyright_hor_sizer = new wxBoxSizer(wxHORIZONTAL);
 | |
| 
 | |
|     copyright_hor_sizer->Add(copyright_ver_sizer, 0, wxALL,5);
 | |
|     copyright_hor_sizer->Add( 0, 0, 0, wxLEFT, FromDIP(120));
 | |
| 
 | |
|     wxStaticText *html_text = new wxStaticText(this, wxID_ANY, "Copyright(C) 2021-2022 Bambu Lab", wxDefaultPosition, wxDefaultSize);
 | |
|     html_text->SetForegroundColour(wxColour(107, 107, 107));
 | |
| 
 | |
|     copyright_ver_sizer->Add(html_text, 0, wxALL , 0);
 | |
| 
 | |
|     m_html = new wxHtmlWindow(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxHW_SCROLLBAR_NEVER /*NEVER*/);
 | |
|       {
 | |
|           wxFont font = get_default_font(this);
 | |
|           const int fs = font.GetPointSize()-1;
 | |
|           int size[] = {fs,fs,fs,fs,fs,fs,fs};
 | |
|           m_html->SetFonts(font.GetFaceName(), font.GetFaceName(), size);
 | |
|           m_html->SetMinSize(wxSize(FromDIP(-1), FromDIP(16)));
 | |
|           m_html->SetBorders(2);
 | |
|           const auto text = from_u8(
 | |
|               (boost::format(
 | |
|               "<html>"
 | |
|               "<body>"
 | |
|               "<p style=\"text-align:left\"><a  href=\"www.bambulab.com\">www.bambulab.com</ a></p>"
 | |
|               "</body>"
 | |
|               "</html>")
 | |
|             ).str());
 | |
|           m_html->SetPage(text);
 | |
|           copyright_ver_sizer->Add(m_html, 0, wxEXPAND, 0);
 | |
|           m_html->Bind(wxEVT_HTML_LINK_CLICKED, &AboutDialog::onLinkClicked, this);
 | |
|       }
 | |
|     //Add "Portions copyright" button
 | |
|     Button* button_portions = new Button(this,_L("Portions copyright"));
 | |
|     StateColor report_bg(std::pair<wxColour, int>(wxColour(255, 255, 255), StateColor::Disabled), std::pair<wxColour, int>(wxColour(206, 206, 206), StateColor::Pressed),
 | |
|                          std::pair<wxColour, int>(wxColour(238, 238, 238), StateColor::Hovered), std::pair<wxColour, int>(wxColour(255, 255, 255), StateColor::Enabled),
 | |
|                          std::pair<wxColour, int>(wxColour(255, 255, 255), StateColor::Normal));
 | |
|     button_portions->SetBackgroundColor(report_bg);
 | |
|     StateColor report_bd(std::pair<wxColour, int>(wxColour(144, 144, 144), StateColor::Disabled), std::pair<wxColour, int>(wxColour(38, 46, 48), StateColor::Enabled));
 | |
|     button_portions->SetBorderColor(report_bd);
 | |
|     StateColor report_text(std::pair<wxColour, int>(wxColour(144, 144, 144), StateColor::Disabled), std::pair<wxColour, int>(wxColour(38, 46, 48), StateColor::Enabled));
 | |
|     button_portions->SetTextColor(report_text);
 | |
|     button_portions->SetFont(Label::Body_12);
 | |
|     button_portions->SetCornerRadius(FromDIP(12));
 | |
|     button_portions->SetMinSize(wxSize(FromDIP(120), FromDIP(24)));
 | |
| 
 | |
|     wxBoxSizer *copyright_button_ver = new wxBoxSizer(wxVERTICAL);
 | |
|     copyright_button_ver->Add( 0, 0, 0, wxTOP, FromDIP(10));
 | |
|     copyright_button_ver->Add(button_portions, 0, wxALL,0);
 | |
| 
 | |
|     copyright_hor_sizer->Add(copyright_button_ver, 0, wxALL,0);
 | |
|     copyright_hor_sizer->Add( 0, 0, 0, wxRIGHT, FromDIP(13));
 | |
| 
 | |
|     ver_sizer->Add(copyright_hor_sizer, 0, wxALIGN_CENTER_HORIZONTAL|wxALL,0);
 | |
|     ver_sizer->Add( 0, 0, 0, wxTOP, FromDIP(30));
 | |
|     button_portions->Bind(wxEVT_BUTTON, &AboutDialog::onCopyrightBtn, this);
 | |
| 
 | |
|     wxGetApp().UpdateDlgDarkUI(this);
 | |
| 	SetSizer(main_sizer);
 | |
|     Layout();
 | |
|     Fit();
 | |
|     CenterOnParent();
 | |
| }
 | |
| 
 | |
| void AboutDialog::on_dpi_changed(const wxRect &suggested_rect)
 | |
| {
 | |
|     m_logo_bitmap.msw_rescale();
 | |
|     m_logo->SetBitmap(m_logo_bitmap.bmp());
 | |
| 
 | |
|     const wxFont& font = GetFont();
 | |
|     const int fs = font.GetPointSize() - 1;
 | |
|     int font_size[] = { fs, fs, fs, fs, fs, fs, fs };
 | |
|     m_html->SetFonts(font.GetFaceName(), font.GetFaceName(), font_size);
 | |
| 
 | |
|     const int& em = em_unit();
 | |
| 
 | |
|     msw_buttons_rescale(this, em, { wxID_CLOSE, m_copy_rights_btn_id });
 | |
| 
 | |
|     m_html->SetMinSize(wxSize(-1, 16 * em));
 | |
|     m_html->Refresh();
 | |
| 
 | |
|     const wxSize& size = wxSize(65 * em, 30 * em);
 | |
| 
 | |
|     SetMinSize(size);
 | |
|     Fit();
 | |
|     Refresh();
 | |
| }
 | |
| 
 | |
| void AboutDialog::onLinkClicked(wxHtmlLinkEvent &event)
 | |
| {
 | |
|     wxGetApp().open_browser_with_warning_dialog(event.GetLinkInfo().GetHref());
 | |
|     event.Skip(false);
 | |
| }
 | |
| 
 | |
| void AboutDialog::onCloseDialog(wxEvent &)
 | |
| {
 | |
|     this->EndModal(wxID_CLOSE);
 | |
| }
 | |
| 
 | |
| void AboutDialog::onCopyrightBtn(wxEvent &)
 | |
| {
 | |
|     CopyrightsDialog dlg;
 | |
|     dlg.ShowModal();
 | |
| }
 | |
| 
 | |
| void AboutDialog::onCopyToClipboard(wxEvent&)
 | |
| {
 | |
|     wxTheClipboard->Open();
 | |
|     wxTheClipboard->SetData(new wxTextDataObject(_L("Version") + " " + GUI_App::format_display_version()));
 | |
|     wxTheClipboard->Close();
 | |
| }
 | |
| 
 | |
| } // namespace GUI
 | |
| } // namespace Slic3r
 | 
