1 parent
136eda40ba
commit
36c55c034c
10 files changed
+90
-12
No files matched your search
@@ -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
|
||||
|
||||
@@ -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
|
||||
```
|
||||
|
||||
|
||||
@@ -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
@@ -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"
|
||||
|
||||
@@ -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">
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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." />
|
||||
|
||||
@@ -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();
|
||||
|
||||
Reference in new issue
Block a user