Skip to content

Commit 571da42

Browse files
committed
Add support for setting zoom for browser sources
Previously, the only way to scale up a page was to use custom CSS, which may or may not work well depending on how the CSS rules of the page being displayed were written, or to transform the browser source, which would be blurry. To make it possible to do this properly, I've implemented support for setting the zoom level of the browser, equivalent to pressing Ctrl-+ / Ctrl-- in a browser. The range of [-6, 9] comes from kPresetZoomFactorsArray in Chromium. Zoom levels are indexes into this array, offset so that a 0 zoom level is 1.0.
1 parent e873fb0 commit 571da42

5 files changed

+21
-1
lines changed

browser-client.cpp

+6
Original file line numberDiff line numberDiff line change
@@ -648,6 +648,12 @@ void BrowserClient::OnAudioStreamStopped(CefRefPtr<CefBrowser> browser, int id)
648648
}
649649
#endif
650650

651+
void BrowserClient::OnLoadStart(CefRefPtr<CefBrowser> browser,
652+
CefRefPtr<CefFrame>, TransitionType)
653+
{
654+
browser->GetHost()->SetZoomLevel(bs->zoom);
655+
}
656+
651657
void BrowserClient::OnLoadEnd(CefRefPtr<CefBrowser>, CefRefPtr<CefFrame> frame,
652658
int)
653659
{

browser-client.hpp

+4
Original file line numberDiff line numberDiff line change
@@ -179,6 +179,10 @@ class BrowserClient : public CefClient,
179179
int frames_per_buffer) override;
180180
#endif
181181
/* CefLoadHandler */
182+
virtual void OnLoadStart(CefRefPtr<CefBrowser> browser,
183+
CefRefPtr<CefFrame> frame,
184+
TransitionType transition_type) override;
185+
182186
virtual void OnLoadEnd(CefRefPtr<CefBrowser> browser,
183187
CefRefPtr<CefFrame> frame,
184188
int httpStatusCode) override;

obs-browser-plugin.cpp

+2
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,8 @@ static obs_properties_t *browser_source_get_properties(void *data)
187187
8192, 1);
188188
obs_properties_add_int(props, "height", obs_module_text("Height"), 1,
189189
8192, 1);
190+
obs_properties_add_int(props, "zoom", obs_module_text("Zoom"), -6, 9,
191+
1);
190192

191193
obs_properties_add_bool(props, "reroute_audio",
192194
obs_module_text("RerouteAudio"));

obs-browser-source.cpp

+8-1
Original file line numberDiff line numberDiff line change
@@ -512,6 +512,7 @@ void BrowserSource::Update(obs_data_t *settings)
512512
bool n_is_local;
513513
int n_width;
514514
int n_height;
515+
int n_zoom;
515516
bool n_fps_custom;
516517
int n_fps;
517518
bool n_shutdown;
@@ -524,6 +525,7 @@ void BrowserSource::Update(obs_data_t *settings)
524525
n_is_local = obs_data_get_bool(settings, "is_local_file");
525526
n_width = (int)obs_data_get_int(settings, "width");
526527
n_height = (int)obs_data_get_int(settings, "height");
528+
n_zoom = (int)obs_data_get_int(settings, "zoom");
527529
n_fps_custom = obs_data_get_bool(settings, "fps_custom");
528530
n_fps = (int)obs_data_get_int(settings, "fps");
529531
n_shutdown = obs_data_get_bool(settings, "shutdown");
@@ -582,11 +584,13 @@ void BrowserSource::Update(obs_data_t *settings)
582584
n_reroute == reroute_audio &&
583585
n_webpage_control_level == webpage_control_level) {
584586

585-
if (n_width == width && n_height == height)
587+
if (n_width == width && n_height == height &&
588+
n_zoom == zoom)
586589
return;
587590

588591
width = n_width;
589592
height = n_height;
593+
zoom = n_zoom;
590594
ExecuteOnBrowser(
591595
[=](CefRefPtr<CefBrowser> cefBrowser) {
592596
const CefSize cefSize(width, height);
@@ -596,6 +600,8 @@ void BrowserSource::Update(obs_data_t *settings)
596600
->OnAutoResize(cefBrowser,
597601
cefSize);
598602
cefBrowser->GetHost()->WasResized();
603+
cefBrowser->GetHost()->SetZoomLevel(
604+
zoom);
599605
cefBrowser->GetHost()->Invalidate(
600606
PET_VIEW);
601607
},
@@ -606,6 +612,7 @@ void BrowserSource::Update(obs_data_t *settings)
606612
is_local = n_is_local;
607613
width = n_width;
608614
height = n_height;
615+
zoom = n_zoom;
609616
fps = n_fps;
610617
fps_custom = n_fps_custom;
611618
shutdown_on_invisible = n_shutdown;

obs-browser-source.hpp

+1
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@ struct BrowserSource {
8181

8282
int width = 0;
8383
int height = 0;
84+
int zoom = 0;
8485
bool fps_custom = false;
8586
int fps = 0;
8687
double canvas_fps = 0;

0 commit comments

Comments
 (0)