render method

  1. @override
void render(
  1. Buffer buffer,
  2. Rect area
)
override

Renders the widget onto the provided buffer within the specified area.

Implementation

@override
void render(Buffer buffer, Rect area) {
  final percent = ((value - min) / (max - min)).clamp(0.0, 1.0);

  if (axis == SliderAxis.horizontal) {
    final trackLength = area.width;
    if (trackLength <= 0) return;
    final thumbPos = (percent * (trackLength - 1)).round();
    final tc = trackChar == '─' ? '─' : trackChar;

    for (int i = 0; i < trackLength; i++) {
      if (i == thumbPos) {
        buffer.writeString(i, 0, thumbChar, thumbStyle);
      } else {
        buffer.writeString(i, 0, tc, trackStyle);
      }
    }
  } else {
    final trackLength = area.height;
    if (trackLength <= 0) return;
    // In terminal, Y=0 is top. For vertical sliders, top is max.
    final thumbPos = trackLength - 1 - (percent * (trackLength - 1)).round();
    final tc = trackChar == '─' ? '│' : trackChar;

    for (int i = 0; i < trackLength; i++) {
      if (i == thumbPos) {
        buffer.writeString(0, i, thumbChar, thumbStyle);
      } else {
        buffer.writeString(0, i, tc, trackStyle);
      }
    }
  }
}