Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion editor/src/frontend/frontend_message.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
use super::utility_types::FrontendDocumentDetails;
use super::utility_types::{FrontendDocumentDetails, MouseCursorIcon};
use crate::document::layer_panel::{LayerPanelEntry, RawBuffer};
use crate::message_prelude::*;
use crate::misc::HintData;
Expand Down Expand Up @@ -37,6 +37,7 @@ pub enum FrontendMessage {
UpdateDocumentRulers { origin: (f64, f64), spacing: f64, interval: f64 },
UpdateDocumentScrollbars { position: (f64, f64), size: (f64, f64), multiplier: (f64, f64) },
UpdateInputHints { hint_data: HintData },
UpdateMouseCursor { cursor: MouseCursorIcon },
UpdateOpenDocumentsList { open_documents: Vec<FrontendDocumentDetails> },
UpdateWorkingColors { primary: Color, secondary: Color },
}
9 changes: 9 additions & 0 deletions editor/src/frontend/utility_types.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,3 +6,12 @@ pub struct FrontendDocumentDetails {
pub name: String,
pub id: u64,
}

#[derive(Clone, Copy, Debug, Eq, Deserialize, PartialEq, Serialize)]
pub enum MouseCursorIcon {
Default,
ZoomIn,
ZoomOut,
Grabbing,
Crosshair,
}
1 change: 1 addition & 0 deletions editor/src/viewport_tools/tool.rs
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ pub trait Fsm {
) -> Self;

fn update_hints(&self, responses: &mut VecDeque<Message>);
fn update_cursor(&self, responses: &mut VecDeque<Message>);
}

#[derive(Debug, Clone)]
Expand Down
1 change: 1 addition & 0 deletions editor/src/viewport_tools/tool_message.rs
Original file line number Diff line number Diff line change
Expand Up @@ -49,5 +49,6 @@ pub enum ToolMessage {
#[child]
Shape(ShapeMessage),
SwapColors,
UpdateCursor,
UpdateHints,
}
5 changes: 3 additions & 2 deletions editor/src/viewport_tools/tool_message_handler.rs
Original file line number Diff line number Diff line change
Expand Up @@ -31,12 +31,13 @@ impl MessageHandler<ToolMessage, (&DocumentMessageHandler, &InputPreprocessorMes
}

// Send the Abort state transition to the tool
let mut send_abort_to_tool = |tool_type, message: ToolMessage, update_hints: bool| {
let mut send_abort_to_tool = |tool_type, message: ToolMessage, update_hints_and_cursor: bool| {
if let Some(tool) = tool_data.tools.get_mut(&tool_type) {
tool.process_action(message, (document, document_data, input), responses);

if update_hints {
if update_hints_and_cursor {
tool.process_action(ToolMessage::UpdateHints, (document, document_data, input), responses);
tool.process_action(ToolMessage::UpdateCursor, (document, document_data, input), responses);
}
}
};
Expand Down
11 changes: 11 additions & 0 deletions editor/src/viewport_tools/tools/ellipse.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
use super::shared::resize::Resize;
use crate::document::DocumentMessageHandler;
use crate::frontend::utility_types::MouseCursorIcon;
use crate::input::keyboard::{Key, MouseMotion};
use crate::input::InputPreprocessorMessageHandler;
use crate::message_prelude::*;
Expand Down Expand Up @@ -35,11 +36,17 @@ impl<'a> MessageHandler<ToolMessage, ToolActionHandlerData<'a>> for Ellipse {
return;
}

if action == ToolMessage::UpdateCursor {
self.fsm_state.update_cursor(responses);
return;
}

let new_state = self.fsm_state.transition(action, data.0, data.1, &mut self.data, data.2, responses);

if self.fsm_state != new_state {
self.fsm_state = new_state;
self.fsm_state.update_hints(responses);
self.fsm_state.update_cursor(responses);
}
}

Expand Down Expand Up @@ -177,4 +184,8 @@ impl Fsm for EllipseToolFsmState {

responses.push_back(FrontendMessage::UpdateInputHints { hint_data }.into());
}

fn update_cursor(&self, responses: &mut VecDeque<Message>) {
responses.push_back(FrontendMessage::UpdateMouseCursor { cursor: MouseCursorIcon::Crosshair }.into());
}
}
11 changes: 11 additions & 0 deletions editor/src/viewport_tools/tools/eyedropper.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
use crate::consts::SELECTION_TOLERANCE;
use crate::document::DocumentMessageHandler;
use crate::frontend::utility_types::MouseCursorIcon;
use crate::input::keyboard::MouseMotion;
use crate::input::InputPreprocessorMessageHandler;
use crate::message_prelude::*;
Expand Down Expand Up @@ -34,11 +35,17 @@ impl<'a> MessageHandler<ToolMessage, ToolActionHandlerData<'a>> for Eyedropper {
return;
}

