From de7edfa2c19da8473e9d366a68949d3923e4dd63 Mon Sep 17 00:00:00 2001 From: Anton Kasyanov Date: Sun, 29 Mar 2020 21:46:26 +0300 Subject: [PATCH 01/18] 156: Remove Compatibility-Mode thumbnails --- .../Implementation/ThumbnailConfiguration.cs | 14 +--- .../Interface/IThumbnailConfiguration.cs | 2 - Eve-O-Preview/Eve-O-Preview.csproj | 4 -- Eve-O-Preview/Program.cs | 1 - .../Services/Implementation/WindowManager.cs | 32 +-------- .../Services/Interface/IWindowManager.cs | 2 - .../Services/Interop/DwmNativeMethods.cs | 19 ----- .../Services/Interop/Gdi32NativeMethods.cs | 28 -------- .../Services/Interop/User32NativeMethods.cs | 15 ---- .../Implementation/StaticThumbnailView.cs | 70 ------------------- .../Implementation/ThumbnailViewFactory.cs | 6 +- README.md | 9 --- 12 files changed, 5 insertions(+), 197 deletions(-) delete mode 100644 Eve-O-Preview/Services/Interop/Gdi32NativeMethods.cs delete mode 100644 Eve-O-Preview/View/Implementation/StaticThumbnailView.cs diff --git a/Eve-O-Preview/Configuration/Implementation/ThumbnailConfiguration.cs b/Eve-O-Preview/Configuration/Implementation/ThumbnailConfiguration.cs index 779f509..9ec33b0 100644 --- a/Eve-O-Preview/Configuration/Implementation/ThumbnailConfiguration.cs +++ b/Eve-O-Preview/Configuration/Implementation/ThumbnailConfiguration.cs @@ -24,8 +24,6 @@ public ThumbnailConfiguration() this.MinimizeToTray = false; this.ThumbnailRefreshPeriod = 500; - this.EnableCompatibilityMode = false; - this.ThumbnailOpacity = 0.5; this.EnableClientLayoutTracking = false; @@ -56,9 +54,6 @@ public ThumbnailConfiguration() public bool MinimizeToTray { get; set; } public int ThumbnailRefreshPeriod { get; set; } - [JsonProperty("CompatibilityMode")] - public bool EnableCompatibilityMode { get; set; } - [JsonProperty("ThumbnailsOpacity")] public double ThumbnailOpacity { get; set; } @@ -150,8 +145,7 @@ public Point GetThumbnailLocation(string currentClient, string activeClient, Poi // If there is no layout too then use the default one if (this.EnablePerClientThumbnailLayouts && !string.IsNullOrEmpty(activeClient)) { - Dictionary layoutSource; - if (this.PerClientLayout.TryGetValue(activeClient, out layoutSource) && layoutSource.TryGetValue(currentClient, out location)) + if (this.PerClientLayout.TryGetValue(activeClient, out Dictionary layoutSource) && layoutSource.TryGetValue(currentClient, out location)) { return location; } @@ -187,8 +181,7 @@ public void SetThumbnailLocation(string currentClient, string activeClient, Poin public ClientLayout GetClientLayout(string currentClient) { - ClientLayout layout; - this.ClientLayout.TryGetValue(currentClient, out layout); + this.ClientLayout.TryGetValue(currentClient, out ClientLayout layout); return layout; } @@ -200,8 +193,7 @@ public void SetClientLayout(string currentClient, ClientLayout layout) public Keys GetClientHotkey(string currentClient) { - string hotkey; - if (this.ClientHotkey.TryGetValue(currentClient, out hotkey)) + if (this.ClientHotkey.TryGetValue(currentClient, out string hotkey)) { // Protect from incorrect values object rawValue = (new KeysConverter()).ConvertFromInvariantString(hotkey); diff --git a/Eve-O-Preview/Configuration/Interface/IThumbnailConfiguration.cs b/Eve-O-Preview/Configuration/Interface/IThumbnailConfiguration.cs index 3cb1158..565e395 100644 --- a/Eve-O-Preview/Configuration/Interface/IThumbnailConfiguration.cs +++ b/Eve-O-Preview/Configuration/Interface/IThumbnailConfiguration.cs @@ -8,8 +8,6 @@ public interface IThumbnailConfiguration bool MinimizeToTray { get; set; } int ThumbnailRefreshPeriod { get; set; } - bool EnableCompatibilityMode { get; set; } - double ThumbnailOpacity { get; set; } bool EnableClientLayoutTracking { get; set; } diff --git a/Eve-O-Preview/Eve-O-Preview.csproj b/Eve-O-Preview/Eve-O-Preview.csproj index 375b7a6..ef5efdc 100644 --- a/Eve-O-Preview/Eve-O-Preview.csproj +++ b/Eve-O-Preview/Eve-O-Preview.csproj @@ -147,7 +147,6 @@ - @@ -164,9 +163,6 @@ Component - - Form - diff --git a/Eve-O-Preview/Program.cs b/Eve-O-Preview/Program.cs index dd29e98..0206b9b 100644 --- a/Eve-O-Preview/Program.cs +++ b/Eve-O-Preview/Program.cs @@ -99,7 +99,6 @@ private static IApplicationController InitializeApplicationController() IApplicationController controller = new ApplicationController(container); // UI classes - controller.RegisterView(); controller.RegisterView(); controller.RegisterView(); diff --git a/Eve-O-Preview/Services/Implementation/WindowManager.cs b/Eve-O-Preview/Services/Implementation/WindowManager.cs index 80ff23c..0782f80 100644 --- a/Eve-O-Preview/Services/Implementation/WindowManager.cs +++ b/Eve-O-Preview/Services/Implementation/WindowManager.cs @@ -14,7 +14,7 @@ sealed class WindowManager : IWindowManager public WindowManager() { // Composition is always enabled for Windows 8+ - this.IsCompositionEnabled = + this.IsCompositionEnabled = ((Environment.OSVersion.Version.Major == 6) && (Environment.OSVersion.Version.Minor >= 2)) // Win 8 and Win 8.1 || (Environment.OSVersion.Version.Major >= 10) // Win 10 || DwmNativeMethods.DwmIsCompositionEnabled(); // In case of Win 7 an API call is requiredWin 7 @@ -89,35 +89,5 @@ public IDwmThumbnail GetLiveThumbnail(IntPtr destination, IntPtr source) return thumbnail; } - - public Image GetStaticThumbnail(IntPtr source) - { - var sourceContext = User32NativeMethods.GetDC(source); - - User32NativeMethods.GetClientRect(source, out RECT windowRect); - - var width = windowRect.Right - windowRect.Left; - var height = windowRect.Bottom - windowRect.Top; - - // Check if there is anything to make thumbnail of - if ((width < WINDOW_SIZE_THRESHOLD) || (height < WINDOW_SIZE_THRESHOLD)) - { - return null; - } - - var destContext = Gdi32NativeMethods.CreateCompatibleDC(sourceContext); - var bitmap = Gdi32NativeMethods.CreateCompatibleBitmap(sourceContext, width, height); - - var oldBitmap = Gdi32NativeMethods.SelectObject(destContext, bitmap); - Gdi32NativeMethods.BitBlt(destContext, 0, 0, width, height, sourceContext, 0, 0, Gdi32NativeMethods.SRCCOPY); - Gdi32NativeMethods.SelectObject(destContext, oldBitmap); - Gdi32NativeMethods.DeleteDC(destContext); - User32NativeMethods.ReleaseDC(source, sourceContext); - - Image image = Image.FromHbitmap(bitmap); - Gdi32NativeMethods.DeleteObject(bitmap); - - return image; - } } } \ No newline at end of file diff --git a/Eve-O-Preview/Services/Interface/IWindowManager.cs b/Eve-O-Preview/Services/Interface/IWindowManager.cs index c1ce08d..f9f7e06 100644 --- a/Eve-O-Preview/Services/Interface/IWindowManager.cs +++ b/Eve-O-Preview/Services/Interface/IWindowManager.cs @@ -1,5 +1,4 @@ using System; -using System.Drawing; namespace EveOPreview.Services { @@ -16,6 +15,5 @@ public interface IWindowManager bool IsWindowMaximized(IntPtr handle); bool IsWindowMinimized(IntPtr handle); IDwmThumbnail GetLiveThumbnail(IntPtr destination, IntPtr source); - Image GetStaticThumbnail(IntPtr source); } } \ No newline at end of file diff --git a/Eve-O-Preview/Services/Interop/DwmNativeMethods.cs b/Eve-O-Preview/Services/Interop/DwmNativeMethods.cs index 5cb7325..696668b 100644 --- a/Eve-O-Preview/Services/Interop/DwmNativeMethods.cs +++ b/Eve-O-Preview/Services/Interop/DwmNativeMethods.cs @@ -1,28 +1,12 @@ using System; using System.Runtime.InteropServices; -using System.Drawing; namespace EveOPreview.Services.Interop { static class DwmNativeMethods { - [DllImport("dwmapi.dll", PreserveSig = false)] - public static extern void DwmEnableBlurBehindWindow(IntPtr hWnd, DWM_BLURBEHIND pBlurBehind); - - [DllImport("dwmapi.dll", PreserveSig = false)] - public static extern void DwmExtendFrameIntoClientArea(IntPtr hWnd, MARGINS pMargins); - [DllImport("dwmapi.dll", PreserveSig = false)] public static extern bool DwmIsCompositionEnabled(); - - [DllImport("dwmapi.dll", PreserveSig = false)] - public static extern void DwmGetColorizationColor( - out int pcrColorization, - [MarshalAs(UnmanagedType.Bool)]out bool pfOpaqueBlend); - - [DllImport("dwmapi.dll", PreserveSig = false)] - public static extern void DwmEnableComposition(bool bEnable); - [DllImport("dwmapi.dll", PreserveSig = false)] public static extern IntPtr DwmRegisterThumbnail(IntPtr dest, IntPtr source); @@ -31,8 +15,5 @@ public static extern void DwmGetColorizationColor( [DllImport("dwmapi.dll", PreserveSig = false)] public static extern void DwmUpdateThumbnailProperties(IntPtr hThumbnail, DWM_THUMBNAIL_PROPERTIES props); - - [DllImport("dwmapi.dll", PreserveSig = false)] - public static extern void DwmQueryThumbnailSourceSize(IntPtr hThumbnail, out Size size); } } \ No newline at end of file diff --git a/Eve-O-Preview/Services/Interop/Gdi32NativeMethods.cs b/Eve-O-Preview/Services/Interop/Gdi32NativeMethods.cs deleted file mode 100644 index f966511..0000000 --- a/Eve-O-Preview/Services/Interop/Gdi32NativeMethods.cs +++ /dev/null @@ -1,28 +0,0 @@ -using System; -using System.Runtime.InteropServices; - -namespace EveOPreview.Services.Interop -{ - static class Gdi32NativeMethods - { - public const int SRCCOPY = 13369376; - - [DllImport("gdi32.dll")] - public static extern IntPtr CreateCompatibleDC(IntPtr hdc); - - [DllImport("gdi32.dll")] - public static extern bool DeleteDC(IntPtr hdc); - - [DllImport("gdi32.dll")] - public static extern IntPtr CreateCompatibleBitmap(IntPtr hdc, int width, int height); - - [DllImport("gdi32.dll")] - public static extern IntPtr SelectObject(IntPtr hdc, IntPtr hObject); - - [DllImport("gdi32.dll")] - public static extern bool DeleteObject(IntPtr hObject); - - [DllImport("gdi32.dll")] - public static extern bool BitBlt(IntPtr hObject, int nXDest, int nYDest, int nWidth, int nHeight, IntPtr hObjectSource, int nXSrc, int nYSrc, int dwRop); - } -} diff --git a/Eve-O-Preview/Services/Interop/User32NativeMethods.cs b/Eve-O-Preview/Services/Interop/User32NativeMethods.cs index 6adc97a..05ef2bc 100644 --- a/Eve-O-Preview/Services/Interop/User32NativeMethods.cs +++ b/Eve-O-Preview/Services/Interop/User32NativeMethods.cs @@ -14,9 +14,6 @@ static class User32NativeMethods [DllImport("user32.dll")] public static extern bool ShowWindowAsync(IntPtr hWnd, int nCmdShow); - [DllImport("User32.dll")] - public static extern bool ReleaseCapture(); - [DllImport("User32.dll")] public static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam); @@ -26,9 +23,6 @@ static class User32NativeMethods [DllImport("user32.dll")] public static extern int GetWindowRect(IntPtr hWnd, out RECT rect); - [DllImport("user32.dll")] - public static extern bool GetClientRect(IntPtr hWnd, out RECT rect); - [DllImport("user32.dll", SetLastError = true)] [return: MarshalAs(UnmanagedType.Bool)] public static extern bool GetWindowPlacement(IntPtr hWnd, ref WINDOWPLACEMENT lpwndpl); @@ -45,14 +39,5 @@ static class User32NativeMethods [DllImport("user32.dll")] public static extern bool IsZoomed(IntPtr hWnd); - - [DllImport("user32.dll")] - public static extern IntPtr GetWindowDC(IntPtr hWnd); - - [DllImport("user32.dll")] - public static extern IntPtr GetDC(IntPtr hWnd); - - [DllImport("user32.dll")] - public static extern IntPtr ReleaseDC(IntPtr hWnd, IntPtr hdc); } } \ No newline at end of file diff --git a/Eve-O-Preview/View/Implementation/StaticThumbnailView.cs b/Eve-O-Preview/View/Implementation/StaticThumbnailView.cs deleted file mode 100644 index c01ebc3..0000000 --- a/Eve-O-Preview/View/Implementation/StaticThumbnailView.cs +++ /dev/null @@ -1,70 +0,0 @@ -using System; -using System.Drawing; -using System.Windows.Forms; -using EveOPreview.Services; - -namespace EveOPreview.View -{ - sealed class StaticThumbnailView : ThumbnailView - { - #region Private fields - private readonly PictureBox _thumbnail; - #endregion - - public StaticThumbnailView(IWindowManager windowManager) - : base(windowManager) - { - this._thumbnail = new StaticThumbnailImage - { - TabStop = false, - SizeMode = PictureBoxSizeMode.StretchImage, - Location = new Point(0, 0), - Size = new Size(this.ClientSize.Width, this.ClientSize.Height) - }; - this.Controls.Add(this._thumbnail); - } - - protected override void RefreshThumbnail(bool forceRefresh) - { - if (!forceRefresh) - { - return; - } - - var thumbnail = this.WindowManager.GetStaticThumbnail(this.Id); - if (thumbnail != null) - { - var oldImage = this._thumbnail.Image; - this._thumbnail.Image = thumbnail; - oldImage?.Dispose(); - } - } - - protected override void ResizeThumbnail(int baseWidth, int baseHeight, int highlightWidthTop, int highlightWidthRight, int highlightWidthBottom, int highlightWidthLeft) - { - var left = 0 + highlightWidthLeft; - var top = 0 + highlightWidthTop; - if (this.IsLocationUpdateRequired(this._thumbnail.Location, left, top)) - { - this._thumbnail.Location = new Point(left, top); - } - - var width = baseWidth - highlightWidthLeft - highlightWidthRight; - var height = baseHeight - highlightWidthTop - highlightWidthBottom; - if (this.IsSizeUpdateRequired(this._thumbnail.Size, width, height)) - { - this._thumbnail.Size = new Size(width, height); - } - } - - private bool IsLocationUpdateRequired(Point currentLocation, int left, int top) - { - return (currentLocation.X != left) || (currentLocation.Y != top); - } - - private bool IsSizeUpdateRequired(Size currentSize, int width, int height) - { - return (currentSize.Width != width) || (currentSize.Height != height); - } - } -} \ No newline at end of file diff --git a/Eve-O-Preview/View/Implementation/ThumbnailViewFactory.cs b/Eve-O-Preview/View/Implementation/ThumbnailViewFactory.cs index 83d271e..285adef 100644 --- a/Eve-O-Preview/View/Implementation/ThumbnailViewFactory.cs +++ b/Eve-O-Preview/View/Implementation/ThumbnailViewFactory.cs @@ -7,19 +7,15 @@ namespace EveOPreview.View sealed class ThumbnailViewFactory : IThumbnailViewFactory { private readonly IApplicationController _controller; - private readonly bool _isCompatibilityModeEnabled; public ThumbnailViewFactory(IApplicationController controller, IThumbnailConfiguration configuration) { this._controller = controller; - this._isCompatibilityModeEnabled = configuration.EnableCompatibilityMode; } public IThumbnailView Create(IntPtr id, string title, Size size) { - IThumbnailView view = this._isCompatibilityModeEnabled - ? (IThumbnailView)this._controller.Create() - : (IThumbnailView)this._controller.Create(); + IThumbnailView view = this._controller.Create(); view.Id = id; view.Title = title; diff --git a/README.md b/README.md index 03004b0..7b377bc 100644 --- a/README.md +++ b/README.md @@ -91,7 +91,6 @@ Some of the application options are not exposed in the GUI. They can be adjusted | Option | Description | | --- | --- | | **ActiveClientHighlightThickness** | Thickness of the border used to highlight the active client's thumbnail.
Allowed values are **1**...**6**.
The default value is **3**
For example: **"ActiveClientHighlightThickness": 3** | -| **CompatibilityMode** | Enables the alternative render mode (see below)
The default value is **false**
For example: **"CompatibilityMode": true** | | **EnableThumbnailSnap** | Allows to disable thumbnails snap feature by setting its value to **false**
The default value is **true**
For example: **"EnableThumbnailSnap": true** | | **PriorityClients** | Allows to set a list of clients that are not auto-minimized on inactivity even if the **Minimize inactive EVE clients** option is enabled. Listed clients still can be minimized using Windows hotkeys or via _Ctrl+Click_ on the corresponding thumbnail
The default value is empty list **[]**
For example: **"PriorityClients": [ "EVE - Phrynohyas Tig-Rah", "EVE - Ondatra Patrouette" ]** | | **ThumbnailMinimumSize** | Minimum thumbnail size that can be set either via GUI or by resizing a thumbnail window. Value is written in the form "width, height"
The default value is **"100, 80"**.
For example: **"ThumbnailMinimumSize": "100, 80"** | @@ -125,14 +124,6 @@ The following hotkey is described as `modifier+key` where `modifier` can be **Co **Note:** Do not set hotkeys to use the key combinations already used by EVE. It won't work as "_I set hotkey for my DPS char to F1 and when I'll press F1 it will automatically open the DPS char's window and activate guns_". Key combination will be swallowed by EVE-O Preview and NOT retranslated to EVE window. So it will be only "_it will automatically open the DPS char's window_". -## Compatibility Mode - -This setting allows to enable an alternate thumbnail render. This render doesn't use advanced DWM API to create live previews. Instead it is a screenshot-based render with the following pros and cons: -* `+` Should work even in remote desktop environments -* `-` Consumes significantly more memory. In the testing environment EVE-O Preview did consume around 180 MB to manage 3 thumbnails using this render. At the same time the primary render did consume around 50 MB when run in the same environment. -* `-` Thumbnail images are refreshed at 1 FPS rate -* `-` Possible short mouse cursor freezes - --- # Credits From 6d3a83ac7b469e5a741835fdf74d51b7d12d5b07 Mon Sep 17 00:00:00 2001 From: Anton Kasyanov Date: Sun, 29 Mar 2020 21:50:00 +0300 Subject: [PATCH 02/18] 0: ThumbnailView.cs: Mouse Event Management refactoring --- .../View/Implementation/ThumbnailView.cs | 44 ++++++++++--------- 1 file changed, 23 insertions(+), 21 deletions(-) diff --git a/Eve-O-Preview/View/Implementation/ThumbnailView.cs b/Eve-O-Preview/View/Implementation/ThumbnailView.cs index 167b673..558e56b 100644 --- a/Eve-O-Preview/View/Implementation/ThumbnailView.cs +++ b/Eve-O-Preview/View/Implementation/ThumbnailView.cs @@ -458,27 +458,7 @@ private void MouseLeave_Handler(object sender, EventArgs e) private void MouseDown_Handler(object sender, MouseEventArgs e) { - if (e.Button == MouseButtons.Left) - { - if (Control.ModifierKeys == Keys.Control) - { - this.ThumbnailDeactivated?.Invoke(this.Id, false); - } - else - if (Control.ModifierKeys == (Keys.Control | Keys.Shift)) - { - this.ThumbnailDeactivated?.Invoke(this.Id, true); - } - else - { - this.ThumbnailActivated?.Invoke(this.Id); - } - } - - if ((e.Button == MouseButtons.Right) || (e.Button == (MouseButtons.Left | MouseButtons.Right))) - { - this.EnterCustomMouseMode(); - } + this.MouseDownEventHandler(e.Button, Control.ModifierKeys); } private void MouseMove_Handler(object sender, MouseEventArgs e) @@ -560,5 +540,27 @@ private void ExitCustomMouseMode() this._isCustomMouseModeActive = false; } #endregion + + #region Custom GUI events + protected virtual void MouseDownEventHandler(MouseButtons mouseButtons, Keys modifierKeys) + { + switch (mouseButtons) + { + case MouseButtons.Left when modifierKeys == Keys.Control: + this.ThumbnailDeactivated?.Invoke(this.Id, false); + break; + case MouseButtons.Left when modifierKeys == (Keys.Control | Keys.Shift): + this.ThumbnailDeactivated?.Invoke(this.Id, true); + break; + case MouseButtons.Left: + this.ThumbnailActivated?.Invoke(this.Id); + break; + case MouseButtons.Right: + case MouseButtons.Left | MouseButtons.Right: + this.EnterCustomMouseMode(); + break; + } + } + #endregion } } \ No newline at end of file From e4229dcefced2bb27437bfd7df3b9bb11525065c Mon Sep 17 00:00:00 2001 From: Anton Kasyanov Date: Fri, 29 Jan 2021 19:08:18 +0200 Subject: [PATCH 03/18] Reenabled Compatibility-Mode thumbnails back This reverts commit de7edfa2c19da8473e9d366a68949d3923e4dd63. --- .../Implementation/ThumbnailConfiguration.cs | 14 +++- .../Interface/IThumbnailConfiguration.cs | 2 + Eve-O-Preview/Eve-O-Preview.csproj | 4 ++ Eve-O-Preview/Program.cs | 1 + .../Services/Implementation/WindowManager.cs | 32 ++++++++- .../Services/Interface/IWindowManager.cs | 2 + .../Services/Interop/DwmNativeMethods.cs | 19 +++++ .../Services/Interop/Gdi32NativeMethods.cs | 28 ++++++++ .../Services/Interop/User32NativeMethods.cs | 15 ++++ .../Implementation/StaticThumbnailView.cs | 70 +++++++++++++++++++ .../Implementation/ThumbnailViewFactory.cs | 6 +- README.md | 9 +++ 12 files changed, 197 insertions(+), 5 deletions(-) create mode 100644 Eve-O-Preview/Services/Interop/Gdi32NativeMethods.cs create mode 100644 Eve-O-Preview/View/Implementation/StaticThumbnailView.cs diff --git a/Eve-O-Preview/Configuration/Implementation/ThumbnailConfiguration.cs b/Eve-O-Preview/Configuration/Implementation/ThumbnailConfiguration.cs index 9ec33b0..779f509 100644 --- a/Eve-O-Preview/Configuration/Implementation/ThumbnailConfiguration.cs +++ b/Eve-O-Preview/Configuration/Implementation/ThumbnailConfiguration.cs @@ -24,6 +24,8 @@ public ThumbnailConfiguration() this.MinimizeToTray = false; this.ThumbnailRefreshPeriod = 500; + this.EnableCompatibilityMode = false; + this.ThumbnailOpacity = 0.5; this.EnableClientLayoutTracking = false; @@ -54,6 +56,9 @@ public ThumbnailConfiguration() public bool MinimizeToTray { get; set; } public int ThumbnailRefreshPeriod { get; set; } + [JsonProperty("CompatibilityMode")] + public bool EnableCompatibilityMode { get; set; } + [JsonProperty("ThumbnailsOpacity")] public double ThumbnailOpacity { get; set; } @@ -145,7 +150,8 @@ public Point GetThumbnailLocation(string currentClient, string activeClient, Poi // If there is no layout too then use the default one if (this.EnablePerClientThumbnailLayouts && !string.IsNullOrEmpty(activeClient)) { - if (this.PerClientLayout.TryGetValue(activeClient, out Dictionary layoutSource) && layoutSource.TryGetValue(currentClient, out location)) + Dictionary layoutSource; + if (this.PerClientLayout.TryGetValue(activeClient, out layoutSource) && layoutSource.TryGetValue(currentClient, out location)) { return location; } @@ -181,7 +187,8 @@ public void SetThumbnailLocation(string currentClient, string activeClient, Poin public ClientLayout GetClientLayout(string currentClient) { - this.ClientLayout.TryGetValue(currentClient, out ClientLayout layout); + ClientLayout layout; + this.ClientLayout.TryGetValue(currentClient, out layout); return layout; } @@ -193,7 +200,8 @@ public void SetClientLayout(string currentClient, ClientLayout layout) public Keys GetClientHotkey(string currentClient) { - if (this.ClientHotkey.TryGetValue(currentClient, out string hotkey)) + string hotkey; + if (this.ClientHotkey.TryGetValue(currentClient, out hotkey)) { // Protect from incorrect values object rawValue = (new KeysConverter()).ConvertFromInvariantString(hotkey); diff --git a/Eve-O-Preview/Configuration/Interface/IThumbnailConfiguration.cs b/Eve-O-Preview/Configuration/Interface/IThumbnailConfiguration.cs index 565e395..3cb1158 100644 --- a/Eve-O-Preview/Configuration/Interface/IThumbnailConfiguration.cs +++ b/Eve-O-Preview/Configuration/Interface/IThumbnailConfiguration.cs @@ -8,6 +8,8 @@ public interface IThumbnailConfiguration bool MinimizeToTray { get; set; } int ThumbnailRefreshPeriod { get; set; } + bool EnableCompatibilityMode { get; set; } + double ThumbnailOpacity { get; set; } bool EnableClientLayoutTracking { get; set; } diff --git a/Eve-O-Preview/Eve-O-Preview.csproj b/Eve-O-Preview/Eve-O-Preview.csproj index ef5efdc..375b7a6 100644 --- a/Eve-O-Preview/Eve-O-Preview.csproj +++ b/Eve-O-Preview/Eve-O-Preview.csproj @@ -147,6 +147,7 @@ + @@ -163,6 +164,9 @@ Component + + Form + diff --git a/Eve-O-Preview/Program.cs b/Eve-O-Preview/Program.cs index 0206b9b..dd29e98 100644 --- a/Eve-O-Preview/Program.cs +++ b/Eve-O-Preview/Program.cs @@ -99,6 +99,7 @@ private static IApplicationController InitializeApplicationController() IApplicationController controller = new ApplicationController(container); // UI classes + controller.RegisterView(); controller.RegisterView(); controller.RegisterView(); diff --git a/Eve-O-Preview/Services/Implementation/WindowManager.cs b/Eve-O-Preview/Services/Implementation/WindowManager.cs index 0782f80..80ff23c 100644 --- a/Eve-O-Preview/Services/Implementation/WindowManager.cs +++ b/Eve-O-Preview/Services/Implementation/WindowManager.cs @@ -14,7 +14,7 @@ sealed class WindowManager : IWindowManager public WindowManager() { // Composition is always enabled for Windows 8+ - this.IsCompositionEnabled = + this.IsCompositionEnabled = ((Environment.OSVersion.Version.Major == 6) && (Environment.OSVersion.Version.Minor >= 2)) // Win 8 and Win 8.1 || (Environment.OSVersion.Version.Major >= 10) // Win 10 || DwmNativeMethods.DwmIsCompositionEnabled(); // In case of Win 7 an API call is requiredWin 7 @@ -89,5 +89,35 @@ public IDwmThumbnail GetLiveThumbnail(IntPtr destination, IntPtr source) return thumbnail; } + + public Image GetStaticThumbnail(IntPtr source) + { + var sourceContext = User32NativeMethods.GetDC(source); + + User32NativeMethods.GetClientRect(source, out RECT windowRect); + + var width = windowRect.Right - windowRect.Left; + var height = windowRect.Bottom - windowRect.Top; + + // Check if there is anything to make thumbnail of + if ((width < WINDOW_SIZE_THRESHOLD) || (height < WINDOW_SIZE_THRESHOLD)) + { + return null; + } + + var destContext = Gdi32NativeMethods.CreateCompatibleDC(sourceContext); + var bitmap = Gdi32NativeMethods.CreateCompatibleBitmap(sourceContext, width, height); + + var oldBitmap = Gdi32NativeMethods.SelectObject(destContext, bitmap); + Gdi32NativeMethods.BitBlt(destContext, 0, 0, width, height, sourceContext, 0, 0, Gdi32NativeMethods.SRCCOPY); + Gdi32NativeMethods.SelectObject(destContext, oldBitmap); + Gdi32NativeMethods.DeleteDC(destContext); + User32NativeMethods.ReleaseDC(source, sourceContext); + + Image image = Image.FromHbitmap(bitmap); + Gdi32NativeMethods.DeleteObject(bitmap); + + return image; + } } } \ No newline at end of file diff --git a/Eve-O-Preview/Services/Interface/IWindowManager.cs b/Eve-O-Preview/Services/Interface/IWindowManager.cs index f9f7e06..c1ce08d 100644 --- a/Eve-O-Preview/Services/Interface/IWindowManager.cs +++ b/Eve-O-Preview/Services/Interface/IWindowManager.cs @@ -1,4 +1,5 @@ using System; +using System.Drawing; namespace EveOPreview.Services { @@ -15,5 +16,6 @@ public interface IWindowManager bool IsWindowMaximized(IntPtr handle); bool IsWindowMinimized(IntPtr handle); IDwmThumbnail GetLiveThumbnail(IntPtr destination, IntPtr source); + Image GetStaticThumbnail(IntPtr source); } } \ No newline at end of file diff --git a/Eve-O-Preview/Services/Interop/DwmNativeMethods.cs b/Eve-O-Preview/Services/Interop/DwmNativeMethods.cs index 696668b..5cb7325 100644 --- a/Eve-O-Preview/Services/Interop/DwmNativeMethods.cs +++ b/Eve-O-Preview/Services/Interop/DwmNativeMethods.cs @@ -1,12 +1,28 @@ using System; using System.Runtime.InteropServices; +using System.Drawing; namespace EveOPreview.Services.Interop { static class DwmNativeMethods { + [DllImport("dwmapi.dll", PreserveSig = false)] + public static extern void DwmEnableBlurBehindWindow(IntPtr hWnd, DWM_BLURBEHIND pBlurBehind); + + [DllImport("dwmapi.dll", PreserveSig = false)] + public static extern void DwmExtendFrameIntoClientArea(IntPtr hWnd, MARGINS pMargins); + [DllImport("dwmapi.dll", PreserveSig = false)] public static extern bool DwmIsCompositionEnabled(); + + [DllImport("dwmapi.dll", PreserveSig = false)] + public static extern void DwmGetColorizationColor( + out int pcrColorization, + [MarshalAs(UnmanagedType.Bool)]out bool pfOpaqueBlend); + + [DllImport("dwmapi.dll", PreserveSig = false)] + public static extern void DwmEnableComposition(bool bEnable); + [DllImport("dwmapi.dll", PreserveSig = false)] public static extern IntPtr DwmRegisterThumbnail(IntPtr dest, IntPtr source); @@ -15,5 +31,8 @@ static class DwmNativeMethods [DllImport("dwmapi.dll", PreserveSig = false)] public static extern void DwmUpdateThumbnailProperties(IntPtr hThumbnail, DWM_THUMBNAIL_PROPERTIES props); + + [DllImport("dwmapi.dll", PreserveSig = false)] + public static extern void DwmQueryThumbnailSourceSize(IntPtr hThumbnail, out Size size); } } \ No newline at end of file diff --git a/Eve-O-Preview/Services/Interop/Gdi32NativeMethods.cs b/Eve-O-Preview/Services/Interop/Gdi32NativeMethods.cs new file mode 100644 index 0000000..f966511 --- /dev/null +++ b/Eve-O-Preview/Services/Interop/Gdi32NativeMethods.cs @@ -0,0 +1,28 @@ +using System; +using System.Runtime.InteropServices; + +namespace EveOPreview.Services.Interop +{ + static class Gdi32NativeMethods + { + public const int SRCCOPY = 13369376; + + [DllImport("gdi32.dll")] + public static extern IntPtr CreateCompatibleDC(IntPtr hdc); + + [DllImport("gdi32.dll")] + public static extern bool DeleteDC(IntPtr hdc); + + [DllImport("gdi32.dll")] + public static extern IntPtr CreateCompatibleBitmap(IntPtr hdc, int width, int height); + + [DllImport("gdi32.dll")] + public static extern IntPtr SelectObject(IntPtr hdc, IntPtr hObject); + + [DllImport("gdi32.dll")] + public static extern bool DeleteObject(IntPtr hObject); + + [DllImport("gdi32.dll")] + public static extern bool BitBlt(IntPtr hObject, int nXDest, int nYDest, int nWidth, int nHeight, IntPtr hObjectSource, int nXSrc, int nYSrc, int dwRop); + } +} diff --git a/Eve-O-Preview/Services/Interop/User32NativeMethods.cs b/Eve-O-Preview/Services/Interop/User32NativeMethods.cs index 05ef2bc..6adc97a 100644 --- a/Eve-O-Preview/Services/Interop/User32NativeMethods.cs +++ b/Eve-O-Preview/Services/Interop/User32NativeMethods.cs @@ -14,6 +14,9 @@ static class User32NativeMethods [DllImport("user32.dll")] public static extern bool ShowWindowAsync(IntPtr hWnd, int nCmdShow); + [DllImport("User32.dll")] + public static extern bool ReleaseCapture(); + [DllImport("User32.dll")] public static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam); @@ -23,6 +26,9 @@ static class User32NativeMethods [DllImport("user32.dll")] public static extern int GetWindowRect(IntPtr hWnd, out RECT rect); + [DllImport("user32.dll")] + public static extern bool GetClientRect(IntPtr hWnd, out RECT rect); + [DllImport("user32.dll", SetLastError = true)] [return: MarshalAs(UnmanagedType.Bool)] public static extern bool GetWindowPlacement(IntPtr hWnd, ref WINDOWPLACEMENT lpwndpl); @@ -39,5 +45,14 @@ static class User32NativeMethods [DllImport("user32.dll")] public static extern bool IsZoomed(IntPtr hWnd); + + [DllImport("user32.dll")] + public static extern IntPtr GetWindowDC(IntPtr hWnd); + + [DllImport("user32.dll")] + public static extern IntPtr GetDC(IntPtr hWnd); + + [DllImport("user32.dll")] + public static extern IntPtr ReleaseDC(IntPtr hWnd, IntPtr hdc); } } \ No newline at end of file diff --git a/Eve-O-Preview/View/Implementation/StaticThumbnailView.cs b/Eve-O-Preview/View/Implementation/StaticThumbnailView.cs new file mode 100644 index 0000000..c01ebc3 --- /dev/null +++ b/Eve-O-Preview/View/Implementation/StaticThumbnailView.cs @@ -0,0 +1,70 @@ +using System; +using System.Drawing; +using System.Windows.Forms; +using EveOPreview.Services; + +namespace EveOPreview.View +{ + sealed class StaticThumbnailView : ThumbnailView + { + #region Private fields + private readonly PictureBox _thumbnail; + #endregion + + public StaticThumbnailView(IWindowManager windowManager) + : base(windowManager) + { + this._thumbnail = new StaticThumbnailImage + { + TabStop = false, + SizeMode = PictureBoxSizeMode.StretchImage, + Location = new Point(0, 0), + Size = new Size(this.ClientSize.Width, this.ClientSize.Height) + }; + this.Controls.Add(this._thumbnail); + } + + protected override void RefreshThumbnail(bool forceRefresh) + { + if (!forceRefresh) + { + return; + } + + var thumbnail = this.WindowManager.GetStaticThumbnail(this.Id); + if (thumbnail != null) + { + var oldImage = this._thumbnail.Image; + this._thumbnail.Image = thumbnail; + oldImage?.Dispose(); + } + } + + protected override void ResizeThumbnail(int baseWidth, int baseHeight, int highlightWidthTop, int highlightWidthRight, int highlightWidthBottom, int highlightWidthLeft) + { + var left = 0 + highlightWidthLeft; + var top = 0 + highlightWidthTop; + if (this.IsLocationUpdateRequired(this._thumbnail.Location, left, top)) + { + this._thumbnail.Location = new Point(left, top); + } + + var width = baseWidth - highlightWidthLeft - highlightWidthRight; + var height = baseHeight - highlightWidthTop - highlightWidthBottom; + if (this.IsSizeUpdateRequired(this._thumbnail.Size, width, height)) + { + this._thumbnail.Size = new Size(width, height); + } + } + + private bool IsLocationUpdateRequired(Point currentLocation, int left, int top) + { + return (currentLocation.X != left) || (currentLocation.Y != top); + } + + private bool IsSizeUpdateRequired(Size currentSize, int width, int height) + { + return (currentSize.Width != width) || (currentSize.Height != height); + } + } +} \ No newline at end of file diff --git a/Eve-O-Preview/View/Implementation/ThumbnailViewFactory.cs b/Eve-O-Preview/View/Implementation/ThumbnailViewFactory.cs index 285adef..83d271e 100644 --- a/Eve-O-Preview/View/Implementation/ThumbnailViewFactory.cs +++ b/Eve-O-Preview/View/Implementation/ThumbnailViewFactory.cs @@ -7,15 +7,19 @@ namespace EveOPreview.View sealed class ThumbnailViewFactory : IThumbnailViewFactory { private readonly IApplicationController _controller; + private readonly bool _isCompatibilityModeEnabled; public ThumbnailViewFactory(IApplicationController controller, IThumbnailConfiguration configuration) { this._controller = controller; + this._isCompatibilityModeEnabled = configuration.EnableCompatibilityMode; } public IThumbnailView Create(IntPtr id, string title, Size size) { - IThumbnailView view = this._controller.Create(); + IThumbnailView view = this._isCompatibilityModeEnabled + ? (IThumbnailView)this._controller.Create() + : (IThumbnailView)this._controller.Create(); view.Id = id; view.Title = title; diff --git a/README.md b/README.md index 7b377bc..03004b0 100644 --- a/README.md +++ b/README.md @@ -91,6 +91,7 @@ Some of the application options are not exposed in the GUI. They can be adjusted | Option | Description | | --- | --- | | **ActiveClientHighlightThickness** | Thickness of the border used to highlight the active client's thumbnail.
Allowed values are **1**...**6**.
The default value is **3**
For example: **"ActiveClientHighlightThickness": 3** | +| **CompatibilityMode** | Enables the alternative render mode (see below)
The default value is **false**
For example: **"CompatibilityMode": true** | | **EnableThumbnailSnap** | Allows to disable thumbnails snap feature by setting its value to **false**
The default value is **true**
For example: **"EnableThumbnailSnap": true** | | **PriorityClients** | Allows to set a list of clients that are not auto-minimized on inactivity even if the **Minimize inactive EVE clients** option is enabled. Listed clients still can be minimized using Windows hotkeys or via _Ctrl+Click_ on the corresponding thumbnail
The default value is empty list **[]**
For example: **"PriorityClients": [ "EVE - Phrynohyas Tig-Rah", "EVE - Ondatra Patrouette" ]** | | **ThumbnailMinimumSize** | Minimum thumbnail size that can be set either via GUI or by resizing a thumbnail window. Value is written in the form "width, height"
The default value is **"100, 80"**.
For example: **"ThumbnailMinimumSize": "100, 80"** | @@ -124,6 +125,14 @@ The following hotkey is described as `modifier+key` where `modifier` can be **Co **Note:** Do not set hotkeys to use the key combinations already used by EVE. It won't work as "_I set hotkey for my DPS char to F1 and when I'll press F1 it will automatically open the DPS char's window and activate guns_". Key combination will be swallowed by EVE-O Preview and NOT retranslated to EVE window. So it will be only "_it will automatically open the DPS char's window_". +## Compatibility Mode + +This setting allows to enable an alternate thumbnail render. This render doesn't use advanced DWM API to create live previews. Instead it is a screenshot-based render with the following pros and cons: +* `+` Should work even in remote desktop environments +* `-` Consumes significantly more memory. In the testing environment EVE-O Preview did consume around 180 MB to manage 3 thumbnails using this render. At the same time the primary render did consume around 50 MB when run in the same environment. +* `-` Thumbnail images are refreshed at 1 FPS rate +* `-` Possible short mouse cursor freezes + --- # Credits From 779ff2cf7c05c85fda01f50ca629591788d31825 Mon Sep 17 00:00:00 2001 From: Anton Kasyanov Date: Mon, 1 Feb 2021 23:55:36 +0200 Subject: [PATCH 04/18] #178: Configure Cake.Frosting build system --- EVE-O-Preview.sln | 13 +- README.md | 52 ++- build/Build.csproj | 31 ++ build/Configuration.cs | 14 + build/Context.cs | 9 + build/Lifetime.cs | 59 +++ build/Program.cs | 22 + build/Tasks/Build.cs | 26 ++ build/Tasks/Default.cs | 9 + build/Tasks/Documentation.cs | 22 + build/Tasks/Restore.cs | 17 + build/Tasks/Zip.cs | 20 + build/Themes/Github/Theme.css | 707 +++++++++++++++++++++++++++++++++ build/Themes/Github/Theme.html | 14 + 14 files changed, 995 insertions(+), 20 deletions(-) create mode 100644 build/Build.csproj create mode 100644 build/Configuration.cs create mode 100644 build/Context.cs create mode 100644 build/Lifetime.cs create mode 100644 build/Program.cs create mode 100644 build/Tasks/Build.cs create mode 100644 build/Tasks/Default.cs create mode 100644 build/Tasks/Documentation.cs create mode 100644 build/Tasks/Restore.cs create mode 100644 build/Tasks/Zip.cs create mode 100644 build/Themes/Github/Theme.css create mode 100644 build/Themes/Github/Theme.html diff --git a/EVE-O-Preview.sln b/EVE-O-Preview.sln index c5d80f3..7feb2b1 100644 --- a/EVE-O-Preview.sln +++ b/EVE-O-Preview.sln @@ -1,10 +1,14 @@  -Microsoft Visual Studio Solution File, Format Version 14.00 -# Visual Studio 2015 +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.30907.101 +MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Eve-O-Preview", "Eve-O-Preview\Eve-O-Preview.csproj", "{6CA62DF3-8589-484C-8BC8-F763CA66BBB1}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Eve-O-Mock", "Eve-O-Mock\Eve-O-Mock.csproj", "{BE2C3A13-CC19-4525-895F-381DD71C5833}" EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Build", "build\Build.csproj", "{68083BCC-92B8-4A73-BFD2-0DE619873F86}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -19,8 +23,13 @@ Global {BE2C3A13-CC19-4525-895F-381DD71C5833}.Debug|Any CPU.Build.0 = Debug|Any CPU {BE2C3A13-CC19-4525-895F-381DD71C5833}.Release|Any CPU.ActiveCfg = Release|Any CPU {BE2C3A13-CC19-4525-895F-381DD71C5833}.Release|Any CPU.Build.0 = Release|Any CPU + {68083BCC-92B8-4A73-BFD2-0DE619873F86}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {68083BCC-92B8-4A73-BFD2-0DE619873F86}.Release|Any CPU.ActiveCfg = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {157D7AB8-ED90-4599-BD45-ECE31A4226A8} + EndGlobalSection EndGlobal diff --git a/README.md b/README.md index 03004b0..a3a88f7 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Overview +## Overview The purpose of this application is to provide a simple way to keep an eye on several simultaneously running EVE Online clients and to easily switch between them. While running it shows a set of live thumbnails for each of the active EVE Online clients. These thumbnails allow fast switch to the corresponding EVE Online client either using mouse or configurable hotkeys. @@ -15,20 +15,20 @@ The program does NOT (and will NOT ever) do the following things: If you have find out that some of the features or their combination of EVE-O Preview might cause actions that can be considered as breaking EULA or ToS of EVE Online you should consider them as a bug and immediately notify the Developer ( Phrynohyas Tig-Rah ) via in-game mail. -# System Requirements +## System Requirements * Windows 7, Windows 8/8.1, Windows 10 * Microsoft .NET Framework 4.7+ * EVE clients Display Mode should be set to **Fixed Window** or **Window Mode**. **Fullscreen** mode is not supported. -# How To Install & Use +## How To Install & Use 1. Download and extract the contents of the .zip archive to a location of your choice (ie: Desktop, CCP folder, etc) ..* **Note**: Please do not install the application into the *Program Files* or *Program files (x86)* folders. These folders in general do not allow applications to write anything there while EVE-O Preview now stores its configuration file next to its executable, thus requiring the write access to the folder it is installed into. 2. Start up both EVE-O Preview and your EVE Clients (the order does not matter) 3. Adjust settings as you see fit. Program options are described below -# EVE Online EULA/ToS +## EVE Online EULA/ToS This application is legal under the EULA/ToS: @@ -44,9 +44,11 @@ CCP Grimmi wrote: > to bring the respective EVE Client to the front/put the window focus on it, in order to > interact with it. -# Application Options +
-## Application Options Available Via GUI +## Application Options + +### Application Options Available Via GUI | Tab | Option | Description | | --- | --- | --- | @@ -69,7 +71,9 @@ CCP Grimmi wrote: | Overlay | Color | Color used to highlight the active client's thumbnail in case the corresponding option is set | | **Active Clients** | Thumbnails list | List of currently active EVE client thumbnails. Checking an element in this list will hide the corresponding thumbnail. However these checks are not persisted and on the next EVE client or EVE-O Preview run the thumbnail will be visible again | -## Mouse Gestures and Actions +
+ +### Mouse Gestures and Actions Mouse gestures are applied to the thumbnail window currently being hovered over. @@ -82,7 +86,9 @@ Mouse gestures are applied to the thumbnail window currently being hovered over. | Adjust thumbnail height | Press both left and right mouse buttons and move the mouse up or down | | Adjust thumbnail width | Press both left and right mouse buttons and move the mouse left or right | -## Configuration File-Only Options +
+ +### Configuration File-Only Options Some of the application options are not exposed in the GUI. They can be adjusted directly in the configuration file. @@ -97,7 +103,9 @@ Some of the application options are not exposed in the GUI. They can be adjusted | **ThumbnailMinimumSize** | Minimum thumbnail size that can be set either via GUI or by resizing a thumbnail window. Value is written in the form "width, height"
The default value is **"100, 80"**.
For example: **"ThumbnailMinimumSize": "100, 80"** | | **ThumbnailMaximumSize** | Maximum thumbnail size that can be set either via GUI or by resizing a thumbnail window. Value is written in the form "width, height"
The default value is **"640, 400"**.
For example: **"ThumbnailMaximumSize": "640, 400"** | -## Hotkey Setup +
+ +### Hotkey Setup It is possible to set a key combinations to immediately jump to certain EVE window. However currently EVE-O Preview doesn't provide any GUI to set the these hotkeys. It should be done via editing the configuration file directly. Don't forget to make a backup copy of the file before editing it. @@ -125,7 +133,9 @@ The following hotkey is described as `modifier+key` where `modifier` can be **Co **Note:** Do not set hotkeys to use the key combinations already used by EVE. It won't work as "_I set hotkey for my DPS char to F1 and when I'll press F1 it will automatically open the DPS char's window and activate guns_". Key combination will be swallowed by EVE-O Preview and NOT retranslated to EVE window. So it will be only "_it will automatically open the DPS char's window_". -## Compatibility Mode +
+ +### Compatibility Mode This setting allows to enable an alternate thumbnail render. This render doesn't use advanced DWM API to create live previews. Instead it is a screenshot-based render with the following pros and cons: * `+` Should work even in remote desktop environments @@ -133,38 +143,44 @@ This setting allows to enable an alternate thumbnail render. This render doesn't * `-` Thumbnail images are refreshed at 1 FPS rate * `-` Possible short mouse cursor freezes ---- +
-# Credits +## Credits -## Maintained by +### Maintained by * Phrynohyas Tig-Rah -## Created by +### Created by * StinkRay -## Previous maintainers +### Previous maintainers * Makari Aeron * StinkRay -## With contributions from +### With contributions from * CCP FoxFour -## Forum thread +### Forum thread https://forums.eveonline.com/t/4202 -## Original repository +### Original repository https://bitbucket.org/ulph/eve-o-preview-git + +
+ +## CCP Copyright Notice + +EVE Online, the EVE logo, EVE and all associated logos and designs are the intellectual property of CCP hf. All artwork, screenshots, characters, vehicles, storylines, world facts or other recognizable features of the intellectual property relating to these trademarks are likewise the intellectual property of CCP hf. EVE Online and the EVE logo are the registered trademarks of CCP hf. All rights are reserved worldwide. All other trademarks are the property of their respective owners. CCP hf. has granted permission to pyfa to use EVE Online and all associated logos and designs for promotional and information purposes on its website but does not endorse, and is not in any way affiliated with, pyfa. CCP is in no way responsible for the content on or functioning of this program, nor can it be liable for any damage arising from the use of this program. \ No newline at end of file diff --git a/build/Build.csproj b/build/Build.csproj new file mode 100644 index 0000000..15f587d --- /dev/null +++ b/build/Build.csproj @@ -0,0 +1,31 @@ + + + + Exe + netcoreapp3.1 + true + + + $(MSBuildProjectDirectory) + + + + + + + + + + Always + + + Always + + + + + + + + + diff --git a/build/Configuration.cs b/build/Configuration.cs new file mode 100644 index 0000000..d948d61 --- /dev/null +++ b/build/Configuration.cs @@ -0,0 +1,14 @@ +namespace Build +{ + static class Configuration + { + public const string SolutionName = @"./EVE-O-Preview.sln"; + + public const string BinFolder = @"./bin"; + public const string ToolsFolder = @"./tools"; + public const string PublishFolder = @"./publish"; + public const string BuildConfiguration = @"Release"; + + public const string BuildToolPath = @"c:\Developer Tools\Microsoft Visual Studio\2019\Community\MSBuild\Current\Bin\MSBuild.exe"; // Set to NULL to let Cake to try to use the default MSBuild instance + } +} diff --git a/build/Context.cs b/build/Context.cs new file mode 100644 index 0000000..7865479 --- /dev/null +++ b/build/Context.cs @@ -0,0 +1,9 @@ +using Cake.Core; +using Cake.Frosting; +public class Context : FrostingContext +{ + public Context(ICakeContext context) + : base(context) + { + } +} \ No newline at end of file diff --git a/build/Lifetime.cs b/build/Lifetime.cs new file mode 100644 index 0000000..197f27a --- /dev/null +++ b/build/Lifetime.cs @@ -0,0 +1,59 @@ +using Cake.Common.Diagnostics; +using Cake.Common.IO; +using Cake.Common.Net; +using Cake.Core; +using Cake.Core.IO; +using Cake.Frosting; + +public sealed class Lifetime : FrostingLifetime +{ + private const string NuGetUrl = @"https://dist.nuget.org/win-x86-commandline/latest/nuget.exe"; + private const string ToolsDirectoryName = "./tools"; + private const string BinDirectoryName = "./bin"; + private const string PublishDirectoryName = "./publish"; + + private void DeleteDirectory(Context context, string directoryName) + { + if (!context.DirectoryExists(directoryName)) + { + return; + } + + context.DeleteDirectory(directoryName, new DeleteDirectorySettings { Force = true, Recursive = true }); + } + + private void DownloadNuGet(Context context) + { + if (context.FileExists(ToolsDirectoryName + "/nuget.exe")) + { + return; + } + + if (!context.DirectoryExists(ToolsDirectoryName)) + { + context.CreateDirectory(ToolsDirectoryName); + } + + var tempFile = context.DownloadFile(NuGetUrl); + context.CopyFile(tempFile, new FilePath(ToolsDirectoryName + "/nuget.exe")); + } + + public override void Setup(Context context) + { + context.Information("Setting things up..."); + + context.Information("Delete bin and publish folders"); + this.DeleteDirectory(context, BinDirectoryName); + this.DeleteDirectory(context, PublishDirectoryName); + + context.Information("Download NuGet"); + this.DownloadNuGet(context); + + } + + public override void Teardown(Context context, ITeardownContext info) + { + context.Information("Tearing things down..."); + //this.DeleteDirectory(context, ToolsDirectoryName); + } +} \ No newline at end of file diff --git a/build/Program.cs b/build/Program.cs new file mode 100644 index 0000000..a013a4e --- /dev/null +++ b/build/Program.cs @@ -0,0 +1,22 @@ +using Cake.Frosting; +using Microsoft.Extensions.DependencyInjection; + +namespace Build +{ + public class Program : IFrostingStartup + { + public static int Main(string[] args) + => new CakeHost() + .UseStartup() + .Run(args); + + public void Configure(IServiceCollection services) + { + services.UseContext(); + services.UseLifetime(); + + //move up from build directory and searching for sln or csproj files + services.UseWorkingDirectory(".."); + } + } +} \ No newline at end of file diff --git a/build/Tasks/Build.cs b/build/Tasks/Build.cs new file mode 100644 index 0000000..02bb921 --- /dev/null +++ b/build/Tasks/Build.cs @@ -0,0 +1,26 @@ +using Cake.Common.Diagnostics; +using Cake.Common.Tools.MSBuild; +using Cake.Frosting; + +namespace Build.Tasks +{ + [Dependency(typeof(Restore))] + public sealed class Build : FrostingTask + { + public override void Run(Context context) + { + context.Information("Build started..."); + + context.MSBuild(Configuration.SolutionName, settings => + { + settings.Configuration = Configuration.BuildConfiguration; + settings.ToolVersion = MSBuildToolVersion.Default; + + if (!string.IsNullOrEmpty(Configuration.BuildToolPath)) + { + settings.ToolPath = Configuration.BuildToolPath; + } + }); + } + } +} diff --git a/build/Tasks/Default.cs b/build/Tasks/Default.cs new file mode 100644 index 0000000..86e9ecf --- /dev/null +++ b/build/Tasks/Default.cs @@ -0,0 +1,9 @@ +using Cake.Frosting; + +namespace Build.Tasks +{ + [Dependency(typeof(Zip))] + public sealed class Default : FrostingTask + { + } +} \ No newline at end of file diff --git a/build/Tasks/Documentation.cs b/build/Tasks/Documentation.cs new file mode 100644 index 0000000..4d69137 --- /dev/null +++ b/build/Tasks/Documentation.cs @@ -0,0 +1,22 @@ +using Cake.Common.Diagnostics; +using Cake.Frosting; +using Cake.MarkdownToPdf; +using Markdig; + +namespace Build.Tasks +{ + public sealed class Documentation : FrostingTask + { + public override void Run(Context context) + { + context.Information("Convert README.MD"); + + context.MarkdownFileToPdf("readme.md", Configuration.BinFolder + "/readme.pdf", settings => + { + settings.Theme = Themes.Github; + settings.UseAdvancedMarkdownTables(); + settings.MarkdownPipeline.UseGridTables(); + }); + } + } +} \ No newline at end of file diff --git a/build/Tasks/Restore.cs b/build/Tasks/Restore.cs new file mode 100644 index 0000000..9eb12dc --- /dev/null +++ b/build/Tasks/Restore.cs @@ -0,0 +1,17 @@ +using Cake.Common.Diagnostics; +using Cake.Common.Tools.NuGet; +using Cake.Common.Tools.NuGet.Restore; +using Cake.Frosting; + +namespace Build.Tasks +{ + [Dependency(typeof(Documentation))] + public sealed class Restore : FrostingTask + { + public override void Run(Context context) + { + context.Information("Restore started..."); + context.NuGetRestore(Configuration.SolutionName, new NuGetRestoreSettings { NoCache = true }); + } + } +} diff --git a/build/Tasks/Zip.cs b/build/Tasks/Zip.cs new file mode 100644 index 0000000..e2ecb18 --- /dev/null +++ b/build/Tasks/Zip.cs @@ -0,0 +1,20 @@ +using Cake.Common.IO; +using Cake.Frosting; + +namespace Build.Tasks +{ + [Dependency(typeof(Build))] + public sealed class Zip : FrostingTask + { + public override void Run(Context context) + { + if (!context.DirectoryExists(Configuration.PublishFolder)) + { + context.CreateDirectory(Configuration.PublishFolder); + } + + context.Zip(Configuration.BinFolder, Configuration.PublishFolder + "/EVE-O Preview.zip", + new[] { Configuration.BinFolder + "/EVE-O Preview.exe", Configuration.BinFolder + "/readme.pdf" }); + } + } +} \ No newline at end of file diff --git a/build/Themes/Github/Theme.css b/build/Themes/Github/Theme.css new file mode 100644 index 0000000..4b95f9c --- /dev/null +++ b/build/Themes/Github/Theme.css @@ -0,0 +1,707 @@ +@font-face { + font-family: octicons-link; + src: url(data:font/woff;charset=utf-8;base64,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) format('woff'); +} + +.markdown-body { + -ms-text-size-adjust: 100%; + -webkit-text-size-adjust: 100%; + line-height: 1.5; + color: #24292e; + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + font-size: 16px; + line-height: 1.5; + word-wrap: break-word; +} + +.markdown-body .pl-c { + color: #6a737d; +} + +.markdown-body .pl-c1, +.markdown-body .pl-s .pl-v { + color: #005cc5; +} + +.markdown-body .pl-e, +.markdown-body .pl-en { + color: #6f42c1; +} + +.markdown-body .pl-smi, +.markdown-body .pl-s .pl-s1 { + color: #24292e; +} + +.markdown-body .pl-ent { + color: #22863a; +} + +.markdown-body .pl-k { + color: #d73a49; +} + +.markdown-body .pl-s, +.markdown-body .pl-pds, +.markdown-body .pl-s .pl-pse .pl-s1, +.markdown-body .pl-sr, +.markdown-body .pl-sr .pl-cce, +.markdown-body .pl-sr .pl-sre, +.markdown-body .pl-sr .pl-sra { + color: #032f62; +} + +.markdown-body .pl-v, +.markdown-body .pl-smw { + color: #e36209; +} + +.markdown-body .pl-bu { + color: #b31d28; +} + +.markdown-body .pl-ii { + color: #fafbfc; + background-color: #b31d28; +} + +.markdown-body .pl-c2 { + color: #fafbfc; + background-color: #d73a49; +} + +.markdown-body .pl-c2::before { + content: "^M"; +} + +.markdown-body .pl-sr .pl-cce { + font-weight: bold; + color: #22863a; +} + +.markdown-body .pl-ml { + color: #735c0f; +} + +.markdown-body .pl-mh, +.markdown-body .pl-mh .pl-en, +.markdown-body .pl-ms { + font-weight: bold; + color: #005cc5; +} + +.markdown-body .pl-mi { + font-style: italic; + color: #24292e; +} + +.markdown-body .pl-mb { + font-weight: bold; + color: #24292e; +} + +.markdown-body .pl-md { + color: #b31d28; + background-color: #ffeef0; +} + +.markdown-body .pl-mi1 { + color: #22863a; + background-color: #f0fff4; +} + +.markdown-body .pl-mc { + color: #e36209; + background-color: #ffebda; +} + +.markdown-body .pl-mi2 { + color: #f6f8fa; + background-color: #005cc5; +} + +.markdown-body .pl-mdr { + font-weight: bold; + color: #6f42c1; +} + +.markdown-body .pl-ba { + color: #586069; +} + +.markdown-body .pl-sg { + color: #959da5; +} + +.markdown-body .pl-corl { + text-decoration: underline; + color: #032f62; +} + +.markdown-body .octicon { + display: inline-block; + vertical-align: text-top; + fill: currentColor; +} + +.markdown-body a { + background-color: transparent; + -webkit-text-decoration-skip: objects; +} + +.markdown-body a:active, +.markdown-body a:hover { + outline-width: 0; +} + +.markdown-body strong { + font-weight: inherit; +} + +.markdown-body strong { + font-weight: bolder; +} + +.markdown-body h1 { + font-size: 2em; + margin: 0.67em 0; +} + +.markdown-body img { + border-style: none; +} + +.markdown-body svg:not(:root) { + overflow: hidden; +} + +.markdown-body code, +.markdown-body kbd, +.markdown-body pre { + font-family: monospace, monospace; + font-size: 1em; +} + +.markdown-body hr { + box-sizing: content-box; + height: 0; + overflow: visible; +} + +.markdown-body input { + font: inherit; + margin: 0; +} + +.markdown-body input { + overflow: visible; +} + +.markdown-body [type="checkbox"] { + box-sizing: border-box; + padding: 0; +} + +.markdown-body * { + box-sizing: border-box; +} + +.markdown-body input { + font-family: inherit; + font-size: inherit; + line-height: inherit; +} + +.markdown-body a { + color: #0366d6; + text-decoration: none; +} + +.markdown-body a:hover { + text-decoration: underline; +} + +.markdown-body strong { + font-weight: 600; +} + +.markdown-body hr { + height: 0; + margin: 15px 0; + overflow: hidden; + background: transparent; + border: 0; + border-bottom: 1px solid #dfe2e5; +} + +.markdown-body hr::before { + display: table; + content: ""; +} + +.markdown-body hr::after { + display: table; + clear: both; + content: ""; +} + +.markdown-body table { + border-spacing: 0; + border-collapse: collapse; +} + +.markdown-body td, +.markdown-body th { + padding: 0; +} + +.markdown-body h1, +.markdown-body h2, +.markdown-body h3, +.markdown-body h4, +.markdown-body h5, +.markdown-body h6 { + margin-top: 0; + margin-bottom: 0; +} + +.markdown-body h1 { + font-size: 32px; + font-weight: 600; +} + +.markdown-body h2 { + font-size: 24px; + font-weight: 600; +} + +.markdown-body h3 { + font-size: 20px; + font-weight: 600; +} + +.markdown-body h4 { + font-size: 16px; + font-weight: 600; +} + +.markdown-body h5 { + font-size: 14px; + font-weight: 600; +} + +.markdown-body h6 { + font-size: 12px; + font-weight: 600; +} + +.markdown-body p { + margin-top: 0; + margin-bottom: 10px; +} + +.markdown-body blockquote { + margin: 0; +} + +.markdown-body ul, +.markdown-body ol { + padding-left: 0; + margin-top: 0; + margin-bottom: 0; +} + +.markdown-body ol ol, +.markdown-body ul ol { + list-style-type: lower-roman; +} + +.markdown-body ul ul ol, +.markdown-body ul ol ol, +.markdown-body ol ul ol, +.markdown-body ol ol ol { + list-style-type: lower-alpha; +} + +.markdown-body dd { + margin-left: 0; +} + +.markdown-body code { + font-family: "SFMono-Regular", Consolas, "Liberation Mono", Menlo, Courier, monospace; + font-size: 12px; +} + +.markdown-body pre { + margin-top: 0; + margin-bottom: 0; + font: 12px "SFMono-Regular", Consolas, "Liberation Mono", Menlo, Courier, monospace; +} + +.markdown-body .octicon { + vertical-align: text-bottom; +} + +.markdown-body .pl-0 { + padding-left: 0 !important; +} + +.markdown-body .pl-1 { + padding-left: 4px !important; +} + +.markdown-body .pl-2 { + padding-left: 8px !important; +} + +.markdown-body .pl-3 { + padding-left: 16px !important; +} + +.markdown-body .pl-4 { + padding-left: 24px !important; +} + +.markdown-body .pl-5 { + padding-left: 32px !important; +} + +.markdown-body .pl-6 { + padding-left: 40px !important; +} + +.markdown-body::before { + display: table; + content: ""; +} + +.markdown-body::after { + display: table; + clear: both; + content: ""; +} + +.markdown-body>*:first-child { + margin-top: 0 !important; +} + +.markdown-body>*:last-child { + margin-bottom: 0 !important; +} + +.markdown-body a:not([href]) { + color: inherit; + text-decoration: none; +} + +.markdown-body .anchor { + float: left; + padding-right: 4px; + margin-left: -20px; + line-height: 1; +} + +.markdown-body .anchor:focus { + outline: none; +} + +.markdown-body p, +.markdown-body blockquote, +.markdown-body ul, +.markdown-body ol, +.markdown-body dl, +.markdown-body table, +.markdown-body pre { + margin-top: 0; + margin-bottom: 16px; +} + +.markdown-body hr { + height: 0.25em; + padding: 0; + margin: 24px 0; + background-color: #e1e4e8; + border: 0; +} + +.markdown-body blockquote { + padding: 0 1em; + color: #6a737d; + border-left: 0.25em solid #dfe2e5; +} + +.markdown-body blockquote>:first-child { + margin-top: 0; +} + +.markdown-body blockquote>:last-child { + margin-bottom: 0; +} + +.markdown-body kbd { + display: inline-block; + padding: 3px 5px; + font-size: 11px; + line-height: 10px; + color: #444d56; + vertical-align: middle; + background-color: #fafbfc; + border: solid 1px #c6cbd1; + border-bottom-color: #959da5; + border-radius: 3px; + box-shadow: inset 0 -1px 0 #959da5; +} + +.markdown-body h1, +.markdown-body h2, +.markdown-body h3, +.markdown-body h4, +.markdown-body h5, +.markdown-body h6 { + margin-top: 24px; + margin-bottom: 16px; + font-weight: 600; + line-height: 1.25; +} + +.markdown-body h1 .octicon-link, +.markdown-body h2 .octicon-link, +.markdown-body h3 .octicon-link, +.markdown-body h4 .octicon-link, +.markdown-body h5 .octicon-link, +.markdown-body h6 .octicon-link { + color: #1b1f23; + vertical-align: middle; + visibility: hidden; +} + +.markdown-body h1:hover .anchor, +.markdown-body h2:hover .anchor, +.markdown-body h3:hover .anchor, +.markdown-body h4:hover .anchor, +.markdown-body h5:hover .anchor, +.markdown-body h6:hover .anchor { + text-decoration: none; +} + +.markdown-body h1:hover .anchor .octicon-link, +.markdown-body h2:hover .anchor .octicon-link, +.markdown-body h3:hover .anchor .octicon-link, +.markdown-body h4:hover .anchor .octicon-link, +.markdown-body h5:hover .anchor .octicon-link, +.markdown-body h6:hover .anchor .octicon-link { + visibility: visible; +} + +.markdown-body h1 { + padding-bottom: 0.3em; + font-size: 2em; + border-bottom: 1px solid #eaecef; +} + +.markdown-body h2 { + padding-bottom: 0.3em; + font-size: 1.5em; + border-bottom: 1px solid #eaecef; +} + +.markdown-body h3 { + font-size: 1.25em; +} + +.markdown-body h4 { + font-size: 1em; +} + +.markdown-body h5 { + font-size: 0.875em; +} + +.markdown-body h6 { + font-size: 0.85em; + color: #6a737d; +} + +.markdown-body ul, +.markdown-body ol { + padding-left: 2em; +} + +.markdown-body ul ul, +.markdown-body ul ol, +.markdown-body ol ol, +.markdown-body ol ul { + margin-top: 0; + margin-bottom: 0; +} + +.markdown-body li>p { + margin-top: 16px; +} + +.markdown-body li+li { + margin-top: 0.25em; +} + +.markdown-body dl { + padding: 0; +} + +.markdown-body dl dt { + padding: 0; + margin-top: 16px; + font-size: 1em; + font-style: italic; + font-weight: 600; +} + +.markdown-body dl dd { + padding: 0 16px; + margin-bottom: 16px; +} + +.markdown-body table { + display: block; + width: 100%; + overflow: auto; +} + +.markdown-body table th { + font-weight: 600; +} + +.markdown-body table th, +.markdown-body table td { + padding: 6px 13px; + border: 1px solid #dfe2e5; +} + +.markdown-body table tr { + background-color: #fff; + border-top: 1px solid #c6cbd1; +} + +.markdown-body table tr:nth-child(2n) { + background-color: #f6f8fa; +} + +.markdown-body img { + max-width: 100%; + box-sizing: content-box; + background-color: #fff; +} + +.markdown-body code { + padding: 0; + padding-top: 0.2em; + padding-bottom: 0.2em; + margin: 0; + font-size: 85%; + background-color: rgba(27,31,35,0.05); + border-radius: 3px; +} + +.markdown-body code::before, +.markdown-body code::after { + letter-spacing: -0.2em; + content: "\00a0"; +} + +.markdown-body pre { + word-wrap: normal; +} + +.markdown-body pre>code { + padding: 0; + margin: 0; + font-size: 100%; + word-break: normal; + white-space: pre; + background: transparent; + border: 0; +} + +.markdown-body .highlight { + margin-bottom: 16px; +} + +.markdown-body .highlight pre { + margin-bottom: 0; + word-break: normal; +} + +.markdown-body .highlight pre, +.markdown-body pre { + padding: 16px; + overflow: auto; + font-size: 85%; + line-height: 1.45; + background-color: #f6f8fa; + border-radius: 3px; +} + +.markdown-body pre code { + display: inline; + max-width: auto; + padding: 0; + margin: 0; + overflow: visible; + line-height: inherit; + word-wrap: normal; + background-color: transparent; + border: 0; +} + +.markdown-body pre code::before, +.markdown-body pre code::after { + content: normal; +} + +.markdown-body .full-commit .btn-outline:not(:disabled):hover { + color: #005cc5; + border-color: #005cc5; +} + +.markdown-body kbd { + display: inline-block; + padding: 3px 5px; + font: 11px "SFMono-Regular", Consolas, "Liberation Mono", Menlo, Courier, monospace; + line-height: 10px; + color: #444d56; + vertical-align: middle; + background-color: #fafbfc; + border: solid 1px #d1d5da; + border-bottom-color: #c6cbd1; + border-radius: 3px; + box-shadow: inset 0 -1px 0 #c6cbd1; +} + +.markdown-body :checked+.radio-label { + position: relative; + z-index: 1; + border-color: #0366d6; +} + +.markdown-body .task-list-item { + list-style-type: none; +} + +.markdown-body .task-list-item+.task-list-item { + margin-top: 3px; +} + +.markdown-body .task-list-item input { + margin: 0 0.2em 0.25em -1.6em; + vertical-align: middle; +} + +.markdown-body hr { + border-bottom-color: #eee; +} + + +#Main { + margin: 0 auto; + padding: 10px 40px; + max-width: 888px; +} diff --git a/build/Themes/Github/Theme.html b/build/Themes/Github/Theme.html new file mode 100644 index 0000000..80320c3 --- /dev/null +++ b/build/Themes/Github/Theme.html @@ -0,0 +1,14 @@ + + + + + + + + + +
+ {$html} +
+ + \ No newline at end of file From cb4965c3ca68d4130e6645a9e7292def2cb5b674 Mon Sep 17 00:00:00 2001 From: Anton Kasyanov Date: Sun, 28 Feb 2021 16:26:11 +0200 Subject: [PATCH 05/18] README.md update --- README.md | 83 ++++++++++++++++++++++++++++++++++--------------------- 1 file changed, 52 insertions(+), 31 deletions(-) diff --git a/README.md b/README.md index a3a88f7..914e385 100644 --- a/README.md +++ b/README.md @@ -15,11 +15,7 @@ The program does NOT (and will NOT ever) do the following things: If you have find out that some of the features or their combination of EVE-O Preview might cause actions that can be considered as breaking EULA or ToS of EVE Online you should consider them as a bug and immediately notify the Developer ( Phrynohyas Tig-Rah ) via in-game mail. -## System Requirements - -* Windows 7, Windows 8/8.1, Windows 10 -* Microsoft .NET Framework 4.7+ -* EVE clients Display Mode should be set to **Fixed Window** or **Window Mode**. **Fullscreen** mode is not supported. +
## How To Install & Use @@ -28,6 +24,14 @@ If you have find out that some of the features or their combination of EVE-O Pre 2. Start up both EVE-O Preview and your EVE Clients (the order does not matter) 3. Adjust settings as you see fit. Program options are described below +## System Requirements + +* Windows 7, Windows 8/8.1, Windows 10 +* Microsoft .NET Framework 4.7+ +* EVE clients Display Mode should be set to **Fixed Window** or **Window Mode**. **Fullscreen** mode is not supported. + +
+ ## EVE Online EULA/ToS This application is legal under the EULA/ToS: @@ -50,26 +54,43 @@ CCP Grimmi wrote: ### Application Options Available Via GUI -| Tab | Option | Description | -| --- | --- | --- | -| **General** | Minimize to System Tray | Determines whether the main window form be minimized to windows tray when it is closed | -| General | Track client locations | Determines whether the client's window position should be restored when it is activated or started | -| General | Hide preview of active EVE client | Determines whether the thumbnail corresponding to the active EVE client is not displayed | -| General | Minimize inactive EVE clients | Allows to auto-minimize inactive EVE clients to save CPU and GPU | -| General | Previews always on top | Determines whether EVE client thumbnails should stay on top of all other windows | -| General | Hide previews when EVE client is not active | Determines whether all thumbnails should be visible only when an EVE client is active | -| General | Unique layout for each EVE client | Determines whether thumbnails positions are different depending on the EVE client being active (f.e. links char have thumbnails of the Falcon and DPS char in the right bottom corner while DPS and Falcon alts have them placed at the top of the main EVE window ) | -| **Thumbnail** | Opacity | Determines the inactive EVE thumbnails opacity (from almost invisible 20% to 100% solid) | -| Thumbnail | Thumbnail Width | Thumbnails width. Can be set to any value from **100** to **640** points | -| Thumbnail | Thumbnail Height | Thumbnails Height. Can be set to any value from **80** to **400** points | -| **Zoom** | Zoom on hover | Determines whether a thumbnail should be zoomed when the mouse pointer is over it | -| Zoom | Zoom factor | Thumbnail zoom factor. Can be set to any value from **2** to **10** | -| Zoom | Zoom anchor | Sets the starting point of the thumbnail zoom | -| **Overlay** | Show overlay | Determines whether a name of the corresponding EVE client should be displayed on the thumbnail | -| Overlay | Show frames | Determines whether thumbnails should be displays with window caption and borders | -| Overlay | Highlight active client | Determines whether the thumbnail of the active EVE client should be highlighted with a bright border | -| Overlay | Color | Color used to highlight the active client's thumbnail in case the corresponding option is set | -| **Active Clients** | Thumbnails list | List of currently active EVE client thumbnails. Checking an element in this list will hide the corresponding thumbnail. However these checks are not persisted and on the next EVE client or EVE-O Preview run the thumbnail will be visible again | +#### **General** Tab +| Option | Description | +| --- | --- | +| Minimize to System Tray | Determines whether the main window form be minimized to windows tray when it is closed | +| Track client locations | Determines whether the client's window position should be restored when it is activated or started | +| Hide preview of active EVE client | Determines whether the thumbnail corresponding to the active EVE client is not displayed | +| Minimize inactive EVE clients | Allows to auto-minimize inactive EVE clients to save CPU and GPU | +| Previews always on top | Determines whether EVE client thumbnails should stay on top of all other windows | +| Hide previews when EVE client is not active | Determines whether all thumbnails should be visible only when an EVE client is active | +| Unique layout for each EVE client | Determines whether thumbnails positions are different depending on the EVE client being active | + +#### **Thumbnail** Tab +| Option | Description | +| --- | --- | +| Opacity | Determines the inactive EVE thumbnails opacity (from almost invisible 20% to 100% solid) | +| Thumbnail Width | Thumbnails width. Can be set to any value from **100** to **640** points | +| Thumbnail Height | Thumbnails Height. Can be set to any value from **80** to **400** points | + +#### **Zoom** Tab +| Option | Description | +| --- | --- | +| Zoom on hover | Determines whether a thumbnail should be zoomed when the mouse pointer is over it | +| Zoom factor | Thumbnail zoom factor. Can be set to any value from **2** to **10** | +| Zoom anchor | Sets the starting point of the thumbnail zoom | + +#### **Overlay** Tab +| Option | Description | +| --- | --- | +| Show overlay | Determines whether a name of the corresponding EVE client should be displayed on the thumbnail | +| Show frames | Determines whether thumbnails should be displays with window caption and borders | +| Highlight active client | Determines whether the thumbnail of the active EVE client should be highlighted with a bright border | +| Color | Color used to highlight the active client's thumbnail in case the corresponding option is set | + +#### **Active Clients** Tab +| Option | Description | +| --- | --- | +| Thumbnails list | List of currently active EVE client thumbnails. Checking an element in this list will hide the corresponding thumbnail. However these checks are not persisted and on the next EVE client or EVE-O Preview run the thumbnail will be visible again |
@@ -96,12 +117,12 @@ Some of the application options are not exposed in the GUI. They can be adjusted | Option | Description | | --- | --- | -| **ActiveClientHighlightThickness** | Thickness of the border used to highlight the active client's thumbnail.
Allowed values are **1**...**6**.
The default value is **3**
For example: **"ActiveClientHighlightThickness": 3** | -| **CompatibilityMode** | Enables the alternative render mode (see below)
The default value is **false**
For example: **"CompatibilityMode": true** | -| **EnableThumbnailSnap** | Allows to disable thumbnails snap feature by setting its value to **false**
The default value is **true**
For example: **"EnableThumbnailSnap": true** | -| **PriorityClients** | Allows to set a list of clients that are not auto-minimized on inactivity even if the **Minimize inactive EVE clients** option is enabled. Listed clients still can be minimized using Windows hotkeys or via _Ctrl+Click_ on the corresponding thumbnail
The default value is empty list **[]**
For example: **"PriorityClients": [ "EVE - Phrynohyas Tig-Rah", "EVE - Ondatra Patrouette" ]** | -| **ThumbnailMinimumSize** | Minimum thumbnail size that can be set either via GUI or by resizing a thumbnail window. Value is written in the form "width, height"
The default value is **"100, 80"**.
For example: **"ThumbnailMinimumSize": "100, 80"** | -| **ThumbnailMaximumSize** | Maximum thumbnail size that can be set either via GUI or by resizing a thumbnail window. Value is written in the form "width, height"
The default value is **"640, 400"**.
For example: **"ThumbnailMaximumSize": "640, 400"** | +| **ActiveClientHighlightThickness** |
Thickness of the border used to highlight the active client's thumbnail.
Allowed values are **1**...**6**.
The default value is **3**
For example: **"ActiveClientHighlightThickness": 3**
| +| **CompatibilityMode** |
Enables the alternative render mode (see below)
The default value is **false**
For example: **"CompatibilityMode": true**
| +| **EnableThumbnailSnap** |
Allows to disable thumbnails snap feature by setting its value to **false**
The default value is **true**
For example: **"EnableThumbnailSnap": true**
| +| **PriorityClients** |
Allows to set a list of clients that are not auto-minimized on inactivity even if the **Minimize inactive EVE clients** option is enabled. Listed clients still can be minimized using Windows hotkeys or via _Ctrl+Click_ on the corresponding thumbnail
The default value is empty list **[]**
For example: **"PriorityClients": [ "EVE - Phrynohyas Tig-Rah", "EVE - Ondatra Patrouette" ]**
| +| **ThumbnailMinimumSize** |
Minimum thumbnail size that can be set either via GUI or by resizing a thumbnail window. Value is written in the form "width, height"
The default value is **"100, 80"**.
For example: **"ThumbnailMinimumSize": "100, 80"**
| +| **ThumbnailMaximumSize** |
Maximum thumbnail size that can be set either via GUI or by resizing a thumbnail window. Value is written in the form "width, height"
The default value is **"640, 400"**.
For example: **"ThumbnailMaximumSize": "640, 400"**
|
From fde67b4bf7ed91099b35b33a08f530e343d7ecbe Mon Sep 17 00:00:00 2001 From: Anton Kasyanov Date: Sun, 28 Feb 2021 16:35:04 +0200 Subject: [PATCH 06/18] EVE Partner badge --- assets/PartnerBadge.png | Bin 0 -> 81535 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 assets/PartnerBadge.png diff --git a/assets/PartnerBadge.png b/assets/PartnerBadge.png new file mode 100644 index 0000000000000000000000000000000000000000..b2f86c1ca661efef827ab8084052fb01f6e5fe29 GIT binary patch literal 81535 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%0Df8cR`=`pv8nDcJ`A| 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 PV?$a(K|Ejdwb%axsDN@t literal 0 HcmV?d00001 From 0e5d44402f505928c9b8b57356264ec2ed4fae61 Mon Sep 17 00:00:00 2001 From: Anton Kasyanov Date: Sun, 28 Feb 2021 16:59:11 +0200 Subject: [PATCH 07/18] README.MD and assets update --- README.md | 6 ++++++ assets/PartnerBadge.png | Bin 81535 -> 81415 bytes 2 files changed, 6 insertions(+) diff --git a/README.md b/README.md index 914e385..ec43782 100644 --- a/README.md +++ b/README.md @@ -15,6 +15,12 @@ The program does NOT (and will NOT ever) do the following things: If you have find out that some of the features or their combination of EVE-O Preview might cause actions that can be considered as breaking EULA or ToS of EVE Online you should consider them as a bug and immediately notify the Developer ( Phrynohyas Tig-Rah ) via in-game mail. +
+ +![EVE Partner](https://github.com/Phrynohyas/eve-o-preview/blob/develop/assets/PartnerBadge.png?raw=true) + +
+
## How To Install & Use diff --git a/assets/PartnerBadge.png b/assets/PartnerBadge.png index b2f86c1ca661efef827ab8084052fb01f6e5fe29..5be38d9baec606f59e6e92b04d1959f920f685a2 100644 GIT binary patch literal 81415 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 literal 81535 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%0Df8cR`=`pv8nDcJ`A| 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 PV?$a(K|Ejdwb%axsDN@t From cd5002abb3fb5f21168740891a7be233224f2ece Mon Sep 17 00:00:00 2001 From: Anton Kasyanov Date: Sun, 28 Feb 2021 17:07:21 +0200 Subject: [PATCH 08/18] README.MD and assets update --- README.md | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index ec43782..cb0cde0 100644 --- a/README.md +++ b/README.md @@ -11,10 +11,6 @@ The program does NOT (and will NOT ever) do the following things: * broadcast any keyboard or mouse events * anyhow interact with EVE Online except of bringing its main window to foreground or resizing/minimizing it -**Under any conditions you should NOT use EVE-O Preview for any actions that break EULA or ToS of EVE Online.** - -If you have find out that some of the features or their combination of EVE-O Preview might cause actions that can be considered as breaking EULA or ToS of EVE Online you should consider them as a bug and immediately notify the Developer ( Phrynohyas Tig-Rah ) via in-game mail. -
![EVE Partner](https://github.com/Phrynohyas/eve-o-preview/blob/develop/assets/PartnerBadge.png?raw=true) @@ -23,6 +19,12 @@ If you have find out that some of the features or their combination of EVE-O Pre
+**Under any conditions you should NOT use EVE-O Preview for any actions that break EULA or ToS of EVE Online.** + +If you have find out that some of the features or their combination of EVE-O Preview might cause actions that can be considered as breaking EULA or ToS of EVE Online you should consider them as a bug and immediately notify the Developer ( Phrynohyas Tig-Rah ) via in-game mail. + +
+ ## How To Install & Use 1. Download and extract the contents of the .zip archive to a location of your choice (ie: Desktop, CCP folder, etc) From 656c68065eac2f5e0f97619d783f5a9c52b4391e Mon Sep 17 00:00:00 2001 From: Anton Kasyanov Date: Sun, 28 Feb 2021 17:09:33 +0200 Subject: [PATCH 09/18] Moving source files into a separate folder --- Eve-O-Preview/packages.config | 9 --- build/Configuration.cs | 2 +- build/Context.cs | 10 ++- build/Lifetime.cs | 74 +++++++++--------- EVE-O-Preview.sln => src/EVE-O-Preview.sln | 2 +- {Eve-O-Mock => src/Eve-O-Mock}/App.config | 0 {Eve-O-Mock => src/Eve-O-Mock}/App.xaml | 0 {Eve-O-Mock => src/Eve-O-Mock}/App.xaml.cs | 0 .../Eve-O-Mock}/Eve-O-Mock.csproj | 0 .../Eve-O-Mock}/MainWindow.xaml | 0 .../Eve-O-Mock}/MainWindow.xaml.cs | 0 .../Eve-O-Mock}/Properties/AssemblyInfo.cs | 0 .../Properties/Resources.Designer.cs | 0 .../Eve-O-Mock}/Properties/Resources.resx | 0 .../Properties/Settings.Designer.cs | 0 .../Eve-O-Mock}/Properties/Settings.settings | 0 .../Eve-O-Preview}/AboutBox.Designer.cs | 0 .../Eve-O-Preview}/AboutBox.cs | 0 .../Eve-O-Preview}/AboutBox.resx | 0 .../ApplicationBase/ApplicationController.cs | 0 .../ApplicationBase/ExceptionHandler.cs | 0 .../ApplicationBase/IApplicationController.cs | 0 .../ApplicationBase/IIocContainer.cs | 0 .../ApplicationBase/IPresenter.cs | 0 .../ApplicationBase/IPresenterGeneric.cs | 0 .../Eve-O-Preview}/ApplicationBase/IView.cs | 0 .../ApplicationBase/LightInjectContainer.cs | 0 .../ApplicationBase/Presenter.cs | 0 .../ApplicationBase/PresenterGeneric.cs | 0 .../Configuration/Implementation/AppConfig.cs | 0 .../Implementation/ConfigurationStorage.cs | 0 .../Implementation/ThumbnailConfiguration.cs | 0 .../Configuration/Interface/ClientLayout.cs | 0 .../Configuration/Interface/IAppConfig.cs | 0 .../Interface/IConfigurationStorage.cs | 0 .../Interface/IThumbnailConfiguration.cs | 0 .../Configuration/Interface/ZoomAnchor.cs | 0 .../Eve-O-Preview}/Eve-O-Preview.csproj | 49 +++++------- .../Eve-O-Preview}/FodyWeavers.xml | 0 .../Eve-O-Preview}/FodyWeavers.xsd | 0 .../Eve-O-Preview}/Hotkeys/HotkeyHandler.cs | 0 .../Hotkeys/HotkeyHandlerNativeMethods.cs | 0 .../Configuration/SaveConfigurationHandler.cs | 0 .../Services/StartStopServiceHandler.cs | 0 .../ThumbnailActiveSizeUpdatedHandler.cs | 0 .../ThumbnailConfiguredSizeUpdatedHandler.cs | 0 .../ThumbnailFrameSettingsUpdatedHandler.cs | 0 .../Thumbnails/ThumbnailListUpdatedHandler.cs | 0 .../ThumbnailLocationUpdatedHandler.cs | 0 .../Messages/Base/NotificationBase.cs | 0 .../Configuration/SaveConfiguration.cs | 0 .../Messages/Services/StartService.cs | 0 .../Mediator/Messages/Services/StopService.cs | 0 .../Thumbnails/ThumbnailActiveSizeUpdated.cs | 0 .../ThumbnailConfiguredSizeUpdated.cs | 0 .../ThumbnailFrameSettingsUpdated.cs | 0 .../Thumbnails/ThumbnailListUpdated.cs | 0 .../Thumbnails/ThumbnailLocationUpdated.cs | 0 .../Implementation/MainFormPresenter.cs | 0 .../Implementation/ViewZoomAnchorConverter.cs | 0 .../Interface/IMainFormPresenter.cs | 0 .../Presenters/Interface/ViewCloseRequest.cs | 0 .../Eve-O-Preview}/Program.cs | 0 .../Eve-O-Preview}/Properties/AssemblyInfo.cs | 0 .../Properties/Resources.Designer.cs | 0 .../Eve-O-Preview}/Properties/Resources.resx | 0 .../Services/Implementation/DwmThumbnail.cs | 0 .../Services/Implementation/ProcessInfo.cs | 0 .../Services/Implementation/ProcessMonitor.cs | 0 .../Implementation/ThumbnailManager.cs | 0 .../Services/Implementation/WindowManager.cs | 0 .../Services/Interface/IDwmThumbnail.cs | 0 .../Services/Interface/IProcessInfo.cs | 0 .../Services/Interface/IProcessMonitor.cs | 0 .../Services/Interface/IThumbnailManager.cs | 0 .../Services/Interface/IWindowManager.cs | 0 .../Services/Interface/InteropConstants.cs | 0 .../Services/Interop/DWM_BLURBEHIND.cs | 0 .../Interop/DWM_THUMBNAIL_PROPERTIES.cs | 0 .../Services/Interop/DWM_TNP_CONSTANTS.cs | 0 .../Services/Interop/DwmNativeMethods.cs | 0 .../Services/Interop/Gdi32NativeMethods.cs | 0 .../Services/Interop/MARGINS.cs | 0 .../Eve-O-Preview}/Services/Interop/RECT.cs | 0 .../Services/Interop/User32NativeMethods.cs | 0 .../Services/Interop/WINDOWPLACEMENT.cs | 0 .../View/Implementation/LiveThumbnailView.cs | 0 .../View/Implementation/MainForm.Designer.cs | 0 .../View/Implementation/MainForm.cs | 0 .../View/Implementation/MainForm.resx | 0 .../Implementation/StaticThumbnailImage.cs | 0 .../Implementation/StaticThumbnailView.cs | 0 .../Implementation/ThumbnailDescription.cs | 0 .../ThumbnailOverlay.Designer.cs | 0 .../View/Implementation/ThumbnailOverlay.cs | 0 .../View/Implementation/ThumbnailOverlay.resx | 0 .../Implementation/ThumbnailView.Designer.cs | 0 .../View/Implementation/ThumbnailView.cs | 0 .../View/Implementation/ThumbnailView.resx | 0 .../Implementation/ThumbnailViewFactory.cs | 0 .../View/Interface/IMainFormView.cs | 0 .../View/Interface/IThumbnailDescription.cs | 0 .../View/Interface/IThumbnailView.cs | 0 .../View/Interface/IThumbnailViewFactory.cs | 0 .../View/Interface/ViewZoomAnchor.cs | 0 .../Eve-O-Preview}/app.config | 0 .../Eve-O-Preview}/app.manifest | 0 {Eve-O-Preview => src/Eve-O-Preview}/icon.ico | Bin 108 files changed, 66 insertions(+), 80 deletions(-) delete mode 100644 Eve-O-Preview/packages.config rename EVE-O-Preview.sln => src/EVE-O-Preview.sln (91%) rename {Eve-O-Mock => src/Eve-O-Mock}/App.config (100%) rename {Eve-O-Mock => src/Eve-O-Mock}/App.xaml (100%) rename {Eve-O-Mock => src/Eve-O-Mock}/App.xaml.cs (100%) rename {Eve-O-Mock => src/Eve-O-Mock}/Eve-O-Mock.csproj (100%) rename {Eve-O-Mock => src/Eve-O-Mock}/MainWindow.xaml (100%) rename {Eve-O-Mock => src/Eve-O-Mock}/MainWindow.xaml.cs (100%) rename {Eve-O-Mock => src/Eve-O-Mock}/Properties/AssemblyInfo.cs (100%) rename {Eve-O-Mock => src/Eve-O-Mock}/Properties/Resources.Designer.cs (100%) rename {Eve-O-Mock => src/Eve-O-Mock}/Properties/Resources.resx (100%) rename {Eve-O-Mock => src/Eve-O-Mock}/Properties/Settings.Designer.cs (100%) rename {Eve-O-Mock => src/Eve-O-Mock}/Properties/Settings.settings (100%) rename {Eve-O-Preview => src/Eve-O-Preview}/AboutBox.Designer.cs (100%) rename {Eve-O-Preview => src/Eve-O-Preview}/AboutBox.cs (100%) rename {Eve-O-Preview => src/Eve-O-Preview}/AboutBox.resx (100%) rename {Eve-O-Preview => src/Eve-O-Preview}/ApplicationBase/ApplicationController.cs (100%) rename {Eve-O-Preview => src/Eve-O-Preview}/ApplicationBase/ExceptionHandler.cs (100%) rename {Eve-O-Preview => src/Eve-O-Preview}/ApplicationBase/IApplicationController.cs (100%) rename {Eve-O-Preview => src/Eve-O-Preview}/ApplicationBase/IIocContainer.cs (100%) rename {Eve-O-Preview => src/Eve-O-Preview}/ApplicationBase/IPresenter.cs (100%) rename {Eve-O-Preview => src/Eve-O-Preview}/ApplicationBase/IPresenterGeneric.cs (100%) rename {Eve-O-Preview => src/Eve-O-Preview}/ApplicationBase/IView.cs (100%) rename {Eve-O-Preview => src/Eve-O-Preview}/ApplicationBase/LightInjectContainer.cs (100%) rename {Eve-O-Preview => src/Eve-O-Preview}/ApplicationBase/Presenter.cs (100%) rename {Eve-O-Preview => src/Eve-O-Preview}/ApplicationBase/PresenterGeneric.cs (100%) rename {Eve-O-Preview => src/Eve-O-Preview}/Configuration/Implementation/AppConfig.cs (100%) rename {Eve-O-Preview => src/Eve-O-Preview}/Configuration/Implementation/ConfigurationStorage.cs (100%) rename {Eve-O-Preview => src/Eve-O-Preview}/Configuration/Implementation/ThumbnailConfiguration.cs (100%) rename {Eve-O-Preview => src/Eve-O-Preview}/Configuration/Interface/ClientLayout.cs (100%) rename {Eve-O-Preview => src/Eve-O-Preview}/Configuration/Interface/IAppConfig.cs (100%) rename {Eve-O-Preview => src/Eve-O-Preview}/Configuration/Interface/IConfigurationStorage.cs (100%) rename {Eve-O-Preview => src/Eve-O-Preview}/Configuration/Interface/IThumbnailConfiguration.cs (100%) rename {Eve-O-Preview => src/Eve-O-Preview}/Configuration/Interface/ZoomAnchor.cs (100%) rename {Eve-O-Preview => src/Eve-O-Preview}/Eve-O-Preview.csproj (80%) rename {Eve-O-Preview => src/Eve-O-Preview}/FodyWeavers.xml (100%) rename {Eve-O-Preview => src/Eve-O-Preview}/FodyWeavers.xsd (100%) rename {Eve-O-Preview => src/Eve-O-Preview}/Hotkeys/HotkeyHandler.cs (100%) rename {Eve-O-Preview => src/Eve-O-Preview}/Hotkeys/HotkeyHandlerNativeMethods.cs (100%) rename {Eve-O-Preview => src/Eve-O-Preview}/Mediator/Handlers/Configuration/SaveConfigurationHandler.cs (100%) rename {Eve-O-Preview => src/Eve-O-Preview}/Mediator/Handlers/Services/StartStopServiceHandler.cs (100%) rename {Eve-O-Preview => src/Eve-O-Preview}/Mediator/Handlers/Thumbnails/ThumbnailActiveSizeUpdatedHandler.cs (100%) rename {Eve-O-Preview => src/Eve-O-Preview}/Mediator/Handlers/Thumbnails/ThumbnailConfiguredSizeUpdatedHandler.cs (100%) rename {Eve-O-Preview => src/Eve-O-Preview}/Mediator/Handlers/Thumbnails/ThumbnailFrameSettingsUpdatedHandler.cs (100%) rename {Eve-O-Preview => src/Eve-O-Preview}/Mediator/Handlers/Thumbnails/ThumbnailListUpdatedHandler.cs (100%) rename {Eve-O-Preview => src/Eve-O-Preview}/Mediator/Handlers/Thumbnails/ThumbnailLocationUpdatedHandler.cs (100%) rename {Eve-O-Preview => src/Eve-O-Preview}/Mediator/Messages/Base/NotificationBase.cs (100%) rename {Eve-O-Preview => src/Eve-O-Preview}/Mediator/Messages/Configuration/SaveConfiguration.cs (100%) rename {Eve-O-Preview => src/Eve-O-Preview}/Mediator/Messages/Services/StartService.cs (100%) rename {Eve-O-Preview => src/Eve-O-Preview}/Mediator/Messages/Services/StopService.cs (100%) rename {Eve-O-Preview => src/Eve-O-Preview}/Mediator/Messages/Thumbnails/ThumbnailActiveSizeUpdated.cs (100%) rename {Eve-O-Preview => src/Eve-O-Preview}/Mediator/Messages/Thumbnails/ThumbnailConfiguredSizeUpdated.cs (100%) rename {Eve-O-Preview => src/Eve-O-Preview}/Mediator/Messages/Thumbnails/ThumbnailFrameSettingsUpdated.cs (100%) rename {Eve-O-Preview => src/Eve-O-Preview}/Mediator/Messages/Thumbnails/ThumbnailListUpdated.cs (100%) rename {Eve-O-Preview => src/Eve-O-Preview}/Mediator/Messages/Thumbnails/ThumbnailLocationUpdated.cs (100%) rename {Eve-O-Preview => src/Eve-O-Preview}/Presenters/Implementation/MainFormPresenter.cs (100%) rename {Eve-O-Preview => src/Eve-O-Preview}/Presenters/Implementation/ViewZoomAnchorConverter.cs (100%) rename {Eve-O-Preview => src/Eve-O-Preview}/Presenters/Interface/IMainFormPresenter.cs (100%) rename {Eve-O-Preview => src/Eve-O-Preview}/Presenters/Interface/ViewCloseRequest.cs (100%) rename {Eve-O-Preview => src/Eve-O-Preview}/Program.cs (100%) rename {Eve-O-Preview => src/Eve-O-Preview}/Properties/AssemblyInfo.cs (100%) rename {Eve-O-Preview => src/Eve-O-Preview}/Properties/Resources.Designer.cs (100%) rename {Eve-O-Preview => src/Eve-O-Preview}/Properties/Resources.resx (100%) rename {Eve-O-Preview => src/Eve-O-Preview}/Services/Implementation/DwmThumbnail.cs (100%) rename {Eve-O-Preview => src/Eve-O-Preview}/Services/Implementation/ProcessInfo.cs (100%) rename {Eve-O-Preview => src/Eve-O-Preview}/Services/Implementation/ProcessMonitor.cs (100%) rename {Eve-O-Preview => src/Eve-O-Preview}/Services/Implementation/ThumbnailManager.cs (100%) rename {Eve-O-Preview => src/Eve-O-Preview}/Services/Implementation/WindowManager.cs (100%) rename {Eve-O-Preview => src/Eve-O-Preview}/Services/Interface/IDwmThumbnail.cs (100%) rename {Eve-O-Preview => src/Eve-O-Preview}/Services/Interface/IProcessInfo.cs (100%) rename {Eve-O-Preview => src/Eve-O-Preview}/Services/Interface/IProcessMonitor.cs (100%) rename {Eve-O-Preview => src/Eve-O-Preview}/Services/Interface/IThumbnailManager.cs (100%) rename {Eve-O-Preview => src/Eve-O-Preview}/Services/Interface/IWindowManager.cs (100%) rename {Eve-O-Preview => src/Eve-O-Preview}/Services/Interface/InteropConstants.cs (100%) rename {Eve-O-Preview => src/Eve-O-Preview}/Services/Interop/DWM_BLURBEHIND.cs (100%) rename {Eve-O-Preview => src/Eve-O-Preview}/Services/Interop/DWM_THUMBNAIL_PROPERTIES.cs (100%) rename {Eve-O-Preview => src/Eve-O-Preview}/Services/Interop/DWM_TNP_CONSTANTS.cs (100%) rename {Eve-O-Preview => src/Eve-O-Preview}/Services/Interop/DwmNativeMethods.cs (100%) rename {Eve-O-Preview => src/Eve-O-Preview}/Services/Interop/Gdi32NativeMethods.cs (100%) rename {Eve-O-Preview => src/Eve-O-Preview}/Services/Interop/MARGINS.cs (100%) rename {Eve-O-Preview => src/Eve-O-Preview}/Services/Interop/RECT.cs (100%) rename {Eve-O-Preview => src/Eve-O-Preview}/Services/Interop/User32NativeMethods.cs (100%) rename {Eve-O-Preview => src/Eve-O-Preview}/Services/Interop/WINDOWPLACEMENT.cs (100%) rename {Eve-O-Preview => src/Eve-O-Preview}/View/Implementation/LiveThumbnailView.cs (100%) rename {Eve-O-Preview => src/Eve-O-Preview}/View/Implementation/MainForm.Designer.cs (100%) rename {Eve-O-Preview => src/Eve-O-Preview}/View/Implementation/MainForm.cs (100%) rename {Eve-O-Preview => src/Eve-O-Preview}/View/Implementation/MainForm.resx (100%) rename {Eve-O-Preview => src/Eve-O-Preview}/View/Implementation/StaticThumbnailImage.cs (100%) rename {Eve-O-Preview => src/Eve-O-Preview}/View/Implementation/StaticThumbnailView.cs (100%) rename {Eve-O-Preview => src/Eve-O-Preview}/View/Implementation/ThumbnailDescription.cs (100%) rename {Eve-O-Preview => src/Eve-O-Preview}/View/Implementation/ThumbnailOverlay.Designer.cs (100%) rename {Eve-O-Preview => src/Eve-O-Preview}/View/Implementation/ThumbnailOverlay.cs (100%) rename {Eve-O-Preview => src/Eve-O-Preview}/View/Implementation/ThumbnailOverlay.resx (100%) rename {Eve-O-Preview => src/Eve-O-Preview}/View/Implementation/ThumbnailView.Designer.cs (100%) rename {Eve-O-Preview => src/Eve-O-Preview}/View/Implementation/ThumbnailView.cs (100%) rename {Eve-O-Preview => src/Eve-O-Preview}/View/Implementation/ThumbnailView.resx (100%) rename {Eve-O-Preview => src/Eve-O-Preview}/View/Implementation/ThumbnailViewFactory.cs (100%) rename {Eve-O-Preview => src/Eve-O-Preview}/View/Interface/IMainFormView.cs (100%) rename {Eve-O-Preview => src/Eve-O-Preview}/View/Interface/IThumbnailDescription.cs (100%) rename {Eve-O-Preview => src/Eve-O-Preview}/View/Interface/IThumbnailView.cs (100%) rename {Eve-O-Preview => src/Eve-O-Preview}/View/Interface/IThumbnailViewFactory.cs (100%) rename {Eve-O-Preview => src/Eve-O-Preview}/View/Interface/ViewZoomAnchor.cs (100%) rename {Eve-O-Preview => src/Eve-O-Preview}/app.config (100%) rename {Eve-O-Preview => src/Eve-O-Preview}/app.manifest (100%) rename {Eve-O-Preview => src/Eve-O-Preview}/icon.ico (100%) diff --git a/Eve-O-Preview/packages.config b/Eve-O-Preview/packages.config deleted file mode 100644 index 7b4d3e0..0000000 --- a/Eve-O-Preview/packages.config +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/build/Configuration.cs b/build/Configuration.cs index d948d61..995428f 100644 --- a/build/Configuration.cs +++ b/build/Configuration.cs @@ -2,7 +2,7 @@ { static class Configuration { - public const string SolutionName = @"./EVE-O-Preview.sln"; + public const string SolutionName = @"./src/EVE-O-Preview.sln"; public const string BinFolder = @"./bin"; public const string ToolsFolder = @"./tools"; diff --git a/build/Context.cs b/build/Context.cs index 7865479..1885b49 100644 --- a/build/Context.cs +++ b/build/Context.cs @@ -1,9 +1,13 @@ using Cake.Core; using Cake.Frosting; -public class Context : FrostingContext + +namespace Build { - public Context(ICakeContext context) - : base(context) + public class Context : FrostingContext { + public Context(ICakeContext context) + : base(context) + { + } } } \ No newline at end of file diff --git a/build/Lifetime.cs b/build/Lifetime.cs index 197f27a..3bde463 100644 --- a/build/Lifetime.cs +++ b/build/Lifetime.cs @@ -5,55 +5,55 @@ using Cake.Core.IO; using Cake.Frosting; -public sealed class Lifetime : FrostingLifetime +namespace Build { - private const string NuGetUrl = @"https://dist.nuget.org/win-x86-commandline/latest/nuget.exe"; - private const string ToolsDirectoryName = "./tools"; - private const string BinDirectoryName = "./bin"; - private const string PublishDirectoryName = "./publish"; - - private void DeleteDirectory(Context context, string directoryName) + public sealed class Lifetime : FrostingLifetime { - if (!context.DirectoryExists(directoryName)) - { - return; - } - - context.DeleteDirectory(directoryName, new DeleteDirectorySettings { Force = true, Recursive = true }); - } + private const string NuGetUrl = @"https://dist.nuget.org/win-x86-commandline/latest/nuget.exe"; - private void DownloadNuGet(Context context) - { - if (context.FileExists(ToolsDirectoryName + "/nuget.exe")) + private void DeleteDirectory(Context context, string directoryName) { - return; + if (!context.DirectoryExists(directoryName)) + { + return; + } + + context.DeleteDirectory(directoryName, new DeleteDirectorySettings { Force = true, Recursive = true }); } - if (!context.DirectoryExists(ToolsDirectoryName)) + private void DownloadNuGet(Context context) { - context.CreateDirectory(ToolsDirectoryName); + if (context.FileExists(Configuration.ToolsFolder + "/nuget.exe")) + { + return; + } + + if (!context.DirectoryExists(Configuration.ToolsFolder)) + { + context.CreateDirectory(Configuration.ToolsFolder); + } + + var tempFile = context.DownloadFile(NuGetUrl); + context.CopyFile(tempFile, new FilePath(Configuration.ToolsFolder + "/nuget.exe")); } - var tempFile = context.DownloadFile(NuGetUrl); - context.CopyFile(tempFile, new FilePath(ToolsDirectoryName + "/nuget.exe")); - } - - public override void Setup(Context context) - { - context.Information("Setting things up..."); + public override void Setup(Context context) + { + context.Information("Setting things up..."); - context.Information("Delete bin and publish folders"); - this.DeleteDirectory(context, BinDirectoryName); - this.DeleteDirectory(context, PublishDirectoryName); + context.Information("Delete bin and publish folders"); + this.DeleteDirectory(context, Configuration.BinFolder); + this.DeleteDirectory(context, Configuration.PublishFolder); - context.Information("Download NuGet"); - this.DownloadNuGet(context); + context.Information("Download NuGet"); + this.DownloadNuGet(context); - } + } - public override void Teardown(Context context, ITeardownContext info) - { - context.Information("Tearing things down..."); - //this.DeleteDirectory(context, ToolsDirectoryName); + public override void Teardown(Context context, ITeardownContext info) + { + context.Information("Tearing things down..."); + //this.DeleteDirectory(context, ToolsDirectoryName); + } } } \ No newline at end of file diff --git a/EVE-O-Preview.sln b/src/EVE-O-Preview.sln similarity index 91% rename from EVE-O-Preview.sln rename to src/EVE-O-Preview.sln index 7feb2b1..68d36f6 100644 --- a/EVE-O-Preview.sln +++ b/src/EVE-O-Preview.sln @@ -7,7 +7,7 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Eve-O-Preview", "Eve-O-Prev EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Eve-O-Mock", "Eve-O-Mock\Eve-O-Mock.csproj", "{BE2C3A13-CC19-4525-895F-381DD71C5833}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Build", "build\Build.csproj", "{68083BCC-92B8-4A73-BFD2-0DE619873F86}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Build", "..\build\Build.csproj", "{68083BCC-92B8-4A73-BFD2-0DE619873F86}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution diff --git a/Eve-O-Mock/App.config b/src/Eve-O-Mock/App.config similarity index 100% rename from Eve-O-Mock/App.config rename to src/Eve-O-Mock/App.config diff --git a/Eve-O-Mock/App.xaml b/src/Eve-O-Mock/App.xaml similarity index 100% rename from Eve-O-Mock/App.xaml rename to src/Eve-O-Mock/App.xaml diff --git a/Eve-O-Mock/App.xaml.cs b/src/Eve-O-Mock/App.xaml.cs similarity index 100% rename from Eve-O-Mock/App.xaml.cs rename to src/Eve-O-Mock/App.xaml.cs diff --git a/Eve-O-Mock/Eve-O-Mock.csproj b/src/Eve-O-Mock/Eve-O-Mock.csproj similarity index 100% rename from Eve-O-Mock/Eve-O-Mock.csproj rename to src/Eve-O-Mock/Eve-O-Mock.csproj diff --git a/Eve-O-Mock/MainWindow.xaml b/src/Eve-O-Mock/MainWindow.xaml similarity index 100% rename from Eve-O-Mock/MainWindow.xaml rename to src/Eve-O-Mock/MainWindow.xaml diff --git a/Eve-O-Mock/MainWindow.xaml.cs b/src/Eve-O-Mock/MainWindow.xaml.cs similarity index 100% rename from Eve-O-Mock/MainWindow.xaml.cs rename to src/Eve-O-Mock/MainWindow.xaml.cs diff --git a/Eve-O-Mock/Properties/AssemblyInfo.cs b/src/Eve-O-Mock/Properties/AssemblyInfo.cs similarity index 100% rename from Eve-O-Mock/Properties/AssemblyInfo.cs rename to src/Eve-O-Mock/Properties/AssemblyInfo.cs diff --git a/Eve-O-Mock/Properties/Resources.Designer.cs b/src/Eve-O-Mock/Properties/Resources.Designer.cs similarity index 100% rename from Eve-O-Mock/Properties/Resources.Designer.cs rename to src/Eve-O-Mock/Properties/Resources.Designer.cs diff --git a/Eve-O-Mock/Properties/Resources.resx b/src/Eve-O-Mock/Properties/Resources.resx similarity index 100% rename from Eve-O-Mock/Properties/Resources.resx rename to src/Eve-O-Mock/Properties/Resources.resx diff --git a/Eve-O-Mock/Properties/Settings.Designer.cs b/src/Eve-O-Mock/Properties/Settings.Designer.cs similarity index 100% rename from Eve-O-Mock/Properties/Settings.Designer.cs rename to src/Eve-O-Mock/Properties/Settings.Designer.cs diff --git a/Eve-O-Mock/Properties/Settings.settings b/src/Eve-O-Mock/Properties/Settings.settings similarity index 100% rename from Eve-O-Mock/Properties/Settings.settings rename to src/Eve-O-Mock/Properties/Settings.settings diff --git a/Eve-O-Preview/AboutBox.Designer.cs b/src/Eve-O-Preview/AboutBox.Designer.cs similarity index 100% rename from Eve-O-Preview/AboutBox.Designer.cs rename to src/Eve-O-Preview/AboutBox.Designer.cs diff --git a/Eve-O-Preview/AboutBox.cs b/src/Eve-O-Preview/AboutBox.cs similarity index 100% rename from Eve-O-Preview/AboutBox.cs rename to src/Eve-O-Preview/AboutBox.cs diff --git a/Eve-O-Preview/AboutBox.resx b/src/Eve-O-Preview/AboutBox.resx similarity index 100% rename from Eve-O-Preview/AboutBox.resx rename to src/Eve-O-Preview/AboutBox.resx diff --git a/Eve-O-Preview/ApplicationBase/ApplicationController.cs b/src/Eve-O-Preview/ApplicationBase/ApplicationController.cs similarity index 100% rename from Eve-O-Preview/ApplicationBase/ApplicationController.cs rename to src/Eve-O-Preview/ApplicationBase/ApplicationController.cs diff --git a/Eve-O-Preview/ApplicationBase/ExceptionHandler.cs b/src/Eve-O-Preview/ApplicationBase/ExceptionHandler.cs similarity index 100% rename from Eve-O-Preview/ApplicationBase/ExceptionHandler.cs rename to src/Eve-O-Preview/ApplicationBase/ExceptionHandler.cs diff --git a/Eve-O-Preview/ApplicationBase/IApplicationController.cs b/src/Eve-O-Preview/ApplicationBase/IApplicationController.cs similarity index 100% rename from Eve-O-Preview/ApplicationBase/IApplicationController.cs rename to src/Eve-O-Preview/ApplicationBase/IApplicationController.cs diff --git a/Eve-O-Preview/ApplicationBase/IIocContainer.cs b/src/Eve-O-Preview/ApplicationBase/IIocContainer.cs similarity index 100% rename from Eve-O-Preview/ApplicationBase/IIocContainer.cs rename to src/Eve-O-Preview/ApplicationBase/IIocContainer.cs diff --git a/Eve-O-Preview/ApplicationBase/IPresenter.cs b/src/Eve-O-Preview/ApplicationBase/IPresenter.cs similarity index 100% rename from Eve-O-Preview/ApplicationBase/IPresenter.cs rename to src/Eve-O-Preview/ApplicationBase/IPresenter.cs diff --git a/Eve-O-Preview/ApplicationBase/IPresenterGeneric.cs b/src/Eve-O-Preview/ApplicationBase/IPresenterGeneric.cs similarity index 100% rename from Eve-O-Preview/ApplicationBase/IPresenterGeneric.cs rename to src/Eve-O-Preview/ApplicationBase/IPresenterGeneric.cs diff --git a/Eve-O-Preview/ApplicationBase/IView.cs b/src/Eve-O-Preview/ApplicationBase/IView.cs similarity index 100% rename from Eve-O-Preview/ApplicationBase/IView.cs rename to src/Eve-O-Preview/ApplicationBase/IView.cs diff --git a/Eve-O-Preview/ApplicationBase/LightInjectContainer.cs b/src/Eve-O-Preview/ApplicationBase/LightInjectContainer.cs similarity index 100% rename from Eve-O-Preview/ApplicationBase/LightInjectContainer.cs rename to src/Eve-O-Preview/ApplicationBase/LightInjectContainer.cs diff --git a/Eve-O-Preview/ApplicationBase/Presenter.cs b/src/Eve-O-Preview/ApplicationBase/Presenter.cs similarity index 100% rename from Eve-O-Preview/ApplicationBase/Presenter.cs rename to src/Eve-O-Preview/ApplicationBase/Presenter.cs diff --git a/Eve-O-Preview/ApplicationBase/PresenterGeneric.cs b/src/Eve-O-Preview/ApplicationBase/PresenterGeneric.cs similarity index 100% rename from Eve-O-Preview/ApplicationBase/PresenterGeneric.cs rename to src/Eve-O-Preview/ApplicationBase/PresenterGeneric.cs diff --git a/Eve-O-Preview/Configuration/Implementation/AppConfig.cs b/src/Eve-O-Preview/Configuration/Implementation/AppConfig.cs similarity index 100% rename from Eve-O-Preview/Configuration/Implementation/AppConfig.cs rename to src/Eve-O-Preview/Configuration/Implementation/AppConfig.cs diff --git a/Eve-O-Preview/Configuration/Implementation/ConfigurationStorage.cs b/src/Eve-O-Preview/Configuration/Implementation/ConfigurationStorage.cs similarity index 100% rename from Eve-O-Preview/Configuration/Implementation/ConfigurationStorage.cs rename to src/Eve-O-Preview/Configuration/Implementation/ConfigurationStorage.cs diff --git a/Eve-O-Preview/Configuration/Implementation/ThumbnailConfiguration.cs b/src/Eve-O-Preview/Configuration/Implementation/ThumbnailConfiguration.cs similarity index 100% rename from Eve-O-Preview/Configuration/Implementation/ThumbnailConfiguration.cs rename to src/Eve-O-Preview/Configuration/Implementation/ThumbnailConfiguration.cs diff --git a/Eve-O-Preview/Configuration/Interface/ClientLayout.cs b/src/Eve-O-Preview/Configuration/Interface/ClientLayout.cs similarity index 100% rename from Eve-O-Preview/Configuration/Interface/ClientLayout.cs rename to src/Eve-O-Preview/Configuration/Interface/ClientLayout.cs diff --git a/Eve-O-Preview/Configuration/Interface/IAppConfig.cs b/src/Eve-O-Preview/Configuration/Interface/IAppConfig.cs similarity index 100% rename from Eve-O-Preview/Configuration/Interface/IAppConfig.cs rename to src/Eve-O-Preview/Configuration/Interface/IAppConfig.cs diff --git a/Eve-O-Preview/Configuration/Interface/IConfigurationStorage.cs b/src/Eve-O-Preview/Configuration/Interface/IConfigurationStorage.cs similarity index 100% rename from Eve-O-Preview/Configuration/Interface/IConfigurationStorage.cs rename to src/Eve-O-Preview/Configuration/Interface/IConfigurationStorage.cs diff --git a/Eve-O-Preview/Configuration/Interface/IThumbnailConfiguration.cs b/src/Eve-O-Preview/Configuration/Interface/IThumbnailConfiguration.cs similarity index 100% rename from Eve-O-Preview/Configuration/Interface/IThumbnailConfiguration.cs rename to src/Eve-O-Preview/Configuration/Interface/IThumbnailConfiguration.cs diff --git a/Eve-O-Preview/Configuration/Interface/ZoomAnchor.cs b/src/Eve-O-Preview/Configuration/Interface/ZoomAnchor.cs similarity index 100% rename from Eve-O-Preview/Configuration/Interface/ZoomAnchor.cs rename to src/Eve-O-Preview/Configuration/Interface/ZoomAnchor.cs diff --git a/Eve-O-Preview/Eve-O-Preview.csproj b/src/Eve-O-Preview/Eve-O-Preview.csproj similarity index 80% rename from Eve-O-Preview/Eve-O-Preview.csproj rename to src/Eve-O-Preview/Eve-O-Preview.csproj index 375b7a6..9564c26 100644 --- a/Eve-O-Preview/Eve-O-Preview.csproj +++ b/src/Eve-O-Preview/Eve-O-Preview.csproj @@ -1,6 +1,5 @@  - Debug AnyCPU @@ -31,7 +30,7 @@ pdbonly true - ..\bin + ..\..\bin TRACE prompt 4 @@ -76,19 +75,7 @@ app.manifest - - ..\packages\Costura.Fody.3.3.2\lib\net40\Costura.dll - - - ..\packages\LightInject.5.4.0\lib\net46\LightInject.dll - - - ..\packages\MediatR.6.0.0\lib\net461\MediatR.dll - - - ..\packages\Newtonsoft.Json.12.0.1\lib\net45\Newtonsoft.Json.dll - @@ -96,9 +83,6 @@ - - ..\packages\System.ValueTuple.4.5.0\lib\net47\System.ValueTuple.dll - @@ -227,24 +211,31 @@ - - Designer - - + + + 3.3.2 + + + 4.0.2 + runtime; build; native; contentfiles; analyzers; buildtransitive + all + + + 5.4.0 + + + 6.0.0 + + + 12.0.1 + + - - - - This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. - - - - $(MSBuildProjectDirectory) + Debug;Release;Build diff --git a/src/EVE-O-Preview.sln b/src/EVE-O-Preview.sln index 68d36f6..37d17b8 100644 --- a/src/EVE-O-Preview.sln +++ b/src/EVE-O-Preview.sln @@ -11,18 +11,23 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Build", "..\build\Build.csp EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution + Build|Any CPU = Build|Any CPU Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution + {6CA62DF3-8589-484C-8BC8-F763CA66BBB1}.Build|Any CPU.ActiveCfg = Build|Any CPU {6CA62DF3-8589-484C-8BC8-F763CA66BBB1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {6CA62DF3-8589-484C-8BC8-F763CA66BBB1}.Debug|Any CPU.Build.0 = Debug|Any CPU {6CA62DF3-8589-484C-8BC8-F763CA66BBB1}.Release|Any CPU.ActiveCfg = Release|Any CPU {6CA62DF3-8589-484C-8BC8-F763CA66BBB1}.Release|Any CPU.Build.0 = Release|Any CPU + {BE2C3A13-CC19-4525-895F-381DD71C5833}.Build|Any CPU.ActiveCfg = Build|Any CPU {BE2C3A13-CC19-4525-895F-381DD71C5833}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {BE2C3A13-CC19-4525-895F-381DD71C5833}.Debug|Any CPU.Build.0 = Debug|Any CPU {BE2C3A13-CC19-4525-895F-381DD71C5833}.Release|Any CPU.ActiveCfg = Release|Any CPU {BE2C3A13-CC19-4525-895F-381DD71C5833}.Release|Any CPU.Build.0 = Release|Any CPU + {68083BCC-92B8-4A73-BFD2-0DE619873F86}.Build|Any CPU.ActiveCfg = Build|Any CPU + {68083BCC-92B8-4A73-BFD2-0DE619873F86}.Build|Any CPU.Build.0 = Build|Any CPU {68083BCC-92B8-4A73-BFD2-0DE619873F86}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {68083BCC-92B8-4A73-BFD2-0DE619873F86}.Release|Any CPU.ActiveCfg = Release|Any CPU EndGlobalSection diff --git a/src/Eve-O-Mock/Eve-O-Mock.csproj b/src/Eve-O-Mock/Eve-O-Mock.csproj index 6c0f85f..d2218f4 100644 --- a/src/Eve-O-Mock/Eve-O-Mock.csproj +++ b/src/Eve-O-Mock/Eve-O-Mock.csproj @@ -34,6 +34,16 @@ prompt 4 + + bin\Build\ + TRACE + true + pdbonly + AnyCPU + 7.3 + prompt + true + diff --git a/src/Eve-O-Preview/Eve-O-Preview.csproj b/src/Eve-O-Preview/Eve-O-Preview.csproj index 9564c26..8d231b0 100644 --- a/src/Eve-O-Preview/Eve-O-Preview.csproj +++ b/src/Eve-O-Preview/Eve-O-Preview.csproj @@ -74,6 +74,16 @@ app.manifest + + bin\Build\ + TRACE + true + pdbonly + AnyCPU + false + 7.3 + prompt + @@ -226,13 +236,13 @@ all - 5.4.0 + 6.4.0 - 6.0.0 + 9.0.0 - 12.0.1 + 13.0.1 From 239026886c4893376c8f57d002d31e470de2c4fd Mon Sep 17 00:00:00 2001 From: Anton Kasyanov Date: Sun, 2 May 2021 19:52:49 +0300 Subject: [PATCH 13/18] 185: [Bug] Previews flicker when switching between clients with 'Hide previews when EVE client not active' --- .../Implementation/ThumbnailConfiguration.cs | 8 ++- .../Interface/IThumbnailConfiguration.cs | 4 +- .../Services/Implementation/ProcessMonitor.cs | 54 ++++++++++++++----- .../Implementation/ThumbnailManager.cs | 46 +++++++++++++--- .../Services/Interface/IProcessMonitor.cs | 1 + 5 files changed, 90 insertions(+), 23 deletions(-) diff --git a/src/Eve-O-Preview/Configuration/Implementation/ThumbnailConfiguration.cs b/src/Eve-O-Preview/Configuration/Implementation/ThumbnailConfiguration.cs index 779f509..859a859 100644 --- a/src/Eve-O-Preview/Configuration/Implementation/ThumbnailConfiguration.cs +++ b/src/Eve-O-Preview/Configuration/Implementation/ThumbnailConfiguration.cs @@ -32,9 +32,11 @@ public ThumbnailConfiguration() this.HideActiveClientThumbnail = false; this.MinimizeInactiveClients = false; this.ShowThumbnailsAlwaysOnTop = true; - this.HideThumbnailsOnLostFocus = false; this.EnablePerClientThumbnailLayouts = false; + this.HideThumbnailsOnLostFocus = false; + this.HideThumbnailsDelay = 2; // 2 thumbnails refresh cycles (1.0 sec) + this.ThumbnailSize = new Size(384, 216); this.ThumbnailMinimumSize = new Size(192, 108); this.ThumbnailMaximumSize = new Size(960, 540); @@ -79,7 +81,6 @@ public bool EnableClientLayoutTracking public bool HideActiveClientThumbnail { get; set; } public bool MinimizeInactiveClients { get; set; } public bool ShowThumbnailsAlwaysOnTop { get; set; } - public bool HideThumbnailsOnLostFocus { get; set; } public bool EnablePerClientThumbnailLayouts { @@ -95,6 +96,9 @@ public bool EnablePerClientThumbnailLayouts } } + public bool HideThumbnailsOnLostFocus { get; set; } + public int HideThumbnailsDelay { get; set; } + public Size ThumbnailSize { get; set; } public Size ThumbnailMaximumSize { get; set; } public Size ThumbnailMinimumSize { get; set; } diff --git a/src/Eve-O-Preview/Configuration/Interface/IThumbnailConfiguration.cs b/src/Eve-O-Preview/Configuration/Interface/IThumbnailConfiguration.cs index 3cb1158..8b97051 100644 --- a/src/Eve-O-Preview/Configuration/Interface/IThumbnailConfiguration.cs +++ b/src/Eve-O-Preview/Configuration/Interface/IThumbnailConfiguration.cs @@ -16,9 +16,11 @@ public interface IThumbnailConfiguration bool HideActiveClientThumbnail { get; set; } bool MinimizeInactiveClients { get; set; } bool ShowThumbnailsAlwaysOnTop { get; set; } - bool HideThumbnailsOnLostFocus { get; set; } bool EnablePerClientThumbnailLayouts { get; set; } + bool HideThumbnailsOnLostFocus { get; set; } + int HideThumbnailsDelay { get; set; } + Size ThumbnailSize { get; set; } Size ThumbnailMinimumSize { get; set; } Size ThumbnailMaximumSize { get; set; } diff --git a/src/Eve-O-Preview/Services/Implementation/ProcessMonitor.cs b/src/Eve-O-Preview/Services/Implementation/ProcessMonitor.cs index 5c5e057..2bf9008 100644 --- a/src/Eve-O-Preview/Services/Implementation/ProcessMonitor.cs +++ b/src/Eve-O-Preview/Services/Implementation/ProcessMonitor.cs @@ -8,15 +8,21 @@ sealed class ProcessMonitor : IProcessMonitor { #region Private constants private const string DEFAULT_PROCESS_NAME = "ExeFile"; + private const string CURRENT_PROCESS_NAME = "EVE-O Preview"; #endregion #region Private fields private readonly IDictionary _processCache; + private IProcessInfo _currentProcessInfo; #endregion public ProcessMonitor() { this._processCache = new Dictionary(512); + + // This field cannot be initialized properly in constructor + // At the moment this code is executed the main application window is not yet initialized + this._currentProcessInfo = new ProcessInfo(IntPtr.Zero, ""); } private bool IsMonitoredProcess(string processName) @@ -25,6 +31,41 @@ private bool IsMonitoredProcess(string processName) return String.Equals(processName, ProcessMonitor.DEFAULT_PROCESS_NAME, StringComparison.OrdinalIgnoreCase); } + private IProcessInfo GetCurrentProcessInfo() + { + var currentProcess = Process.GetCurrentProcess(); + return new ProcessInfo(currentProcess.MainWindowHandle, currentProcess.MainWindowTitle); + } + + public IProcessInfo GetMainProcess() + { + if (this._currentProcessInfo.Handle == IntPtr.Zero) + { + var processInfo = this.GetCurrentProcessInfo(); + + // Are we initialized yet? + if (processInfo.Title != "") + { + this._currentProcessInfo = processInfo; + } + } + + return this._currentProcessInfo; + } + + public ICollection GetAllProcesses() + { + ICollection result = new List(this._processCache.Count); + + // TODO Lock list here just in case + foreach (KeyValuePair entry in this._processCache) + { + result.Add(new ProcessInfo(entry.Key, entry.Value)); + } + + return result; + } + public void GetUpdatedProcesses(out ICollection addedProcesses, out ICollection updatedProcesses, out ICollection removedProcesses) { addedProcesses = new List(16); @@ -76,18 +117,5 @@ public void GetUpdatedProcesses(out ICollection addedProcesses, ou this._processCache.Remove(index); } } - - public ICollection GetAllProcesses() - { - ICollection result = new List(this._processCache.Count); - - // TODO Lock list here just in case - foreach (KeyValuePair entry in this._processCache) - { - result.Add(new ProcessInfo(entry.Key, entry.Value)); - } - - return result; - } } } diff --git a/src/Eve-O-Preview/Services/Implementation/ThumbnailManager.cs b/src/Eve-O-Preview/Services/Implementation/ThumbnailManager.cs index ea0904f..9be8cde 100644 --- a/src/Eve-O-Preview/Services/Implementation/ThumbnailManager.cs +++ b/src/Eve-O-Preview/Services/Implementation/ThumbnailManager.cs @@ -41,6 +41,7 @@ sealed class ThumbnailManager : IThumbnailManager private bool _isHoverEffectActive; private int _refreshCycleCount; + private int _hideThumbnailsDelay; #endregion public ThumbnailManager(IMediator mediator, IThumbnailConfiguration configuration, IProcessMonitor processMonitor, IWindowManager windowManager, IThumbnailViewFactory factory) @@ -66,6 +67,8 @@ public ThumbnailManager(IMediator mediator, IThumbnailConfiguration configuratio this._thumbnailUpdateTimer = new DispatcherTimer(); this._thumbnailUpdateTimer.Tick += ThumbnailUpdateTimerTick; this._thumbnailUpdateTimer.Interval = new TimeSpan(0, 0, 0, 0, configuration.ThumbnailRefreshPeriod); + + this._hideThumbnailsDelay = this._configuration.HideThumbnailsDelay; } public void Start() @@ -180,10 +183,19 @@ private void RefreshThumbnails() { // TODO Split this method IntPtr foregroundWindowHandle = this._windowManager.GetForegroundWindowHandle(); + + // The foreground window can be NULL in certain circumstances, such as when a window is losing activation. + // It is safer to just skip this refresh round than to do something while the system state is undefined + if (foregroundWindowHandle == IntPtr.Zero) + { + return; + } + string foregroundWindowTitle = null; // Check if the foreground window handle is one of the known handles for client windows or their thumbnails bool isClientWindow = this.IsClientWindowActive(foregroundWindowHandle); + bool isMainWindowActive = this.IsMainWindowActive(foregroundWindowHandle); if (foregroundWindowHandle == this._activeClient.Handle) { @@ -196,12 +208,7 @@ private void RefreshThumbnails() } else if (!isClientWindow) { - // Under some circumstances Foreground WindowHandle can be zero - // (f.e. when Thumbnail is silently stealing focus from the currently open app) - if (foregroundWindowHandle != IntPtr.Zero) - { - this._externalApplication = foregroundWindowHandle; - } + this._externalApplication = foregroundWindowHandle; } // No need to minimize EVE clients when switching out to non-EVE window (like thumbnail) @@ -210,7 +217,25 @@ private void RefreshThumbnails() this.SwitchActiveClient(foregroundWindowHandle, foregroundWindowTitle); } - bool hideAllThumbnails = this._configuration.HideThumbnailsOnLostFocus && !isClientWindow; + bool hideAllThumbnails = this._configuration.HideThumbnailsOnLostFocus && !(isClientWindow || isMainWindowActive); + + // Wait for some time before hiding all previews + if (hideAllThumbnails) + { + this._hideThumbnailsDelay--; + if (this._hideThumbnailsDelay > 0) + { + hideAllThumbnails = false; // Postpone the 'hide all' operation + } + else + { + this._hideThumbnailsDelay = 0; // Stop the counter + } + } + else + { + this._hideThumbnailsDelay = this._configuration.HideThumbnailsDelay; // Reset the counter + } this._refreshCycleCount++; @@ -456,6 +481,7 @@ private void ThumbnailViewMoved(IntPtr id) this.EnqueueLocationChange(view); } + // Checks whether currently active window belongs to an EVE client or its thumbnail private bool IsClientWindowActive(IntPtr windowHandle) { if (windowHandle == IntPtr.Zero) @@ -476,6 +502,12 @@ private bool IsClientWindowActive(IntPtr windowHandle) return false; } + // Check whether the currently active window belongs to EVE-O Preview itself + private bool IsMainWindowActive(IntPtr windowHandle) + { + return (this._processMonitor.GetMainProcess().Handle == windowHandle); + } + private void ThumbnailZoomIn(IThumbnailView view) { this.DisableViewEvents(); diff --git a/src/Eve-O-Preview/Services/Interface/IProcessMonitor.cs b/src/Eve-O-Preview/Services/Interface/IProcessMonitor.cs index 1e123bb..22029a4 100644 --- a/src/Eve-O-Preview/Services/Interface/IProcessMonitor.cs +++ b/src/Eve-O-Preview/Services/Interface/IProcessMonitor.cs @@ -4,6 +4,7 @@ namespace EveOPreview.Services { public interface IProcessMonitor { + IProcessInfo GetMainProcess(); ICollection GetAllProcesses(); void GetUpdatedProcesses(out ICollection addedProcesses, out ICollection updatedProcesses, out ICollection removedProcesses); } From ae443cccb7501580ddf97b7cddebdeda09697141 Mon Sep 17 00:00:00 2001 From: Anton Kasyanov Date: Sun, 2 May 2021 22:25:51 +0300 Subject: [PATCH 14/18] Merge artifacts fix --- Eve-O-Preview/packages.config | 9 ------ README.md | 12 ++------ src/Eve-O-Preview/Eve-O-Preview.csproj | 40 ++------------------------ 3 files changed, 5 insertions(+), 56 deletions(-) delete mode 100644 Eve-O-Preview/packages.config diff --git a/Eve-O-Preview/packages.config b/Eve-O-Preview/packages.config deleted file mode 100644 index 0c4386f..0000000 --- a/Eve-O-Preview/packages.config +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/README.md b/README.md index 9a59a43..7a17511 100644 --- a/README.md +++ b/README.md @@ -25,18 +25,10 @@ If you have find out that some of the features or their combination of EVE-O Pre
-<<<<<<< HEAD ## How To Install & Use -======= -* Windows 7, Windows 8/8.1, Windows 10 -* Microsoft .NET Framework 4.6.2+ -* EVE clients Display Mode should be set to **Fixed Window** or **Window Mode**. **Fullscreen** mode is not supported. - -# How To Install & Use ->>>>>>> master 1. Download and extract the contents of the .zip archive to a location of your choice (ie: Desktop, CCP folder, etc) -..**Note**: Please do not install the application into the *Program Files* or *Program files (x86)* folders. These folders in general do not allow applications to write anything there while EVE-O Preview now stores its configuration file next to its executable, thus requiring the write access to the folder it is installed into. +..* **Note**: Please do not install the application into the *Program Files* or *Program files (x86)* folders. These folders in general do not allow applications to write anything there while EVE-O Preview now stores its configuration file next to its executable, thus requiring the write access to the folder it is installed into. 2. Start up both EVE-O Preview and your EVE Clients (the order does not matter) 3. Adjust settings as you see fit. Program options are described below @@ -50,7 +42,7 @@ Video Guides: ## System Requirements * Windows 7, Windows 8/8.1, Windows 10 -* Microsoft .NET Framework 4.7+ +* Microsoft .NET Framework 4.6.2+ * EVE clients Display Mode should be set to **Fixed Window** or **Window Mode**. **Fullscreen** mode is not supported.
diff --git a/src/Eve-O-Preview/Eve-O-Preview.csproj b/src/Eve-O-Preview/Eve-O-Preview.csproj index 4eff859..40e61b1 100644 --- a/src/Eve-O-Preview/Eve-O-Preview.csproj +++ b/src/Eve-O-Preview/Eve-O-Preview.csproj @@ -1,9 +1,5 @@  -<<<<<<< HEAD:src/Eve-O-Preview/Eve-O-Preview.csproj -======= - ->>>>>>> master:Eve-O-Preview/Eve-O-Preview.csproj Debug AnyCPU @@ -89,23 +85,7 @@ prompt -<<<<<<< HEAD:src/Eve-O-Preview/Eve-O-Preview.csproj -======= - - ..\packages\Costura.Fody.4.1.0\lib\net40\Costura.dll - - - ..\packages\LightInject.6.3.3\lib\net46\LightInject.dll - - - ..\packages\MediatR.8.0.1\lib\net461\MediatR.dll - - - - ..\packages\Newtonsoft.Json.12.0.3\lib\net45\Newtonsoft.Json.dll - ->>>>>>> master:Eve-O-Preview/Eve-O-Preview.csproj @@ -113,12 +93,6 @@ -<<<<<<< HEAD:src/Eve-O-Preview/Eve-O-Preview.csproj -======= - - ..\packages\System.ValueTuple.4.5.0\lib\net461\System.ValueTuple.dll - ->>>>>>> master:Eve-O-Preview/Eve-O-Preview.csproj @@ -270,19 +244,11 @@ 13.0.1 + + 4.5.0 + -<<<<<<< HEAD:src/Eve-O-Preview/Eve-O-Preview.csproj -======= - - - This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. - - - - - ->>>>>>> master:Eve-O-Preview/Eve-O-Preview.csproj