Move node graph from panel to overlay on viewport

This commit is contained in:
Keavon Chambers
2023-08-19 01:21:37 -07:00
parent d74e4b2ab3
commit 185106132d
29 changed files with 776 additions and 640 deletions
@@ -233,6 +233,9 @@ impl MessageHandler<NavigationMessage, (&Document, Option<[DVec2; 2]>, &InputPre
TranslateCanvasBegin => {
responses.add(FrontendMessage::UpdateMouseCursor { cursor: MouseCursorIcon::Grabbing });
responses.add(FrontendMessage::UpdateInputHints { hint_data: HintData(Vec::new()) });
// Because the pan key shares the Spacebar with toggling the graph view overlay, now that we've begun panning,
// we need to prevent the graph view overlay from toggling when the Spacebar is released.
responses.add(PortfolioMessage::GraphViewOverlayToggleDisabled { disabled: true });
self.panning = true;
self.mouse_position = ipp.mouse.position;
@@ -54,6 +54,13 @@ pub enum PortfolioMessage {
data: Vec<u8>,
is_default: bool,
},
GraphViewOverlay {
open: bool,
},
GraphViewOverlayToggle,
GraphViewOverlayToggleDisabled {
disabled: bool,
},
ImaginateCheckServerStatus,
ImaginatePollServerStatus,
ImaginatePreferences,
@@ -3,6 +3,7 @@ use crate::application::generate_uuid;
use crate::consts::{DEFAULT_DOCUMENT_NAME, GRAPHITE_DOCUMENT_VERSION};
use crate::messages::dialog::simple_dialogs;
use crate::messages::frontend::utility_types::FrontendDocumentDetails;
use crate::messages::input_mapper::utility_types::macros::action_keys;
use crate::messages::layout::utility_types::widget_prelude::*;
use crate::messages::portfolio::document::utility_types::clipboards::{Clipboard, CopyBufferEntry, INTERNAL_CLIPBOARD_COUNT};
use crate::messages::prelude::*;
@@ -24,10 +25,12 @@ pub struct PortfolioMessageHandler {
menu_bar_message_handler: MenuBarMessageHandler,
documents: HashMap<u64, DocumentMessageHandler>,
document_ids: Vec<u64>,
pub executor: NodeGraphExecutor,
active_document_id: Option<u64>,
graph_view_overlay_open: bool,
graph_view_overlay_toggle_disabled: bool,
copy_buffer: [Vec<CopyBufferEntry>; INTERNAL_CLIPBOARD_COUNT as usize],
pub persistent_data: PersistentData,
pub executor: NodeGraphExecutor,
}
impl MessageHandler<PortfolioMessage, (&InputPreprocessorMessageHandler, &PreferencesMessageHandler)> for PortfolioMessageHandler {
@@ -220,6 +223,31 @@ impl MessageHandler<PortfolioMessage, (&InputPreprocessorMessageHandler, &Prefer
self.persistent_data.font_cache.insert(font, preview_url, data, is_default);
self.executor.update_font_cache(self.persistent_data.font_cache.clone());
}
PortfolioMessage::GraphViewOverlay { open } => {
self.graph_view_overlay_open = open;
let layout = WidgetLayout::new(vec![LayoutGroup::Row {
widgets: vec![IconButton::new(if open { "GraphViewOpen" } else { "GraphViewClosed" }, 32)
.tooltip(if open { "Hide Node Graph" } else { "Show Node Graph" })
.tooltip_shortcut(action_keys!(PortfolioMessageDiscriminant::GraphViewOverlayToggle))
.on_update(move |_| PortfolioMessage::GraphViewOverlay { open: !open }.into())
.widget_holder()],
}]);
responses.add(LayoutMessage::SendLayout {
layout: Layout::WidgetLayout(layout),
layout_target: LayoutTarget::GraphViewOverlayButton,
});
responses.add(FrontendMessage::TriggerGraphViewOverlay { open });
}
PortfolioMessage::GraphViewOverlayToggle => {
if !self.graph_view_overlay_toggle_disabled {
responses.add(PortfolioMessage::GraphViewOverlay { open: !self.graph_view_overlay_open });
}
}
PortfolioMessage::GraphViewOverlayToggleDisabled { disabled } => {
self.graph_view_overlay_toggle_disabled = disabled;
}
PortfolioMessage::ImaginateCheckServerStatus => {
let server_status = self.persistent_data.imaginate.server_status().clone();
self.persistent_data.imaginate.poll_server_check();
@@ -519,6 +547,8 @@ impl MessageHandler<PortfolioMessage, (&InputPreprocessorMessageHandler, &Prefer
fn actions(&self) -> ActionList {
let mut common = actions!(PortfolioMessageDiscriminant;
GraphViewOverlayToggle,
GraphViewOverlayToggleDisabled,
CloseActiveDocumentWithConfirmation,
CloseAllDocuments,
Import,
@@ -618,6 +648,7 @@ impl PortfolioMessageHandler {
responses.add(PortfolioMessage::SelectDocument { document_id });
responses.add(PortfolioMessage::LoadDocumentResources { document_id });
responses.add(PortfolioMessage::UpdateDocumentWidgets);
responses.add(PortfolioMessage::GraphViewOverlay { open: self.graph_view_overlay_open });
responses.add(ToolMessage::InitTools);
responses.add(PropertiesPanelMessage::Init);
responses.add(NavigationMessage::TranslateCanvas { delta: (0., 0.).into() });