mirror of
https://github.com/terrymacdonald/DisplayMagician.git
synced 2024-08-30 18:32:20 +00:00
Centered the shortcutform loading window
This was WAY harder than it needed to be, as the loading window runs in a separate thread. It does a bit of trickery to get it to work reliably, but now it works ok. I really should be factoring the work into a background thread rather than running it in the UI thread, but that's something I'll revisit when I rebuild it under .net 6.0 and MAUI.
This commit is contained in:
parent
971a45b2e8
commit
6a9f3abc6d
@ -43,6 +43,7 @@ namespace DisplayMagician {
|
|||||||
public static ProgramSettings AppProgramSettings;
|
public static ProgramSettings AppProgramSettings;
|
||||||
public static MainForm AppMainForm;
|
public static MainForm AppMainForm;
|
||||||
public static LoadingForm AppSplashScreen;
|
public static LoadingForm AppSplashScreen;
|
||||||
|
public static ShortcutLoadingForm AppShortcutLoadingSplashScreen;
|
||||||
private static readonly NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger();
|
private static readonly NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger();
|
||||||
private static SharedLogger sharedLogger;
|
private static SharedLogger sharedLogger;
|
||||||
private static bool _gamesLoaded = false;
|
private static bool _gamesLoaded = false;
|
||||||
|
@ -26,8 +26,8 @@ using System.Resources;
|
|||||||
[assembly: Guid("e4ceaf5e-ad01-4695-b179-31168eb74c48")]
|
[assembly: Guid("e4ceaf5e-ad01-4695-b179-31168eb74c48")]
|
||||||
|
|
||||||
// Version information
|
// Version information
|
||||||
[assembly: AssemblyVersion("2.1.0.317")]
|
[assembly: AssemblyVersion("2.1.0.358")]
|
||||||
[assembly: AssemblyFileVersion("2.1.0.317")]
|
[assembly: AssemblyFileVersion("2.1.0.358")]
|
||||||
[assembly: NeutralResourcesLanguageAttribute( "en" )]
|
[assembly: NeutralResourcesLanguageAttribute( "en" )]
|
||||||
[assembly: CLSCompliant(true)]
|
[assembly: CLSCompliant(true)]
|
||||||
|
|
||||||
|
@ -69,16 +69,6 @@ namespace DisplayMagician.UIForms
|
|||||||
public ShortcutForm()
|
public ShortcutForm()
|
||||||
{
|
{
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
_loadingScreen = new ShortcutLoadingForm();
|
|
||||||
_loadingScreen.Title = "Preparing images...";
|
|
||||||
_loadingScreen.Description = "Preparing images before showing you the Shortcut information. You will be able to swap your shortcut icon to any image you want, or choose one from a list.";
|
|
||||||
_loadingScreen.StartPosition = FormStartPosition.CenterParent;
|
|
||||||
_loadingScreen.Parent = this.ParentForm;
|
|
||||||
var splashThread = new Thread(new ThreadStart(
|
|
||||||
() => Application.Run(_loadingScreen)));
|
|
||||||
splashThread.SetApartmentState(ApartmentState.STA);
|
|
||||||
splashThread.Start();
|
|
||||||
|
|
||||||
// Set the profileAdaptor we need to load images from Profiles
|
// Set the profileAdaptor we need to load images from Profiles
|
||||||
// into the Profiles ImageListView
|
// into the Profiles ImageListView
|
||||||
try
|
try
|
||||||
@ -1702,6 +1692,7 @@ namespace DisplayMagician.UIForms
|
|||||||
|
|
||||||
private void ShortcutForm_Load(object sender, EventArgs e)
|
private void ShortcutForm_Load(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
|
|
||||||
if (_firstShow)
|
if (_firstShow)
|
||||||
{
|
{
|
||||||
// Parse the game bitmaps now the first time as we need them
|
// Parse the game bitmaps now the first time as we need them
|
||||||
@ -1711,24 +1702,20 @@ namespace DisplayMagician.UIForms
|
|||||||
GameLibraries.GameLibrary.RefreshGameBitmaps();
|
GameLibraries.GameLibrary.RefreshGameBitmaps();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Close the splash screen
|
|
||||||
CloseTheSplashScreen();
|
|
||||||
_firstShow = false;
|
_firstShow = false;
|
||||||
}
|
}
|
||||||
// Load the shortcut info
|
// Load the shortcut info
|
||||||
LoadShortcut();
|
LoadShortcut();
|
||||||
|
|
||||||
|
CloseTheSplashScreen();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void CloseTheSplashScreen()
|
private void CloseTheSplashScreen()
|
||||||
{
|
{
|
||||||
// Close the splash screen
|
// Close the splash screen
|
||||||
if (_loadingScreen != null && !_loadingScreen.Disposing && !_loadingScreen.IsDisposed)
|
if (Program.AppShortcutLoadingSplashScreen != null && !Program.AppShortcutLoadingSplashScreen.Disposing && !Program.AppShortcutLoadingSplashScreen.IsDisposed)
|
||||||
_loadingScreen.Invoke(new Action(() => _loadingScreen.Close()));
|
Program.AppShortcutLoadingSplashScreen.Invoke(new Action(() => Program.AppShortcutLoadingSplashScreen.Close()));
|
||||||
this.TopMost = true;
|
this.Activate();
|
||||||
this.Focus();
|
|
||||||
this.TopMost = false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void rb_standalone_CheckedChanged(object sender, EventArgs e)
|
private void rb_standalone_CheckedChanged(object sender, EventArgs e)
|
||||||
|
@ -10,6 +10,7 @@ using System.Drawing;
|
|||||||
using System.Globalization;
|
using System.Globalization;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using System.Threading;
|
||||||
using System.Windows.Forms;
|
using System.Windows.Forms;
|
||||||
|
|
||||||
namespace DisplayMagician.UIForms
|
namespace DisplayMagician.UIForms
|
||||||
@ -266,10 +267,12 @@ namespace DisplayMagician.UIForms
|
|||||||
{
|
{
|
||||||
this.Cursor = Cursors.WaitCursor;
|
this.Cursor = Cursors.WaitCursor;
|
||||||
ShortcutItem si = new ShortcutItem();
|
ShortcutItem si = new ShortcutItem();
|
||||||
|
ShowShortcutLoadingWindow();
|
||||||
if (_shortcutForm == null)
|
if (_shortcutForm == null)
|
||||||
{
|
{
|
||||||
_shortcutForm = new ShortcutForm();
|
_shortcutForm = new ShortcutForm();
|
||||||
}
|
}
|
||||||
|
_shortcutForm.Owner = this;
|
||||||
//ShortcutRepository.IsValidRefresh()
|
//ShortcutRepository.IsValidRefresh()
|
||||||
// Set the Shortcut to as a new shortcut
|
// Set the Shortcut to as a new shortcut
|
||||||
_shortcutForm.Shortcut = si;
|
_shortcutForm.Shortcut = si;
|
||||||
@ -292,6 +295,22 @@ namespace DisplayMagician.UIForms
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void ShowShortcutLoadingWindow()
|
||||||
|
{
|
||||||
|
Program.AppShortcutLoadingSplashScreen = new ShortcutLoadingForm();
|
||||||
|
Program.AppShortcutLoadingSplashScreen.Title = "Preparing images...";
|
||||||
|
Program.AppShortcutLoadingSplashScreen.Description = "Preparing images before showing you the Shortcut information. You will be able to swap your shortcut icon to any image you want, or choose one from a list.";
|
||||||
|
int resultX = this.DesktopLocation.X + ((this.Width - Program.AppShortcutLoadingSplashScreen.Width) / 2);
|
||||||
|
int resultY = this.DesktopLocation.Y + ((this.Height - Program.AppShortcutLoadingSplashScreen.Height) / 2);
|
||||||
|
Program.AppShortcutLoadingSplashScreen.WantedLocation = new Point(resultX, resultY);
|
||||||
|
//_loadingScreen.CenterParent(ownerRect);
|
||||||
|
//_loadingScreen.StartPosition = FormStartPosition.Manual;
|
||||||
|
var splashThread = new Thread(new ThreadStart(
|
||||||
|
() => Application.Run(Program.AppShortcutLoadingSplashScreen)));
|
||||||
|
splashThread.SetApartmentState(ApartmentState.STA);
|
||||||
|
splashThread.Start();
|
||||||
|
}
|
||||||
|
|
||||||
private void btn_edit_Click(object sender, EventArgs e)
|
private void btn_edit_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
if (_selectedShortcut == null)
|
if (_selectedShortcut == null)
|
||||||
@ -320,11 +339,12 @@ namespace DisplayMagician.UIForms
|
|||||||
_selectedShortcut = GetShortcutFromUUID(shortcutUUID);
|
_selectedShortcut = GetShortcutFromUUID(shortcutUUID);
|
||||||
|
|
||||||
this.Cursor = Cursors.WaitCursor;
|
this.Cursor = Cursors.WaitCursor;
|
||||||
|
ShowShortcutLoadingWindow();
|
||||||
if (_shortcutForm == null)
|
if (_shortcutForm == null)
|
||||||
{
|
{
|
||||||
_shortcutForm = new ShortcutForm();
|
_shortcutForm = new ShortcutForm();
|
||||||
}
|
}
|
||||||
|
_shortcutForm.Owner = this;
|
||||||
_shortcutForm.Shortcut = _selectedShortcut;
|
_shortcutForm.Shortcut = _selectedShortcut;
|
||||||
_shortcutForm.EditingExistingShortcut = true;
|
_shortcutForm.EditingExistingShortcut = true;
|
||||||
//ilv_saved_shortcuts.SuspendLayout();
|
//ilv_saved_shortcuts.SuspendLayout();
|
||||||
|
@ -83,6 +83,7 @@ namespace DisplayMagician.UIForms
|
|||||||
this.Text = "DisplayMagician is loading....";
|
this.Text = "DisplayMagician is loading....";
|
||||||
this.UseWaitCursor = true;
|
this.UseWaitCursor = true;
|
||||||
this.Load += new System.EventHandler(this.LoadingForm_Load);
|
this.Load += new System.EventHandler(this.LoadingForm_Load);
|
||||||
|
this.Shown += new System.EventHandler(this.ShortcutLoadingForm_Shown);
|
||||||
this.ResumeLayout(false);
|
this.ResumeLayout(false);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -14,11 +14,17 @@ namespace DisplayMagician.UIForms
|
|||||||
{
|
{
|
||||||
private string _title = "DisplayMagician is loading...";
|
private string _title = "DisplayMagician is loading...";
|
||||||
private string _description = "If you have installed a lot of games over time or have a lot of games installed now, this may take a while!";
|
private string _description = "If you have installed a lot of games over time or have a lot of games installed now, this may take a while!";
|
||||||
|
private Point _wantedLocation = new Point(0,0);
|
||||||
|
|
||||||
public ShortcutLoadingForm()
|
public ShortcutLoadingForm()
|
||||||
{
|
{
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
this.TopMost = false;
|
this.StartPosition = FormStartPosition.Manual;
|
||||||
|
/*_owner = owner;
|
||||||
|
int resultX = _owner.DisplayRectangle.X + _owner.Width - this.Width;
|
||||||
|
int resultY = _owner.DisplayRectangle.Y + _owner.Height - this.Height;
|
||||||
|
_owner.Location = new Point(resultX, resultY);*/
|
||||||
|
this.TopMost = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -49,10 +55,22 @@ namespace DisplayMagician.UIForms
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Point WantedLocation
|
||||||
|
{
|
||||||
|
set
|
||||||
|
{
|
||||||
|
_wantedLocation = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void LoadingForm_Load(object sender, EventArgs e)
|
private void LoadingForm_Load(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
|
DesktopLocation = _wantedLocation;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void ShortcutLoadingForm_Shown(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
DesktopLocation = _wantedLocation;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,9 +1,11 @@
|
|||||||
using System;
|
using System;
|
||||||
|
using System.Drawing;
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
|
using System.Windows.Forms;
|
||||||
|
|
||||||
namespace DisplayMagician
|
namespace DisplayMagician
|
||||||
{
|
{
|
||||||
class Utils
|
static class Utils
|
||||||
{
|
{
|
||||||
// 1. Import InteropServices
|
// 1. Import InteropServices
|
||||||
|
|
||||||
@ -52,6 +54,34 @@ namespace DisplayMagician
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void ShowCentered(this Form frm, Form owner)
|
||||||
|
{
|
||||||
|
Rectangle ownerRect = GetOwnerRect(frm, owner);
|
||||||
|
frm.Location = new Point(ownerRect.Left + (ownerRect.Width - frm.Width) / 2,
|
||||||
|
ownerRect.Top + (ownerRect.Height - frm.Height) / 2);
|
||||||
|
frm.Show(owner);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void CenterParent(this Form frm, Rectangle ownerRect)
|
||||||
|
{
|
||||||
|
frm.Location = new Point(ownerRect.Left + (ownerRect.Width - frm.Width) / 2,
|
||||||
|
ownerRect.Top + (ownerRect.Height - frm.Height) / 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void ShowDialogCentered(this Form frm, Form owner)
|
||||||
|
{
|
||||||
|
Rectangle ownerRect = GetOwnerRect(frm, owner);
|
||||||
|
frm.Location = new Point(ownerRect.Left + (ownerRect.Width - frm.Width) / 2,
|
||||||
|
ownerRect.Top + (ownerRect.Height - frm.Height) / 2);
|
||||||
|
frm.ShowDialog(owner);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static Rectangle GetOwnerRect(Form frm, Form owner)
|
||||||
|
{
|
||||||
|
return owner != null ? owner.DesktopBounds : Screen.GetWorkingArea(frm);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user