Skip to content

Commit 545f36f

Browse files
authored
Merge pull request #88 from dotnetprojects/develop
Develop
2 parents 365ed4e + 707369e commit 545f36f

21 files changed

+1392
-59
lines changed

.github/workflows/dotnetpull.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ name: .NET
22

33
on:
44
pull_request:
5-
branches: [ master ]
5+
branches: [ master, develop ]
66

77
defaults:
88
run:

Docs/articles/intro.md

+7-1
Original file line numberDiff line numberDiff line change
@@ -25,4 +25,10 @@ The control only has a couple of properties, `SizeType` and `ImageSource`.
2525

2626
For `None` and `ContentToSizeNoStretch`, the Horizontal/VerticalContentAlignment properties can be used to position the image within the control.
2727

28-
* `ImageSource` - This property is the same as `SetImage(drawing)`, and is exposed to allow for the source to be set through binding.
28+
* `ImageSource` - This property is the same as `SetImage(drawing)`, and is exposed to allow for the source to be set through binding.
29+
30+
The colors of an `SVGImage` can be overridden at run-time through some additional properties of the `SVGImage`:
31+
32+
* `OverrideFillColor` - This property overrides all fill colors of an SVG image
33+
* `OverrideStrokeColor` - Overrides all stroke colors of an SVG image
34+
* `OverrideColor` - Overrides all colors of an SVG image. `OverrideFillColor` and `OverrideStrokeColor` take precedence over the `OverrideColor` property.

Docs/index.md

+5-5
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,13 @@ The respository includes
1515
* **Samples:** For sample applications
1616
* **Docs:** For the documentations (in markdown format).
1717

18-
The command lines installation options are: For the version `5.0.118`
19-
* **.NET CLI:** dotnet add package DotNetProjects.SVGImage --version 5.0.118
20-
* **Package Manager:** NuGet\Install-Package DotNetProjects.SVGImage -Version 5.0.118
18+
The command lines installation options are: For the version `5.1.0`
19+
* **.NET CLI:** dotnet add package DotNetProjects.SVGImage --version 5.1.0
20+
* **Package Manager:** NuGet\Install-Package DotNetProjects.SVGImage -Version 5.1.0
2121

22-
For reference in projects use: For the version `5.0.118`
22+
For reference in projects use: For the version `5.1.0`
2323
```xml
24-
<PackageReference Include="DotNetProjects.SVGImage" Version="5.0.118" />
24+
<PackageReference Include="DotNetProjects.SVGImage" Version="5.1.0" />
2525
```
2626

2727
## How to build

GitVersion.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
next-version: 5.0.118
1+
next-version: 5.1.0

README.md

+5-5
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,13 @@ The respository includes
1515
* **Samples:** For sample applications
1616
* **Docs:** For the documentations (in markdown format).
1717

18-
The command lines installation options are: For the version `5.0.118`
19-
* **.NET CLI:** dotnet add package DotNetProjects.SVGImage --version 5.0.118
20-
* **Package Manager:** NuGet\Install-Package DotNetProjects.SVGImage -Version 5.0.118
18+
The command lines installation options are: For the version `5.1.0`
19+
* **.NET CLI:** dotnet add package DotNetProjects.SVGImage --version 5.1.0
20+
* **Package Manager:** NuGet\Install-Package DotNetProjects.SVGImage -Version 5.1.0
2121

22-
For reference in projects use: For the version `5.0.118`
22+
For reference in projects use: For the version `5.1.0`
2323
```xml
24-
<PackageReference Include="DotNetProjects.SVGImage" Version="5.0.118" />
24+
<PackageReference Include="DotNetProjects.SVGImage" Version="5.1.0" />
2525
```
2626

2727
## How to build

Samples/Example/MainWindow.xaml

