mirror of
https://github.com/OrcaSlicer/OrcaSlicer.git
synced 2026-09-16 13:32:44 +00:00
fix: invoke js clearInterval on WebMediaController::stop
This commit is contained in:
@@ -4,25 +4,20 @@
|
||||
|
||||
namespace Slic3r { namespace GUI {
|
||||
|
||||
WebMediaController::WebMediaController(wxWebView *webview) : m_webview(webview)
|
||||
WebMediaController::WebMediaController(wxWebView* webview) : m_webview(webview)
|
||||
{
|
||||
if (!m_webview)
|
||||
return;
|
||||
|
||||
m_webview->SetBackgroundColour(*wxBLACK);
|
||||
m_webview->SetPage(
|
||||
"<html><head><style>html,body{margin:0;height:100%;background:#000;}</style></head><body></body></html>",
|
||||
"");
|
||||
m_webview->SetPage("<html><head><style>html,body{margin:0;height:100%;background:#000;}</style></head><body></body></html>", "");
|
||||
}
|
||||
|
||||
void WebMediaController::Load(wxURI url)
|
||||
{
|
||||
Load(url, CameraStreamMode::http);
|
||||
}
|
||||
void WebMediaController::Load(wxURI url) { Load(url, CameraStreamMode::http); }
|
||||
|
||||
void WebMediaController::Load(wxURI url, CameraStreamMode mode)
|
||||
{
|
||||
m_url = url.BuildURI().ToStdString();
|
||||
m_url = url.BuildURI().ToStdString();
|
||||
m_stream_mode = mode;
|
||||
}
|
||||
|
||||
@@ -31,13 +26,14 @@ void WebMediaController::Play()
|
||||
if (!m_webview)
|
||||
return;
|
||||
|
||||
wxString url = wxString::FromUTF8(m_url);
|
||||
wxString url = wxString::FromUTF8(m_url);
|
||||
wxString html = "<html><head><style>"
|
||||
"html,body{margin:0;height:100%;background:#000;overflow:hidden;}"
|
||||
"img{width:100%;height:100%;object-fit:contain;display:block;}"
|
||||
"</style></head><body><img id=\"camera-frame\"";
|
||||
if (m_stream_mode == CameraStreamMode::http_snapshot) {
|
||||
html += " data-camera-url=\"" + url + "\"><script>"
|
||||
html += " data-camera-url=\"" + url +
|
||||
"\"><script>"
|
||||
"const cameraFrame=document.getElementById('camera-frame');"
|
||||
"const cameraUrl=cameraFrame.dataset.cameraUrl;"
|
||||
"let cameraFrameLoading=false;"
|
||||
@@ -49,8 +45,15 @@ void WebMediaController::Play()
|
||||
"nextFrame.onerror=function(){cameraFrameLoading=false;};"
|
||||
"nextFrame.src=cameraUrl+(cameraUrl.indexOf('?')>=0?'&':'?')+'_orca_frame='+Date.now();"
|
||||
"}"
|
||||
"let cameraRefreshInterval=null;"
|
||||
"function stopCameraRefresh(){"
|
||||
"if(cameraRefreshInterval!==null){"
|
||||
"clearInterval(cameraRefreshInterval);"
|
||||
"cameraRefreshInterval=null;"
|
||||
"}"
|
||||
"}"
|
||||
"refreshCameraFrame();"
|
||||
"setInterval(refreshCameraFrame,200);"
|
||||
"cameraRefreshInterval = setInterval(refreshCameraFrame,200);"
|
||||
"</script></body></html>";
|
||||
m_webview->SetPage(html, url);
|
||||
} else {
|
||||
@@ -63,9 +66,11 @@ void WebMediaController::Play()
|
||||
|
||||
void WebMediaController::Stop()
|
||||
{
|
||||
m_url.clear();
|
||||
if (m_webview)
|
||||
if (m_webview) {
|
||||
m_webview->RunScript("if(typeof stopCameraRefresh==='function') stopCameraRefresh();");
|
||||
m_webview->Stop();
|
||||
}
|
||||
m_url.clear();
|
||||
}
|
||||
|
||||
}} // namespace Slic3r::GUI
|
||||
|
||||
Reference in New Issue
Block a user