Skip to content

Commit 1d9a07c

Browse files
WIP 1
1 parent a56746c commit 1d9a07c

37 files changed

Lines changed: 1231 additions & 320 deletions

File tree

Cargo.lock

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

Cargo.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,8 @@ glam = { version = "0.32.1", default-features = false, features = [
171171
"bytemuck",
172172
] }
173173
base64 = "0.22"
174+
blake3 = "1.5"
175+
mmap-io = { version = "0.9", features = ["hugepages"] }
174176
image = { version = "0.25", default-features = false, features = [
175177
"png",
176178
"jpeg",

desktop/src/app.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,14 @@ use winit::window::WindowId;
1616

1717
use crate::cef;
1818
use crate::consts::CEF_MESSAGE_LOOP_MAX_ITERATIONS;
19+
use crate::dirs;
1920
use crate::event::{AppEvent, AppEventScheduler};
2021
use crate::persist;
2122
use crate::preferences;
2223
use crate::render::{RenderError, RenderState};
2324
use crate::window::Window;
2425
use crate::wrapper::messages::{DesktopFrontendMessage, DesktopWrapperMessage, InputMessage, MouseKeys, MouseState, Preferences};
25-
use crate::wrapper::{DesktopWrapper, NodeGraphExecutionResult, WgpuContext, serialize_frontend_messages};
26+
use crate::wrapper::{DesktopWrapper, MmapResourceStorage, NodeGraphExecutionResult, WgpuContext, serialize_frontend_messages};
2627

2728
pub(crate) struct App {
2829
render_state: Option<RenderState>,
@@ -91,7 +92,8 @@ impl App {
9192
}
9293
});
9394

94-
let desktop_wrapper = DesktopWrapper::new(rand::rng().random());
95+
let resource_storage = MmapResourceStorage::new(dirs::app_resources_dir()).expect("Failed to initialize on-disk resource storage");
96+
let desktop_wrapper = DesktopWrapper::new(rand::rng().random(), std::sync::Arc::new(resource_storage));
9597

9698
Self {
9799
render_state: None,

desktop/src/consts.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ pub(crate) const APP_SOCKET_FILE_NAME: &str = "instance.sock";
1111
pub(crate) const APP_STATE_FILE_NAME: &str = "state.ron";
1212
pub(crate) const APP_PREFERENCES_FILE_NAME: &str = "preferences.ron";
1313
pub(crate) const APP_DOCUMENTS_DIRECTORY_NAME: &str = "documents";
14+
pub(crate) const APP_RESOURCES_DIRECTORY_NAME: &str = "resources";
1415

1516
// CEF configuration constants
1617
pub(crate) const CEF_WINDOWLESS_FRAME_RATE: i32 = 60;

desktop/src/dirs.rs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ use std::fs;
22
use std::io;
33
use std::path::{Path, PathBuf};
44

5-
use crate::consts::{APP_DIRECTORY_NAME, APP_DOCUMENTS_DIRECTORY_NAME};
5+
use crate::consts::{APP_DIRECTORY_NAME, APP_DOCUMENTS_DIRECTORY_NAME, APP_RESOURCES_DIRECTORY_NAME};
66

77
pub(crate) fn ensure_dir_exists(path: &PathBuf) {
88
if !path.exists() {
@@ -51,6 +51,12 @@ pub(crate) fn app_autosave_documents_dir() -> PathBuf {
5151
path
5252
}
5353

54+
pub(crate) fn app_resources_dir() -> PathBuf {
55+
let path = app_data_dir().join(APP_RESOURCES_DIRECTORY_NAME);
56+
ensure_dir_exists(&path);
57+
path
58+
}
59+
5460
/// Temporary directory that is automatically deleted when dropped.
5561
pub struct TempDir {
5662
path: PathBuf,

desktop/wrapper/src/lib.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ use graphite_editor::messages::prelude::{FrontendMessage, Message};
44
use message_dispatcher::DesktopWrapperMessageDispatcher;
55
use messages::{DesktopFrontendMessage, DesktopWrapperMessage};
66

7+
pub use graph_craft::application_io::MmapResourceStorage;
78
pub use graphite_editor::consts::{DOUBLE_CLICK_MILLISECONDS, FILE_EXTENSION};
89
pub use wgpu_executor::WgpuContext;
910
pub use wgpu_executor::WgpuContextBuilder;

editor/src/application.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,8 @@ impl Editor {
3939
}
4040
}
4141

42+
pub use crate::messages::portfolio::resource::resource_message_handler::resources;
43+
4244
static ENVIRONMENT: OnceLock<Environment> = OnceLock::new();
4345
impl Editor {
4446
#[cfg(not(test))]

editor/src/messages/dialog/preferences_dialog/preferences_dialog_message_handler.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ use crate::messages::layout::utility_types::widget_prelude::*;
33
use crate::messages::portfolio::document::utility_types::wires::GraphWireStyle;
44
use crate::messages::preferences::SelectionMode;
55
use crate::messages::prelude::*;
6-
use graphene_std::render_node::{EditorPreferences, wgpu_available};
6+
use graph_craft::application_io::EditorPreferences;
77

88
#[derive(ExtractField)]
99
pub struct PreferencesDialogMessageContext<'a> {
@@ -307,7 +307,7 @@ impl PreferencesDialogMessageHandler {
307307
// COMPATIBILITY
308308
// =============
309309
{
310-
let wgpu_available = wgpu_available().unwrap_or(false);
310+
let wgpu_available = graph_craft::application_io::wgpu_available().unwrap_or(false);
311311
let is_desktop = cfg!(not(target_family = "wasm"));
312312
if wgpu_available || is_desktop {
313313
let header = vec![TextLabel::new("Compatibility").italic(true).widget_instance()];

editor/src/messages/portfolio/document/document_message.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ use crate::messages::portfolio::document::utility_types::misc::{AlignAggregate,
1010
use crate::messages::portfolio::utility_types::PanelType;
1111
use crate::messages::prelude::*;
1212
use glam::{DAffine2, IVec2};
13+
use graph_craft::application_io::{Resource, ResourceHash};
1314
use graph_craft::document::NodeId;
1415
use graphene_std::Color;
1516
use graphene_std::raster::BlendMode;
@@ -128,6 +129,10 @@ pub enum DocumentMessage {
128129
RenderScrollbars,
129130
SaveDocument,
130131
SaveDocumentAs,
132+
SaveDocumentWithResources {
133+
#[serde(skip)]
134+
resources: Box<[(ResourceHash, Resource)]>,
135+
},
131136
SavedDocument {
132137
path: Option<PathBuf>,
133138
},

0 commit comments

Comments
 (0)