Beispiel #1
0
 protected void SwitchToFullscreen(int screenNum)
 {
     System.Windows.Forms.Screen[] screens = System.Windows.Forms.Screen.AllScreens;
     System.Windows.Forms.Screen   screen  = screenNum < 0 || screenNum >= screens.Length ?
                                             System.Windows.Forms.Screen.PrimaryScreen :
                                             System.Windows.Forms.Screen.AllScreens[screenNum];
     WindowState     = FormWindowState.Normal;
     FormBorderStyle = FormBorderStyle.None;
     _mode           = ScreenMode.FullScreen;
     SetScreenSize(screen);
 }
Beispiel #2
0
        private void SetScreenSize(System.Windows.Forms.Screen screen)
        {
            if (_mode != ScreenMode.FullScreen)
            {
                return;
            }

            ServiceRegistration.Get <ILogger>().Info("SkinEngine MainForm: Set screen size to {0} (Mode: {1})", screen.Bounds.Size, _mode);
            Rectangle rect = screen.Bounds;

            Location   = rect.Location;
            ClientSize = rect.Size;
        }
Beispiel #3
0
        protected void SwitchToFullscreen(int screenNum)
        {
            System.Windows.Forms.Screen[] screens = System.Windows.Forms.Screen.AllScreens;
            System.Windows.Forms.Screen   screen  = screenNum < 0 || screenNum >= screens.Length ?
                                                    System.Windows.Forms.Screen.PrimaryScreen :
                                                    System.Windows.Forms.Screen.AllScreens[screenNum];
            WindowState = FormWindowState.Normal;
            Rectangle rect = screen.Bounds;

            Location        = rect.Location;
            ClientSize      = rect.Size;
            FormBorderStyle = FormBorderStyle.None;
            _mode           = ScreenMode.FullScreen;
        }
Beispiel #4
0
        public MainForm(ScreenManager screenManager)
        {
            _adaptToSizeEnabled = false;
            _screenManager      = screenManager;

            ServiceRegistration.Get <ILogger>().Debug("SkinEngine MainForm: Registering DirectX MainForm as IScreenControl service");
            ServiceRegistration.Set <IScreenControl>(this);

            InitializeComponent();

            // Use the native method because the Icon.ExtractAssociatedIcon throws an exception when running from UNC paths
            ushort uicon;
            IntPtr handle = NativeMethods.ExtractAssociatedIcon(Handle, ServiceRegistration.Get <IPathManager>().GetPath("<APPLICATION_PATH>"), out uicon);

            Icon = Icon.FromHandle(handle);

            CheckForIllegalCrossThreadCalls = false;

            StartupSettings startupSettings = ServiceRegistration.Get <ISettingsManager>().Load <StartupSettings>();
            AppSettings     appSettings     = ServiceRegistration.Get <ISettingsManager>().Load <AppSettings>();

            _previousMousePosition = new Point(-1, -1);

            // Default screen for splashscreen is the one from where MP2 was started.
            System.Windows.Forms.Screen preferredScreen = System.Windows.Forms.Screen.FromControl(this);
            int numberOfScreens = System.Windows.Forms.Screen.AllScreens.Length;
            int validScreenNum  = GetScreenNum();

            // Force the splashscreen to be displayed on a specific screen.
            if (startupSettings.StartupScreenNum >= 0 && startupSettings.StartupScreenNum < numberOfScreens)
            {
                validScreenNum  = startupSettings.StartupScreenNum;
                preferredScreen = System.Windows.Forms.Screen.AllScreens[validScreenNum];
                StartPosition   = FormStartPosition.Manual;
            }

            // Store original desktop size
            _screenSize = preferredScreen.Bounds.Size;
            _screenBpp  = preferredScreen.BitsPerPixel;

            Size desiredWindowedSize;

            if (appSettings.WindowPosition.HasValue && appSettings.WindowSize.HasValue)
            {
                desiredWindowedSize = appSettings.WindowSize.Value;
                Location            = ValidatePosition(appSettings.WindowPosition.Value, preferredScreen.WorkingArea.Size, ref desiredWindowedSize);
            }
            else
            {
                Location            = new Point(preferredScreen.WorkingArea.X, preferredScreen.WorkingArea.Y);
                desiredWindowedSize = new Size(SkinContext.SkinResources.SkinWidth, SkinContext.SkinResources.SkinHeight);
            }

            _previousWindowLocation   = Location;
            _previousWindowClientSize = desiredWindowedSize;
            _previousWindowState      = FormWindowState.Normal;
            _previousMode             = ScreenMode.NormalWindowed;

            if (appSettings.ScreenMode == ScreenMode.FullScreen)
            {
                SwitchToFullscreen(validScreenNum);
            }
            else
            {
                SwitchToWindowedSize(appSettings.ScreenMode, Location, desiredWindowedSize, false);
            }

            SkinContext.WindowSize = ClientSize;

            // GraphicsDevice has to be initialized after the form was sized correctly
            ServiceRegistration.Get <ILogger>().Debug("SkinEngine MainForm: Initialize DirectX");
            GraphicsDevice.Initialize_MainThread(this);

            // Read and apply ScreenSaver settings
            _screenSaverTimeOut   = TimeSpan.FromMinutes(appSettings.ScreenSaverTimeoutMin);
            _isScreenSaverEnabled = appSettings.ScreenSaverEnabled;

            _applicationSuspendLevel = appSettings.SuspendLevel;
            UpdateSystemSuspendLevel_MainThread(); // Don't use UpdateSystemSuspendLevel() here because the window handle was not created yet

            Application.Idle   += OnApplicationIdle;
            _adaptToSizeEnabled = true;

            VideoPlayerSynchronizationStrategy = new SynchronizeToPrimaryPlayer();

            // Register touch events
            TouchDown += MainForm_OnTouchDown;
            TouchMove += MainForm_OnTouchMove;
            TouchUp   += MainForm_OnTouchUp;
        }