mirror of https://codeberg.org/topola/topola.git
chore: run cargo fmt (split to make previous commit more readable)
This commit is contained in:
parent
6fbdc8f738
commit
e33633f8e1
|
|
@ -45,17 +45,20 @@ impl Viewport {
|
||||||
menu_bar: &MenuBar,
|
menu_bar: &MenuBar,
|
||||||
maybe_workspace: Option<&mut Workspace>,
|
maybe_workspace: Option<&mut Workspace>,
|
||||||
) -> egui::Rect {
|
) -> egui::Rect {
|
||||||
egui::CentralPanel::default().show(ctx, |ui| {
|
egui::CentralPanel::default()
|
||||||
|
.show(ctx, |ui| {
|
||||||
egui::Frame::canvas(ui.style()).show(ui, |ui| {
|
egui::Frame::canvas(ui.style()).show(ui, |ui| {
|
||||||
ui.ctx().request_repaint();
|
ui.ctx().request_repaint();
|
||||||
|
|
||||||
let (_id, viewport_rect) = ui.allocate_space(ui.available_size());
|
let (_id, viewport_rect) = ui.allocate_space(ui.available_size());
|
||||||
let latest_pos = self.transform.inverse() * (ctx.input(|i| i.pointer.latest_pos().unwrap_or_default()));
|
let latest_pos = self.transform.inverse()
|
||||||
|
* (ctx.input(|i| i.pointer.latest_pos().unwrap_or_default()));
|
||||||
|
|
||||||
let old_scaling = self.transform.scaling;
|
let old_scaling = self.transform.scaling;
|
||||||
self.transform.scaling *= ctx.input(|i| i.zoom_delta());
|
self.transform.scaling *= ctx.input(|i| i.zoom_delta());
|
||||||
|
|
||||||
self.transform.translation += latest_pos.to_vec2() * (old_scaling - self.transform.scaling);
|
self.transform.translation +=
|
||||||
|
latest_pos.to_vec2() * (old_scaling - self.transform.scaling);
|
||||||
self.transform.translation += ctx.input(|i| i.smooth_scroll_delta);
|
self.transform.translation += ctx.input(|i| i.smooth_scroll_delta);
|
||||||
|
|
||||||
let mut painter = Painter::new(ui, self.transform, menu_bar.show_bboxes);
|
let mut painter = Painter::new(ui, self.transform, menu_bar.show_bboxes);
|
||||||
|
|
@ -67,17 +70,19 @@ impl Viewport {
|
||||||
|
|
||||||
if ctx.input(|i| i.pointer.any_click()) {
|
if ctx.input(|i| i.pointer.any_click()) {
|
||||||
if menu_bar.is_placing_via {
|
if menu_bar.is_placing_via {
|
||||||
workspace.interactor.execute(
|
workspace.interactor.execute(Command::PlaceVia(ViaWeight {
|
||||||
Command::PlaceVia(ViaWeight {
|
|
||||||
from_layer: 0,
|
from_layer: 0,
|
||||||
to_layer: 0,
|
to_layer: 0,
|
||||||
circle: Circle {
|
circle: Circle {
|
||||||
pos: latest_point,
|
pos: latest_point,
|
||||||
r: menu_bar.autorouter_options.router_options.routed_band_width / 2.0,
|
r: menu_bar
|
||||||
|
.autorouter_options
|
||||||
|
.router_options
|
||||||
|
.routed_band_width
|
||||||
|
/ 2.0,
|
||||||
},
|
},
|
||||||
maybe_net: Some(1234),
|
maybe_net: Some(1234),
|
||||||
}),
|
}));
|
||||||
);
|
|
||||||
} else {
|
} else {
|
||||||
overlay.click(
|
overlay.click(
|
||||||
workspace.interactor.invoker().autorouter().board(),
|
workspace.interactor.invoker().autorouter().board(),
|
||||||
|
|
@ -93,21 +98,40 @@ impl Viewport {
|
||||||
for i in (0..layers.visible.len()).rev() {
|
for i in (0..layers.visible.len()).rev() {
|
||||||
if layers.visible[i] {
|
if layers.visible[i] {
|
||||||
for primitive in board.layout().drawing().layer_primitive_nodes(i) {
|
for primitive in board.layout().drawing().layer_primitive_nodes(i) {
|
||||||
let shape = primitive.primitive(board.layout().drawing()).shape();
|
let shape =
|
||||||
|
primitive.primitive(board.layout().drawing()).shape();
|
||||||
|
|
||||||
let color = if overlay
|
let color = if overlay
|
||||||
.selection()
|
.selection()
|
||||||
.contains_node(board, GenericNode::Primitive(primitive))
|
.contains_node(board, GenericNode::Primitive(primitive))
|
||||||
{
|
{
|
||||||
config.colors(ctx).layers.color(board.layout().rules().layer_layername(i)).highlighted
|
config
|
||||||
} else if let Some(activity) = &mut workspace.interactor.maybe_activity() {
|
.colors(ctx)
|
||||||
|
.layers
|
||||||
|
.color(board.layout().rules().layer_layername(i))
|
||||||
|
.highlighted
|
||||||
|
} else if let Some(activity) =
|
||||||
|
&mut workspace.interactor.maybe_activity()
|
||||||
|
{
|
||||||
if activity.obstacles().contains(&primitive) {
|
if activity.obstacles().contains(&primitive) {
|
||||||
config.colors(ctx).layers.color(board.layout().rules().layer_layername(i)).highlighted
|
config
|
||||||
|
.colors(ctx)
|
||||||
|
.layers
|
||||||
|
.color(board.layout().rules().layer_layername(i))
|
||||||
|
.highlighted
|
||||||
} else {
|
} else {
|
||||||
config.colors(ctx).layers.color(board.layout().rules().layer_layername(i)).normal
|
config
|
||||||
|
.colors(ctx)
|
||||||
|
.layers
|
||||||
|
.color(board.layout().rules().layer_layername(i))
|
||||||
|
.normal
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
config.colors(ctx).layers.color(board.layout().rules().layer_layername(i)).normal
|
config
|
||||||
|
.colors(ctx)
|
||||||
|
.layers
|
||||||
|
.color(board.layout().rules().layer_layername(i))
|
||||||
|
.normal
|
||||||
};
|
};
|
||||||
|
|
||||||
painter.paint_primitive(&shape, color);
|
painter.paint_primitive(&shape, color);
|
||||||
|
|
@ -118,12 +142,23 @@ impl Viewport {
|
||||||
.selection()
|
.selection()
|
||||||
.contains_node(board, GenericNode::Compound(poly.into()))
|
.contains_node(board, GenericNode::Compound(poly.into()))
|
||||||
{
|
{
|
||||||
config.colors(ctx).layers.color(board.layout().rules().layer_layername(i)).highlighted
|
config
|
||||||
|
.colors(ctx)
|
||||||
|
.layers
|
||||||
|
.color(board.layout().rules().layer_layername(i))
|
||||||
|
.highlighted
|
||||||
} else {
|
} else {
|
||||||
config.colors(ctx).layers.color(board.layout().rules().layer_layername(i)).normal
|
config
|
||||||
|
.colors(ctx)
|
||||||
|
.layers
|
||||||
|
.color(board.layout().rules().layer_layername(i))
|
||||||
|
.normal
|
||||||
};
|
};
|
||||||
|
|
||||||
painter.paint_polygon(&board.layout().poly(poly).shape().polygon, color)
|
painter.paint_polygon(
|
||||||
|
&board.layout().poly(poly).shape().polygon,
|
||||||
|
color,
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -131,14 +166,8 @@ impl Viewport {
|
||||||
if menu_bar.show_ratsnest {
|
if menu_bar.show_ratsnest {
|
||||||
let graph = overlay.ratsnest().graph();
|
let graph = overlay.ratsnest().graph();
|
||||||
for edge in graph.edge_references() {
|
for edge in graph.edge_references() {
|
||||||
let from = graph
|
let from = graph.node_weight(edge.source()).unwrap().pos;
|
||||||
.node_weight(edge.source())
|
let to = graph.node_weight(edge.target()).unwrap().pos;
|
||||||
.unwrap()
|
|
||||||
.pos;
|
|
||||||
let to = graph
|
|
||||||
.node_weight(edge.target())
|
|
||||||
.unwrap()
|
|
||||||
.pos;
|
|
||||||
|
|
||||||
painter.paint_edge(
|
painter.paint_edge(
|
||||||
from,
|
from,
|
||||||
|
|
@ -152,16 +181,22 @@ impl Viewport {
|
||||||
if let Some(activity) = workspace.interactor.maybe_activity() {
|
if let Some(activity) = workspace.interactor.maybe_activity() {
|
||||||
if let Some(navmesh) = activity.maybe_navmesh() {
|
if let Some(navmesh) = activity.maybe_navmesh() {
|
||||||
for edge in navmesh.edge_references() {
|
for edge in navmesh.edge_references() {
|
||||||
let mut from = PrimitiveIndex::from(navmesh.node_weight(edge.source()).unwrap().node)
|
let mut from = PrimitiveIndex::from(
|
||||||
|
navmesh.node_weight(edge.source()).unwrap().node,
|
||||||
|
)
|
||||||
.primitive(board.layout().drawing())
|
.primitive(board.layout().drawing())
|
||||||
.shape()
|
.shape()
|
||||||
.center();
|
.center();
|
||||||
let mut to = PrimitiveIndex::from(navmesh.node_weight(edge.target()).unwrap().node)
|
let mut to = PrimitiveIndex::from(
|
||||||
|
navmesh.node_weight(edge.target()).unwrap().node,
|
||||||
|
)
|
||||||
.primitive(board.layout().drawing())
|
.primitive(board.layout().drawing())
|
||||||
.shape()
|
.shape()
|
||||||
.center();
|
.center();
|
||||||
|
|
||||||
if let Some(from_cw) = navmesh.node_weight(edge.source()).unwrap().maybe_cw {
|
if let Some(from_cw) =
|
||||||
|
navmesh.node_weight(edge.source()).unwrap().maybe_cw
|
||||||
|
{
|
||||||
if from_cw {
|
if from_cw {
|
||||||
from -= [0.0, 150.0].into();
|
from -= [0.0, 150.0].into();
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -169,7 +204,9 @@ impl Viewport {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if let Some(to_cw) = navmesh.node_weight(edge.target()).unwrap().maybe_cw {
|
if let Some(to_cw) =
|
||||||
|
navmesh.node_weight(edge.target()).unwrap().maybe_cw
|
||||||
|
{
|
||||||
if to_cw {
|
if to_cw {
|
||||||
to -= [0.0, 150.0].into();
|
to -= [0.0, 150.0].into();
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -177,16 +214,25 @@ impl Viewport {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
let stroke = 'blk: {
|
let stroke =
|
||||||
|
'blk: {
|
||||||
if let (Some(source_pos), Some(target_pos)) = (
|
if let (Some(source_pos), Some(target_pos)) = (
|
||||||
activity.maybe_navcord().map(|navcord|
|
activity
|
||||||
navcord.path
|
.maybe_navcord()
|
||||||
.iter()
|
.map(|navcord| {
|
||||||
.position(|node| *node == edge.source())).flatten(),
|
navcord.path.iter().position(|node| {
|
||||||
activity.maybe_navcord().map(|navcord|
|
*node == edge.source()
|
||||||
navcord.path
|
})
|
||||||
.iter()
|
})
|
||||||
.position(|node| *node == edge.target())).flatten(),
|
.flatten(),
|
||||||
|
activity
|
||||||
|
.maybe_navcord()
|
||||||
|
.map(|navcord| {
|
||||||
|
navcord.path.iter().position(|node| {
|
||||||
|
*node == edge.target()
|
||||||
|
})
|
||||||
|
})
|
||||||
|
.flatten(),
|
||||||
) {
|
) {
|
||||||
if target_pos == source_pos + 1
|
if target_pos == source_pos + 1
|
||||||
|| source_pos == target_pos + 1
|
|| source_pos == target_pos + 1
|
||||||
|
|
@ -198,7 +244,10 @@ impl Viewport {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
egui::Stroke::new(1.0, egui::Color32::from_rgb(125, 125, 125))
|
egui::Stroke::new(
|
||||||
|
1.0,
|
||||||
|
egui::Color32::from_rgb(125, 125, 125),
|
||||||
|
)
|
||||||
};
|
};
|
||||||
|
|
||||||
painter.paint_edge(from, to, stroke);
|
painter.paint_edge(from, to, stroke);
|
||||||
|
|
@ -225,22 +274,34 @@ impl Viewport {
|
||||||
|
|
||||||
if let Some(activity) = workspace.interactor.maybe_activity() {
|
if let Some(activity) = workspace.interactor.maybe_activity() {
|
||||||
for ghost in activity.ghosts().iter() {
|
for ghost in activity.ghosts().iter() {
|
||||||
painter.paint_primitive(&ghost, egui::Color32::from_rgb(75, 75, 150));
|
painter
|
||||||
|
.paint_primitive(&ghost, egui::Color32::from_rgb(75, 75, 150));
|
||||||
}
|
}
|
||||||
|
|
||||||
if let Some(navmesh) = activity.maybe_navmesh() {
|
if let Some(navmesh) = activity.maybe_navmesh() {
|
||||||
if menu_bar.show_origin_destination {
|
if menu_bar.show_origin_destination {
|
||||||
let (origin, destination) = (navmesh.origin(), navmesh.destination());
|
let (origin, destination) =
|
||||||
|
(navmesh.origin(), navmesh.destination());
|
||||||
painter.paint_dot(
|
painter.paint_dot(
|
||||||
Circle {
|
Circle {
|
||||||
pos: board.layout().drawing().primitive(origin).shape().center(),
|
pos: board
|
||||||
|
.layout()
|
||||||
|
.drawing()
|
||||||
|
.primitive(origin)
|
||||||
|
.shape()
|
||||||
|
.center(),
|
||||||
r: 150.0,
|
r: 150.0,
|
||||||
},
|
},
|
||||||
egui::Color32::from_rgb(255, 255, 100),
|
egui::Color32::from_rgb(255, 255, 100),
|
||||||
);
|
);
|
||||||
painter.paint_dot(
|
painter.paint_dot(
|
||||||
Circle {
|
Circle {
|
||||||
pos: board.layout().drawing().primitive(destination).shape().center(),
|
pos: board
|
||||||
|
.layout()
|
||||||
|
.drawing()
|
||||||
|
.primitive(destination)
|
||||||
|
.shape()
|
||||||
|
.center(),
|
||||||
r: 150.0,
|
r: 150.0,
|
||||||
},
|
},
|
||||||
egui::Color32::from_rgb(255, 255, 100),
|
egui::Color32::from_rgb(255, 255, 100),
|
||||||
|
|
@ -250,7 +311,9 @@ impl Viewport {
|
||||||
}
|
}
|
||||||
|
|
||||||
if self.scheduled_zoom_to_fit {
|
if self.scheduled_zoom_to_fit {
|
||||||
let root_bbox = workspace.interactor.invoker()
|
let root_bbox = workspace
|
||||||
|
.interactor
|
||||||
|
.invoker()
|
||||||
.autorouter()
|
.autorouter()
|
||||||
.board()
|
.board()
|
||||||
.layout()
|
.layout()
|
||||||
|
|
@ -262,8 +325,10 @@ impl Viewport {
|
||||||
let root_bbox_width = root_bbox.upper()[0] - root_bbox.lower()[0];
|
let root_bbox_width = root_bbox.upper()[0] - root_bbox.lower()[0];
|
||||||
let root_bbox_height = root_bbox.upper()[1] - root_bbox.lower()[1];
|
let root_bbox_height = root_bbox.upper()[1] - root_bbox.lower()[1];
|
||||||
|
|
||||||
self.transform.scaling = 0.8 * if root_bbox_width / root_bbox_height
|
self.transform.scaling = 0.8
|
||||||
>= (viewport_rect.width() as f64) / (viewport_rect.height() as f64)
|
* if root_bbox_width / root_bbox_height
|
||||||
|
>= (viewport_rect.width() as f64)
|
||||||
|
/ (viewport_rect.height() as f64)
|
||||||
{
|
{
|
||||||
viewport_rect.width() / root_bbox_width as f32
|
viewport_rect.width() / root_bbox_width as f32
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -274,7 +339,10 @@ impl Viewport {
|
||||||
viewport_rect.center()[0] as f32,
|
viewport_rect.center()[0] as f32,
|
||||||
viewport_rect.center()[1] as f32,
|
viewport_rect.center()[1] as f32,
|
||||||
) - (self.transform.scaling
|
) - (self.transform.scaling
|
||||||
* egui::Pos2::new(root_bbox.center()[0] as f32, -root_bbox.center()[1] as f32))
|
* egui::Pos2::new(
|
||||||
|
root_bbox.center()[0] as f32,
|
||||||
|
-root_bbox.center()[1] as f32,
|
||||||
|
))
|
||||||
.to_vec2();
|
.to_vec2();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -283,6 +351,8 @@ impl Viewport {
|
||||||
|
|
||||||
viewport_rect
|
viewport_rect
|
||||||
})
|
})
|
||||||
}).inner.inner
|
})
|
||||||
|
.inner
|
||||||
|
.inner
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue