minor zoom improvements

This commit is contained in:
Paddy Xu
2017-08-12 01:19:10 +03:00
parent 1c18890fbf
commit 6bae00361b
6 changed files with 87 additions and 33 deletions

View File

@@ -48,6 +48,7 @@ namespace QuickLook.Plugin.ImageViewer
private double _zoomFactor = 1d; private double _zoomFactor = 1d;
private bool _zoomToFit = true; private bool _zoomToFit = true;
private double _zoomToFitFactor;
public ImagePanel() public ImagePanel()
{ {
@@ -119,6 +120,16 @@ namespace QuickLook.Plugin.ImageViewer
} }
} }
public double ZoomToFitFactor
{
get => _zoomToFitFactor;
private set
{
_zoomToFitFactor = value;
OnPropertyChanged();
}
}
public double ZoomFactor public double ZoomFactor
{ {
get => _zoomFactor; get => _zoomFactor;
@@ -190,7 +201,7 @@ namespace QuickLook.Plugin.ImageViewer
var newZoom = ZoomFactor + ZoomFactor * (delta.Scale.X - 1); var newZoom = ZoomFactor + ZoomFactor * (delta.Scale.X - 1);
Zoom(newZoom, false); Zoom(newZoom);
viewPanel.ScrollToHorizontalOffset(viewPanel.HorizontalOffset - delta.Translation.X); viewPanel.ScrollToHorizontalOffset(viewPanel.HorizontalOffset - delta.Translation.X);
viewPanel.ScrollToVerticalOffset(viewPanel.VerticalOffset - delta.Translation.Y); viewPanel.ScrollToVerticalOffset(viewPanel.VerticalOffset - delta.Translation.Y);
@@ -225,8 +236,6 @@ namespace QuickLook.Plugin.ImageViewer
var delta = _dragInitPos.Value - e.GetPosition(viewPanel); var delta = _dragInitPos.Value - e.GetPosition(viewPanel);
Debug.WriteLine(_dragInitPos.Value);
viewPanel.ScrollToHorizontalOffset(delta.X); viewPanel.ScrollToHorizontalOffset(delta.X);
viewPanel.ScrollToVerticalOffset(delta.Y); viewPanel.ScrollToVerticalOffset(delta.Y);
} }
@@ -248,7 +257,7 @@ namespace QuickLook.Plugin.ImageViewer
// zoom // zoom
var newZoom = ZoomFactor + ZoomFactor * e.Delta / 120 * 0.1; var newZoom = ZoomFactor + ZoomFactor * e.Delta / 120 * 0.1;
Zoom(newZoom, false); Zoom(newZoom);
} }
public Size GetScrollSize() public Size GetScrollSize()
@@ -275,28 +284,34 @@ namespace QuickLook.Plugin.ImageViewer
var factor = Math.Min(viewPanel.ActualWidth / viewPanelImage.Source.Width, var factor = Math.Min(viewPanel.ActualWidth / viewPanelImage.Source.Width,
viewPanel.ActualHeight / viewPanelImage.Source.Height); viewPanel.ActualHeight / viewPanelImage.Source.Height);
Zoom(factor, true); ZoomToFitFactor = factor;
Zoom(factor);
} }
public void ResetZoom() public void ResetZoom()
{ {
Zoom(1d, false, true); Zoom(1d, true);
} }
public void Zoom(double factor, bool toFit, bool suppressEvent = false) public void Zoom(double factor, bool suppressEvent = false)
{ {
if (viewPanelImage.Source == null) if (viewPanelImage.Source == null)
return; return;
if (ZoomFactor < ZoomToFitFactor && factor > ZoomToFitFactor
|| ZoomFactor > ZoomToFitFactor && factor < ZoomToFitFactor)
{
factor = ZoomToFitFactor;
ZoomToFit = true;
}
factor = Math.Max(factor, MinZoomFactor); factor = Math.Max(factor, MinZoomFactor);
factor = Math.Min(factor, MaxZoomFactor); factor = Math.Min(factor, MaxZoomFactor);
ZoomFactor = factor; ZoomFactor = factor;
if (!toFit) var position = ZoomToFit
ZoomToFit = false;
var position = toFit
? new Point(viewPanelImage.Source.Width / 2, viewPanelImage.Source.Height / 2) ? new Point(viewPanelImage.Source.Width / 2, viewPanelImage.Source.Height / 2)
: Mouse.GetPosition(viewPanelImage); : Mouse.GetPosition(viewPanelImage);

View File

@@ -89,7 +89,7 @@
<Trigger Property="IsEnabled" Value="false"> <Trigger Property="IsEnabled" Value="false">
<Setter Property="Fill" TargetName="grip" Value="{DynamicResource MainWindowBackground}" /> <Setter Property="Fill" TargetName="grip" Value="{DynamicResource MainWindowBackground}" />
</Trigger> </Trigger>
<Trigger Property="IsKeyboardFocused" Value="true"> <Trigger Property="IsKeyboardFocused" Value="False">
<Setter Property="Fill" TargetName="grip" Value="{DynamicResource WindowTextForeground}" /> <Setter Property="Fill" TargetName="grip" Value="{DynamicResource WindowTextForeground}" />
</Trigger> </Trigger>
</ControlTemplate.Triggers> </ControlTemplate.Triggers>
@@ -124,13 +124,14 @@
<Setter Property="Stylus.IsPressAndHoldEnabled" Value="false" /> <Setter Property="Stylus.IsPressAndHoldEnabled" Value="false" />
<Setter Property="Background" Value="Transparent" /> <Setter Property="Background" Value="Transparent" />
<Setter Property="BorderBrush" Value="Transparent" /> <Setter Property="BorderBrush" Value="Transparent" />
<Setter Property="MinHeight" Value="26" /> <Setter Property="MinHeight" Value="16" />
<Setter Property="MaxHeight" Value="26" /> <Setter Property="MaxHeight" Value="16" />
<Setter Property="Height" Value="26" /> <Setter Property="Height" Value="16" />
<Setter Property="Minimum" Value="0" /> <Setter Property="Minimum" Value="0" />
<Setter Property="IsSnapToTickEnabled" Value="True" /> <Setter Property="IsSnapToTickEnabled" Value="True" />
<Setter Property="SmallChange" Value="0.01" /> <Setter Property="SmallChange" Value="0.01" />
<Setter Property="LargeChange" Value="0.01" /> <Setter Property="LargeChange" Value="0.01" />
<Setter Property="Focusable" Value="False" />
<Setter Property="TickFrequency" Value="0.01" /> <Setter Property="TickFrequency" Value="0.01" />
<Setter Property="AutoToolTipPlacement" Value="None" /> <Setter Property="AutoToolTipPlacement" Value="None" />
<Setter Property="IsMoveToPointEnabled" Value="True" /> <Setter Property="IsMoveToPointEnabled" Value="True" />

View File

@@ -25,10 +25,10 @@
<Grid x:Name="coverArtPersenter" ClipToBounds="True" Background="{StaticResource MainWindowBackground}"> <Grid x:Name="coverArtPersenter" ClipToBounds="True" Background="{StaticResource MainWindowBackground}">
<Grid.Style> <Grid.Style>
<Style TargetType="Grid"> <Style TargetType="Grid">
<Setter Property="Visibility" Value="Visible" />
<Style.Triggers>
<DataTrigger Binding="{Binding HasVideo, ElementName=viewerPanel}" Value="True">
<Setter Property="Visibility" Value="Collapsed" /> <Setter Property="Visibility" Value="Collapsed" />
<Style.Triggers>
<DataTrigger Binding="{Binding HasVideo, ElementName=viewerPanel}" Value="False">
<Setter Property="Visibility" Value="Visible" />
</DataTrigger> </DataTrigger>
</Style.Triggers> </Style.Triggers>
</Style> </Style>
@@ -145,7 +145,8 @@
<Button x:Name="buttonMute" DockPanel.Dock="Right"> <Button x:Name="buttonMute" DockPanel.Dock="Right">
<Button.Style> <Button.Style>
<Style TargetType="Button" BasedOn="{StaticResource ControlButtonStyle}"> <Style TargetType="Button" BasedOn="{StaticResource ControlButtonStyle}">
<Setter Property="Content" Value="{Binding ElementName=mediaElement, Path=Volume, Converter={StaticResource VolumeToIconConverter}}" /> <Setter Property="Content"
Value="{Binding ElementName=mediaElement, Path=Volume, Converter={StaticResource VolumeToIconConverter}}" />
<Style.Triggers> <Style.Triggers>
<DataTrigger Binding="{Binding IsMuted, ElementName=viewerPanel}" <DataTrigger Binding="{Binding IsMuted, ElementName=viewerPanel}"
Value="True"> Value="True">
@@ -155,15 +156,57 @@
</Style> </Style>
</Button.Style> </Button.Style>
</Button> </Button>
<Button Width="Auto" Style="{StaticResource ControlButtonStyle}" DockPanel.Dock="Right"> <Button x:Name="buttonTime" Width="37" Style="{StaticResource ControlButtonStyle}" DockPanel.Dock="Right" Tag="Time">
<TextBlock DockPanel.Dock="Right" VerticalAlignment="Center" FontSize="11" FontFamily="{Binding ElementName=viewerPanel, Path=FontFamily}" <TextBlock VerticalAlignment="Center" FontSize="11"
Foreground="{DynamicResource CaptionButtonIconForeground}" FontFamily="{Binding ElementName=viewerPanel, Path=FontFamily}"
Text="{Binding ElementName=mediaElement, Path=Time, Converter={StaticResource TimeSpanToShortStringConverter}}" /> Foreground="{DynamicResource CaptionButtonIconForeground}">
<TextBlock.Style>
<Style TargetType="TextBlock">
<Style.Triggers>
<DataTrigger Binding="{Binding ElementName=buttonTime, Path=Tag}" Value="Time">
<Setter Property="Text"
Value="{Binding ElementName=mediaElement, Path=Time, Converter={StaticResource TimeSpanToShortStringConverter}}" />
</DataTrigger>
<DataTrigger Binding="{Binding ElementName=buttonTime, Path=Tag}" Value="Length">
<Setter Property="Text"
Value="{Binding ElementName=mediaElement, Path=Length, Converter={StaticResource TimeSpanToShortStringConverter}}" />
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
</Button> </Button>
<Slider x:Name="sliderProgress" Style="{StaticResource PositionSliderStyle}" <Slider x:Name="sliderProgress" Style="{StaticResource PositionSliderStyle}"
SmallChange="0.00001" LargeChange="0.01" Maximum="1" SmallChange="0.00001" LargeChange="0.01" Maximum="1"
Value="{Binding Position, ElementName=mediaElement}" /> Value="{Binding Position, ElementName=mediaElement}" />
</DockPanel> </DockPanel>
</Grid> </Grid>
<!--<Grid Height="32" Width="100" HorizontalAlignment="Right" VerticalAlignment="Bottom"
Background="{DynamicResource CaptionBackground}" Margin="0,0,0,32">
<Grid.Style>
<Style TargetType="Grid">
<Setter Property="Opacity" Value="0" />
<Style.Triggers>
<DataTrigger Binding="{Binding ElementName=buttonMute, Path=IsMouseOver}" Value="True">
<DataTrigger.EnterActions>
<BeginStoryboard>
<Storyboard TargetProperty="Opacity">
<DoubleAnimation To="1" Duration="0:0:0.1" />
</Storyboard>
</BeginStoryboard>
</DataTrigger.EnterActions>
<DataTrigger.ExitActions>
<BeginStoryboard>
<Storyboard TargetProperty="Opacity">
<DoubleAnimation To="0" Duration="0:0:0.1" />
</Storyboard>
</BeginStoryboard>
</DataTrigger.ExitActions>
</DataTrigger>
</Style.Triggers>
</Style>
</Grid.Style>
<Slider Style="{StaticResource CustomSliderStyle}" Width="100" Maximum="100" Value="{Binding ElementName=mediaElement, Path=Volume}" />
</Grid>-->
</Grid> </Grid>
</UserControl> </UserControl>

View File

@@ -64,11 +64,7 @@ namespace QuickLook.Plugin.VideoViewer
_context = context; _context = context;
buttonPlayPause.Click += TogglePlayPause; buttonPlayPause.Click += TogglePlayPause;
//buttonMute.MouseLeftButtonUp += (sender, e) => buttonTime.Click += (sender, e) => buttonTime.Tag = (string) buttonTime.Tag == "Time" ? "Length" : "Time";
//{
// mediaElement.IsMuted = false;
// buttonMute.Visibility = Visibility.Collapsed;
//};
buttonMute.Click += (sender, e) => IsMuted = !IsMuted; buttonMute.Click += (sender, e) => IsMuted = !IsMuted;
sliderProgress.PreviewMouseDown += (sender, e) => sliderProgress.PreviewMouseDown += (sender, e) =>

View File

@@ -26,7 +26,7 @@ namespace QuickLook.Controls.GlassLayer
{ {
public object Convert(object value, Type targetType, object parameter, CultureInfo culture) public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{ {
var glass = (GlassLayer) value; var glass = value as GlassLayer;
if (glass?.BlurredElement == null) if (glass?.BlurredElement == null)
return null; return null;

View File

@@ -1,7 +1,6 @@
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:system="clr-namespace:System;assembly=mscorlib" xmlns:system="clr-namespace:System;assembly=mscorlib">
xmlns:fa="http://schemas.fontawesome.io/icons/">
<system:Double x:Key="MainWindowShadowBlurRadius">6</system:Double> <system:Double x:Key="MainWindowShadowBlurRadius">6</system:Double>
<Thickness x:Key="MainWindowShadowPaddingThinkness">6</Thickness> <Thickness x:Key="MainWindowShadowPaddingThinkness">6</Thickness>
<system:Double x:Key="MainWindowCaptionHeight">32</system:Double> <system:Double x:Key="MainWindowCaptionHeight">32</system:Double>