mirror of
https://github.com/GraphiteEditor/Graphite.git
synced 2025-12-23 10:11:54 +00:00
improve viewport
This commit is contained in:
parent
35ce634571
commit
6fb0d60712
5 changed files with 27 additions and 12 deletions
|
|
@ -1,4 +1,5 @@
|
|||
use crate::messages::debug::utility_types::MessageLoggingVerbosity;
|
||||
use crate::messages::defer::DeferMessageContext;
|
||||
use crate::messages::dialog::DialogMessageContext;
|
||||
use crate::messages::layout::layout_message_handler::LayoutMessageContext;
|
||||
use crate::messages::prelude::*;
|
||||
|
|
@ -133,7 +134,13 @@ impl Dispatcher {
|
|||
self.message_handlers.debug_message_handler.process_message(message, &mut queue, ());
|
||||
}
|
||||
Message::Defer(message) => {
|
||||
self.message_handlers.defer_message_handler.process_message(message, &mut queue, ());
|
||||
self.message_handlers.defer_message_handler.process_message(
|
||||
message,
|
||||
&mut queue,
|
||||
DeferMessageContext {
|
||||
viewport_bounds: self.message_handlers.input_preprocessor_message_handler.viewport_bounds,
|
||||
},
|
||||
);
|
||||
}
|
||||
Message::Dialog(message) => {
|
||||
let context = DialogMessageContext {
|
||||
|
|
|
|||
|
|
@ -1,4 +1,9 @@
|
|||
use crate::messages::prelude::*;
|
||||
use crate::messages::{input_mapper::utility_types::input_mouse::ViewportBounds, prelude::*};
|
||||
|
||||
#[derive(ExtractField)]
|
||||
pub struct DeferMessageContext {
|
||||
viewport_bounds: ViewportBounds,
|
||||
}
|
||||
|
||||
#[derive(Debug, Default, ExtractField)]
|
||||
pub struct DeferMessageHandler {
|
||||
|
|
@ -8,14 +13,20 @@ pub struct DeferMessageHandler {
|
|||
}
|
||||
|
||||
#[message_handler_data]
|
||||
impl MessageHandler<DeferMessage, ()> for DeferMessageHandler {
|
||||
fn process_message(&mut self, message: DeferMessage, responses: &mut VecDeque<Message>, _: ()) {
|
||||
impl MessageHandler<DeferMessage, DeferMessageContext> for DeferMessageHandler {
|
||||
fn process_message(&mut self, message: DeferMessage, responses: &mut VecDeque<Message>, context: DeferMessageContext) {
|
||||
match message {
|
||||
DeferMessage::AfterGraphRun { mut messages } => {
|
||||
self.after_graph_run.extend(messages.drain(..).map(|m| (self.current_graph_submission_id, m)));
|
||||
}
|
||||
DeferMessage::AfterViewportReady { messages } => {
|
||||
self.after_viewport_resize.extend_from_slice(&messages);
|
||||
if context.viewport_bounds == ViewportBounds::default() {
|
||||
self.after_viewport_resize.extend_from_slice(&messages);
|
||||
} else {
|
||||
for message in messages {
|
||||
responses.push_front(message);
|
||||
}
|
||||
}
|
||||
}
|
||||
DeferMessage::TriggerGraphRun(execution_id) => {
|
||||
self.current_graph_submission_id = execution_id;
|
||||
|
|
|
|||
|
|
@ -4,4 +4,4 @@ mod defer_message_handler;
|
|||
#[doc(inline)]
|
||||
pub use defer_message::{DeferMessage, DeferMessageDiscriminant};
|
||||
#[doc(inline)]
|
||||
pub use defer_message_handler::DeferMessageHandler;
|
||||
pub use defer_message_handler::{DeferMessageContext, DeferMessageHandler};
|
||||
|
|
|
|||
|
|
@ -17,6 +17,7 @@ pub struct InputPreprocessorMessageHandler {
|
|||
pub time: u64,
|
||||
pub keyboard: KeyStates,
|
||||
pub mouse: MouseState,
|
||||
// The viewport bounds are loaded on the browser callback, not when the editor is initialized.
|
||||
pub viewport_bounds: ViewportBounds,
|
||||
}
|
||||
|
||||
|
|
@ -32,9 +33,7 @@ impl MessageHandler<InputPreprocessorMessage, InputPreprocessorMessageContext> f
|
|||
for bounds in bounds_of_viewports {
|
||||
// TODO: Extend this to multiple viewports instead of setting it to the value of this last loop iteration
|
||||
self.viewport_bounds = bounds;
|
||||
|
||||
responses.add(NavigationMessage::CanvasPan { delta: DVec2::ZERO });
|
||||
responses.add(NodeGraphMessage::SetGridAlignedEdges);
|
||||
responses.add(DeferMessage::TriggerViewportReady);
|
||||
}
|
||||
}
|
||||
InputPreprocessorMessage::DoubleClick { editor_mouse_state, modifier_keys } => {
|
||||
|
|
|
|||
|
|
@ -1441,9 +1441,7 @@ impl MessageHandler<DocumentMessage, DocumentMessageContext<'_>> for DocumentMes
|
|||
} else {
|
||||
self.network_interface.document_bounds_document_space(true)
|
||||
};
|
||||
if bounds.is_some() {
|
||||
responses.add(DeferMessage::TriggerViewportReady);
|
||||
} else {
|
||||
if bounds.is_none() {
|
||||
// If we don't have bounds yet, we need wait until the node graph has run once more
|
||||
responses.add(DeferMessage::AfterGraphRun {
|
||||
messages: vec![DocumentMessage::PTZUpdate.into()],
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue