From 81de1979bcca1cb5c8926d3c39d39aab1c1ad8a6 Mon Sep 17 00:00:00 2001 From: "1029920178@qq.com" <1029910278@qq.com> Date: Wed, 11 Dec 2024 15:21:14 +0800 Subject: [PATCH 01/10] feat: provide log scale in image viewer --- .../Views/ImageViewerView.axaml.cs | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/VirtualStreetSnap/Views/ImageViewerView.axaml.cs b/src/VirtualStreetSnap/Views/ImageViewerView.axaml.cs index 33eec8c..e91bd35 100644 --- a/src/VirtualStreetSnap/Views/ImageViewerView.axaml.cs +++ b/src/VirtualStreetSnap/Views/ImageViewerView.axaml.cs @@ -12,11 +12,12 @@ namespace VirtualStreetSnap.Views; public partial class ImageViewerView : UserControl { - private double _currentScale = 1.0; + private const double LogBase = 1.05; private const double InfoDisplayScaleThreshold = 1.2; - private const double ScaleStep = 0.1; private const double MinScale = 0.5; private const double MaxScale = 10.0; + private double _currentScale = 1.0; + private Point _lastMovePoint; private Point _lastPanPoint; private bool _isPanning; @@ -44,10 +45,11 @@ private void ImageViewbox_PointerWheelChanged(object? sender, PointerWheelEventA if (sender is not Viewbox) return; if (IsPickingColor) return; - _currentScale = e.Delta.Y > 0 - ? Math.Min(_currentScale + ScaleStep, MaxScale) - : Math.Max(_currentScale - ScaleStep, MinScale); - ImageInfoPanel.Opacity = _currentScale > InfoDisplayScaleThreshold? 0 : 1; + var delta = e.Delta.Y > 0 ? 1 : -1; + _currentScale *= Math.Pow(LogBase, delta); + _currentScale = Math.Clamp(_currentScale, MinScale, MaxScale); + + ImageInfoPanel.Opacity = _currentScale > InfoDisplayScaleThreshold ? 0 : 1; _scaleTransform.ScaleX = _currentScale; _scaleTransform.ScaleY = _currentScale; e.Handled = true; From 32fdd219822029ce2ff1964b4758f669ab715ddd Mon Sep 17 00:00:00 2001 From: "1029920178@qq.com" <1029910278@qq.com> Date: Wed, 11 Dec 2024 15:21:44 +0800 Subject: [PATCH 02/10] feat: confirm dialog is now CenterOwner --- src/VirtualStreetSnap/Views/ConfirmDialog.axaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/VirtualStreetSnap/Views/ConfirmDialog.axaml b/src/VirtualStreetSnap/Views/ConfirmDialog.axaml index e26ed1d..aa59966 100644 --- a/src/VirtualStreetSnap/Views/ConfirmDialog.axaml +++ b/src/VirtualStreetSnap/Views/ConfirmDialog.axaml @@ -11,7 +11,7 @@ Height="{Binding Height}" ExtendClientAreaToDecorationsHint="True" ExtendClientAreaTitleBarHeightHint="0" - WindowStartupLocation="CenterScreen"> + WindowStartupLocation="CenterOwner"> From 9dd45276771632cfce41ebc2d2180ca866f8b3c8 Mon Sep 17 00:00:00 2001 From: "1029920178@qq.com" <1029910278@qq.com> Date: Wed, 11 Dec 2024 15:32:49 +0800 Subject: [PATCH 03/10] bump to 0.1.5.3 --- src/VirtualStreetSnap/VirtualStreetSnap.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/VirtualStreetSnap/VirtualStreetSnap.csproj b/src/VirtualStreetSnap/VirtualStreetSnap.csproj index 5f3549d..c01e7d3 100644 --- a/src/VirtualStreetSnap/VirtualStreetSnap.csproj +++ b/src/VirtualStreetSnap/VirtualStreetSnap.csproj @@ -15,7 +15,7 @@ true app.manifest true - 0.1.5.2 + 0.1.5.3 Atticus A simple screen shot tool design for VirtualStreetSnap From 581f2ff5ca1692dbec54cd76d426c0645df3da5e Mon Sep 17 00:00:00 2001 From: "1029920178@qq.com" <1029910278@qq.com> Date: Wed, 11 Dec 2024 20:35:32 +0800 Subject: [PATCH 04/10] feat: image viewer add zoom animation --- .../Views/ImageViewerView.axaml.cs | 46 +++++++++++++++---- 1 file changed, 38 insertions(+), 8 deletions(-) diff --git a/src/VirtualStreetSnap/Views/ImageViewerView.axaml.cs b/src/VirtualStreetSnap/Views/ImageViewerView.axaml.cs index e91bd35..754027e 100644 --- a/src/VirtualStreetSnap/Views/ImageViewerView.axaml.cs +++ b/src/VirtualStreetSnap/Views/ImageViewerView.axaml.cs @@ -1,4 +1,5 @@ using System; +using System.Threading.Tasks; using Avalonia; using Avalonia.Controls; using Avalonia.Input; @@ -11,18 +12,29 @@ namespace VirtualStreetSnap.Views; public partial class ImageViewerView : UserControl -{ - private const double LogBase = 1.05; +{ + // zoom + private const double ZoomScaleLogMap = 1.05; private const double InfoDisplayScaleThreshold = 1.2; private const double MinScale = 0.5; private const double MaxScale = 10.0; private double _currentScale = 1.0; - + // zoom animation + private double _zoomVelocity; + private bool _isZooming; + private const double ZoomAnimSpeed = 1.5; + private const double ZoomAnimStopVelocity = 0.05; + private const double ZoomAnimSpeedDecay = 0.8; + private const int ZoomUpdateInterval = 8; //ms + + // pan private Point _lastMovePoint; private Point _lastPanPoint; private bool _isPanning; private readonly ScaleTransform _scaleTransform = new(); private readonly TranslateTransform _translateTransform = new(); + + // color picker private SKBitmap? _pickedColorImage; public ImageViewerView() @@ -46,14 +58,32 @@ private void ImageViewbox_PointerWheelChanged(object? sender, PointerWheelEventA if (IsPickingColor) return; var delta = e.Delta.Y > 0 ? 1 : -1; - _currentScale *= Math.Pow(LogBase, delta); - _currentScale = Math.Clamp(_currentScale, MinScale, MaxScale); + _zoomVelocity = delta * ZoomAnimSpeed; + if (!_isZooming) + { + _isZooming = true; + StartZoomInertia(); + } - ImageInfoPanel.Opacity = _currentScale > InfoDisplayScaleThreshold ? 0 : 1; - _scaleTransform.ScaleX = _currentScale; - _scaleTransform.ScaleY = _currentScale; e.Handled = true; } + private async void StartZoomInertia() + { + while (Math.Abs(_zoomVelocity) > ZoomAnimStopVelocity) + { + _currentScale *= Math.Pow(ZoomScaleLogMap, _zoomVelocity); + _currentScale = Math.Clamp(_currentScale, MinScale, MaxScale); + + ImageInfoPanel.Opacity = _currentScale > InfoDisplayScaleThreshold ? 0 : 1; + _scaleTransform.ScaleX = _currentScale; + _scaleTransform.ScaleY = _currentScale; + + _zoomVelocity *= ZoomAnimSpeedDecay; + await Task.Delay(ZoomUpdateInterval); + } + + _isZooming = false; + } private void ImageViewbox_PointerPressed(object? sender, PointerPressedEventArgs e) { From 8c6cfcefff26d3b5c832b3f7bc37c33ffcaa9256 Mon Sep 17 00:00:00 2001 From: "1029920178@qq.com" <1029910278@qq.com> Date: Wed, 11 Dec 2024 20:49:28 +0800 Subject: [PATCH 05/10] update scale parm --- src/VirtualStreetSnap/Views/ImageViewerView.axaml.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/VirtualStreetSnap/Views/ImageViewerView.axaml.cs b/src/VirtualStreetSnap/Views/ImageViewerView.axaml.cs index 754027e..40a35be 100644 --- a/src/VirtualStreetSnap/Views/ImageViewerView.axaml.cs +++ b/src/VirtualStreetSnap/Views/ImageViewerView.axaml.cs @@ -24,7 +24,7 @@ public partial class ImageViewerView : UserControl private bool _isZooming; private const double ZoomAnimSpeed = 1.5; private const double ZoomAnimStopVelocity = 0.05; - private const double ZoomAnimSpeedDecay = 0.8; + private const double ZoomAnimSpeedDecay = 0.85; private const int ZoomUpdateInterval = 8; //ms // pan From 118f35bd49a04fa1143e3cdcda0874a172818c5d Mon Sep 17 00:00:00 2001 From: "1029920178@qq.com" <1029910278@qq.com> Date: Thu, 12 Dec 2024 03:47:35 +0800 Subject: [PATCH 06/10] fix: image viewer use stack panel instead of viewbox(which allow context menu fill up parent) --- .../ViewModels/ImageViewerViewModel.cs | 2 +- .../Views/ImageViewerView.axaml | 25 +++++---- .../Views/ImageViewerView.axaml.cs | 51 +++++++++---------- 3 files changed, 38 insertions(+), 40 deletions(-) diff --git a/src/VirtualStreetSnap/ViewModels/ImageViewerViewModel.cs b/src/VirtualStreetSnap/ViewModels/ImageViewerViewModel.cs index 961ef83..aff615c 100644 --- a/src/VirtualStreetSnap/ViewModels/ImageViewerViewModel.cs +++ b/src/VirtualStreetSnap/ViewModels/ImageViewerViewModel.cs @@ -16,7 +16,7 @@ public partial class ImageViewerViewModel : ViewModelBase private Bitmap? _image; public ImageViewerViewModel() - { + { ViewImage = new ImageModelBase(); } } \ No newline at end of file diff --git a/src/VirtualStreetSnap/Views/ImageViewerView.axaml b/src/VirtualStreetSnap/Views/ImageViewerView.axaml index d58f82c..1c4962b 100644 --- a/src/VirtualStreetSnap/Views/ImageViewerView.axaml +++ b/src/VirtualStreetSnap/Views/ImageViewerView.axaml @@ -7,11 +7,12 @@ mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450" x:Class="VirtualStreetSnap.Views.ImageViewerView" x:DataType="viewModels:ImageViewerViewModel"> - + + - + - + - - - + + + @@ -68,8 +70,9 @@ - - + + + diff --git a/src/VirtualStreetSnap/Views/ImageViewerView.axaml.cs b/src/VirtualStreetSnap/Views/ImageViewerView.axaml.cs index 40a35be..c5124a2 100644 --- a/src/VirtualStreetSnap/Views/ImageViewerView.axaml.cs +++ b/src/VirtualStreetSnap/Views/ImageViewerView.axaml.cs @@ -12,13 +12,15 @@ namespace VirtualStreetSnap.Views; public partial class ImageViewerView : UserControl -{ +{ // zoom - private const double ZoomScaleLogMap = 1.05; + private const double ZoomScaleLogMap = 1.05; private const double InfoDisplayScaleThreshold = 1.2; private const double MinScale = 0.5; private const double MaxScale = 10.0; + private double _currentScale = 1.0; + // zoom animation private double _zoomVelocity; private bool _isZooming; @@ -26,35 +28,32 @@ public partial class ImageViewerView : UserControl private const double ZoomAnimStopVelocity = 0.05; private const double ZoomAnimSpeedDecay = 0.85; private const int ZoomUpdateInterval = 8; //ms - + // pan private Point _lastMovePoint; private Point _lastPanPoint; private bool _isPanning; private readonly ScaleTransform _scaleTransform = new(); private readonly TranslateTransform _translateTransform = new(); - + // color picker private SKBitmap? _pickedColorImage; public ImageViewerView() { InitializeComponent(); - - var imageViewbox = ImageViewbox; - imageViewbox.PointerWheelChanged += ImageViewbox_PointerWheelChanged; - + var transformGroup = new TransformGroup(); transformGroup.Children.Add(_scaleTransform); transformGroup.Children.Add(_translateTransform); - imageViewbox.RenderTransform = transformGroup; + ViewBoxImage.RenderTransform = transformGroup; } private bool IsPickingColor => DataContext is ImageViewerViewModel { ShowColorPicker: true }; - private void ImageViewbox_PointerWheelChanged(object? sender, PointerWheelEventArgs e) + private void Viewer_PointerWheelChanged(object? sender, PointerWheelEventArgs e) { - if (sender is not Viewbox) return; + if (sender is not Control) return; if (IsPickingColor) return; var delta = e.Delta.Y > 0 ? 1 : -1; @@ -67,6 +66,7 @@ private void ImageViewbox_PointerWheelChanged(object? sender, PointerWheelEventA e.Handled = true; } + private async void StartZoomInertia() { while (Math.Abs(_zoomVelocity) > ZoomAnimStopVelocity) @@ -79,15 +79,14 @@ private async void StartZoomInertia() _scaleTransform.ScaleY = _currentScale; _zoomVelocity *= ZoomAnimSpeedDecay; - await Task.Delay(ZoomUpdateInterval); + await Task.Delay(ZoomUpdateInterval); } _isZooming = false; } - private void ImageViewbox_PointerPressed(object? sender, PointerPressedEventArgs e) + private void Viewer_PointerPressed(object? sender, PointerPressedEventArgs e) { - if (sender is not Viewbox) return; _lastMovePoint = e.GetPosition(this); if (!e.GetCurrentPoint(this).Properties.IsMiddleButtonPressed && @@ -106,21 +105,20 @@ private void ImageViewbox_PointerPressed(object? sender, PointerPressedEventArgs e.Pointer.Capture((IInputElement)sender!); } - private void ImageViewbox_PointerReleased(object? sender, PointerReleasedEventArgs e) + private void Viewer_PointerReleased(object? sender, PointerReleasedEventArgs e) { - if (sender is not Viewbox) return; if (!_isPanning || (e.InitialPressMouseButton != MouseButton.Middle && e.InitialPressMouseButton != MouseButton.Left)) return; _isPanning = false; e.Pointer.Capture(null); } - private void ImageViewbox_PointerMoved(object? sender, PointerEventArgs e) + private void Viewer_PointerMoved(object? sender, PointerEventArgs e) { - if (sender is not Viewbox viewbox) return; + if (sender is not Control viewbox) return; var currentPoint = e.GetPosition(viewbox); - GetColorAndSetText(e, viewbox, currentPoint); + GetColorAndSetText(e, currentPoint); if (!_isPanning) return; var delta = e.GetPosition(this) - _lastPanPoint; @@ -130,19 +128,16 @@ private void ImageViewbox_PointerMoved(object? sender, PointerEventArgs e) _translateTransform.Y += delta.Y; } - private void GetColorAndSetText(PointerEventArgs e, Viewbox viewbox, Point currentPoint) + private void GetColorAndSetText(PointerEventArgs e, Point currentPoint) { - if (!IsPickingColor || viewbox.Child is not Image image) return; - + if (!IsPickingColor || ViewBoxImage is not Image image) return; + var imageBounds = image.Bounds; - var viewboxBounds = viewbox.Bounds; - var scaleX = imageBounds.Width / viewboxBounds.Width; - var scaleY = imageBounds.Height / viewboxBounds.Height; - var imagePoint = new Point(currentPoint.X * scaleX, currentPoint.Y * scaleY); + var imagePoint = new Point(currentPoint.X, currentPoint.Y); if (imagePoint is not { X: >= 0, Y: >= 0 }) return; if (!(imagePoint.X < imageBounds.Width) || !(imagePoint.Y < imageBounds.Height)) return; - + var color = ScreenshotHelper.GetColorFromSKBitmap(_pickedColorImage, imagePoint); var colorHex = color.ToString().Substring(3); color.ToHsv(out var h, out var s, out var v); @@ -179,7 +174,7 @@ private void OnShowColorPicker_Click(object? sender, RoutedEventArgs e) { if (DataContext is not ImageViewerViewModel viewModel) return; viewModel.ShowColorPicker = true; - if (ImageViewbox.Child is not Image image) return; + if (ViewBoxImage is not Image image) return; _pickedColorImage = ScreenshotHelper.CaptureControlSKBitmap(image); Canvas.SetLeft(ColoPickerPanel, _lastPanPoint.X); Canvas.SetTop(ColoPickerPanel, _lastPanPoint.Y); From 4dc1d89257d642abfecae62cc9bec7e6e3347174 Mon Sep 17 00:00:00 2001 From: "1029920178@qq.com" <1029910278@qq.com> Date: Thu, 12 Dec 2024 23:49:48 +0800 Subject: [PATCH 07/10] fix: image info not update --- .../Models/ImageModelBase.cs | 55 ++++++++----------- 1 file changed, 23 insertions(+), 32 deletions(-) diff --git a/src/VirtualStreetSnap/Models/ImageModelBase.cs b/src/VirtualStreetSnap/Models/ImageModelBase.cs index 7bdef38..1f0acb2 100644 --- a/src/VirtualStreetSnap/Models/ImageModelBase.cs +++ b/src/VirtualStreetSnap/Models/ImageModelBase.cs @@ -4,19 +4,35 @@ using System.Threading.Tasks; using Avalonia.Media.Imaging; using Avalonia.Platform; +using CommunityToolkit.Mvvm.ComponentModel; using VirtualStreetSnap.Services; +using VirtualStreetSnap.ViewModels; namespace VirtualStreetSnap.Models; -public class ImageModelBase : INotifyPropertyChanged +public partial class ImageModelBase : ViewModelBase { private const string DefaultImagePath = "avares://VirtualStreetSnap/Assets/avalonia-logo.ico"; private const string LoadingImagePath = "avares://VirtualStreetSnap/Assets/Images/LoadingImage.png"; - public string ImgPath { get; set; } = ""; - public string ImgDir { get; set; } = ""; - public string ImgName { get; set; } - public string ImgSize { get; set; } = "0 x 0"; + [ObservableProperty] + private string _imgPath = ""; + + [ObservableProperty] + private string _imgDir = ""; + + [ObservableProperty] + private string _imgName; + + [ObservableProperty] + private string _imgSize = "0 x 0"; + + [ObservableProperty] + private Bitmap? _imageThumb; + + [ObservableProperty] + private Bitmap? _image; + public int ImgThumbSize { get; set; } = 100; public ImageModelBase(string imgPath = "") @@ -28,35 +44,10 @@ public ImageModelBase(string imgPath = "") LoadThumbAsync(); } - private Bitmap? _image; - private Bitmap? _imageThumb; - - public Bitmap Image - { - get => _image; - set - { - _image = value; - ImgSize = $"{value.Size.Width} x {value.Size.Height}"; - OnPropertyChanged(nameof(Image)); - } - } - - public Bitmap? ImageThumb - { - get => _imageThumb; - private set - { - _imageThumb = value; - OnPropertyChanged(nameof(ImageThumb)); - } - } - - public event PropertyChangedEventHandler? PropertyChanged; - protected virtual void OnPropertyChanged(string propertyName) + partial void OnImageChanged(Bitmap value) { - PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); + ImgSize = $"{value.Size.Width} x {value.Size.Height}"; } From 0b907f0b67ff6829311a217f28e7d7833f3fc944 Mon Sep 17 00:00:00 2001 From: "1029920178@qq.com" <1029910278@qq.com> Date: Thu, 12 Dec 2024 23:51:22 +0800 Subject: [PATCH 08/10] cleanup --- src/VirtualStreetSnap/{Models => ViewModels}/ImageModelBase.cs | 3 +-- src/VirtualStreetSnap/Views/ImageGalleryView.axaml | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) rename src/VirtualStreetSnap/{Models => ViewModels}/ImageModelBase.cs (96%) diff --git a/src/VirtualStreetSnap/Models/ImageModelBase.cs b/src/VirtualStreetSnap/ViewModels/ImageModelBase.cs similarity index 96% rename from src/VirtualStreetSnap/Models/ImageModelBase.cs rename to src/VirtualStreetSnap/ViewModels/ImageModelBase.cs index 1f0acb2..7bfe89a 100644 --- a/src/VirtualStreetSnap/Models/ImageModelBase.cs +++ b/src/VirtualStreetSnap/ViewModels/ImageModelBase.cs @@ -6,9 +6,8 @@ using Avalonia.Platform; using CommunityToolkit.Mvvm.ComponentModel; using VirtualStreetSnap.Services; -using VirtualStreetSnap.ViewModels; -namespace VirtualStreetSnap.Models; +namespace VirtualStreetSnap.ViewModels; public partial class ImageModelBase : ViewModelBase { diff --git a/src/VirtualStreetSnap/Views/ImageGalleryView.axaml b/src/VirtualStreetSnap/Views/ImageGalleryView.axaml index 91c40f6..db21009 100644 --- a/src/VirtualStreetSnap/Views/ImageGalleryView.axaml +++ b/src/VirtualStreetSnap/Views/ImageGalleryView.axaml @@ -4,7 +4,6 @@ xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:viewModels="clr-namespace:VirtualStreetSnap.ViewModels" xmlns:i18n="clr-namespace:VirtualStreetSnap.Localizer" - xmlns:models="clr-namespace:VirtualStreetSnap.Models" mc:Ignorable="d" d:DesignWidth="1280" d:DesignHeight="720" x:Class="VirtualStreetSnap.Views.ImageGalleryView" x:DataType="viewModels:ImageGalleryViewModel"> @@ -76,7 +75,7 @@ - + Date: Fri, 13 Dec 2024 00:27:21 +0800 Subject: [PATCH 09/10] update color experience --- src/VirtualStreetSnap/Assets/i18n/en-US.json | 4 +- src/VirtualStreetSnap/Assets/i18n/zh-CN.json | 3 +- .../Views/ImageViewerView.axaml | 94 ++++++++++--------- .../Views/ImageViewerView.axaml.cs | 3 +- 4 files changed, 59 insertions(+), 45 deletions(-) diff --git a/src/VirtualStreetSnap/Assets/i18n/en-US.json b/src/VirtualStreetSnap/Assets/i18n/en-US.json index 7af6207..77cbd59 100644 --- a/src/VirtualStreetSnap/Assets/i18n/en-US.json +++ b/src/VirtualStreetSnap/Assets/i18n/en-US.json @@ -76,5 +76,7 @@ "BorderColor": "Border Color", "CommonSettings": "Common Settings", "BorderThickness": "Border Thickness", - "BorderSettings": "Border Settings" + "BorderSettings": "Border Settings", + "Copied": "Copied", + } \ No newline at end of file diff --git a/src/VirtualStreetSnap/Assets/i18n/zh-CN.json b/src/VirtualStreetSnap/Assets/i18n/zh-CN.json index 802252c..40efc48 100644 --- a/src/VirtualStreetSnap/Assets/i18n/zh-CN.json +++ b/src/VirtualStreetSnap/Assets/i18n/zh-CN.json @@ -76,5 +76,6 @@ "BorderColor": "边框颜色", "CommonSettings": "常规设置", "BorderThickness": "边框厚度", - "BorderSettings": "边框设置" + "BorderSettings": "边框设置", + "Copied": "已复制", } \ No newline at end of file diff --git a/src/VirtualStreetSnap/Views/ImageViewerView.axaml b/src/VirtualStreetSnap/Views/ImageViewerView.axaml index 1c4962b..176af84 100644 --- a/src/VirtualStreetSnap/Views/ImageViewerView.axaml +++ b/src/VirtualStreetSnap/Views/ImageViewerView.axaml @@ -4,7 +4,9 @@ xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:viewModels="clr-namespace:VirtualStreetSnap.ViewModels" xmlns:i18n="clr-namespace:VirtualStreetSnap.Localizer" + xmlns:services="clr-namespace:VirtualStreetSnap.Services" mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450" + services:ToplevelService.Register="{Binding}" x:Class="VirtualStreetSnap.Views.ImageViewerView" x:DataType="viewModels:ImageViewerViewModel"> @@ -21,56 +23,64 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + @@ -83,7 +93,7 @@ - + diff --git a/src/VirtualStreetSnap/Views/ImageViewerView.axaml.cs b/src/VirtualStreetSnap/Views/ImageViewerView.axaml.cs index c5124a2..6c63b39 100644 --- a/src/VirtualStreetSnap/Views/ImageViewerView.axaml.cs +++ b/src/VirtualStreetSnap/Views/ImageViewerView.axaml.cs @@ -42,7 +42,7 @@ public partial class ImageViewerView : UserControl public ImageViewerView() { InitializeComponent(); - + var transformGroup = new TransformGroup(); transformGroup.Children.Add(_scaleTransform); transformGroup.Children.Add(_translateTransform); @@ -97,6 +97,7 @@ private void Viewer_PointerPressed(object? sender, PointerPressedEventArgs e) var viewModel = (ImageViewerViewModel)DataContext!; viewModel.ShowColorPicker = false; _ = PowerShellClipBoard.SetText(ColorPickerTextHex.Text!); + NotifyHelper.Notify(viewModel, Localizer.Localizer.Instance["Copied"], ColorPickerTextHex.Text); return; } From ffcc0b99f3e1299fa6a480be887760c5e63a0c8a Mon Sep 17 00:00:00 2001 From: "1029920178@qq.com" <1029910278@qq.com> Date: Fri, 13 Dec 2024 03:18:08 +0800 Subject: [PATCH 10/10] bump to 0.1.5.4 --- src/VirtualStreetSnap/VirtualStreetSnap.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/VirtualStreetSnap/VirtualStreetSnap.csproj b/src/VirtualStreetSnap/VirtualStreetSnap.csproj index c01e7d3..1cfba42 100644 --- a/src/VirtualStreetSnap/VirtualStreetSnap.csproj +++ b/src/VirtualStreetSnap/VirtualStreetSnap.csproj @@ -15,7 +15,7 @@ true app.manifest true - 0.1.5.3 + 0.1.5.4 Atticus A simple screen shot tool design for VirtualStreetSnap