diff --git a/src/modules/peek/Peek.FilePreviewer/FilePreview.xaml.cs b/src/modules/peek/Peek.FilePreviewer/FilePreview.xaml.cs
index 26386c1fcaa..2736607ccd5 100644
--- a/src/modules/peek/Peek.FilePreviewer/FilePreview.xaml.cs
+++ b/src/modules/peek/Peek.FilePreviewer/FilePreview.xaml.cs
@@ -102,7 +102,8 @@ private async Task UpdatePreviewAsync()
if (Previewer != null)
{
var size = await Previewer.GetPreviewSizeAsync();
- PreviewSizeChanged?.Invoke(this, new PreviewSizeChangedArgs(size));
+ SizeFormat windowSizeFormat = UnsupportedFilePreviewer != null ? SizeFormat.Percentage : SizeFormat.Pixels;
+ PreviewSizeChanged?.Invoke(this, new PreviewSizeChangedArgs(size, windowSizeFormat));
await Previewer.LoadPreviewAsync();
}
}
diff --git a/src/modules/peek/Peek.FilePreviewer/Models/PreviewSizeChangedArgs.cs b/src/modules/peek/Peek.FilePreviewer/Models/PreviewSizeChangedArgs.cs
index a34785e7cbd..34f664835d3 100644
--- a/src/modules/peek/Peek.FilePreviewer/Models/PreviewSizeChangedArgs.cs
+++ b/src/modules/peek/Peek.FilePreviewer/Models/PreviewSizeChangedArgs.cs
@@ -6,13 +6,22 @@ namespace Peek.FilePreviewer.Models
{
using Windows.Foundation;
+ public enum SizeFormat
+ {
+ Pixels,
+ Percentage,
+ }
+
public class PreviewSizeChangedArgs
{
- public PreviewSizeChangedArgs(Size windowSizeRequested)
+ public PreviewSizeChangedArgs(Size windowSizeRequested, SizeFormat sizeFormat = SizeFormat.Pixels)
{
WindowSizeRequested = windowSizeRequested;
+ WindowSizeFormat = sizeFormat;
}
public Size WindowSizeRequested { get; init; }
+
+ public SizeFormat WindowSizeFormat { get; init; }
}
}
diff --git a/src/modules/peek/Peek.FilePreviewer/Peek.FilePreviewer.csproj b/src/modules/peek/Peek.FilePreviewer/Peek.FilePreviewer.csproj
index b9c20d8ca41..53c11befe3a 100644
--- a/src/modules/peek/Peek.FilePreviewer/Peek.FilePreviewer.csproj
+++ b/src/modules/peek/Peek.FilePreviewer/Peek.FilePreviewer.csproj
@@ -22,6 +22,7 @@
+
diff --git a/src/modules/peek/Peek.FilePreviewer/Previewers/UnsupportedFilePreviewer/UnsupportedFilePreviewer.cs b/src/modules/peek/Peek.FilePreviewer/Previewers/UnsupportedFilePreviewer/UnsupportedFilePreviewer.cs
index 70ca4af1613..ac5cbf6a0ed 100644
--- a/src/modules/peek/Peek.FilePreviewer/Previewers/UnsupportedFilePreviewer/UnsupportedFilePreviewer.cs
+++ b/src/modules/peek/Peek.FilePreviewer/Previewers/UnsupportedFilePreviewer/UnsupportedFilePreviewer.cs
@@ -10,6 +10,7 @@ namespace Peek.FilePreviewer.Previewers
using System.Threading;
using System.Threading.Tasks;
using CommunityToolkit.Mvvm.ComponentModel;
+ using Microsoft.PowerToys.Settings.UI.Library;
using Microsoft.UI.Dispatching;
using Microsoft.UI.Xaml.Controls;
using Microsoft.UI.Xaml.Media.Imaging;
@@ -18,6 +19,7 @@ namespace Peek.FilePreviewer.Previewers
using Peek.Common.Helpers;
using Peek.FilePreviewer.Previewers.Helpers;
using Windows.Foundation;
+
using File = Peek.Common.Models.File;
public partial class UnsupportedFilePreviewer : ObservableObject, IUnsupportedFilePreviewer, IDisposable
@@ -46,10 +48,24 @@ public UnsupportedFilePreviewer(File file)
FileName = file.FileName;
DateModified = file.DateModified.ToString();
Dispatcher = DispatcherQueue.GetForCurrentThread();
-
PropertyChanged += OnPropertyChanged;
+
+ var settingsUtils = new SettingsUtils();
+ var settings = settingsUtils.GetSettingsOrDefault(PeekSettings.ModuleName);
+
+ if (settings != null)
+ {
+ UnsupportedFileWidthPercent = settings.Properties.UnsupportedFileWidthPercent / 100.0;
+ UnsupportedFileHeightPercent = settings.Properties.UnsupportedFileHeightPercent / 100.0;
+ }
}
+ private double UnsupportedFileWidthPercent { get; set; }
+
+ private double UnsupportedFileHeightPercent { get; set; }
+
+ public bool IsPreviewLoaded => iconPreview != null;
+
private File File { get; }
private DispatcherQueue Dispatcher { get; }
@@ -72,8 +88,7 @@ public Task GetPreviewSizeAsync()
{
return Task.Run(() =>
{
- // TODO: This is the min size. Calculate a 20-25% of the screen.
- return new Size(680, 500);
+ return new Size(UnsupportedFileWidthPercent, UnsupportedFileHeightPercent);
});
}
diff --git a/src/modules/peek/Peek.UI/MainWindow.xaml.cs b/src/modules/peek/Peek.UI/MainWindow.xaml.cs
index 22061ee67a4..6453410c99a 100644
--- a/src/modules/peek/Peek.UI/MainWindow.xaml.cs
+++ b/src/modules/peek/Peek.UI/MainWindow.xaml.cs
@@ -4,6 +4,7 @@
namespace Peek.UI
{
+ using System.Diagnostics;
using interop;
using Microsoft.UI.Windowing;
using Microsoft.UI.Xaml.Input;
@@ -11,8 +12,6 @@ namespace Peek.UI
using Peek.UI.Extensions;
using Peek.UI.Native;
using Windows.Foundation;
- using Windows.System;
- using Windows.UI.Core;
using WinUIEx;
///
@@ -86,15 +85,38 @@ private void Uninitialize()
/// PreviewSizeChangedArgs
private void FilePreviewer_PreviewSizeChanged(object sender, PreviewSizeChangedArgs e)
{
+ // TODO: Use design-defined rules for adjusted window size
var requestedSize = e.WindowSizeRequested;
var monitorSize = this.GetMonitorSize();
- // TODO: Use design-defined rules for adjusted window size
var titleBarHeight = TitleBarControl.ActualHeight;
- var maxContentSize = new Size(monitorSize.Width * MaxWindowToMonitorRatio, (monitorSize.Height - titleBarHeight) * MaxWindowToMonitorRatio);
+
+ var maxContentSize = new Size(0, 0);
var minContentSize = new Size(MinWindowWidth, MinWindowHeight - titleBarHeight);
- var adjustedContentSize = requestedSize.Fit(maxContentSize, minContentSize);
+ var adjustedContentSize = new Size(0, 0);
+
+ if (e.WindowSizeFormat == SizeFormat.Percentage)
+ {
+ maxContentSize = new Size(monitorSize.Width * requestedSize.Width, (monitorSize.Height - titleBarHeight) * requestedSize.Height);
+ minContentSize = new Size(MinWindowWidth, MinWindowHeight - titleBarHeight);
+
+ adjustedContentSize = maxContentSize.Fit(maxContentSize, minContentSize);
+ }
+ else if (e.WindowSizeFormat == SizeFormat.Pixels)
+ {
+ maxContentSize = new Size(monitorSize.Width * MaxWindowToMonitorRatio, (monitorSize.Height - titleBarHeight) * MaxWindowToMonitorRatio);
+ minContentSize = new Size(MinWindowWidth, MinWindowHeight - titleBarHeight);
+
+ adjustedContentSize = requestedSize.Fit(maxContentSize, minContentSize);
+ }
+ else
+ {
+ Debug.Assert(false, "Unknown SizeFormat set for resizing window.");
+ adjustedContentSize = minContentSize;
+
+ return;
+ }
// TODO: Only re-center if window has not been resized by user (or use design-defined logic).
// TODO: Investigate why portrait images do not perfectly fit edge-to-edge
diff --git a/src/settings-ui/Settings.UI.Library/PeekProperties.cs b/src/settings-ui/Settings.UI.Library/PeekProperties.cs
index f9355817abe..5515a7ed7b5 100644
--- a/src/settings-ui/Settings.UI.Library/PeekProperties.cs
+++ b/src/settings-ui/Settings.UI.Library/PeekProperties.cs
@@ -10,13 +10,22 @@ namespace Microsoft.PowerToys.Settings.UI.Library
{
public class PeekProperties
{
+ public const double DefaultUnsupportedFileWidthPercent = 40.0;
+ public const double DefaultUnsupportedFileHeightPercent = 40.0;
+
public PeekProperties()
{
ActivationShortcut = new HotkeySettings(false, true, false, false, 0x20);
+ UnsupportedFileWidthPercent = DefaultUnsupportedFileWidthPercent;
+ UnsupportedFileHeightPercent = DefaultUnsupportedFileHeightPercent;
}
public HotkeySettings ActivationShortcut { get; set; }
+ public double UnsupportedFileWidthPercent { get; set; }
+
+ public double UnsupportedFileHeightPercent { get; set; }
+
public override string ToString()
=> JsonSerializer.Serialize(this);
}
diff --git a/src/settings-ui/Settings.UI.Library/ViewModels/PeekViewModel.cs b/src/settings-ui/Settings.UI.Library/ViewModels/PeekViewModel.cs
index 7285e15d173..6849a7a1cb4 100644
--- a/src/settings-ui/Settings.UI.Library/ViewModels/PeekViewModel.cs
+++ b/src/settings-ui/Settings.UI.Library/ViewModels/PeekViewModel.cs
@@ -79,6 +79,35 @@ public HotkeySettings ActivationShortcut
}
}
+ public double UnsupportedFileWidthPercent
+ {
+ get => _peekSettings.Properties.UnsupportedFileWidthPercent;
+ set
+ {
+ if (_peekSettings.Properties.UnsupportedFileWidthPercent != value)
+ {
+ _peekSettings.Properties.UnsupportedFileWidthPercent = value;
+ OnPropertyChanged(nameof(UnsupportedFileWidthPercent));
+ NotifySettingsChanged();
+ }
+ }
+ }
+
+ public double UnsupportedFileHeightPercent
+ {
+ get => _peekSettings.Properties.UnsupportedFileHeightPercent;
+
+ set
+ {
+ if (_peekSettings.Properties.UnsupportedFileHeightPercent != value)
+ {
+ _peekSettings.Properties.UnsupportedFileHeightPercent = value;
+ OnPropertyChanged(nameof(UnsupportedFileHeightPercent));
+ NotifySettingsChanged();
+ }
+ }
+ }
+
private void NotifySettingsChanged()
{
// Using InvariantCulture as this is an IPC message
diff --git a/src/settings-ui/Settings.UI/Strings/en-us/Resources.resw b/src/settings-ui/Settings.UI/Strings/en-us/Resources.resw
index 03a8ab9ca6a..6eb98ba70bd 100644
--- a/src/settings-ui/Settings.UI/Strings/en-us/Resources.resw
+++ b/src/settings-ui/Settings.UI/Strings/en-us/Resources.resw
@@ -2426,6 +2426,14 @@ From there, simply click on one of the supported files in the File Explorer and
Enable Peek
Peek is a product name, do not loc
+
+ Unsupported file window width (%)
+ Setting for width percent for unsupported file window.
+
+
+ Unsupported file window height (%)
+ Setting for height percent for unsupported file window.
+
Disable round corners when window is snapped
diff --git a/src/settings-ui/Settings.UI/Views/PeekPage.xaml b/src/settings-ui/Settings.UI/Views/PeekPage.xaml
index 2c8faf6c535..f1e968f2a35 100644
--- a/src/settings-ui/Settings.UI/Views/PeekPage.xaml
+++ b/src/settings-ui/Settings.UI/Views/PeekPage.xaml
@@ -22,6 +22,24 @@
+
+
+
+
+
+
+
+
+
+