From 9ab8b93460dff75299274027304e5c4f5ab9eb91 Mon Sep 17 00:00:00 2001 From: Alberto Nidasio <alberto.nidasio@skywarder.eu> Date: Tue, 7 Jan 2025 21:03:24 +0100 Subject: [PATCH] Enables rotating PID elements --- src/ui/panes/pid_drawing_tool.rs | 29 +++++++++++++++++-- src/ui/panes/pid_drawing_tool/pid_elements.rs | 1 + 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/src/ui/panes/pid_drawing_tool.rs b/src/ui/panes/pid_drawing_tool.rs index 712cfa5..26150f1 100644 --- a/src/ui/panes/pid_drawing_tool.rs +++ b/src/ui/panes/pid_drawing_tool.rs @@ -1,8 +1,9 @@ mod pid_elements; -use egui::{epaint::PathStroke, Color32, PointerButton, Pos2, Sense, Stroke, Theme}; +use egui::{epaint::PathStroke, Color32, PointerButton, Pos2, Sense, Theme, Vec2}; use pid_elements::{PidElement, PidSymbol}; use serde::{Deserialize, Serialize}; +use std::f32::consts::PI; use strum::IntoEnumIterator; use crate::ui::composable_view::PaneResponse; @@ -84,7 +85,9 @@ impl PaneBehavior for PidPane { ), ); - egui::Image::new(element.get_image(theme)).paint_at(ui, image_rect); + egui::Image::new(element.get_image(theme)) + .rotate(element.rotation, Vec2::new(0.5, 0.5)) + .paint_at(ui, image_rect); } let (_, response) = ui.allocate_at_least(window_rect.size(), Sense::click_and_drag()); @@ -108,6 +111,27 @@ impl PaneBehavior for PidPane { .position(|element| element.contains(self.context_menu_pos)); ui.close_menu(); } + + if ui.button("Rotate 90° ⟲").clicked() { + if let Some(elem) = self + .elements + .iter_mut() + .find(|element| element.contains(self.context_menu_pos)) + { + elem.rotation += PI / 2.0; + } + ui.close_menu(); + } + if ui.button("Rotate 90° ⟳").clicked() { + if let Some(elem) = self + .elements + .iter_mut() + .find(|element| element.contains(self.context_menu_pos)) + { + elem.rotation -= PI / 2.0; + } + ui.close_menu(); + } } ui.menu_button("Symbols", |ui| { @@ -117,6 +141,7 @@ impl PaneBehavior for PidPane { pos: self.context_menu_pos, size: 10, symbol, + rotation: 0.0, }); ui.close_menu(); } diff --git a/src/ui/panes/pid_drawing_tool/pid_elements.rs b/src/ui/panes/pid_drawing_tool/pid_elements.rs index 7c12961..fd571ae 100644 --- a/src/ui/panes/pid_drawing_tool/pid_elements.rs +++ b/src/ui/panes/pid_drawing_tool/pid_elements.rs @@ -7,6 +7,7 @@ pub struct PidElement { pub pos: (i32, i32), pub size: i32, pub symbol: PidSymbol, + pub rotation: f32, } #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, EnumIter, Display)] -- GitLab