mirror of
https://github.com/GraphiteEditor/Graphite.git
synced 2026-09-30 20:18:12 +08:00
Reverse layer panel entries (#489)
* Reverse layer panel entries * Ctrl + Bracket moves layers in correct direction * Fix dragging layers in tree * Fix reverse in wrong place * Remove log * Fix sorting of message enum variants * Fix hotkeys Co-authored-by: Keavon Chambers <keavon@keavon.com>
This commit is contained in:
committed by
Keavon Chambers
co-authored by
Keavon Chambers
parent
3038d72226
commit
443f3d3b00
@@ -68,6 +68,7 @@ pub enum DocumentMessage {
|
|||||||
MoveSelectedLayersTo {
|
MoveSelectedLayersTo {
|
||||||
folder_path: Vec<LayerId>,
|
folder_path: Vec<LayerId>,
|
||||||
insert_index: isize,
|
insert_index: isize,
|
||||||
|
reverse_index: bool,
|
||||||
},
|
},
|
||||||
NudgeSelectedLayers {
|
NudgeSelectedLayers {
|
||||||
delta_x: f64,
|
delta_x: f64,
|
||||||
|
|||||||
@@ -202,7 +202,7 @@ impl DocumentMessageHandler {
|
|||||||
|
|
||||||
fn serialize_structure(&self, folder: &Folder, structure: &mut Vec<u64>, data: &mut Vec<LayerId>, path: &mut Vec<LayerId>) {
|
fn serialize_structure(&self, folder: &Folder, structure: &mut Vec<u64>, data: &mut Vec<LayerId>, path: &mut Vec<LayerId>) {
|
||||||
let mut space = 0;
|
let mut space = 0;
|
||||||
for (id, layer) in folder.layer_ids.iter().zip(folder.layers()) {
|
for (id, layer) in folder.layer_ids.iter().zip(folder.layers()).rev() {
|
||||||
data.push(*id);
|
data.push(*id);
|
||||||
space += 1;
|
space += 1;
|
||||||
match layer.data {
|
match layer.data {
|
||||||
@@ -258,6 +258,7 @@ impl DocumentMessageHandler {
|
|||||||
self.serialize_structure(self.graphene_document.root.as_folder().unwrap(), &mut structure, &mut data, &mut vec![]);
|
self.serialize_structure(self.graphene_document.root.as_folder().unwrap(), &mut structure, &mut data, &mut vec![]);
|
||||||
structure[0] = structure.len() as u64 - 1;
|
structure[0] = structure.len() as u64 - 1;
|
||||||
structure.extend(data);
|
structure.extend(data);
|
||||||
|
|
||||||
structure
|
structure
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -422,8 +423,9 @@ impl DocumentMessageHandler {
|
|||||||
/// When working with an insert index, deleting the layers may cause the insert index to point to a different location (if the layer being deleted was located before the insert index).
|
/// When working with an insert index, deleting the layers may cause the insert index to point to a different location (if the layer being deleted was located before the insert index).
|
||||||
///
|
///
|
||||||
/// This function updates the insert index so that it points to the same place after the specified `layers` are deleted.
|
/// This function updates the insert index so that it points to the same place after the specified `layers` are deleted.
|
||||||
fn update_insert_index<'a>(&self, layers: &[&'a [LayerId]], path: &[LayerId], insert_index: isize) -> Result<isize, DocumentError> {
|
fn update_insert_index<'a>(&self, layers: &[&'a [LayerId]], path: &[LayerId], insert_index: isize, reverse_index: bool) -> Result<isize, DocumentError> {
|
||||||
let folder = self.graphene_document.folder(path)?;
|
let folder = self.graphene_document.folder(path)?;
|
||||||
|
let insert_index = if reverse_index { folder.layer_ids.len() as isize - insert_index } else { insert_index };
|
||||||
let layer_ids_above = if insert_index < 0 { &folder.layer_ids } else { &folder.layer_ids[..(insert_index as usize)] };
|
let layer_ids_above = if insert_index < 0 { &folder.layer_ids } else { &folder.layer_ids[..(insert_index as usize)] };
|
||||||
|
|
||||||
Ok(insert_index - layer_ids_above.iter().filter(|layer_id| layers.iter().any(|x| *x == [path, &[**layer_id]].concat())).count() as isize)
|
Ok(insert_index - layer_ids_above.iter().filter(|layer_id| layers.iter().any(|x| *x == [path, &[**layer_id]].concat())).count() as isize)
|
||||||
@@ -686,7 +688,11 @@ impl MessageHandler<DocumentMessage, &InputPreprocessorMessageHandler> for Docum
|
|||||||
responses.push_back(FrontendMessage::UpdateDocumentLayer { data: layer_entry }.into());
|
responses.push_back(FrontendMessage::UpdateDocumentLayer { data: layer_entry }.into());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
MoveSelectedLayersTo { folder_path, insert_index } => {
|
MoveSelectedLayersTo {
|
||||||
|
folder_path,
|
||||||
|
insert_index,
|
||||||
|
reverse_index,
|
||||||
|
} => {
|
||||||
let selected_layers = self.selected_layers().collect::<Vec<_>>();
|
let selected_layers = self.selected_layers().collect::<Vec<_>>();
|
||||||
|
|
||||||
// Prevent trying to insert into self
|
// Prevent trying to insert into self
|
||||||
@@ -694,7 +700,7 @@ impl MessageHandler<DocumentMessage, &InputPreprocessorMessageHandler> for Docum
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
let insert_index = self.update_insert_index(&selected_layers, &folder_path, insert_index).unwrap();
|
let insert_index = self.update_insert_index(&selected_layers, &folder_path, insert_index, reverse_index).unwrap();
|
||||||
|
|
||||||
responses.push_back(PortfolioMessage::Copy { clipboard: Clipboard::System }.into());
|
responses.push_back(PortfolioMessage::Copy { clipboard: Clipboard::System }.into());
|
||||||
responses.push_back(DocumentMessage::DeleteSelectedLayers.into());
|
responses.push_back(DocumentMessage::DeleteSelectedLayers.into());
|
||||||
@@ -817,6 +823,7 @@ impl MessageHandler<DocumentMessage, &InputPreprocessorMessageHandler> for Docum
|
|||||||
DocumentMessage::MoveSelectedLayersTo {
|
DocumentMessage::MoveSelectedLayersTo {
|
||||||
folder_path: folder_path.to_vec(),
|
folder_path: folder_path.to_vec(),
|
||||||
insert_index,
|
insert_index,
|
||||||
|
reverse_index: false,
|
||||||
}
|
}
|
||||||
.into(),
|
.into(),
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -389,7 +389,11 @@ impl JsEditorHandle {
|
|||||||
|
|
||||||
/// Move a layer to be next to the specified neighbor
|
/// Move a layer to be next to the specified neighbor
|
||||||
pub fn move_layer_in_tree(&self, folder_path: Vec<LayerId>, insert_index: isize) {
|
pub fn move_layer_in_tree(&self, folder_path: Vec<LayerId>, insert_index: isize) {
|
||||||
let message = DocumentMessage::MoveSelectedLayersTo { folder_path, insert_index };
|
let message = DocumentMessage::MoveSelectedLayersTo {
|
||||||
|
folder_path,
|
||||||
|
insert_index,
|
||||||
|
reverse_index: true,
|
||||||
|
};
|
||||||
self.dispatch(message);
|
self.dispatch(message);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user