From 2e2247105270d703fcf51331a3c4294f200c1ffd Mon Sep 17 00:00:00 2001 From: CyrusNajmabadi Date: Thu, 11 Feb 2016 20:22:42 -0800 Subject: [PATCH] Prevent NaN from slipping into .Measure calls. --- .../Core/Host/IPreviewPaneService.cs | 2 +- .../Implementation/SolutionPreviewResult.cs | 2 +- .../PreviewPane/PreviewPane.xaml.cs | 25 +++++++++++++------ .../PreviewPane/PreviewPaneService.cs | 2 +- 4 files changed, 21 insertions(+), 10 deletions(-) diff --git a/src/EditorFeatures/Core/Host/IPreviewPaneService.cs b/src/EditorFeatures/Core/Host/IPreviewPaneService.cs index a9f18d6df99..be44aeb9b79 100644 --- a/src/EditorFeatures/Core/Host/IPreviewPaneService.cs +++ b/src/EditorFeatures/Core/Host/IPreviewPaneService.cs @@ -8,6 +8,6 @@ namespace Microsoft.CodeAnalysis.Editor.Host { internal interface IPreviewPaneService : IWorkspaceService { - object GetPreviewPane(DiagnosticData diagnostic, string language, string projectType, IList previewContent); + object GetPreviewPane(DiagnosticData diagnostic, string language, string projectType, IReadOnlyList previewContent); } } diff --git a/src/EditorFeatures/Core/Implementation/SolutionPreviewResult.cs b/src/EditorFeatures/Core/Implementation/SolutionPreviewResult.cs index 7ab1fb95e97..196572096c3 100644 --- a/src/EditorFeatures/Core/Implementation/SolutionPreviewResult.cs +++ b/src/EditorFeatures/Core/Implementation/SolutionPreviewResult.cs @@ -26,7 +26,7 @@ public SolutionPreviewResult(IList previews, SolutionChange public bool IsEmpty => _previews.Count == 0; - public async Task> GetPreviewsAsync(DocumentId preferredDocumentId = null, ProjectId preferredProjectId = null, CancellationToken cancellationToken = default(CancellationToken)) + public async Task> GetPreviewsAsync(DocumentId preferredDocumentId = null, ProjectId preferredProjectId = null, CancellationToken cancellationToken = default(CancellationToken)) { AssertIsForeground(); cancellationToken.ThrowIfCancellationRequested(); diff --git a/src/VisualStudio/Core/Def/Implementation/PreviewPane/PreviewPane.xaml.cs b/src/VisualStudio/Core/Def/Implementation/PreviewPane/PreviewPane.xaml.cs index cca7418cda8..97543413d8f 100644 --- a/src/VisualStudio/Core/Def/Implementation/PreviewPane/PreviewPane.xaml.cs +++ b/src/VisualStudio/Core/Def/Implementation/PreviewPane/PreviewPane.xaml.cs @@ -16,6 +16,8 @@ namespace Microsoft.VisualStudio.LanguageServices.Implementation.PreviewPane { internal partial class PreviewPane : UserControl, IDisposable { + private const double DefaultWidth = 400; + private static readonly string s_dummyThreeLineTitle = "A" + Environment.NewLine + "A" + Environment.NewLine + "A"; private static readonly Size s_infiniteSize = new Size(double.PositiveInfinity, double.PositiveInfinity); @@ -26,8 +28,15 @@ internal partial class PreviewPane : UserControl, IDisposable private double _heightForThreeLineTitle; private IWpfDifferenceViewer _previewDiffViewer; - public PreviewPane(Image severityIcon, string id, string title, string description, Uri helpLink, string helpLinkToolTipText, - IList previewContent, bool logIdVerbatimInTelemetry) + public PreviewPane( + Image severityIcon, + string id, + string title, + string description, + Uri helpLink, + string helpLinkToolTipText, + IReadOnlyList previewContent, + bool logIdVerbatimInTelemetry) { InitializeComponent(); @@ -62,7 +71,7 @@ internal partial class PreviewPane : UserControl, IDisposable InitializePreviewElement(previewContent); } - private void InitializePreviewElement(IList previewItems) + private void InitializePreviewElement(IReadOnlyList previewItems) { var previewElement = CreatePreviewElement(previewItems); @@ -84,7 +93,7 @@ private void InitializePreviewElement(IList previewItems) AdjustWidthAndHeight(previewElement); } - private FrameworkElement CreatePreviewElement(IList previewItems) + private FrameworkElement CreatePreviewElement(IReadOnlyList previewItems) { if (previewItems == null || previewItems.Count == 0) { @@ -175,7 +184,7 @@ public static FrameworkElement GetPreviewForString(string previewContent, bool u { preview = new Border() { - Width = 400, + Width = DefaultWidth, MinHeight = 75, Child = textBlock }; @@ -202,7 +211,9 @@ private void AdjustWidthAndHeight(FrameworkElement previewElement) } else { - PreviewDockPanel.Measure(availableSize: new Size(previewElement.Width, double.PositiveInfinity)); + PreviewDockPanel.Measure(availableSize: new Size( + double.IsNaN(previewElement.Width) ? DefaultWidth : previewElement.Width, + double.PositiveInfinity)); headerStackPanelWidth = PreviewDockPanel.DesiredSize.Width; if (IsNormal(headerStackPanelWidth)) { @@ -320,4 +331,4 @@ private void ExpanderToggleButton_CheckedChanged(object sender, RoutedEventArgs } } } -} +} \ No newline at end of file diff --git a/src/VisualStudio/Core/Def/Implementation/PreviewPane/PreviewPaneService.cs b/src/VisualStudio/Core/Def/Implementation/PreviewPane/PreviewPaneService.cs index 5e2d497298a..af2b701b6e2 100644 --- a/src/VisualStudio/Core/Def/Implementation/PreviewPane/PreviewPaneService.cs +++ b/src/VisualStudio/Core/Def/Implementation/PreviewPane/PreviewPaneService.cs @@ -81,7 +81,7 @@ private static Uri GetHelpLink(DiagnosticData diagnostic, string language, strin return helpLink; } - object IPreviewPaneService.GetPreviewPane(DiagnosticData diagnostic, string language, string projectType, IList previewContent) + object IPreviewPaneService.GetPreviewPane(DiagnosticData diagnostic, string language, string projectType, IReadOnlyList previewContent) { var title = diagnostic?.Message; -- GitLab