From ec6cb0abb4b7669895b6e96fd7581c93b5abd691 Mon Sep 17 00:00:00 2001
From: Mary Guillemard <mary@mary.zone>
Date: Sat, 2 Mar 2024 12:51:05 +0100
Subject: infra: Make Avalonia the default UI  (#6375)

* misc: Move Ryujinx project to Ryujinx.Gtk3

This breaks release CI for now but that's fine.

Signed-off-by: Mary Guillemard <mary@mary.zone>

* misc: Move Ryujinx.Ava project to Ryujinx

This breaks CI for now, but it's fine.

Signed-off-by: Mary Guillemard <mary@mary.zone>

* infra: Make Avalonia the default UI

Should fix CI after the previous changes.

GTK3 isn't build by the release job anymore, only by PR CI.

This also ensure that the test-ava update package is still generated to
allow update from the old testing channel.

Signed-off-by: Mary Guillemard <mary@mary.zone>

* Fix missing copy in create_app_bundle.sh

Signed-off-by: Mary Guillemard <mary@mary.zone>

* Fix syntax error

Signed-off-by: Mary Guillemard <mary@mary.zone>

---------

Signed-off-by: Mary Guillemard <mary@mary.zone>
---
 src/Ryujinx/UI/Models/InputConfiguration.cs | 456 ++++++++++++++++++++++++++++
 1 file changed, 456 insertions(+)
 create mode 100644 src/Ryujinx/UI/Models/InputConfiguration.cs

(limited to 'src/Ryujinx/UI/Models/InputConfiguration.cs')

diff --git a/src/Ryujinx/UI/Models/InputConfiguration.cs b/src/Ryujinx/UI/Models/InputConfiguration.cs
new file mode 100644
index 00000000..f1352c6d
--- /dev/null
+++ b/src/Ryujinx/UI/Models/InputConfiguration.cs
@@ -0,0 +1,456 @@
+using Ryujinx.Ava.UI.ViewModels;
+using Ryujinx.Common.Configuration.Hid;
+using Ryujinx.Common.Configuration.Hid.Controller;
+using Ryujinx.Common.Configuration.Hid.Controller.Motion;
+using Ryujinx.Common.Configuration.Hid.Keyboard;
+using System;
+
+namespace Ryujinx.Ava.UI.Models
+{
+    internal class InputConfiguration<TKey, TStick> : BaseModel
+    {
+        private float _deadzoneRight;
+        private float _triggerThreshold;
+        private float _deadzoneLeft;
+        private double _gyroDeadzone;
+        private int _sensitivity;
+        private bool _enableMotion;
+        private float _weakRumble;
+        private float _strongRumble;
+        private float _rangeLeft;
+        private float _rangeRight;
+
+        public InputBackendType Backend { get; set; }
+
+        /// <summary>
+        /// Controller id
+        /// </summary>
+        public string Id { get; set; }
+
+        /// <summary>
+        ///  Controller's Type
+        /// </summary>
+        public ControllerType ControllerType { get; set; }
+
+        /// <summary>
+        ///  Player's Index for the controller
+        /// </summary>
+        public PlayerIndex PlayerIndex { get; set; }
+
+        public TStick LeftJoystick { get; set; }
+        public bool LeftInvertStickX { get; set; }
+        public bool LeftInvertStickY { get; set; }
+        public bool RightRotate90 { get; set; }
+        public TKey LeftControllerStickButton { get; set; }
+
+        public TStick RightJoystick { get; set; }
+        public bool RightInvertStickX { get; set; }
+        public bool RightInvertStickY { get; set; }
+        public bool LeftRotate90 { get; set; }
+        public TKey RightControllerStickButton { get; set; }
+
+        public float DeadzoneLeft
+        {
+            get => _deadzoneLeft;
+            set
+            {
+                _deadzoneLeft = MathF.Round(value, 3);
+
+                OnPropertyChanged();
+            }
+        }
+
+        public float RangeLeft
+        {
+            get => _rangeLeft;
+            set
+            {
+                _rangeLeft = MathF.Round(value, 3);
+
+                OnPropertyChanged();
+            }
+        }
+
+        public float DeadzoneRight
+        {
+            get => _deadzoneRight;
+            set
+            {
+                _deadzoneRight = MathF.Round(value, 3);
+
+                OnPropertyChanged();
+            }
+        }
+
+        public float RangeRight
+        {
+            get => _rangeRight;
+            set
+            {
+                _rangeRight = MathF.Round(value, 3);
+
+                OnPropertyChanged();
+            }
+        }
+
+        public float TriggerThreshold
+        {
+            get => _triggerThreshold;
+            set
+            {
+                _triggerThreshold = MathF.Round(value, 3);
+
+                OnPropertyChanged();
+            }
+        }
+
+        public MotionInputBackendType MotionBackend { get; set; }
+
+        public TKey ButtonMinus { get; set; }
+        public TKey ButtonL { get; set; }
+        public TKey ButtonZl { get; set; }
+        public TKey LeftButtonSl { get; set; }
+        public TKey LeftButtonSr { get; set; }
+        public TKey DpadUp { get; set; }
+        public TKey DpadDown { get; set; }
+        public TKey DpadLeft { get; set; }
+        public TKey DpadRight { get; set; }
+
+        public TKey ButtonPlus { get; set; }
+        public TKey ButtonR { get; set; }
+        public TKey ButtonZr { get; set; }
+        public TKey RightButtonSl { get; set; }
+        public TKey RightButtonSr { get; set; }
+        public TKey ButtonX { get; set; }
+        public TKey ButtonB { get; set; }
+        public TKey ButtonY { get; set; }
+        public TKey ButtonA { get; set; }
+
+        public TKey LeftStickUp { get; set; }
+        public TKey LeftStickDown { get; set; }
+        public TKey LeftStickLeft { get; set; }
+        public TKey LeftStickRight { get; set; }
+        public TKey LeftKeyboardStickButton { get; set; }
+
+        public TKey RightStickUp { get; set; }
+        public TKey RightStickDown { get; set; }
+        public TKey RightStickLeft { get; set; }
+        public TKey RightStickRight { get; set; }
+        public TKey RightKeyboardStickButton { get; set; }
+
+        public int Sensitivity
+        {
+            get => _sensitivity;
+            set
+            {
+                _sensitivity = value;
+
+                OnPropertyChanged();
+            }
+        }
+
+        public double GyroDeadzone
+        {
+            get => _gyroDeadzone;
+            set
+            {
+                _gyroDeadzone = Math.Round(value, 3);
+
+                OnPropertyChanged();
+            }
+        }
+
+        public bool EnableMotion
+        {
+            get => _enableMotion; set
+            {
+                _enableMotion = value;
+
+                OnPropertyChanged();
+            }
+        }
+
+        public bool EnableCemuHookMotion { get; set; }
+        public int Slot { get; set; }
+        public int AltSlot { get; set; }
+        public bool MirrorInput { get; set; }
+        public string DsuServerHost { get; set; }
+        public int DsuServerPort { get; set; }
+
+        public bool EnableRumble { get; set; }
+        public float WeakRumble
+        {
+            get => _weakRumble; set
+            {
+                _weakRumble = value;
+
+                OnPropertyChanged();
+            }
+        }
+        public float StrongRumble
+        {
+            get => _strongRumble; set
+            {
+                _strongRumble = value;
+
+                OnPropertyChanged();
+            }
+        }
+
+        public InputConfiguration(InputConfig config)
+        {
+            if (config != null)
+            {
+                Backend = config.Backend;
+                Id = config.Id;
+                ControllerType = config.ControllerType;
+                PlayerIndex = config.PlayerIndex;
+
+                if (config is StandardKeyboardInputConfig keyboardConfig)
+                {
+                    LeftStickUp = (TKey)(object)keyboardConfig.LeftJoyconStick.StickUp;
+                    LeftStickDown = (TKey)(object)keyboardConfig.LeftJoyconStick.StickDown;
+                    LeftStickLeft = (TKey)(object)keyboardConfig.LeftJoyconStick.StickLeft;
+                    LeftStickRight = (TKey)(object)keyboardConfig.LeftJoyconStick.StickRight;
+                    LeftKeyboardStickButton = (TKey)(object)keyboardConfig.LeftJoyconStick.StickButton;
+
+                    RightStickUp = (TKey)(object)keyboardConfig.RightJoyconStick.StickUp;
+                    RightStickDown = (TKey)(object)keyboardConfig.RightJoyconStick.StickDown;
+                    RightStickLeft = (TKey)(object)keyboardConfig.RightJoyconStick.StickLeft;
+                    RightStickRight = (TKey)(object)keyboardConfig.RightJoyconStick.StickRight;
+                    RightKeyboardStickButton = (TKey)(object)keyboardConfig.RightJoyconStick.StickButton;
+
+                    ButtonA = (TKey)(object)keyboardConfig.RightJoycon.ButtonA;
+                    ButtonB = (TKey)(object)keyboardConfig.RightJoycon.ButtonB;
+                    ButtonX = (TKey)(object)keyboardConfig.RightJoycon.ButtonX;
+                    ButtonY = (TKey)(object)keyboardConfig.RightJoycon.ButtonY;
+                    ButtonR = (TKey)(object)keyboardConfig.RightJoycon.ButtonR;
+                    RightButtonSl = (TKey)(object)keyboardConfig.RightJoycon.ButtonSl;
+                    RightButtonSr = (TKey)(object)keyboardConfig.RightJoycon.ButtonSr;
+                    ButtonZr = (TKey)(object)keyboardConfig.RightJoycon.ButtonZr;
+                    ButtonPlus = (TKey)(object)keyboardConfig.RightJoycon.ButtonPlus;
+
+                    DpadUp = (TKey)(object)keyboardConfig.LeftJoycon.DpadUp;
+                    DpadDown = (TKey)(object)keyboardConfig.LeftJoycon.DpadDown;
+                    DpadLeft = (TKey)(object)keyboardConfig.LeftJoycon.DpadLeft;
+                    DpadRight = (TKey)(object)keyboardConfig.LeftJoycon.DpadRight;
+                    ButtonMinus = (TKey)(object)keyboardConfig.LeftJoycon.ButtonMinus;
+                    LeftButtonSl = (TKey)(object)keyboardConfig.LeftJoycon.ButtonSl;
+                    LeftButtonSr = (TKey)(object)keyboardConfig.LeftJoycon.ButtonSr;
+                    ButtonZl = (TKey)(object)keyboardConfig.LeftJoycon.ButtonZl;
+                    ButtonL = (TKey)(object)keyboardConfig.LeftJoycon.ButtonL;
+                }
+                else if (config is StandardControllerInputConfig controllerConfig)
+                {
+                    LeftJoystick = (TStick)(object)controllerConfig.LeftJoyconStick.Joystick;
+                    LeftInvertStickX = controllerConfig.LeftJoyconStick.InvertStickX;
+                    LeftInvertStickY = controllerConfig.LeftJoyconStick.InvertStickY;
+                    LeftRotate90 = controllerConfig.LeftJoyconStick.Rotate90CW;
+                    LeftControllerStickButton = (TKey)(object)controllerConfig.LeftJoyconStick.StickButton;
+
+                    RightJoystick = (TStick)(object)controllerConfig.RightJoyconStick.Joystick;
+                    RightInvertStickX = controllerConfig.RightJoyconStick.InvertStickX;
+                    RightInvertStickY = controllerConfig.RightJoyconStick.InvertStickY;
+                    RightRotate90 = controllerConfig.RightJoyconStick.Rotate90CW;
+                    RightControllerStickButton = (TKey)(object)controllerConfig.RightJoyconStick.StickButton;
+
+                    ButtonA = (TKey)(object)controllerConfig.RightJoycon.ButtonA;
+                    ButtonB = (TKey)(object)controllerConfig.RightJoycon.ButtonB;
+                    ButtonX = (TKey)(object)controllerConfig.RightJoycon.ButtonX;
+                    ButtonY = (TKey)(object)controllerConfig.RightJoycon.ButtonY;
+                    ButtonR = (TKey)(object)controllerConfig.RightJoycon.ButtonR;
+                    RightButtonSl = (TKey)(object)controllerConfig.RightJoycon.ButtonSl;
+                    RightButtonSr = (TKey)(object)controllerConfig.RightJoycon.ButtonSr;
+                    ButtonZr = (TKey)(object)controllerConfig.RightJoycon.ButtonZr;
+                    ButtonPlus = (TKey)(object)controllerConfig.RightJoycon.ButtonPlus;
+
+                    DpadUp = (TKey)(object)controllerConfig.LeftJoycon.DpadUp;
+                    DpadDown = (TKey)(object)controllerConfig.LeftJoycon.DpadDown;
+                    DpadLeft = (TKey)(object)controllerConfig.LeftJoycon.DpadLeft;
+                    DpadRight = (TKey)(object)controllerConfig.LeftJoycon.DpadRight;
+                    ButtonMinus = (TKey)(object)controllerConfig.LeftJoycon.ButtonMinus;
+                    LeftButtonSl = (TKey)(object)controllerConfig.LeftJoycon.ButtonSl;
+                    LeftButtonSr = (TKey)(object)controllerConfig.LeftJoycon.ButtonSr;
+                    ButtonZl = (TKey)(object)controllerConfig.LeftJoycon.ButtonZl;
+                    ButtonL = (TKey)(object)controllerConfig.LeftJoycon.ButtonL;
+
+                    DeadzoneLeft = controllerConfig.DeadzoneLeft;
+                    DeadzoneRight = controllerConfig.DeadzoneRight;
+                    RangeLeft = controllerConfig.RangeLeft;
+                    RangeRight = controllerConfig.RangeRight;
+                    TriggerThreshold = controllerConfig.TriggerThreshold;
+
+                    if (controllerConfig.Motion != null)
+                    {
+                        EnableMotion = controllerConfig.Motion.EnableMotion;
+                        MotionBackend = controllerConfig.Motion.MotionBackend;
+                        GyroDeadzone = controllerConfig.Motion.GyroDeadzone;
+                        Sensitivity = controllerConfig.Motion.Sensitivity;
+
+                        if (controllerConfig.Motion is CemuHookMotionConfigController cemuHook)
+                        {
+                            EnableCemuHookMotion = true;
+                            DsuServerHost = cemuHook.DsuServerHost;
+                            DsuServerPort = cemuHook.DsuServerPort;
+                            Slot = cemuHook.Slot;
+                            AltSlot = cemuHook.AltSlot;
+                            MirrorInput = cemuHook.MirrorInput;
+                        }
+
+                        if (controllerConfig.Rumble != null)
+                        {
+                            EnableRumble = controllerConfig.Rumble.EnableRumble;
+                            WeakRumble = controllerConfig.Rumble.WeakRumble;
+                            StrongRumble = controllerConfig.Rumble.StrongRumble;
+                        }
+                    }
+                }
+            }
+        }
+
+        public InputConfiguration()
+        {
+        }
+
+        public InputConfig GetConfig()
+        {
+            if (Backend == InputBackendType.WindowKeyboard)
+            {
+                return new StandardKeyboardInputConfig
+                {
+                    Id = Id,
+                    Backend = Backend,
+                    PlayerIndex = PlayerIndex,
+                    ControllerType = ControllerType,
+                    LeftJoycon = new LeftJoyconCommonConfig<Key>
+                    {
+                        DpadUp = (Key)(object)DpadUp,
+                        DpadDown = (Key)(object)DpadDown,
+                        DpadLeft = (Key)(object)DpadLeft,
+                        DpadRight = (Key)(object)DpadRight,
+                        ButtonL = (Key)(object)ButtonL,
+                        ButtonZl = (Key)(object)ButtonZl,
+                        ButtonSl = (Key)(object)LeftButtonSl,
+                        ButtonSr = (Key)(object)LeftButtonSr,
+                        ButtonMinus = (Key)(object)ButtonMinus,
+                    },
+                    RightJoycon = new RightJoyconCommonConfig<Key>
+                    {
+                        ButtonA = (Key)(object)ButtonA,
+                        ButtonB = (Key)(object)ButtonB,
+                        ButtonX = (Key)(object)ButtonX,
+                        ButtonY = (Key)(object)ButtonY,
+                        ButtonPlus = (Key)(object)ButtonPlus,
+                        ButtonSl = (Key)(object)RightButtonSl,
+                        ButtonSr = (Key)(object)RightButtonSr,
+                        ButtonR = (Key)(object)ButtonR,
+                        ButtonZr = (Key)(object)ButtonZr,
+                    },
+                    LeftJoyconStick = new JoyconConfigKeyboardStick<Key>
+                    {
+                        StickUp = (Key)(object)LeftStickUp,
+                        StickDown = (Key)(object)LeftStickDown,
+                        StickRight = (Key)(object)LeftStickRight,
+                        StickLeft = (Key)(object)LeftStickLeft,
+                        StickButton = (Key)(object)LeftKeyboardStickButton,
+                    },
+                    RightJoyconStick = new JoyconConfigKeyboardStick<Key>
+                    {
+                        StickUp = (Key)(object)RightStickUp,
+                        StickDown = (Key)(object)RightStickDown,
+                        StickLeft = (Key)(object)RightStickLeft,
+                        StickRight = (Key)(object)RightStickRight,
+                        StickButton = (Key)(object)RightKeyboardStickButton,
+                    },
+                    Version = InputConfig.CurrentVersion,
+                };
+
+            }
+
+            if (Backend == InputBackendType.GamepadSDL2)
+            {
+                var config = new StandardControllerInputConfig
+                {
+                    Id = Id,
+                    Backend = Backend,
+                    PlayerIndex = PlayerIndex,
+                    ControllerType = ControllerType,
+                    LeftJoycon = new LeftJoyconCommonConfig<GamepadInputId>
+                    {
+                        DpadUp = (GamepadInputId)(object)DpadUp,
+                        DpadDown = (GamepadInputId)(object)DpadDown,
+                        DpadLeft = (GamepadInputId)(object)DpadLeft,
+                        DpadRight = (GamepadInputId)(object)DpadRight,
+                        ButtonL = (GamepadInputId)(object)ButtonL,
+                        ButtonZl = (GamepadInputId)(object)ButtonZl,
+                        ButtonSl = (GamepadInputId)(object)LeftButtonSl,
+                        ButtonSr = (GamepadInputId)(object)LeftButtonSr,
+                        ButtonMinus = (GamepadInputId)(object)ButtonMinus,
+                    },
+                    RightJoycon = new RightJoyconCommonConfig<GamepadInputId>
+                    {
+                        ButtonA = (GamepadInputId)(object)ButtonA,
+                        ButtonB = (GamepadInputId)(object)ButtonB,
+                        ButtonX = (GamepadInputId)(object)ButtonX,
+                        ButtonY = (GamepadInputId)(object)ButtonY,
+                        ButtonPlus = (GamepadInputId)(object)ButtonPlus,
+                        ButtonSl = (GamepadInputId)(object)RightButtonSl,
+                        ButtonSr = (GamepadInputId)(object)RightButtonSr,
+                        ButtonR = (GamepadInputId)(object)ButtonR,
+                        ButtonZr = (GamepadInputId)(object)ButtonZr,
+                    },
+                    LeftJoyconStick = new JoyconConfigControllerStick<GamepadInputId, StickInputId>
+                    {
+                        Joystick = (StickInputId)(object)LeftJoystick,
+                        InvertStickX = LeftInvertStickX,
+                        InvertStickY = LeftInvertStickY,
+                        Rotate90CW = LeftRotate90,
+                        StickButton = (GamepadInputId)(object)LeftControllerStickButton,
+                    },
+                    RightJoyconStick = new JoyconConfigControllerStick<GamepadInputId, StickInputId>
+                    {
+                        Joystick = (StickInputId)(object)RightJoystick,
+                        InvertStickX = RightInvertStickX,
+                        InvertStickY = RightInvertStickY,
+                        Rotate90CW = RightRotate90,
+                        StickButton = (GamepadInputId)(object)RightControllerStickButton,
+                    },
+                    Rumble = new RumbleConfigController
+                    {
+                        EnableRumble = EnableRumble,
+                        WeakRumble = WeakRumble,
+                        StrongRumble = StrongRumble,
+                    },
+                    Version = InputConfig.CurrentVersion,
+                    DeadzoneLeft = DeadzoneLeft,
+                    DeadzoneRight = DeadzoneRight,
+                    RangeLeft = RangeLeft,
+                    RangeRight = RangeRight,
+                    TriggerThreshold = TriggerThreshold,
+                    Motion = EnableCemuHookMotion
+                        ? new CemuHookMotionConfigController
+                        {
+                            DsuServerHost = DsuServerHost,
+                            DsuServerPort = DsuServerPort,
+                            Slot = Slot,
+                            AltSlot = AltSlot,
+                            MirrorInput = MirrorInput,
+                            MotionBackend = MotionInputBackendType.CemuHook,
+                        }
+                        : new StandardMotionConfigController
+                        {
+                            MotionBackend = MotionInputBackendType.GamepadDriver,
+                        },
+                };
+
+                config.Motion.Sensitivity = Sensitivity;
+                config.Motion.EnableMotion = EnableMotion;
+                config.Motion.GyroDeadzone = GyroDeadzone;
+
+                return config;
+            }
+
+            return null;
+        }
+    }
+}
-- 
cgit v1.2.3-70-g09d2