Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
rogierandCursor committed 2026-11-10 10:36:25 +01:00
1 parent 136eda40ba
commit 36c55c034c
10 files changed
+90 -12

No files matched your search

+9
View File
@@ -2,6 +2,15 @@
Alle noemenswaardige wijzigingen in kniip staan in dit bestand. De nieuwste versie staat bovenaan.
## 1.1.8 - 2026-11-10
### Nieuw
- **Drie-split-weergave.**\
Een derde indeling voor de editor: de gereedschappen staan boven, **Opslaan**, **Uploaden**, **Kopiëren** en de zoomknoppen onder, en **Nieuw** en **Screencast** in een smalle zijbalk naast het canvas. Kies de indeling in de instellingen onder **Weergave** > **Werkbalk**, of klik met rechts op een werkbalk en kies **Indeling**.
- De zijbalk staat links of rechts van het canvas. Kies de kant in de instellingen of via rechtsklik > **Zijbalk**.
- In de zijbalk staan alleen de iconen. Ctrl+H verbergt ook de zijbalk, en **Standaard herstellen** zet hem weer links.
## 1.1.7 - 2026-11-09
### Gewijzigd
+2 -2
View File
@@ -34,7 +34,7 @@ kniip is een annotatie-editor die naast het Windows Knipprogramma werkt. Maak ee
| Versie | Installer |
| ------ | --------- |
| 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) |
| 1.1.8 | [Kniip-Setup-1.1.8.exe](https://git.hibbit.net/rogier/kniip/releases/download/1.1.8/Kniip-Setup-1.1.8.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.7
.\build.ps1 # versie 1.1.8
.\build.ps1 -Version 1.2.0 # andere versie
```
+1 -1
View File
@@ -12,7 +12,7 @@
# .\build.ps1 -SkipTest -> zonder testexe
param(
[string]$Version = "1.1.7",
[string]$Version = "1.1.8",
[string]$Runtime = "win-x64",
[switch]$SkipTest
)
+1 -1
View File
@@ -5,7 +5,7 @@
#define AppName "kniip"
#define AppExe "Kniip.exe"
#ifndef AppVersion
#define AppVersion "1.1.7"
#define AppVersion "1.1.8"
#endif
#ifndef PublishDir
#define PublishDir "..\artifacts\publish"
+9
View File
@@ -440,6 +440,15 @@
</WrapPanel>
</Border>
<!-- Zijbalk in de drie-split-indeling; de code verplaatst Nieuw en Screencast hierheen -->
<Border x:Name="CaptureBar" DockPanel.Dock="Left" Background="{DynamicResource ToolbarBrush}" BorderBrush="{DynamicResource DividerBrush}"
BorderThickness="0,0,1,0" Padding="6,8" Visibility="Collapsed" ContextMenuOpening="Toolbar_ContextMenuOpening">
<Border.ContextMenu>
<ContextMenu x:Name="CaptureBarMenu" />
</Border.ContextMenu>
<local:ToolbarPanel x:Name="CaptureItems" Orientation="Vertical" OrderChanged="ToolbarItems_OrderChanged" />
</Border>
<!-- Canvas -->
<ScrollViewer x:Name="Scroller" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto"
Background="{DynamicResource CanvasBrush}" PreviewMouseWheel="Scroller_PreviewMouseWheel" Focusable="False">
+47 -4
View File
@@ -52,6 +52,9 @@ public partial class EditorWindow : Window
/// <summary>Items die alleen in de gesplitste indeling op een werkbalk staan.</summary>
private static readonly HashSet<string> SplitOnlyIds = new() { "SplitSpacer1", "SplitSpacer2" };
/// <summary>Items die in de drie-split-indeling in de zijbalk staan in plaats van de onderste werkbalk.</summary>
private static readonly HashSet<string> CaptureBarIds = new() { "New", "Screencast" };
private readonly EditorDocument _doc;
private readonly UndoStack _undo = new();
private readonly AppSettings _settings;
@@ -184,14 +187,17 @@ public partial class EditorWindow : Window
private static string ItemId(UIElement item) => ToolbarPanel.GetItemId(item) ?? string.Empty;
private bool IsSplitLayout => _settings.EditorLayout == EditorLayout.Split;
private bool IsSplitLayout => _settings.EditorLayout is EditorLayout.Split or EditorLayout.ThreeSplit;
private IEnumerable<UIElement> AllToolbarItems => ToolbarItems.Items.Concat(ActionItems.Items);
private bool IsThreeSplit => _settings.EditorLayout == EditorLayout.ThreeSplit;
private IEnumerable<UIElement> AllToolbarItems => ToolbarItems.Items.Concat(ActionItems.Items).Concat(CaptureItems.Items);
/// <summary>Items volgens de opgeslagen volgorde van de huidige indeling over de bovenste en onderste werkbalk verdelen.</summary>
private void ApplyToolbarLayout()
{
bool split = IsSplitLayout;
bool threeSplit = IsThreeSplit;
_appliedLayout = _settings.EditorLayout;
List<string> order = split
? MergeToolbarOrder(_settings.SplitToolbarOrder, _defaultSplitOrder)
@@ -199,15 +205,28 @@ public partial class EditorWindow : Window
ToolbarItems.Children.Clear();
ActionItems.Children.Clear();
CaptureItems.Children.Clear();
foreach (string id in order.Where(id => split || !SplitOnlyIds.Contains(id)))
{
(split && SplitBottomIds.Contains(id) ? ActionItems : ToolbarItems).Children.Add(_toolbarItems[id]);
ToolbarPanel panel = threeSplit && CaptureBarIds.Contains(id) ? CaptureItems
: split && SplitBottomIds.Contains(id) ? ActionItems
: ToolbarItems;
panel.Children.Add(_toolbarItems[id]);
}
ActionBar.Visibility = split && !_toolbarsHidden ? Visibility.Visible : Visibility.Collapsed;
CaptureBar.Visibility = threeSplit && !_toolbarsHidden ? Visibility.Visible : Visibility.Collapsed;
ApplyCaptureBarPosition();
ApplyToolbarPosition();
}
private void ApplyCaptureBarPosition()
{
bool right = _settings.CaptureBarPosition == Dock.Right;
DockPanel.SetDock(CaptureBar, right ? Dock.Right : Dock.Left);
CaptureBar.BorderThickness = right ? new Thickness(1, 0, 0, 0) : new Thickness(0, 0, 1, 0);
}
private List<string> MergeToolbarOrder(IReadOnlyList<string> saved, IReadOnlyList<string> defaults)
{
List<string> order = saved.Where(_toolbarItems.ContainsKey).Distinct().ToList();
@@ -248,8 +267,10 @@ public partial class EditorWindow : Window
string background = locked ? "ToolbarBrush" : "UnlockedToolbarBrush";
ToolbarItems.IsLocked = locked;
ActionItems.IsLocked = locked;
CaptureItems.IsLocked = locked;
Toolbar.SetResourceReference(Border.BackgroundProperty, background);
ActionBar.SetResourceReference(Border.BackgroundProperty, background);
CaptureBar.SetResourceReference(Border.BackgroundProperty, background);
UpdateHint();
}
@@ -265,6 +286,7 @@ public partial class EditorWindow : Window
{
UpdateActionLabels(Toolbar, ToolbarItems);
UpdateActionLabels(ActionBar, ActionItems);
UpdateActionLabels(CaptureBar, CaptureItems);
}
// Labels alleen tonen als alles op één regel past; staat de werkbalk opzij, dan altijd alleen iconen.
@@ -343,7 +365,7 @@ public partial class EditorWindow : Window
private void Toolbar_ContextMenuOpening(object sender, ContextMenuEventArgs e)
{
var bar = (Border)sender;
ToolbarPanel panel = bar == ActionBar ? ActionItems : ToolbarItems;
ToolbarPanel panel = bar == ActionBar ? ActionItems : bar == CaptureBar ? CaptureItems : ToolbarItems;
ContextMenu menu = bar.ContextMenu;
menu.Items.Clear();
@@ -355,6 +377,7 @@ public partial class EditorWindow : Window
foreach ((EditorLayout value, string label) in new[]
{
(EditorLayout.Split, "Split-weergave: gereedschappen boven, opslaan onder"),
(EditorLayout.ThreeSplit, "Drie-split: Nieuw en Screencast in een zijbalk"),
(EditorLayout.Single, "Eén werkbalk")
})
{
@@ -365,6 +388,23 @@ public partial class EditorWindow : Window
menu.Items.Add(layout);
if (IsThreeSplit)
{
var side = new MenuItem { Header = "Zijbalk" };
foreach ((Dock dock, string label) in new[] { (Dock.Left, "Links"), (Dock.Right, "Rechts") })
{
var item = new MenuItem { Header = label, IsCheckable = true, IsChecked = _settings.CaptureBarPosition == dock };
item.Click += (_, _) =>
{
_settings.CaptureBarPosition = dock;
ApplyCaptureBarPosition();
};
side.Items.Add(item);
}
menu.Items.Add(side);
}
if (!IsSplitLayout)
{
var position = new MenuItem { Header = "Positie" };
@@ -466,6 +506,7 @@ public partial class EditorWindow : Window
_settings.SplitToolbarOrder = new List<string>();
_settings.ToolbarHidden = new List<string>();
_settings.ToolbarPosition = Dock.Top;
_settings.CaptureBarPosition = Dock.Left;
_settings.ToolbarLocked = true;
ApplyToolbarLayout();
foreach (UIElement item in _toolbarItems.Values)
@@ -1051,6 +1092,7 @@ public partial class EditorWindow : Window
Toolbar.Visibility = visibility;
PropsBar.Visibility = visibility;
ActionBar.Visibility = IsSplitLayout ? visibility : Visibility.Collapsed;
CaptureBar.Visibility = IsThreeSplit ? visibility : Visibility.Collapsed;
if (_toolbarsHidden)
{
ShowTemporaryHint("Werkbalken verborgen. Ctrl+H of rechtsklik op het canvas om ze terug te halen.");
@@ -1630,6 +1672,7 @@ public partial class EditorWindow : Window
ApplyToolbarLayout();
}
ApplyCaptureBarPosition();
ApplySaveButton();
ApplyUploadButton();
}
+1 -1
View File
@@ -18,7 +18,7 @@
<ApplicationManifest>app.manifest</ApplicationManifest>
<Product>kniip</Product>
<Description>Annotatie-editor naast het Windows Knipprogramma</Description>
<Version>1.1.7</Version>
<Version>1.1.8</Version>
<SatelliteResourceLanguages>nl;en</SatelliteResourceLanguages>
<!-- WPF regelt DPI via app.manifest; de WinForms-analyzer is hier niet van toepassing. -->
<NoWarn>$(NoWarn);WFAC010</NoWarn>
+7 -1
View File
@@ -39,7 +39,10 @@ public enum EditorLayout
Single,
/// <summary>Split-weergave: gereedschappen boven, opslaan/kopiëren en zoom onder.</summary>
Split
Split,
/// <summary>Als Split, met Nieuw en Screencast in een zijbalk naast het canvas.</summary>
ThreeSplit
}
public enum ColorMode
@@ -122,6 +125,9 @@ public sealed class AppSettings
/// <summary>Volgorde van de werkbalkitems in de gesplitste indeling (boven, dan onder); leeg betekent de standaardvolgorde.</summary>
public List<string> SplitToolbarOrder { get; set; } = new();
/// <summary>Kant van het canvas (Left of Right) waar de zijbalk van de drie-split-indeling staat.</summary>
public Dock CaptureBarPosition { get; set; } = Dock.Left;
public List<string> ToolbarHidden { get; set; } = new();
/// <summary>Zipline-server waar Uploaden naartoe gaat; leeg betekent geen uploadknop.</summary>
+5
View File
@@ -239,6 +239,11 @@
<CheckBox x:Name="StraightHighlightBox" Content="Markeerstift trekt standaard een rechte horizontale streep (Shift wisselt)" />
<TextBlock Text="Werkbalk" Style="{StaticResource CardTitle}" Margin="0,16,0,6" />
<RadioButton x:Name="LayoutSplitRadio" GroupName="EditorLayout" Content="Split-weergave: gereedschappen boven, opslaan onder" />
<RadioButton x:Name="LayoutThreeSplitRadio" GroupName="EditorLayout" Content="Drie-split: gereedschappen boven, opslaan onder, Nieuw en Screencast opzij" />
<StackPanel Orientation="Horizontal" Margin="22,2,0,4" IsEnabled="{Binding IsChecked, ElementName=LayoutThreeSplitRadio}">
<RadioButton x:Name="CaptureBarLeftRadio" GroupName="CaptureBarPosition" Content="Links" Margin="0,0,16,0" />
<RadioButton x:Name="CaptureBarRightRadio" GroupName="CaptureBarPosition" Content="Rechts" />
</StackPanel>
<RadioButton x:Name="LayoutSingleRadio" GroupName="EditorLayout" Content="Eén werkbalk met gereedschappen en acties" />
<TextBlock Style="{StaticResource Hint}"
Text="Ook te wisselen via rechtsklik op de werkbalk in de editor. Daar kun je knoppen ook verslepen of verbergen." />
+8 -2
View File
@@ -102,7 +102,10 @@ public partial class SettingsWindow : Window
ColorModeDarkRadio.IsChecked = settings.ColorMode == ColorMode.Dark;
ColorModeSystemRadio.IsChecked = settings.ColorMode == ColorMode.System;
LayoutSplitRadio.IsChecked = settings.EditorLayout == EditorLayout.Split;
LayoutSingleRadio.IsChecked = settings.EditorLayout != EditorLayout.Split;
LayoutThreeSplitRadio.IsChecked = settings.EditorLayout == EditorLayout.ThreeSplit;
LayoutSingleRadio.IsChecked = settings.EditorLayout == EditorLayout.Single;
CaptureBarRightRadio.IsChecked = settings.CaptureBarPosition == Dock.Right;
CaptureBarLeftRadio.IsChecked = settings.CaptureBarPosition != Dock.Right;
AutoUpdateCheckBox.IsChecked = settings.CheckForUpdates;
MagnifierBox.IsChecked = settings.ShowMagnifier;
@@ -451,7 +454,10 @@ public partial class SettingsWindow : Window
_settings.ColorMode = ColorModeDarkRadio.IsChecked == true ? ColorMode.Dark
: ColorModeSystemRadio.IsChecked == true ? ColorMode.System
: ColorMode.Light;
_settings.EditorLayout = LayoutSplitRadio.IsChecked == true ? EditorLayout.Split : EditorLayout.Single;
_settings.EditorLayout = LayoutSplitRadio.IsChecked == true ? EditorLayout.Split
: LayoutThreeSplitRadio.IsChecked == true ? EditorLayout.ThreeSplit
: EditorLayout.Single;
_settings.CaptureBarPosition = CaptureBarRightRadio.IsChecked == true ? Dock.Right : Dock.Left;
_settings.CheckForUpdates = AutoUpdateCheckBox.IsChecked == true;
_settings.ShowMagnifier = MagnifierBox.IsChecked == true;
StopListening();