Compare commits
2
Commits
1.1.5
...
2f5c434623
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2f5c434623 | ||
|
|
89b84d8479 |
No files matched your search
@@ -19,7 +19,7 @@ todos:
|
||||
status: completed
|
||||
- id: release
|
||||
content: CHANGELOG 1.1.5-item, build.ps1 draaien, commit/tag 1.1.5 en pushen
|
||||
status: in_progress
|
||||
status: completed
|
||||
isProject: false
|
||||
---
|
||||
|
||||
|
||||
+2
-2
@@ -6,9 +6,9 @@ Alle noemenswaardige wijzigingen in kniip staan in dit bestand. De nieuwste vers
|
||||
|
||||
### Nieuw
|
||||
|
||||
- **Werkbalkindeling zoals ShareX.** De editor kan nu ook twee werkbalken tonen: bovenaan de gereedschappen met daaronder de eigenschappen (kleur, dikte, lijnstijl), en onderaan een balk met **Nieuw** en **Screencast** links, de zoomknoppen in het midden en **Instellingen**, **Opslaan**, **Uploaden** en **Kopiëren** rechts. Kies de indeling in de instellingen onder **Editor** > **Werkbalk**, of klik met rechts op een werkbalk en kies **Indeling**.
|
||||
- **Split-weergave.** De editor kan nu ook twee werkbalken tonen. Bovenaan staan de gereedschappen in het midden, met **Instellingen** rechts en daaronder de eigenschappen (kleur, dikte, lijnstijl). Onderaan staan **Nieuw** en **Screencast** links, **Opslaan**, **Uploaden** en **Kopiëren** in het midden en de zoomknoppen rechts. Kies de indeling in de instellingen onder **Editor** > **Werkbalk**, of klik met rechts op een werkbalk en kies **Indeling**.
|
||||
- In beide werkbalken kun je knoppen verslepen (na ontgrendelen) en verbergen, net als bij één werkbalk. Beide indelingen onthouden hun eigen volgorde.
|
||||
- De standaardindeling blijft één werkbalk.
|
||||
- Split-weergave is de nieuwe standaard. Wil je de vertrouwde indeling terug, kies dan **Eén werkbalk**.
|
||||
- **Vergrootglas bij het kiezen van een gebied.** Bij het knippen van een rechthoek en bij het kiezen van een opnamegebied voor een screencast loopt naast de muisaanwijzer een rond vergrootglas mee. Je ziet de pixels rond de aanwijzer vergroot met een raster en een blauwe kruisdraad, en daaronder de schermcoördinaten (X en Y). Zo zet je een hoek precies op de goede pixel. Bij **Venster knippen** verschijnt het vergrootglas niet.
|
||||
- Het vergrootglas staat standaard aan. Wil je het niet, zet dan in de instellingen onder **Sneltoetsen** > **Gebied kiezen** het vinkje **Vergrootglas tonen bij het kiezen van een gebied** uit.
|
||||
- **Schermafdruk vertraging.** In het systeemvakmenu staat **Schermafdruk vertraging: 0s**. Stel daar met de schuifbalk of het getalveld 0 tot 60 seconden in. **Rechthoek knippen** en **Venster knippen** wachten dan zo lang voordat het scherm bevriest, ook via de sneltoets. Zo kun je eerst een menu openklappen of een tooltip laten verschijnen.
|
||||
|
||||
@@ -5,11 +5,11 @@
|
||||
<h1 align="center">kniip</h1>
|
||||
|
||||
<p align="center">
|
||||
Annotatie-editor naast het Windows Knipprogramma
|
||||
<b>kniip</b> is een uitgebreide annotatie-editor voor Windows. Leg iets op je scherm vast, maak het duidelijk met annotaties en deel het als afbeelding, video, GIF of link.
|
||||
</p>
|
||||
|
||||
<p align="center">
|
||||
<a href="https://git.hibbit.net/rogier/kniip/releases"><strong>Download de installer</strong></a>
|
||||
<a href="https://git.hibbit.net/rogier/kniip/releases"><strong>Download: kniip</strong></a>
|
||||
</p>
|
||||
|
||||
---
|
||||
@@ -17,9 +17,19 @@
|
||||
kniip is een annotatie-editor die naast het Windows Knipprogramma werkt. Maak een schermafbeelding, voeg pijlen, tekst, markeringen, stappen, emoji of vervaging toe en sla het resultaat op, kopieer het of upload het. kniip kan ook schermopnames maken en die exporteren als video of GIF.
|
||||
|
||||
<p align="center">
|
||||
<a href="screenshot/knipp.png"><img src="screenshot/knipp.png" alt="Screenshot van de kniip-editor" width="720"></a>
|
||||
<a href="screenshot/kniip.png"><img src="screenshot/kniip.png" alt="Screenshot van de kniip-editor" width="720"></a>
|
||||
</p>
|
||||
|
||||
## Wat kan kniip?
|
||||
|
||||
- **Knippen tot op de pixel.** Rechthoek of venster, met een vergrootglas voor precieze hoeken en een instelbare vertraging om eerst een menu of tooltip te openen.
|
||||
- **Aantekenen.** Pijlen en lijnen die je kunt buigen, tekst, vormen, genummerde stappen, markeerstift, emoji en vervaging.
|
||||
- **Screencasts.** Neem een deel van je scherm op en exporteer als video of GIF.
|
||||
- **Delen.** Opslaan, kopiëren naar het klembord of uploaden en de link meteen delen.
|
||||
- **Geschiedenis.** Vind eerdere knipsels en uploads terug, met miniaturen en zoeken.
|
||||
- **Jouw werkbalk.** Kies een of twee werkbalken, versleep knoppen en verberg wat je niet gebruikt.
|
||||
- **Altijd bij.** kniip meldt zelf wanneer er een nieuwe versie is en werkt zichzelf bij met een klik.
|
||||
|
||||
## Downloaden
|
||||
|
||||
| Versie | Installer |
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 29 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 23 KiB |
@@ -12,14 +12,19 @@ public partial class MagnifierControl : UserControl
|
||||
private const int Pixels = 15;
|
||||
private const double CursorOffset = 20;
|
||||
|
||||
private static MagnifierControl? _visible;
|
||||
|
||||
private readonly WriteableBitmap _zoom = new(Pixels, Pixels, 96, 96, PixelFormats.Bgra32, null);
|
||||
private readonly byte[] _buffer = new byte[Pixels * Pixels * 4];
|
||||
private readonly TranslateTransform _offset = new();
|
||||
|
||||
public MagnifierControl()
|
||||
{
|
||||
InitializeComponent();
|
||||
Zoom.Source = _zoom;
|
||||
RenderTransform = _offset;
|
||||
Visibility = Visibility.Collapsed;
|
||||
Unloaded += (_, _) => Hide();
|
||||
}
|
||||
|
||||
/// <param name="frozen">Vastgelegd beeld van het scherm.</param>
|
||||
@@ -29,6 +34,19 @@ public partial class MagnifierControl : UserControl
|
||||
/// <param name="area">Grootte van het venster (DIP).</param>
|
||||
public void Show(BitmapSource frozen, System.Drawing.Point relative, System.Drawing.Point screen, Point cursor, Size area)
|
||||
{
|
||||
// Elk scherm heeft een eigen overlay; een overlay krijgt soms muisbewegingen terwijl de aanwijzer op een ander scherm staat.
|
||||
if (relative.X < 0 || relative.Y < 0 || relative.X >= frozen.PixelWidth || relative.Y >= frozen.PixelHeight)
|
||||
{
|
||||
Hide();
|
||||
return;
|
||||
}
|
||||
|
||||
if (_visible != this)
|
||||
{
|
||||
_visible?.Hide();
|
||||
_visible = this;
|
||||
}
|
||||
|
||||
CopyPixels(frozen, relative);
|
||||
CoordinateText.Text = $"X: {screen.X} Y: {screen.Y}";
|
||||
Visibility = Visibility.Visible;
|
||||
@@ -47,10 +65,18 @@ public partial class MagnifierControl : UserControl
|
||||
top = cursor.Y - CursorOffset - size.Height;
|
||||
}
|
||||
|
||||
Margin = new Thickness(Math.Max(0, left), Math.Max(0, top), 0, 0);
|
||||
_offset.X = Math.Max(0, left);
|
||||
_offset.Y = Math.Max(0, top);
|
||||
}
|
||||
|
||||
public void Hide() => Visibility = Visibility.Collapsed;
|
||||
public void Hide()
|
||||
{
|
||||
Visibility = Visibility.Collapsed;
|
||||
if (_visible == this)
|
||||
{
|
||||
_visible = null;
|
||||
}
|
||||
}
|
||||
|
||||
private void CopyPixels(BitmapSource frozen, System.Drawing.Point center)
|
||||
{
|
||||
|
||||
@@ -355,6 +355,10 @@
|
||||
<TextBlock x:Name="CopyLabel" Text="Kopiëren" Margin="6,0,0,0" />
|
||||
</StackPanel>
|
||||
</Button>
|
||||
|
||||
<!-- Alleen in de gesplitste indeling: gereedschappen in het midden, Instellingen rechts -->
|
||||
<local:ToolbarSpacer local:ToolbarPanel.ItemId="SplitSpacer1" />
|
||||
<local:ToolbarSpacer local:ToolbarPanel.ItemId="SplitSpacer2" />
|
||||
</local:ToolbarPanel>
|
||||
</Border>
|
||||
|
||||
|
||||
@@ -38,17 +38,20 @@ public partial class EditorWindow : Window
|
||||
/// <summary>Standaardvolgorde in de gesplitste indeling: eerst de bovenste werkbalk, dan de onderste.</summary>
|
||||
private static readonly string[] DefaultSplitOrder =
|
||||
{
|
||||
"Select", "Sep1", "Rectangle", "Ellipse", "Line", "Arrow", "Text", "Step", "Cursor", "Emoji", "Highlight", "Blur",
|
||||
"Sep2", "Crop", "Sep3", "Undo", "Redo", "Delete", "Sep4", "Clear",
|
||||
"New", "Screencast", "Spacer", "ZoomOut", "Zoom", "ZoomIn", "Spacer2", "Settings", "Sep5", "Save", "Upload", "Copy"
|
||||
"SplitSpacer1", "Select", "Sep1", "Rectangle", "Ellipse", "Line", "Arrow", "Text", "Step", "Cursor", "Emoji", "Highlight", "Blur",
|
||||
"Sep2", "Crop", "Sep3", "Undo", "Redo", "Delete", "Sep4", "Clear", "SplitSpacer2", "Settings",
|
||||
"New", "Screencast", "Spacer", "Save", "Upload", "Copy", "Sep5", "Spacer2", "ZoomOut", "Zoom", "ZoomIn"
|
||||
};
|
||||
|
||||
/// <summary>Items die in de gesplitste indeling op de onderste werkbalk staan.</summary>
|
||||
private static readonly HashSet<string> SplitBottomIds = new()
|
||||
{
|
||||
"New", "Screencast", "Spacer", "ZoomOut", "Zoom", "ZoomIn", "Spacer2", "Settings", "Sep5", "Save", "Upload", "Copy"
|
||||
"New", "Screencast", "Spacer", "Save", "Upload", "Copy", "Sep5", "Spacer2", "ZoomOut", "Zoom", "ZoomIn"
|
||||
};
|
||||
|
||||
/// <summary>Items die alleen in de gesplitste indeling op een werkbalk staan.</summary>
|
||||
private static readonly HashSet<string> SplitOnlyIds = new() { "SplitSpacer1", "SplitSpacer2" };
|
||||
|
||||
private readonly EditorDocument _doc;
|
||||
private readonly UndoStack _undo = new();
|
||||
private readonly AppSettings _settings;
|
||||
@@ -160,7 +163,10 @@ public partial class EditorWindow : Window
|
||||
foreach (UIElement item in ToolbarItems.Items)
|
||||
{
|
||||
_toolbarItems[ItemId(item)] = item;
|
||||
_defaultToolbarOrder.Add(ItemId(item));
|
||||
if (!SplitOnlyIds.Contains(ItemId(item)))
|
||||
{
|
||||
_defaultToolbarOrder.Add(ItemId(item));
|
||||
}
|
||||
}
|
||||
|
||||
_defaultSplitOrder.AddRange(DefaultSplitOrder.Where(_toolbarItems.ContainsKey));
|
||||
@@ -192,12 +198,11 @@ public partial class EditorWindow : Window
|
||||
|
||||
ToolbarItems.Children.Clear();
|
||||
ActionItems.Children.Clear();
|
||||
foreach (string id in order)
|
||||
foreach (string id in order.Where(id => split || !SplitOnlyIds.Contains(id)))
|
||||
{
|
||||
(split && SplitBottomIds.Contains(id) ? ActionItems : ToolbarItems).Children.Add(_toolbarItems[id]);
|
||||
}
|
||||
|
||||
ToolbarItems.HorizontalAlignment = split ? HorizontalAlignment.Center : HorizontalAlignment.Stretch;
|
||||
ActionBar.Visibility = split && !_toolbarsHidden ? Visibility.Visible : Visibility.Collapsed;
|
||||
ApplyToolbarPosition();
|
||||
}
|
||||
@@ -348,8 +353,8 @@ public partial class EditorWindow : Window
|
||||
var layout = new MenuItem { Header = "Indeling" };
|
||||
foreach ((EditorLayout value, string label) in new[]
|
||||
{
|
||||
(EditorLayout.Single, "Eén werkbalk"),
|
||||
(EditorLayout.Split, "Gesplitst: gereedschappen boven, opslaan onder (zoals ShareX)")
|
||||
(EditorLayout.Split, "Split-weergave: gereedschappen boven, opslaan onder"),
|
||||
(EditorLayout.Single, "Eén werkbalk")
|
||||
})
|
||||
{
|
||||
var item = new MenuItem { Header = label, IsCheckable = true, IsChecked = _settings.EditorLayout == value };
|
||||
|
||||
@@ -38,7 +38,7 @@ public enum EditorLayout
|
||||
/// <summary>Eén werkbalk met gereedschappen en acties.</summary>
|
||||
Single,
|
||||
|
||||
/// <summary>Gereedschappen boven, opslaan/kopiëren en zoom onder (zoals ShareX).</summary>
|
||||
/// <summary>Split-weergave: gereedschappen boven, opslaan/kopiëren en zoom onder.</summary>
|
||||
Split
|
||||
}
|
||||
|
||||
@@ -105,7 +105,7 @@ public sealed class AppSettings
|
||||
public List<string> ToolbarOrder { get; set; } = new();
|
||||
|
||||
/// <summary>Indeling van de werkbalk(en) in de editor.</summary>
|
||||
public EditorLayout EditorLayout { get; set; } = EditorLayout.Single;
|
||||
public EditorLayout EditorLayout { get; set; } = EditorLayout.Split;
|
||||
|
||||
/// <summary>Volgorde van de werkbalkitems in de gesplitste indeling (boven, dan onder); leeg betekent de standaardvolgorde.</summary>
|
||||
public List<string> SplitToolbarOrder { get; set; } = new();
|
||||
|
||||
@@ -256,8 +256,8 @@
|
||||
<TextBlock Text="Editor" Style="{StaticResource CardTitle}" />
|
||||
<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="LayoutSingleRadio" GroupName="EditorLayout" Content="Eén werkbalk met gereedschappen en acties" />
|
||||
<RadioButton x:Name="LayoutSplitRadio" GroupName="EditorLayout" Content="Gesplitst zoals ShareX: gereedschappen boven, opslaan onder" />
|
||||
<TextBlock Style="{StaticResource Hint}"
|
||||
Text="Ook te wisselen via rechtsklik op de werkbalk in de editor. Daar kun je knoppen ook verslepen of verbergen." />
|
||||
</StackPanel>
|
||||
|
||||
Reference in new issue
Block a user