static void OffsetMiddle(DeviceAxisSettings settings, float offset, float minimumLimit, float maximumLimit)
        {
            if (offset > 0 && settings.Maximum + offset > maximumLimit)
            {
                offset = Math.Min(offset, maximumLimit - settings.Maximum);
            }
            else if (offset < 0 && settings.Minimum + offset < minimumLimit)
            {
                offset = Math.Max(offset, minimumLimit - settings.Minimum);
            }

            settings.Minimum = MathUtils.Clamp(settings.Minimum + offset, minimumLimit, maximumLimit - 1);
            settings.Maximum = MathUtils.Clamp(settings.Maximum + offset, minimumLimit + 1, maximumLimit);
        }
        static void OffsetSize(DeviceAxisSettings settings, float offset, float minimumLimit, float maximumLimit)
        {
            var middle     = (settings.Maximum + settings.Minimum) / 2.0f;
            var newRange   = MathUtils.Clamp(settings.Maximum - settings.Minimum + offset, 1, maximumLimit - minimumLimit);
            var newMaximum = middle + newRange / 2;
            var newMinimum = middle - newRange / 2;

            if (newMaximum > maximumLimit)
            {
                newMinimum -= newMaximum - maximumLimit;
            }
            if (newMinimum < minimumLimit)
            {
                newMaximum += minimumLimit - newMinimum;
            }

            settings.Minimum = MathUtils.Clamp(newMinimum, minimumLimit, maximumLimit - 1);
            settings.Maximum = MathUtils.Clamp(newMaximum, minimumLimit + 1, maximumLimit);
        }
 static void SetMaximum(DeviceAxisSettings settings, float value, float maximumLimit) => settings.Maximum = MathUtils.Clamp(value, settings.Minimum + 1, maximumLimit);