mirror of https://codeberg.org/topola/topola.git
fix(viewport): only capture mouse clicks actually intended for the viewport
This commit is contained in:
parent
0a4a3e8351
commit
b070cd787b
|
|
@ -50,9 +50,12 @@ impl Viewport {
|
||||||
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 response = ui.interact(viewport_rect, id, egui::Sense::click());
|
||||||
|
// NOTE: we use `interact_pos` instead of `latest_pos` to handle "pointer gone"
|
||||||
|
// events more graceful
|
||||||
let latest_pos = self.transform.inverse()
|
let latest_pos = self.transform.inverse()
|
||||||
* (ctx.input(|i| i.pointer.latest_pos().unwrap_or_default()));
|
* (ctx.input(|i| i.pointer.interact_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());
|
||||||
|
|
@ -68,7 +71,7 @@ impl Viewport {
|
||||||
let overlay = &mut workspace.overlay;
|
let overlay = &mut workspace.overlay;
|
||||||
let latest_point = point! {x: latest_pos.x as f64, y: -latest_pos.y as f64};
|
let latest_point = point! {x: latest_pos.x as f64, y: -latest_pos.y as f64};
|
||||||
|
|
||||||
if ctx.input(|i| i.pointer.any_click()) {
|
if response.clicked() {
|
||||||
if menu_bar.is_placing_via {
|
if menu_bar.is_placing_via {
|
||||||
workspace.interactor.execute(Command::PlaceVia(ViaWeight {
|
workspace.interactor.execute(Command::PlaceVia(ViaWeight {
|
||||||
from_layer: 0,
|
from_layer: 0,
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue