refactor: do not upscale images

Signed-off-by: leo <longshuang@msn.cn>
This commit is contained in:
leo 2025-06-09 17:22:31 +08:00
parent 1b1dc2f666
commit 69792b3262
No known key found for this signature in database
3 changed files with 12 additions and 26 deletions

View file

@ -86,26 +86,12 @@ namespace SourceGit.Views
var imageSize = image.Size; var imageSize = image.Size;
var scaleW = availableSize.Width / imageSize.Width; var scaleW = availableSize.Width / imageSize.Width;
var scaleH = availableSize.Height / imageSize.Height; var scaleH = availableSize.Height / imageSize.Height;
var scale = Math.Min(scaleW, scaleH); var scale = Math.Min(1, Math.Min(scaleW, scaleH));
return new Size(scale * imageSize.Width, scale * imageSize.Height); return new Size(scale * imageSize.Width, scale * imageSize.Height);
} }
return availableSize; return availableSize;
} }
protected override Size ArrangeOverride(Size finalSize)
{
if (Image is { } image)
{
var imageSize = image.Size;
var scaleW = finalSize.Width / imageSize.Width;
var scaleH = finalSize.Height / imageSize.Height;
var scale = Math.Min(scaleW, scaleH);
return new Size(scale * imageSize.Width, scale * imageSize.Height);
}
return base.ArrangeOverride(finalSize);
}
} }
public class ImageSwipeControl : ImageContainer public class ImageSwipeControl : ImageContainer
@ -243,7 +229,7 @@ namespace SourceGit.Views
{ {
var sw = available.Width / img.Width; var sw = available.Width / img.Width;
var sh = available.Height / img.Height; var sh = available.Height / img.Height;
var scale = Math.Min(sw, sh); var scale = Math.Min(1, Math.Min(sw, sh));
return new Size(scale * img.Width, scale * img.Height); return new Size(scale * img.Width, scale * img.Height);
} }
@ -348,7 +334,7 @@ namespace SourceGit.Views
{ {
var sw = available.Width / img.Width; var sw = available.Width / img.Width;
var sh = available.Height / img.Height; var sh = available.Height / img.Height;
var scale = Math.Min(sw, sh); var scale = Math.Min(1, Math.Min(sw, sh));
return new Size(scale * img.Width, scale * img.Height); return new Size(scale * img.Width, scale * img.Height);
} }

View file

