Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 13 additions & 6 deletions crates/app/src/ui/canvas/geometry.rs
Original file line number Diff line number Diff line change
Expand Up @@ -221,10 +221,13 @@ pub(crate) fn plot_under_cursor(
let Some(plot_object) = canvas.object(id).and_then(|object| object.plot()) else {
continue;
};
let layout =
plotx_render::axis_layout(&plot_object.figure, outer.width / zoom, outer.height / zoom);
let layout = plotx_render::axis_layout(
plot_object.figure(),
outer.width / zoom,
outer.height / zoom,
);
let plot =
plotx_render::Projector::new(&plot_object.figure, outer, &layout.margins.scaled(zoom))
plotx_render::Projector::new(plot_object.figure(), outer, &layout.margins.scaled(zoom))
.plot;
return Some((id, outer_rect, plot));
}
Expand All @@ -241,10 +244,14 @@ pub(crate) fn plot_inner_rect(
let outer = object_screen_rect(app.session.board, canvas, object_id, screen)?;
let plot_object = canvas.object(object_id).and_then(|object| object.plot())?;
let zoom = app.session.board.zoom;
let layout =
plotx_render::axis_layout(&plot_object.figure, outer.width / zoom, outer.height / zoom);
let layout = plotx_render::axis_layout(
plot_object.figure(),
outer.width / zoom,
outer.height / zoom,
);
Some(
plotx_render::Projector::new(&plot_object.figure, outer, &layout.margins.scaled(zoom)).plot,
plotx_render::Projector::new(plot_object.figure(), outer, &layout.margins.scaled(zoom))
.plot,
)
}

Expand Down
2 changes: 1 addition & 1 deletion crates/app/src/ui/canvas/integrals.rs
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@ pub(crate) fn handle_integral_drag(
.object(object_id)
.and_then(|object| object.plot())
.unwrap()
.figure;
.figure();
(fig.x.min, fig.x.span(), fig.x.reversed)
};

