Skip to content

Commit 683f782

Browse files
committed
Updates to the Effects window
1 parent 14d3233 commit 683f782

File tree

3 files changed

+114
-43
lines changed

3 files changed

+114
-43
lines changed

src/PicView.Avalonia/ViewModels/ViewModelBase.cs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -260,10 +260,24 @@ public void UpdateLanguage()
260260
HighQuality = TranslationHelper.Translation.HighQuality;
261261
Lighting = TranslationHelper.Translation.Lighting;
262262
Emboss = TranslationHelper.Translation.Embossed; // Should change to Emboss
263+
BlackAndWhite = TranslationHelper.Translation.BlackAndWhite;
264+
NegativeColors = TranslationHelper.Translation.NegativeColors;
263265
}
264266

265267
#region Strings
266268

269+
public string? NegativeColors
270+
{
271+
get;
272+
set => this.RaiseAndSetIfChanged(ref field, value);
273+
}
274+
275+
public string? BlackAndWhite
276+
{
277+
get;
278+
set => this.RaiseAndSetIfChanged(ref field, value);
279+
}
280+
267281
public string? Emboss
268282
{
269283
get;

src/PicView.Avalonia/Views/EffectsView.axaml

Lines changed: 34 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,10 @@
3838
LargeChange="5"
3939
Margin="0,1,0,1"
4040
Maximum="100"
41-
Minimum="0"
41+
Minimum="-85"
4242
SmallChange="1"
4343
TickFrequency="1"
44+
Value="0"
4445
x:Name="BrightnessSlider" />
4546

4647
<!-- Contrast -->
@@ -63,17 +64,19 @@
6364
LargeChange="5"
6465
Margin="0,1,0,1"
6566
Maximum="100"
66-
Minimum="0"
67+
Minimum="-85"
6768
SmallChange="1"
6869
TickFrequency="1"
70+
Value="0"
6971
x:Name="ContrastSlider" />
7072

7173

7274
</StackPanel>
7375

7476
</Expander>
7577

76-
<Expander IsExpanded="True" Margin="0,15,0,10">
78+
79+
<Expander IsExpanded="True" Margin="0,0,0,10">
7780
<Expander.Header>
7881
<TextBlock
7982
Classes="txt"
@@ -82,37 +85,49 @@
8285
Padding="10,5"
8386
Text="{CompiledBinding Effects}" />
8487
</Expander.Header>
85-
<StackPanel Margin="15,20">
88+
<StackPanel Margin="15,0">
8689

8790
<!-- Emboss -->
88-
<Panel IsEnabled="False">
91+
<ToggleButton
92+
Background="Transparent"
93+
Classes="altHover"
94+
x:Name="EmbossToggleButton">
8995
<TextBlock
9096
Classes="txt"
9197
HorizontalAlignment="Left"
9298
Text="{CompiledBinding Emboss}"
9399
VerticalAlignment="Center" />
100+
</ToggleButton>
101+
102+
103+
<!-- Black/White -->
104+
<ToggleButton
105+
Background="Transparent"
106+
Classes="altHover"
107+
x:Name="BlackAndWhiteToggleButton">
94108
<TextBlock
95109
Classes="txt"
96-
HorizontalAlignment="Right"
97-
Text="{Binding Path=Value, ElementName=EmbossSlider}"
110+
HorizontalAlignment="Left"
111+
Text="{CompiledBinding BlackAndWhite}"
98112
VerticalAlignment="Center" />
99-
</Panel>
113+
</ToggleButton>
100114

101-
<customControls:CustomSlider
102-
Height="30"
103-
IsEnabled="False"
104-
IsSnapToTickEnabled="True"
105-
LargeChange="5"
106-
Margin="0,1,0,1"
107-
Maximum="100"
108-
Minimum="0"
109-
SmallChange="1"
110-
TickFrequency="1"
111-
x:Name="EmbossSlider" />
115+
<!-- Negative Colors -->
116+
<ToggleButton
117+
Background="Transparent"
118+
Classes="altHover"
119+
x:Name="NegativeToggleButton">
120+
<TextBlock
121+
Classes="txt"
122+
HorizontalAlignment="Left"
123+
Text="{CompiledBinding NegativeColors}"
124+
VerticalAlignment="Center" />
125+
</ToggleButton>
112126

113127

114128
</StackPanel>
115129

116130
</Expander>
131+
117132
</StackPanel>
118133
</UserControl>

src/PicView.Avalonia/Views/EffectsView.axaml.cs

Lines changed: 66 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -19,20 +19,54 @@ public EffectsView()
1919
{
2020
BrightnessSlider.ValueChanged += async (_, e) => await BrightnessChanged(e).ConfigureAwait(false);
2121
ContrastSlider.ValueChanged += async (_, e) => await ContrastChanged(e).ConfigureAwait(false);
22-
EmbossSlider.ValueChanged += async (_, e) => await EmbossChanged(e).ConfigureAwait(false);
23-
if (DataContext is not MainViewModel vm)
22+
BlackAndWhiteToggleButton.Click += async (_, _) =>
2423
{
25-
return;
26-
}
24+
if (!BlackAndWhiteToggleButton.IsChecked.HasValue)
25+
{
26+
return;
27+
}
2728

28-
if (!NavigationHelper.CanNavigate(vm))
29-
{
30-
return;
31-
}
29+
if (BlackAndWhiteToggleButton.IsChecked.Value)
30+
{
31+
await ApplyEffects(DataContext as MainViewModel);
32+
}
33+
else
34+
{
35+
await RemoveEffects(DataContext as MainViewModel);
36+
}
37+
};
3238

33-
// using var magick = new ImageMagick.MagickImage(vm.FileInfo);
34-
// BrightnessSlider.Value = magick.get
39+
NegativeToggleButton.Click += async (_, _) =>
40+
{
41+
if (!NegativeToggleButton.IsChecked.HasValue)
42+
{
43+
return;
44+
}
45+
if (NegativeToggleButton.IsChecked.Value)
46+
{
47+
await ApplyEffects(DataContext as MainViewModel);
48+
}
49+
else
50+
{
51+
await RemoveEffects(DataContext as MainViewModel);
52+
}
53+
};
54+
EmbossToggleButton.Click += async (_, _) =>
55+
{
56+
if (!EmbossToggleButton.IsChecked.HasValue)
57+
{
58+
return;
59+
}
3560

61+
if (EmbossToggleButton.IsChecked.Value)
62+
{
63+
await ApplyEffects(DataContext as MainViewModel);
64+
}
65+
else
66+
{
67+
await RemoveEffects(DataContext as MainViewModel);
68+
}
69+
};
3670
};
3771
}
3872

