aboutsummaryrefslogtreecommitdiff
path: root/ShiftOS.WinForms/Tools/ControlManager.cs
diff options
context:
space:
mode:
Diffstat (limited to 'ShiftOS.WinForms/Tools/ControlManager.cs')
-rw-r--r--ShiftOS.WinForms/Tools/ControlManager.cs106
1 files changed, 78 insertions, 28 deletions
diff --git a/ShiftOS.WinForms/Tools/ControlManager.cs b/ShiftOS.WinForms/Tools/ControlManager.cs
index a2a76b7..781e045 100644
--- a/ShiftOS.WinForms/Tools/ControlManager.cs
+++ b/ShiftOS.WinForms/Tools/ControlManager.cs
@@ -28,6 +28,7 @@ using System.Drawing;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
+using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
using ShiftOS.Engine;
@@ -143,9 +144,11 @@ namespace ShiftOS.WinForms.Tools
public static void SetupControl(Control ctrl)
{
- SuspendDrawing(ctrl);
- ctrl.SuspendLayout();
- SetCursor(ctrl);
+ Desktop.InvokeOnWorkerThread(new Action(() =>
+ {
+ SuspendDrawing(ctrl);
+ ctrl.SuspendLayout();
+ }));
if (!(ctrl is MenuStrip) && !(ctrl is ToolStrip) && !(ctrl is StatusStrip) && !(ctrl is ContextMenuStrip))
{
string tag = "";
@@ -160,32 +163,52 @@ namespace ShiftOS.WinForms.Tools
{
if (ctrl.BackColor != Control.DefaultBackColor)
{
- ctrl.BackColor = SkinEngine.LoadedSkin.ControlColor;
+ Desktop.InvokeOnWorkerThread(() =>
+ {
+ ctrl.BackColor = SkinEngine.LoadedSkin.ControlColor;
+ });
}
}
- ctrl.ForeColor = SkinEngine.LoadedSkin.ControlTextColor;
-
- ctrl.Font = SkinEngine.LoadedSkin.MainFont;
-
- if (tag.Contains("header1"))
+ if (!tag.Contains("keepfont"))
{
- ctrl.Font = SkinEngine.LoadedSkin.HeaderFont;
- }
+ Desktop.InvokeOnWorkerThread(() =>
+ {
+ ctrl.ForeColor = SkinEngine.LoadedSkin.ControlTextColor;
+ ctrl.Font = SkinEngine.LoadedSkin.MainFont;
+ });
+ if (tag.Contains("header1"))
+ {
+ Desktop.InvokeOnWorkerThread(() =>
+ {
+ ctrl.Font = SkinEngine.LoadedSkin.HeaderFont;
+ });
+ }
- if (tag.Contains("header2"))
- {
- ctrl.Font = SkinEngine.LoadedSkin.Header2Font;
- }
+ if (tag.Contains("header2"))
+ {
+ Desktop.InvokeOnWorkerThread(() =>
+ {
+ ctrl.Font = SkinEngine.LoadedSkin.Header2Font;
+ });
+ }
- if (tag.Contains("header3"))
- {
- ctrl.Font = SkinEngine.LoadedSkin.Header3Font;
- }
+ if (tag.Contains("header3"))
+ {
+ Desktop.InvokeOnWorkerThread(() =>
+ {
+ ctrl.Font = SkinEngine.LoadedSkin.Header3Font;
+ });
+ }
+ }
try
{
- ctrl.Text = Localization.Parse(ctrl.Text);
+ string ctrlText = Localization.Parse(ctrl.Text);
+ Desktop.InvokeOnWorkerThread(() =>
+ {
+ ctrl.Text = ctrlText;
+ });
}
catch
{
@@ -206,19 +229,31 @@ namespace ShiftOS.WinForms.Tools
};
if (ctrl is Button)
{
- (ctrl as Button).FlatStyle = FlatStyle.Flat;
+ Desktop.InvokeOnWorkerThread(() =>
+ {
+ (ctrl as Button).FlatStyle = FlatStyle.Flat;
+ });
}
else if (ctrl is WindowBorder)
{
- (ctrl as WindowBorder).Setup();
+ Desktop.InvokeOnWorkerThread(() =>
+ {
+ (ctrl as WindowBorder).Setup();
+ });
}
}
+ Desktop.InvokeOnWorkerThread(() =>
+ {
- MakeDoubleBuffered(ctrl);
- ctrl.ResumeLayout();
- ResumeDrawing(ctrl);
+ MakeDoubleBuffered(ctrl);
+ ctrl.ResumeLayout();
+ ResumeDrawing(ctrl);
+ });
+ ControlSetup?.Invoke(ctrl);
}
+ public static event Action<Control> ControlSetup;
+
public static void MakeDoubleBuffered(Control c)
{
if (System.Windows.Forms.SystemInformation.TerminalServerSession)
@@ -234,13 +269,28 @@ namespace ShiftOS.WinForms.Tools
}
- public static void SetupControls(Control frm)
+ public static void SetupControls(Control frm, bool runInThread = true)
{
SetupControl(frm);
- for (int i = 0; i < frm.Controls.Count; i++)
+ ThreadStart ts = () =>
+ {
+ for (int i = 0; i < frm.Controls.Count; i++)
+ {
+ SetupControls(frm.Controls[i], false);
+ }
+
+ };
+
+ if (runInThread == true)
+ {
+ var t = new Thread(ts);
+ t.IsBackground = true;
+ t.Start();
+ }
+ else
{
- SetupControls(frm.Controls[i]);
+ ts?.Invoke();
}
}