if action == ToolMessage::UpdateCursor {
self.fsm_state.update_cursor(responses);
return;
}

let new_state = self.fsm_state.transition(action, data.0, data.1, &mut self.data, data.2, responses);

if self.fsm_state != new_state {
self.fsm_state = new_state;
self.fsm_state.update_hints(responses);
self.fsm_state.update_cursor(responses);
}
}

Expand Down Expand Up @@ -127,4 +134,8 @@ impl Fsm for EyedropperToolFsmState {

responses.push_back(FrontendMessage::UpdateInputHints { hint_data }.into());
}

fn update_cursor(&self, responses: &mut VecDeque<Message>) {
responses.push_back(FrontendMessage::UpdateMouseCursor { cursor: MouseCursorIcon::Default }.into());
}
}
11 changes: 11 additions & 0 deletions editor/src/viewport_tools/tools/fill.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
use crate::consts::SELECTION_TOLERANCE;
use crate::document::DocumentMessageHandler;
use crate::frontend::utility_types::MouseCursorIcon;
use crate::input::keyboard::MouseMotion;
use crate::input::InputPreprocessorMessageHandler;
use crate::message_prelude::*;
Expand Down Expand Up @@ -34,11 +35,17 @@ impl<'a> MessageHandler<ToolMessage, ToolActionHandlerData<'a>> for Fill {
return;
}

if action == ToolMessage::UpdateCursor {
self.fsm_state.update_cursor(responses);
return;
}

let new_state = self.fsm_state.transition(action, data.0, data.1, &mut self.data, data.2, responses);

if self.fsm_state != new_state {
self.fsm_state = new_state;
self.fsm_state.update_hints(responses);
self.fsm_state.update_cursor(responses);
}
}

Expand Down Expand Up @@ -121,4 +128,8 @@ impl Fsm for FillToolFsmState {

responses.push_back(FrontendMessage::UpdateInputHints { hint_data }.into());
}

fn update_cursor(&self, responses: &mut VecDeque<Message>) {
responses.push_back(FrontendMessage::UpdateMouseCursor { cursor: MouseCursorIcon::Default }.into());
}
}
11 changes: 11 additions & 0 deletions editor/src/viewport_tools/tools/line.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
use crate::consts::LINE_ROTATE_SNAP_ANGLE;
use crate::document::DocumentMessageHandler;
use crate::frontend::utility_types::MouseCursorIcon;
use crate::input::keyboard::{Key, MouseMotion};
use crate::input::mouse::ViewportPosition;
use crate::input::InputPreprocessorMessageHandler;
Expand Down Expand Up @@ -38,11 +39,17 @@ impl<'a> MessageHandler<ToolMessage, ToolActionHandlerData<'a>> for Line {
return;
}

if action == ToolMessage::UpdateCursor {
self.fsm_state.update_cursor(responses);
return;
}

let new_state = self.fsm_state.transition(action, data.0, data.1, &mut self.data, data.2, responses);

if self.fsm_state != new_state {
self.fsm_state = new_state;
self.fsm_state.update_hints(responses);
self.fsm_state.update_cursor(responses);
}
}

