mirror of
https://github.com/GraphiteEditor/Graphite.git
synced 2026-09-28 18:28:12 +08:00
Update UI when deleting last point of shape with Path tool (#979)
* Added new DocumentResponse variant * Update Operation::DeleteSelectedManipulatorPoints to update Layer Tree by delegating deletion to Operation::DeleteLayer. Also emits Operation::DeletedSelectedManipulatorPoints to let editor clear Properties panel * Update process_message() to deal with new DocumentResponse::DeletedSelectedManipulatorPoints match case. When this DocumentResponse is emitted, it clears the Properties panel. * Added Display trait implementation for DocumentResponse::DeletedSelectedManipulatorPoints. Updated imports in document_message_handler.rs to get the correct types for messages emitted from DocumentResponse::DeletedSelectedManipulatorPoints match case in process_message(). * Removed useless import. Capitalized comments for style consistency. * Updated messages emitted to clear Properties panel by emitting LayoutMessage::SendLayout's instead, which update the backend widget state * Revert inclusion of unused imports --------- Co-authored-by: Keavon Chambers <keavon@keavon.com>
This commit is contained in:
committed by
Keavon Chambers
co-authored by
Keavon Chambers
parent
43b75dab52
commit
abe3470627
@@ -1098,10 +1098,16 @@ impl Document {
|
|||||||
|
|
||||||
// Delete the layer if there are no longer any manipulator groups
|
// Delete the layer if there are no longer any manipulator groups
|
||||||
if (shape.manipulator_groups().len() - 1) == 0 {
|
if (shape.manipulator_groups().len() - 1) == 0 {
|
||||||
self.delete(&layer_path)?;
|
// Delegate deletion to DeleteLayer to update Layer Tree in frontend
|
||||||
responses.push(DocumentChanged);
|
match self.handle_operation(Operation::DeleteLayer { path: layer_path.clone() }, font_cache) {
|
||||||
responses.push(DocumentResponse::DeletedLayer { path: layer_path });
|
Ok(Some(delete_responses)) => {
|
||||||
return Ok(Some(responses));
|
responses.extend(delete_responses);
|
||||||
|
responses.push(DocumentResponse::DeletedSelectedManipulatorPoints);
|
||||||
|
return Ok(Some(responses));
|
||||||
|
}
|
||||||
|
Err(e) => error!("DocumentError: {:?}", e),
|
||||||
|
Ok(_) => {}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// If we still have manipulator groups, update the layer and thumbnails
|
// If we still have manipulator groups, update the layer and thumbnails
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ pub enum DocumentResponse {
|
|||||||
LayerChanged {
|
LayerChanged {
|
||||||
path: Vec<LayerId>,
|
path: Vec<LayerId>,
|
||||||
},
|
},
|
||||||
|
DeletedSelectedManipulatorPoints,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl fmt::Display for DocumentResponse {
|
impl fmt::Display for DocumentResponse {
|
||||||
@@ -31,6 +32,7 @@ impl fmt::Display for DocumentResponse {
|
|||||||
DocumentResponse::CreatedLayer { .. } => write!(f, "CreatedLayer"),
|
DocumentResponse::CreatedLayer { .. } => write!(f, "CreatedLayer"),
|
||||||
DocumentResponse::LayerChanged { .. } => write!(f, "LayerChanged"),
|
DocumentResponse::LayerChanged { .. } => write!(f, "LayerChanged"),
|
||||||
DocumentResponse::DeletedLayer { .. } => write!(f, "DeleteLayer"),
|
DocumentResponse::DeletedLayer { .. } => write!(f, "DeleteLayer"),
|
||||||
|
DocumentResponse::DeletedSelectedManipulatorPoints { .. } => write!(f, "DeletedSelectedManipulatorPoints"),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -143,6 +143,23 @@ impl MessageHandler<DocumentMessage, (u64, &InputPreprocessorMessageHandler, &Pe
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
DocumentResponse::DocumentChanged => responses.push_back(RenderDocument.into()),
|
DocumentResponse::DocumentChanged => responses.push_back(RenderDocument.into()),
|
||||||
|
DocumentResponse::DeletedSelectedManipulatorPoints => {
|
||||||
|
// Clear Properties panel after deleting all points by updating backend widget state.
|
||||||
|
responses.push_back(
|
||||||
|
LayoutMessage::SendLayout {
|
||||||
|
layout: Layout::WidgetLayout(WidgetLayout::new(vec![])),
|
||||||
|
layout_target: LayoutTarget::PropertiesOptions,
|
||||||
|
}
|
||||||
|
.into(),
|
||||||
|
);
|
||||||
|
responses.push_back(
|
||||||
|
LayoutMessage::SendLayout {
|
||||||
|
layout: Layout::WidgetLayout(WidgetLayout::new(vec![])),
|
||||||
|
layout_target: LayoutTarget::PropertiesSections,
|
||||||
|
}
|
||||||
|
.into(),
|
||||||
|
);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
responses.push_back(BroadcastEvent::DocumentIsDirty.into());
|
responses.push_back(BroadcastEvent::DocumentIsDirty.into());
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user