Modify all message enum data to use named struct values, not tuples (#479)

* Massively reorganize and clean up the whole Rust codebase

* Modify all message enum data to use named struct values, not tuples
This commit is contained in:
Keavon Chambers 2022-01-14 20:54:38 -08:00
parent f48d4e1884
commit e9e43eb79b
25 changed files with 612 additions and 390 deletions

View file

@ -95,8 +95,8 @@ impl JsEditorHandle {
/// Modify the currently selected tool in the document state store
pub fn select_tool(&self, tool: String) -> Result<(), JsValue> {
match translate_tool_type(&tool) {
Some(tool) => {
let message = ToolMessage::ActivateTool(tool);
Some(tool_type) => {
let message = ToolMessage::ActivateTool { tool_type };
self.dispatch(message);
Ok(())
@ -108,9 +108,9 @@ impl JsEditorHandle {
/// Update the options for a given tool
pub fn set_tool_options(&self, tool: String, options: &JsValue) -> Result<(), JsValue> {
match serde_wasm_bindgen::from_value::<ToolOptions>(options.clone()) {
Ok(options) => match translate_tool_type(&tool) {
Some(tool) => {
let message = ToolMessage::SetToolOptions(tool, options);
Ok(tool_options) => match translate_tool_type(&tool) {
Some(tool_type) => {
let message = ToolMessage::SetToolOptions { tool_type, tool_options };
self.dispatch(message);
Ok(())
@ -145,7 +145,7 @@ impl JsEditorHandle {
}
pub fn select_document(&self, document_id: u64) {
let message = PortfolioMessage::SelectDocument(document_id);
let message = PortfolioMessage::SelectDocument { document_id };
self.dispatch(message);
}
@ -169,12 +169,12 @@ impl JsEditorHandle {
self.dispatch(message);
}
pub fn open_auto_saved_document(&self, document_id: u64, document_name: String, document_is_saved: bool, document: String) {
pub fn open_auto_saved_document(&self, document_id: u64, document_name: String, document_is_saved: bool, document_serialized_content: String) {
let message = PortfolioMessage::OpenDocumentFileWithId {
document_id,
document_name,
document_is_saved,
document,
document_serialized_content,
};
self.dispatch(message);
}
@ -185,12 +185,12 @@ impl JsEditorHandle {
}
pub fn trigger_auto_save(&self, document_id: u64) {
let message = PortfolioMessage::AutoSaveDocument(document_id);
let message = PortfolioMessage::AutoSaveDocument { document_id };
self.dispatch(message);
}
pub fn close_document(&self, document_id: u64) {
let message = PortfolioMessage::CloseDocument(document_id);
let message = PortfolioMessage::CloseDocument { document_id };
self.dispatch(message);
}
@ -205,7 +205,7 @@ impl JsEditorHandle {
}
pub fn close_document_with_confirmation(&self, document_id: u64) {
let message = PortfolioMessage::CloseDocumentWithConfirmation(document_id);
let message = PortfolioMessage::CloseDocumentWithConfirmation { document_id };
self.dispatch(message);
}
@ -226,7 +226,7 @@ impl JsEditorHandle {
pub fn bounds_of_viewports(&self, bounds_of_viewports: &[f64]) {
let chunked: Vec<_> = bounds_of_viewports.chunks(4).map(ViewportBounds::from_slice).collect();
let message = InputPreprocessorMessage::BoundsOfViewports(chunked);
let message = InputPreprocessorMessage::BoundsOfViewports { bounds_of_viewports: chunked };
self.dispatch(message);
}
@ -236,7 +236,7 @@ impl JsEditorHandle {
let modifier_keys = ModifierKeys::from_bits(modifiers).expect("Invalid modifier keys");
let message = InputPreprocessorMessage::MouseMove(editor_mouse_state, modifier_keys);
let message = InputPreprocessorMessage::MouseMove { editor_mouse_state, modifier_keys };
self.dispatch(message);
}
@ -247,7 +247,7 @@ impl JsEditorHandle {
let modifier_keys = ModifierKeys::from_bits(modifiers).expect("Invalid modifier keys");
let message = InputPreprocessorMessage::MouseScroll(editor_mouse_state, modifier_keys);
let message = InputPreprocessorMessage::MouseScroll { editor_mouse_state, modifier_keys };
self.dispatch(message);
}
@ -257,7 +257,7 @@ impl JsEditorHandle {
let modifier_keys = ModifierKeys::from_bits(modifiers).expect("Invalid modifier keys");
let message = InputPreprocessorMessage::MouseDown(editor_mouse_state, modifier_keys);
let message = InputPreprocessorMessage::MouseDown { editor_mouse_state, modifier_keys };
self.dispatch(message);
}
@ -267,29 +267,29 @@ impl JsEditorHandle {
let modifier_keys = ModifierKeys::from_bits(modifiers).expect("Invalid modifier keys");
let message = InputPreprocessorMessage::MouseUp(editor_mouse_state, modifier_keys);
let message = InputPreprocessorMessage::MouseUp { editor_mouse_state, modifier_keys };
self.dispatch(message);
}
/// A keyboard button depressed within screenspace the bounds of the viewport
pub fn on_key_down(&self, name: String, modifiers: u8) {
let key = translate_key(&name);
let modifiers = ModifierKeys::from_bits(modifiers).expect("Invalid modifier keys");
let modifier_keys = ModifierKeys::from_bits(modifiers).expect("Invalid modifier keys");
log::trace!("Key down {:?}, name: {}, modifiers: {:?}", key, name, modifiers);
let message = InputPreprocessorMessage::KeyDown(key, modifiers);
let message = InputPreprocessorMessage::KeyDown { key, modifier_keys };
self.dispatch(message);
}
/// A keyboard button released
pub fn on_key_up(&self, name: String, modifiers: u8) {
let key = translate_key(&name);
let modifiers = ModifierKeys::from_bits(modifiers).expect("Invalid modifier keys");
let modifier_keys = ModifierKeys::from_bits(modifiers).expect("Invalid modifier keys");
log::trace!("Key up {:?}, name: {}, modifiers: {:?}", key, name, modifiers);
log::trace!("Key up {:?}, name: {}, modifiers: {:?}", key, name, modifier_keys);
let message = InputPreprocessorMessage::KeyUp(key, modifiers);
let message = InputPreprocessorMessage::KeyUp { key, modifier_keys };
self.dispatch(message);
}
@ -300,7 +300,7 @@ impl JsEditorHandle {
None => return Err(Error::new("Invalid color").into()),
};
let message = ToolMessage::SelectPrimaryColor(primary_color);
let message = ToolMessage::SelectPrimaryColor { color: primary_color };
self.dispatch(message);
Ok(())
@ -313,7 +313,7 @@ impl JsEditorHandle {
None => return Err(Error::new("Invalid color").into()),
};
let message = ToolMessage::SelectSecondaryColor(secondary_color);
let message = ToolMessage::SelectSecondaryColor { color: secondary_color };
self.dispatch(message);
Ok(())
@ -345,24 +345,24 @@ impl JsEditorHandle {
/// Cut selected layers
pub fn cut(&self) {
let message = PortfolioMessage::Cut(Clipboard::User);
let message = PortfolioMessage::Cut { clipboard: Clipboard::User };
self.dispatch(message);
}
/// Copy selected layers
pub fn copy(&self) {
let message = PortfolioMessage::Copy(Clipboard::User);
let message = PortfolioMessage::Copy { clipboard: Clipboard::User };
self.dispatch(message);
}
/// Paste selected layers
pub fn paste(&self) {
let message = PortfolioMessage::Paste(Clipboard::User);
let message = PortfolioMessage::Paste { clipboard: Clipboard::User };
self.dispatch(message);
}
pub fn select_layer(&self, paths: Vec<LayerId>, ctrl: bool, shift: bool) {
let message = DocumentMessage::SelectLayer(paths, ctrl, shift);
pub fn select_layer(&self, layer_path: Vec<LayerId>, ctrl: bool, shift: bool) {
let message = DocumentMessage::SelectLayer { layer_path, ctrl, shift };
self.dispatch(message);
}
@ -379,35 +379,33 @@ impl JsEditorHandle {
}
/// Reorder selected layer
pub fn reorder_selected_layers(&self, delta: i32) {
let message = DocumentMessage::ReorderSelectedLayers(delta);
pub fn reorder_selected_layers(&self, relative_index_offset: isize) {
let message = DocumentMessage::ReorderSelectedLayers { relative_index_offset };
self.dispatch(message);
}
/// Move a layer to be next to the specified neighbor
pub fn move_layer_in_tree(&self, path: Vec<LayerId>, insert_index: isize) {
let message = DocumentMessage::MoveSelectedLayersTo { path, insert_index };
pub fn move_layer_in_tree(&self, folder_path: Vec<LayerId>, insert_index: isize) {
let message = DocumentMessage::MoveSelectedLayersTo { folder_path, insert_index };
self.dispatch(message);
}
/// Set the blend mode for the selected layers
pub fn set_blend_mode_for_selected_layers(&self, blend_mode_svg_style_name: String) -> Result<(), JsValue> {
let blend_mode = translate_blend_mode(blend_mode_svg_style_name.as_str());
if let Some(blend_mode) = translate_blend_mode(blend_mode_svg_style_name.as_str()) {
let message = DocumentMessage::SetBlendModeForSelectedLayers { blend_mode };
self.dispatch(message);
match blend_mode {
Some(mode) => {
let message = DocumentMessage::SetBlendModeForSelectedLayers(mode);
self.dispatch(message);
Ok(())
}
None => Err(Error::new(&EditorError::Misc("UnknownBlendMode".to_string()).to_string()).into()),
Ok(())
} else {
Err(Error::new(&EditorError::Misc("UnknownBlendMode".to_string()).to_string()).into())
}
}
/// Set the opacity for the selected layers
pub fn set_opacity_for_selected_layers(&self, opacity_percent: f64) {
let message = DocumentMessage::SetOpacityForSelectedLayers(opacity_percent / 100.);
let opacity = opacity_percent / 100.;
let message = DocumentMessage::SetOpacityForSelectedLayers { opacity };
self.dispatch(message);
}
@ -418,23 +416,24 @@ impl JsEditorHandle {
}
/// Set snapping disabled / enabled
pub fn set_snapping(&self, new_status: bool) {
let message = DocumentMessage::SetSnapping(new_status);
pub fn set_snapping(&self, snap: bool) {
let message = DocumentMessage::SetSnapping { snap };
self.dispatch(message);
}
/// Set the view mode to change the way layers are drawn in the viewport
pub fn set_view_mode(&self, new_mode: String) -> Result<(), JsValue> {
match translate_view_mode(new_mode.as_str()) {
Some(view_mode) => self.dispatch(DocumentMessage::SetViewMode(view_mode)),
None => return Err(Error::new("Invalid view mode").into()),
};
Ok(())
pub fn set_view_mode(&self, view_mode: String) -> Result<(), JsValue> {
if let Some(view_mode) = translate_view_mode(view_mode.as_str()) {
self.dispatch(DocumentMessage::SetViewMode { view_mode });
Ok(())
} else {
Err(Error::new("Invalid view mode").into())
}
}
/// Sets the zoom to the value
pub fn set_canvas_zoom(&self, new_zoom: f64) {
let message = MovementMessage::SetCanvasZoom(new_zoom);
pub fn set_canvas_zoom(&self, zoom_factor: f64) {
let message = MovementMessage::SetCanvasZoom { zoom_factor };
self.dispatch(message);
}
@ -451,58 +450,57 @@ impl JsEditorHandle {
}
/// Sets the rotation to the new value (in radians)
pub fn set_rotation(&self, new_radians: f64) {
let message = MovementMessage::SetCanvasRotation(new_radians);
pub fn set_rotation(&self, angle_radians: f64) {
let message = MovementMessage::SetCanvasRotation { angle_radians };
self.dispatch(message);
}
/// Translates document (in viewport coords)
pub fn translate_canvas(&self, delta_x: f64, delta_y: f64) {
let message = MovementMessage::TranslateCanvas((delta_x, delta_y).into());
let message = MovementMessage::TranslateCanvas { delta: (delta_x, delta_y).into() };
self.dispatch(message);
}
/// Translates document (in viewport coords)
pub fn translate_canvas_by_fraction(&self, delta_x: f64, delta_y: f64) {
let message = MovementMessage::TranslateCanvasByViewportFraction((delta_x, delta_y).into());
let message = MovementMessage::TranslateCanvasByViewportFraction { delta: (delta_x, delta_y).into() };
self.dispatch(message);
}
/// Update the list of selected layers. The layer paths have to be stored in one array and are separated by LayerId::MAX
pub fn select_layers(&self, paths: Vec<LayerId>) {
let paths = paths.split(|id| *id == LayerId::MAX).map(|path| path.to_vec()).collect();
let message = DocumentMessage::SetSelectedLayers(paths);
let replacement_selected_layers = paths.split(|id| *id == LayerId::MAX).map(|path| path.to_vec()).collect();
let message = DocumentMessage::SetSelectedLayers { replacement_selected_layers };
self.dispatch(message);
}
/// Toggle visibility of a layer from the layer list
pub fn toggle_layer_visibility(&self, path: Vec<LayerId>) {
let message = DocumentMessage::ToggleLayerVisibility(path);
pub fn toggle_layer_visibility(&self, layer_path: Vec<LayerId>) {
let message = DocumentMessage::ToggleLayerVisibility { layer_path };
self.dispatch(message);
}
/// Toggle expansions state of a layer from the layer list
pub fn toggle_layer_expansion(&self, path: Vec<LayerId>) {
let message = DocumentMessage::ToggleLayerExpansion(path);
pub fn toggle_layer_expansion(&self, layer_path: Vec<LayerId>) {
let message = DocumentMessage::ToggleLayerExpansion { layer_path };
self.dispatch(message);
}
/// Renames a layer from the layer list
pub fn rename_layer(&self, path: Vec<LayerId>, new_name: String) {
let message = DocumentMessage::RenameLayer(path, new_name);
pub fn rename_layer(&self, layer_path: Vec<LayerId>, new_name: String) {
let message = DocumentMessage::RenameLayer { layer_path, new_name };
self.dispatch(message);
}
/// Deletes a layer from the layer list
pub fn delete_layer(&self, path: Vec<LayerId>) {
let message = DocumentMessage::DeleteLayer(path);
pub fn delete_layer(&self, layer_path: Vec<LayerId>) {
let message = DocumentMessage::DeleteLayer { layer_path };
self.dispatch(message);
}
/// Requests the backend to add a layer to the layer list
pub fn add_folder(&self, path: Vec<LayerId>) {
let message = DocumentMessage::CreateEmptyFolder(path);
/// Requests the backend to add an empty folder inside the provided containing folder
pub fn add_folder(&self, container_path: Vec<LayerId>) {
let message = DocumentMessage::CreateEmptyFolder { container_path };
self.dispatch(message);
}
@ -552,13 +550,13 @@ pub fn file_save_suffix() -> String {
pub fn graphite_version() -> String {
GRAPHITE_DOCUMENT_VERSION.to_string()
}
/// Get the constant i32::MAX
/// Get the constant `i32::MAX`
#[wasm_bindgen]
pub fn i32_max() -> i32 {
i32::MAX
}
/// Get the constant i32::MIN
/// Get the constant `i32::MIN`
#[wasm_bindgen]
pub fn i32_min() -> i32 {
i32::MIN