Expand Down Expand Up @@ -207,6 +214,10 @@ impl Fsm for LineToolFsmState {

responses.push_back(FrontendMessage::UpdateInputHints { hint_data }.into());
}

fn update_cursor(&self, responses: &mut VecDeque<Message>) {
responses.push_back(FrontendMessage::UpdateMouseCursor { cursor: MouseCursorIcon::Crosshair }.into());
}
}

fn generate_transform(data: &mut LineToolData, lock: bool, snap: bool, center: bool) -> Message {
Expand Down
18 changes: 18 additions & 0 deletions editor/src/viewport_tools/tools/navigate.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
use crate::document::DocumentMessageHandler;
use crate::frontend::utility_types::MouseCursorIcon;
use crate::input::keyboard::{Key, MouseMotion};
use crate::input::InputPreprocessorMessageHandler;
use crate::message_prelude::*;
Expand Down Expand Up @@ -34,11 +35,17 @@ impl<'a> MessageHandler<ToolMessage, ToolActionHandlerData<'a>> for Navigate {
return;
}

if action == ToolMessage::UpdateCursor {
self.fsm_state.update_cursor(responses);
return;
}

let new_state = self.fsm_state.transition(action, data.0, data.1, &mut self.data, data.2, responses);

if self.fsm_state != new_state {
self.fsm_state = new_state;
self.fsm_state.update_hints(responses);
self.fsm_state.update_cursor(responses);
}
}

Expand Down Expand Up @@ -211,4 +218,15 @@ impl Fsm for NavigateToolFsmState {

responses.push_back(FrontendMessage::UpdateInputHints { hint_data }.into());
}

fn update_cursor(&self, responses: &mut VecDeque<Message>) {
let cursor = match *self {
NavigateToolFsmState::Ready => MouseCursorIcon::ZoomIn,
NavigateToolFsmState::Panning => MouseCursorIcon::Grabbing,
NavigateToolFsmState::Tilting => MouseCursorIcon::Default,
NavigateToolFsmState::Zooming => MouseCursorIcon::ZoomIn,
};

responses.push_back(FrontendMessage::UpdateMouseCursor { cursor }.into());
}
}
11 changes: 11 additions & 0 deletions editor/src/viewport_tools/tools/path.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
use crate::consts::{COLOR_ACCENT, VECTOR_MANIPULATOR_ANCHOR_MARKER_SIZE};
use crate::document::utility_types::{VectorManipulatorSegment, VectorManipulatorShape};
use crate::document::DocumentMessageHandler;
use crate::frontend::utility_types::MouseCursorIcon;
use crate::input::keyboard::{Key, MouseMotion};
use crate::input::InputPreprocessorMessageHandler;
use crate::message_prelude::*;
Expand Down Expand Up @@ -41,11 +42,17 @@ impl<'a> MessageHandler<ToolMessage, ToolActionHandlerData<'a>> for Path {
return;
}

if action == ToolMessage::UpdateCursor {
self.fsm_state.update_cursor(responses);
return;
}

let new_state = self.fsm_state.transition(action, data.0, data.1, &mut self.data, data.2, responses);

if self.fsm_state != new_state {
self.fsm_state = new_state;
self.fsm_state.update_hints(responses);
self.fsm_state.update_cursor(responses);
}
}

Expand Down Expand Up @@ -476,6 +483,10 @@ impl Fsm for PathToolFsmState {

responses.push_back(FrontendMessage::UpdateInputHints { hint_data }.into());
}

fn update_cursor(&self, responses: &mut VecDeque<Message>) {
responses.push_back(FrontendMessage::UpdateMouseCursor { cursor: MouseCursorIcon::Default }.into());
}
}

