Merge pull request 'Fix sandbox coords' (#39) from fix-sandbox-coords into main

Reviewed-on: #39
This commit is contained in:
mars 2022-11-16 00:12:59 +00:00
commit 7f7a88cb15
1 changed files with 19 additions and 11 deletions

View File

@ -1,7 +1,7 @@
// Copyright (c) 2022 Marceline Cramer
// SPDX-License-Identifier: AGPL-3.0-or-later
use canary::{CursorEventKind, Panel, Runtime, Script};
use canary::{CursorEventKind, Panel, Runtime, Script, PX_PER_MM};
use eframe::egui;
use std::time::Instant;
@ -70,6 +70,7 @@ impl eframe::App for App {
index,
msg_buf: String::new(),
show_msg: false,
current_size: Default::default(),
};
self.panels.push(panel);
@ -91,6 +92,7 @@ pub struct PanelWindow {
pub index: usize,
pub msg_buf: String,
pub show_msg: bool,
pub current_size: egui::Vec2,
}
impl PanelWindow {
@ -101,21 +103,27 @@ impl PanelWindow {
ui.checkbox(&mut self.show_msg, "Show Message Editor");
});
let size = egui::vec2(800.0, 800.0);
let sense = egui::Sense {
click: true,
drag: true,
focusable: true,
};
let (rect, response) = ui.allocate_at_least(size, sense);
let desired_size = ui.available_size();
let response = ui.allocate_response(desired_size, sense);
let rect = response.rect;
if rect.size() != self.current_size {
let size = rect.size();
self.current_size = size;
let size = canary::Vec2::new(size.x, size.y);
self.panel.on_resize(size * PX_PER_MM);
}
if let Some(hover_pos) = response.hover_pos() {
let local = (hover_pos - rect.left_top()) / rect.size();
let norm = local * 2.0 - egui::vec2(1.0, 1.0);
let x = norm.x;
let y = -norm.y;
let pos = canary::Vec2 { x, y };
let local = (hover_pos - rect.left_top()) * PX_PER_MM;
let pos = canary::Vec2::new(local.x, local.y);
let kind = if response.drag_started() {
CursorEventKind::Select
@ -142,9 +150,9 @@ impl PanelWindow {
canary::DrawCommand::Mesh { vertices, indices } => {
for v in vertices.iter() {
use egui::epaint::Vertex;
let pos = egui::pos2(v.position.x, -v.position.y);
let pos = pos.to_vec2() / 2.0 + egui::vec2(0.5, 0.5);
let pos = rect.left_top() + pos * rect.size();
let pos = v.position / PX_PER_MM;
let pos = egui::pos2(pos.x, pos.y);
let pos = pos + rect.left_top().to_vec2();
let (r, g, b, a) = v.color.to_rgba_unmultiplied();
let color = egui::Color32::from_rgba_unmultiplied(r, g, b, a);
let v = Vertex { pos, uv, color };