Rename MovementMessage to NavigationMessage
This commit is contained in:
parent
9559ec58e8
commit
41bead9028
File diff suppressed because one or more lines are too long
|
|
@ -74,5 +74,5 @@ pub const DEFAULT_FONT_FAMILY: &str = "Merriweather";
|
||||||
pub const DEFAULT_FONT_STYLE: &str = "Normal (400)";
|
pub const DEFAULT_FONT_STYLE: &str = "Normal (400)";
|
||||||
|
|
||||||
// Document
|
// Document
|
||||||
pub const GRAPHITE_DOCUMENT_VERSION: &str = "0.0.10"; // Remember to save a simple document and replace the test file `graphite-test-document.graphite`
|
pub const GRAPHITE_DOCUMENT_VERSION: &str = "0.0.11"; // Remember to save a simple document and replace the test file `graphite-test-document.graphite`
|
||||||
pub const VIEWPORT_ZOOM_TO_FIT_PADDING_SCALE_FACTOR: f32 = 1.05;
|
pub const VIEWPORT_ZOOM_TO_FIT_PADDING_SCALE_FACTOR: f32 = 1.05;
|
||||||
|
|
|
||||||
|
|
@ -543,9 +543,9 @@ mod test {
|
||||||
let print_problem_to_terminal_on_failure = |value: &String| {
|
let print_problem_to_terminal_on_failure = |value: &String| {
|
||||||
println!();
|
println!();
|
||||||
println!("-------------------------------------------------");
|
println!("-------------------------------------------------");
|
||||||
println!("Failed test due to receiving a DisplayDialogError while loading the Graphite sample file!");
|
println!("Failed test due to receiving a DisplayDialogError while loading the Graphite sample file.");
|
||||||
println!("This is most likely caused by forgetting to bump the `GRAPHITE_DOCUMENT_VERSION` in `editor/src/consts.rs`");
|
println!("This is most likely caused by forgetting to bump the `GRAPHITE_DOCUMENT_VERSION` in `editor/src/consts.rs`");
|
||||||
println!("After bumping this version number, please replace the `graphite-test-document.graphite` with a valid file [saved from the editor].");
|
println!("After bumping this version number, replace `graphite-test-document.graphite` with a valid file by saving a document from the editor.");
|
||||||
println!("DisplayDialogError details:");
|
println!("DisplayDialogError details:");
|
||||||
println!();
|
println!();
|
||||||
println!("Description: {}", value);
|
println!("Description: {}", value);
|
||||||
|
|
|
||||||
|
|
@ -20,11 +20,11 @@ pub fn default_mapping() -> Mapping {
|
||||||
let mappings = mapping![
|
let mappings = mapping![
|
||||||
// HIGHER PRIORITY:
|
// HIGHER PRIORITY:
|
||||||
//
|
//
|
||||||
// MovementMessage
|
// NavigationMessage
|
||||||
entry!(
|
entry!(
|
||||||
PointerMove;
|
PointerMove;
|
||||||
refresh_keys=[Control],
|
refresh_keys=[Control],
|
||||||
action_dispatch=MovementMessage::PointerMove { snap_angle: Control, wait_for_snap_angle_release: true, snap_zoom: Control, zoom_from_viewport: None },
|
action_dispatch=NavigationMessage::PointerMove { snap_angle: Control, wait_for_snap_angle_release: true, snap_zoom: Control, zoom_from_viewport: None },
|
||||||
),
|
),
|
||||||
// NORMAL PRIORITY:
|
// NORMAL PRIORITY:
|
||||||
//
|
//
|
||||||
|
|
@ -264,32 +264,32 @@ pub fn default_mapping() -> Mapping {
|
||||||
entry!(KeyDown(KeyR); action_dispatch=TransformLayerMessage::BeginRotate),
|
entry!(KeyDown(KeyR); action_dispatch=TransformLayerMessage::BeginRotate),
|
||||||
entry!(KeyDown(KeyS); action_dispatch=TransformLayerMessage::BeginScale),
|
entry!(KeyDown(KeyS); action_dispatch=TransformLayerMessage::BeginScale),
|
||||||
//
|
//
|
||||||
// MovementMessage
|
// NavigationMessage
|
||||||
entry!(KeyDown(Mmb); modifiers=[Control], action_dispatch=MovementMessage::RotateCanvasBegin),
|
entry!(KeyDown(Mmb); modifiers=[Control], action_dispatch=NavigationMessage::RotateCanvasBegin),
|
||||||
entry!(KeyDown(Mmb); modifiers=[Shift], action_dispatch=MovementMessage::ZoomCanvasBegin),
|
entry!(KeyDown(Mmb); modifiers=[Shift], action_dispatch=NavigationMessage::ZoomCanvasBegin),
|
||||||
entry!(KeyDown(Mmb); action_dispatch=MovementMessage::TranslateCanvasBegin),
|
entry!(KeyDown(Mmb); action_dispatch=NavigationMessage::TranslateCanvasBegin),
|
||||||
entry!(KeyUp(Mmb); action_dispatch=MovementMessage::TransformCanvasEnd),
|
entry!(KeyUp(Mmb); action_dispatch=NavigationMessage::TransformCanvasEnd),
|
||||||
entry!(KeyDown(Lmb); modifiers=[Space], action_dispatch=MovementMessage::TranslateCanvasBegin),
|
entry!(KeyDown(Lmb); modifiers=[Space], action_dispatch=NavigationMessage::TranslateCanvasBegin),
|
||||||
entry!(KeyUp(Lmb); modifiers=[Space], action_dispatch=MovementMessage::TransformCanvasEnd),
|
entry!(KeyUp(Lmb); modifiers=[Space], action_dispatch=NavigationMessage::TransformCanvasEnd),
|
||||||
entry_multiplatform!(
|
entry_multiplatform!(
|
||||||
standard!(KeyDown(NumpadAdd); modifiers=[Control], action_dispatch=MovementMessage::IncreaseCanvasZoom { center_on_mouse: false }),
|
standard!(KeyDown(NumpadAdd); modifiers=[Control], action_dispatch=NavigationMessage::IncreaseCanvasZoom { center_on_mouse: false }),
|
||||||
mac_only!(KeyDown(NumpadAdd); modifiers=[Command], action_dispatch=MovementMessage::IncreaseCanvasZoom { center_on_mouse: false }),
|
mac_only!(KeyDown(NumpadAdd); modifiers=[Command], action_dispatch=NavigationMessage::IncreaseCanvasZoom { center_on_mouse: false }),
|
||||||
),
|
),
|
||||||
entry_multiplatform!(
|
entry_multiplatform!(
|
||||||
standard!(KeyDown(Equal); modifiers=[Control], action_dispatch=MovementMessage::IncreaseCanvasZoom { center_on_mouse: false }),
|
standard!(KeyDown(Equal); modifiers=[Control], action_dispatch=NavigationMessage::IncreaseCanvasZoom { center_on_mouse: false }),
|
||||||
mac_only!(KeyDown(Equal); modifiers=[Command], action_dispatch=MovementMessage::IncreaseCanvasZoom { center_on_mouse: false }),
|
mac_only!(KeyDown(Equal); modifiers=[Command], action_dispatch=NavigationMessage::IncreaseCanvasZoom { center_on_mouse: false }),
|
||||||
),
|
),
|
||||||
entry_multiplatform!(
|
entry_multiplatform!(
|
||||||
standard!(KeyDown(Minus); modifiers=[Control], action_dispatch=MovementMessage::DecreaseCanvasZoom { center_on_mouse: false }),
|
standard!(KeyDown(Minus); modifiers=[Control], action_dispatch=NavigationMessage::DecreaseCanvasZoom { center_on_mouse: false }),
|
||||||
mac_only!(KeyDown(Minus); modifiers=[Command], action_dispatch=MovementMessage::DecreaseCanvasZoom { center_on_mouse: false }),
|
mac_only!(KeyDown(Minus); modifiers=[Command], action_dispatch=NavigationMessage::DecreaseCanvasZoom { center_on_mouse: false }),
|
||||||
),
|
),
|
||||||
entry!(WheelScroll; modifiers=[Control], action_dispatch=MovementMessage::WheelCanvasZoom),
|
entry!(WheelScroll; modifiers=[Control], action_dispatch=NavigationMessage::WheelCanvasZoom),
|
||||||
entry!(WheelScroll; modifiers=[Shift], action_dispatch=MovementMessage::WheelCanvasTranslate { use_y_as_x: true }),
|
entry!(WheelScroll; modifiers=[Shift], action_dispatch=NavigationMessage::WheelCanvasTranslate { use_y_as_x: true }),
|
||||||
entry!(WheelScroll; action_dispatch=MovementMessage::WheelCanvasTranslate { use_y_as_x: false }),
|
entry!(WheelScroll; action_dispatch=NavigationMessage::WheelCanvasTranslate { use_y_as_x: false }),
|
||||||
entry!(KeyDown(PageUp); modifiers=[Shift], action_dispatch=MovementMessage::TranslateCanvasByViewportFraction { delta: DVec2::new(1., 0.) }),
|
entry!(KeyDown(PageUp); modifiers=[Shift], action_dispatch=NavigationMessage::TranslateCanvasByViewportFraction { delta: DVec2::new(1., 0.) }),
|
||||||
entry!(KeyDown(PageDown); modifiers=[Shift], action_dispatch=MovementMessage::TranslateCanvasByViewportFraction { delta: DVec2::new(-1., 0.) }),
|
entry!(KeyDown(PageDown); modifiers=[Shift], action_dispatch=NavigationMessage::TranslateCanvasByViewportFraction { delta: DVec2::new(-1., 0.) }),
|
||||||
entry!(KeyDown(PageUp); action_dispatch=MovementMessage::TranslateCanvasByViewportFraction { delta: DVec2::new(0., 1.) }),
|
entry!(KeyDown(PageUp); action_dispatch=NavigationMessage::TranslateCanvasByViewportFraction { delta: DVec2::new(0., 1.) }),
|
||||||
entry!(KeyDown(PageDown); action_dispatch=MovementMessage::TranslateCanvasByViewportFraction { delta: DVec2::new(0., -1.) }),
|
entry!(KeyDown(PageDown); action_dispatch=NavigationMessage::TranslateCanvasByViewportFraction { delta: DVec2::new(0., -1.) }),
|
||||||
//
|
//
|
||||||
// PortfolioMessage
|
// PortfolioMessage
|
||||||
entry_multiplatform!(
|
entry_multiplatform!(
|
||||||
|
|
|
||||||
|
|
@ -23,7 +23,7 @@ pub enum DocumentMessage {
|
||||||
Artboard(ArtboardMessage),
|
Artboard(ArtboardMessage),
|
||||||
#[remain::unsorted]
|
#[remain::unsorted]
|
||||||
#[child]
|
#[child]
|
||||||
Movement(MovementMessage),
|
Navigation(NavigationMessage),
|
||||||
#[remain::unsorted]
|
#[remain::unsorted]
|
||||||
#[child]
|
#[child]
|
||||||
Overlays(OverlaysMessage),
|
Overlays(OverlaysMessage),
|
||||||
|
|
|
||||||
|
|
@ -51,7 +51,7 @@ pub struct DocumentMessageHandler {
|
||||||
pub layer_metadata: HashMap<Vec<LayerId>, LayerMetadata>,
|
pub layer_metadata: HashMap<Vec<LayerId>, LayerMetadata>,
|
||||||
layer_range_selection_reference: Vec<LayerId>,
|
layer_range_selection_reference: Vec<LayerId>,
|
||||||
|
|
||||||
movement_handler: MovementMessageHandler,
|
navigation_handler: NavigationMessageHandler,
|
||||||
#[serde(skip)]
|
#[serde(skip)]
|
||||||
overlays_message_handler: OverlaysMessageHandler,
|
overlays_message_handler: OverlaysMessageHandler,
|
||||||
pub artboard_message_handler: ArtboardMessageHandler,
|
pub artboard_message_handler: ArtboardMessageHandler,
|
||||||
|
|
@ -79,7 +79,7 @@ impl Default for DocumentMessageHandler {
|
||||||
layer_metadata: vec![(vec![], LayerMetadata::new(true))].into_iter().collect(),
|
layer_metadata: vec![(vec![], LayerMetadata::new(true))].into_iter().collect(),
|
||||||
layer_range_selection_reference: Vec::new(),
|
layer_range_selection_reference: Vec::new(),
|
||||||
|
|
||||||
movement_handler: MovementMessageHandler::default(),
|
navigation_handler: NavigationMessageHandler::default(),
|
||||||
overlays_message_handler: OverlaysMessageHandler::default(),
|
overlays_message_handler: OverlaysMessageHandler::default(),
|
||||||
artboard_message_handler: ArtboardMessageHandler::default(),
|
artboard_message_handler: ArtboardMessageHandler::default(),
|
||||||
transform_layer_handler: TransformLayerMessageHandler::default(),
|
transform_layer_handler: TransformLayerMessageHandler::default(),
|
||||||
|
|
@ -134,8 +134,8 @@ impl MessageHandler<DocumentMessage, (&InputPreprocessorMessageHandler, &FontCac
|
||||||
self.artboard_message_handler.process_message(message, font_cache, responses);
|
self.artboard_message_handler.process_message(message, font_cache, responses);
|
||||||
}
|
}
|
||||||
#[remain::unsorted]
|
#[remain::unsorted]
|
||||||
Movement(message) => {
|
Navigation(message) => {
|
||||||
self.movement_handler.process_message(message, (&self.graphene_document, ipp), responses);
|
self.navigation_handler.process_message(message, (&self.graphene_document, ipp), responses);
|
||||||
}
|
}
|
||||||
#[remain::unsorted]
|
#[remain::unsorted]
|
||||||
Overlays(message) => {
|
Overlays(message) => {
|
||||||
|
|
@ -504,7 +504,7 @@ impl MessageHandler<DocumentMessage, (&InputPreprocessorMessageHandler, &FontCac
|
||||||
);
|
);
|
||||||
responses.push_back(ArtboardMessage::RenderArtboards.into());
|
responses.push_back(ArtboardMessage::RenderArtboards.into());
|
||||||
|
|
||||||
let document_transform_scale = self.movement_handler.snapped_scale();
|
let document_transform_scale = self.navigation_handler.snapped_scale();
|
||||||
let scale = 0.5 + ASYMPTOTIC_EFFECT + document_transform_scale * SCALE_EFFECT;
|
let scale = 0.5 + ASYMPTOTIC_EFFECT + document_transform_scale * SCALE_EFFECT;
|
||||||
let viewport_size = ipp.viewport_bounds.size();
|
let viewport_size = ipp.viewport_bounds.size();
|
||||||
let viewport_mid = ipp.viewport_bounds.center();
|
let viewport_mid = ipp.viewport_bounds.center();
|
||||||
|
|
@ -759,15 +759,15 @@ impl MessageHandler<DocumentMessage, (&InputPreprocessorMessageHandler, &FontCac
|
||||||
self.layer_metadata.insert(layer_path, layer_metadata);
|
self.layer_metadata.insert(layer_path, layer_metadata);
|
||||||
}
|
}
|
||||||
ZoomCanvasTo100Percent => {
|
ZoomCanvasTo100Percent => {
|
||||||
responses.push_front(MovementMessage::SetCanvasZoom { zoom_factor: 1. }.into());
|
responses.push_front(NavigationMessage::SetCanvasZoom { zoom_factor: 1. }.into());
|
||||||
}
|
}
|
||||||
ZoomCanvasTo200Percent => {
|
ZoomCanvasTo200Percent => {
|
||||||
responses.push_front(MovementMessage::SetCanvasZoom { zoom_factor: 2. }.into());
|
responses.push_front(NavigationMessage::SetCanvasZoom { zoom_factor: 2. }.into());
|
||||||
}
|
}
|
||||||
ZoomCanvasToFitAll => {
|
ZoomCanvasToFitAll => {
|
||||||
if let Some(bounds) = self.document_bounds(font_cache) {
|
if let Some(bounds) = self.document_bounds(font_cache) {
|
||||||
responses.push_back(
|
responses.push_back(
|
||||||
MovementMessage::FitViewportToBounds {
|
NavigationMessage::FitViewportToBounds {
|
||||||
bounds,
|
bounds,
|
||||||
padding_scale_factor: Some(VIEWPORT_ZOOM_TO_FIT_PADDING_SCALE_FACTOR),
|
padding_scale_factor: Some(VIEWPORT_ZOOM_TO_FIT_PADDING_SCALE_FACTOR),
|
||||||
prevent_zoom_past_100: true,
|
prevent_zoom_past_100: true,
|
||||||
|
|
@ -810,7 +810,7 @@ impl MessageHandler<DocumentMessage, (&InputPreprocessorMessageHandler, &FontCac
|
||||||
);
|
);
|
||||||
common.extend(select);
|
common.extend(select);
|
||||||
}
|
}
|
||||||
common.extend(self.movement_handler.actions());
|
common.extend(self.navigation_handler.actions());
|
||||||
common.extend(self.transform_layer_handler.actions());
|
common.extend(self.transform_layer_handler.actions());
|
||||||
common
|
common
|
||||||
}
|
}
|
||||||
|
|
@ -839,7 +839,7 @@ impl DocumentMessageHandler {
|
||||||
|
|
||||||
pub fn with_name(name: String, ipp: &InputPreprocessorMessageHandler) -> Self {
|
pub fn with_name(name: String, ipp: &InputPreprocessorMessageHandler) -> Self {
|
||||||
let mut document = Self { name, ..Self::default() };
|
let mut document = Self { name, ..Self::default() };
|
||||||
let starting_root_transform = document.movement_handler.calculate_offset_transform(ipp.viewport_bounds.size() / 2.);
|
let starting_root_transform = document.navigation_handler.calculate_offset_transform(ipp.viewport_bounds.size() / 2.);
|
||||||
document.graphene_document.root.transform = starting_root_transform;
|
document.graphene_document.root.transform = starting_root_transform;
|
||||||
document.artboard_message_handler.artboards_graphene_document.root.transform = starting_root_transform;
|
document.artboard_message_handler.artboards_graphene_document.root.transform = starting_root_transform;
|
||||||
document
|
document
|
||||||
|
|
@ -1358,16 +1358,16 @@ impl DocumentMessageHandler {
|
||||||
size: 24,
|
size: 24,
|
||||||
icon: "ZoomIn".into(),
|
icon: "ZoomIn".into(),
|
||||||
tooltip: "Zoom In".into(),
|
tooltip: "Zoom In".into(),
|
||||||
tooltip_shortcut: action_keys!(MovementMessageDiscriminant::IncreaseCanvasZoom),
|
tooltip_shortcut: action_keys!(NavigationMessageDiscriminant::IncreaseCanvasZoom),
|
||||||
on_update: WidgetCallback::new(|_| MovementMessage::IncreaseCanvasZoom { center_on_mouse: false }.into()),
|
on_update: WidgetCallback::new(|_| NavigationMessage::IncreaseCanvasZoom { center_on_mouse: false }.into()),
|
||||||
..IconButton::default()
|
..IconButton::default()
|
||||||
})),
|
})),
|
||||||
WidgetHolder::new(Widget::IconButton(IconButton {
|
WidgetHolder::new(Widget::IconButton(IconButton {
|
||||||
size: 24,
|
size: 24,
|
||||||
icon: "ZoomOut".into(),
|
icon: "ZoomOut".into(),
|
||||||
tooltip: "Zoom Out".into(),
|
tooltip: "Zoom Out".into(),
|
||||||
tooltip_shortcut: action_keys!(MovementMessageDiscriminant::DecreaseCanvasZoom),
|
tooltip_shortcut: action_keys!(NavigationMessageDiscriminant::DecreaseCanvasZoom),
|
||||||
on_update: WidgetCallback::new(|_| MovementMessage::DecreaseCanvasZoom { center_on_mouse: false }.into()),
|
on_update: WidgetCallback::new(|_| NavigationMessage::DecreaseCanvasZoom { center_on_mouse: false }.into()),
|
||||||
..IconButton::default()
|
..IconButton::default()
|
||||||
})),
|
})),
|
||||||
WidgetHolder::new(Widget::IconButton(IconButton {
|
WidgetHolder::new(Widget::IconButton(IconButton {
|
||||||
|
|
@ -1375,7 +1375,7 @@ impl DocumentMessageHandler {
|
||||||
icon: "ZoomReset".into(),
|
icon: "ZoomReset".into(),
|
||||||
tooltip: "Zoom to 100%".into(),
|
tooltip: "Zoom to 100%".into(),
|
||||||
tooltip_shortcut: action_keys!(DocumentMessageDiscriminant::ZoomCanvasTo100Percent),
|
tooltip_shortcut: action_keys!(DocumentMessageDiscriminant::ZoomCanvasTo100Percent),
|
||||||
on_update: WidgetCallback::new(|_| MovementMessage::SetCanvasZoom { zoom_factor: 1. }.into()),
|
on_update: WidgetCallback::new(|_| NavigationMessage::SetCanvasZoom { zoom_factor: 1. }.into()),
|
||||||
..IconButton::default()
|
..IconButton::default()
|
||||||
})),
|
})),
|
||||||
WidgetHolder::new(Widget::Separator(Separator {
|
WidgetHolder::new(Widget::Separator(Separator {
|
||||||
|
|
@ -1384,22 +1384,22 @@ impl DocumentMessageHandler {
|
||||||
})),
|
})),
|
||||||
WidgetHolder::new(Widget::NumberInput(NumberInput {
|
WidgetHolder::new(Widget::NumberInput(NumberInput {
|
||||||
unit: "%".into(),
|
unit: "%".into(),
|
||||||
value: Some(self.movement_handler.snapped_scale() * 100.),
|
value: Some(self.navigation_handler.snapped_scale() * 100.),
|
||||||
min: Some(0.000001),
|
min: Some(0.000001),
|
||||||
max: Some(1000000.),
|
max: Some(1000000.),
|
||||||
on_update: WidgetCallback::new(|number_input: &NumberInput| {
|
on_update: WidgetCallback::new(|number_input: &NumberInput| {
|
||||||
MovementMessage::SetCanvasZoom {
|
NavigationMessage::SetCanvasZoom {
|
||||||
zoom_factor: number_input.value.unwrap() / 100.,
|
zoom_factor: number_input.value.unwrap() / 100.,
|
||||||
}
|
}
|
||||||
.into()
|
.into()
|
||||||
}),
|
}),
|
||||||
increment_behavior: NumberInputIncrementBehavior::Callback,
|
increment_behavior: NumberInputIncrementBehavior::Callback,
|
||||||
increment_callback_decrease: WidgetCallback::new(|_| MovementMessage::DecreaseCanvasZoom { center_on_mouse: false }.into()),
|
increment_callback_decrease: WidgetCallback::new(|_| NavigationMessage::DecreaseCanvasZoom { center_on_mouse: false }.into()),
|
||||||
increment_callback_increase: WidgetCallback::new(|_| MovementMessage::IncreaseCanvasZoom { center_on_mouse: false }.into()),
|
increment_callback_increase: WidgetCallback::new(|_| NavigationMessage::IncreaseCanvasZoom { center_on_mouse: false }.into()),
|
||||||
..NumberInput::default()
|
..NumberInput::default()
|
||||||
})),
|
})),
|
||||||
];
|
];
|
||||||
let rotation_value = self.movement_handler.snapped_angle() / (std::f64::consts::PI / 180.);
|
let rotation_value = self.navigation_handler.snapped_angle() / (std::f64::consts::PI / 180.);
|
||||||
if rotation_value.abs() > 0.00001 {
|
if rotation_value.abs() > 0.00001 {
|
||||||
widgets.extend([
|
widgets.extend([
|
||||||
WidgetHolder::new(Widget::Separator(Separator {
|
WidgetHolder::new(Widget::Separator(Separator {
|
||||||
|
|
@ -1411,7 +1411,7 @@ impl DocumentMessageHandler {
|
||||||
value: Some(rotation_value),
|
value: Some(rotation_value),
|
||||||
increment_factor: 15.,
|
increment_factor: 15.,
|
||||||
on_update: WidgetCallback::new(|number_input: &NumberInput| {
|
on_update: WidgetCallback::new(|number_input: &NumberInput| {
|
||||||
MovementMessage::SetCanvasRotation {
|
NavigationMessage::SetCanvasRotation {
|
||||||
angle_radians: number_input.value.unwrap() * (std::f64::consts::PI / 180.),
|
angle_radians: number_input.value.unwrap() * (std::f64::consts::PI / 180.),
|
||||||
}
|
}
|
||||||
.into()
|
.into()
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@ mod document_message;
|
||||||
mod document_message_handler;
|
mod document_message_handler;
|
||||||
|
|
||||||
pub mod artboard;
|
pub mod artboard;
|
||||||
pub mod movement;
|
pub mod navigation;
|
||||||
pub mod overlays;
|
pub mod overlays;
|
||||||
pub mod properties_panel;
|
pub mod properties_panel;
|
||||||
pub mod transform_layer;
|
pub mod transform_layer;
|
||||||
|
|
|
||||||
|
|
@ -1,7 +0,0 @@
|
||||||
mod movement_message;
|
|
||||||
mod movement_message_handler;
|
|
||||||
|
|
||||||
#[doc(inline)]
|
|
||||||
pub use movement_message::{MovementMessage, MovementMessageDiscriminant};
|
|
||||||
#[doc(inline)]
|
|
||||||
pub use movement_message_handler::MovementMessageHandler;
|
|
||||||
|
|
@ -0,0 +1,7 @@
|
||||||
|
mod navigation_message;
|
||||||
|
mod navigation_message_handler;
|
||||||
|
|
||||||
|
#[doc(inline)]
|
||||||
|
pub use navigation_message::{NavigationMessage, NavigationMessageDiscriminant};
|
||||||
|
#[doc(inline)]
|
||||||
|
pub use navigation_message_handler::NavigationMessageHandler;
|
||||||
|
|
@ -5,9 +5,9 @@ use glam::DVec2;
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
#[remain::sorted]
|
#[remain::sorted]
|
||||||
#[impl_message(Message, DocumentMessage, Movement)]
|
#[impl_message(Message, DocumentMessage, Navigation)]
|
||||||
#[derive(PartialEq, Clone, Debug, Serialize, Deserialize)]
|
#[derive(PartialEq, Clone, Debug, Serialize, Deserialize)]
|
||||||
pub enum MovementMessage {
|
pub enum NavigationMessage {
|
||||||
// Messages
|
// Messages
|
||||||
DecreaseCanvasZoom {
|
DecreaseCanvasZoom {
|
||||||
center_on_mouse: bool,
|
center_on_mouse: bool,
|
||||||
|
|
@ -12,7 +12,7 @@ use glam::{DAffine2, DVec2};
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
|
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
|
||||||
pub struct MovementMessageHandler {
|
pub struct NavigationMessageHandler {
|
||||||
pub pan: DVec2,
|
pub pan: DVec2,
|
||||||
panning: bool,
|
panning: bool,
|
||||||
snap_tilt: bool,
|
snap_tilt: bool,
|
||||||
|
|
@ -28,7 +28,7 @@ pub struct MovementMessageHandler {
|
||||||
mouse_position: ViewportPosition,
|
mouse_position: ViewportPosition,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Default for MovementMessageHandler {
|
impl Default for NavigationMessageHandler {
|
||||||
fn default() -> Self {
|
fn default() -> Self {
|
||||||
Self {
|
Self {
|
||||||
pan: DVec2::ZERO,
|
pan: DVec2::ZERO,
|
||||||
|
|
@ -48,10 +48,10 @@ impl Default for MovementMessageHandler {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl MessageHandler<MovementMessage, (&Document, &InputPreprocessorMessageHandler)> for MovementMessageHandler {
|
impl MessageHandler<NavigationMessage, (&Document, &InputPreprocessorMessageHandler)> for NavigationMessageHandler {
|
||||||
#[remain::check]
|
#[remain::check]
|
||||||
fn process_message(&mut self, message: MovementMessage, data: (&Document, &InputPreprocessorMessageHandler), responses: &mut VecDeque<Message>) {
|
fn process_message(&mut self, message: NavigationMessage, data: (&Document, &InputPreprocessorMessageHandler), responses: &mut VecDeque<Message>) {
|
||||||
use MovementMessage::*;
|
use NavigationMessage::*;
|
||||||
|
|
||||||
let (document, ipp) = data;
|
let (document, ipp) = data;
|
||||||
|
|
||||||
|
|
@ -263,7 +263,7 @@ impl MessageHandler<MovementMessage, (&Document, &InputPreprocessorMessageHandle
|
||||||
}
|
}
|
||||||
|
|
||||||
fn actions(&self) -> ActionList {
|
fn actions(&self) -> ActionList {
|
||||||
let mut common = actions!(MovementMessageDiscriminant;
|
let mut common = actions!(NavigationMessageDiscriminant;
|
||||||
TranslateCanvasBegin,
|
TranslateCanvasBegin,
|
||||||
RotateCanvasBegin,
|
RotateCanvasBegin,
|
||||||
ZoomCanvasBegin,
|
ZoomCanvasBegin,
|
||||||
|
|
@ -277,7 +277,7 @@ impl MessageHandler<MovementMessage, (&Document, &InputPreprocessorMessageHandle
|
||||||
);
|
);
|
||||||
|
|
||||||
if self.panning || self.tilting || self.zooming {
|
if self.panning || self.tilting || self.zooming {
|
||||||
let transforming = actions!(MovementMessageDiscriminant;
|
let transforming = actions!(NavigationMessageDiscriminant;
|
||||||
PointerMove,
|
PointerMove,
|
||||||
TransformCanvasEnd,
|
TransformCanvasEnd,
|
||||||
);
|
);
|
||||||
|
|
@ -287,7 +287,7 @@ impl MessageHandler<MovementMessage, (&Document, &InputPreprocessorMessageHandle
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl MovementMessageHandler {
|
impl NavigationMessageHandler {
|
||||||
pub fn snapped_angle(&self) -> f64 {
|
pub fn snapped_angle(&self) -> f64 {
|
||||||
let increment_radians: f64 = VIEWPORT_ROTATE_SNAP_INTERVAL.to_radians();
|
let increment_radians: f64 = VIEWPORT_ROTATE_SNAP_INTERVAL.to_radians();
|
||||||
if self.snap_tilt {
|
if self.snap_tilt {
|
||||||
|
|
@ -346,6 +346,6 @@ impl MovementMessageHandler {
|
||||||
let mouse_fraction = mouse / viewport_bounds;
|
let mouse_fraction = mouse / viewport_bounds;
|
||||||
let delta = delta_size * (DVec2::splat(0.5) - mouse_fraction);
|
let delta = delta_size * (DVec2::splat(0.5) - mouse_fraction);
|
||||||
|
|
||||||
MovementMessage::TranslateCanvas { delta }.into()
|
NavigationMessage::TranslateCanvas { delta }.into()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -206,7 +206,7 @@ impl MessageHandler<PortfolioMessage, &InputPreprocessorMessageHandler> for Port
|
||||||
let document_id = generate_uuid();
|
let document_id = generate_uuid();
|
||||||
if self.active_document().is_some() {
|
if self.active_document().is_some() {
|
||||||
responses.push_back(BroadcastEvent::ToolAbort.into());
|
responses.push_back(BroadcastEvent::ToolAbort.into());
|
||||||
responses.push_back(MovementMessage::TranslateCanvas { delta: (0., 0.).into() }.into());
|
responses.push_back(NavigationMessage::TranslateCanvas { delta: (0., 0.).into() }.into());
|
||||||
}
|
}
|
||||||
|
|
||||||
self.load_document(new_document, document_id, responses);
|
self.load_document(new_document, document_id, responses);
|
||||||
|
|
@ -393,7 +393,7 @@ impl MessageHandler<PortfolioMessage, &InputPreprocessorMessageHandler> for Port
|
||||||
responses.push_back(BroadcastEvent::SelectionChanged.into());
|
responses.push_back(BroadcastEvent::SelectionChanged.into());
|
||||||
responses.push_back(BroadcastEvent::DocumentIsDirty.into());
|
responses.push_back(BroadcastEvent::DocumentIsDirty.into());
|
||||||
responses.push_back(PortfolioMessage::UpdateDocumentWidgets.into());
|
responses.push_back(PortfolioMessage::UpdateDocumentWidgets.into());
|
||||||
responses.push_back(MovementMessage::TranslateCanvas { delta: (0., 0.).into() }.into());
|
responses.push_back(NavigationMessage::TranslateCanvas { delta: (0., 0.).into() }.into());
|
||||||
}
|
}
|
||||||
SetActiveDocument { document_id } => self.active_document_id = Some(document_id),
|
SetActiveDocument { document_id } => self.active_document_id = Some(document_id),
|
||||||
SetPlatform { platform } => self.platform = platform,
|
SetPlatform { platform } => self.platform = platform,
|
||||||
|
|
@ -506,7 +506,7 @@ impl PortfolioMessageHandler {
|
||||||
responses.push_back(PortfolioMessage::UpdateDocumentWidgets.into());
|
responses.push_back(PortfolioMessage::UpdateDocumentWidgets.into());
|
||||||
responses.push_back(ToolMessage::InitTools.into());
|
responses.push_back(ToolMessage::InitTools.into());
|
||||||
responses.push_back(PropertiesPanelMessage::Init.into());
|
responses.push_back(PropertiesPanelMessage::Init.into());
|
||||||
responses.push_back(MovementMessage::TranslateCanvas { delta: (0., 0.).into() }.into());
|
responses.push_back(NavigationMessage::TranslateCanvas { delta: (0., 0.).into() }.into());
|
||||||
responses.push_back(DocumentMessage::DocumentStructureChanged.into())
|
responses.push_back(DocumentMessage::DocumentStructureChanged.into())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,7 @@ pub use crate::messages::input_mapper::{InputMapperMessage, InputMapperMessageDi
|
||||||
pub use crate::messages::input_preprocessor::{InputPreprocessorMessage, InputPreprocessorMessageDiscriminant, InputPreprocessorMessageHandler};
|
pub use crate::messages::input_preprocessor::{InputPreprocessorMessage, InputPreprocessorMessageDiscriminant, InputPreprocessorMessageHandler};
|
||||||
pub use crate::messages::layout::{LayoutMessage, LayoutMessageDiscriminant, LayoutMessageHandler};
|
pub use crate::messages::layout::{LayoutMessage, LayoutMessageDiscriminant, LayoutMessageHandler};
|
||||||
pub use crate::messages::portfolio::document::artboard::{ArtboardMessage, ArtboardMessageDiscriminant, ArtboardMessageHandler};
|
pub use crate::messages::portfolio::document::artboard::{ArtboardMessage, ArtboardMessageDiscriminant, ArtboardMessageHandler};
|
||||||
pub use crate::messages::portfolio::document::movement::{MovementMessage, MovementMessageDiscriminant, MovementMessageHandler};
|
pub use crate::messages::portfolio::document::navigation::{NavigationMessage, NavigationMessageDiscriminant, NavigationMessageHandler};
|
||||||
pub use crate::messages::portfolio::document::overlays::{OverlaysMessage, OverlaysMessageDiscriminant, OverlaysMessageHandler};
|
pub use crate::messages::portfolio::document::overlays::{OverlaysMessage, OverlaysMessageDiscriminant, OverlaysMessageHandler};
|
||||||
pub use crate::messages::portfolio::document::properties_panel::{PropertiesPanelMessage, PropertiesPanelMessageDiscriminant, PropertiesPanelMessageHandler};
|
pub use crate::messages::portfolio::document::properties_panel::{PropertiesPanelMessage, PropertiesPanelMessageDiscriminant, PropertiesPanelMessageHandler};
|
||||||
pub use crate::messages::portfolio::document::transform_layer::{TransformLayerMessage, TransformLayerMessageDiscriminant, TransformLayerMessageHandler};
|
pub use crate::messages::portfolio::document::transform_layer::{TransformLayerMessage, TransformLayerMessageDiscriminant, TransformLayerMessageHandler};
|
||||||
|
|
|
||||||
|
|
@ -135,14 +135,14 @@ impl Fsm for NavigateToolFsmState {
|
||||||
|
|
||||||
match navigate {
|
match navigate {
|
||||||
ClickZoom { zoom_in } => {
|
ClickZoom { zoom_in } => {
|
||||||
messages.push_front(MovementMessage::TransformCanvasEnd.into());
|
messages.push_front(NavigationMessage::TransformCanvasEnd.into());
|
||||||
|
|
||||||
// Mouse has not moved from pointerdown to pointerup
|
// Mouse has not moved from pointerdown to pointerup
|
||||||
if tool_data.drag_start == input.mouse.position {
|
if tool_data.drag_start == input.mouse.position {
|
||||||
messages.push_front(if zoom_in {
|
messages.push_front(if zoom_in {
|
||||||
MovementMessage::IncreaseCanvasZoom { center_on_mouse: true }.into()
|
NavigationMessage::IncreaseCanvasZoom { center_on_mouse: true }.into()
|
||||||
} else {
|
} else {
|
||||||
MovementMessage::DecreaseCanvasZoom { center_on_mouse: true }.into()
|
NavigationMessage::DecreaseCanvasZoom { center_on_mouse: true }.into()
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -150,7 +150,7 @@ impl Fsm for NavigateToolFsmState {
|
||||||
}
|
}
|
||||||
PointerMove { snap_angle, snap_zoom } => {
|
PointerMove { snap_angle, snap_zoom } => {
|
||||||
messages.push_front(
|
messages.push_front(
|
||||||
MovementMessage::PointerMove {
|
NavigationMessage::PointerMove {
|
||||||
snap_angle,
|
snap_angle,
|
||||||
wait_for_snap_angle_release: false,
|
wait_for_snap_angle_release: false,
|
||||||
snap_zoom,
|
snap_zoom,
|
||||||
|
|
@ -162,25 +162,25 @@ impl Fsm for NavigateToolFsmState {
|
||||||
}
|
}
|
||||||
TranslateCanvasBegin => {
|
TranslateCanvasBegin => {
|
||||||
tool_data.drag_start = input.mouse.position;
|
tool_data.drag_start = input.mouse.position;
|
||||||
messages.push_front(MovementMessage::TranslateCanvasBegin.into());
|
messages.push_front(NavigationMessage::TranslateCanvasBegin.into());
|
||||||
NavigateToolFsmState::Panning
|
NavigateToolFsmState::Panning
|
||||||
}
|
}
|
||||||
RotateCanvasBegin => {
|
RotateCanvasBegin => {
|
||||||
tool_data.drag_start = input.mouse.position;
|
tool_data.drag_start = input.mouse.position;
|
||||||
messages.push_front(MovementMessage::RotateCanvasBegin.into());
|
messages.push_front(NavigationMessage::RotateCanvasBegin.into());
|
||||||
NavigateToolFsmState::Tilting
|
NavigateToolFsmState::Tilting
|
||||||
}
|
}
|
||||||
ZoomCanvasBegin => {
|
ZoomCanvasBegin => {
|
||||||
tool_data.drag_start = input.mouse.position;
|
tool_data.drag_start = input.mouse.position;
|
||||||
messages.push_front(MovementMessage::ZoomCanvasBegin.into());
|
messages.push_front(NavigationMessage::ZoomCanvasBegin.into());
|
||||||
NavigateToolFsmState::Zooming
|
NavigateToolFsmState::Zooming
|
||||||
}
|
}
|
||||||
TransformCanvasEnd => {
|
TransformCanvasEnd => {
|
||||||
messages.push_front(MovementMessage::TransformCanvasEnd.into());
|
messages.push_front(NavigationMessage::TransformCanvasEnd.into());
|
||||||
NavigateToolFsmState::Ready
|
NavigateToolFsmState::Ready
|
||||||
}
|
}
|
||||||
Abort => {
|
Abort => {
|
||||||
messages.push_front(MovementMessage::TransformCanvasEnd.into());
|
messages.push_front(NavigationMessage::TransformCanvasEnd.into());
|
||||||
NavigateToolFsmState::Ready
|
NavigateToolFsmState::Ready
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -380,13 +380,13 @@ impl JsEditorHandle {
|
||||||
|
|
||||||
/// Translates document (in viewport coords)
|
/// Translates document (in viewport coords)
|
||||||
pub fn translate_canvas(&self, delta_x: f64, delta_y: f64) {
|
pub fn translate_canvas(&self, delta_x: f64, delta_y: f64) {
|
||||||
let message = MovementMessage::TranslateCanvas { delta: (delta_x, delta_y).into() };
|
let message = NavigationMessage::TranslateCanvas { delta: (delta_x, delta_y).into() };
|
||||||
self.dispatch(message);
|
self.dispatch(message);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Translates document (in viewport coords)
|
/// Translates document (in viewport coords)
|
||||||
pub fn translate_canvas_by_fraction(&self, delta_x: f64, delta_y: f64) {
|
pub fn translate_canvas_by_fraction(&self, delta_x: f64, delta_y: f64) {
|
||||||
let message = MovementMessage::TranslateCanvasByViewportFraction { delta: (delta_x, delta_y).into() };
|
let message = NavigationMessage::TranslateCanvasByViewportFraction { delta: (delta_x, delta_y).into() };
|
||||||
self.dispatch(message);
|
self.dispatch(message);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue