mirror of
https://github.com/obsqrbtz/egui_knob.git
synced 2026-04-09 04:29:10 +03:00
fix: hover highlights
This commit is contained in:
28
src/lib.rs
28
src/lib.rs
@@ -196,6 +196,16 @@ impl<'a> Knob<'a> {
|
|||||||
self.step = Some(step);
|
self.step = Some(step);
|
||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
// Private
|
||||||
|
fn compute_angle(&self) -> f32 {
|
||||||
|
if self.min == self.max {
|
||||||
|
self.min_angle
|
||||||
|
} else {
|
||||||
|
self.min_angle
|
||||||
|
+ (*self.value - self.min) / (self.max - self.min)
|
||||||
|
* (self.max_angle - self.min_angle)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Widget for Knob<'_> {
|
impl Widget for Knob<'_> {
|
||||||
@@ -261,21 +271,15 @@ impl Widget for Knob<'_> {
|
|||||||
|
|
||||||
let center = knob_rect.center();
|
let center = knob_rect.center();
|
||||||
let radius = knob_size.x / 2.0;
|
let radius = knob_size.x / 2.0;
|
||||||
let angle = if self.min == self.max {
|
let angle = self.compute_angle();
|
||||||
// If min == max, just return min angle
|
let knob_hovered = response.hovered();
|
||||||
// That's a edge case, using a 0 range knob is pretty useless
|
let knob_color = if knob_hovered {
|
||||||
self.min_angle
|
self.knob_color.linear_multiply(1.2)
|
||||||
} else {
|
} else {
|
||||||
self.min_angle
|
self.knob_color
|
||||||
+ (*self.value - self.min) / (self.max - self.min)
|
|
||||||
* (self.max_angle - self.min_angle)
|
|
||||||
};
|
};
|
||||||
|
|
||||||
painter.circle_stroke(
|
painter.circle_stroke(center, radius, Stroke::new(self.stroke_width, knob_color));
|
||||||
center,
|
|
||||||
radius,
|
|
||||||
Stroke::new(self.stroke_width, self.knob_color),
|
|
||||||
);
|
|
||||||
|
|
||||||
match self.style {
|
match self.style {
|
||||||
KnobStyle::Wiper => {
|
KnobStyle::Wiper => {
|
||||||
|
|||||||
Reference in New Issue
Block a user