diff --git a/assets/branding/lasalle-mascot-provider.png b/assets/branding/lasalle-mascot-provider.png
new file mode 100644
index 0000000..5a9c26c
Binary files /dev/null and b/assets/branding/lasalle-mascot-provider.png differ
diff --git a/src/SGU.CredentialProvider/ProviderTileIcon.cs b/src/SGU.CredentialProvider/ProviderTileIcon.cs
index bb58066..5153571 100644
--- a/src/SGU.CredentialProvider/ProviderTileIcon.cs
+++ b/src/SGU.CredentialProvider/ProviderTileIcon.cs
@@ -1,35 +1,30 @@
using System.Drawing;
-using System.Drawing.Drawing2D;
using System.Drawing.Imaging;
+using System.Drawing.Drawing2D;
namespace SGU.CredentialProvider;
internal static class ProviderTileIcon
{
public const int Size = 72;
+ private const string MascotResourceName = "SGU.CredentialProvider.Branding.LaSalleMascot.png";
public static Bitmap Create()
{
Bitmap bitmap = new(Size, Size, PixelFormat.Format32bppArgb);
using Graphics graphics = Graphics.FromImage(bitmap);
- graphics.SmoothingMode = SmoothingMode.AntiAlias;
+ graphics.CompositingQuality = CompositingQuality.HighQuality;
+ graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
graphics.PixelOffsetMode = PixelOffsetMode.HighQuality;
graphics.Clear(Color.Transparent);
- using SolidBrush background = new(Color.FromArgb(0, 83, 155));
- graphics.FillEllipse(background, 1, 1, Size - 2, Size - 2);
-
- using Pen key = new(Color.White, 5.5f)
- {
- StartCap = LineCap.Round,
- EndCap = LineCap.Round,
- LineJoin = LineJoin.Round
- };
-
- graphics.DrawEllipse(key, 14, 14, 25, 25);
- graphics.DrawLine(key, 35, 35, 57, 57);
- graphics.DrawLine(key, 47, 47, 55, 39);
- graphics.DrawLine(key, 53, 53, 61, 45);
+ using Stream sourceStream = typeof(ProviderTileIcon).Assembly.GetManifestResourceStream(MascotResourceName)
+ ?? throw new InvalidOperationException($"The branded Credential Provider logo '{MascotResourceName}' is unavailable.");
+ using Bitmap mascot = new(sourceStream);
+ using GraphicsPath circularMask = new();
+ circularMask.AddEllipse(0, 0, Size, Size);
+ graphics.SetClip(circularMask);
+ graphics.DrawImage(mascot, new Rectangle(0, 0, Size, Size));
return bitmap;
}
diff --git a/src/SGU.CredentialProvider/SGU.CredentialProvider.csproj b/src/SGU.CredentialProvider/SGU.CredentialProvider.csproj
index 29bc647..4da34d1 100644
--- a/src/SGU.CredentialProvider/SGU.CredentialProvider.csproj
+++ b/src/SGU.CredentialProvider/SGU.CredentialProvider.csproj
@@ -23,6 +23,11 @@
+
+
+
+
<_Parameter1>SGU.CredentialProvider.Tests
diff --git a/tests/SGU.CredentialProvider.Tests/ProviderTileIconTests.cs b/tests/SGU.CredentialProvider.Tests/ProviderTileIconTests.cs
index aad5126..7810e6a 100644
--- a/tests/SGU.CredentialProvider.Tests/ProviderTileIconTests.cs
+++ b/tests/SGU.CredentialProvider.Tests/ProviderTileIconTests.cs
@@ -20,22 +20,27 @@ public sealed class ProviderTileIconTests
Assert.Equal(0, logo.Bitmap.GetPixel(ProviderTileIcon.Size - 1, 0).A);
Assert.Equal(0, logo.Bitmap.GetPixel(0, ProviderTileIcon.Size - 1).A);
Assert.Equal(0, logo.Bitmap.GetPixel(ProviderTileIcon.Size - 1, ProviderTileIcon.Size - 1).A);
- Assert.Equal(
- Color.FromArgb(0, 83, 155).ToArgb(),
- logo.Bitmap.GetPixel(6, ProviderTileIcon.Size / 2).ToArgb());
- int lightPixels = 0;
+ int redPixels = 0;
+ int navyPixels = 0;
for (int x = 0; x < logo.Bitmap.Width; x++)
{
for (int y = 0; y < logo.Bitmap.Height; y++)
{
- if (logo.Bitmap.GetPixel(x, y).GetBrightness() > 0.7f)
+ Color pixel = logo.Bitmap.GetPixel(x, y);
+ if (pixel.R > 160 && pixel.G < 100 && pixel.B < 100)
{
- lightPixels++;
+ redPixels++;
+ }
+
+ if (pixel.B > pixel.R && pixel.B > pixel.G && pixel.R < 70)
+ {
+ navyPixels++;
}
}
}
- Assert.InRange(lightPixels, 200, 2_000);
+ Assert.InRange(redPixels, 100, 2_000);
+ Assert.InRange(navyPixels, 100, 4_000);
}
[Fact]