314{
315#if wxUSE_WEBVIEW_EDGE
316
317
318 wxFileName edgeFixedDir(wxStandardPaths::Get().GetExecutablePath());
319 edgeFixedDir.SetFullName("");
320 edgeFixedDir.AppendDir("edge_fixed");
321 if (edgeFixedDir.DirExists()) {
322 wxWebViewEdge::MSWSetBrowserExecutableDir(edgeFixedDir.GetFullPath());
323 wxLogMessage("Using fixed edge version");
324 }
325#endif
326 auto url2 = url;
327#ifdef __WIN32__
328 url2.Replace("\\", "/");
329#endif
330 if (!url2.empty()) { url2 = wxURI(url2).BuildURI(); }
331 BOOST_LOG_TRIVIAL(trace) << __FUNCTION__ << ": " << url2.ToUTF8();
332
333#ifdef __WIN32__
334 wxWebView* webView = new WebViewEdge;
335#elif defined(__WXOSX__)
336 wxWebView* webView = new WebViewWebKit;
337#else
338 auto webView = wxWebView::New();
339#endif
340 if (webView) {
342
343 wxString language_code = Slic3r::GUI::wxGetApp().current_language_code().BeforeFirst('_');
344 language_code = language_code.ToStdString();
345#ifdef __WIN32__
346 webView->SetUserAgent(wxString::Format("Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
347 "AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36 Edg/107.0.1418.52 BBL-Slicer/v%s (%s) BBL-Language/%s",
348 Slic3r::GUI::wxGetApp().get_bbl_client_version(), Slic3r::GUI::wxGetApp().dark_mode() ? "dark" : "light", language_code.mb_str()));
349 webView->Create(parent, wxID_ANY, url2, wxDefaultPosition, wxDefaultSize, wxBORDER_NONE);
350
351 webView->RegisterHandler(wxSharedPtr<wxWebViewHandler>(new wxWebViewArchiveHandler("bbl")));
352
353 webView->RegisterHandler(wxSharedPtr<wxWebViewHandler>(new wxWebViewFSHandler("memory")));
354#else
355
356
357
358 static bool s_schemes_registered = false;
359 if (!s_schemes_registered) {
360 webView->RegisterHandler(wxSharedPtr<wxWebViewHandler>(new wxWebViewArchiveHandler("wxfs")));
361 webView->RegisterHandler(wxSharedPtr<wxWebViewHandler>(new wxWebViewFSHandler("memory")));
362 s_schemes_registered = true;
363 }
364 webView->Create(parent, wxID_ANY, url2, wxDefaultPosition, wxDefaultSize, wxBORDER_NONE);
365#ifdef __linux__
366 webView->SetUserAgent(linux_user_agent());
367#else
368 webView->SetUserAgent(wxString::Format("Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) BBL-Slicer/v%s (%s) BBL-Language/%s",
369 Slic3r::GUI::wxGetApp().get_bbl_client_version(), Slic3r::GUI::wxGetApp().dark_mode() ? "dark" : "light", language_code.mb_str()));
370#endif
371#endif
372#ifdef __WXMAC__
373 WKWebView * wkWebView = (WKWebView *) webView->GetNativeBackend();
375#endif
376 auto addScriptMessageHandler = [] (wxWebView *webView) {
377
378
381 return;
382 BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ": begin to add script message handler for wx.";
383 Slic3r::GUI::wxGetApp().set_adding_script_handler(true);
384 if (!webView->AddScriptMessageHandler("wx"))
385 wxLogError("Could not add script message handler");
386 else if (ref)
388 Slic3r::GUI::wxGetApp().set_adding_script_handler(false);
389 BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ": finished add script message handler for wx.";
390 };
391#ifndef __WIN32__
392 webView->CallAfter([webView, addScriptMessageHandler] {
393#endif
394 if (Slic3r::GUI::wxGetApp().is_adding_script_handler()) {
396 } else {
397 addScriptMessageHandler(webView);
400 for (const wxWeakRef<wxWebView>& wv : views)
401 if (wv)
402 addScriptMessageHandler(wv.get());
403 }
404 }
405#ifndef __WIN32__
406 });
407#endif
408 webView->EnableContextMenu(true);
409 } else {
410 BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ": failed. Use fake web view.";
411 webView = new FakeWebView;
412 }
413 webView->SetRefData(new WebViewRef(webView));
415 return webView;
416}
static std::vector< wxWeakRef< wxWebView > > g_delay_webviews
Definition WebView.cpp:274
static WebViewRef * webview_ref(wxWebView *webView)
Definition WebView.cpp:291
static std::vector< wxWebView * > g_webviews
Definition WebView.cpp:271
static wxColour darkModeColorFor(wxColour const &color)
Definition StateColor.cpp:219
bool m_script_handler_added
Definition WebView.cpp:288
void WKWebView_setTransparentBackground(void *web)
Definition MacDarkMode.mm:98