Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion src/VirtualStreetSnap/Assets/i18n/en-US.json
Original file line number Diff line number Diff line change
Expand Up @@ -76,5 +76,7 @@
"BorderColor": "Border Color",
"CommonSettings": "Common Settings",
"BorderThickness": "Border Thickness",
"BorderSettings": "Border Settings"
"BorderSettings": "Border Settings",
"Copied": "Copied",

}
3 changes: 2 additions & 1 deletion src/VirtualStreetSnap/Assets/i18n/zh-CN.json
Original file line number Diff line number Diff line change
Expand Up @@ -76,5 +76,6 @@
"BorderColor": "边框颜色",
"CommonSettings": "常规设置",
"BorderThickness": "边框厚度",
"BorderSettings": "边框设置"
"BorderSettings": "边框设置",
"Copied": "已复制",
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,19 +4,34 @@
using System.Threading.Tasks;
using Avalonia.Media.Imaging;
using Avalonia.Platform;
using CommunityToolkit.Mvvm.ComponentModel;
using VirtualStreetSnap.Services;

namespace VirtualStreetSnap.Models;
namespace VirtualStreetSnap.ViewModels;

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 = "")
Expand All @@ -28,35 +43,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}";
}


Expand Down
2 changes: 1 addition & 1 deletion src/VirtualStreetSnap/ViewModels/ImageViewerViewModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ public partial class ImageViewerViewModel : ViewModelBase
private Bitmap? _image;

public ImageViewerViewModel()
{
{
ViewImage = new ImageModelBase();
}
}
2 changes: 1 addition & 1 deletion src/VirtualStreetSnap/Views/ConfirmDialog.axaml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
Height="{Binding Height}"
ExtendClientAreaToDecorationsHint="True"
ExtendClientAreaTitleBarHeightHint="0"
WindowStartupLocation="CenterScreen">
WindowStartupLocation="CenterOwner">

<Design.DataContext>
<viewModels:ConfirmDialogViewModel />
Expand Down
3 changes: 1 addition & 2 deletions src/VirtualStreetSnap/Views/ImageGalleryView.axaml
Original file line number Diff line number Diff line change
Expand Up @@ -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">
Expand Down Expand Up @@ -76,7 +75,7 @@
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
<ListBox.ItemTemplate>
<DataTemplate DataType="{x:Type models:ImageModelBase}">
<DataTemplate DataType="{x:Type viewModels:ImageModelBase}">
<Panel>
<Image Source="{Binding ImageThumb}" Stretch="UniformToFill" ToolTip.ShowDelay="500"
Width="{Binding $parent[UserControl].((viewModels:ImageGalleryViewModel)DataContext).ThumbDisplaySize}"
Expand Down
115 changes: 64 additions & 51 deletions src/VirtualStreetSnap/Views/ImageViewerView.axaml
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,17 @@
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">



<UserControl.DataContext>
<viewModels:ImageViewerViewModel />
</UserControl.DataContext>

<UserControl.Styles>
<Style Selector="StackPanel#ImageInfoPanel">
<Setter Property="Transitions">
Expand All @@ -20,56 +23,66 @@
</Transitions>
</Setter>
</Style>
<Style Selector="Canvas">
<Setter Property="Transitions">
<Transitions>
<DoubleTransition Property="Opacity" Duration="0:0:0.1" />
</Transitions>
</Setter>
</Style>
</UserControl.Styles>

<Panel Background="#111111">
<Viewbox x:Name="ImageViewbox" Stretch="Uniform"
PointerPressed="ImageViewbox_PointerPressed"
PointerReleased="ImageViewbox_PointerReleased"
PointerMoved="ImageViewbox_PointerMoved">
<Image Source="{Binding ViewImage.Image}" />
<Viewbox.ContextMenu>
<ContextMenu>
<MenuItem Click="OnShowColorPicker_Click">
<MenuItem.Header>
<StackPanel Orientation="Horizontal" Spacing="5">
<PathIcon Data="{StaticResource Dropper}"></PathIcon>
<TextBlock VerticalAlignment="Center"
Text="{i18n:Localize PickColor}" />
</StackPanel>
</MenuItem.Header>
</MenuItem>
<Separator></Separator>
<MenuItem Click="OnFlipHorizontally_Click">
<MenuItem.Header>
<StackPanel Orientation="Horizontal" Spacing="5">
<PathIcon Data="{StaticResource FlipHorizontalRegular}" />
<TextBlock VerticalAlignment="Center"
Text="{i18n:Localize FlipHorizontally}" />
</StackPanel>
</MenuItem.Header>
</MenuItem>
<MenuItem Click="OnFlipVertically_Click">
<MenuItem.Header>
<StackPanel Orientation="Horizontal" Spacing="5">
<PathIcon Data="{StaticResource FlipVerticalRegular}" />
<TextBlock VerticalAlignment="Center"
Text="{i18n:Localize FlipVertically}" />
</StackPanel>
</MenuItem.Header>
</MenuItem>
<MenuItem Click="OnResetImageViewBox_Click">
<MenuItem.Header>
<StackPanel Orientation="Horizontal" Spacing="5">
<PathIcon Data="{StaticResource ResetZoom}" />
<TextBlock VerticalAlignment="Center"
Text="{i18n:Localize ResetZoom}" />
</StackPanel>
</MenuItem.Header>
</MenuItem>
</ContextMenu>
</Viewbox.ContextMenu>
</Viewbox>
<Panel.ContextMenu>
<ContextMenu>
<MenuItem Click="OnShowColorPicker_Click">
<MenuItem.Header>
<StackPanel Orientation="Horizontal" Spacing="5">
<PathIcon Data="{StaticResource Dropper}"></PathIcon>
<TextBlock VerticalAlignment="Center"
Text="{i18n:Localize PickColor}" />
</StackPanel>
</MenuItem.Header>
</MenuItem>
<Separator></Separator>
<MenuItem Click="OnFlipHorizontally_Click">
<MenuItem.Header>
<StackPanel Orientation="Horizontal" Spacing="5">
<PathIcon Data="{StaticResource FlipHorizontalRegular}" />
<TextBlock VerticalAlignment="Center"
Text="{i18n:Localize FlipHorizontally}" />
</StackPanel>
</MenuItem.Header>
</MenuItem>
<MenuItem Click="OnFlipVertically_Click">
<MenuItem.Header>
<StackPanel Orientation="Horizontal" Spacing="5">
<PathIcon Data="{StaticResource FlipVerticalRegular}" />
<TextBlock VerticalAlignment="Center"
Text="{i18n:Localize FlipVertically}" />
</StackPanel>
</MenuItem.Header>
</MenuItem>
<MenuItem Click="OnResetImageViewBox_Click">
<MenuItem.Header>
<StackPanel Orientation="Horizontal" Spacing="5">
<PathIcon Data="{StaticResource ResetZoom}" />
<TextBlock VerticalAlignment="Center"
Text="{i18n:Localize ResetZoom}" />
</StackPanel>
</MenuItem.Header>
</MenuItem>
</ContextMenu>
</Panel.ContextMenu>
<StackPanel x:Name="ViewBoxArea" VerticalAlignment="Stretch" HorizontalAlignment="Stretch"
PointerWheelChanged="Viewer_PointerWheelChanged"
PointerPressed="Viewer_PointerPressed"
PointerReleased="Viewer_PointerReleased"
PointerMoved="Viewer_PointerMoved">
<Image Name="ViewBoxImage" Source="{Binding ViewImage.Image}" />

</StackPanel>

<!-- image info -->
<StackPanel Name="ImageInfoPanel" Margin="10" Spacing="2" VerticalAlignment="Bottom" HorizontalAlignment="Left">
<StackPanel.Effect>
Expand All @@ -80,7 +93,7 @@
<TextBlock Text="{Binding ViewImage.ImgSize}" Foreground="Gray" />
</StackPanel>
<!-- color picker -->
<Canvas IsVisible="{Binding ShowColorPicker}">
<Canvas Opacity="{Binding ShowColorPicker}">
<Border Name="ColoPickerPanel" Canvas.Left="300" Canvas.Top="200"
Background="#111111" CornerRadius="4" IsHitTestVisible="False">
<Border.Effect>
Expand Down
Loading