diff --git a/client/web/src/components/panels/Document.vue b/client/web/src/components/panels/Document.vue
index 48b45cc7d..d210e9abc 100644
--- a/client/web/src/components/panels/Document.vue
+++ b/client/web/src/components/panels/Document.vue
@@ -328,10 +328,10 @@ export default defineComponent({
},
},
mounted() {
- registerResponseHandler(ResponseType.UpdateCanvas, (responseData) => {
+ registerResponseHandler(ResponseType["Document::UpdateCanvas"], (responseData) => {
this.viewportSvg = responseData;
});
- registerResponseHandler(ResponseType.SetActiveTool, (responseData) => {
+ registerResponseHandler(ResponseType["Tool::SetActiveTool"], (responseData) => {
this.activeTool = responseData;
});
diff --git a/client/web/src/components/panels/LayerTree.vue b/client/web/src/components/panels/LayerTree.vue
index fdd88d338..afe6c6e92 100644
--- a/client/web/src/components/panels/LayerTree.vue
+++ b/client/web/src/components/panels/LayerTree.vue
@@ -6,9 +6,22 @@
diff --git a/client/web/src/response-handler.ts b/client/web/src/response-handler.ts
index 1108f0f94..1751bd20b 100644
--- a/client/web/src/response-handler.ts
+++ b/client/web/src/response-handler.ts
@@ -9,8 +9,10 @@ declare global {
}
export enum ResponseType {
- UpdateCanvas = "UpdateCanvas",
- SetActiveTool = "SetActiveTool",
+ "Document::UpdateCanvas" = "Document::UpdateCanvas",
+ "Document::ExpandFolder" = "Document::ExpandFolder",
+ "Document::CollapseFolder" = "Document::CollapseFolder",
+ "Tool::SetActiveTool" = "Tool::SetActiveTool",
}
export function attachResponseHandlerToPage() {
diff --git a/client/web/wasm/src/lib.rs b/client/web/wasm/src/lib.rs
index 2681312ea..1fb90188b 100644
--- a/client/web/wasm/src/lib.rs
+++ b/client/web/wasm/src/lib.rs
@@ -4,7 +4,10 @@ pub mod utils;
pub mod window;
pub mod wrappers;
-use editor_core::{events::Response, Editor};
+use editor_core::{
+ events::{DocumentResponse, Response, ToolResponse},
+ Editor, LayerId,
+};
use std::cell::RefCell;
use utils::WasmLog;
use wasm_bindgen::prelude::*;
@@ -20,17 +23,36 @@ pub fn init() {
log::set_max_level(log::LevelFilter::Debug);
}
+fn path_to_string(path: Vec) -> String {
+ path.iter().map(|x| x.to_string()).collect::>().join(",")
+}
+
fn handle_response(response: Response) {
let response_type = response.to_string();
match response {
- Response::UpdateCanvas { document } => handleResponse(response_type, document),
- Response::SetActiveTool { tool_name } => handleResponse(response_type, tool_name),
+ Response::Document(doc) => match doc {
+ DocumentResponse::UpdateCanvas { document } => send_response(response_type, &[document]),
+ DocumentResponse::ExpandFolder { path, children } => {
+ let children = children
+ .iter()
+ .map(|c| format!("name:{},visible:{},type:{}", c.name, c.visible, c.layer_type))
+ .collect::>()
+ .join(";");
+ send_response(response_type, &[path_to_string(path), children])
+ }
+ DocumentResponse::CollapseFolder { path } => send_response(response_type, &[path_to_string(path)]),
+ },
+ Response::Tool(ToolResponse::SetActiveTool { tool_name }) => send_response(response_type, &[tool_name]),
}
}
+fn send_response(response_type: String, response_data: &[String]) {
+ let data = response_data.iter().map(JsValue::from).collect();
+ handleResponse(response_type, data);
+}
#[wasm_bindgen(module = "/../src/response-handler.ts")]
extern "C" {
- fn handleResponse(responseType: String, responseData: String);
+ fn handleResponse(responseType: String, responseData: Vec);
}
#[wasm_bindgen]
diff --git a/core/document/src/document.rs b/core/document/src/document.rs
index 0969e65cf..4a5ad2848 100644
--- a/core/document/src/document.rs
+++ b/core/document/src/document.rs
@@ -2,7 +2,8 @@ use layers::PolyLine;
use crate::{
layers::{self, Folder, Layer, LayerData, LayerDataTypes, Line, Rect, Shape},
- DocumentError, LayerId, Operation,
+ response::{LayerPanelEntry, LayerType},
+ DocumentError, DocumentResponse, LayerId, Operation,
};
#[derive(Debug, Clone, PartialEq)]
@@ -57,6 +58,11 @@ impl Document {
out
}
+ /// Wrapper around render, that returns the whole document as a Response
+ pub fn render_root(&self) -> DocumentResponse {
+ DocumentResponse::UpdateCanvas { document: self.render(&mut vec![]) }
+ }
+
fn is_mounted(&self, mount_path: &[LayerId], path: &[LayerId]) -> bool {
path.starts_with(mount_path) && self.work_mounted
}
@@ -138,13 +144,28 @@ impl Document {
Ok(())
}
- pub fn handle_operation(&mut self, operation: Operation, update_frontend: &F) -> Result<(), DocumentError> {
+ pub fn layer_panel(&self, path: &[LayerId]) -> Result, DocumentError> {
+ let folder = self.document_folder(path)?;
+ let l_type = |layer: &LayerDataTypes| match layer {
+ LayerDataTypes::Folder(_) => LayerType::Folder,
+ _ => LayerType::Shape,
+ };
+ let translate = |layer: &Layer| LayerPanelEntry {
+ name: layer.name.clone().unwrap_or_else(|| String::from("UnnamedFolder")),
+ visible: layer.visible,
+ layer_type: l_type(&layer.data),
+ };
+ let entries = folder.layers().iter().map(|layer| translate(layer)).collect();
+ Ok(entries)
+ }
+
+ pub fn handle_operation)>(&mut self, operation: Operation, send_response: &F) -> Result<(), DocumentError> {
self.work_operations.push(operation.clone());
match operation {
Operation::AddCircle { path, insert_index, cx, cy, r, style } => {
self.add_layer(&path, Layer::new(LayerDataTypes::Circle(layers::Circle::new(kurbo::Point::new(cx, cy), r, style))), insert_index)?;
- update_frontend(self.render(&mut vec![]));
+ send_response(vec![self.render_root()]);
}
Operation::AddRect {
path,
@@ -161,7 +182,7 @@ impl Document {
insert_index,
)?;
- update_frontend(self.render(&mut vec![]));
+ send_response(vec![self.render_root()]);
}
Operation::AddLine {
path,
@@ -178,13 +199,13 @@ impl Document {
insert_index,
)?;
- update_frontend(self.render(&mut vec![]));
+ send_response(vec![self.render_root()]);
}
Operation::AddPen { path, insert_index, points, style } => {
let points: Vec = points.into_iter().map(|it| it.into()).collect();
let polyline = PolyLine::new(points, style);
self.add_layer(&path, Layer::new(LayerDataTypes::PolyLine(polyline)), insert_index)?;
- update_frontend(self.render(&mut vec![]));
+ send_response(vec![self.render_root()]);
}
Operation::AddShape {
path,
@@ -199,12 +220,12 @@ impl Document {
let s = Shape::new(kurbo::Point::new(x0, y0), kurbo::Vec2 { x: x0 - x1, y: y0 - y1 }, sides, style);
self.add_layer(&path, Layer::new(LayerDataTypes::Shape(s)), insert_index)?;
- update_frontend(self.render(&mut vec![]));
+ send_response(vec![self.render_root()]);
}
Operation::DeleteLayer { path } => {
self.delete(&path)?;
- update_frontend(self.render(&mut vec![]));
+ send_response(vec![self.render_root()]);
}
Operation::AddFolder { path } => self.set_layer(&path, Layer::new(LayerDataTypes::Folder(Folder::default())))?,
Operation::MountWorkingFolder { path } => {
@@ -225,16 +246,19 @@ impl Document {
}
Operation::CommitTransaction => {
let mut ops = Vec::new();
+ let mut path: Vec = vec![];
+ std::mem::swap(&mut path, &mut self.work_mount_path);
std::mem::swap(&mut ops, &mut self.work_operations);
let len = ops.len() - 1;
self.work_mounted = false;
self.work_mount_path = vec![];
self.work = Folder::default();
for operation in ops.into_iter().take(len) {
- self.handle_operation(operation, update_frontend)?
+ self.handle_operation(operation, send_response)?
}
- update_frontend(self.render(&mut vec![]));
+ let children = self.layer_panel(path.as_slice())?;
+ send_response(vec![self.render_root(), DocumentResponse::ExpandFolder { path, children }]);
}
}
Ok(())
diff --git a/core/document/src/layers/folder.rs b/core/document/src/layers/folder.rs
index 34557d893..8d625b3e2 100644
--- a/core/document/src/layers/folder.rs
+++ b/core/document/src/layers/folder.rs
@@ -47,6 +47,10 @@ impl Folder {
self.layer_ids.as_slice()
}
+ pub fn layers(&self) -> &[Layer] {
+ self.layers.as_slice()
+ }
+
pub fn layer(&self, id: LayerId) -> Option<&Layer> {
let pos = self.layer_ids.iter().position(|x| *x == id)?;
Some(&self.layers[pos])
diff --git a/core/document/src/lib.rs b/core/document/src/lib.rs
index c42707c89..171983d05 100644
--- a/core/document/src/lib.rs
+++ b/core/document/src/lib.rs
@@ -2,11 +2,13 @@ pub mod color;
pub mod document;
pub mod layers;
pub mod operation;
+pub mod response;
mod shape_points;
pub use operation::Operation;
+pub use response::DocumentResponse;
-type LayerId = u64;
+pub type LayerId = u64;
#[derive(Debug, Clone, Copy, PartialEq)]
pub enum DocumentError {
diff --git a/core/document/src/response.rs b/core/document/src/response.rs
new file mode 100644
index 000000000..e7c3f1ad0
--- /dev/null
+++ b/core/document/src/response.rs
@@ -0,0 +1,47 @@
+use crate::LayerId;
+use std::fmt;
+
+#[derive(Debug, Clone)]
+pub struct LayerPanelEntry {
+ pub name: String,
+ pub visible: bool,
+ pub layer_type: LayerType,
+}
+
+#[derive(Debug, Clone)]
+pub enum LayerType {
+ Folder,
+ Shape,
+}
+
+impl fmt::Display for LayerType {
+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
+ let name = match self {
+ LayerType::Folder => "folder",
+ LayerType::Shape => "shape",
+ };
+
+ formatter.write_str(name)
+ }
+}
+
+#[derive(Debug, Clone)]
+#[repr(C)]
+// TODO - Make Copy when possible
+pub enum DocumentResponse {
+ UpdateCanvas { document: String },
+ CollapseFolder { path: Vec },
+ ExpandFolder { path: Vec, children: Vec },
+}
+
+impl fmt::Display for DocumentResponse {
+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
+ let name = match self {
+ DocumentResponse::UpdateCanvas { .. } => "UpdateCanvas",
+ DocumentResponse::CollapseFolder { .. } => "CollapseFolder",
+ DocumentResponse::ExpandFolder { .. } => "ExpandFolder",
+ };
+
+ formatter.write_str(name)
+ }
+}
diff --git a/core/editor/src/dispatcher/events.rs b/core/editor/src/dispatcher/events.rs
index d47caf8f3..a123f7ec6 100644
--- a/core/editor/src/dispatcher/events.rs
+++ b/core/editor/src/dispatcher/events.rs
@@ -1,6 +1,10 @@
use crate::tools::ToolType;
use crate::Color;
use bitflags::bitflags;
+
+#[doc(inline)]
+pub use document_core::DocumentResponse;
+
use std::{
fmt,
ops::{Deref, DerefMut},
@@ -25,12 +29,42 @@ pub enum Event {
KeyDown(Key),
}
+#[derive(Debug, Clone)]
+#[repr(C)]
+pub enum ToolResponse {
+ SetActiveTool { tool_name: String },
+}
+
+impl fmt::Display for ToolResponse {
+ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
+ use ToolResponse::*;
+
+ let name = match_variant_name!(match (self) {
+ SetActiveTool,
+ });
+
+ formatter.write_str(name)
+ }
+}
+
#[derive(Debug, Clone)]
#[repr(C)]
// TODO - Make Copy when possible
pub enum Response {
- UpdateCanvas { document: String },
- SetActiveTool { tool_name: String },
+ Tool(ToolResponse),
+ Document(DocumentResponse),
+}
+
+impl From for Response {
+ fn from(response: ToolResponse) -> Self {
+ Response::Tool(response)
+ }
+}
+
+impl From for Response {
+ fn from(response: DocumentResponse) -> Self {
+ Response::Document(response)
+ }
}
impl fmt::Display for Response {
@@ -38,11 +72,15 @@ impl fmt::Display for Response {
use Response::*;
let name = match_variant_name!(match (self) {
- UpdateCanvas,
- SetActiveTool
+ Tool,
+ Document
});
+ let appendix = match self {
+ Tool(t) => t.to_string(),
+ Document(d) => d.to_string(),
+ };
- formatter.write_str(name)
+ formatter.write_str(format!("{}::{}", name, appendix).as_str())
}
}
diff --git a/core/editor/src/dispatcher/mod.rs b/core/editor/src/dispatcher/mod.rs
index b5b403121..22cb1c152 100644
--- a/core/editor/src/dispatcher/mod.rs
+++ b/core/editor/src/dispatcher/mod.rs
@@ -1,7 +1,7 @@
pub mod events;
use crate::{tools::ToolType, Color, Document, EditorError, EditorState};
use document_core::Operation;
-use events::{Event, Key, Response};
+use events::{Event, Key, Response, ToolResponse};
pub type Callback = Box;
pub struct Dispatcher {
@@ -15,7 +15,7 @@ impl Dispatcher {
match event {
Event::SelectTool(tool_name) => {
editor_state.tool_state.tool_data.active_tool_type = *tool_name;
- self.dispatch_response(Response::SetActiveTool { tool_name: tool_name.to_string() });
+ self.dispatch_response(ToolResponse::SetActiveTool { tool_name: tool_name.to_string() });
}
Event::SelectPrimaryColor(color) => {
editor_state.tool_state.document_tool_data.primary_color = *color;
@@ -71,31 +71,31 @@ impl Dispatcher {
}
Key::KeyV => {
editor_state.tool_state.tool_data.active_tool_type = ToolType::Select;
- self.dispatch_response(Response::SetActiveTool {
+ self.dispatch_response(ToolResponse::SetActiveTool {
tool_name: ToolType::Select.to_string(),
});
}
Key::KeyL => {
editor_state.tool_state.tool_data.active_tool_type = ToolType::Line;
- self.dispatch_response(Response::SetActiveTool {
+ self.dispatch_response(ToolResponse::SetActiveTool {
tool_name: ToolType::Line.to_string(),
});
}
Key::KeyM => {
editor_state.tool_state.tool_data.active_tool_type = ToolType::Rectangle;
- self.dispatch_response(Response::SetActiveTool {
+ self.dispatch_response(ToolResponse::SetActiveTool {
tool_name: ToolType::Rectangle.to_string(),
});
}
Key::KeyY => {
editor_state.tool_state.tool_data.active_tool_type = ToolType::Shape;
- self.dispatch_response(Response::SetActiveTool {
+ self.dispatch_response(ToolResponse::SetActiveTool {
tool_name: ToolType::Shape.to_string(),
});
}
Key::KeyE => {
editor_state.tool_state.tool_data.active_tool_type = ToolType::Ellipse;
- self.dispatch_response(Response::SetActiveTool {
+ self.dispatch_response(ToolResponse::SetActiveTool {
tool_name: ToolType::Ellipse.to_string(),
});
}
@@ -128,19 +128,19 @@ impl Dispatcher {
}
fn dispatch_operation(&self, document: &mut Document, operation: Operation) -> Result<(), EditorError> {
- document.handle_operation(operation, &|svg: String| self.dispatch_response(Response::UpdateCanvas { document: svg }))?;
+ document.handle_operation(operation, &|responses| self.dispatch_responses(responses))?;
Ok(())
}
- pub fn dispatch_responses>(&self, responses: I) {
+ pub fn dispatch_responses, I: IntoIterator- >(&self, responses: I) {
for response in responses {
self.dispatch_response(response);
}
}
- pub fn dispatch_response(&self, response: Response) {
+ pub fn dispatch_response>(&self, response: T) {
let func = &self.callback;
- func(response)
+ func(response.into())
}
pub fn new(callback: Callback) -> Dispatcher {
diff --git a/core/editor/src/lib.rs b/core/editor/src/lib.rs
index a91a85827..477aec81f 100644
--- a/core/editor/src/lib.rs
+++ b/core/editor/src/lib.rs
@@ -16,6 +16,9 @@ pub use error::EditorError;
#[doc(inline)]
pub use document_core::color::Color;
+#[doc(inline)]
+pub use document_core::LayerId;
+
#[doc(inline)]
pub use dispatcher::events;
diff --git a/core/editor/src/tools/crop.rs b/core/editor/src/tools/crop.rs
index 78d727958..2661e9299 100644
--- a/core/editor/src/tools/crop.rs
+++ b/core/editor/src/tools/crop.rs
@@ -1,4 +1,4 @@
-use crate::events::{Event, Response};
+use crate::events::{Event, ToolResponse};
use crate::tools::Tool;
use crate::Document;
use document_core::Operation;
@@ -9,7 +9,7 @@ use super::DocumentToolData;
pub struct Crop;
impl Tool for Crop {
- fn handle_input(&mut self, event: &Event, document: &Document, tool_data: &DocumentToolData) -> (Vec, Vec) {
+ fn handle_input(&mut self, event: &Event, document: &Document, tool_data: &DocumentToolData) -> (Vec, Vec) {
todo!("{}::handle_input {:?} {:?} {:?}", module_path!(), event, document, tool_data)
}
}
diff --git a/core/editor/src/tools/ellipse.rs b/core/editor/src/tools/ellipse.rs
index f62b00c82..f0cabb8e3 100644
--- a/core/editor/src/tools/ellipse.rs
+++ b/core/editor/src/tools/ellipse.rs
@@ -1,4 +1,4 @@
-use crate::events::{Event, Response};
+use crate::events::{Event, ToolResponse};
use crate::events::{Key, ViewportPosition};
use crate::tools::{Fsm, Tool};
use crate::Document;
@@ -14,7 +14,7 @@ pub struct Ellipse {
}
impl Tool for Ellipse {
- fn handle_input(&mut self, event: &Event, document: &Document, tool_data: &DocumentToolData) -> (Vec, Vec) {
+ fn handle_input(&mut self, event: &Event, document: &Document, tool_data: &DocumentToolData) -> (Vec, Vec) {
let mut responses = Vec::new();
let mut operations = Vec::new();
self.fsm_state = self.fsm_state.transition(event, document, tool_data, &mut self.data, &mut responses, &mut operations);
@@ -42,7 +42,7 @@ struct EllipseToolData {
impl Fsm for EllipseToolFsmState {
type ToolData = EllipseToolData;
- fn transition(self, event: &Event, document: &Document, tool_data: &DocumentToolData, data: &mut Self::ToolData, _responses: &mut Vec, operations: &mut Vec) -> Self {
+ fn transition(self, event: &Event, document: &Document, tool_data: &DocumentToolData, data: &mut Self::ToolData, _responses: &mut Vec, operations: &mut Vec) -> Self {
match (self, event) {
(EllipseToolFsmState::Ready, Event::LmbDown(mouse_state)) => {
data.drag_start = mouse_state.position;
diff --git a/core/editor/src/tools/eyedropper.rs b/core/editor/src/tools/eyedropper.rs
index 8776fa008..bad3125bf 100644
--- a/core/editor/src/tools/eyedropper.rs
+++ b/core/editor/src/tools/eyedropper.rs
@@ -1,4 +1,4 @@
-use crate::events::{Event, Response};
+use crate::events::{Event, ToolResponse};
use crate::tools::Tool;
use crate::Document;
use document_core::Operation;
@@ -9,7 +9,7 @@ use super::DocumentToolData;
pub struct Eyedropper;
impl Tool for Eyedropper {
- fn handle_input(&mut self, event: &Event, document: &Document, tool_data: &DocumentToolData) -> (Vec, Vec) {
+ fn handle_input(&mut self, event: &Event, document: &Document, tool_data: &DocumentToolData) -> (Vec, Vec) {
todo!("{}::handle_input {:?} {:?} {:?}", module_path!(), event, document, tool_data)
}
}
diff --git a/core/editor/src/tools/line.rs b/core/editor/src/tools/line.rs
index 6d841b136..e6842c91b 100644
--- a/core/editor/src/tools/line.rs
+++ b/core/editor/src/tools/line.rs
@@ -1,4 +1,4 @@
-use crate::events::{Event, Response};
+use crate::events::{Event, ToolResponse};
use crate::events::{Key, ViewportPosition};
use crate::tools::{Fsm, Tool};
use crate::Document;
@@ -14,7 +14,7 @@ pub struct Line {
}
impl Tool for Line {
- fn handle_input(&mut self, event: &Event, document: &Document, tool_data: &DocumentToolData) -> (Vec, Vec) {
+ fn handle_input(&mut self, event: &Event, document: &Document, tool_data: &DocumentToolData) -> (Vec, Vec) {
let mut responses = Vec::new();
let mut operations = Vec::new();
self.fsm_state = self.fsm_state.transition(event, document, tool_data, &mut self.data, &mut responses, &mut operations);
@@ -42,7 +42,7 @@ struct LineToolData {
impl Fsm for LineToolFsmState {
type ToolData = LineToolData;
- fn transition(self, event: &Event, document: &Document, tool_data: &DocumentToolData, data: &mut Self::ToolData, _responses: &mut Vec, operations: &mut Vec) -> Self {
+ fn transition(self, event: &Event, document: &Document, tool_data: &DocumentToolData, data: &mut Self::ToolData, _responses: &mut Vec, operations: &mut Vec) -> Self {
match (self, event) {
(LineToolFsmState::Ready, Event::LmbDown(mouse_state)) => {
data.drag_start = mouse_state.position;
diff --git a/core/editor/src/tools/mod.rs b/core/editor/src/tools/mod.rs
index c20c8570b..a828d6efb 100644
--- a/core/editor/src/tools/mod.rs
+++ b/core/editor/src/tools/mod.rs
@@ -9,7 +9,7 @@ mod rectangle;
mod select;
mod shape;
-use crate::events::{Event, ModKeys, MouseState, Response, Trace, TracePoint};
+use crate::events::{Event, ModKeys, MouseState, ToolResponse, Trace, TracePoint};
use crate::Color;
use crate::Document;
use crate::EditorError;
@@ -17,12 +17,12 @@ use document_core::Operation;
use std::{collections::HashMap, fmt};
pub trait Tool {
- fn handle_input(&mut self, event: &Event, document: &Document, tool_data: &DocumentToolData) -> (Vec, Vec);
+ fn handle_input(&mut self, event: &Event, document: &Document, tool_data: &DocumentToolData) -> (Vec, Vec);
}
pub trait Fsm {
type ToolData;
- fn transition(self, event: &Event, document: &Document, tool_data: &DocumentToolData, data: &mut Self::ToolData, responses: &mut Vec, operations: &mut Vec) -> Self;
+ fn transition(self, event: &Event, document: &Document, tool_data: &DocumentToolData, data: &mut Self::ToolData, responses: &mut Vec, operations: &mut Vec) -> Self;
}
#[derive(Debug)]
diff --git a/core/editor/src/tools/navigate.rs b/core/editor/src/tools/navigate.rs
index 6293721d6..b2d88a70d 100644
--- a/core/editor/src/tools/navigate.rs
+++ b/core/editor/src/tools/navigate.rs
@@ -1,4 +1,4 @@
-use crate::events::{Event, Response};
+use crate::events::{Event, ToolResponse};
use crate::tools::Tool;
use crate::Document;
use document_core::Operation;
@@ -9,7 +9,7 @@ use super::DocumentToolData;
pub struct Navigate;
impl Tool for Navigate {
- fn handle_input(&mut self, event: &Event, document: &Document, tool_data: &DocumentToolData) -> (Vec, Vec) {
+ fn handle_input(&mut self, event: &Event, document: &Document, tool_data: &DocumentToolData) -> (Vec, Vec) {
todo!("{}::handle_input {:?} {:?} {:?}", module_path!(), event, document, tool_data)
}
}
diff --git a/core/editor/src/tools/path.rs b/core/editor/src/tools/path.rs
index ef3fcaaf0..063697176 100644
--- a/core/editor/src/tools/path.rs
+++ b/core/editor/src/tools/path.rs
@@ -1,4 +1,4 @@
-use crate::events::{Event, Response};
+use crate::events::{Event, ToolResponse};
use crate::tools::Tool;
use crate::Document;
use document_core::Operation;
@@ -9,7 +9,7 @@ use super::DocumentToolData;
pub struct Path;
impl Tool for Path {
- fn handle_input(&mut self, event: &Event, document: &Document, tool_data: &DocumentToolData) -> (Vec, Vec) {
+ fn handle_input(&mut self, event: &Event, document: &Document, tool_data: &DocumentToolData) -> (Vec, Vec) {
todo!("{}::handle_input {:?} {:?} {:?}", module_path!(), event, document, tool_data)
}
}
diff --git a/core/editor/src/tools/pen.rs b/core/editor/src/tools/pen.rs
index 74e96666c..c21998ed9 100644
--- a/core/editor/src/tools/pen.rs
+++ b/core/editor/src/tools/pen.rs
@@ -1,4 +1,4 @@
-use crate::events::{Event, Response};
+use crate::events::{Event, ToolResponse};
use crate::events::{Key, ViewportPosition};
use crate::tools::{Fsm, Tool};
use crate::Document;
@@ -15,7 +15,7 @@ pub struct Pen {
}
impl Tool for Pen {
- fn handle_input(&mut self, event: &Event, document: &Document, tool_data: &DocumentToolData) -> (Vec, Vec) {
+ fn handle_input(&mut self, event: &Event, document: &Document, tool_data: &DocumentToolData) -> (Vec, Vec) {
let mut responses = Vec::new();
let mut operations = Vec::new();
self.fsm_state = self.fsm_state.transition(event, document, tool_data, &mut self.data, &mut responses, &mut operations);
@@ -43,7 +43,7 @@ struct PenToolData {
impl Fsm for PenToolFsmState {
type ToolData = PenToolData;
- fn transition(self, event: &Event, document: &Document, tool_data: &DocumentToolData, data: &mut Self::ToolData, _responses: &mut Vec, operations: &mut Vec) -> Self {
+ fn transition(self, event: &Event, document: &Document, tool_data: &DocumentToolData, data: &mut Self::ToolData, _responses: &mut Vec, operations: &mut Vec) -> Self {
let stroke = style::Stroke::new(tool_data.primary_color, 5.);
let fill = style::Fill::none();
let style = style::PathStyle::new(Some(stroke), Some(fill));
diff --git a/core/editor/src/tools/rectangle.rs b/core/editor/src/tools/rectangle.rs
index 060da7a59..f1c177606 100644
--- a/core/editor/src/tools/rectangle.rs
+++ b/core/editor/src/tools/rectangle.rs
@@ -1,4 +1,4 @@
-use crate::events::{Event, Response};
+use crate::events::{Event, ToolResponse};
use crate::events::{Key, ViewportPosition};
use crate::tools::{Fsm, Tool};
use crate::Document;
@@ -14,7 +14,7 @@ pub struct Rectangle {
}
impl Tool for Rectangle {
- fn handle_input(&mut self, event: &Event, document: &Document, tool_data: &DocumentToolData) -> (Vec, Vec) {
+ fn handle_input(&mut self, event: &Event, document: &Document, tool_data: &DocumentToolData) -> (Vec, Vec) {
let mut responses = Vec::new();
let mut operations = Vec::new();
self.fsm_state = self.fsm_state.transition(event, document, tool_data, &mut self.data, &mut responses, &mut operations);
@@ -42,7 +42,7 @@ struct RectangleToolData {
impl Fsm for RectangleToolFsmState {
type ToolData = RectangleToolData;
- fn transition(self, event: &Event, document: &Document, tool_data: &DocumentToolData, data: &mut Self::ToolData, _responses: &mut Vec, operations: &mut Vec) -> Self {
+ fn transition(self, event: &Event, document: &Document, tool_data: &DocumentToolData, data: &mut Self::ToolData, _responses: &mut Vec, operations: &mut Vec) -> Self {
match (self, event) {
(RectangleToolFsmState::Ready, Event::LmbDown(mouse_state)) => {
data.drag_start = mouse_state.position;
diff --git a/core/editor/src/tools/select.rs b/core/editor/src/tools/select.rs
index 33da717a9..d45e859b1 100644
--- a/core/editor/src/tools/select.rs
+++ b/core/editor/src/tools/select.rs
@@ -1,4 +1,4 @@
-use crate::events::{Event, Response};
+use crate::events::{Event, ToolResponse};
use crate::tools::{Fsm, Tool};
use crate::Document;
use document_core::Operation;
@@ -12,7 +12,7 @@ pub struct Select {
}
impl Tool for Select {
- fn handle_input(&mut self, event: &Event, document: &Document, tool_data: &DocumentToolData) -> (Vec, Vec) {
+ fn handle_input(&mut self, event: &Event, document: &Document, tool_data: &DocumentToolData) -> (Vec, Vec) {
let mut responses = Vec::new();
let mut operations = Vec::new();
self.fsm_state = self.fsm_state.transition(event, document, tool_data, &mut self.data, &mut responses, &mut operations);
@@ -40,7 +40,7 @@ struct SelectToolData;
impl Fsm for SelectToolFsmState {
type ToolData = SelectToolData;
- fn transition(self, event: &Event, _document: &Document, _tool_data: &DocumentToolData, _data: &mut Self::ToolData, _responses: &mut Vec, _operations: &mut Vec) -> Self {
+ fn transition(self, event: &Event, _document: &Document, _tool_data: &DocumentToolData, _data: &mut Self::ToolData, _responses: &mut Vec, _operations: &mut Vec) -> Self {
match (self, event) {
(SelectToolFsmState::Ready, Event::LmbDown(_mouse_state)) => SelectToolFsmState::LmbDown,
diff --git a/core/editor/src/tools/shape.rs b/core/editor/src/tools/shape.rs
index bdc05dd1e..a4759046f 100644
--- a/core/editor/src/tools/shape.rs
+++ b/core/editor/src/tools/shape.rs
@@ -1,4 +1,4 @@
-use crate::events::{Event, Response};
+use crate::events::{Event, ToolResponse};
use crate::events::{Key, ViewportPosition};
use crate::tools::{Fsm, Tool};
use crate::Document;
@@ -14,7 +14,7 @@ pub struct Shape {
}
impl Tool for Shape {
- fn handle_input(&mut self, event: &Event, document: &Document, tool_data: &DocumentToolData) -> (Vec, Vec) {
+ fn handle_input(&mut self, event: &Event, document: &Document, tool_data: &DocumentToolData) -> (Vec, Vec) {
let mut responses = Vec::new();
let mut operations = Vec::new();
self.fsm_state = self.fsm_state.transition(event, document, tool_data, &mut self.data, &mut responses, &mut operations);
@@ -43,7 +43,7 @@ struct ShapeToolData {
impl Fsm for ShapeToolFsmState {
type ToolData = ShapeToolData;
- fn transition(self, event: &Event, document: &Document, tool_data: &DocumentToolData, data: &mut Self::ToolData, _responses: &mut Vec, operations: &mut Vec) -> Self {
+ fn transition(self, event: &Event, document: &Document, tool_data: &DocumentToolData, data: &mut Self::ToolData, _responses: &mut Vec, operations: &mut Vec) -> Self {
match (self, event) {
(ShapeToolFsmState::Ready, Event::LmbDown(mouse_state)) => {
data.drag_start = mouse_state.position;