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"