@@ -48,7 +82,7 @@ private async Task BrightnessChanged(RangeBaseValueChangedEventArgs e)
4882
{
4983
return;
5084
}
51-
await SetBrightnessContrast(vm);
85+
await ApplyEffects(vm);
5286
}
5387

5488
private async Task ContrastChanged(RangeBaseValueChangedEventArgs e)
@@ -63,43 +97,51 @@ private async Task ContrastChanged(RangeBaseValueChangedEventArgs e)
6397
{
6498
return;
6599
}
66-
await SetBrightnessContrast(vm);
100+
await ApplyEffects(vm);
67101
}
68102

69-
private async Task SetBrightnessContrast(MainViewModel vm)
103+
private async Task ApplyEffects(MainViewModel vm)
70104
{
105+
var negative = NegativeToggleButton.IsChecked.HasValue && NegativeToggleButton.IsChecked.Value;
106+
var blackAndWhite = BlackAndWhiteToggleButton.IsChecked.HasValue && BlackAndWhiteToggleButton.IsChecked.Value;
107+
var emboss = EmbossToggleButton.IsChecked.HasValue && EmbossToggleButton.IsChecked.Value;
71108
using var magick = new MagickImage();
72109
await magick.ReadAsync(vm.FileInfo.FullName).ConfigureAwait(false);
73110
magick.BrightnessContrast(_brightness, _contrast);
74111
magick.Format = MagickFormat.WebP;
75112
magick.BackgroundColor = MagickColors.Transparent;
76113
magick.Settings.BackgroundColor = MagickColors.Transparent;
77114
magick.Settings.FillColor = MagickColors.Transparent;
115+
if (negative)
116+
{
117+
magick.Negate();
118+
}
119+
120+
if (blackAndWhite)
121+
{
122+
magick.Grayscale();
123+
}
124+
125+
if (emboss)
126+
{
127+
magick.Emboss();
128+
}
129+
78130
await using var memoryStream = new MemoryStream();
79131
await magick.WriteAsync(memoryStream);
80132
memoryStream.Position = 0;
81133
var bitmap = new Bitmap(memoryStream);
82134
vm.ImageSource = bitmap;
83135
}
84136

85-
private async Task EmbossChanged(RangeBaseValueChangedEventArgs e)
137+
private async Task RemoveEffects(MainViewModel vm)
86138
{
87-
if (DataContext is not MainViewModel vm)
88-
{
89-
return;
90-
}
91-
92-
if (!NavigationHelper.CanNavigate(vm))
93-
{
94-
return;
95-
}
96139
using var magick = new MagickImage();
97140
await magick.ReadAsync(vm.FileInfo.FullName).ConfigureAwait(false);
98141
magick.Format = MagickFormat.WebP;
99142
magick.BackgroundColor = MagickColors.Transparent;
100143
magick.Settings.BackgroundColor = MagickColors.Transparent;
101144
magick.Settings.FillColor = MagickColors.Transparent;
102-
magick.Emboss(0, e.NewValue);
103145
await using var memoryStream = new MemoryStream();
104146
await magick.WriteAsync(memoryStream);
105147
memoryStream.Position = 0;

0 commit comments

Comments
 (0)