Skip to content

Commit ddb0c8c

Browse files
committed
Reorganize the menu bar and add additional commands to it
1 parent fd81d04 commit ddb0c8c

File tree

10 files changed

+337
-99
lines changed

10 files changed

+337
-99
lines changed

editor/src/messages/dialog/preferences_dialog/preferences_dialog_message_handler.rs

+21-7
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ impl PreferencesDialogMessageHandler {
4141

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

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

63-
let selection_label = vec![Separator::new(SeparatorType::Unrelated).widget_holder(), TextLabel::new("Selection").widget_holder()];
64+
let selection_label = vec![
65+
Separator::new(SeparatorType::Unrelated).widget_holder(),
66+
Separator::new(SeparatorType::Unrelated).widget_holder(),
67+
TextLabel::new("Selection").widget_holder(),
68+
];
6469

6570
let selection_mode = RadioInput::new(vec![
6671
RadioEntryData::new(SelectionMode::Touched.to_string())
@@ -93,6 +98,11 @@ impl PreferencesDialogMessageHandler {
9398
])
9499
.selected_index(Some(preferences.selection_mode as u32))
95100
.widget_holder();
101+
let selection_mode = vec![
102+
Separator::new(SeparatorType::Unrelated).widget_holder(),
103+
Separator::new(SeparatorType::Unrelated).widget_holder(),
104+
selection_mode,
105+
];
96106

97107
// ============
98108
// EXPERIMENTAL
@@ -102,6 +112,7 @@ impl PreferencesDialogMessageHandler {
102112

103113
let node_graph_section_tooltip = "Appearance of the wires running between node connections in the graph";
104114
let node_graph_wires_label = vec![
115+
Separator::new(SeparatorType::Unrelated).widget_holder(),
105116
Separator::new(SeparatorType::Unrelated).widget_holder(),
106117
TextLabel::new("Node Graph Wires").tooltip(node_graph_section_tooltip).widget_holder(),
107118
];
@@ -117,9 +128,15 @@ impl PreferencesDialogMessageHandler {
117128
])
118129
.selected_index(Some(preferences.graph_wire_style as u32))
119130
.widget_holder();
131+
let graph_wire_style = vec![
132+
Separator::new(SeparatorType::Unrelated).widget_holder(),
133+
Separator::new(SeparatorType::Unrelated).widget_holder(),
134+
graph_wire_style,
135+
];
120136

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

136153
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.";
137154
let vector_meshes = vec![
155+
Separator::new(SeparatorType::Unrelated).widget_holder(),
138156
Separator::new(SeparatorType::Unrelated).widget_holder(),
139157
CheckboxInput::new(preferences.vector_meshes)
140158
.tooltip(vector_mesh_tooltip)
@@ -169,14 +187,10 @@ impl PreferencesDialogMessageHandler {
169187
LayoutGroup::Row { widgets: zoom_with_scroll },
170188
LayoutGroup::Row { widgets: editing_header },
171189
LayoutGroup::Row { widgets: selection_label },
172-
LayoutGroup::Row {
173-
widgets: vec![Separator::new(SeparatorType::Unrelated).widget_holder(), selection_mode],
174-
},
190+
LayoutGroup::Row { widgets: selection_mode },
175191
LayoutGroup::Row { widgets: experimental_header },
176192
LayoutGroup::Row { widgets: node_graph_wires_label },
177-
LayoutGroup::Row {
178-
widgets: vec![Separator::new(SeparatorType::Unrelated).widget_holder(), graph_wire_style],
179-
},
193+
LayoutGroup::Row { widgets: graph_wire_style },
180194
LayoutGroup::Row { widgets: use_vello },
181195
LayoutGroup::Row { widgets: vector_meshes },
182196
// LayoutGroup::Row { widgets: imaginate_server_hostname },

editor/src/messages/portfolio/document/document_message.rs

+3
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,9 @@ pub enum DocumentMessage {
6060
FlipSelectedLayers {
6161
flip_axis: FlipAxis,
6262
},
63+
RotateSelectedLayers {
64+
degrees: f64,
65+
},
6366
GraphViewOverlay {
6467
open: bool,
6568
},

editor/src/messages/portfolio/document/document_message_handler.rs

+24
Original file line numberDiff line numberDiff line change
@@ -454,6 +454,30 @@ impl MessageHandler<DocumentMessage, DocumentMessageData<'_>> for DocumentMessag
454454
}
455455
}
456456
}
457+
DocumentMessage::RotateSelectedLayers { degrees } => {
458+
// Get the bounding box of selected layers in viewport space
459+
if let Some([min, max]) = self.selected_visible_and_unlock_layers_bounding_box_viewport() {
460+
// Calculate the center of the bounding box to use as rotation pivot
461+
let center = (max + min) / 2.;
462+
// Transform that moves pivot point to origin
463+
let bbox_trans = DAffine2::from_translation(-center);
464+
465+
let mut added_transaction = false;
466+
for layer in self.network_interface.selected_nodes(&[]).unwrap().selected_unlocked_layers(&self.network_interface) {
467+
if !added_transaction {
468+
responses.add(DocumentMessage::AddTransaction);
469+
added_transaction = true;
470+
}
471+
472+
responses.add(GraphOperationMessage::TransformChange {
473+
layer,
474+
transform: DAffine2::from_angle(degrees.to_radians()),
475+
transform_in: TransformIn::Scope { scope: bbox_trans },
476+
skip_rerender: false,
477+
});
478+
}
479+
}
480+
}
457481
DocumentMessage::GraphViewOverlay { open } => {
458482
self.graph_view_overlay_open = open;
459483

0 commit comments

Comments
 (0)