struct VectorManipulatorTypes {
Expand Down
11 changes: 11 additions & 0 deletions editor/src/viewport_tools/tools/pen.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
use crate::document::DocumentMessageHandler;
use crate::frontend::utility_types::MouseCursorIcon;
use crate::input::keyboard::{Key, MouseMotion};
use crate::input::InputPreprocessorMessageHandler;
use crate::message_prelude::*;
Expand Down Expand Up @@ -44,11 +45,17 @@ impl<'a> MessageHandler<ToolMessage, ToolActionHandlerData<'a>> for Pen {
return;
}

if action == ToolMessage::UpdateCursor {
self.fsm_state.update_cursor(responses);
return;
}

let new_state = self.fsm_state.transition(action, data.0, data.1, &mut self.data, data.2, responses);

if self.fsm_state != new_state {
self.fsm_state = new_state;
self.fsm_state.update_hints(responses);
self.fsm_state.update_cursor(responses);
}
}

Expand Down Expand Up @@ -193,6 +200,10 @@ impl Fsm for PenToolFsmState {

responses.push_back(FrontendMessage::UpdateInputHints { hint_data }.into());
}

fn update_cursor(&self, responses: &mut VecDeque<Message>) {
responses.push_back(FrontendMessage::UpdateMouseCursor { cursor: MouseCursorIcon::Default }.into());
}
}

fn remove_preview(data: &PenToolData) -> Message {
Expand Down
11 changes: 11 additions & 0 deletions editor/src/viewport_tools/tools/rectangle.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
use super::shared::resize::Resize;
use crate::document::DocumentMessageHandler;
use crate::frontend::utility_types::MouseCursorIcon;
use crate::input::keyboard::{Key, MouseMotion};
use crate::input::InputPreprocessorMessageHandler;
use crate::message_prelude::*;
Expand Down Expand Up @@ -35,11 +36,17 @@ impl<'a> MessageHandler<ToolMessage, ToolActionHandlerData<'a>> for Rectangle {
return;
}

if action == ToolMessage::UpdateCursor {
self.fsm_state.update_cursor(responses);
return;
}

let new_state = self.fsm_state.transition(action, data.0, data.1, &mut self.data, data.2, responses);

if self.fsm_state != new_state {
self.fsm_state = new_state;
self.fsm_state.update_hints(responses);
self.fsm_state.update_cursor(responses);
}
}

Expand Down Expand Up @@ -177,4 +184,8 @@ impl Fsm for RectangleToolFsmState {

responses.push_back(FrontendMessage::UpdateInputHints { hint_data }.into());
}

fn update_cursor(&self, responses: &mut VecDeque<Message>) {
responses.push_back(FrontendMessage::UpdateMouseCursor { cursor: MouseCursorIcon::Crosshair }.into());
}
}
11 changes: 11 additions & 0 deletions editor/src/viewport_tools/tools/select.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
use crate::consts::{COLOR_ACCENT, SELECTION_DRAG_ANGLE, SELECTION_TOLERANCE};
use crate::document::utility_types::{AlignAggregate, AlignAxis, FlipAxis};
use crate::document::DocumentMessageHandler;
use crate::frontend::utility_types::MouseCursorIcon;
use crate::input::keyboard::{Key, MouseMotion};
use crate::input::mouse::ViewportPosition;
use crate::input::InputPreprocessorMessageHandler;
Expand Down Expand Up @@ -46,11 +47,17 @@ impl<'a> MessageHandler<ToolMessage, ToolActionHandlerData<'a>> for Select {
return;
}

if action == ToolMessage::UpdateCursor {
self.fsm_state.update_cursor(responses);
return;
}

let new_state = self.fsm_state.transition(action, data.0, data.1, &mut self.data, data.2, responses);

if self.fsm_state != new_state {
self.fsm_state = new_state;
self.fsm_state.update_hints(responses);
self.fsm_state.update_cursor(responses);
}
}

Expand Down Expand Up @@ -420,4 +427,8 @@ impl Fsm for SelectToolFsmState {

responses.push_back(FrontendMessage::UpdateInputHints { hint_data }.into());
}

fn update_cursor(&self, responses: &mut VecDeque<Message>) {
responses.push_back(FrontendMessage::UpdateMouseCursor { cursor: MouseCursorIcon::Default }.into());
}
}
Loading