Expand Down
4 changes: 2 additions & 2 deletions crates/app/src/ui/canvas/integrals2d.rs
Original file line number Diff line number Diff line change
Expand Up @@ -149,7 +149,7 @@ pub(crate) fn handle_integral_2d_drag(
.object(object_id)
.and_then(|o| o.plot())
.unwrap()
.figure;
.figure();
(
AxisMap {
min: figure.x.min,
Expand Down Expand Up @@ -473,7 +473,7 @@ pub(crate) fn paint_integrals_2d(
let Some(figure) = app.doc.canvases[ci]
.object(object_id)
.and_then(|o| o.plot())
.map(|p| &p.figure)
.map(|p| p.figure())
else {
return;
};
Expand Down
6 changes: 3 additions & 3 deletions crates/app/src/ui/canvas/interactions.rs
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,7 @@ pub(crate) fn finish_selection_drag(

let object = app.doc.canvases[ci].object(object_id).unwrap();
let plot_object = object.plot().unwrap();
let fig = &plot_object.figure;
let fig = plot_object.figure();
let x = AxisRange::new(
screen_to_x(a.x, plot, fig.x.min, fig.x.span(), fig.x.reversed),
screen_to_x(b.x, plot, fig.x.min, fig.x.span(), fig.x.reversed),
Expand Down Expand Up @@ -184,7 +184,7 @@ pub(crate) fn finish_zoom_drag(

let object = app.doc.canvases[ci].object(object_id).unwrap();
let plot_object = object.plot().unwrap();
let fig = &plot_object.figure;
let fig = plot_object.figure();
let before = plot_object.viewport.clone();
let x = if width >= SELECT_MIN_PX {
Some(AxisRange::new(
Expand Down Expand Up @@ -557,7 +557,7 @@ pub(crate) fn arrange_context_menu(app: &mut PlotxApp, ci: usize, ui: &mut Ui) {
if ui.checkbox(&mut show_grid, "Show layout grid").clicked() {
app.set_show_grid(ci, show_grid);
}
let mut snap = app.session.ui.snap_enabled;
let mut snap = app.settings.general.snap_enabled;
if ui.checkbox(&mut snap, "Snap to grid & objects").clicked() {
app.set_snap_enabled(snap);
}
Expand Down
64 changes: 33 additions & 31 deletions crates/app/src/ui/canvas/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,7 @@ pub fn render_central(app: &mut PlotxApp, ui: &mut Ui) {
let avail = ui.available_rect_before_wrap();
let (resp, painter) = ui.allocate_painter(avail.size(), Sense::click_and_drag());
let rect = resp.rect;
let chrome = ChromeStyle::from_visuals(ui.visuals(), app.session.canvas_accent);
let chrome = ChromeStyle::from_visuals(ui.visuals(), app.settings.appearance.canvas_accent);
ensure_board_view(app, rect);
drive_board_fit(app, ui, rect);

Expand Down Expand Up @@ -265,7 +265,7 @@ pub fn render_central(app: &mut PlotxApp, ui: &mut Ui) {
.object(object_id)
.and_then(|object| object.plot())
.unwrap()
.figure;
.figure();
let zoom = app.session.board.zoom;
let layout = plotx_render::axis_layout(fig, outer.width / zoom, outer.height / zoom);
let proj = plotx_render::Projector::new(fig, outer, &layout.margins.scaled(zoom));
Expand All @@ -285,7 +285,7 @@ pub fn render_central(app: &mut PlotxApp, ui: &mut Ui) {
.object(object_id)
.and_then(|object| object.plot())
.unwrap()
.figure;
.figure();
match axis.orient() {
PhaseOrient::Vertical => {
let (mn, sp, rv) = (fig.x.min, fig.x.span(), fig.x.reversed);
Expand Down Expand Up @@ -593,20 +593,21 @@ mod tests {
locked: false,
visible: true,
group: None,
kind: CanvasObjectKind::Plot(Box::new(PlotObject {
next_series_id: plotx_core::state::SeriesId::new(1),
binding: plotx_core::state::DataBinding { series: Vec::new() },
chart: plotx_core::state::ChartSpec::default(),
stack: plotx_core::state::StackSpec::default(),
projections: plotx_core::state::AxisProjections::default(),
axis_overrides: plotx_core::state::AxisOverrides::default(),
figure: Figure::new("plot", Axis::new("x", 0.0, 1.0), Axis::new("y", 0.0, 1.0)),
viewport: CanvasViewport::from_figure(&Figure::new(
"plot",
Axis::new("x", 0.0, 1.0),
Axis::new("y", 0.0, 1.0),
)),
panel: PanelMeta::new("title".to_owned(), 50.0),
kind: CanvasObjectKind::Plot(Box::new({
let figure =
Figure::new("plot", Axis::new("x", 0.0, 1.0), Axis::new("y", 0.0, 1.0));
let viewport = CanvasViewport::from_figure(&figure);
PlotObject::new(
plotx_core::state::SeriesId::new(1),
plotx_core::state::DataBinding { series: Vec::new() },
plotx_core::state::ChartSpec::default(),
plotx_core::state::StackSpec::default(),
plotx_core::state::AxisProjections::default(),
plotx_core::state::AxisOverrides::default(),
figure,
viewport,
PanelMeta::new("title".to_owned(), 50.0),
)
})),
});

Expand All @@ -626,20 +627,21 @@ mod tests {
locked: false,
visible: true,
group: None,
kind: CanvasObjectKind::Plot(Box::new(PlotObject {
next_series_id: plotx_core::state::SeriesId::new(1),
binding: plotx_core::state::DataBinding { series: Vec::new() },
chart: plotx_core::state::ChartSpec::default(),
stack: plotx_core::state::StackSpec::default(),
projections: plotx_core::state::AxisProjections::default(),
axis_overrides: plotx_core::state::AxisOverrides::default(),
figure: Figure::new("plot", Axis::new("x", 0.0, 1.0), Axis::new("y", 0.0, 1.0)),
viewport: CanvasViewport::from_figure(&Figure::new(
"plot",
Axis::new("x", 0.0, 1.0),
Axis::new("y", 0.0, 1.0),
)),
panel: PanelMeta::new("title".to_owned(), 50.0),
kind: CanvasObjectKind::Plot(Box::new({
let figure =
Figure::new("plot", Axis::new("x", 0.0, 1.0), Axis::new("y", 0.0, 1.0));
let viewport = CanvasViewport::from_figure(&figure);
PlotObject::new(
plotx_core::state::SeriesId::new(1),
plotx_core::state::DataBinding { series: Vec::new() },
plotx_core::state::ChartSpec::default(),
plotx_core::state::StackSpec::default(),
plotx_core::state::AxisProjections::default(),
plotx_core::state::AxisOverrides::default(),
figure,
viewport,
PanelMeta::new("title".to_owned(), 50.0),
)
})),
});
app.doc.canvases.push(canvas);
Expand Down
18 changes: 8 additions & 10 deletions crates/app/src/ui/canvas/navigation.rs
Original file line number Diff line number Diff line change
Expand Up @@ -224,7 +224,7 @@ pub(crate) fn apply_plot_pan(
else {
return;
};
let fig = &plot_object.figure;
let fig = plot_object.figure();
let x_sign = if fig.x.reversed { 1.0 } else { -1.0 };
let y_sign = if fig.y.reversed { -1.0 } else { 1.0 };
let dx = x_sign * f64::from(delta.x) / f64::from(plot.width.max(1.0)) * fig.x.span();
Expand All @@ -240,8 +240,7 @@ pub(crate) fn apply_plot_pan(
)
.clamp_to(plot_object.viewport.full_y);
plot_object.viewport.auto_y = false;
let viewport = plot_object.viewport.clone();
viewport.apply_to(&mut plot_object.figure);
plot_object.apply_viewport();
app.doc.dirty = true;
}

Expand Down Expand Up @@ -275,7 +274,7 @@ pub(crate) fn finish_axis_zoom(
else {
return;
};
let fig = &plot_object.figure;
let fig = plot_object.figure();
let before = plot_object.viewport.clone();
let (x, y) = match drag.axis {
ZoomAxis::X => {
Expand Down Expand Up @@ -323,8 +322,8 @@ pub(crate) fn reset_plot_viewport(
let before = plot_object.viewport.clone();
let mut after = before.clone();
match hit_zone(p, outer_rect, plot) {
HitZone::XAxis => after.reset_x(&plot_object.figure),
HitZone::YAxis => after.reset_y(&plot_object.figure),
HitZone::XAxis => after.reset_x(plot_object.figure()),
HitZone::YAxis => after.reset_y(plot_object.figure()),
HitZone::Plot => after.reset_all(),
HitZone::None => return,
}
Expand Down Expand Up @@ -386,17 +385,16 @@ pub(crate) fn zoom_plot_viewport(

let object = app.doc.canvases[ci].object_mut(object_id).unwrap();
let plot_object = object.plot_mut().unwrap();
let fig = &plot_object.figure;
let fig = plot_object.figure().clone();
if zoom_x {
let anchor = screen_to_x(p.x, plot, fig.x.min, fig.x.span(), fig.x.reversed);
plot_object.viewport.zoom_x(fig, anchor, scale);
plot_object.viewport.zoom_x(&fig, anchor, scale);
}
if zoom_y {
let anchor = screen_to_y(p.y, plot, fig.y.min, fig.y.span(), fig.y.reversed);
plot_object.viewport.zoom_y(anchor, scale);
}
let viewport = plot_object.viewport.clone();
viewport.apply_to(&mut plot_object.figure);
plot_object.apply_viewport();
app.doc.dirty = true;
ui.ctx()
.request_repaint_after(std::time::Duration::from_millis(200));
Expand Down
8 changes: 4 additions & 4 deletions crates/app/src/ui/canvas/painting.rs
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@ pub(crate) fn paint_analysis_selection(
let Some(plot_object) = object.plot() else {
return;
};
let fig = &plot_object.figure;
let fig = plot_object.figure();
let x0 = x_to_screen(
selection.x_range.min,
plot,
Expand Down Expand Up @@ -139,7 +139,7 @@ pub(crate) fn paint_regions(
let Some(fig) = app.doc.canvases[ci]
.object(object_id)
.and_then(|object| object.plot())
.map(|plot| &plot.figure)
.map(|plot| plot.figure())
else {
return;
};
Expand Down Expand Up @@ -236,7 +236,7 @@ pub(crate) fn paint_integrals(
let Some(fig) = app.doc.canvases[ci]
.object(object_id)
.and_then(|object| object.plot())
.map(|plot| &plot.figure)
.map(|plot| plot.figure())
else {
return;
};
Expand Down Expand Up @@ -363,7 +363,7 @@ pub(crate) fn paint_peaks(
let Some(fig) = app.doc.canvases[ci]
.object(object_id)
.and_then(|object| object.plot())
.map(|plot| &plot.figure)
.map(|plot| plot.figure())
else {
return;
};
Expand Down
2 changes: 1 addition & 1 deletion crates/app/src/ui/canvas/peaks.rs
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ pub(crate) fn handle_peaks(
.object(object_id)
.and_then(|object| object.plot())
.unwrap()
.figure
.figure()
.clone();
let sc = Screen {
plot,
Expand Down
2 changes: 1 addition & 1 deletion crates/app/src/ui/canvas/phase.rs
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ pub(crate) fn handle_phase_before_paint(
let Some(figure) = app.doc.canvases[ci]
.object(object_id)
.and_then(|object| object.plot())
.map(|plot| &plot.figure)
.map(|plot| plot.figure())
else {
return;
};
Expand Down
2 changes: 1 addition & 1 deletion crates/app/src/ui/canvas/regions.rs
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ pub(crate) fn handle_region_drag(
.object(object_id)
.and_then(|object| object.plot())
.unwrap()
.figure;
.figure();
(fig.x.min, fig.x.span(), fig.x.reversed)
};

Expand Down
4 changes: 2 additions & 2 deletions crates/app/src/ui/canvas/slices.rs
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ pub(crate) fn handle_slice(
let Some(fig) = app.doc.canvases[ci]
.object(object_id)
.and_then(|o| o.plot())
.map(|pl| &pl.figure)
.map(|pl| pl.figure())
else {
return;
};
Expand Down Expand Up @@ -101,7 +101,7 @@ pub(crate) fn paint_slice(
let Some(fig) = app.doc.canvases[ci]
.object(object_id)
.and_then(|o| o.plot())
.map(|pl| &pl.figure)
.map(|pl| pl.figure())
else {
return;
};
Expand Down
2 changes: 1 addition & 1 deletion crates/app/src/ui/canvas/snap.rs
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,7 @@ pub(crate) fn snap_object_frame(
ui: &Ui,
) -> (ObjectFrame, Vec<SnapGuide>) {
let alt = ui.input(|i| i.modifiers.alt);
if !app.session.ui.snap_enabled || alt {
if !app.settings.general.snap_enabled || alt {
return (candidate, Vec::new());
}
let canvas = &app.doc.canvases[ci];
Expand Down
4 changes: 2 additions & 2 deletions crates/app/src/ui/canvas/tiling.rs
Original file line number Diff line number Diff line change
Expand Up @@ -142,7 +142,7 @@ fn layout_item(canvas: &CanvasDocument, id: ObjectId) -> Option<plotx_core::layo
let plot = object.plot()?;
Some(plotx_core::layout::layout_item(
id,
&plot.figure,
plot.figure(),
object.frame,
))
}
Expand Down Expand Up @@ -210,7 +210,7 @@ pub(crate) fn paint_tile_ghost(app: &PlotxApp, painter: &egui::Painter, chrome:
return;
}
let screen = PlotRect::new(ghost.x, ghost.y, ghost.width, ghost.height);
plotx_render::screen::paint(painter, screen, &plot.figure, app.session.board.zoom);
plotx_render::screen::paint(painter, screen, plot.figure(), app.session.board.zoom);
let r = EguiRect::from_min_size(
Pos2::new(ghost.x, ghost.y),
Vec2::new(ghost.width, ghost.height),
Expand Down
Loading
Loading