Aspect ratio scaling for transform editor
Feels like there _must_ be a simpler way to do this math
This commit is contained in:
parent
38f383a0b2
commit
2dfdea361e
@ -33,9 +33,7 @@ impl eframe::App for TransformEditorApp {
|
||||
});
|
||||
|
||||
egui::CentralPanel::default().show(ctx, |ui| {
|
||||
egui::Frame::canvas(ui.style()).show(ui, |ui| {
|
||||
self.transform_editor.ui(ui)
|
||||
})
|
||||
self.transform_editor.ui(ui)
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@ -43,7 +43,21 @@ impl TransformEditor {
|
||||
pub fn ui(&mut self, ui: &mut egui::Ui) -> egui::Response {
|
||||
let (response, painter) = ui.allocate_painter(ui.available_size(), Sense::hover());
|
||||
|
||||
let transform_area = Rect::from_min_max(egui::pos2(-2.0, -2.0), egui::pos2(2.0, 2.0));
|
||||
let interact_rect = response.interact_rect;
|
||||
|
||||
// Aspect-ratio scaling; minimum dimension will be [-2.0, 2.0]
|
||||
let interact_max_dim = interact_rect.width().max(interact_rect.height());
|
||||
let interact_min_dim = interact_rect.width().min(interact_rect.height());
|
||||
let interact_max_is_width = interact_max_dim == interact_rect.width();
|
||||
let ifs_scale = interact_max_dim / interact_min_dim * 4.0;
|
||||
|
||||
let ifs_min = if interact_max_is_width {
|
||||
egui::pos2(-ifs_scale / 2.0, -2.0)
|
||||
} else {
|
||||
egui::pos2(-2.0, -ifs_scale / 2.0)
|
||||
};
|
||||
|
||||
let transform_area = Rect::from_min_max(ifs_min, ifs_min * -1.0);
|
||||
let to_screen = emath::RectTransform::from_to(transform_area, response.interact_rect);
|
||||
|
||||
self.transforms.iter().map(|coef| {
|
||||
|
Loading…
Reference in New Issue
Block a user