7 Commits

Author SHA1 Message Date
76670f416f chore: Release egui_knob version 0.1.4 2025-02-03 15:55:43 +03:00
0aec31e81d set MIT license in cargo.toml 2025-02-03 15:53:54 +03:00
81bc2295fb set MIT license in cargo.toml 2025-02-03 15:53:37 +03:00
6a49e6f961 fix: knob size 2025-02-03 15:50:55 +03:00
b20a393479 chore: Release egui_knob version 0.1.3 2025-02-03 15:29:59 +03:00
e7f091a2f8 update cargo.toml 2025-02-03 15:28:23 +03:00
f5b4bb7728 updated readme and cargo,toml 2025-02-03 15:22:13 +03:00
4 changed files with 23 additions and 12 deletions

2
Cargo.lock generated
View File

@@ -896,7 +896,7 @@ dependencies = [
[[package]] [[package]]
name = "egui_knob" name = "egui_knob"
version = "0.1.2" version = "0.1.4"
dependencies = [ dependencies = [
"eframe", "eframe",
"egui", "egui",

View File

@@ -1,6 +1,6 @@
[package] [package]
name = "egui_knob" name = "egui_knob"
version = "0.1.2" version = "0.1.4"
edition = "2021" edition = "2021"
description = "A simple knob widget for egui" description = "A simple knob widget for egui"
homepage = "https://github.com/obsqrbtz/egui_knob" homepage = "https://github.com/obsqrbtz/egui_knob"

View File

@@ -20,7 +20,7 @@ To use the Knob widget in your project, add the following to your `Cargo.toml`:
```toml ```toml
[dependencies] [dependencies]
egui = "0.30" egui = "0.30"
egui_knob = "0.1.1" egui_knob = "*"
``` ```
## Usage example ## Usage example

View File

@@ -81,7 +81,7 @@ impl<'a> Knob<'a> {
impl Widget for Knob<'_> { impl Widget for Knob<'_> {
fn ui(self, ui: &mut Ui) -> Response { fn ui(self, ui: &mut Ui) -> Response {
let desired_size = Vec2::splat(self.size); let knob_size = Vec2::splat(self.size);
let label_size = if let Some(label) = &self.label { let label_size = if let Some(label) = &self.label {
let font_id = egui::FontId::proportional(self.font_size); let font_id = egui::FontId::proportional(self.font_size);
@@ -97,8 +97,17 @@ impl Widget for Knob<'_> {
Vec2::ZERO Vec2::ZERO
}; };
// Adjust desired size to include label space let label_padding = 12.0;
let adjusted_size = Vec2::new(desired_size.x, desired_size.y + label_size.y + 12.0); // 12.0 is an offset for spacing
let adjusted_size = match self.label_position {
LabelPosition::Top | LabelPosition::Bottom => {
Vec2::new(knob_size.x, knob_size.y + label_size.y + label_padding)
}
LabelPosition::Left | LabelPosition::Right => {
Vec2::new(knob_size.x + label_size.x + label_padding, knob_size.y)
}
};
let (rect, response) = ui.allocate_exact_size(adjusted_size, Sense::drag()); let (rect, response) = ui.allocate_exact_size(adjusted_size, Sense::drag());
if response.dragged() { if response.dragged() {
@@ -110,7 +119,7 @@ impl Widget for Knob<'_> {
let painter = ui.painter(); let painter = ui.painter();
let center = rect.center(); let center = rect.center();
let radius = rect.width() / 2.0; let radius = knob_size.x / 2.0;
let angle = (*self.value - self.min) / (self.max - self.min) * std::f32::consts::PI * 1.5 let angle = (*self.value - self.min) / (self.max - self.min) * std::f32::consts::PI * 1.5
- std::f32::consts::PI; - std::f32::consts::PI;
@@ -147,19 +156,21 @@ impl Widget for Knob<'_> {
) )
.size(); .size();
let label_offset = 12.0; let label_offset = label_padding;
let label_pos = match self.label_position { let label_pos = match self.label_position {
LabelPosition::Top => { LabelPosition::Top => {
center + Vec2::new(-text_size.x / 2.0, -radius - label_offset - text_size.y) rect.center()
+ Vec2::new(-text_size.x / 2.0, -radius - label_offset - text_size.y)
} }
LabelPosition::Bottom => { LabelPosition::Bottom => {
center + Vec2::new(-text_size.x / 2.0, radius + label_offset) rect.center() + Vec2::new(-text_size.x / 2.0, radius + label_offset)
} }
LabelPosition::Left => { LabelPosition::Left => {
center + Vec2::new(-radius - label_offset - text_size.x, -text_size.y / 2.0) rect.center()
+ Vec2::new(-radius - label_offset - text_size.x, -text_size.y / 2.0)
} }
LabelPosition::Right => { LabelPosition::Right => {
center + Vec2::new(radius + label_offset, -text_size.y / 2.0) rect.center() + Vec2::new(radius + label_offset, -text_size.y / 2.0)
} }
}; };