code: private List<Float> interpolatePositions(PositionInfo left, PositionInfo right, int steps) {
  
          if (left.isOutOfBounds()) {
              if (right.isNormal()) {
                  return interpolateDownwards(right.getNavPos(), steps);
              } else if (right.isMax() || right.isOutOfBounds()) {
                  return interpolateEmpty(steps);
              } else {
                  // can't happen
                  assert false;
              }
          } else if (left.isNormal()) {
              if (right.isOutOfBounds() || right.isMax()) {
                  return interpolateUpwards(left.getNavPos(), steps);
              } else if (right.isNormal()) {
                  return interpolateBetween(left.getNavPos(), right.getNavPos(), steps);
              } else {
                  // can't happen
                  assert false;
              }
          } else {
              // can't happen
              assert false;
          }
          return null;
  
      }
docs: Generates the new navigation positions for a range of navigation items.<p>
  
  @param left the position info for the navigation entry left of the range
  @param right the position info for the navigation entry right of the range
  @param steps the number of entries in the range
  
  @return the list of new navigation positions