Skip to content

Commit

Permalink
Reorganize the menu bar and add additional commands to it
Browse files Browse the repository at this point in the history
  • Loading branch information
Keavon committed Mar 1, 2025
1 parent fd81d04 commit ddb0c8c
Show file tree
Hide file tree
Showing 10 changed files with 337 additions and 99 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ impl PreferencesDialogMessageHandler {

let zoom_with_scroll_tooltip = "Use the scroll wheel for zooming instead of vertically panning (not recommended for trackpads)";
let zoom_with_scroll = vec![
Separator::new(SeparatorType::Unrelated).widget_holder(),
Separator::new(SeparatorType::Unrelated).widget_holder(),
CheckboxInput::new(preferences.zoom_with_scroll)
.tooltip(zoom_with_scroll_tooltip)
Expand All @@ -60,7 +61,11 @@ impl PreferencesDialogMessageHandler {

let editing_header = vec![TextLabel::new("Editing").italic(true).widget_holder()];

let selection_label = vec![Separator::new(SeparatorType::Unrelated).widget_holder(), TextLabel::new("Selection").widget_holder()];
let selection_label = vec![
Separator::new(SeparatorType::Unrelated).widget_holder(),
Separator::new(SeparatorType::Unrelated).widget_holder(),
TextLabel::new("Selection").widget_holder(),
];

let selection_mode = RadioInput::new(vec![
RadioEntryData::new(SelectionMode::Touched.to_string())
Expand Down Expand Up @@ -93,6 +98,11 @@ impl PreferencesDialogMessageHandler {
])
.selected_index(Some(preferences.selection_mode as u32))
.widget_holder();
let selection_mode = vec![
Separator::new(SeparatorType::Unrelated).widget_holder(),
Separator::new(SeparatorType::Unrelated).widget_holder(),
selection_mode,
];

// ============
// EXPERIMENTAL
Expand All @@ -102,6 +112,7 @@ impl PreferencesDialogMessageHandler {

let node_graph_section_tooltip = "Appearance of the wires running between node connections in the graph";
let node_graph_wires_label = vec![
Separator::new(SeparatorType::Unrelated).widget_holder(),
Separator::new(SeparatorType::Unrelated).widget_holder(),
TextLabel::new("Node Graph Wires").tooltip(node_graph_section_tooltip).widget_holder(),
];
Expand All @@ -117,9 +128,15 @@ impl PreferencesDialogMessageHandler {
])
.selected_index(Some(preferences.graph_wire_style as u32))
.widget_holder();
let graph_wire_style = vec![
Separator::new(SeparatorType::Unrelated).widget_holder(),
Separator::new(SeparatorType::Unrelated).widget_holder(),
graph_wire_style,
];

let vello_tooltip = "Use the experimental Vello renderer (your browser must support WebGPU)";
let use_vello = vec![
Separator::new(SeparatorType::Unrelated).widget_holder(),
Separator::new(SeparatorType::Unrelated).widget_holder(),
CheckboxInput::new(preferences.use_vello && preferences.supports_wgpu())
.tooltip(vello_tooltip)
Expand All @@ -135,6 +152,7 @@ impl PreferencesDialogMessageHandler {

let vector_mesh_tooltip = "Allow tools to produce vector meshes, where more than two segments can connect to an anchor point.\n\nCurrently this does not properly handle line joins and fills.";
let vector_meshes = vec![
Separator::new(SeparatorType::Unrelated).widget_holder(),
Separator::new(SeparatorType::Unrelated).widget_holder(),
CheckboxInput::new(preferences.vector_meshes)
.tooltip(vector_mesh_tooltip)
Expand Down Expand Up @@ -169,14 +187,10 @@ impl PreferencesDialogMessageHandler {
LayoutGroup::Row { widgets: zoom_with_scroll },
LayoutGroup::Row { widgets: editing_header },
LayoutGroup::Row { widgets: selection_label },
LayoutGroup::Row {
widgets: vec![Separator::new(SeparatorType::Unrelated).widget_holder(), selection_mode],
},
LayoutGroup::Row { widgets: selection_mode },
LayoutGroup::Row { widgets: experimental_header },
LayoutGroup::Row { widgets: node_graph_wires_label },
LayoutGroup::Row {
widgets: vec![Separator::new(SeparatorType::Unrelated).widget_holder(), graph_wire_style],
},
LayoutGroup::Row { widgets: graph_wire_style },
LayoutGroup::Row { widgets: use_vello },
LayoutGroup::Row { widgets: vector_meshes },
// LayoutGroup::Row { widgets: imaginate_server_hostname },
Expand Down
3 changes: 3 additions & 0 deletions editor/src/messages/portfolio/document/document_message.rs
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,9 @@ pub enum DocumentMessage {
FlipSelectedLayers {
flip_axis: FlipAxis,
},
RotateSelectedLayers {
degrees: f64,
},
GraphViewOverlay {
open: bool,
},
Expand Down
24 changes: 24 additions & 0 deletions editor/src/messages/portfolio/document/document_message_handler.rs
Original file line number Diff line number Diff line change
Expand Up @@ -454,6 +454,30 @@ impl MessageHandler<DocumentMessage, DocumentMessageData<'_>> for DocumentMessag
}
}
}
DocumentMessage::RotateSelectedLayers { degrees } => {
// Get the bounding box of selected layers in viewport space
if let Some([min, max]) = self.selected_visible_and_unlock_layers_bounding_box_viewport() {
// Calculate the center of the bounding box to use as rotation pivot
let center = (max + min) / 2.;
// Transform that moves pivot point to origin
let bbox_trans = DAffine2::from_translation(-center);

let mut added_transaction = false;
for layer in self.network_interface.selected_nodes(&[]).unwrap().selected_unlocked_layers(&self.network_interface) {
if !added_transaction {
responses.add(DocumentMessage::AddTransaction);
added_transaction = true;
}

responses.add(GraphOperationMessage::TransformChange {
layer,
transform: DAffine2::from_angle(degrees.to_radians()),
transform_in: TransformIn::Scope { scope: bbox_trans },
skip_rerender: false,
});
}
}
}
DocumentMessage::GraphViewOverlay { open } => {
self.graph_view_overlay_open = open;

Expand Down
Loading

0 comments on commit ddb0c8c

Please sign in to comment.