mirror of
https://github.com/GraphiteEditor/Graphite.git
synced 2026-09-25 20:58:12 +08:00
New overlay system that reimplements how overlays are drawn (#418)
* New overlay system that reimplements how overlays are drawn * Fix overlay message declaration * Fix small mistake * WIP (broken) changes to plumb the overlay document * Fix confusion over messaging system architecture * Removed log * Overlay system working * (broken) WIP overlay association * Finish the overlay system (except test failure) * Change back IDs in test * Fixed test, but stilled fails due to revealed real problem with layer reordering selection * Disable broken test that has a bug in issue #444 Co-authored-by: Dennis <dennis@kobert.dev> Co-authored-by: otdavies <oliver@psyfer.io>
This commit is contained in:
co-authored by
Dennis
otdavies
parent
1a70667f63
commit
eb96eafe60
@@ -200,12 +200,10 @@ impl Document {
|
||||
pub fn visit_all_shapes<F: FnMut(&mut Shape)>(layer: &mut Layer, modify_shape: &mut F) -> bool {
|
||||
match layer.data {
|
||||
LayerDataType::Shape(ref mut shape) => {
|
||||
if !layer.overlay {
|
||||
modify_shape(shape);
|
||||
modify_shape(shape);
|
||||
|
||||
// This layer should be updated on next render pass
|
||||
layer.cache_dirty = true;
|
||||
}
|
||||
// This layer should be updated on next render pass
|
||||
layer.cache_dirty = true;
|
||||
}
|
||||
LayerDataType::Folder(ref mut folder) => {
|
||||
for sub_layer in folder.layers_mut() {
|
||||
@@ -354,24 +352,6 @@ impl Document {
|
||||
self.set_transform_relative_to_scope(layer, None, transform)
|
||||
}
|
||||
|
||||
fn remove_overlays(&mut self, path: &mut Vec<LayerId>) {
|
||||
if self.layer(path).unwrap().overlay {
|
||||
self.delete(path).unwrap()
|
||||
}
|
||||
let ids = self.folder(path).map(|folder| folder.layer_ids.clone()).unwrap_or_default();
|
||||
for id in ids {
|
||||
path.push(id);
|
||||
self.remove_overlays(path);
|
||||
path.pop();
|
||||
}
|
||||
}
|
||||
|
||||
pub fn clone_without_overlays(&self) -> Self {
|
||||
let mut document = self.clone();
|
||||
document.remove_overlays(&mut vec![]);
|
||||
document
|
||||
}
|
||||
|
||||
/// Mutate the document by applying the `operation` to it. If the operation necessitates a
|
||||
/// reaction from the frontend, responses may be returned.
|
||||
pub fn handle_operation(&mut self, operation: &Operation) -> Result<Option<Vec<DocumentResponse>>, DocumentError> {
|
||||
@@ -390,9 +370,7 @@ impl Document {
|
||||
let mut ellipse = Shape::ellipse(*style);
|
||||
ellipse.render_index = -1;
|
||||
|
||||
let mut layer = Layer::new(LayerDataType::Shape(ellipse), *transform);
|
||||
layer.overlay = true;
|
||||
|
||||
let layer = Layer::new(LayerDataType::Shape(ellipse), *transform);
|
||||
self.set_layer(path, layer, -1)?;
|
||||
|
||||
Some([vec![DocumentChanged, CreatedLayer { path: path.clone() }]].concat())
|
||||
@@ -408,9 +386,7 @@ impl Document {
|
||||
let mut rect = Shape::rectangle(*style);
|
||||
rect.render_index = -1;
|
||||
|
||||
let mut layer = Layer::new(LayerDataType::Shape(rect), *transform);
|
||||
layer.overlay = true;
|
||||
|
||||
let layer = Layer::new(LayerDataType::Shape(rect), *transform);
|
||||
self.set_layer(path, layer, -1)?;
|
||||
|
||||
Some([vec![DocumentChanged, CreatedLayer { path: path.clone() }]].concat())
|
||||
@@ -426,9 +402,7 @@ impl Document {
|
||||
let mut line = Shape::line(*style);
|
||||
line.render_index = -1;
|
||||
|
||||
let mut layer = Layer::new(LayerDataType::Shape(line), *transform);
|
||||
layer.overlay = true;
|
||||
|
||||
let layer = Layer::new(LayerDataType::Shape(line), *transform);
|
||||
self.set_layer(path, layer, -1)?;
|
||||
|
||||
Some([vec![DocumentChanged, CreatedLayer { path: path.clone() }]].concat())
|
||||
@@ -450,9 +424,7 @@ impl Document {
|
||||
let mut shape = Shape::from_bez_path(bez_path.clone(), *style, false);
|
||||
shape.render_index = -1;
|
||||
|
||||
let mut layer = Layer::new(LayerDataType::Shape(shape), DAffine2::IDENTITY.to_cols_array());
|
||||
layer.overlay = true;
|
||||
|
||||
let layer = Layer::new(LayerDataType::Shape(shape), DAffine2::IDENTITY.to_cols_array());
|
||||
self.set_layer(path, layer, -1)?;
|
||||
|
||||
Some([vec![DocumentChanged, CreatedLayer { path: path.clone() }]].concat())
|
||||
|
||||
Reference in New Issue
Block a user