Skip to content

Commit 5be9b1f

Browse files
Desktop: Mac native menu bar (#3301)
* macos native menu bar * fix nix build * Add shortcut symbols to menu * fix fmt * fix vendoring * cleanup intercept frontend message * accept into editor message in queue function
1 parent 6ca25e4 commit 5be9b1f

File tree

22 files changed

+458
-45
lines changed

22 files changed

+458
-45
lines changed

Cargo.lock

Lines changed: 30 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,7 @@ web-sys = { version = "=0.3.77", features = [
135135
"ImageBitmapRenderingContext",
136136
] }
137137
winit = { git = "https://github.com/rust-windowing/winit.git" }
138+
keyboard-types = "0.8"
138139
url = "2.5"
139140
tokio = { version = "1.29", features = ["fs", "macros", "io-std", "rt"] }
140141
vello = { git = "https://github.com/linebender/vello.git", rev = "87cc5bee6d3a34d15017dbbb58634ddc7f33ff9b" } # TODO switch back to stable when a release is made
@@ -225,3 +226,7 @@ debug = true
225226
[profile.profiling]
226227
inherits = "release"
227228
debug = true
229+
230+
[patch.crates-io]
231+
# Force cargo to use only one version of the dpi crate (vendoring breaks without this)
232+
dpi = { git = "https://github.com/rust-windowing/winit.git" }

desktop/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@ windows = { version = "0.58.0", features = [
6666

6767
# macOS-specific dependencies
6868
[target.'cfg(target_os = "macos")'.dependencies]
69+
muda = { git = "https://github.com/tauri-apps/muda.git", rev = "3f460b8fbaed59cda6d95ceea6904f000f093f15", default-features = false }
6970
metal = { version = "0.31.0", optional = true }
7071
objc = { version = "0.2", optional = true }
7172
core-foundation = { version = "0.10", optional = true }

desktop/src/app.rs

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,8 @@ use crate::event::{AppEvent, AppEventScheduler};
1919
use crate::persist::PersistentData;
2020
use crate::render::GraphicsState;
2121
use crate::window::Window;
22-
use graphite_desktop_wrapper::messages::{DesktopFrontendMessage, DesktopWrapperMessage, Platform};
23-
use graphite_desktop_wrapper::{DesktopWrapper, NodeGraphExecutionResult, WgpuContext, serialize_frontend_messages};
22+
use crate::wrapper::messages::{DesktopFrontendMessage, DesktopWrapperMessage, Platform};
23+
use crate::wrapper::{DesktopWrapper, NodeGraphExecutionResult, WgpuContext, serialize_frontend_messages};
2424

2525
pub(crate) struct App {
2626
cef_context: Box<dyn cef::CefContext>,
@@ -258,6 +258,11 @@ impl App {
258258
}
259259
});
260260
}
261+
DesktopFrontendMessage::UpdateMenu { entries } => {
262+
if let Some(window) = &self.window {
263+
window.update_menu(entries);
264+
}
265+
}
261266
}
262267
}
263268

@@ -338,12 +343,15 @@ impl App {
338343
tracing::info!("Exiting main event loop");
339344
event_loop.exit();
340345
}
346+
AppEvent::MenuEvent { id } => {
347+
self.dispatch_desktop_wrapper_message(DesktopWrapperMessage::MenuEvent { id });
348+
}
341349
}
342350
}
343351
}
344352
impl ApplicationHandler for App {
345353
fn can_create_surfaces(&mut self, event_loop: &dyn ActiveEventLoop) {
346-
let window = Window::new(event_loop);
354+
let window = Window::new(event_loop, self.app_event_scheduler.clone());
347355
self.window = Some(window);
348356

349357
let graphics_state = GraphicsState::new(self.window.as_ref().unwrap(), self.wgpu_context.clone());

desktop/src/cef.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
1515
use crate::event::{AppEvent, AppEventScheduler};
1616
use crate::render::FrameBufferRef;
17-
use graphite_desktop_wrapper::{WgpuContext, deserialize_editor_message};
17+
use crate::wrapper::{WgpuContext, deserialize_editor_message};
1818
use std::fs::File;
1919
use std::io::{Cursor, Read};
2020
use std::path::PathBuf;

desktop/src/event.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
use graphite_desktop_wrapper::NodeGraphExecutionResult;
2-
use graphite_desktop_wrapper::messages::DesktopWrapperMessage;
1+
use crate::wrapper::NodeGraphExecutionResult;
2+
use crate::wrapper::messages::DesktopWrapperMessage;
33

44
pub(crate) enum AppEvent {
55
UiUpdate(wgpu::Texture),
@@ -9,6 +9,7 @@ pub(crate) enum AppEvent {
99
DesktopWrapperMessage(DesktopWrapperMessage),
1010
NodeGraphExecutionResult(NodeGraphExecutionResult),
1111
CloseWindow,
12+
MenuEvent { id: u64 },
1213
}
1314

1415
#[derive(Clone)]

desktop/src/gpu_context.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use graphite_desktop_wrapper::{WgpuContext, WgpuContextBuilder, WgpuFeatures};
1+
use crate::wrapper::{WgpuContext, WgpuContextBuilder, WgpuFeatures};
22

33
pub(super) async fn create_wgpu_context() -> WgpuContext {
44
let wgpu_context_builder = WgpuContextBuilder::new().with_features(WgpuFeatures::PUSH_CONSTANTS);

desktop/src/lib.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@ mod window;
1616

1717
mod gpu_context;
1818

19+
pub(crate) use graphite_desktop_wrapper as wrapper;
20+
1921
use app::App;
2022
use cef::CefHandler;
2123
use cli::Cli;

desktop/src/persist.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use graphite_desktop_wrapper::messages::{Document, DocumentId, Preferences};
1+
use crate::wrapper::messages::{Document, DocumentId, Preferences};
22

33
#[derive(Default, serde::Serialize, serde::Deserialize)]
44
pub(crate) struct PersistentData {

desktop/src/render/graphics_state.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use crate::window::Window;
22

3-
use graphite_desktop_wrapper::{Color, WgpuContext, WgpuExecutor};
3+
use crate::wrapper::{Color, WgpuContext, WgpuExecutor};
44

55
#[derive(derivative::Derivative)]
66
#[derivative(Debug)]

0 commit comments

Comments
 (0)