diff --git a/src/slic3r/GUI/AboutDialog.cpp b/src/slic3r/GUI/AboutDialog.cpp index b7f6d23c546..59b98f998ca 100644 --- a/src/slic3r/GUI/AboutDialog.cpp +++ b/src/slic3r/GUI/AboutDialog.cpp @@ -229,9 +229,16 @@ AboutDialog::AboutDialog() bool is_dark = wxGetApp().app_config->get("dark_color_mode") == "1"; - // logo — load KX fork logo as PNG (SVG path via nanosvg cannot render embedded raster images) - m_logo_bitmap = ScalableBitmap(this, Slic3r::var("OrcaSlicer_192px.png"), wxBITMAP_TYPE_PNG); - m_logo = new wxStaticBitmap(this, wxID_ANY, m_logo_bitmap.bmp(), wxDefaultPosition, wxSize(125, 125), 0); + // logo — load KX fork logo as PNG scaled to fill the 125px header panel + { + wxImage img; + img.LoadFile(Slic3r::var("OrcaSlicer_192px.png"), wxBITMAP_TYPE_PNG); + if (img.IsOk()) + img = img.Scale(FromDIP(125), FromDIP(125), wxIMAGE_QUALITY_HIGH); + m_logo_bitmap = ScalableBitmap(this, Slic3r::var("OrcaSlicer_192px.png"), wxBITMAP_TYPE_PNG); + m_logo = new wxStaticBitmap(this, wxID_ANY, img.IsOk() ? wxBitmap(img) : m_logo_bitmap.bmp(), + wxDefaultPosition, wxSize(FromDIP(125), FromDIP(125)), 0); + } m_logo->SetSizer(vesizer); panel_versizer->Add(m_logo, 1, wxALL | wxEXPAND, 0); diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp index e7b53092e61..3e8c3cd8be8 100644 --- a/src/slic3r/GUI/GUI_App.cpp +++ b/src/slic3r/GUI/GUI_App.cpp @@ -308,8 +308,12 @@ public: m_fg_color = StateColor::darkModeColorFor(wxColour("#6B6A6A")); bool dark_mode = m_fg_color != wxColour("#6B6A6A"); wxSize sz = m_window->GetClientSize(); - BitmapCache bmp_cache; - m_logo_bmp = *bmp_cache.load_svg(dark_mode ? "splash_logo_dark" : "splash_logo", sz.GetWidth(), sz.GetHeight()); + // KX: load PNG directly — nanosvg cannot render embedded raster images in SVGs + wxImage img; + img.LoadFile(Slic3r::var("OrcaSlicer_192px.png"), wxBITMAP_TYPE_PNG); + if (img.IsOk()) + img = img.Scale(sz.GetWidth(), sz.GetHeight(), wxIMAGE_QUALITY_HIGH); + m_logo_bmp = img.IsOk() ? wxBitmap(img) : wxBitmap(); m_window->Bind(wxEVT_PAINT, &SplashScreen::OnPaint, this); m_window->Refresh(); diff --git a/src/slic3r/GUI/MsgDialog.cpp b/src/slic3r/GUI/MsgDialog.cpp index 9ad1b373c2f..ad16007e697 100644 --- a/src/slic3r/GUI/MsgDialog.cpp +++ b/src/slic3r/GUI/MsgDialog.cpp @@ -146,12 +146,6 @@ void MsgDialog::SetButtonLabel(wxWindowID btn_id, const wxString& label, bool se } } -void MsgDialog::SetButtonStyle(wxWindowID btn_id, ButtonStyle style, ButtonType type) -{ - if (Button* btn = get_button(btn_id)) - btn->SetStyle(style, type); -} - Button* MsgDialog::add_button(wxWindowID btn_id, bool set_focus /*= false*/, const wxString& label/* = wxString()*/) { Button* btn = new Button(this, label, "", 0, 0, btn_id); @@ -221,7 +215,7 @@ void MsgDialog::apply_style(long style) logo->SetBitmap( create_scaled_bitmap(style & wxAPPLY ? "completed" : style & wxICON_WARNING ? "exclamation" : // ORCA "exclamation" used for dialogs "obj_warning" used for 16x16 areas style & wxICON_INFORMATION ? "info" : - style & wxICON_QUESTION ? "question" : "OrcaSlicer_128px.png", this, 64, style & wxICON_ERROR)); + style & wxICON_QUESTION ? "question" : "OrcaSlicer_192px", this, 64, style & wxICON_ERROR)); } void MsgDialog::finalize() diff --git a/src/slic3r/GUI/ReleaseNote.cpp b/src/slic3r/GUI/ReleaseNote.cpp index f922da4c550..48f0907d05f 100644 --- a/src/slic3r/GUI/ReleaseNote.cpp +++ b/src/slic3r/GUI/ReleaseNote.cpp @@ -5,6 +5,7 @@ #include "libslic3r/Thread.hpp" #include "GUI.hpp" #include "GUI_App.hpp" +#include "GUI_Utils.hpp" #include "GUI_Preview.hpp" #include "MainFrame.hpp" #include "format.hpp" @@ -59,7 +60,7 @@ ReleaseNoteDialog::ReleaseNoteDialog(Plater *plater /*= nullptr*/) m_sizer_body->Add(0, 0, 0, wxLEFT, FromDIP(38)); - auto sm = create_scaled_bitmap("OrcaSlicer", nullptr, 70); + auto sm = create_scaled_bitmap("OrcaSlicer_192px", nullptr, 70); auto brand = new wxStaticBitmap(this, wxID_ANY, sm, wxDefaultPosition, wxSize(FromDIP(70), FromDIP(70))); m_sizer_body->Add(brand, 0, wxALL, 0); @@ -126,7 +127,7 @@ UpdatePluginDialog::UpdatePluginDialog(wxWindow* parent /*= nullptr*/) - auto sm = create_scaled_bitmap("OrcaSlicer", nullptr, 55); + auto sm = create_scaled_bitmap("OrcaSlicer_192px", nullptr, 55); auto brand = new wxStaticBitmap(this, wxID_ANY, sm, wxDefaultPosition, wxSize(FromDIP(55), FromDIP(55))); wxBoxSizer* m_sizer_right = new wxBoxSizer(wxVERTICAL); @@ -243,24 +244,25 @@ UpdateVersionDialog::UpdateVersionDialog(wxWindow *parent) auto m_line_top = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxSize(-1, 1)); m_line_top->SetBackgroundColour(wxColour(166, 169, 170)); + wxBoxSizer *m_sizer_top = new wxBoxSizer(wxHORIZONTAL); + wxBoxSizer *m_sizer_desc = new wxBoxSizer(wxVERTICAL); - wxBoxSizer *m_sizer_body = new wxBoxSizer(wxHORIZONTAL); - - - - auto sm = create_scaled_bitmap("OrcaSlicer", nullptr, 70); - m_brand = new wxStaticBitmap(this, wxID_ANY, sm, wxDefaultPosition, wxSize(FromDIP(70), FromDIP(70))); - - - - wxBoxSizer *m_sizer_right = new wxBoxSizer(wxVERTICAL); + auto sm = create_scaled_bitmap("OrcaSlicer_192px", nullptr, 64); + m_brand = new wxStaticBitmap(this, wxID_ANY, sm, wxDefaultPosition, FromDIP(wxSize(64, 64))); m_text_up_info = new Label(this, Label::Head_14, wxEmptyString, LB_AUTO_WRAP); m_text_up_info->SetForegroundColour(wxColour(0x26, 0x2E, 0x30)); - m_simplebook_release_note = new wxSimplebook(this); - m_simplebook_release_note->SetSize(wxSize(FromDIP(560), FromDIP(430))); - m_simplebook_release_note->SetMinSize(wxSize(FromDIP(560), FromDIP(430))); + // Store builds get updates from the Microsoft Store: wxID_YES opens the Store + // product page there (see the EVT_SLIC3R_VERSION_ONLINE handler) instead of GitHub. + auto github_link = new HyperLink(this, is_running_in_msix() ? _L("Check on Microsoft Store") : _L("Check on GitHub"), "", LB_AUTO_WRAP); + github_link->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent &e) { + EndModal(wxID_YES); + }); + + m_simplebook_release_note = new wxSimplebook(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxSIMPLE_BORDER); + //m_simplebook_release_note->SetSize(wxSize(FromDIP(560), FromDIP(430))); + m_simplebook_release_note->SetMinSize(FromDIP(wxSize(640,420))); m_simplebook_release_note->SetBackgroundColour(wxColour(0xF8, 0xF8, 0xF8)); m_scrollwindows_release_note = new wxScrolledWindow(m_simplebook_release_note, wxID_ANY, wxDefaultPosition, wxSize(FromDIP(560), FromDIP(430)), wxVSCROLL); @@ -269,8 +271,9 @@ UpdateVersionDialog::UpdateVersionDialog(wxWindow *parent) //webview m_vebview_release_note = CreateTipView(m_simplebook_release_note); - m_vebview_release_note->SetSize(wxSize(FromDIP(560), FromDIP(430))); - m_vebview_release_note->SetMinSize(wxSize(FromDIP(560), FromDIP(430))); + m_vebview_release_note->SetBackgroundColour(wxColour(0xF8, 0xF8, 0xF8)); + //m_vebview_release_note->SetSize(wxSize(FromDIP(560), FromDIP(430))); + //m_vebview_release_note->SetMinSize(wxSize(FromDIP(560), FromDIP(430))); //m_vebview_release_note->SetMaxSize(wxSize(FromDIP(560), FromDIP(430))); if (wxGetApp().app_config->get_bool("developer_mode")) m_vebview_release_note->EnableAccessToDevTools(); @@ -300,11 +303,9 @@ UpdateVersionDialog::UpdateVersionDialog(wxWindow *parent) m_simplebook_release_note->AddPage(m_scrollwindows_release_note, wxEmptyString, false); m_simplebook_release_note->AddPage(m_vebview_release_note, wxEmptyString, false); - - auto sizer_button = new wxBoxSizer(wxHORIZONTAL); - m_button_download = new Button(this, _L("Download")); + m_button_download = new Button(this, is_running_in_msix() ? _L("Open Microsoft Store") : _L("Download")); m_button_download->SetStyle(ButtonStyle::Confirm, ButtonType::Choice); m_button_download->Bind(wxEVT_LEFT_DOWN, [this](wxMouseEvent &e) { @@ -327,10 +328,7 @@ UpdateVersionDialog::UpdateVersionDialog(wxWindow *parent) }); auto stable_only_label = new Label(this, _L("Check for stable updates only")); - stable_only_label->SetFont(Label::Body_13); - stable_only_label->SetForegroundColour(wxColour(38, 46, 48)); stable_only_label->SetFont(Label::Body_12); - m_stable_only_label = stable_only_label; m_button_cancel = new Button(this, _L("Cancel")); m_button_cancel->SetStyle(ButtonStyle::Regular, ButtonType::Choice); @@ -339,25 +337,27 @@ UpdateVersionDialog::UpdateVersionDialog(wxWindow *parent) EndModal(wxID_NO); }); - m_sizer_main->Add(m_line_top, 0, wxEXPAND | wxBOTTOM, 0); - //sizer_button->Add(m_remind_choice, 0, wxALL | wxEXPAND, FromDIP(5)); + + sizer_button->Add(m_cb_stable_only , 0, wxALIGN_CENTER); + sizer_button->Add(stable_only_label , 0, wxALIGN_CENTER | wxLEFT, FromDIP(5)); sizer_button->AddStretchSpacer(); - sizer_button->Add(stable_only_label, 0, wxALIGN_CENTER | wxLEFT, FromDIP(7)); - sizer_button->Add(m_cb_stable_only, 0, wxALIGN_CENTER | wxLEFT, FromDIP(5)); - sizer_button->Add(m_button_download, 0, wxALL, FromDIP(5)); - sizer_button->Add(m_button_skip_version, 0, wxALL, FromDIP(5)); - sizer_button->Add(m_button_cancel, 0, wxALL, FromDIP(5)); + sizer_button->Add(m_button_download , 0, wxLEFT, FromDIP(10)); + sizer_button->Add(m_button_skip_version, 0, wxLEFT, FromDIP(10)); + sizer_button->Add(m_button_cancel , 0, wxLEFT, FromDIP(10)); - m_sizer_right->Add(m_text_up_info, 0, wxEXPAND | wxBOTTOM | wxTOP, FromDIP(15)); - m_sizer_right->Add(m_simplebook_release_note, 1, wxEXPAND | wxRIGHT, 0); - m_sizer_right->Add(sizer_button, 0, wxEXPAND | wxRIGHT, FromDIP(20)); + m_sizer_desc->AddStretchSpacer(); + m_sizer_desc->Add(m_text_up_info, 0, wxEXPAND | wxBOTTOM, FromDIP(5)); + m_sizer_desc->Add(github_link); + m_sizer_desc->AddStretchSpacer(); - m_sizer_body->Add(m_brand, 0, wxTOP|wxRIGHT|wxLEFT, FromDIP(15)); - m_sizer_body->Add(0, 0, 0, wxRIGHT, 0); - m_sizer_body->Add(m_sizer_right, 1, wxBOTTOM | wxEXPAND, FromDIP(8)); - m_sizer_main->Add(m_sizer_body, 1, wxEXPAND, 0); - m_sizer_main->Add(0, 0, 0, wxBOTTOM, 10); + m_sizer_top->Add(m_brand , 0, wxRIGHT | wxALIGN_CENTER_VERTICAL, FromDIP(15)); + m_sizer_top->Add(m_sizer_desc, 1, wxEXPAND | wxALIGN_CENTER_VERTICAL); + + m_sizer_main->Add(m_line_top , 0, wxEXPAND); + m_sizer_main->Add(m_sizer_top , 0, wxEXPAND | wxTOP | wxLEFT | wxRIGHT, FromDIP(15)); + m_sizer_main->Add(m_simplebook_release_note, 1, wxEXPAND | wxTOP | wxLEFT | wxRIGHT, FromDIP(15)); + m_sizer_main->Add(sizer_button , 0, wxEXPAND | wxALL , FromDIP(15)); SetSizer(m_sizer_main); Layout(); @@ -480,15 +480,20 @@ void UpdateVersionDialog::update_version_info(wxString release_note, wxString ve // m_vebview_release_note->LoadURL(from_u8(url_line)); // } // else { - m_button_download->SetLabel(_L("Download")); - m_simplebook_release_note->SetMaxSize(wxSize(FromDIP(560), FromDIP(430))); + //m_simplebook_release_note->SetMaxSize(wxSize(FromDIP(560), FromDIP(430))); m_simplebook_release_note->SetSelection(1); - m_text_up_info->SetLabel(wxString::Format(_L("Click to download new version in default browser: %s"), version)); + if (is_running_in_msix()) + m_text_up_info->SetLabel(wxString::Format(_L("New version available: %s. Please update OrcaSlicer from the Microsoft Store."), version)); + else + m_text_up_info->SetLabel(wxString::Format(_L("Click to download new version in default browser: %s"), version)); auto data_buf_in = release_note.utf8_str(); - auto bg_color = StateColor::darkModeColorFor(*wxWHITE).GetAsString(); - auto fg_color = StateColor::darkModeColorFor(*wxBLACK).GetAsString(); - html_source = (boost::format("") - % fg_color % bg_color).str(); + auto bg_color = StateColor::darkModeColorFor(wxColour("#FFFFFF")).GetAsString(); + auto fg_color = StateColor::darkModeColorFor(wxColour("#262E30")).GetAsString(); + auto style = "body {color:" + fg_color + "; background-color:" + bg_color + "; font-family:sans-serif}" + + "a {color: #009688}" // matches hyperlink colors + + "img {max-width:100%; height:auto}" // fixes overflowing images + + "ul {padding-inline-start: 20px}"; // reduce left padding on list items + html_source = (boost::format("") % style).str(); md_html(data_buf_in.data(), data_buf_in.length(), [](const MD_CHAR* text, MD_SIZE size, void* userdata) { std::string* out_buf = (std::string*)userdata; out_buf->append(text, size); @@ -505,56 +510,6 @@ void UpdateVersionDialog::update_version_info(wxString release_note, wxString ve Fit(); } -void UpdateVersionDialog::update_version_info_simple(wxString current_version, wxString available_version) -{ - m_text_up_info->Hide(); - m_button_download->SetLabel(_L("Open Downloads")); - m_cb_stable_only->Hide(); - m_stable_only_label->Hide(); - m_simplebook_release_note->SetSelection(0); - const wxSize compact_note_size(FromDIP(360), FromDIP(110)); - m_simplebook_release_note->SetSize(compact_note_size); - m_simplebook_release_note->SetMinSize(compact_note_size); - m_simplebook_release_note->SetMaxSize(compact_note_size); - m_scrollwindows_release_note->SetSize(compact_note_size); - m_scrollwindows_release_note->SetMinSize(compact_note_size); - m_scrollwindows_release_note->SetMaxSize(compact_note_size); - - auto content_sizer = new wxBoxSizer(wxVERTICAL); - auto versions = new wxFlexGridSizer(2, 0, FromDIP(14)); - versions->AddGrowableCol(1); - - auto current_label = new Label(m_scrollwindows_release_note, _L("Current version:")); - current_label->SetFont(Label::Body_13); - current_label->SetForegroundColour(wxColour(38, 46, 48)); - auto current_value = new Label(m_scrollwindows_release_note, current_version); - current_value->SetFont(Label::Body_13); - current_value->SetForegroundColour(wxColour(38, 46, 48)); - auto available_label = new Label(m_scrollwindows_release_note, _L("Available version:")); - available_label->SetFont(Label::Body_13); - available_label->SetForegroundColour(wxColour(38, 46, 48)); - auto available_value = new Label(m_scrollwindows_release_note, available_version); - available_value->SetFont(Label::Body_13); - available_value->SetForegroundColour(wxColour(38, 46, 48)); - - versions->Add(current_label, 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL); - versions->Add(current_value, 1, wxEXPAND); - versions->Add(available_label, 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL); - versions->Add(available_value, 1, wxEXPAND); - content_sizer->Add(versions, 0, wxALL | wxEXPAND, FromDIP(24)); - - m_scrollwindows_release_note->SetSizer(content_sizer); - m_scrollwindows_release_note->Layout(); - - wxGetApp().UpdateDlgDarkUI(this); - SetMinSize(wxDefaultSize); - SetMaxSize(wxDefaultSize); - Layout(); - Fit(); - SetMinSize(GetSize()); - Centre(wxBOTH); -} - SecondaryCheckDialog::SecondaryCheckDialog(wxWindow* parent, wxWindowID id, const wxString& title, enum VisibleButtons btn_style, const wxPoint& pos, const wxSize& size, long style, bool not_show_again_check) // ORCA VisibleButtons instead ButtonStyle :DPIFrame(parent, id, title, pos, size, style) { diff --git a/src/slic3r/GUI/TroubleshootDialog.cpp b/src/slic3r/GUI/TroubleshootDialog.cpp index 2a617251b2d..f06d7531211 100644 --- a/src/slic3r/GUI/TroubleshootDialog.cpp +++ b/src/slic3r/GUI/TroubleshootDialog.cpp @@ -127,8 +127,14 @@ TroubleshootDialog::TroubleshootDialog() // LEFT SIZER ////////////////////// // HEADER - m_logo = ScalableBitmap(this, is_dark ? "OrcaSlicer_horizontal_dark" : "OrcaSlicer_horizontal_light", 64); - m_header_logo = new wxStaticBitmap(this, wxID_ANY, m_logo.bmp()); + // KX: load PNG directly — horizontal SVGs contain nanosvg-incompatible embedded raster + { + wxImage img; + img.LoadFile(Slic3r::var("OrcaSlicer_64.png"), wxBITMAP_TYPE_PNG); + if (img.IsOk()) img = img.Scale(FromDIP(64), FromDIP(64), wxIMAGE_QUALITY_HIGH); + m_logo = ScalableBitmap(this, "OrcaSlicer_64.png", 64); + m_header_logo = new wxStaticBitmap(this, wxID_ANY, img.IsOk() ? wxBitmap(img) : m_logo.bmp()); + } auto logo_line = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxSize(-1, FromDIP(2))); logo_line->SetBackgroundColour(StateColor::darkModeColorFor(wxColour("#009687"))); auto version = new Label(this, wxString(SoftFever_VERSION), wxALIGN_CENTRE_HORIZONTAL); diff --git a/src/slic3r/GUI/UpdateDialogs.cpp b/src/slic3r/GUI/UpdateDialogs.cpp index e45a83b4c39..69d5942c776 100644 --- a/src/slic3r/GUI/UpdateDialogs.cpp +++ b/src/slic3r/GUI/UpdateDialogs.cpp @@ -111,7 +111,7 @@ MsgUpdateConfig::MsgUpdateConfig(const std::vector &updates, bool force_ m_sizer_body->Add(0, 0, 0, wxLEFT, FromDIP(38)); - auto sm = create_scaled_bitmap("OrcaSlicer", nullptr, 70); + auto sm = create_scaled_bitmap("OrcaSlicer_192px", nullptr, 70); auto brand = new wxStaticBitmap(this, wxID_ANY, sm, wxDefaultPosition, wxSize(FromDIP(70), FromDIP(70))); m_sizer_body->Add(brand, 0, wxALL, 0);