forked from 1b-agent/opencadstudio-upstream
fix: open-issue sweep — drawing, plot, snap, layout and UI fixes
Fixes: - Font prompt no longer lists bundled ltypeshp/qcadshp shape files (#1626) - Wide polylines step at a discontinuous segment width; PEDIT marks the current vertex; keyword steps refresh the command preview (#1628) - Radius-0 fillet drops the zero-length segment it left, so the corner fillets again (#1422) - FILLET Trim / No trim option (#1558) - True-colour wires plot in their own colour; colour picker stores the value it shows (#1621) - Model tab keeps its page setup; "Save changes to layout" in Model (#1620) - QNEW default template in Options > Files; .dwt in the open dialog (#1134, #1113) - GRIDUNIT / GRIDMODE / PERSPECTIVE variables (#1618, #1524) - PTYPE (#1433) - ZOOM nX / nXP (#1465) - CHSPACE between model and paper space through a viewport (#1428) - Moving a dimension keeps its automatic text placement - Shell icon; "&&" button labels (#1554) - LINETYPE Load from a .lin file (#1588) - XLINE / RAY hide the crosshair arms (#1437) - Dynamic-input boxes keep clear of the crosshair and each other (#1546) - Snap marker colour setting, dark default on light canvases (#1497, #1229, #1128) - Dimension style precision as a 0.00 pattern dropdown (#1426) - Node graph nodes left of the origin no longer clip away (#1592) - Collapse button in the command history header (#1094) - Freeze-in-current-viewport toggle in the ribbon layer list (#1466) - Geometric Center object snap for closed polylines (#1369) New strings translated in all 21 locales. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
abf302eba5
commit
178c7dff41
70 files changed
+1227
-145
No files matched your search
+11
-5
@@ -518,12 +518,20 @@ impl Graph {
|
||||
_ => None,
|
||||
};
|
||||
let zoom = self.zoom();
|
||||
// Lay the nodes out relative to the visible area's top-left rather
|
||||
// than the graph origin: a `pin` clips to its own bounds, so nodes
|
||||
// left of / above the origin vanished once panned or zoomed out (#1592).
|
||||
let shift = Vector::new(self.pan.x / zoom, self.pan.y / zoom);
|
||||
let mut nodes = stack![];
|
||||
for (node, node_sections) in self.engine.nodes.iter().zip(sections) {
|
||||
let Some(ui) = self.ui.get(&node.id) else {
|
||||
continue;
|
||||
};
|
||||
nodes = nodes.push(pin(self.node_view(node, node_sections)).x(ui.pos.x).y(ui.pos.y));
|
||||
nodes = nodes.push(
|
||||
pin(self.node_view(node, node_sections))
|
||||
.x(ui.pos.x + shift.x)
|
||||
.y(ui.pos.y + shift.y),
|
||||
);
|
||||
}
|
||||
let mut layers = stack![
|
||||
canvas(Wires { wires, pending, width: 2.0 * zoom.max(0.5) })
|
||||
@@ -531,7 +539,6 @@ impl Graph {
|
||||
.height(Length::Fill),
|
||||
Zoomed {
|
||||
content: nodes.width(Length::Fill).height(Length::Fill).into(),
|
||||
pan: self.pan,
|
||||
zoom,
|
||||
},
|
||||
];
|
||||
@@ -955,17 +962,16 @@ impl canvas::Program<Message> for Wires {
|
||||
}
|
||||
|
||||
/// Lays its content out in graph space and draws and hit-tests it through
|
||||
/// `pan` and `zoom`, so every widget inside scales as one picture.
|
||||
/// `zoom`, so every widget inside scales as one picture.
|
||||
struct Zoomed<'a> {
|
||||
content: Element<'a, Message>,
|
||||
pan: Vector,
|
||||
zoom: f32,
|
||||
}
|
||||
|
||||
impl Zoomed<'_> {
|
||||
/// Content coordinates → screen, for a layer whose top-left is `origin`.
|
||||
fn transformation(&self, origin: Point) -> Transformation {
|
||||
Transformation::translate(origin.x + self.pan.x, origin.y + self.pan.y)
|
||||
Transformation::translate(origin.x, origin.y)
|
||||
* Transformation::scale(self.zoom)
|
||||
* Transformation::translate(-origin.x, -origin.y)
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user