Skip to content

Commit

Permalink
Added icon scaling.
Browse files Browse the repository at this point in the history
  • Loading branch information
MrJul committed Oct 5, 2014
1 parent 0a119a3 commit cd29f3d
Show file tree
Hide file tree
Showing 3 changed files with 71 additions and 6 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
<Compile Include="Presentation\ElementTypeDisplay.cs" />
<Compile Include="Presentation\ExceptionContent.cs" />
<Compile Include="Presentation\IColorizer.cs" />
<Compile Include="Presentation\IconScaling.cs" />
<Compile Include="Presentation\IdentifierTooltipContent.cs">
<SubType>Code</SubType>
</Compile>
Expand Down
54 changes: 54 additions & 0 deletions GammaJul.ReSharper.EnhancedTooltip/Presentation/IconScaling.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
using System;
using System.Windows;
using System.Windows.Documents;
using System.Windows.Media;
using JetBrains.Annotations;
using JetBrains.Util;

namespace GammaJul.ReSharper.EnhancedTooltip.Presentation {

public static class IconScaling {

public static readonly DependencyProperty IsScalingWithFontSizeProperty = DependencyProperty.RegisterAttached(
"IsScalingWithFontSize",
typeof(bool),
typeof(IconScaling),
new FrameworkPropertyMetadata(BooleanBoxes.False, OnFontSizeForScaleChanged));

public static double GetIsScalingWithFontSize([NotNull] DependencyObject owner) {
if (owner == null)
throw new ArgumentNullException("owner");
return (double) owner.GetValue(IsScalingWithFontSizeProperty);
}

public static void SetIsScalingWithFontSize([NotNull] DependencyObject owner, bool value) {
if (owner == null)
throw new ArgumentNullException("owner");
owner.SetValue(IsScalingWithFontSizeProperty, value);
}

private static void OnFontSizeForScaleChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) {
var element = d as FrameworkElement;
if (element == null)
return;

FontFamily fontFamily = TextElement.GetFontFamily(element);
if (fontFamily == null)
return;

double fontSize = TextElement.GetFontSize(element);
if (Double.IsNaN(fontSize))
return;


double size = fontFamily.LineSpacing * fontSize;
if (size < 18.0) {
// Scaling isn't a real need at these small sizes, use the best looking 16x16 instead.
size = 16.0;
}
element.Width = element.Height = size;
}

}

}
22 changes: 16 additions & 6 deletions GammaJul.ReSharper.EnhancedTooltip/Presentation/UIResources.xaml
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:theming="clr-namespace:JetBrains.VsIntegration.SinceVs11.Theming;assembly=JetBrains.Platform.ReSharper.VisualStudio.SinceVs11"
xmlns:controls="clr-namespace:JetBrains.UI.Avalon.Controls;assembly=JetBrains.Platform.ReSharper.UI"
xmlns:jui="urn:schemas-jetbrains-com:jetbrains-ui-avalon"
xmlns:local="clr-namespace:GammaJul.ReSharper.EnhancedTooltip.Presentation">

<!-- Style for VS listbox item inside the tooltip -->
Expand Down Expand Up @@ -57,9 +58,11 @@
<StackPanel x:Name="Root" TextOptions.TextFormattingMode="Ideal" TextOptions.TextRenderingMode="ClearType">

<DockPanel Margin="0">
<ContentPresenter x:Name="IconPresenter" Focusable="False"
Content="{Binding Icon}" Margin="0,0,4,0"
DockPanel.Dock="Left" VerticalAlignment="Top" HorizontalAlignment="Left" />
<Border DataContext="{Binding Icon}">
<jui:ThemedIconViewImage x:Name="IconPresenter" Stretch="Uniform"
Margin="0,0,4,0" local:IconScaling.IsScalingWithFontSize="True"
DockPanel.Dock="Left" VerticalAlignment="Top" HorizontalAlignment="Left" />
</Border>
<controls:RichTextPresenter TextWrapping="Wrap" IsAutoContrasted="False"
RichText="{Binding Text}" VerticalAlignment="Center" />
</DockPanel>
Expand Down Expand Up @@ -124,12 +127,19 @@
<!-- Style for an issue -->
<DataTemplate DataType="{x:Type local:IssueTooltipContent}">
<DockPanel>
<ContentPresenter x:Name="IconPresenter" Focusable="False"
Content="{Binding Icon}" Margin="0,0,4,0"
DockPanel.Dock="Left" VerticalAlignment="Top" HorizontalAlignment="Left" />
<Border DataContext="{Binding Icon}">
<jui:ThemedIconViewImage x:Name="IconPresenter" Stretch="Uniform"
Margin="0,0,4,0" local:IconScaling.IsScalingWithFontSize="True"
DockPanel.Dock="Left" VerticalAlignment="Top" HorizontalAlignment="Left" />
</Border>
<controls:RichTextPresenter TextWrapping="Wrap" IsAutoContrasted="False"
RichText="{Binding Text}" VerticalAlignment="Center" />
</DockPanel>
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding Icon}" Value="{x:Null}">
<Setter TargetName="IconPresenter" Property="Visibility" Value="Collapsed" />
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>

<!-- Style for other content -->
Expand Down

0 comments on commit cd29f3d

Please sign in to comment.