From 9dcc75d56ebaca96a5a6d816619caf0ab0870058 Mon Sep 17 00:00:00 2001 From: Dave Rayment Date: Sun, 8 Sep 2024 21:56:34 +0100 Subject: [PATCH 1/2] Update FilePreviewer to prevent tooltips from obscuring title bar controls. Fixes #34496 --- .../peek/Peek.FilePreviewer/FilePreview.xaml | 15 +++++++++---- .../Peek.FilePreviewer/FilePreview.xaml.cs | 22 ++++++++++++++++++- 2 files changed, 32 insertions(+), 5 deletions(-) diff --git a/src/modules/peek/Peek.FilePreviewer/FilePreview.xaml b/src/modules/peek/Peek.FilePreviewer/FilePreview.xaml index 52ad6b435cd..20d78310eb9 100644 --- a/src/modules/peek/Peek.FilePreviewer/FilePreview.xaml +++ b/src/modules/peek/Peek.FilePreviewer/FilePreview.xaml @@ -30,8 +30,12 @@ MaxWidth="{x:Bind ImagePreviewer.MaxImageSize.Width, Mode=OneWay}" MaxHeight="{x:Bind ImagePreviewer.MaxImageSize.Height, Mode=OneWay}" Source="{x:Bind ImagePreviewer.Preview, Mode=OneWay}" - ToolTipService.ToolTip="{x:Bind InfoTooltip, Mode=OneWay}" - Visibility="{x:Bind IsPreviewVisible(ImagePreviewer, Previewer.State), Mode=OneWay}" /> + Visibility="{x:Bind IsPreviewVisible(ImagePreviewer, Previewer.State), Mode=OneWay}" + PointerMoved="ToolTipParentControl_PointerMoved"> + + + + + Visibility="{x:Bind IsPreviewVisible(VideoPreviewer, Previewer.State), Mode=OneWay}" + PointerMoved="ToolTipParentControl_PointerMoved"> + + + diff --git a/src/modules/peek/Peek.FilePreviewer/FilePreview.xaml.cs b/src/modules/peek/Peek.FilePreviewer/FilePreview.xaml.cs index 23874d8ca8c..68a3d61777b 100644 --- a/src/modules/peek/Peek.FilePreviewer/FilePreview.xaml.cs +++ b/src/modules/peek/Peek.FilePreviewer/FilePreview.xaml.cs @@ -12,6 +12,7 @@ using Microsoft.PowerToys.Telemetry; using Microsoft.UI.Xaml; using Microsoft.UI.Xaml.Controls; +using Microsoft.UI.Xaml.Controls.Primitives; using Microsoft.UI.Xaml.Input; using Microsoft.Web.WebView2.Core; using Peek.Common.Extensions; @@ -336,7 +337,7 @@ private async Task UpdateTooltipAsync(CancellationToken cancellationToken) } // Fetch and format available file properties - var sb = new StringBuilder(); + var sb = new StringBuilder(256); string fileNameFormatted = ReadableStringHelper.FormatResourceString("PreviewTooltip_FileName", Item.Name); sb.Append(fileNameFormatted); @@ -356,5 +357,24 @@ private async Task UpdateTooltipAsync(CancellationToken cancellationToken) InfoTooltip = sb.ToString(); } + + /// + /// Set the placement of the tooltip for those previewers supporting the feature, ensuring it does not obscure the Main Window's title bar. + /// + private void ToolTipParentControl_PointerMoved(object sender, PointerRoutedEventArgs e) + { + var previewControl = sender as FrameworkElement; + if (previewControl != null) + { + var placement = (e.GetCurrentPoint(previewControl).Position.Y < previewControl.ActualHeight / 2) ? + PlacementMode.Bottom : PlacementMode.Top; + + var toolTip = ToolTipService.GetToolTip(previewControl) as ToolTip; + if (toolTip != null) + { + toolTip.Placement = placement; + } + } + } } } From 559543c441e3cbc8b5f0b23b1b624f4a492582fd Mon Sep 17 00:00:00 2001 From: Dave Rayment Date: Sun, 8 Sep 2024 22:38:22 +0100 Subject: [PATCH 2/2] Small tidy to pointer move handler and StringBuilder setup. --- .../peek/Peek.FilePreviewer/FilePreview.xaml.cs | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/src/modules/peek/Peek.FilePreviewer/FilePreview.xaml.cs b/src/modules/peek/Peek.FilePreviewer/FilePreview.xaml.cs index 68a3d61777b..7db7582c6f4 100644 --- a/src/modules/peek/Peek.FilePreviewer/FilePreview.xaml.cs +++ b/src/modules/peek/Peek.FilePreviewer/FilePreview.xaml.cs @@ -337,10 +337,8 @@ private async Task UpdateTooltipAsync(CancellationToken cancellationToken) } // Fetch and format available file properties - var sb = new StringBuilder(256); - string fileNameFormatted = ReadableStringHelper.FormatResourceString("PreviewTooltip_FileName", Item.Name); - sb.Append(fileNameFormatted); + var sb = new StringBuilder(fileNameFormatted, 256); cancellationToken.ThrowIfCancellationRequested(); string fileType = await Task.Run(Item.GetContentTypeAsync); @@ -366,13 +364,12 @@ private void ToolTipParentControl_PointerMoved(object sender, PointerRoutedEvent var previewControl = sender as FrameworkElement; if (previewControl != null) { - var placement = (e.GetCurrentPoint(previewControl).Position.Y < previewControl.ActualHeight / 2) ? - PlacementMode.Bottom : PlacementMode.Top; - var toolTip = ToolTipService.GetToolTip(previewControl) as ToolTip; if (toolTip != null) { - toolTip.Placement = placement; + var pos = e.GetCurrentPoint(previewControl).Position; + toolTip.Placement = pos.Y < previewControl.ActualHeight / 2 ? + PlacementMode.Bottom : PlacementMode.Top; } } }