From 136eda40baef87a5a81624a137eda1846f50caeb Mon Sep 17 00:00:00 2001 From: R0GGER Date: Mon, 9 Nov 2026 22:42:35 +0100 Subject: [PATCH] systeemvak + icoon grootte --- CHANGELOG.md | 7 +++ README.md | 4 +- build.ps1 | 2 +- installer/Kniip.iss | 2 +- src/Kniip/Infrastructure/TrayIcon.cs | 5 +- src/Kniip/Kniip.csproj | 3 +- src/Kniip/TrayIcon.ico | Bin 0 -> 8690 bytes tools/make-tray-icon.ps1 | 72 +++++++++++++++++++++++++++ 8 files changed, 88 insertions(+), 7 deletions(-) create mode 100644 src/Kniip/TrayIcon.ico create mode 100644 tools/make-tray-icon.ps1 diff --git a/CHANGELOG.md b/CHANGELOG.md index 18be7ef..508a34f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,13 @@ Alle noemenswaardige wijzigingen in kniip staan in dit bestand. De nieuwste versie staat bovenaan. +## 1.1.7 - 2026-11-09 + +### Gewijzigd + +- Het icoon in het systeemvak is groter en sluit aan bij de andere systeemvakpictogrammen. +- De tekst bij het icoon is nu **kniip**. Tijdens een opname staat daar **kniip - opname loopt**. + ## 1.1.6 - 2026-11-09 ### Nieuw diff --git a/README.md b/README.md index 54dc266..a832a56 100644 --- a/README.md +++ b/README.md @@ -34,7 +34,7 @@ kniip is een annotatie-editor die naast het Windows Knipprogramma werkt. Maak ee | Versie | Installer | | ------ | --------- | -| 1.1.6 | [Kniip-Setup-1.1.6.exe](https://git.hibbit.net/rogier/kniip/releases/download/1.1.6/Kniip-Setup-1.1.6.exe) | +| 1.1.7 | [Kniip-Setup-1.1.7.exe](https://git.hibbit.net/rogier/kniip/releases/download/1.1.7/Kniip-Setup-1.1.7.exe) | Oudere versies vind je bij [alle releases](https://git.hibbit.net/rogier/kniip/releases). @@ -80,7 +80,7 @@ Vereisten: Bouwen: ```powershell -.\build.ps1 # versie 1.1.6 +.\build.ps1 # versie 1.1.7 .\build.ps1 -Version 1.2.0 # andere versie ``` diff --git a/build.ps1 b/build.ps1 index a3a025c..4834157 100644 --- a/build.ps1 +++ b/build.ps1 @@ -12,7 +12,7 @@ # .\build.ps1 -SkipTest -> zonder testexe param( - [string]$Version = "1.1.6", + [string]$Version = "1.1.7", [string]$Runtime = "win-x64", [switch]$SkipTest ) diff --git a/installer/Kniip.iss b/installer/Kniip.iss index ad26894..933294c 100644 --- a/installer/Kniip.iss +++ b/installer/Kniip.iss @@ -5,7 +5,7 @@ #define AppName "kniip" #define AppExe "Kniip.exe" #ifndef AppVersion - #define AppVersion "1.1.6" + #define AppVersion "1.1.7" #endif #ifndef PublishDir #define PublishDir "..\artifacts\publish" diff --git a/src/Kniip/Infrastructure/TrayIcon.cs b/src/Kniip/Infrastructure/TrayIcon.cs index 2dc9e7f..24d9d94 100644 --- a/src/Kniip/Infrastructure/TrayIcon.cs +++ b/src/Kniip/Infrastructure/TrayIcon.cs @@ -225,7 +225,7 @@ internal sealed class TrayIcon : IDisposable private static string IdleText => AppIdentity.IsTest ? $"{AppIdentity.DisplayName} {Kniip.Update.UpdateChecker.CurrentVersion}" - : "kniip - annotaties voor het Knipprogramma"; + : AppIdentity.DisplayName; private void BuildFolders() { @@ -316,7 +316,8 @@ internal sealed class TrayIcon : IDisposable private static Icon LoadIcon() { - var info = System.Windows.Application.GetResourceStream(new Uri("pack://application:,,,/AppIcon.ico")); + // Uitsnede van AppIcon.ico zonder snijlijnen (tools\make-tray-icon.ps1): op 16px vult het kader zo het vak. + var info = System.Windows.Application.GetResourceStream(new Uri("pack://application:,,,/TrayIcon.ico")); if (info == null) { return SystemIcons.Application; diff --git a/src/Kniip/Kniip.csproj b/src/Kniip/Kniip.csproj index 1869df3..df0d634 100644 --- a/src/Kniip/Kniip.csproj +++ b/src/Kniip/Kniip.csproj @@ -18,7 +18,7 @@ app.manifest kniip Annotatie-editor naast het Windows Knipprogramma - 1.1.6 + 1.1.7 nl;en $(NoWarn);WFAC010 @@ -34,6 +34,7 @@ + diff --git a/src/Kniip/TrayIcon.ico b/src/Kniip/TrayIcon.ico new file mode 100644 index 0000000000000000000000000000000000000000..28d9db4649d4411c1079f0b1692fc8a4350ac786 GIT binary patch literal 8690 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 literal 0 HcmV?d00001 diff --git a/tools/make-tray-icon.ps1 b/tools/make-tray-icon.ps1 new file mode 100644 index 0000000..13c14a3 --- /dev/null +++ b/tools/make-tray-icon.ps1 @@ -0,0 +1,72 @@ +# Maakt src/Kniip/TrayIcon.ico uit de 256px-afbeelding in AppIcon.ico. Het systeemvak tekent op 16px; +# daar zijn de snijlijnen en de zwarte rand op een donkere taakbalk onzichtbaar en lijkt het icoon klein. +# Dit snijdt alleen het fotokader uit, zodat dat het hele vak vult. Opnieuw draaien als AppIcon.ico wijzigt. + +$ErrorActionPreference = 'Stop' +Add-Type -AssemblyName System.Drawing + +$root = Split-Path -Parent $PSScriptRoot +$source = Join-Path $root 'src\Kniip\AppIcon.ico' +$target = Join-Path $root 'src\Kniip\TrayIcon.ico' + +# Kader in de 256px-afbeelding, inclusief de zwarte rand. +$crop = New-Object System.Drawing.Rectangle 42, 42, 172, 172 +$sizes = 16, 20, 24, 32, 40, 48, 64 + +function Get-IcoPng([byte[]]$ico, [int]$size) { + $count = [BitConverter]::ToUInt16($ico, 4) + for ($i = 0; $i -lt $count; $i++) { + $entry = 6 + $i * 16 + $width = if ($ico[$entry] -eq 0) { 256 } else { $ico[$entry] } + if ($width -eq $size) { + $length = [BitConverter]::ToUInt32($ico, $entry + 8) + $offset = [BitConverter]::ToUInt32($ico, $entry + 12) + $data = New-Object byte[] $length + [Array]::Copy($ico, $offset, $data, 0, $length) + return $data + } + } + throw "Geen ${size}px-afbeelding in $source" +} + +$png = Get-IcoPng ([IO.File]::ReadAllBytes($source)) 256 +$master = [System.Drawing.Bitmap]::FromStream((New-Object IO.MemoryStream (, $png))) + +$images = foreach ($size in $sizes) { + $bitmap = New-Object System.Drawing.Bitmap $size, $size, ([System.Drawing.Imaging.PixelFormat]::Format32bppArgb) + $g = [System.Drawing.Graphics]::FromImage($bitmap) + $g.InterpolationMode = [System.Drawing.Drawing2D.InterpolationMode]::HighQualityBicubic + $g.PixelOffsetMode = [System.Drawing.Drawing2D.PixelOffsetMode]::HighQuality + $g.CompositingQuality = [System.Drawing.Drawing2D.CompositingQuality]::HighQuality + $g.DrawImage($master, (New-Object System.Drawing.Rectangle 0, 0, $size, $size), $crop, [System.Drawing.GraphicsUnit]::Pixel) + $g.Dispose() + $stream = New-Object IO.MemoryStream + $bitmap.Save($stream, [System.Drawing.Imaging.ImageFormat]::Png) + $bitmap.Dispose() + , $stream.ToArray() +} +$master.Dispose() + +$out = New-Object IO.MemoryStream +$writer = New-Object IO.BinaryWriter $out +$writer.Write([UInt16]0) +$writer.Write([UInt16]1) +$writer.Write([UInt16]$sizes.Count) +$offset = 6 + 16 * $sizes.Count +for ($i = 0; $i -lt $sizes.Count; $i++) { + $writer.Write([byte]$sizes[$i]) + $writer.Write([byte]$sizes[$i]) + $writer.Write([byte]0) + $writer.Write([byte]0) + $writer.Write([UInt16]1) + $writer.Write([UInt16]32) + $writer.Write([UInt32]$images[$i].Length) + $writer.Write([UInt32]$offset) + $offset += $images[$i].Length +} +foreach ($image in $images) { + $writer.Write($image) +} +$writer.Flush() +[IO.File]::WriteAllBytes($target, $out.ToArray()) +Write-Host "Geschreven: $target"