mirror of
https://github.com/QL-Win/QuickLook.git
synced 2025-09-11 17:59:17 +00:00
#116: indicate current zoom level for images
This commit is contained in:
@@ -9,7 +9,7 @@
|
|||||||
x:Name="imagePanel"
|
x:Name="imagePanel"
|
||||||
d:DesignHeight="300" d:DesignWidth="300">
|
d:DesignHeight="300" d:DesignWidth="300">
|
||||||
<Grid>
|
<Grid>
|
||||||
<Rectangle Visibility="{Binding BackgroundVisibility, ElementName=imagePanel}">
|
<Rectangle Visibility="{Binding BackgroundVisibility, ElementName=imagePanel}" RenderOptions.BitmapScalingMode="NearestNeighbor">
|
||||||
<Rectangle.Fill>
|
<Rectangle.Fill>
|
||||||
<ImageBrush x:Name="backgroundBrush" ImageSource="Resources/background-b.png" AlignmentY="Top"
|
<ImageBrush x:Name="backgroundBrush" ImageSource="Resources/background-b.png" AlignmentY="Top"
|
||||||
Viewport="0,0,32,32"
|
Viewport="0,0,32,32"
|
||||||
@@ -22,5 +22,19 @@
|
|||||||
RenderOptions.BitmapScalingMode="{Binding RenderMode, ElementName=imagePanel}"
|
RenderOptions.BitmapScalingMode="{Binding RenderMode, ElementName=imagePanel}"
|
||||||
AnimationUri="{Binding ImageUriSource, ElementName=imagePanel}" />
|
AnimationUri="{Binding ImageUriSource, ElementName=imagePanel}" />
|
||||||
</ScrollViewer>
|
</ScrollViewer>
|
||||||
|
<Border x:Name="zoomLevelInfo" CornerRadius="5" IsHitTestVisible="False" Opacity="0" Background="Gray" Padding="15,4,15,4" HorizontalAlignment="Center" VerticalAlignment="Center">
|
||||||
|
<TextBlock Foreground="White" FontSize="18" Text="{Binding ElementName=imagePanel, Path=ZoomFactor, StringFormat={}{0:P0}}" />
|
||||||
|
<Border.Resources>
|
||||||
|
<Storyboard x:Key="StoryboardShowZoomLevelInfo">
|
||||||
|
<DoubleAnimationUsingKeyFrames Storyboard.Target="{Binding Source={x:Reference zoomLevelInfo}}" Storyboard.TargetProperty="Opacity">
|
||||||
|
<DoubleAnimationUsingKeyFrames.KeyFrames>
|
||||||
|
<LinearDoubleKeyFrame Value="0.9" KeyTime="0:0:0.1" />
|
||||||
|
<LinearDoubleKeyFrame Value="0.9" KeyTime="0:0:0.6" />
|
||||||
|
<LinearDoubleKeyFrame Value="0" KeyTime="0:0:0.8" />
|
||||||
|
</DoubleAnimationUsingKeyFrames.KeyFrames>
|
||||||
|
</DoubleAnimationUsingKeyFrames>
|
||||||
|
</Storyboard>
|
||||||
|
</Border.Resources>
|
||||||
|
</Border>
|
||||||
</Grid>
|
</Grid>
|
||||||
</UserControl>
|
</UserControl>
|
@@ -25,6 +25,7 @@ using System.Windows;
|
|||||||
using System.Windows.Controls;
|
using System.Windows.Controls;
|
||||||
using System.Windows.Input;
|
using System.Windows.Input;
|
||||||
using System.Windows.Media;
|
using System.Windows.Media;
|
||||||
|
using System.Windows.Media.Animation;
|
||||||
using System.Windows.Media.Imaging;
|
using System.Windows.Media.Imaging;
|
||||||
using System.Windows.Threading;
|
using System.Windows.Threading;
|
||||||
using QuickLook.Annotations;
|
using QuickLook.Annotations;
|
||||||
@@ -41,11 +42,13 @@ namespace QuickLook.Plugin.ImageViewer
|
|||||||
private Visibility _backgroundVisibility = Visibility.Visible;
|
private Visibility _backgroundVisibility = Visibility.Visible;
|
||||||
private Point? _dragInitPos;
|
private Point? _dragInitPos;
|
||||||
private Uri _imageSource;
|
private Uri _imageSource;
|
||||||
|
private bool _isZoomFactorFirstSet = true;
|
||||||
private DateTime _lastZoomTime = DateTime.MinValue;
|
private DateTime _lastZoomTime = DateTime.MinValue;
|
||||||
private double _maxZoomFactor = 3d;
|
private double _maxZoomFactor = 3d;
|
||||||
private Meta _meta;
|
private Meta _meta;
|
||||||
private double _minZoomFactor = 0.1d;
|
private double _minZoomFactor = 0.1d;
|
||||||
private BitmapScalingMode _renderMode = BitmapScalingMode.HighQuality;
|
private BitmapScalingMode _renderMode = BitmapScalingMode.HighQuality;
|
||||||
|
private bool _showZoomLevelInfo = true;
|
||||||
private BitmapSource _source;
|
private BitmapSource _source;
|
||||||
private double _zoomFactor = 1d;
|
private double _zoomFactor = 1d;
|
||||||
|
|
||||||
@@ -77,6 +80,17 @@ namespace QuickLook.Plugin.ImageViewer
|
|||||||
Meta = meta;
|
Meta = meta;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public bool ShowZoomLevelInfo
|
||||||
|
{
|
||||||
|
get => _showZoomLevelInfo;
|
||||||
|
set
|
||||||
|
{
|
||||||
|
if (value == _showZoomLevelInfo) return;
|
||||||
|
_showZoomLevelInfo = value;
|
||||||
|
OnPropertyChanged();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public BitmapScalingMode RenderMode
|
public BitmapScalingMode RenderMode
|
||||||
{
|
{
|
||||||
get => _renderMode;
|
get => _renderMode;
|
||||||
@@ -144,6 +158,14 @@ namespace QuickLook.Plugin.ImageViewer
|
|||||||
{
|
{
|
||||||
_zoomFactor = value;
|
_zoomFactor = value;
|
||||||
OnPropertyChanged();
|
OnPropertyChanged();
|
||||||
|
|
||||||
|
if (_isZoomFactorFirstSet)
|
||||||
|
{
|
||||||
|
_isZoomFactorFirstSet = false;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (ShowZoomLevelInfo)
|
||||||
|
((Storyboard) zoomLevelInfo.FindResource("StoryboardShowZoomLevelInfo")).Begin();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -194,6 +216,8 @@ namespace QuickLook.Plugin.ImageViewer
|
|||||||
|
|
||||||
private void ImagePanel_SizeChanged(object sender, SizeChangedEventArgs e)
|
private void ImagePanel_SizeChanged(object sender, SizeChangedEventArgs e)
|
||||||
{
|
{
|
||||||
|
UpdateZoomToFitFactor();
|
||||||
|
|
||||||
if (ZoomToFit)
|
if (ZoomToFit)
|
||||||
DoZoomToFit();
|
DoZoomToFit();
|
||||||
}
|
}
|
||||||
@@ -295,20 +319,29 @@ namespace QuickLook.Plugin.ImageViewer
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void DoZoomToFit()
|
public void DoZoomToFit()
|
||||||
|
{
|
||||||
|
UpdateZoomToFitFactor();
|
||||||
|
|
||||||
|
Zoom(ZoomToFitFactor, false, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void UpdateZoomToFitFactor()
|
||||||
{
|
{
|
||||||
if (viewPanelImage.Source == null)
|
if (viewPanelImage.Source == null)
|
||||||
|
{
|
||||||
|
ZoomToFitFactor = 1d;
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
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);
|
||||||
|
|
||||||
ZoomToFitFactor = factor;
|
ZoomToFitFactor = factor;
|
||||||
|
|
||||||
Zoom(factor, false, true);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ResetZoom()
|
public void ResetZoom()
|
||||||
{
|
{
|
||||||
|
ZoomToFitFactor = 1;
|
||||||
Zoom(1d, true);
|
Zoom(1d, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -317,12 +350,19 @@ namespace QuickLook.Plugin.ImageViewer
|
|||||||
if (viewPanelImage.Source == null)
|
if (viewPanelImage.Source == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
// pause when fit width
|
||||||
if (ZoomFactor < ZoomToFitFactor && factor > ZoomToFitFactor
|
if (ZoomFactor < ZoomToFitFactor && factor > ZoomToFitFactor
|
||||||
|| ZoomFactor > ZoomToFitFactor && factor < ZoomToFitFactor)
|
|| ZoomFactor > ZoomToFitFactor && factor < ZoomToFitFactor)
|
||||||
{
|
{
|
||||||
factor = ZoomToFitFactor;
|
factor = ZoomToFitFactor;
|
||||||
ZoomToFit = true;
|
ZoomToFit = true;
|
||||||
}
|
}
|
||||||
|
// pause when 100%
|
||||||
|
else if (ZoomFactor < 1 && factor > 1 || ZoomFactor > 1 && factor < 1)
|
||||||
|
{
|
||||||
|
factor = 1;
|
||||||
|
ZoomToFit = false;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (!isToFit)
|
if (!isToFit)
|
||||||
|
@@ -70,7 +70,7 @@
|
|||||||
</ListBox.ItemTemplate>
|
</ListBox.ItemTemplate>
|
||||||
</ListBox>
|
</ListBox>
|
||||||
<Grid Grid.Column="1" Background="#00EFEFEF">
|
<Grid Grid.Column="1" Background="#00EFEFEF">
|
||||||
<imageViewer:ImagePanel x:Name="pagePanel" RenderMode="NearestNeighbor" BackgroundVisibility="Collapsed" />
|
<imageViewer:ImagePanel x:Name="pagePanel" RenderMode="NearestNeighbor" ShowZoomLevelInfo="False" BackgroundVisibility="Collapsed" />
|
||||||
</Grid>
|
</Grid>
|
||||||
</Grid>
|
</Grid>
|
||||||
</UserControl>
|
</UserControl>
|
Reference in New Issue
Block a user