From 43ad4f78f3b30eaadaf12a72ab91c09005ba333d Mon Sep 17 00:00:00 2001 From: Varphone Wong Date: Sat, 27 Apr 2024 16:39:16 +0800 Subject: [PATCH] `egui_demo_lib`: Add arc and pie shapes example --- .../src/demo/misc_demo_window.rs | 55 +++++++++++++++++++ 1 file changed, 55 insertions(+) diff --git a/crates/egui_demo_lib/src/demo/misc_demo_window.rs b/crates/egui_demo_lib/src/demo/misc_demo_window.rs index edb19c3ea..762aa8ba5 100644 --- a/crates/egui_demo_lib/src/demo/misc_demo_window.rs +++ b/crates/egui_demo_lib/src/demo/misc_demo_window.rs @@ -20,6 +20,12 @@ pub struct MiscDemoWindow { dummy_bool: bool, dummy_usize: usize, checklist: [bool; 3], + + start_angle: f32, + end_angle: f32, + radius: f32, + fill: Color32, + stroke: Stroke, } impl Default for MiscDemoWindow { @@ -36,6 +42,12 @@ impl Default for MiscDemoWindow { dummy_bool: false, dummy_usize: 0, checklist: std::array::from_fn(|i| i == 0), + + start_angle: 0.0, + end_angle: std::f32::consts::FRAC_PI_2, + radius: 20.0, + fill: Color32::GREEN, + stroke: Stroke::new(1.0, Color32::RED), } } } @@ -195,6 +207,49 @@ impl View for MiscDemoWindow { } }); }); + + CollapsingHeader::new("Arc and Pie") + .default_open(false) + .show(ui, |ui| { + ui.vertical(|ui| { + ui.horizontal_wrapped(|ui| { + ui.label("Start angle:"); + ui.drag_angle(&mut self.start_angle); + ui.label("End angle:"); + ui.drag_angle(&mut self.end_angle); + ui.label("Radius:"); + ui.add(egui::Slider::new(&mut self.radius, 0.0..=100.0)); + ui.end_row(); + ui.label("Fill:"); + ui.color_edit_button_srgba(&mut self.fill); + ui.label("Stroke:"); + ui.add(&mut self.stroke); + }); + ui.separator(); + ui.horizontal_wrapped(|ui| { + let r = self.radius; + let size = Vec2::splat(2.0 * r + self.stroke.width + 5.0); + let (rect, _response) = ui.allocate_at_least(size, Sense::hover()); + ui.painter().arc( + rect.center(), + r, + self.start_angle, + self.end_angle, + self.stroke, + ); + let (rect, _response) = ui.allocate_at_least(size, Sense::hover()); + ui.painter().pie( + rect.center(), + r, + self.start_angle, + self.end_angle, + self.fill, + self.stroke, + ); + }); + ui.separator(); + }); + }); } }