diff --git a/QuickShell/Assets/icons8-folder-ios-27-filled/icons8-folder-100.svg b/QuickShell/Assets/icons8-folder-ios-27-filled/icons8-folder-100.svg
new file mode 100644
index 0000000..d8909bb
--- /dev/null
+++ b/QuickShell/Assets/icons8-folder-ios-27-filled/icons8-folder-100.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/QuickShell/Assets/icons8-folder-ios-27-filled/icons8-folder-150.svg b/QuickShell/Assets/icons8-folder-ios-27-filled/icons8-folder-150.svg
new file mode 100644
index 0000000..44ef982
--- /dev/null
+++ b/QuickShell/Assets/icons8-folder-ios-27-filled/icons8-folder-150.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/QuickShell/Assets/icons8-folder-ios-27-filled/icons8-folder-250.svg b/QuickShell/Assets/icons8-folder-ios-27-filled/icons8-folder-250.svg
new file mode 100644
index 0000000..15fccbf
--- /dev/null
+++ b/QuickShell/Assets/icons8-folder-ios-27-filled/icons8-folder-250.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/QuickShell/Assets/icons8-folder-ios-27-filled/icons8-folder-50.svg b/QuickShell/Assets/icons8-folder-ios-27-filled/icons8-folder-50.svg
new file mode 100644
index 0000000..6e915bb
--- /dev/null
+++ b/QuickShell/Assets/icons8-folder-ios-27-filled/icons8-folder-50.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/QuickShell/Assets/icons8-folder-ios-27-filled/icons8-folder-500.svg b/QuickShell/Assets/icons8-folder-ios-27-filled/icons8-folder-500.svg
new file mode 100644
index 0000000..42a5bf1
--- /dev/null
+++ b/QuickShell/Assets/icons8-folder-ios-27-filled/icons8-folder-500.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/QuickShell/QuickShell.csproj b/QuickShell/QuickShell.csproj
index 146fc17..0821377 100644
--- a/QuickShell/QuickShell.csproj
+++ b/QuickShell/QuickShell.csproj
@@ -32,6 +32,8 @@
Always
+
+
= 5 && args[0] == "--render")
{
- var svgPath = Path.GetFullPath(args[1]);
- var outPath = Path.GetFullPath(args[2]);
- var width = int.Parse(args[3], System.Globalization.CultureInfo.InvariantCulture);
- var height = int.Parse(args[4], System.Globalization.CultureInfo.InvariantCulture);
- Directory.CreateDirectory(Path.GetDirectoryName(outPath)!);
- RenderSvgToPng(svgPath, outPath, width, height);
- return 0;
+ try
+ {
+ var svgPath = Path.GetFullPath(args[1]);
+ var outPath = Path.GetFullPath(args[2]);
+ var width = int.Parse(args[3], System.Globalization.CultureInfo.InvariantCulture);
+ var height = int.Parse(args[4], System.Globalization.CultureInfo.InvariantCulture);
+ Directory.CreateDirectory(Path.GetDirectoryName(outPath)!);
+ RenderSvgToPng(svgPath, outPath, width, height);
+ return 0;
+ }
+ catch (Exception ex)
+ {
+ Console.Error.WriteLine(ex.Message);
+ return 1;
+ }
}
if (args.Length < 2)
@@ -95,7 +103,7 @@ static void RenderSquareLogo(string outDir, string fileName, SKPicture picture,
var renderHeight = height * supersample;
var info = new SKImageInfo(renderWidth, renderHeight, SKColorType.Rgba8888, SKAlphaType.Premul);
- using var surface = SKSurface.Create(info);
+ using var surface = SKSurface.Create(info) ?? throw new InvalidOperationException($"Failed to allocate surface {renderWidth}x{renderHeight} for {fileName}");
var canvas = surface.Canvas;
canvas.Clear(SKColors.Transparent);
@@ -539,7 +547,7 @@ static void RenderSvgToPng(string svgPath, string outPath, int width, int height
var renderHeight = height * supersample;
var info = new SKImageInfo(renderWidth, renderHeight, SKColorType.Rgba8888, SKAlphaType.Premul);
- using var surface = SKSurface.Create(info);
+ using var surface = SKSurface.Create(info) ?? throw new InvalidOperationException($"Failed to allocate surface {renderWidth}x{renderHeight} for {Path.GetFileName(svgPath)}");
var canvas = surface.Canvas;
canvas.Clear(SKColors.Transparent);
@@ -566,7 +574,7 @@ static void WritePng(SKSurface surface, string outPath, int width, int height)
if (rendered.Width != width || rendered.Height != height)
{
var info = new SKImageInfo(width, height, SKColorType.Rgba8888, SKAlphaType.Premul);
- using var destSurface = SKSurface.Create(info);
+ using var destSurface = SKSurface.Create(info) ?? throw new InvalidOperationException($"Failed to allocate resize surface {width}x{height} for {outPath}");
var canvas = destSurface.Canvas;
canvas.Clear(SKColors.Transparent);
using var paint = new SKPaint
diff --git a/scripts/generate-assets.ps1 b/scripts/generate-assets.ps1
index 9fbbfe1..adb3c36 100644
--- a/scripts/generate-assets.ps1
+++ b/scripts/generate-assets.ps1
@@ -32,7 +32,7 @@ New-Item -ItemType Directory -Force -Path $runImagesDir | Out-Null
-dotnet build $generatorProject | Out-Null
+dotnet build $generatorProject --no-incremental | Out-Null
if ($LASTEXITCODE -ne 0) {
throw "LogoAssetGenerator build failed with exit code $LASTEXITCODE"
}
@@ -73,8 +73,18 @@ if ($LASTEXITCODE -ne 0) {
+$cmdPalIcon = Join-Path $repoRoot 'cmdpal-gallery\extensions\tonythethompson\quickshell\icon.png'
+$appTile300 = Join-Path $assetsDir 'StoreListing\AppTile_300x300.png'
+if (-not (Test-Path $appTile300)) {
+ throw "Missing store listing icon source: $appTile300"
+}
+
+New-Item -ItemType Directory -Force -Path (Split-Path $cmdPalIcon -Parent) | Out-Null
+Copy-Item -Force $appTile300 $cmdPalIcon
+
Write-Host "Quick Shell assets generated from logo-micro.svg:"
Write-Host " MSIX: $assetsDir"
Write-Host " Store listing (Partner Center): $(Join-Path $assetsDir 'StoreListing')"
Write-Host " Run: $runImagesDir"
+Write-Host " CmdPal gallery: $cmdPalIcon"