Example #1
0
 public static extern bool EnumDisplayDevices(string lpDevice, int iDevNum, [In, Out] MediaPortalApp.DISPLAY_DEVICE lpDisplayDevice, int dwFlags);
Example #2
0
        /// <summary>
        /// Starts the actual splash screen.
        /// </summary>
        /// <remarks>
        /// This method is started in a background thread by the <see cref="Run"/> method.</remarks>
        private void DoRun()
        {
            try
            {
                bool   useFullScreenSplash;
                bool   startFullScreen;
                int    screenNumber;
                string _screenDisplayName;
                bool   _usePrimaryScreen;
                string screenDeviceId;

                using (Settings xmlreader = new MPSettings())
                {
                    useFullScreenSplash = xmlreader.GetValueAsBool("general", "usefullscreensplash", true);
                    startFullScreen     = !D3D.WindowedOverride && (D3D.FullscreenOverride || xmlreader.GetValueAsBool("general", "startfullscreen", true));
                    screenNumber        = xmlreader.GetValueAsInt("screenselector", "screennumber", 0);
                    _alwaysOnTop        = xmlreader.GetValueAsBool("general", "alwaysontop", false);
                    _usePrimaryScreen   = xmlreader.GetValueAsBool("general", "useprimaryscreen", false);
                    _screenDisplayName  = xmlreader.GetValueAsString("screenselector", "screendisplayname", "");
                    screenDeviceId      = xmlreader.GetValueAsString("screenselector", "screendeviceid", "");
                }

                if (D3D.ScreenNumberOverride >= 0)
                {
                    screenNumber = D3D.ScreenNumberOverride;
                    if (screenNumber < 0 || screenNumber >= Screen.AllScreens.Length)
                    {
                        screenNumber = 0;
                    }
                    CurrentDisplay = Screen.AllScreens[screenNumber];
                }
                else
                {
                    foreach (Screen screen in Screen.AllScreens)
                    {
                        const int dwf         = 0;
                        var       info        = new MediaPortalApp.DISPLAY_DEVICE();
                        string    monitorname = null;
                        string    deviceId    = null;
                        info.cb = Marshal.SizeOf(info);
                        if (EnumDisplayDevices(screen.DeviceName, 0, info, dwf))
                        {
                            monitorname = info.DeviceString;
                            deviceId    = info.DeviceID;
                        }
                        if (monitorname == null)
                        {
                            monitorname = "";
                        }
                        if (deviceId == null)
                        {
                            deviceId = "";
                        }

                        if (_usePrimaryScreen)
                        {
                            if (screen.Primary)
                            {
                                CurrentDisplay = screen;
                                break;
                            }
                        }
                        else
                        {
                            if (!string.IsNullOrEmpty(deviceId))
                            {
                                if (deviceId.Equals(screenDeviceId))
                                {
                                    CurrentDisplay = screen;
                                    break;
                                }
                            }
                            else
                            {
                                if (screen.DeviceName.Equals(_screenDisplayName))
                                {
                                    CurrentDisplay = screen;
                                    break;
                                }
                            }
                        }
                    }
                    if (CurrentDisplay == null)
                    {
                        CurrentDisplay = screenNumber >= Screen.AllScreens.Length ? Screen.AllScreens[0] : Screen.AllScreens[screenNumber];
                    }
                }

                Log.Info("SplashScreen: Splash screen is using screen: {0} (Position: {1},{2} Dimensions: {3}x{4})",
                         GetCleanDisplayName(CurrentDisplay), CurrentDisplay.Bounds.Location.X, CurrentDisplay.Bounds.Location.Y, CurrentDisplay.Bounds.Width, CurrentDisplay.Bounds.Height);

                if (useFullScreenSplash && startFullScreen)
                {
                    ShowFullScreenSplashScreen();
                }
                else
                {
                    ShowNormalSplash();
                }
            }
            catch (Exception e)
            {
                Log.Error("Error during splashscreen handling: {0}", e.Message);
            }
        }
Example #3
0
    /// <summary>
    /// Starts the actual splash screen.
    /// </summary>
    /// <remarks>
    /// This method is started in a background thread by the <see cref="Run"/> method.</remarks>
    private void DoRun()
    {
      try
      {
        bool useFullScreenSplash;
        bool startFullScreen;
        int screenNumber;
        string _screenDisplayName;
        bool _usePrimaryScreen;
        string screenDeviceId;

        using (Settings xmlreader = new MPSettings())
        {
          useFullScreenSplash = xmlreader.GetValueAsBool("general", "usefullscreensplash", true);
          startFullScreen = !D3D.WindowedOverride && (D3D.FullscreenOverride || xmlreader.GetValueAsBool("general", "startfullscreen", true));
          screenNumber = xmlreader.GetValueAsInt("screenselector", "screennumber", 0);
          _alwaysOnTop = xmlreader.GetValueAsBool("general", "alwaysontop", false);
          _usePrimaryScreen = xmlreader.GetValueAsBool("general", "useprimaryscreen", false);
          _screenDisplayName = xmlreader.GetValueAsString("screenselector", "screendisplayname", "");
          screenDeviceId = xmlreader.GetValueAsString("screenselector", "screendeviceid", "");
        }

        if (D3D.ScreenNumberOverride >= 0)
        {
          screenNumber = D3D.ScreenNumberOverride;
          if (screenNumber < 0 || screenNumber >= Screen.AllScreens.Length)
          {
            screenNumber = 0;
          }
          CurrentDisplay = Screen.AllScreens[screenNumber];
        }
        else
        {
          foreach (Screen screen in Screen.AllScreens)
          {
            const int dwf = 0;
            var info = new MediaPortalApp.DISPLAY_DEVICE();
            string monitorname = null;
            string deviceId = null;
            info.cb = Marshal.SizeOf(info);
            if (EnumDisplayDevices(screen.DeviceName, 0, info, dwf))
            {
              monitorname = info.DeviceString;
              deviceId = info.DeviceID;
            }
            if (monitorname == null)
            {
              monitorname = "";
            }
            if (deviceId == null)
            {
              deviceId = "";
            }

            if (_usePrimaryScreen)
            {
              if (screen.Primary)
              {
                CurrentDisplay = screen;
                break;
              }
            }
            else
            {
              if (!string.IsNullOrEmpty(deviceId))
              {
                if (deviceId.Equals(screenDeviceId))
                {
                  CurrentDisplay = screen;
                  break;
                }
              }
              else
              {
                if (screen.DeviceName.Equals(_screenDisplayName))
                {
                  CurrentDisplay = screen;
                  break;
                }
              }
            }
          }
          if (CurrentDisplay == null)
          {
            CurrentDisplay = screenNumber >= Screen.AllScreens.Length ? Screen.AllScreens[0] : Screen.AllScreens[screenNumber];
          }
        }

        Log.Info("SplashScreen: Splash screen is using screen: {0} (Position: {1},{2} Dimensions: {3}x{4})",
          GetCleanDisplayName(CurrentDisplay), CurrentDisplay.Bounds.Location.X, CurrentDisplay.Bounds.Location.Y, CurrentDisplay.Bounds.Width, CurrentDisplay.Bounds.Height);

        if (useFullScreenSplash && startFullScreen)
        {
          ShowFullScreenSplashScreen();
        }
        else
        {
          ShowNormalSplash();
        }
      }
      catch (Exception e)
      {
        Log.Error("Error during splashscreen handling: {0}", e.Message);
      }
    }