mirror of
https://github.com/GraphiteEditor/Graphite.git
synced 2026-10-01 13:38:11 +08:00
Actively submit graph evaluations while we are still waiting for results (#3024)
* Actively submit graph evaluations while we are still waiting for results * Cleanup
This commit is contained in:
@@ -143,6 +143,7 @@ impl Dispatcher {
|
|||||||
let context = DialogMessageContext {
|
let context = DialogMessageContext {
|
||||||
portfolio: &self.message_handlers.portfolio_message_handler,
|
portfolio: &self.message_handlers.portfolio_message_handler,
|
||||||
preferences: &self.message_handlers.preferences_message_handler,
|
preferences: &self.message_handlers.preferences_message_handler,
|
||||||
|
viewport_bounds: &self.message_handlers.input_preprocessor_message_handler.viewport_bounds,
|
||||||
};
|
};
|
||||||
self.message_handlers.dialog_message_handler.process_message(message, &mut queue, context);
|
self.message_handlers.dialog_message_handler.process_message(message, &mut queue, context);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ impl MessageHandler<DeferMessage, DeferMessageContext<'_>> for DeferMessageHandl
|
|||||||
DeferMessage::AfterGraphRun { mut messages } => {
|
DeferMessage::AfterGraphRun { mut messages } => {
|
||||||
let after_graph_run = self.after_graph_run.entry(context.portfolio.active_document_id.unwrap_or(DocumentId(0))).or_default();
|
let after_graph_run = self.after_graph_run.entry(context.portfolio.active_document_id.unwrap_or(DocumentId(0))).or_default();
|
||||||
after_graph_run.extend(messages.drain(..).map(|m| (self.current_graph_submission_id, m)));
|
after_graph_run.extend(messages.drain(..).map(|m| (self.current_graph_submission_id, m)));
|
||||||
|
responses.add(NodeGraphMessage::RunDocumentGraph);
|
||||||
}
|
}
|
||||||
DeferMessage::AfterNavigationReady { messages } => {
|
DeferMessage::AfterNavigationReady { messages } => {
|
||||||
self.after_viewport_resize.extend_from_slice(&messages);
|
self.after_viewport_resize.extend_from_slice(&messages);
|
||||||
@@ -37,8 +38,10 @@ impl MessageHandler<DeferMessage, DeferMessageContext<'_>> for DeferMessageHandl
|
|||||||
for (_, message) in elements.rev() {
|
for (_, message) in elements.rev() {
|
||||||
responses.add_front(message);
|
responses.add_front(message);
|
||||||
}
|
}
|
||||||
if !after_graph_run.is_empty() {
|
for (id, messages) in self.after_graph_run.iter() {
|
||||||
responses.add(NodeGraphMessage::RunDocumentGraph);
|
if !messages.is_empty() {
|
||||||
|
responses.add(PortfolioMessage::SubmitGraphRender { document_id: *id, ignore_hash: false });
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
DeferMessage::TriggerNavigationReady => {
|
DeferMessage::TriggerNavigationReady => {
|
||||||
|
|||||||
@@ -1,10 +1,13 @@
|
|||||||
|
use super::new_document_dialog::NewDocumentDialogMessageContext;
|
||||||
use super::simple_dialogs::{self, AboutGraphiteDialog, ComingSoonDialog, DemoArtworkDialog, LicensesDialog};
|
use super::simple_dialogs::{self, AboutGraphiteDialog, ComingSoonDialog, DemoArtworkDialog, LicensesDialog};
|
||||||
|
use crate::messages::input_mapper::utility_types::input_mouse::ViewportBounds;
|
||||||
use crate::messages::layout::utility_types::widget_prelude::*;
|
use crate::messages::layout::utility_types::widget_prelude::*;
|
||||||
use crate::messages::prelude::*;
|
use crate::messages::prelude::*;
|
||||||
|
|
||||||
#[derive(ExtractField)]
|
#[derive(ExtractField)]
|
||||||
pub struct DialogMessageContext<'a> {
|
pub struct DialogMessageContext<'a> {
|
||||||
pub portfolio: &'a PortfolioMessageHandler,
|
pub portfolio: &'a PortfolioMessageHandler,
|
||||||
|
pub viewport_bounds: &'a ViewportBounds,
|
||||||
pub preferences: &'a PreferencesMessageHandler,
|
pub preferences: &'a PreferencesMessageHandler,
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -19,11 +22,15 @@ pub struct DialogMessageHandler {
|
|||||||
#[message_handler_data]
|
#[message_handler_data]
|
||||||
impl MessageHandler<DialogMessage, DialogMessageContext<'_>> for DialogMessageHandler {
|
impl MessageHandler<DialogMessage, DialogMessageContext<'_>> for DialogMessageHandler {
|
||||||
fn process_message(&mut self, message: DialogMessage, responses: &mut VecDeque<Message>, context: DialogMessageContext) {
|
fn process_message(&mut self, message: DialogMessage, responses: &mut VecDeque<Message>, context: DialogMessageContext) {
|
||||||
let DialogMessageContext { portfolio, preferences } = context;
|
let DialogMessageContext {
|
||||||
|
portfolio,
|
||||||
|
preferences,
|
||||||
|
viewport_bounds,
|
||||||
|
} = context;
|
||||||
|
|
||||||
match message {
|
match message {
|
||||||
DialogMessage::ExportDialog(message) => self.export_dialog.process_message(message, responses, ExportDialogMessageContext { portfolio }),
|
DialogMessage::ExportDialog(message) => self.export_dialog.process_message(message, responses, ExportDialogMessageContext { portfolio }),
|
||||||
DialogMessage::NewDocumentDialog(message) => self.new_document_dialog.process_message(message, responses, ()),
|
DialogMessage::NewDocumentDialog(message) => self.new_document_dialog.process_message(message, responses, NewDocumentDialogMessageContext { viewport_bounds }),
|
||||||
DialogMessage::PreferencesDialog(message) => self.preferences_dialog.process_message(message, responses, PreferencesDialogMessageContext { preferences }),
|
DialogMessage::PreferencesDialog(message) => self.preferences_dialog.process_message(message, responses, PreferencesDialogMessageContext { preferences }),
|
||||||
|
|
||||||
DialogMessage::CloseAllDocumentsWithConfirmation => {
|
DialogMessage::CloseAllDocumentsWithConfirmation => {
|
||||||
|
|||||||
@@ -4,4 +4,4 @@ mod new_document_dialog_message_handler;
|
|||||||
#[doc(inline)]
|
#[doc(inline)]
|
||||||
pub use new_document_dialog_message::{NewDocumentDialogMessage, NewDocumentDialogMessageDiscriminant};
|
pub use new_document_dialog_message::{NewDocumentDialogMessage, NewDocumentDialogMessageDiscriminant};
|
||||||
#[doc(inline)]
|
#[doc(inline)]
|
||||||
pub use new_document_dialog_message_handler::NewDocumentDialogMessageHandler;
|
pub use new_document_dialog_message_handler::{NewDocumentDialogMessageContext, NewDocumentDialogMessageHandler};
|
||||||
|
|||||||
+19
-17
@@ -1,8 +1,13 @@
|
|||||||
use crate::messages::layout::utility_types::widget_prelude::*;
|
|
||||||
use crate::messages::prelude::*;
|
use crate::messages::prelude::*;
|
||||||
|
use crate::messages::{input_mapper::utility_types::input_mouse::ViewportBounds, layout::utility_types::widget_prelude::*};
|
||||||
use glam::{IVec2, UVec2};
|
use glam::{IVec2, UVec2};
|
||||||
use graph_craft::document::NodeId;
|
use graph_craft::document::NodeId;
|
||||||
|
|
||||||
|
#[derive(ExtractField)]
|
||||||
|
pub struct NewDocumentDialogMessageContext<'a> {
|
||||||
|
pub viewport_bounds: &'a ViewportBounds,
|
||||||
|
}
|
||||||
|
|
||||||
/// A dialog to allow users to set some initial options about a new document.
|
/// A dialog to allow users to set some initial options about a new document.
|
||||||
#[derive(Debug, Clone, Default, ExtractField)]
|
#[derive(Debug, Clone, Default, ExtractField)]
|
||||||
pub struct NewDocumentDialogMessageHandler {
|
pub struct NewDocumentDialogMessageHandler {
|
||||||
@@ -12,8 +17,8 @@ pub struct NewDocumentDialogMessageHandler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[message_handler_data]
|
#[message_handler_data]
|
||||||
impl MessageHandler<NewDocumentDialogMessage, ()> for NewDocumentDialogMessageHandler {
|
impl<'a> MessageHandler<NewDocumentDialogMessage, NewDocumentDialogMessageContext<'a>> for NewDocumentDialogMessageHandler {
|
||||||
fn process_message(&mut self, message: NewDocumentDialogMessage, responses: &mut VecDeque<Message>, _: ()) {
|
fn process_message(&mut self, message: NewDocumentDialogMessage, responses: &mut VecDeque<Message>, context: NewDocumentDialogMessageContext<'a>) {
|
||||||
match message {
|
match message {
|
||||||
NewDocumentDialogMessage::Name(name) => self.name = name,
|
NewDocumentDialogMessage::Name(name) => self.name = name,
|
||||||
NewDocumentDialogMessage::Infinite(infinite) => self.infinite = infinite,
|
NewDocumentDialogMessage::Infinite(infinite) => self.infinite = infinite,
|
||||||
@@ -24,21 +29,18 @@ impl MessageHandler<NewDocumentDialogMessage, ()> for NewDocumentDialogMessageHa
|
|||||||
|
|
||||||
let create_artboard = !self.infinite && self.dimensions.x > 0 && self.dimensions.y > 0;
|
let create_artboard = !self.infinite && self.dimensions.x > 0 && self.dimensions.y > 0;
|
||||||
if create_artboard {
|
if create_artboard {
|
||||||
responses.add(NodeGraphMessage::RunDocumentGraph);
|
responses.add(GraphOperationMessage::NewArtboard {
|
||||||
responses.add(DeferMessage::AfterGraphRun {
|
id: NodeId::new(),
|
||||||
messages: vec![
|
artboard: graphene_std::Artboard::new(IVec2::ZERO, self.dimensions.as_ivec2()),
|
||||||
GraphOperationMessage::NewArtboard {
|
|
||||||
id: NodeId::new(),
|
|
||||||
artboard: graphene_std::Artboard::new(IVec2::ZERO, self.dimensions.as_ivec2()),
|
|
||||||
}
|
|
||||||
.into(),
|
|
||||||
NodeGraphMessage::ForceRunDocumentGraph.into(),
|
|
||||||
DeferMessage::AfterGraphRun {
|
|
||||||
messages: vec![DeferMessage::TriggerNavigationReady.into()],
|
|
||||||
}
|
|
||||||
.into(),
|
|
||||||
],
|
|
||||||
});
|
});
|
||||||
|
responses.add(NavigationMessage::CanvasPan { delta: self.dimensions.as_dvec2() });
|
||||||
|
responses.add(NodeGraphMessage::RunDocumentGraph);
|
||||||
|
// If we already have bounds, we won't receive a viewport bounds update so we just fabricate one ourselves
|
||||||
|
if *context.viewport_bounds != ViewportBounds::default() {
|
||||||
|
responses.add(InputPreprocessorMessage::BoundsOfViewports {
|
||||||
|
bounds_of_viewports: vec![context.viewport_bounds.clone()],
|
||||||
|
});
|
||||||
|
}
|
||||||
responses.add(DeferMessage::AfterNavigationReady {
|
responses.add(DeferMessage::AfterNavigationReady {
|
||||||
messages: vec![DocumentMessage::ZoomCanvasToFitAll.into(), DocumentMessage::DeselectAllLayers.into()],
|
messages: vec![DocumentMessage::ZoomCanvasToFitAll.into(), DocumentMessage::DeselectAllLayers.into()],
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -36,6 +36,14 @@ impl MessageHandler<InputPreprocessorMessage, InputPreprocessorMessageContext> f
|
|||||||
responses.add(NavigationMessage::CanvasPan { delta: DVec2::ZERO });
|
responses.add(NavigationMessage::CanvasPan { delta: DVec2::ZERO });
|
||||||
responses.add(NodeGraphMessage::SetGridAlignedEdges);
|
responses.add(NodeGraphMessage::SetGridAlignedEdges);
|
||||||
}
|
}
|
||||||
|
responses.add(DeferMessage::AfterGraphRun {
|
||||||
|
messages: vec![
|
||||||
|
DeferMessage::AfterGraphRun {
|
||||||
|
messages: vec![DeferMessage::TriggerNavigationReady.into()],
|
||||||
|
}
|
||||||
|
.into(),
|
||||||
|
],
|
||||||
|
});
|
||||||
}
|
}
|
||||||
InputPreprocessorMessage::DoubleClick { editor_mouse_state, modifier_keys } => {
|
InputPreprocessorMessage::DoubleClick { editor_mouse_state, modifier_keys } => {
|
||||||
self.update_states_of_modifier_keys(modifier_keys, keyboard_platform, responses);
|
self.update_states_of_modifier_keys(modifier_keys, keyboard_platform, responses);
|
||||||
|
|||||||
Reference in New Issue
Block a user