diff --git a/CHANGELOG.md b/CHANGELOG.md
index 508a34f..26736c6 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -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
diff --git a/README.md b/README.md
index a832a56..dc561e2 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.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
```
diff --git a/build.ps1 b/build.ps1
index 4834157..5343b68 100644
--- a/build.ps1
+++ b/build.ps1
@@ -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
)
diff --git a/installer/Kniip.iss b/installer/Kniip.iss
index 933294c..576dbf5 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.7"
+ #define AppVersion "1.1.8"
#endif
#ifndef PublishDir
#define PublishDir "..\artifacts\publish"
diff --git a/src/Kniip/Editor/EditorWindow.xaml b/src/Kniip/Editor/EditorWindow.xaml
index a3c7421..1bd0ef9 100644
--- a/src/Kniip/Editor/EditorWindow.xaml
+++ b/src/Kniip/Editor/EditorWindow.xaml
@@ -440,6 +440,15 @@
+
+
+
+
+
+
+
+
diff --git a/src/Kniip/Editor/EditorWindow.xaml.cs b/src/Kniip/Editor/EditorWindow.xaml.cs
index ffe2e64..310cb98 100644
--- a/src/Kniip/Editor/EditorWindow.xaml.cs
+++ b/src/Kniip/Editor/EditorWindow.xaml.cs
@@ -52,6 +52,9 @@ public partial class EditorWindow : Window
/// Items die alleen in de gesplitste indeling op een werkbalk staan.
private static readonly HashSet SplitOnlyIds = new() { "SplitSpacer1", "SplitSpacer2" };
+ /// Items die in de drie-split-indeling in de zijbalk staan in plaats van de onderste werkbalk.
+ private static readonly HashSet 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 AllToolbarItems => ToolbarItems.Items.Concat(ActionItems.Items);
+ private bool IsThreeSplit => _settings.EditorLayout == EditorLayout.ThreeSplit;
+
+ private IEnumerable AllToolbarItems => ToolbarItems.Items.Concat(ActionItems.Items).Concat(CaptureItems.Items);
/// Items volgens de opgeslagen volgorde van de huidige indeling over de bovenste en onderste werkbalk verdelen.
private void ApplyToolbarLayout()
{
bool split = IsSplitLayout;
+ bool threeSplit = IsThreeSplit;
_appliedLayout = _settings.EditorLayout;
List 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 MergeToolbarOrder(IReadOnlyList saved, IReadOnlyList defaults)
{
List 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();
_settings.ToolbarHidden = new List();
_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();
}
diff --git a/src/Kniip/Kniip.csproj b/src/Kniip/Kniip.csproj
index df0d634..d516c1c 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.7
+ 1.1.8
nl;en
$(NoWarn);WFAC010
diff --git a/src/Kniip/Settings/AppSettings.cs b/src/Kniip/Settings/AppSettings.cs
index 411f517..9f0da4e 100644
--- a/src/Kniip/Settings/AppSettings.cs
+++ b/src/Kniip/Settings/AppSettings.cs
@@ -39,7 +39,10 @@ public enum EditorLayout
Single,
/// Split-weergave: gereedschappen boven, opslaan/kopiëren en zoom onder.
- Split
+ Split,
+
+ /// Als Split, met Nieuw en Screencast in een zijbalk naast het canvas.
+ ThreeSplit
}
public enum ColorMode
@@ -122,6 +125,9 @@ public sealed class AppSettings
/// Volgorde van de werkbalkitems in de gesplitste indeling (boven, dan onder); leeg betekent de standaardvolgorde.
public List SplitToolbarOrder { get; set; } = new();
+ /// Kant van het canvas (Left of Right) waar de zijbalk van de drie-split-indeling staat.
+ public Dock CaptureBarPosition { get; set; } = Dock.Left;
+
public List ToolbarHidden { get; set; } = new();
/// Zipline-server waar Uploaden naartoe gaat; leeg betekent geen uploadknop.
diff --git a/src/Kniip/Settings/SettingsWindow.xaml b/src/Kniip/Settings/SettingsWindow.xaml
index a91d3bf..3b81cd6 100644
--- a/src/Kniip/Settings/SettingsWindow.xaml
+++ b/src/Kniip/Settings/SettingsWindow.xaml
@@ -239,6 +239,11 @@
+
+
+
+
+
diff --git a/src/Kniip/Settings/SettingsWindow.xaml.cs b/src/Kniip/Settings/SettingsWindow.xaml.cs
index 6c76932..2f789d9 100644
--- a/src/Kniip/Settings/SettingsWindow.xaml.cs
+++ b/src/Kniip/Settings/SettingsWindow.xaml.cs
@@ -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();