function val (name, value, context) {
      const set = value !== undefined
      if (!set) {
        if (isNullish(name)) name = 'xy'
        switch (name.toLowerCase()) {
          case 'x': return x
          case 'y': return y
          case 'xy':
          default: return { x, y }
        }
      }
      if (!isNullish(context) && context === that) return undefined
      let changed = false

      let newX; let newY
      if (isNullish(name)) name = 'xy'
      switch (name.toLowerCase()) {
        case 'x':
          newX = (value && ((value.x && value.x | 0) || value | 0)) || 0
          break
        case 'y':
          newY = (value && ((value.y && value.y | 0) || value | 0)) || 0
          break
        case 'xy':
        default:
          newX = (value && value.x && value.x | 0) || 0
          newY = (value && value.y && value.y | 0) || 0
          break
      }
      if (!isNullish(newX)) {
        if (newX < minX) newX = minX
        else if (newX > maxX) newX = maxX
        if (x !== newX) {
          x = newX
          changed = true
        }
      }
      if (!isNullish(newY)) {
        if (newY < minY) newY = minY
        else if (newY > maxY) newY = maxY
        if (y !== newY) {
          y = newY
          changed = true
        }
      }
      changed && fireChangeEvents.call(that, context || that)
      return undefined
    }
Get or set a value.
@param {?("xy"|"x"|"y")} name
@param {module:math.XYObject} value
@param {module:jPicker.Slider} context
@returns {module:math.XYObject|Float|void}