+1-1
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@
103103
<svg1:SVGImage Source="/Example;component/Images/example radgrad01.svg" RenderTransformOrigin="0.848,0.125" VerticalContentAlignment="Center" HorizontalContentAlignment="Center" Margin="3" />
104104
<svg1:SVGImage Source="/Example;component/Images/tiger.svg" RenderTransformOrigin="0.5,0.5" VerticalContentAlignment="Center" HorizontalContentAlignment="Center" Margin="3" />
105105
<svg1:SVGImage Source="/Example;component/Images/1.svg" RenderTransformOrigin="0.5,0.5" VerticalContentAlignment="Center" HorizontalContentAlignment="Center" Margin="3" />
106-
<svg1:SVGImage Source="/Example;component/Images/2.svg" RenderTransformOrigin="0.5,0.5" VerticalContentAlignment="Center" HorizontalContentAlignment="Center" Margin="3" />
106+
<svg1:SVGImage Source="/Example;component/Images/2.svg" RenderTransformOrigin="0.5,0.5" VerticalContentAlignment="Center" HorizontalContentAlignment="Center" Margin="3" OverrideFillColor="DarkGreen" OverrideStrokeColor="DarkSalmon" x:Name="OverrideSeparateColorTest" MouseDoubleClick="SVGImage_MouseDoubleClickSeparateOverride" />
107107
<svg1:SVGImage Source="/Example;component/Images/3.svg" RenderTransformOrigin="0.5,0.5" VerticalContentAlignment="Center" HorizontalContentAlignment="Center" Margin="3" />
108108
<svg1:SVGImage Source="/Example;component/Images/4.svg" RenderTransformOrigin="0.5,0.5" VerticalContentAlignment="Center" HorizontalContentAlignment="Center" Margin="3" />
109109
<svg1:SVGImage Source="/Example;component/Images/5.svg" RenderTransformOrigin="0.5,0.5" VerticalContentAlignment="Center" HorizontalContentAlignment="Center" Margin="3" />

Samples/Example/MainWindow.xaml.cs

+19-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
using System.IO;
33
using System.IO.Compression;
44
using System.Collections.Generic;
5-
65
using System.Windows;
76

87
namespace Example
@@ -149,5 +148,24 @@ private void SVGImage_MouseDoubleClick(object sender, System.Windows.Input.Mouse
149148
rnd == 1 ? System.Windows.Media.Colors.Magenta :
150149
System.Windows.Media.Colors.Black;
151150
}
151+
152+
private void SVGImage_MouseDoubleClickSeparateOverride(object sender, System.Windows.Input.MouseButtonEventArgs e)
153+
{
154+
System.Windows.Media.Color[] colors =
155+
{
156+
System.Windows.Media.Colors.White,
157+
System.Windows.Media.Colors.Magenta,
158+
System.Windows.Media.Colors.DarkGreen,
159+
System.Windows.Media.Colors.DarkSalmon,
160+
System.Windows.Media.Colors.DarkBlue,
161+
System.Windows.Media.Colors.Black,
162+
};
163+
var ran = new Random();
164+
var rndFill = ran.Next(0, colors.Length);
165+
OverrideSeparateColorTest.OverrideFillColor = colors[rndFill];
166+
167+
var rndStroke = ran.Next(0, colors.Length);
168+
OverrideSeparateColorTest.OverrideStrokeColor = colors[rndStroke];
169+
}
152170
}
153171
}

Samples/IconConverterSample/MainWindow.xaml.cs

+1-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
using System;
22
using System.Net;
33
using System.IO;
4-
using System.Reflection;
54
using System.IO.Compression;
65
using System.Windows;
76

@@ -24,7 +23,7 @@ private void OnWindowLoaded(object sender, RoutedEventArgs e)
2423
InitializeProtocol(); //For the web access
2524

2625
// ICons credit: https://github.com/icons8/flat-color-icons
27-
string workingDir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
26+
string workingDir = Path.GetFullPath(PageMultiple.SamplesDir);
2827

2928
string iconsPath = Path.Combine(workingDir, PageMultiple.IconZipFile);
3029
if (!File.Exists(iconsPath))

Samples/IconConverterSample/PageMultiple.xaml.cs

+7-5
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
using System.Reflection;
55
using System.Windows;
66
using System.Windows.Controls;
7+
using System.IO.Compression;
78

