another sizing fix

This commit is contained in:
2025-02-03 16:23:23 +03:00
parent 76670f416f
commit 268db4255e
3 changed files with 38 additions and 16 deletions

26
.vscode/launch.json vendored Normal file
View File

@@ -0,0 +1,26 @@
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"type": "lldb",
"request": "launch",
"name": "Debug example 'example_knob'",
"cargo": {
"args": [
"build",
"--example=example_knob",
"--package=egui_knob"
],
"filter": {
"name": "example_knob",
"kind": "example"
}
},
"args": [],
"cwd": "${workspaceFolder}"
},
]
}

View File

@@ -33,7 +33,6 @@ impl eframe::App for KnobExample {
.with_label("Gain", egui_knob::LabelPosition::Bottom) .with_label("Gain", egui_knob::LabelPosition::Bottom)
.with_size(50.0), .with_size(50.0),
); );
ui.add_space(15.0);
ui.add( ui.add(
Knob::new(&mut self.value, 0.0, 100.0, egui_knob::KnobStyle::Dot) Knob::new(&mut self.value, 0.0, 100.0, egui_knob::KnobStyle::Dot)
.with_label("Gain", egui_knob::LabelPosition::Bottom) .with_label("Gain", egui_knob::LabelPosition::Bottom)
@@ -44,7 +43,6 @@ impl eframe::App for KnobExample {
) )
.with_size(50.0), .with_size(50.0),
); );
ui.add_space(15.0);
ui.add( ui.add(
Knob::new(&mut self.value, 0.0, 100.0, egui_knob::KnobStyle::Wiper) Knob::new(&mut self.value, 0.0, 100.0, egui_knob::KnobStyle::Wiper)
.with_label("Gain", egui_knob::LabelPosition::Bottom) .with_label("Gain", egui_knob::LabelPosition::Bottom)

View File

@@ -97,16 +97,12 @@ impl Widget for Knob<'_> {
Vec2::ZERO Vec2::ZERO
}; };
let label_padding = 12.0; let label_padding = 2.0;
let adjusted_size = match self.label_position { let adjusted_size = Vec2::new(
LabelPosition::Top | LabelPosition::Bottom => { knob_size.x + label_size.y + label_padding * 6.0,
Vec2::new(knob_size.x, knob_size.y + label_size.y + label_padding) knob_size.y + label_size.y + label_padding * 6.0,
} );
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());
@@ -156,21 +152,20 @@ impl Widget for Knob<'_> {
) )
.size(); .size();
let label_offset = label_padding;
let label_pos = match self.label_position { let label_pos = match self.label_position {
LabelPosition::Top => { LabelPosition::Top => {
rect.center() rect.center()
+ Vec2::new(-text_size.x / 2.0, -radius - label_offset - text_size.y) + Vec2::new(-text_size.x / 2.0, -radius - label_padding - text_size.y)
} }
LabelPosition::Bottom => { LabelPosition::Bottom => {
rect.center() + Vec2::new(-text_size.x / 2.0, radius + label_offset) rect.center() + Vec2::new(-text_size.x / 2.0, radius + label_padding)
} }
LabelPosition::Left => { LabelPosition::Left => {
rect.center() rect.center()
+ Vec2::new(-radius - label_offset - text_size.x, -text_size.y / 2.0) + Vec2::new(-radius - label_padding - text_size.x, -text_size.y / 2.0)
} }
LabelPosition::Right => { LabelPosition::Right => {
rect.center() + Vec2::new(radius + label_offset, -text_size.y / 2.0) rect.center() + Vec2::new(radius + label_padding, -text_size.y / 2.0)
} }
}; };
@@ -183,6 +178,9 @@ impl Widget for Knob<'_> {
); );
} }
// Draw the boundary rectangle
painter.rect_stroke(rect, 0.0, Stroke::new(1.0, Color32::RED));
response response
} }
} }