From 46a3d51507f41b65b8a8335ba8b5bb162f62e0f1 Mon Sep 17 00:00:00 2001 From: Kenneth Skovhede Date: Mon, 21 Mar 2016 23:52:04 +0100 Subject: [PATCH 1/2] Changed the way icons are loaded to hopefully get pretty icons on Windows. This should fix #1646 --- .../GUI/Duplicati.GUI.TrayIcon/GtkRunner.cs | 36 +++++++++---------- .../GUI/Duplicati.GUI.TrayIcon/ImageLoader.cs | 23 ++++++------ .../Duplicati.GUI.TrayIcon/WinFormsRunner.cs | 12 +++---- 3 files changed, 37 insertions(+), 34 deletions(-) diff --git a/Duplicati/GUI/Duplicati.GUI.TrayIcon/GtkRunner.cs b/Duplicati/GUI/Duplicati.GUI.TrayIcon/GtkRunner.cs index 318d03a83..caaa16377 100644 --- a/Duplicati/GUI/Duplicati.GUI.TrayIcon/GtkRunner.cs +++ b/Duplicati/GUI/Duplicati.GUI.TrayIcon/GtkRunner.cs @@ -239,24 +239,24 @@ namespace Duplicati.GUI.TrayIcon { switch(icon) { - case TrayIcons.Paused: - _images[icon] = ImageToPixbuf(ImageLoader.TrayNormalPause.ToBitmap()); - break; - case TrayIcons.Running: - _images[icon] = ImageToPixbuf(ImageLoader.TrayWorking.ToBitmap()); - break; - case TrayIcons.IdleError: - _images[icon] = ImageToPixbuf(ImageLoader.TrayNormalError.ToBitmap()); - break; - case TrayIcons.RunningError: - _images[icon] = ImageToPixbuf(ImageLoader.TrayWorking.ToBitmap()); - break; - case TrayIcons.PausedError: - _images[icon] = ImageToPixbuf(ImageLoader.TrayNormalPause.ToBitmap()); - break; - case TrayIcons.Idle: - default: - _images[icon] = ImageToPixbuf(ImageLoader.TrayNormal.ToBitmap()); + case TrayIcons.Paused: + _images[icon] = ImageToPixbuf(ImageLoader.LoadIcon(ImageLoader.PauseIcon).ToBitmap()); + break; + case TrayIcons.Running: + _images[icon] = ImageToPixbuf(ImageLoader.LoadIcon(ImageLoader.WorkingIcon).ToBitmap()); + break; + case TrayIcons.IdleError: + _images[icon] = ImageToPixbuf(ImageLoader.LoadIcon(ImageLoader.ErrorIcon).ToBitmap()); + break; + case TrayIcons.RunningError: + _images[icon] = ImageToPixbuf(ImageLoader.LoadIcon(ImageLoader.WorkingIcon).ToBitmap()); + break; + case TrayIcons.PausedError: + _images[icon] = ImageToPixbuf(ImageLoader.LoadIcon(ImageLoader.PauseIcon).ToBitmap()); + break; + case TrayIcons.Idle: + default: + _images[icon] = ImageToPixbuf(ImageLoader.LoadIcon(ImageLoader.NormalIcon).ToBitmap()); break; } } diff --git a/Duplicati/GUI/Duplicati.GUI.TrayIcon/ImageLoader.cs b/Duplicati/GUI/Duplicati.GUI.TrayIcon/ImageLoader.cs index 175d4b9e7..06e2200a2 100644 --- a/Duplicati/GUI/Duplicati.GUI.TrayIcon/ImageLoader.cs +++ b/Duplicati/GUI/Duplicati.GUI.TrayIcon/ImageLoader.cs @@ -36,7 +36,7 @@ namespace Duplicati.GUI.TrayIcon private static readonly Dictionary BITMAPS = new Dictionary(); private static readonly Dictionary ICONS = new Dictionary(); private static readonly object LOCK = new object(); - + private static Bitmap LoadImage(string filename) { Bitmap bmp; @@ -50,7 +50,12 @@ namespace Duplicati.GUI.TrayIcon return BITMAPS[filename]; } - private static Icon LoadIcon(string filename) + public static Icon LoadIcon(string filename) + { + return LoadIcon(filename, new Size(32, 32)); + } + + public static Icon LoadIcon(string filename, Size size) { Icon ico; if (ICONS.TryGetValue(filename, out ico)) @@ -71,18 +76,16 @@ namespace Duplicati.GUI.TrayIcon lock(LOCK) if (!ICONS.TryGetValue(filename, out ico)) - return ICONS[filename] = new Icon(ASSEMBLY.GetManifestResourceStream(PREFIX + filename)); + return ICONS[filename] = new Icon(ASSEMBLY.GetManifestResourceStream(PREFIX + filename), System.Windows.Forms.SystemInformation.SmallIconSize); return ICONS[filename]; } - public static Icon TrayNormal { get { return LoadIcon(Duplicati.Library.Utility.Utility.IsClientOSX ? "OSX_Icons.normal.png" : "Resources.TrayNormal.ico"); } } - public static Icon TrayNormalError { get { return LoadIcon(Duplicati.Library.Utility.Utility.IsClientOSX ? "OSX_Icons.normal-error.png" : "Resources.TrayNormalError.ico"); } } - public static Icon TrayNormalPause { get { return LoadIcon(Duplicati.Library.Utility.Utility.IsClientOSX ? "OSX_Icons.normal-pause.png" : "Resources.TrayNormalPause.ico"); } } - public static Icon TrayNormalWarning { get { return LoadIcon(Duplicati.Library.Utility.Utility.IsClientOSX ? "OSX_Icons.normal-error.png" : "Resources.TrayNormalError.ico"); } } - public static Icon TrayWorking { get { return LoadIcon(Duplicati.Library.Utility.Utility.IsClientOSX ? "OSX_Icons.normal-running.png" : "Resources.TrayWorking.ico"); } } - public static Icon TrayWorkingPause { get { return LoadIcon(Duplicati.Library.Utility.Utility.IsClientOSX ? "OSX_Icons.normal-pause.png" : "Resources.TrayWorkingPause.ico"); } } - + public const string NormalIcon = "Resources.TrayNormal.ico"; + public const string ErrorIcon = "Resources.TrayNormalError.ico"; + public const string PauseIcon = "Resources.TrayNormalPause.ico"; + public const string WorkingIcon = "Resources.TrayWorking"; + public static Bitmap Pause { get { return LoadImage("Resources.Pause.png"); } } public static Bitmap Play { get { return LoadImage("Resources.Play.png"); } } public static Bitmap CloseMenuIcon { get { return LoadImage("Resources.CloseMenuIcon.png"); } } diff --git a/Duplicati/GUI/Duplicati.GUI.TrayIcon/WinFormsRunner.cs b/Duplicati/GUI/Duplicati.GUI.TrayIcon/WinFormsRunner.cs index 9dbf57856..1e7c4c1af 100644 --- a/Duplicati/GUI/Duplicati.GUI.TrayIcon/WinFormsRunner.cs +++ b/Duplicati/GUI/Duplicati.GUI.TrayIcon/WinFormsRunner.cs @@ -172,23 +172,23 @@ namespace Duplicati.GUI.TrayIcon.Windows switch (value) { case TrayIcons.IdleError: - m_trayIcon.Icon = ImageLoader.TrayNormalError; + m_trayIcon.Icon = ImageLoader.LoadIcon(ImageLoader.ErrorIcon, System.Windows.Forms.SystemInformation.SmallIconSize); break; case TrayIcons.Paused: - m_trayIcon.Icon = ImageLoader.TrayNormalPause; + m_trayIcon.Icon = ImageLoader.LoadIcon(ImageLoader.PauseIcon, System.Windows.Forms.SystemInformation.SmallIconSize); break; case TrayIcons.PausedError: - m_trayIcon.Icon = ImageLoader.TrayNormalPause; + m_trayIcon.Icon = ImageLoader.LoadIcon(ImageLoader.PauseIcon, System.Windows.Forms.SystemInformation.SmallIconSize); break; case TrayIcons.Running: - m_trayIcon.Icon = ImageLoader.TrayWorking; + m_trayIcon.Icon = ImageLoader.LoadIcon(ImageLoader.WorkingIcon, System.Windows.Forms.SystemInformation.SmallIconSize); break; case TrayIcons.RunningError: - m_trayIcon.Icon = ImageLoader.TrayWorking; + m_trayIcon.Icon = ImageLoader.LoadIcon(ImageLoader.WorkingIcon, System.Windows.Forms.SystemInformation.SmallIconSize); break; case TrayIcons.Idle: default: - m_trayIcon.Icon = ImageLoader.TrayNormal; + m_trayIcon.Icon = ImageLoader.LoadIcon(ImageLoader.NormalIcon, System.Windows.Forms.SystemInformation.SmallIconSize); break; } } From c2b9574ea21af3f93688a39049856fc7869b4fe1 Mon Sep 17 00:00:00 2001 From: Kenneth Skovhede Date: Tue, 22 Mar 2016 21:17:10 +0100 Subject: [PATCH 2/2] Removed unused icon size call --- Duplicati/GUI/Duplicati.GUI.TrayIcon/WinFormsRunner.cs | 2 -- 1 file changed, 2 deletions(-) diff --git a/Duplicati/GUI/Duplicati.GUI.TrayIcon/WinFormsRunner.cs b/Duplicati/GUI/Duplicati.GUI.TrayIcon/WinFormsRunner.cs index 51307212c..1e7c4c1af 100644 --- a/Duplicati/GUI/Duplicati.GUI.TrayIcon/WinFormsRunner.cs +++ b/Duplicati/GUI/Duplicati.GUI.TrayIcon/WinFormsRunner.cs @@ -116,8 +116,6 @@ namespace Duplicati.GUI.TrayIcon.Windows WinFormsRunner.Instance = this; - ImageLoader.SetTrayIconSize(System.Windows.Forms.SystemInformation.SmallIconSize); - //We need this ugly hack to get a handle that we can call Invoke on, // and sadly the TrayIcon does not expose one, and forcing the context menu // to create one causes weird "lost clicks"