style: apply cargo fmt across workspace (as on main)

Formats the branch the way main's 9cf9ff2 did, so merging main only
conflicts where the code itself differs.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013RyGiMXcsf9HTKfqDxaQGt
This commit is contained in:
Claude committed 2026-10-11 18:29:37 +00:00
1 parent cc17d10ca9
commit bf1c4ddc74
532 files changed
+56995 -33416

No files matched your search

+75 -22
View File
@@ -39,7 +39,9 @@ fn dock_app() -> OpenCADStudio {
/// Where the current dock drag would land, if it has started.
fn drag_target(app: &OpenCADStudio) -> Option<crate::ui::dock::DropTarget> {
app.dock_drag.and_then(|d| d.movement()).and_then(|(_, _, target)| target)
app.dock_drag
.and_then(|d| d.movement())
.and_then(|(_, _, target)| target)
}
/// Press `id`'s title bar at `from`, drag to `to`, and return the target
@@ -205,7 +207,10 @@ fn dock_drop_over_the_viewport_floats_the_panel() {
);
assert!(matches!(target, Some(DropTarget::Float { .. })));
assert!(app.dock.right.is_empty());
let f = app.dock.float_rect(PanelId::BlockPalette).expect("floating");
let f = app
.dock
.float_rect(PanelId::BlockPalette)
.expect("floating");
assert!(f.x > 600.0 && f.x < 800.0 && f.y > 350.0 && f.y < 400.0);
// Dragging a floating panel keeps the grab point under the pointer.
let target = drag_panel(
@@ -214,7 +219,13 @@ fn dock_drop_over_the_viewport_floats_the_panel() {
iced::Point::new(f.x + 20.0, f.y + 10.0),
iced::Point::new(f.x + 120.0, f.y + 60.0),
);
assert_eq!(target, Some(DropTarget::Float { x: f.x + 100.0, y: f.y + 50.0 }));
assert_eq!(
target,
Some(DropTarget::Float {
x: f.x + 100.0,
y: f.y + 50.0
})
);
// Opening a floating panel must not re-dock it.
assert!(app.dock.is_placed(PanelId::BlockPalette));
}
@@ -233,7 +244,10 @@ fn dock_dragging_an_icon_into_another_group_lands_between_its_icons() {
let (layout, _) = app.dock_strip_layout(DockSide::Left);
// Drag the Blocks icon (group 1) to between Properties and Browser.
let _ = app.on_dock(DockMsg::IconPress(PanelId::BlockPalette));
let _ = app.on_dock(DockMsg::DragMove(iced::Point::new(20.0, layout[1].icons_top + 10.0)));
let _ = app.on_dock(DockMsg::DragMove(iced::Point::new(
20.0,
layout[1].icons_top + 10.0,
)));
let _ = app.on_dock(DockMsg::DragMove(iced::Point::new(
20.0,
layout[0].icons_top + STRIP_CELL_H + 2.0,
@@ -267,7 +281,10 @@ fn dock_grip_drag_moves_a_whole_group() {
app.dock.right.clear();
let (layout, plus_top) = app.dock_strip_layout(DockSide::Left);
let _ = app.on_dock(DockMsg::GroupGrab(DockSide::Left, 0));
let _ = app.on_dock(DockMsg::DragMove(iced::Point::new(18.0, layout[0].top + 2.0)));
let _ = app.on_dock(DockMsg::DragMove(iced::Point::new(
18.0,
layout[0].top + 2.0,
)));
let _ = app.on_dock(DockMsg::DragMove(iced::Point::new(18.0, plus_top + 10.0)));
let _ = app.on_dock(DockMsg::DragRelease);
assert_eq!(app.dock.left[0].panels, vec![PanelId::BlockPalette]);
@@ -309,7 +326,10 @@ fn dock_splitter_drag_changes_pallet_heights() {
use crate::app::config::DockSide;
use crate::ui::dock::{DockGroup, DockMsg, PanelId};
let mut app = dock_app();
app.dock.left = vec![DockGroup::stack(vec![PanelId::BlockPalette, PanelId::Properties])];
app.dock.left = vec![DockGroup::stack(vec![
PanelId::BlockPalette,
PanelId::Properties,
])];
app.dock.right.clear();
let _ = app.on_dock(DockMsg::SplitGrab(DockSide::Left, 0, 0, 1));
let _ = app.on_dock(DockMsg::DragMove(iced::Point::new(100.0, 450.0)));
@@ -361,7 +381,13 @@ fn dock_hover_reveals_groups_only_on_an_auto_hiding_edge() {
fn dock_float_resize_grows_the_panel() {
use crate::ui::dock::{DockMsg, FloatPanel, PanelId};
let mut app = dock_app();
app.dock.float(FloatPanel::new(PanelId::BlockPalette, 100.0, 100.0, 260.0, 300.0));
app.dock.float(FloatPanel::new(
PanelId::BlockPalette,
100.0,
100.0,
260.0,
300.0,
));
let _ = app.on_dock(DockMsg::FloatResizeGrab(PanelId::BlockPalette, false));
let _ = app.on_dock(DockMsg::DragMove(iced::Point::new(360.0, 400.0)));
let _ = app.on_dock(DockMsg::DragMove(iced::Point::new(400.0, 450.0)));
@@ -395,16 +421,25 @@ fn dock_edge_menu_adds_and_hides_pallets() {
// Unchecking hides it but keeps its place.
let _ = app.on_dock(DockMsg::EdgeMenuToggle(DockSide::Left, PanelId::Browser));
assert!(!app.show_browser);
assert_eq!(app.dock.location(PanelId::Browser), Some((DockSide::Left, 1)));
assert_eq!(
app.dock.location(PanelId::Browser),
Some((DockSide::Left, 1))
);
// Opening it again from the same edge reuses that place.
let _ = app.on_dock(DockMsg::EdgeMenuToggle(DockSide::Left, PanelId::Browser));
assert_eq!(app.dock.left.len(), 2);
// A pallet open on the other edge is not checked here: picking it
// moves it over instead of hiding it.
let _ = app.on_dock(DockMsg::EdgeMenuToggle(DockSide::Left, PanelId::BlockPalette));
let _ = app.on_dock(DockMsg::EdgeMenuToggle(
DockSide::Left,
PanelId::BlockPalette,
));
assert!(app.show_block_palette);
assert!(app.dock.right.is_empty());
assert_eq!(app.dock.location(PanelId::BlockPalette), Some((DockSide::Left, 2)));
assert_eq!(
app.dock.location(PanelId::BlockPalette),
Some((DockSide::Left, 2))
);
}
#[test]
@@ -435,7 +470,10 @@ fn layers_command_opens_a_floating_pallet_and_toggles_it_closed() {
let _ = app.update(Message::ToggleLayers);
assert!(app.show_layers);
assert!(app.active_modal.is_none(), "no modal backdrop");
let f = app.dock.float_rect(PanelId::Layers).expect("floats on first use");
let f = app
.dock
.float_rect(PanelId::Layers)
.expect("floats on first use");
assert!(f.x > 0.0 && f.y >= 0.0);
let _ = app.update(Message::ToggleLayers);
assert!(!app.show_layers);
@@ -467,10 +505,9 @@ fn find_in_view(app: &OpenCADStudio, label: &str) -> iced::Point {
let mut find = Selector::find(label);
ui.operate(&renderer, &mut widget::operation::black_box(&mut find));
match widget::Operation::finish(&find) {
widget::operation::Outcome::Some(Some(target)) => target
.visible_bounds()
.expect("visible")
.center(),
widget::operation::Outcome::Some(Some(target)) => {
target.visible_bounds().expect("visible").center()
}
_ => panic!("{label} not found"),
}
}
@@ -510,11 +547,16 @@ fn docked_title_bar_double_click_floats_the_pallet_in_the_real_view() {
use crate::ui::dock::PanelId;
let mut app = dock_app();
let press = iced::Event::Mouse(iced::mouse::Event::ButtonPressed(iced::mouse::Button::Left));
let release =
iced::Event::Mouse(iced::mouse::Event::ButtonReleased(iced::mouse::Button::Left));
let release = iced::Event::Mouse(iced::mouse::Event::ButtonReleased(
iced::mouse::Button::Left,
));
// The block palette's title text sits in its docked title bar.
let title = find_in_view(&app, "Blocks");
drive_view(&mut app, title, &[press.clone(), release.clone(), press, release]);
drive_view(
&mut app,
title,
&[press.clone(), release.clone(), press, release],
);
assert!(
app.dock.float_rect(PanelId::BlockPalette).is_some(),
"a double-click on a docked title bar floats the pallet"
@@ -541,7 +583,9 @@ fn hovering_a_strip_icon_reveals_an_auto_hiding_edge_in_the_real_view() {
drive_view(
&mut app,
icon,
&[iced::Event::Mouse(iced::mouse::Event::CursorMoved { position: icon })],
&[iced::Event::Mouse(iced::mouse::Event::CursorMoved {
position: icon,
})],
);
let _ = app.on_dock(DockMsg::HoverSettled(app.dock_hover_gen));
assert!(
@@ -577,7 +621,10 @@ fn dock_double_clicks_float_and_dock_panels() {
assert!(f.x > 0.0, "floats clear of the left edge");
let _ = app.on_dock(DockMsg::DockTo(PanelId::Properties, DockSide::Right));
assert!(app.dock.floating.is_empty());
assert_eq!(app.dock.location(PanelId::Properties), Some((DockSide::Right, 1)));
assert_eq!(
app.dock.location(PanelId::Properties),
Some((DockSide::Right, 1))
);
}
#[test]
@@ -607,11 +654,17 @@ fn floating_menu_docks_and_allow_docking_keeps_a_drag_floating() {
let _ = app.on_dock(DockMsg::DragMove(iced::Point::new(10.0, 60.0)));
assert!(matches!(drag_target(&app), Some(DropTarget::Float { .. })));
let _ = app.on_dock(DockMsg::DragRelease);
let f = app.dock.float_rect(PanelId::BlockPalette).expect("still floating");
let f = app
.dock
.float_rect(PanelId::BlockPalette)
.expect("still floating");
assert!(!f.docking, "moving it keeps the choice");
// The menu's Dock left still docks it.
let _ = app.on_dock(DockMsg::FloatMenu(Some(PanelId::BlockPalette)));
let _ = app.on_dock(DockMsg::DockTo(PanelId::BlockPalette, DockSide::Left));
assert_eq!(app.dock_float_menu, None);
assert_eq!(app.dock.location(PanelId::BlockPalette).map(|(s, _)| s), Some(DockSide::Left));
assert_eq!(
app.dock.location(PanelId::BlockPalette).map(|(s, _)| s),
Some(DockSide::Left)
);
}
+21 -5
View File
@@ -384,7 +384,11 @@ impl OpenCADStudio {
/// Start `drag`, peeking `peek` (a pallet being dragged or resized stays
/// shown on an auto-hiding edge).
fn dock_begin(&mut self, drag: crate::ui::dock::DockDrag, peek: Option<crate::ui::dock::PanelId>) {
fn dock_begin(
&mut self,
drag: crate::ui::dock::DockDrag,
peek: Option<crate::ui::dock::PanelId>,
) {
if let crate::ui::dock::DockDrag::Move { panel, .. } = drag {
self.dock.raise_float(panel);
}
@@ -501,7 +505,8 @@ impl OpenCADStudio {
/// when it has no place yet (opened for the first time, or never moved).
pub(crate) fn dock_open_at_default(&mut self, id: crate::ui::dock::PanelId) {
if !self.dock.is_placed(id) {
self.dock.dock(id, crate::app::config::DockSide::Right, usize::MAX);
self.dock
.dock(id, crate::app::config::DockSide::Right, usize::MAX);
}
self.dock_reveal(id);
}
@@ -517,7 +522,8 @@ impl OpenCADStudio {
let (ww, wh) = self.dock_workspace_size();
let (w, h) = self.dock_float_size(PanelId::Layers);
let (x, y) = (((ww - w) * 0.5).max(0.0), ((wh - h) * 0.5).max(0.0));
self.dock.float(FloatPanel::new(PanelId::Layers, x, y, w, h));
self.dock
.float(FloatPanel::new(PanelId::Layers, x, y, w, h));
self.save_config();
}
self.dock.raise_float(PanelId::Layers);
@@ -557,7 +563,13 @@ impl OpenCADStudio {
pub(crate) fn dock_workspace_size(&self) -> (f32, f32) {
(
self.win_size.0,
self.tabs[self.active_tab].scene.selection.borrow().view.vp_size.1,
self.tabs[self.active_tab]
.scene
.selection
.borrow()
.view
.vp_size
.1,
)
}
@@ -745,7 +757,11 @@ impl OpenCADStudio {
.find(|(_, _, bottom)| p.y < *bottom)
.or(spans.last())
{
let index = if p.y < (top + bottom) * 0.5 { pos } else { pos + 1 };
let index = if p.y < (top + bottom) * 0.5 {
pos
} else {
pos + 1
};
return DropTarget::Join {
side,
group: gi,
+97 -61
View File
@@ -55,7 +55,11 @@ impl OpenCADStudio {
.on_right_press(Message::Dock(crate::ui::dock::DockMsg::EdgeMenu(None)))
.into(),
);
layers.push(place_at(dock_edge_menu(side, &checked), x.max(0.0), plus_top));
layers.push(place_at(
dock_edge_menu(side, &checked),
x.max(0.0),
plus_top,
));
}
}
// An open floating title-bar menu, over its own click catcher.
@@ -82,21 +86,20 @@ impl OpenCADStudio {
.height(Fill)
.into();
use crate::ui::dock::DockDrag;
let capturing = self.dock_drag.is_some()
|| self.xref_col_drag.is_some()
|| self.xref_split_drag;
let capturing =
self.dock_drag.is_some() || self.xref_col_drag.is_some() || self.xref_split_drag;
let mut capture = mouse_area(workspace);
if capturing {
capture = capture
.on_move(move |p| Message::Dock(crate::ui::dock::DockMsg::DragMove(p)))
.on_release(Message::Dock(crate::ui::dock::DockMsg::DragRelease))
.interaction(match self.dock_drag {
Some(DockDrag::FloatSize { from_left: true, .. }) => {
iced::mouse::Interaction::ResizingDiagonallyUp
}
Some(DockDrag::FloatSize { from_left: false, .. }) => {
iced::mouse::Interaction::ResizingDiagonallyDown
}
Some(DockDrag::FloatSize {
from_left: true, ..
}) => iced::mouse::Interaction::ResizingDiagonallyUp,
Some(DockDrag::FloatSize {
from_left: false, ..
}) => iced::mouse::Interaction::ResizingDiagonallyDown,
Some(DockDrag::Split { .. }) => iced::mouse::Interaction::ResizingVertically,
Some(DockDrag::Move { .. }) => iced::mouse::Interaction::Grabbing,
// Widths, the Layer Manager column and the xref drags.
@@ -193,8 +196,8 @@ impl OpenCADStudio {
let mut items: Vec<Element<'_, Message>> = Vec::new();
for gi in self.dock_visible_groups(side) {
let is_shown = shown == Some(gi);
let lit = target_group == Some(gi)
|| (!dragging && self.dock_grip_hover == Some((side, gi)));
let lit =
target_group == Some(gi) || (!dragging && self.dock_grip_hover == Some((side, gi)));
let group_dragged =
dragging && movement.is_some_and(|(_, group, _)| group == Some((side, gi)));
let panels = self.dock_group_visible(side, gi);
@@ -204,7 +207,8 @@ impl OpenCADStudio {
for id in panels {
let faded = group_dragged
|| (dragging
&& movement.is_some_and(|(panel, group, _)| group.is_none() && panel == id));
&& movement
.is_some_and(|(panel, group, _)| group.is_none() && panel == id));
let glyph = if faded {
crate::ui::icons::themed_disabled(id.icon(), 20.0)
} else if is_shown {
@@ -324,24 +328,27 @@ impl OpenCADStudio {
);
}
items.push(Space::new().height(STRIP_PLUS_GAP).into());
let plus = button(crate::ui::icons::themed_secondary(crate::ui::icons::PLUS, 14.0))
.on_press(Message::Dock(DockMsg::EdgeMenu(Some(side))))
.style(|theme: &Theme, status| button::Style {
background: Some(Background::Color(match status {
button::Status::Hovered | button::Status::Pressed => {
theme.palette().background.weak.color
}
_ => theme.palette().background.weakest.color,
})),
border: Border {
radius: 14.0.into(),
..Default::default()
},
let plus = button(crate::ui::icons::themed_secondary(
crate::ui::icons::PLUS,
14.0,
))
.on_press(Message::Dock(DockMsg::EdgeMenu(Some(side))))
.style(|theme: &Theme, status| button::Style {
background: Some(Background::Color(match status {
button::Status::Hovered | button::Status::Pressed => {
theme.palette().background.weak.color
}
_ => theme.palette().background.weakest.color,
})),
border: Border {
radius: 14.0.into(),
..Default::default()
})
.width(Length::Fixed(28.0))
.height(Length::Fixed(28.0))
.padding(7);
},
..Default::default()
})
.width(Length::Fixed(28.0))
.height(Length::Fixed(28.0))
.padding(7);
items.push(container(plus).center_x(Length::Fixed(DOCK_STRIP_W)).into());
container(column(items))
.width(Length::Fixed(DOCK_STRIP_W))
@@ -377,15 +384,15 @@ impl OpenCADStudio {
crate::ui::dock::PanelId::BlockPalette => {
crate::ui::window::block_palette::view(&self.block_palette, width, chrome)
}
crate::ui::dock::PanelId::ExternalReferences => self.xref_manager.view(
width,
chrome,
tab.xref_missing,
&tab.scene.document,
),
crate::ui::dock::PanelId::ExternalReferences => {
self.xref_manager
.view(width, chrome, tab.xref_missing, &tab.scene.document)
}
crate::ui::dock::PanelId::Browser => crate::ui::window::browser::view(
&tab.scene.document,
tab.sketch_session.as_ref().map(|session| session.name.as_str()),
tab.sketch_session
.as_ref()
.map(|session| session.name.as_str()),
width,
chrome,
),
@@ -444,7 +451,12 @@ impl OpenCADStudio {
tab: &'a DocumentTab,
) -> Element<'a, Message> {
use crate::ui::dock::DockMsg;
let FloatFrame { x, y, bar_left, hidden } = self.dock_float_frame(f);
let FloatFrame {
x,
y,
bar_left,
hidden,
} = self.dock_float_frame(f);
let hovered = self.dock_title_hover == Some(f.id);
let bar = floating_title_bar(f.id, self.dock.auto_collapse(f.id), bar_left, hovered);
let content: Element<'_, Message> = if hidden {
@@ -533,7 +545,12 @@ impl OpenCADStudio {
let hidden = self.dock.auto_collapse(f.id) && self.dock_peek != Some(f.id);
// A hidden panel keeps its title bar where it sits when shown.
let x = if hidden && !bar_left { f.x + f.w } else { f.x };
let frame = FloatFrame { x, y: f.y, bar_left, hidden };
let frame = FloatFrame {
x,
y: f.y,
bar_left,
hidden,
};
// Keep the panel on screen when the window shrank since it was placed.
FloatFrame {
x: x.min(ww - frame.width(f)).max(0.0),
@@ -560,24 +577,29 @@ impl OpenCADStudio {
frame.bar_x(f) + self.dock_float_menu_at.x,
frame.y + self.dock_float_menu_at.y,
);
let menu_x = if at.x + DOCK_MENU_W <= ww { at.x } else { at.x - DOCK_MENU_W };
let menu_x = if at.x + DOCK_MENU_W <= ww {
at.x
} else {
at.x - DOCK_MENU_W
};
let menu_x = menu_x.clamp(0.0, (ww - DOCK_MENU_W).max(0.0));
let menu_y = at.y.min(wh - FLOAT_MENU_H).max(0.0);
let item = |label: Element<'static, Message>, press: DockMsg| -> Element<'static, Message> {
button(label)
.on_press(Message::Dock(press))
.style(menu_row_style)
.padding([5, 8])
.width(Fill)
.into()
};
let item =
|label: Element<'static, Message>, press: DockMsg| -> Element<'static, Message> {
button(label)
.on_press(Message::Dock(press))
.style(menu_row_style)
.padding([5, 8])
.width(Fill)
.into()
};
let check: Element<'static, Message> = if f.docking {
crate::ui::icons::themed(crate::ui::icons::CHECK, 12.0)
} else {
Space::new().width(12).height(12).into()
};
let docking = row![text(t!("Allow docking")).size(12).width(Fill), check]
.align_y(iced::Center);
let docking =
row![text(t!("Allow docking")).size(12).width(Fill), check].align_y(iced::Center);
let separator = container(Space::new())
.width(Fill)
.height(Length::Fixed(1.0))
@@ -588,8 +610,14 @@ impl OpenCADStudio {
let menu = column![
item(docking.into(), DockMsg::FloatDockingToggle(id)),
container(separator).padding([3, 4]),
item(text(t!("Dock left")).size(12).into(), DockMsg::DockTo(id, DockSide::Left)),
item(text(t!("Dock right")).size(12).into(), DockMsg::DockTo(id, DockSide::Right)),
item(
text(t!("Dock left")).size(12).into(),
DockMsg::DockTo(id, DockSide::Left)
),
item(
text(t!("Dock right")).size(12).into(),
DockMsg::DockTo(id, DockSide::Right)
),
]
.spacing(1)
.padding(4);
@@ -629,7 +657,10 @@ impl OpenCADStudio {
.into()
};
let mut layers: Vec<Element<'_, Message>> = Vec::new();
let group_drag = self.dock_drag.and_then(|d| d.movement()).and_then(|(_, g, _)| g);
let group_drag = self
.dock_drag
.and_then(|d| d.movement())
.and_then(|(_, g, _)| g);
let marks_side = match target {
DropTarget::Edge { side, .. } | DropTarget::Join { side, .. } => Some(side),
DropTarget::Float { x, y } => {
@@ -825,7 +856,9 @@ fn dock_icon_ghost(icons: &[crate::ui::dock::PanelId]) -> Element<'static, Messa
.style(|theme: &Theme| {
let palette = theme.palette();
container::Style {
background: Some(Background::Color(palette.primary.base.color.scale_alpha(0.22))),
background: Some(Background::Color(
palette.primary.base.color.scale_alpha(0.22),
)),
border: Border {
color: palette.primary.base.color,
width: 1.5,
@@ -941,10 +974,10 @@ fn floating_title_bar(
let bar = bar
.push(container(title).width(Fill).height(Fill).padding([6, 0]))
.push(container(crate::ui::icons::themed(id.icon(), 16.0)).center_x(Fill))
.padding([4, 0])
.align_x(iced::Center)
.width(Length::Fixed(DOCK_FLOAT_BAR_W))
.height(Fill);
.padding([4, 0])
.align_x(iced::Center)
.width(Length::Fixed(DOCK_FLOAT_BAR_W))
.height(Fill);
mouse_area(container(bar).style(|theme: &Theme| container::Style {
background: Some(Background::Color(theme.palette().background.weak.color)),
..Default::default()
@@ -986,7 +1019,6 @@ fn dock_divider(id: crate::ui::dock::PanelId) -> Element<'static, Message> {
.into()
}
/// Width of the icon strip's pallet menu.
const DOCK_MENU_W: f32 = 230.0;
/// Rough height of a floating title bar's menu, to keep it on screen.
@@ -1083,8 +1115,12 @@ fn dock_splitter(
..Default::default()
});
mouse_area(line)
.on_press(Message::Dock(crate::ui::dock::DockMsg::SplitGrab(side, gi, upper, lower)))
.on_double_click(Message::Dock(crate::ui::dock::DockMsg::SplitReset(side, gi)))
.on_press(Message::Dock(crate::ui::dock::DockMsg::SplitGrab(
side, gi, upper, lower,
)))
.on_double_click(Message::Dock(crate::ui::dock::DockMsg::SplitReset(
side, gi,
)))
.interaction(iced::mouse::Interaction::ResizingVertically)
.into()
}