AgamizMockAPI

AgamizMockAPI scripts generate-icons.ps1

3.9 KB 100 lines Raw ↗ GitHub ↗

Add-Type -AssemblyName System.Drawing$dir = Join-Path $PSScriptRoot "..\src-tauri\icons"New-Item -ItemType Directory -Force -Path $dir | Out-Nullfunction New-Rect([int]$x, [int]$y, [int]$w, [int]$h) {    return New-Object System.Drawing.Rectangle($x, $y, $w, $h)}function New-AgamizIcon([int]$size, [string]$path) {    $bmp = New-Object System.Drawing.Bitmap($size, $size)    $g = [System.Drawing.Graphics]::FromImage($bmp)    $g.SmoothingMode = [System.Drawing.Drawing2D.SmoothingMode]::AntiAlias    $g.Clear([System.Drawing.Color]::Transparent)    # Dark rounded-square canvas    $r = [int]($size * 0.22)    $rad = $r * 2    $round = $size - $rad    $canvas = New-Object System.Drawing.Drawing2D.GraphicsPath    $r1 = New-Rect 0 0 $rad $rad    $r2 = New-Rect $round 0 $rad $rad    $r3 = New-Rect $round $round $rad $rad    $r4 = New-Rect 0 $round $rad $rad    $canvas.AddArc($r1, 180, 90) | Out-Null    $canvas.AddArc($r2, 270, 90) | Out-Null    $canvas.AddArc($r3, 0, 90) | Out-Null    $canvas.AddArc($r4, 90, 90) | Out-Null    $canvas.CloseFigure()    $pt0 = New-Object System.Drawing.PointF(0, 0)    $pt1 = New-Object System.Drawing.PointF($size, $size)    $c0 = [System.Drawing.Color]::FromArgb(255, 11, 15, 23)    $c1 = [System.Drawing.Color]::FromArgb(255, 17, 24, 39)    $bgBrush = New-Object System.Drawing.Drawing2D.LinearGradientBrush($pt0, $pt1, $c0, $c1)    $g.FillPath($bgBrush, $canvas) | Out-Null    $bgBrush.Dispose()    # Emerald glow pill (top-right)    $glow = New-Object System.Drawing.SolidBrush([System.Drawing.Color]::FromArgb(110, 16, 185, 129))    $g.FillEllipse($glow, [float](0.60 * $size), [float](0.08 * $size), [float](0.30 * $size), [float](0.30 * $size)) | Out-Null    $glow.Dispose()    # Lightning bolt as connected segments    $b = [float](0.20 * $size)    $w = [float](0.17 * $size)    $boltPen = New-Object System.Drawing.Pen([System.Drawing.Color]::FromArgb(255, 16, 185, 129), [float](0.055 * $size))    $boltPen.StartCap = [System.Drawing.Drawing2D.LineCap]::Round    $boltPen.EndCap = [System.Drawing.Drawing2D.LineCap]::Round    $boltPen.LineJoin = [System.Drawing.Drawing2D.LineJoin]::Round    $pts = [System.Drawing.PointF[]]@(        (New-Object System.Drawing.PointF($b + 0.8 * $w, $b + 0.2 * $w)),        (New-Object System.Drawing.PointF($b + 2.6 * $w, $b + 2.6 * $w)),        (New-Object System.Drawing.PointF($b + 1.6 * $w, $b + 2.6 * $w)),        (New-Object System.Drawing.PointF($b + 3.6 * $w, $size - $b)),        (New-Object System.Drawing.PointF($b + 2.0 * $w, $size - $b)),        (New-Object System.Drawing.PointF($b, $b + 0.9 * $w))    )    $g.DrawLines($boltPen, $pts) | Out-Null    $boltPen.Dispose()    $g.Dispose()    $bmp.Save($path, [System.Drawing.Imaging.ImageFormat]::Png) | Out-Null    $bmp.Dispose()    $canvas.Dispose()}New-AgamizIcon 32 "$dir\32x32.png"New-AgamizIcon 128 "$dir\128x128.png"New-AgamizIcon 256 "$dir\128x128@2x.png"# ---- ICO (single 256x256 PNG-embedded entry) ----$pngBytes = [System.IO.File]::ReadAllBytes("$dir\128x128@2x.png")$ico = New-Object System.IO.MemoryStream$bw = New-Object System.IO.BinaryWriter($ico)$bw.Write([uint16]0)                 # reserved$bw.Write([uint16]1)                 # type: icon$bw.Write([uint16]1)                 # count$bw.Write([byte]0)                   # width 0 => 256$bw.Write([byte]0)                   # height 0 => 256$bw.Write([byte]0)                   # color count$bw.Write([byte]0)                   # reserved$bw.Write([uint16]1)                 # planes$bw.Write([uint16]32)                # bpp$bw.Write([uint32]$pngBytes.Length)  # size$bw.Write([uint32]22)                # offset (6 + 16)$bw.Write($pngBytes)$bw.Flush()[System.IO.File]::WriteAllBytes("$dir\icon.ico", $ico.ToArray())$bw.Dispose()$ico.Dispose()if (-not (Test-Path "$dir\icon.icns")) {    [System.IO.File]::WriteAllBytes("$dir\icon.icns", [byte[]]@())}Write-Output "Icons written to $dir"Get-ChildItem $dir | Select-Object Name, Length