mirror of https://codeberg.org/topola/topola.git
feat(topola-egui): Display loaded board's boundary
This commit is contained in:
parent
78242f16fc
commit
b1ab710adb
|
|
@ -8,7 +8,7 @@ use specctra::{error::ParseErrorContext, structure::DsnFile};
|
|||
use topola::Board;
|
||||
use unic_langid::langid;
|
||||
|
||||
use crate::{menu_bar::MenuBar, translator::Translator, workspace::Workspace};
|
||||
use crate::{menu_bar::MenuBar, translator::Translator, viewport::Viewport, workspace::Workspace};
|
||||
|
||||
pub struct App {
|
||||
translator: Translator,
|
||||
|
|
@ -19,7 +19,7 @@ pub struct App {
|
|||
),
|
||||
|
||||
menu_bar: MenuBar,
|
||||
view_rect: egui::Rect,
|
||||
viewport: Viewport,
|
||||
workspace: Option<Workspace>,
|
||||
}
|
||||
|
||||
|
|
@ -29,10 +29,7 @@ impl Default for App {
|
|||
translator: Translator::new(langid!("en-US")),
|
||||
content_channel: channel(),
|
||||
menu_bar: MenuBar::new(),
|
||||
view_rect: egui::Rect::from_min_max(
|
||||
egui::pos2(-100.0, 100.0),
|
||||
egui::pos2(100.0, 100.0),
|
||||
),
|
||||
viewport: Viewport::new(),
|
||||
workspace: None,
|
||||
}
|
||||
}
|
||||
|
|
@ -130,14 +127,7 @@ impl eframe::App for App {
|
|||
|
||||
self.update_state();
|
||||
|
||||
egui::CentralPanel::default().show(ctx, |ui| {
|
||||
egui::Scene::new()
|
||||
.zoom_range(0.001..=1000.0)
|
||||
.show(ui, &mut self.view_rect, |ui| {
|
||||
ui.painter()
|
||||
.circle_filled(egui::pos2(0.0, 0.0), 20.0, egui::Color32::RED);
|
||||
});
|
||||
});
|
||||
self.viewport.update(ctx, self.workspace.as_mut());
|
||||
|
||||
self.update_locale();
|
||||
self.update_title(ctx);
|
||||
|
|
|
|||
|
|
@ -0,0 +1,58 @@
|
|||
// SPDX-FileCopyrightText: 2026 Topola contributors
|
||||
//
|
||||
// SPDX-License-Identifier: MIT OR Apache-2.0
|
||||
|
||||
use egui::Pos2;
|
||||
|
||||
use crate::{menu_bar::MenuBar, workspace::Workspace};
|
||||
|
||||
pub struct Displayer {}
|
||||
|
||||
impl Displayer {
|
||||
pub fn new() -> Self {
|
||||
Self {}
|
||||
}
|
||||
|
||||
pub fn update(
|
||||
&mut self,
|
||||
ctx: &egui::Context,
|
||||
ui: &egui::Ui,
|
||||
//menu_bar: &MenuBar,
|
||||
workspace: &Workspace,
|
||||
) {
|
||||
self.display_layout(ctx, ui, /*menu_bar,*/ workspace);
|
||||
}
|
||||
|
||||
pub fn display_layout(
|
||||
&mut self,
|
||||
ctx: &egui::Context,
|
||||
ui: &egui::Ui,
|
||||
//menu_bar: &MenuBar,
|
||||
workspace: &Workspace,
|
||||
) {
|
||||
ui.painter().line(
|
||||
workspace
|
||||
.board
|
||||
.layout()
|
||||
.boundary()
|
||||
.iter()
|
||||
.map(|p| egui::Pos2 {
|
||||
x: p[0] as f32,
|
||||
y: p[1] as f32,
|
||||
})
|
||||
.collect::<Vec<_>>(),
|
||||
egui::Stroke::new(500.0, egui::Color32::WHITE),
|
||||
);
|
||||
ui.painter().line(
|
||||
vec![
|
||||
Pos2::new(0.0, 0.0),
|
||||
Pos2::new(100.0, 100.0),
|
||||
Pos2::new(100.0, 500.0),
|
||||
],
|
||||
egui::Stroke::new(2.0, egui::Color32::GOLD),
|
||||
);
|
||||
ui.painter()
|
||||
.circle_filled(egui::pos2(0.0, 0.0), 2.0, egui::Color32::RED);
|
||||
//workspace.board.layout().boundary()
|
||||
}
|
||||
}
|
||||
|
|
@ -7,9 +7,12 @@
|
|||
mod action;
|
||||
mod actions;
|
||||
mod app;
|
||||
mod displayer;
|
||||
mod menu_bar;
|
||||
mod translator;
|
||||
mod viewport;
|
||||
mod workspace;
|
||||
|
||||
use crate::app::App;
|
||||
|
||||
// When compiling natively:
|
||||
|
|
|
|||
|
|
@ -0,0 +1,33 @@
|
|||
// SPDX-FileCopyrightText: 2026 Topola contributors
|
||||
//
|
||||
// SPDX-License-Identifier: MIT OR Apache-2.0
|
||||
|
||||
use crate::{displayer::Displayer, workspace::Workspace};
|
||||
|
||||
pub struct Viewport {
|
||||
pub view_rect: egui::Rect,
|
||||
}
|
||||
|
||||
impl Viewport {
|
||||
pub fn new() -> Self {
|
||||
Self {
|
||||
view_rect: egui::Rect::from_min_max(
|
||||
egui::pos2(-10000.0, 10000.0),
|
||||
egui::pos2(-10000.0, 10000.0),
|
||||
),
|
||||
}
|
||||
}
|
||||
|
||||
pub fn update(&mut self, ctx: &egui::Context, workspace: Option<&mut Workspace>) {
|
||||
egui::CentralPanel::default().show(ctx, |ui| {
|
||||
egui::Scene::new()
|
||||
.zoom_range(0.0001..=10000.0)
|
||||
.show(ui, &mut self.view_rect, |ui| {
|
||||
if let Some(workspace) = workspace {
|
||||
let mut displayer = Displayer::new();
|
||||
displayer.update(ctx, ui, workspace)
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
@ -4,7 +4,7 @@
|
|||
|
||||
use std::collections::BTreeMap;
|
||||
|
||||
use derive_getters::Dissolve;
|
||||
use derive_getters::{Dissolve, Getters};
|
||||
use stable_vec::StableVec;
|
||||
use undoredo::{ApplyDelta, Delta, FlushDelta, Recorder};
|
||||
|
||||
|
|
@ -101,7 +101,7 @@ pub struct Via {
|
|||
radius: u64,
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug)]
|
||||
#[derive(Clone, Debug, Getters)]
|
||||
pub struct Layout {
|
||||
boundary: Vec<[i64; 2]>,
|
||||
place_boundary: Vec<[i64; 2]>,
|
||||
|
|
|
|||
Loading…
Reference in New Issue