@ -32,8 +32,8 @@
<TextBlock Classes="primary" Text="{DynamicResource Text.Bytes}" Foreground="{DynamicResource Brush.FG2}" Margin="2,0,0,0"/> <TextBlock Classes="primary" Text="{DynamicResource Text.Bytes}" Foreground="{DynamicResource Brush.FG2}" Margin="2,0,0,0"/>
</StackPanel> </StackPanel>
<Border Grid.Row="1" Margin="0,12,0,0" Effect="drop-shadow(0 0 8 #A0000000)"> <Border Grid.Row="1" Margin="0,12,0,0" HorizontalAlignment="Center" VerticalAlignment="Center" Effect="drop-shadow(0 0 8 #A0000000)">
<Border Background="{DynamicResource Brush.Popup}" HorizontalAlignment="Center" Padding="8"> <Border Background="{DynamicResource Brush.Popup}" Padding="8">
<Border BorderThickness="1" BorderBrush="{DynamicResource Brush.Border1}"> <Border BorderThickness="1" BorderBrush="{DynamicResource Brush.Border1}">
<v:ImageView Image="{Binding Old}"/> <v:ImageView Image="{Binding Old}"/>
</Border> </Border>
@ -52,8 +52,8 @@
<TextBlock Classes="primary" Text="{DynamicResource Text.Bytes}" Foreground="{DynamicResource Brush.FG2}" Margin="2,0,0,0"/> <TextBlock Classes="primary" Text="{DynamicResource Text.Bytes}" Foreground="{DynamicResource Brush.FG2}" Margin="2,0,0,0"/>
</StackPanel> </StackPanel>
<Border Grid.Row="1" Margin="0,12,0,0" Effect="drop-shadow(0 0 8 #A0000000)"> <Border Grid.Row="1" Margin="0,12,0,0" HorizontalAlignment="Center" VerticalAlignment="Center" Effect="drop-shadow(0 0 8 #A0000000)">
<Border Background="{DynamicResource Brush.Popup}" HorizontalAlignment="Center" Padding="8"> <Border Background="{DynamicResource Brush.Popup}" Padding="8">
<Border BorderThickness="1" BorderBrush="{DynamicResource Brush.Border1}"> <Border BorderThickness="1" BorderBrush="{DynamicResource Brush.Border1}">
<v:ImageView Image="{Binding New}"/> <v:ImageView Image="{Binding New}"/>
</Border> </Border>
@ -87,8 +87,8 @@
<TextBlock Grid.Column="7" Classes="primary" Text="{DynamicResource Text.Bytes}" Foreground="{DynamicResource Brush.FG2}" Margin="2,0,0,0"/> <TextBlock Grid.Column="7" Classes="primary" Text="{DynamicResource Text.Bytes}" Foreground="{DynamicResource Brush.FG2}" Margin="2,0,0,0"/>
</Grid> </Grid>
<Border Grid.Row="1" Margin="0,12,0,0" Effect="drop-shadow(0 0 8 #A0000000)"> <Border Grid.Row="1" Margin="0,12,0,0" HorizontalAlignment="Center" Effect="drop-shadow(0 0 8 #A0000000)">
<Border HorizontalAlignment="Center" Background="{DynamicResource Brush.Window}"> <Border Background="{DynamicResource Brush.Window}">
<Border BorderThickness="1" BorderBrush="{DynamicResource Brush.Border1}" Margin="8"> <Border BorderThickness="1" BorderBrush="{DynamicResource Brush.Border1}" Margin="8">
<v:ImageSwipeControl OldImage="{Binding Old}" <v:ImageSwipeControl OldImage="{Binding Old}"
NewImage="{Binding New}" NewImage="{Binding New}"
@ -123,8 +123,8 @@
<TextBlock Grid.Column="7" Classes="primary" Text="{DynamicResource Text.Bytes}" Foreground="{DynamicResource Brush.FG2}" Margin="2,0,0,0"/> <TextBlock Grid.Column="7" Classes="primary" Text="{DynamicResource Text.Bytes}" Foreground="{DynamicResource Brush.FG2}" Margin="2,0,0,0"/>
</Grid> </Grid>
<Border Grid.Row="1" Margin="0,12,0,0" Effect="drop-shadow(0 0 8 #A0000000)"> <Border Grid.Row="1" Margin="0,12,0,0" HorizontalAlignment="Center" Effect="drop-shadow(0 0 8 #A0000000)">
<Border HorizontalAlignment="Center" Background="{DynamicResource Brush.Window}"> <Border Background="{DynamicResource Brush.Window}">
<Border BorderThickness="1" BorderBrush="{DynamicResource Brush.Border1}" Margin="8"> <Border BorderThickness="1" BorderBrush="{DynamicResource Brush.Border1}" Margin="8">
<v:ImageBlendControl Alpha="{Binding #ImageBlendSlider.Value}" <v:ImageBlendControl Alpha="{Binding #ImageBlendSlider.Value}"
OldImage="{Binding Old}" OldImage="{Binding Old}"

View file

@ -29,7 +29,7 @@
<DataTemplate DataType="m:RevisionImageFile"> <DataTemplate DataType="m:RevisionImageFile">
<Grid RowDefinitions="*,Auto" Margin="0,8" VerticalAlignment="Center" HorizontalAlignment="Center"> <Grid RowDefinitions="*,Auto" Margin="0,8" VerticalAlignment="Center" HorizontalAlignment="Center">
<Border Grid.Row="0" Effect="drop-shadow(0 0 8 #A0000000)"> <Border Grid.Row="0" HorizontalAlignment="Center" Effect="drop-shadow(0 0 8 #A0000000)">
<Border Background="{DynamicResource Brush.Window}"> <Border Background="{DynamicResource Brush.Window}">
<Border BorderThickness="1" BorderBrush="{DynamicResource Brush.Border1}" Margin="8"> <Border BorderThickness="1" BorderBrush="{DynamicResource Brush.Border1}" Margin="8">
<v:ImageView Image="{Binding Image}"/> <v:ImageView Image="{Binding Image}"/>