231 wxDefaultSize, wxDEFAULT_DIALOG_STYLE)
232{
234 SetBackgroundColour(*wxWHITE);
235
236 wxPanel* m_panel = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxSize(FromDIP(560), FromDIP(125)), wxTAB_TRAVERSAL);
237
238 wxBoxSizer *panel_versizer = new wxBoxSizer(wxVERTICAL);
239 wxBoxSizer *vesizer = new wxBoxSizer(wxVERTICAL);
240
241 m_panel->SetSizer(panel_versizer);
242
243 wxBoxSizer *ver_sizer = new wxBoxSizer(wxVERTICAL);
244
245 auto main_sizer = new wxBoxSizer(wxVERTICAL);
246 main_sizer->Add(m_panel, 1, wxEXPAND | wxALL, 0);
247 main_sizer->Add(ver_sizer, 0, wxEXPAND | wxALL, 0);
248
249 bool is_dark = wxGetApp().app_config->get(
"dark_color_mode") ==
"1";
250
251
252 m_logo_bitmap = ScalableBitmap(
this,
is_dark ?
"OrcaSlicer_about_dark" :
"OrcaSlicer_about", 125);
253 m_logo =
new wxStaticBitmap(
this, wxID_ANY,
m_logo_bitmap.bmp(), wxDefaultPosition,wxDefaultSize, 0);
254 m_logo->SetSizer(vesizer);
255
256 panel_versizer->Add(
m_logo, 1, wxALL | wxEXPAND, 0);
257
258
259 {
260
262
263
264 vesizer->Add(0, 0, 1, wxEXPAND, FromDIP(5));
265 auto version_string = std::string(SoftFever_VERSION);
267
269 credits_string->SetFont(_build_string_font);
270 wxFont version_font = GetFont();
271 version_font = version_font.Scaled(1.85f);
272 version->SetFont(version_font);
273 version->SetForegroundColour(wxColour("#949494"));
274 credits_string->SetForegroundColour(wxColour("#949494"));
275 version->SetBackgroundColour(wxColour("#FFFFFF"));
276 credits_string->SetBackgroundColour(wxColour("#FFFFFF"));
277
278 vesizer->Add(version, 0, wxRIGHT | wxALIGN_RIGHT, FromDIP(20));
279 vesizer->AddSpacer(FromDIP(5));
280 vesizer->Add(credits_string, 0, wxRIGHT | wxALIGN_RIGHT, FromDIP(20));
281 vesizer->Add(0, 0, 1, wxEXPAND, FromDIP(5));
282 }
283
284 wxBoxSizer *text_sizer_horiz = new wxBoxSizer(wxHORIZONTAL);
285 wxBoxSizer *text_sizer = new wxBoxSizer(wxVERTICAL);
286 text_sizer_horiz->Add( 0, 0, 0, wxLEFT, FromDIP(20));
287
288 std::vector<wxString> text_list;
289 text_list.push_back(
_L(
"Open-source slicing stands on a tradition of collaboration and attribution. Slic3r, created by Alessandro Ranellucci and the RepRap community, laid the foundation. PrusaSlicer by Prusa Research built on that work, Bambu Studio forked from PrusaSlicer, and SuperSlicer extended it with community-driven enhancements. Each project carried the work of its predecessors forward, crediting those who came before."));
290 text_list.push_back(
_L(
"OrcaSlicer began in that same spirit, drawing from PrusaSlicer, BambuStudio, SuperSlicer, and CuraSlicer. But it has since grown far beyond its origins — introducing advanced calibration tools, precise wall and seam control and hundreds of other features."));
291 text_list.push_back(
_L(
"Today, OrcaSlicer is the most widely used and actively developed open-source slicer in the 3D printing community. Many of its innovations have been adopted by other slicers, making it a driving force for the entire industry."));
292
293 text_sizer->Add( 0, 0, 0, wxTOP, FromDIP(33));
294 bool is_zh = wxGetApp().app_config->get("language") == "zh_CN";
295 for (int i = 0; i < text_list.size(); i++)
296 {
297 auto staticText =
new wxStaticText(
this, wxID_ANY, wxEmptyString,wxDefaultPosition,wxSize(FromDIP(520), -1), wxALIGN_LEFT );
298 staticText->SetForegroundColour(wxColour(107, 107, 107));
299 staticText->SetBackgroundColour(*wxWHITE);
300 staticText->SetMinSize(wxSize(FromDIP(520), -1));
302 if (is_zh) {
303 wxString find_txt = "";
304 wxString count_txt = "";
305 for (auto o = 0; o < text_list[i].length(); o++) {
306 auto size = staticText->GetTextExtent(count_txt);
307 if (size.x < FromDIP(506)) {
308 find_txt += text_list[i][o];
309 count_txt += text_list[i][o];
310 } else {
311 find_txt += "\n";
312 find_txt += text_list[i][o];
313 count_txt = text_list[i][o];
314 }
315 }
316 staticText->SetLabel(find_txt);
317 } else {
318 staticText->SetLabel(text_list[i]);
319 staticText->Wrap(FromDIP(520));
320 }
321
322 text_sizer->Add( staticText, 0, wxUP | wxDOWN, FromDIP(3));
323 }
324
325 text_sizer_horiz->Add(text_sizer, 1, wxALL,0);
326 ver_sizer->Add(text_sizer_horiz, 0, wxALL,0);
327 ver_sizer->Add( 0, 0, 0, wxTOP, FromDIP(43));
328
329 wxBoxSizer *copyright_ver_sizer = new wxBoxSizer(wxVERTICAL);
330 wxBoxSizer *copyright_hor_sizer = new wxBoxSizer(wxHORIZONTAL);
331
332 copyright_hor_sizer->Add(copyright_ver_sizer, 0, wxLEFT, FromDIP(20));
333
334 wxStaticText *html_text =
new wxStaticText(
this, wxID_ANY,
_L(
"Copyright(C) 2026 OrcaSlicer Pte Ltd All Rights Reserved"), wxDefaultPosition, wxDefaultSize);
335 html_text->SetForegroundColour(wxColour(107, 107, 107));
336
337 copyright_ver_sizer->Add(html_text, 0, wxALL , 0);
338
339 m_html =
new wxHtmlWindow(
this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxHW_SCROLLBAR_NEVER );
340 {
342 const int fs = font.GetPointSize()-1;
343 int size[] = {fs,fs,fs,fs,fs,fs,fs};
344 m_html->SetFonts(font.GetFaceName(), font.GetFaceName(), size);
345 m_html->SetMinSize(wxSize(FromDIP(-1), FromDIP(16)));
347 wxColour bgr_clr = GetBackgroundColour();
348 const auto bgr_clr_str =
encode_color(ColorRGB(bgr_clr.Red(), bgr_clr.Green(), bgr_clr.Blue()));
350 (boost::format(
351 "<html>"
352 "<body bgcolor= \"" + bgr_clr_str + "\" >"
353 "<p style=\"text-align:left\"><a style=\"color:#009789\" href=\"https://www.orcaslicer.com\">https://www.orcaslicer.com</ a></p>"
354 "</body>"
355 "</html>")
356 ).str());
358 copyright_ver_sizer->Add(
m_html, 0, wxEXPAND, 0);
360 }
361
362 Button* button_portions =
new Button(
this,
_L(
"License Info"));
364
365 wxBoxSizer *copyright_button_ver = new wxBoxSizer(wxVERTICAL);
366 copyright_button_ver->Add( 0, 0, 0, wxTOP, FromDIP(10));
367 copyright_button_ver->Add(button_portions, 0, wxALL,0);
368
369 copyright_hor_sizer->AddStretchSpacer();
370 copyright_hor_sizer->Add(copyright_button_ver, 0, wxRIGHT, FromDIP(20));
371
372 ver_sizer->Add(copyright_hor_sizer, 0, wxEXPAND ,0);
373 ver_sizer->Add( 0, 0, 0, wxTOP, FromDIP(30));
375
376 wxGetApp().UpdateDlgDarkUI(this);
377 SetSizer(main_sizer);
378 Layout();
379 Fit();
380 CenterOnParent();
381}
#define L(s)
Definition ExtrusionEntity.cpp:25
#define _L(s)
Definition OBJ.cpp:34
class WXDLLIMPEXP_FWD_CORE wxStaticText
Definition ProgressDialog.hpp:30
static bool is_dark()
Definition TextureImportDialog.cpp:85
static wxFont Body_12
Definition Label.hpp:55
void onLinkClicked(wxHtmlLinkEvent &event)
Definition AboutDialog.cpp:407
wxHtmlWindow * m_html
Definition AboutDialog.hpp:71
ScalableBitmap m_logo_bitmap
Definition AboutDialog.hpp:70
void onCopyrightBtn(wxEvent &)
Definition AboutDialog.cpp:418
wxStaticBitmap * m_logo
Definition AboutDialog.hpp:72
const wxFont & normal_font() const
Definition GUI_Utils.hpp:205
#define SLIC3R_APP_FULL_NAME
Definition libslic3r.h:11
#define GCODEVIEWER_APP_NAME
Definition libslic3r.h:12
const char *const build_commit_label
Definition BuildCommit.cpp:7
wxFont get_default_font(const wxWindow *window)
Definition GUI_Utils.hpp:96
wxString from_u8(const std::string &str)
Definition GUI.cpp:544
std::string encode_color(const ColorRGB &color)
Definition Color.cpp:397
#define _utf8(s)
Definition I18N.hpp:10