handleMouseEvent method
Handles mouse events to update the slider's value on drag or click.
Implementation
@override
void handleMouseEvent(MouseEvent event, int localX, int localY, Rect area) {
if (event.type == MouseEventType.press) {
if (widget.axis == SliderAxis.horizontal) {
if (localY != 0) return;
} else {
if (localX != 0) return;
}
_isDragging = true;
} else if (event.type == MouseEventType.drag) {
if (!_isDragging) return;
} else if (event.type == MouseEventType.release) {
_isDragging = false;
return;
} else {
return;
}
if (widget.axis == SliderAxis.horizontal) {
final trackLength = area.width;
if (trackLength <= 1) return;
final percent = (localX / (trackLength - 1)).clamp(0.0, 1.0);
widget.value = widget.min + percent * (widget.max - widget.min);
widget.onChanged?.call(widget.value);
} else {
final trackLength = area.height;
if (trackLength <= 1) return;
// For vertical slider, top (y=0) is max, bottom (y=height-1) is min
final percent = 1.0 - (localY / (trackLength - 1)).clamp(0.0, 1.0);
widget.value = widget.min + percent * (widget.max - widget.min);
widget.onChanged?.call(widget.value);
}
}