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