Skip to content

Commit d232ba0

Browse files
committed
Move Cef Handler into the cef module
1 parent 4450536 commit d232ba0

4 files changed

Lines changed: 56 additions & 60 deletions

File tree

desktop/src/app.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ use std::sync::Arc;
66
use std::sync::mpsc::Sender;
77
use std::time::Duration;
88
use std::time::Instant;
9-
use tracing::instrument::WithSubscriber;
109
use winit::application::ApplicationHandler;
1110
use winit::dpi::PhysicalSize;
1211
use winit::event::StartCause;

desktop/src/cef.rs

Lines changed: 53 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,16 @@
1-
use crate::FrameBuffer;
2-
use std::time::Instant;
1+
use crate::{CustomEvent, FrameBuffer};
2+
use std::{
3+
sync::{Arc, Mutex, mpsc::Receiver},
4+
time::Instant,
5+
};
36

47
mod context;
58
mod input;
69
mod internal;
710
mod scheme_handler;
811

912
pub(crate) use context::{Context, InitError, Initialized, Setup, SetupError};
13+
use winit::event_loop::EventLoopProxy;
1014

1115
pub(crate) trait CefEventHandler: Clone {
1216
fn window_size(&self) -> WindowSize;
@@ -27,3 +31,50 @@ impl WindowSize {
2731
Self { width, height }
2832
}
2933
}
34+
35+
#[derive(Clone)]
36+
pub(crate) struct CefHandler {
37+
window_size_receiver: Arc<Mutex<WindowSizeReceiver>>,
38+
event_loop_proxy: EventLoopProxy<CustomEvent>,
39+
}
40+
struct WindowSizeReceiver {
41+
receiver: Receiver<WindowSize>,
42+
window_size: WindowSize,
43+
}
44+
impl WindowSizeReceiver {
45+
fn new(window_size_receiver: Receiver<WindowSize>) -> Self {
46+
Self {
47+
window_size: WindowSize { width: 1, height: 1 },
48+
receiver: window_size_receiver,
49+
}
50+
}
51+
}
52+
impl CefHandler {
53+
pub(crate) fn new(window_size_receiver: Receiver<WindowSize>, event_loop_proxy: EventLoopProxy<CustomEvent>) -> Self {
54+
Self {
55+
window_size_receiver: Arc::new(Mutex::new(WindowSizeReceiver::new(window_size_receiver))),
56+
event_loop_proxy,
57+
}
58+
}
59+
}
60+
61+
impl CefEventHandler for CefHandler {
62+
fn window_size(&self) -> WindowSize {
63+
let Ok(mut guard) = self.window_size_receiver.lock() else {
64+
tracing::error!("Failed to lock window_size_receiver");
65+
return WindowSize::new(1, 1);
66+
};
67+
let WindowSizeReceiver { receiver, window_size } = &mut *guard;
68+
for new_window_size in receiver.try_iter() {
69+
*window_size = new_window_size;
70+
}
71+
*window_size
72+
}
73+
fn draw(&self, frame_buffer: FrameBuffer) {
74+
let _ = self.event_loop_proxy.send_event(CustomEvent::UiUpdate(frame_buffer));
75+
}
76+
77+
fn schedule_cef_message_loop_work(&self, scheduled_time: std::time::Instant) {
78+
let _ = self.event_loop_proxy.send_event(CustomEvent::ScheduleBrowserWork(scheduled_time));
79+
}
80+
}

desktop/src/main.rs

Lines changed: 2 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,9 @@
11
use std::fmt::Debug;
22
use std::process::exit;
3-
use std::sync::mpsc::Receiver;
4-
use std::sync::{Arc, Mutex};
53
use std::time::Instant;
64

75
use tracing_subscriber::EnvFilter;
8-
use winit::event_loop::{EventLoop, EventLoopProxy};
6+
use winit::event_loop::EventLoop;
97

108
mod cef;
119
use cef::{Setup, WindowSize};
@@ -22,53 +20,6 @@ pub(crate) enum CustomEvent {
2220
ScheduleBrowserWork(Instant),
2321
}
2422

25-
#[derive(Clone)]
26-
struct CefHandler {
27-
window_size_receiver: Arc<Mutex<WindowSizeReceiver>>,
28-
event_loop_proxy: EventLoopProxy<CustomEvent>,
29-
}
30-
struct WindowSizeReceiver {
31-
receiver: Receiver<WindowSize>,
32-
window_size: WindowSize,
33-
}
34-
impl WindowSizeReceiver {
35-
fn new(window_size_receiver: Receiver<WindowSize>) -> Self {
36-
Self {
37-
window_size: WindowSize { width: 1, height: 1 },
38-
receiver: window_size_receiver,
39-
}
40-
}
41-
}
42-
impl CefHandler {
43-
fn new(window_size_receiver: Receiver<WindowSize>, event_loop_proxy: EventLoopProxy<CustomEvent>) -> Self {
44-
Self {
45-
window_size_receiver: Arc::new(Mutex::new(WindowSizeReceiver::new(window_size_receiver))),
46-
event_loop_proxy,
47-
}
48-
}
49-
}
50-
51-
impl cef::CefEventHandler for CefHandler {
52-
fn window_size(&self) -> cef::WindowSize {
53-
let Ok(mut guard) = self.window_size_receiver.lock() else {
54-
tracing::error!("Failed to lock window_size_receiver");
55-
return cef::WindowSize::new(1, 1);
56-
};
57-
let WindowSizeReceiver { receiver, window_size } = &mut *guard;
58-
for new_window_size in receiver.try_iter() {
59-
*window_size = new_window_size;
60-
}
61-
*window_size
62-
}
63-
fn draw(&self, frame_buffer: FrameBuffer) {
64-
let _ = self.event_loop_proxy.send_event(CustomEvent::UiUpdate(frame_buffer));
65-
}
66-
67-
fn schedule_cef_message_loop_work(&self, scheduled_time: std::time::Instant) {
68-
let _ = self.event_loop_proxy.send_event(CustomEvent::ScheduleBrowserWork(scheduled_time));
69-
}
70-
}
71-
7223
fn main() {
7324
tracing_subscriber::fmt().with_env_filter(EnvFilter::from_default_env()).init();
7425

@@ -85,7 +36,7 @@ fn main() {
8536

8637
let (send, recv) = std::sync::mpsc::channel();
8738

88-
let cef_context = match cef_context.init(CefHandler::new(recv, event_loop.create_proxy())) {
39+
let cef_context = match cef_context.init(cef::CefHandler::new(recv, event_loop.create_proxy())) {
8940
Ok(c) => c,
9041
Err(cef::InitError::InitializationFailed) => {
9142
tracing::error!("Cef initialization failed");

desktop/src/render.rs

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
use std::sync::Arc;
22

33
use thiserror::Error;
4-
use wgpu::PollType;
54
use winit::window::Window;
65

76
pub(crate) struct FrameBuffer {
@@ -215,7 +214,7 @@ impl GraphicsState {
215214

216215
let fb = FrameBuffer::new(initial_data, width, height)
217216
.map_err(|e| {
218-
panic!("Failed to create initial FrameBuffer: {}", e);
217+
panic!("Failed to create initial FrameBuffer: {e}");
219218
})
220219
.unwrap();
221220

@@ -224,10 +223,6 @@ impl GraphicsState {
224223
graphics_state
225224
}
226225

227-
pub(crate) fn poll(&self) {
228-
let _ = self.device.poll(PollType::Poll);
229-
}
230-
231226
pub(crate) fn update_texture(&mut self, frame_buffer: &FrameBuffer) {
232227
let data = frame_buffer.buffer();
233228
let width = frame_buffer.width() as u32;

0 commit comments

Comments
 (0)