public DesktopMirrorManager()
        {
            TouchInjector.InitializeTouchInjection();

            ConfigUtility.RegisterCustomConfigLayout("desktop", new List <ConfigUtility.ConfigLayout>()
            {
                new ConfigUtility.ConfigLayout()
                {
                    NonAddonFileKey = "desktop", Category = "Basic Settings", Key = "enabled", Title = "Enable Desktop Mirror?", Description = "Enables/Disables the improved desktop mirror", Type = "bool", Default = false
                },
                new ConfigUtility.ConfigLayout()
                {
                    NonAddonFileKey = "desktop", Category = "Screen Settings", Key = "distance", Title = "Display Distance", Description = "Distance of primary display from the middle of the play space", Type = "float", Default = 2f
                },
                new ConfigUtility.ConfigLayout()
                {
                    NonAddonFileKey = "desktop", Category = "Screen Settings", Key = "width", Title = "Display Overlay Width", Description = "Meter Width of each overlay", Type = "float", Default = 2.5f
                },
                new ConfigUtility.ConfigLayout()
                {
                    NonAddonFileKey = "desktop", Category = "Screen Settings", Key = "show_without_dashboard", Title = "Show without Dashboard", Description = "Show the desktop mirror even when the dashboard isn't visible", Type = "bool", Default = false
                },
                new ConfigUtility.ConfigLayout()
                {
                    NonAddonFileKey = "desktop", Category = "Screen Settings", Key = "position", Title = "Desktop Position", Default = "Opposite Dashboard", Description = "Where to place the desktop mirror: opposite the dashboard or at the rear of the play space", Type = "string", Options = new object[] { "Opposite Dashboard", "Rear of Playspace" }
                },
                new ConfigUtility.ConfigLayout()
                {
                    NonAddonFileKey = "desktop", Category = "Screen Settings", Key = "use_touch", Title = "Use Touch Injection", Default = false, Description = "Use Touch Injection instead of Mouse, experimental but often provides a better experience.", Type = "bool"
                }
            });

            ConfigUtility.Listen("desktop.enabled", (k, v) =>
            {
                if (v is bool)
                {
                    if ((bool)v)
                    {
                        Enable();
                    }
                    else
                    {
                        Disable();
                    }
                }
            });

            Microsoft.Win32.SystemEvents.DisplaySettingsChanged += SystemEvents_DisplaySettingsChanged;
        }