89
namespace IconConverterSample
910
{
@@ -43,8 +44,9 @@ public Uri ImageUri
4344
/// </summary>
4445
public partial class PageMultiple : Page
4546
{
46-
public const string IconZipFile = @"..\svg-icons.zip";
47-
public const string IconFolder = @"Svg-Icons";
47+
public const string SamplesDir = @"..\..\..\..\Tests";
48+
public const string IconZipFile = "svg-icons.zip";
49+
public const string IconFolder = "Svg-Icons";
4850

4951
public PageMultiple()
5052
{
@@ -56,15 +58,15 @@ public PageMultiple()
5658

5759
private void OnPageLoaded(object sender, RoutedEventArgs e)
5860
{
59-
string workingDir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
61+
string workingDir = Path.GetFullPath(SamplesDir);
6062

61-
string iconsPath = Path.Combine(workingDir, PageMultiple.IconZipFile);
63+
string iconsPath = Path.Combine(workingDir, IconZipFile);
6264
if (!File.Exists(iconsPath))
6365
{
6466
return;
6567
}
6668

67-
var iconsDir = new DirectoryInfo(Path.Combine(workingDir, PageMultiple.IconFolder));
69+
var iconsDir = new DirectoryInfo(Path.Combine(workingDir, IconFolder));
6870
if (!iconsDir.Exists)
6971
{
7072
return;

Samples/IconConverterSample/PageSingle.xaml.cs

+2-3
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,7 @@ namespace IconConverterSample
1111
/// </summary>
1212
public partial class PageSingle : Page
1313
{
14-
//private const string SvgFileName = @"..\Asian_Openbill.svg";
15-
private const string SvgFileName = @"..\Sf_er_nkm.svg";
14+
private const string SvgFileName = @"..\..\Resources\Hypocolius.svg";
1615

1716
public static readonly DependencyProperty LocalFileNameProperty = DependencyProperty.Register("LocalFileName",
1817
typeof(string), typeof(PageSingle), new PropertyMetadata(SvgFileName));
@@ -35,7 +34,7 @@ private void OnPageLoaded(object sender, RoutedEventArgs e)
3534
{
3635
string workingDir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
3736

38-
string svgFilePath = Path.Combine(workingDir, SvgFileName);
37+
string svgFilePath = Path.GetFullPath(Path.Combine(workingDir, SvgFileName));
3938
if (File.Exists(svgFilePath))
4039
{
4140
inputBox.Text = svgFilePath;

Source/SVGImage/DotNetProjects.SVGImage.csproj

+4-4
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,9 @@
1111
<Product>DotNetProjects.SVGImage</Product>
1212
<Copyright>2020-2023 DotNetProjects</Copyright>
1313
<PackageLicenseExpression>MIT</PackageLicenseExpression>
14-
<AssemblyVersion>5.0.117.0</AssemblyVersion>
15-
<FileVersion>5.0.117.0</FileVersion>
16-
<Version>5.0.117</Version>
14+
<AssemblyVersion>5.1.0.0</AssemblyVersion>
15+
<FileVersion>5.1.0.0</FileVersion>
16+
<Version>5.1.0</Version>
1717
<OutputType>Library</OutputType>
1818
<Configurations>Debug;Release</Configurations>
1919
</PropertyGroup>
@@ -31,7 +31,7 @@
3131
<PackageReadmeFile>Readme.md</PackageReadmeFile>
3232
<EnablePackageValidation>true</EnablePackageValidation>
3333
<!-- NOTE: Detect breaking changes from a previous version -->
34-
<PackageValidationBaselineVersion>5.0.117</PackageValidationBaselineVersion>
34+
<PackageValidationBaselineVersion>5.0.118</PackageValidationBaselineVersion>
3535
</PropertyGroup>
3636

3737
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">

Source/SVGImage/SVG/SVGImage.cs

+55-5
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,14 @@ public enum eSizeType
9797
DependencyProperty.Register("OverrideColor", typeof(Color?), typeof(SVGImage),
9898
new FrameworkPropertyMetadata(default, FrameworkPropertyMetadataOptions.AffectsRender, OverrideColorPropertyChanged));
9999

100+
public static readonly DependencyProperty OverrideFillColorProperty =
101+
DependencyProperty.Register("OverrideFillColor", typeof(Color?), typeof(SVGImage),
102+
new FrameworkPropertyMetadata(default, FrameworkPropertyMetadataOptions.AffectsRender, OverrideFillColorPropertyChanged));
103+
104+
public static readonly DependencyProperty OverrideStrokeColorProperty =
105+
DependencyProperty.Register("OverrideStrokeColor", typeof(Color?), typeof(SVGImage),
106+
new FrameworkPropertyMetadata(default, FrameworkPropertyMetadataOptions.AffectsRender, OverrideStrokeColorPropertyChanged));
107+
100108
public static readonly DependencyProperty CustomBrushesProperty = DependencyProperty.Register(nameof(CustomBrushes),
101109
typeof(Dictionary<string, Brush>), typeof(SVGImage), new FrameworkPropertyMetadata(default,
102110
FrameworkPropertyMetadataOptions.AffectsRender, CustomBrushesPropertyChanged));
@@ -167,6 +175,18 @@ public Color? OverrideColor
167175
set { SetValue(OverrideColorProperty, value); }
168176
}
169177

178+
public Color? OverrideFillColor
179+
{
180+
get { return (Color?)GetValue(OverrideFillColorProperty); }
181+
set { SetValue(OverrideFillColorProperty, value); }
182+
}
183+
184+
public Color? OverrideStrokeColor
185+
{
186+
get { return (Color?)GetValue(OverrideStrokeColorProperty); }
187+
set { SetValue(OverrideStrokeColorProperty, value); }
188+
}
189+
170190
public double? OverrideStrokeWidth
171191
{
172192
get { return (double?)GetValue(OverrideStrokeWidthProperty); }
@@ -234,6 +254,8 @@ public void ReRenderSvg()
234254
_render = new SVGRender();
235255
_render.ExternalFileLoader = this.ExternalFileLoader;
236256
_render.OverrideColor = OverrideColor;
257+
_render.OverrideFillColor = OverrideFillColor;
258+
_render.OverrideStrokeColor = OverrideStrokeColor;
237259
_render.CustomBrushes = CustomBrushes;
238260
_render.OverrideStrokeWidth = OverrideStrokeWidth;
239261
_render.UseAnimations = this.UseAnimations;
@@ -256,6 +278,8 @@ public void SetImage(string svgFilename)
256278
_render.ExternalFileLoader = this.ExternalFileLoader;
257279
_render.UseAnimations = false;
258280
_render.OverrideColor = OverrideColor;
281+
_render.OverrideFillColor = OverrideFillColor;
282+
_render.OverrideStrokeColor = OverrideStrokeColor;
259283
_render.CustomBrushes = CustomBrushes;
260284
_render.OverrideStrokeWidth = OverrideStrokeWidth;
261285

@@ -276,6 +300,8 @@ public void SetImage(Stream stream)
276300
_render = new SVGRender();
277301
_render.ExternalFileLoader = this.ExternalFileLoader;
278302
_render.OverrideColor = OverrideColor;
303+
_render.OverrideFillColor = OverrideFillColor;
304+
_render.OverrideStrokeColor = OverrideStrokeColor;
279305
_render.CustomBrushes = CustomBrushes;
280306
_render.OverrideStrokeWidth = OverrideStrokeWidth;
281307
_render.UseAnimations = false;
@@ -298,6 +324,8 @@ public void SetImage(Uri uriSource)
298324
_render = new SVGRender();
299325
_render.ExternalFileLoader = this.ExternalFileLoader;
300326
_render.OverrideColor = OverrideColor;
327+
_render.OverrideFillColor = OverrideFillColor;
328+
_render.OverrideStrokeColor = OverrideStrokeColor;
301329
_render.CustomBrushes = CustomBrushes;
302330
_render.OverrideStrokeWidth = OverrideStrokeWidth;
303331
_render.UseAnimations = false;
@@ -326,6 +354,8 @@ protected override void OnInitialized(EventArgs e)
326354
_render = new SVGRender();
327355
_render.ExternalFileLoader = this.ExternalFileLoader;
328356
_render.OverrideColor = OverrideColor;
357+
_render.OverrideFillColor = OverrideFillColor;
358+
_render.OverrideStrokeColor = OverrideStrokeColor;
329359
_render.CustomBrushes = CustomBrushes;
330360
_render.OverrideStrokeWidth = OverrideStrokeWidth;
331361
_render.UseAnimations = this.UseAnimations;
@@ -694,7 +724,7 @@ DrawingGroup LoadDrawing(Uri svgSource)
694724
//case "ftp":
695725
case "https":
696726
case "http":
697-
using (FileSvgReader reader = new FileSvgReader(this.OverrideColor))
727+
using (FileSvgReader reader = new FileSvgReader(this.OverrideColor, this.OverrideFillColor, this.OverrideStrokeColor))
698728
{
699729
DrawingGroup drawGroup = reader.Read(svgSource, _render);
700730

@@ -729,7 +759,7 @@ DrawingGroup LoadDrawing(Uri svgSource)
729759
{
730760
using (var zipStream = new GZipStream(svgStream, CompressionMode.Decompress))
731761
{
732-
using (FileSvgReader reader = new FileSvgReader(this.OverrideColor))
762+
using (FileSvgReader reader = new FileSvgReader(this.OverrideColor, this.OverrideFillColor, this.OverrideStrokeColor))
733763
{
734764
DrawingGroup drawGroup = reader.Read(zipStream, _render);
735765

@@ -745,7 +775,7 @@ DrawingGroup LoadDrawing(Uri svgSource)
745775
{
746776
using (svgStream)
747777
{
748-
using (FileSvgReader reader = new FileSvgReader(this.OverrideColor))
778+
using (FileSvgReader reader = new FileSvgReader(this.OverrideColor, this.OverrideFillColor, this.OverrideStrokeColor))
749779
{
750780
DrawingGroup drawGroup = reader.Read(svgStream, _render);
751781

@@ -781,7 +811,7 @@ DrawingGroup LoadDrawing(Uri svgSource)
781811
{
782812
using (GZipStream zipStream = new GZipStream(stream, CompressionMode.Decompress))
783813
{
784-
using (var reader = new FileSvgReader(this.OverrideColor))
814+
using (var reader = new FileSvgReader(this.OverrideColor, this.OverrideFillColor, this.OverrideStrokeColor))
785815
{
786816
DrawingGroup drawGroup = reader.Read(zipStream, _render);
787817
if (drawGroup != null)
@@ -796,7 +826,7 @@ DrawingGroup LoadDrawing(Uri svgSource)
796826
{
797827
using (var stream = new MemoryStream(imageBytes))
798828
{
799-
using (var reader = new FileSvgReader(this.OverrideColor))
829+
using (var reader = new FileSvgReader(this.OverrideColor, this.OverrideFillColor, this.OverrideStrokeColor))
800830
{
801831
DrawingGroup drawGroup = reader.Read(stream, _render);
802832
if (drawGroup != null)
@@ -875,6 +905,26 @@ private static void OverrideColorPropertyChanged(DependencyObject d, DependencyP
875905
}
876906
}
877907

908+
private static void OverrideFillColorPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
909+
{
910+
if (d is SVGImage svgImage && e.NewValue is Color newColor && svgImage._render != null)
911+
{
912+
svgImage._render.OverrideFillColor = newColor;
913+
svgImage.InvalidateVisual();
914+
svgImage.ReRenderSvg();
915+
}
916+
}
917+
918+
private static void OverrideStrokeColorPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
919+
{
920+
if (d is SVGImage svgImage && e.NewValue is Color newColor && svgImage._render != null)
921+
{
922+
svgImage._render.OverrideStrokeColor = newColor;
923+
svgImage.InvalidateVisual();
924+
svgImage.ReRenderSvg();
925+
}
926+
}
927+
878928
private static void OverrideStrokeWidthPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
879929
{
880930
if (d is SVGImage svgImage && e.NewValue is double newStrokeWidth && svgImage._render != null)

0 commit comments

Comments
 (0)