Skip to content

Commit bbb8641

Browse files
zavitaxOsirisNL
authored andcommitted
Don't paint sources that are invisible
1 parent c2aa136 commit bbb8641

File tree

4 files changed

+112
-1
lines changed

4 files changed

+112
-1
lines changed

obs-browser/browser-manager-base.cpp

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,21 @@ int BrowserManager::CreateBrowser(
3636
return pimpl->CreateBrowser(browserSettings, browserListener);
3737
}
3838

39+
CefBrowserHost* BrowserManager::GetBrowserHost(int browserIdentifier)
40+
{
41+
return pimpl->GetBrowserHost(browserIdentifier);
42+
}
43+
44+
CefBrowser* BrowserManager::GetBrowser(int browserIdentifier)
45+
{
46+
return pimpl->GetBrowser(browserIdentifier);
47+
}
48+
49+
void BrowserManager::LoadURL(int browserIdentifier, CefString& url)
50+
{
51+
return pimpl->LoadURL(browserIdentifier, url);
52+
}
53+
3954
bool BrowserManager::IsValidBrowserIdentifier(int browserIdentifier)
4055
{
4156
return pimpl->IsValidBrowserIdentifier(browserIdentifier);
@@ -184,6 +199,65 @@ int BrowserManager::Impl::CreateBrowser(
184199
return browserIdentifier;
185200
}
186201

202+
CefBrowserHost* BrowserManager::Impl::GetBrowserHost(int browserIdentifier)
203+
{
204+
CefBrowserHost* result = NULL;
205+
206+
os_event_t* complete_event;
207+
os_event_init(&complete_event, OS_EVENT_TYPE_AUTO);
208+
209+
CefPostTask(TID_UI, BrowserTask::newTask(
210+
[&]
211+
{
212+
result = browserMap[browserIdentifier]->GetHost();
213+
214+
os_event_signal(complete_event);
215+
}));
216+
217+
os_event_wait(complete_event);
218+
os_event_destroy(complete_event);
219+
220+
return result;
221+
}
222+
223+
CefBrowser* BrowserManager::Impl::GetBrowser(int browserIdentifier)
224+
{
225+
CefBrowser* result = NULL;
226+
227+
os_event_t* complete_event;
228+
os_event_init(&complete_event, OS_EVENT_TYPE_AUTO);
229+
230+
CefPostTask(TID_UI, BrowserTask::newTask(
231+
[&]
232+
{
233+
result = browserMap[browserIdentifier];
234+
235+
os_event_signal(complete_event);
236+
}));
237+
238+
os_event_wait(complete_event);
239+
os_event_destroy(complete_event);
240+
241+
return result;
242+
}
243+
244+
void BrowserManager::Impl::LoadURL(int browserIdentifier, CefString& url)
245+
{
246+
os_event_t* complete_event;
247+
os_event_init(&complete_event, OS_EVENT_TYPE_AUTO);
248+
249+
CefPostTask(TID_UI, BrowserTask::newTask(
250+
[&]
251+
{
252+
browserMap[browserIdentifier]->GetMainFrame()->LoadURL(url);
253+
254+
os_event_signal(complete_event);
255+
}));
256+
257+
os_event_wait(complete_event);
258+
os_event_destroy(complete_event);
259+
}
260+
187261
bool BrowserManager::Impl::IsValidBrowserIdentifier(int browserIdentifier)
188262
{
189263
return browserIdentifier >= 0 && browserMap.count(browserIdentifier) > 0;

obs-browser/browser-manager-base.hpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,10 @@ class BrowserManager::Impl
3333
const BrowserSettings &browserSettings,
3434
const std::shared_ptr<BrowserListener> &browserListener);
3535

36+
CefBrowserHost* GetBrowserHost(int browserIdentifier);
37+
CefBrowser* GetBrowser(int browserIdentifier);
38+
void LoadURL(int browserIdentifier, CefString& url);
39+
3640
bool IsValidBrowserIdentifier(int browserIdentifier);
3741
void DestroyBrowser(int browserIdentifier);
3842
void TickBrowser(int browserIdentifier);

obs-browser/main-source.cpp

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -176,13 +176,30 @@ static void browser_source_show(void *data)
176176
else {
177177
bs->ExecuteVisiblityJSCallback(true);
178178
}
179+
180+
// Start animation
181+
BrowserManager::Instance()->GetBrowser(bs->GetBrowserIdentifier())->GetHost()->WasHidden(false);
182+
183+
#ifdef APPLE
184+
BrowserManager::Instance()->GetBrowser(bs->GetBrowserIdentifier())->GetHost()->SetWindowVisibility(true);
185+
#endif
186+
187+
// Repaint the view
188+
BrowserManager::Instance()->GetBrowser(bs->GetBrowserIdentifier())->GetHost()->Invalidate(PET_VIEW);
179189
}
180190

181191
// Called when the source is no longer visible
182192
static void browser_source_hide(void *data)
183193
{
184194
BrowserSource *bs = static_cast<BrowserSource *>(data);
185195

196+
// Stop animation
197+
BrowserManager::Instance()->GetBrowser(bs->GetBrowserIdentifier())->GetHost()->WasHidden(true);
198+
199+
#ifdef APPLE
200+
BrowserManager::Instance()->GetBrowser(bs->GetBrowserIdentifier())->GetHost()->SetWindowVisibility(false);
201+
#endif
202+
186203
if (bs->GetShutdown()) {
187204
BrowserManager::Instance()->DestroyBrowser(bs->GetBrowserIdentifier());
188205
}
@@ -196,7 +213,17 @@ static void *browser_source_create(obs_data_t *settings, obs_source_t *source)
196213
BrowserSource *browserSource = new BrowserSource(settings, source);
197214

198215
if (browserSource->GetShutdown() && !obs_source_showing(source))
216+
{
199217
BrowserManager::Instance()->DestroyBrowser(browserSource->GetBrowserIdentifier());
218+
}
219+
else
220+
{
221+
if (!obs_source_showing(source))
222+
{
223+
// Stop animation
224+
BrowserManager::Instance()->GetBrowser(browserSource->GetBrowserIdentifier())->GetHost()->WasHidden(true);
225+
}
226+
}
200227

201228
return browserSource;
202229
}
@@ -295,4 +322,4 @@ create_browser_source_info()
295322

296323

297324
return browser_source_info;
298-
}
325+
}

shared/browser-manager.hpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919

2020
#include <memory>
2121
#include <jansson.h>
22+
#include <include/cef_base.h>
23+
#include <include/cef_client.h>
2224

2325
class BrowserListener;
2426
struct BrowserSettings;
@@ -42,6 +44,10 @@ class BrowserManager {
4244
const std::shared_ptr<BrowserListener>
4345
&browserListener);
4446

47+
CefBrowserHost* GetBrowserHost(int browserIdentifier);
48+
CefBrowser* GetBrowser(int browserIdentifier);
49+
void LoadURL(int browserIdentifier, CefString& url);
50+
4551
bool IsValidBrowserIdentifier(int browserIdentifier);
4652

4753
void DestroyBrowser(int browserIdentifier);

0 commit comments

Comments
 (0)