UI/AppKit: Set WC's max FPS to the max FPS of the current screen

This commit is contained in:
Luke Wilde 2025-07-25 13:23:50 +01:00 committed by Alexander Kalenik
commit b0d97c991f
Notes: github-actions[bot] 2025-07-26 14:10:35 +00:00
6 changed files with 40 additions and 6 deletions

View file

@ -20,18 +20,19 @@ static T scale_for_device(T size, float device_pixel_ratio)
return size.template to_type<float>().scaled(device_pixel_ratio).template to_type<int>();
}
ErrorOr<NonnullOwnPtr<WebViewBridge>> WebViewBridge::create(Vector<Web::DevicePixelRect> screen_rects, float device_pixel_ratio, Web::CSS::PreferredColorScheme preferred_color_scheme, Web::CSS::PreferredContrast preferred_contrast, Web::CSS::PreferredMotion preferred_motion)
ErrorOr<NonnullOwnPtr<WebViewBridge>> WebViewBridge::create(Vector<Web::DevicePixelRect> screen_rects, float device_pixel_ratio, u64 maximum_frames_per_second, Web::CSS::PreferredColorScheme preferred_color_scheme, Web::CSS::PreferredContrast preferred_contrast, Web::CSS::PreferredMotion preferred_motion)
{
return adopt_nonnull_own_or_enomem(new (nothrow) WebViewBridge(move(screen_rects), device_pixel_ratio, preferred_color_scheme, preferred_contrast, preferred_motion));
return adopt_nonnull_own_or_enomem(new (nothrow) WebViewBridge(move(screen_rects), device_pixel_ratio, maximum_frames_per_second, preferred_color_scheme, preferred_contrast, preferred_motion));
}
WebViewBridge::WebViewBridge(Vector<Web::DevicePixelRect> screen_rects, float device_pixel_ratio, Web::CSS::PreferredColorScheme preferred_color_scheme, Web::CSS::PreferredContrast preferred_contrast, Web::CSS::PreferredMotion preferred_motion)
WebViewBridge::WebViewBridge(Vector<Web::DevicePixelRect> screen_rects, float device_pixel_ratio, u64 maximum_frames_per_second, Web::CSS::PreferredColorScheme preferred_color_scheme, Web::CSS::PreferredContrast preferred_contrast, Web::CSS::PreferredMotion preferred_motion)
: m_screen_rects(move(screen_rects))
, m_preferred_color_scheme(preferred_color_scheme)
, m_preferred_contrast(preferred_contrast)
, m_preferred_motion(preferred_motion)
{
m_device_pixel_ratio = device_pixel_ratio;
m_maximum_frames_per_second = static_cast<double>(maximum_frames_per_second);
}
WebViewBridge::~WebViewBridge() = default;
@ -50,6 +51,12 @@ void WebViewBridge::set_viewport_rect(Gfx::IntRect viewport_rect)
handle_resize();
}
void WebViewBridge::set_maximum_frames_per_second(u64 maximum_frames_per_second)
{
m_maximum_frames_per_second = static_cast<double>(maximum_frames_per_second);
client().async_set_maximum_frames_per_second(m_client_state.page_index, maximum_frames_per_second);
}
void WebViewBridge::update_palette()
{
auto theme = create_system_palette();