Desktop: Switch to immediate frame present mode on Mac (#3495)

* mac immediate render mode

* fix key modifier flags on mac
This commit is contained in:
Timon 2025-12-22 04:14:47 +00:00 committed by GitHub
parent 123108c813
commit f705d0080d
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 35 additions and 2 deletions

View file

@ -1,6 +1,7 @@
use cef::sys::{cef_key_event_type_t, cef_mouse_button_type_t};
use cef::sys::{cef_event_flags_t, cef_key_event_type_t, cef_mouse_button_type_t};
use cef::{Browser, ImplBrowser, ImplBrowserHost, KeyEvent, MouseEvent};
use winit::event::{ButtonSource, ElementState, MouseButton, MouseScrollDelta, WindowEvent};
use winit::keyboard::Key;
mod keymap;
use keymap::{ToCharRepresentation, ToNativeKeycode, ToVKBits};
@ -81,6 +82,35 @@ pub(crate) fn handle_window_event(browser: &Browser, input_state: &mut InputStat
key_event.modifiers = input_state.cef_modifiers(&event.location, event.repeat).into();
match (&event.logical_key, event.state) {
(Key::Named(winit::keyboard::NamedKey::Control), ElementState::Pressed) => {
key_event.modifiers |= cef_event_flags_t::EVENTFLAG_CONTROL_DOWN.0;
}
(Key::Named(winit::keyboard::NamedKey::Control), ElementState::Released) => {
key_event.modifiers &= !(cef_event_flags_t::EVENTFLAG_CONTROL_DOWN.0);
}
(Key::Named(winit::keyboard::NamedKey::Shift), ElementState::Pressed) => {
key_event.modifiers |= cef_event_flags_t::EVENTFLAG_SHIFT_DOWN.0;
}
(Key::Named(winit::keyboard::NamedKey::Shift), ElementState::Released) => {
key_event.modifiers &= !(cef_event_flags_t::EVENTFLAG_SHIFT_DOWN.0);
}
(Key::Named(winit::keyboard::NamedKey::Alt), ElementState::Pressed) => {
key_event.modifiers |= cef_event_flags_t::EVENTFLAG_ALT_DOWN.0;
}
(Key::Named(winit::keyboard::NamedKey::Alt), ElementState::Released) => {
key_event.modifiers &= !(cef_event_flags_t::EVENTFLAG_ALT_DOWN.0);
}
(Key::Named(winit::keyboard::NamedKey::Meta), ElementState::Pressed) => {
key_event.modifiers |= cef_event_flags_t::EVENTFLAG_COMMAND_DOWN.0;
}
(Key::Named(winit::keyboard::NamedKey::Meta), ElementState::Released) => {
key_event.modifiers &= !(cef_event_flags_t::EVENTFLAG_COMMAND_DOWN.0);
}
_ => {}
}
key_event.windows_key_code = match &event.logical_key {
winit::keyboard::Key::Named(named) => named.to_vk_bits(),
winit::keyboard::Key::Character(char) => char.chars().next().unwrap_or_default().to_vk_bits(),

View file

@ -37,10 +37,13 @@ impl RenderState {
format: surface_format,
width: size.width,
height: size.height,
#[cfg(not(target_os = "macos"))]
present_mode: surface_caps.present_modes[0],
#[cfg(target_os = "macos")]
present_mode: wgpu::PresentMode::Immediate,
alpha_mode: surface_caps.alpha_modes[0],
view_formats: vec![],
desired_maximum_frame_latency: 2,
desired_maximum_frame_latency: 1,
};
surface.configure(&context.device, &config);