- 📂 auch bei Ordnern: verschiebt den Ordner samt Unterordnern und
Notizbüchern in einen anderen Ordner oder auf die oberste Ebene
- Nicht in sich selbst oder einen eigenen Unterordner; gibt es am Ziel schon
einen gleichnamigen Ordner, kommt eine Meldung statt einer Zusammenlegung
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Beliebig verschachtelte Ordner (z. B. 3. Semester › Mathe) im
Dokumenten-Manager: Pfadleiste zum Navigieren, Ordner anlegen, umbenennen,
löschen (Inhalt rückt eine Ebene nach oben) und Notizbücher mit 📂 verschieben
- Neue Notizbücher landen im angezeigten Ordner, importierte PDFs neben dem
geöffneten Notizbuch; der Manager öffnet im Ordner des aktuellen Notizbuchs
- Ordner sind logisch (library.json im Notizbuch-Basisordner), Notizbuch-
Dateien werden nie verschoben; fehlt die Datei, liegt alles oben
- Die ganze Titelfläche einer Zeile öffnet Notizbuch bzw. Ordner
- Ein ganz neues Standard-Notizbuch wird sofort gespeichert (erschien sonst
bis zur ersten Änderung als „beschädigt“)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Ein Finger, der eine halbe Sekunde still auf dem Blatt liegt, öffnet ein
Kontextmenü mit „Einfügen“ und „Bild aus Datei …“ (wie in Rnote)
- Bild, Text oder kopierte Objekte aus der Zwischenablage landen an der
gedrückten Stelle (Strg+V weiterhin in der Mitte)
- Meldung, wenn die Zwischenablage leer ist
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Jede Farbe der Werkzeugleiste (Stifte, Textmarker, Text) lässt sich anpassen:
gewählte Farbe erneut antippen, Vorgabe oder mit 🎨 frei wählen (Farbwähler
direkt im Popover). Die Leiste merkt sich die Farben (ui.json).
- Tintenfarben sind sRGB-Werte wie im Export: Gezeichnet wird ohne
sRGB-Umrechnung der GPU, Papier und Muster rechnet der Shader um. Schwarz ist
am Bildschirm jetzt schwarz statt grau, der Textmarker mischt wie im PDF.
- PDF-Export: Musterfarbe wird nach sRGB umgerechnet (war zu dunkel).
- Auswahl wird in die Farben der Stifte umgefärbt.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- #15: Koordinatensystem ohne Kerbe am Ursprung (Achsen beginnen eine halbe
Linienbreite hinter dem Ursprung; im PDF ein Linienzug mit spitzer Ecke)
- #17: Jeder Strich deckt ein Pixel nur einmal (Stencil-Puffer), der
Textmarker wird innerhalb eines Strichs nicht dunkler. Im PDF-Export ist der
Textmarker jetzt halbtransparent statt deckend.
- #11: ➕ in der Werkzeugleiste fügt nach der aktuellen Seite eine Seite ein
- #12: Seite löschen im ☰-Menü mit Rückfrage, in der Sitzung wiederherstellbar
- #14: Seiten liegen lückenlos untereinander, eine dunkle Linie markiert die Grenze
- #19: Vier Stifte mit eigener Farbe und Stärke, die sich Änderungen merken
(ui.json); Blätterpfeile nur noch in der Einzelseitenansicht
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Karo, Linien und Punkte waren Dreiecke mit 0,15 mm breiten Linien –
schmaler als ein Bildschirmpixel. Je nach Lage auf dem Pixelraster
erschienen sie stärker, schwächer oder versetzt, die Abstände wirkten
unregelmäßig. Jetzt berechnet ein Fragment-Shader das Muster für jedes
Pixel aus der Seitenkoordinate: Linien und Punkte sind mindestens ein
Pixel breit, kantengeglättet und gleichmäßig; bei sehr kleinen Abständen
(weit herausgezoomt) blendet das Muster aus. Gemessen: Karo-Abstand
13,5 ± 0,04 Pixel bei gleicher Linienstärke.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Die Klickfläche zum Öffnen lag über der ganzen Zeile und wurde nach den
Knöpfen angelegt; egui gibt Klicks dem zuletzt angelegten Element, die
Knöpfe ✏ und 🗑 bekamen daher nie einen Klick. Jetzt öffnet nur der
Titelbereich das Notizbuch.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Die Zeichenfläche wird mit 4× Multisampling gezeichnet und in die
Fensterfläche aufgelöst; Strichkanten, Formen und Bildränder sind damit
kantengeglättet (ohne Unterstützung des Formats wie bisher). Runde
Strichenden und Punkte sind feiner unterteilt (10 statt 4 Schritte je
Viertelkreis, 20 statt 8 für Punkte) und wirken auch stark vergrößert rund.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Der fertige Strich entsteht jetzt aus den ungefilterten Eingabepunkten mit
einer symmetrischen 3-Punkt-Glättung (ohne Verzögerung); der 1€-Filter
dient nur der Anzeige während des Schreibens. Der Filter arbeitet mit der
Geschwindigkeit in der Ebene statt je Achse und reagiert schneller. Ecken
werden nur zwischen Abschnitten ab 0,6 mm getrennt. Ein „o“ mit 0,8 mm
Radius behielt bisher im Mittel 6,1 mm/10 statt 8 und bekam zwei Zacken,
jetzt 7,8 ohne Zacken.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
README, ARCHITECTURE.md und FILE_FORMAT.md beschreiben jetzt alle
Funktionen bis v0.11 (Text, Bilder, PDF-Import, Seitenformate, Lineal,
durchgehendes Scrollen, Musterfarben, Dateiformat-Version 8). Werbliche
Formulierungen durch überprüfbare Angaben ersetzt, auch in Paket-
beschreibung, Desktop-Datei, AppStream-Metadaten und Release-Notizen.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Im ☰-Menü unter „Karos, Linien und Punkte“: hell (bisher), mittel,
kräftig, blau oder grün – passend zur gewählten Papierfarbe. Die Wahl
wird gespeichert und gilt auch für PDF-, PNG- und SVG-Export (Issue #6).
Punkte des Punktrasters sind am Bildschirm jetzt 0,4 mm groß wie im
Export (bisher 0,25 mm, beim Herauszoomen kaum sichtbar).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Seiten haben jetzt eine eigene Größe. Beim PDF-Import bleiben Hochformat-
Seiten DIN A4; Querformat-Seiten wie PowerPoint-Folien bekommen eine
Querformat-Seite (297 mm breit, Höhe nach Seitenverhältnis) ohne leeren
Streifen darunter (Issue #4). Eingefügte und angehängte Seiten übernehmen
das Format der aktuellen Seite.
Anzeige: Maßstab aus dem Rahmen aller Seiten, die durchgehende Ansicht
stapelt verschieden große Seiten zentriert untereinander. Export (PDF,
PNG, SVG) in der jeweiligen Seitengröße. Dateiformat-Version 8 (Größe in
Seite und Manifest; A4-Seiten speichern keine Größe).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
„Neue Seite einfügen“ (☰-Menü und Seitenauswahl) legt die leere Seite
direkt hinter der aktuellen an und wechselt dorthin, statt sie ans Ende
zu hängen – etwa zwischen zwei Folien eines PDFs (Issue #3).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Bisher reagierte das Auswahlwerkzeug nur auf Maus und Finger (Issue #2).
Drücken, Ziehen und Loslassen der Auswahl sind jetzt gemeinsame Funktionen
für Maus, Finger und Stift.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Höchster Zoom 1000 % statt 500 % (Issue #1). Importierte PDF-Seiten werden
mit doppelter Auflösung nachgerendert, sobald die Standardauflösung
sichtbar vergrößert würde; bis dahin bleibt sie als Ersatz sichtbar.
Texte werden bis 8 Pixel je Einheit gerastert.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Textfelder per Tastatur (T): normale oder Code-Schrift, 8–36 pt, Farben
der Stiftpalette, Umbruch am rechten Feldrand. Textfelder sind Objekte
mit vier Ecken wie Bilder (verschieben, drehen, skalieren) und werden als
Textur gerastert; im PDF-Export echter, durchsuchbarer Text mit
eingebetteter Schrift. Kopierter Text wird mit Strg+V zum Textfeld.
Dateiformat-Version 7.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Seiten hängen untereinander (8 mm Abstand) und werden mit Mausrad, Finger
oder Touchpad fließend gescrollt; Strg+Mausrad zoomt. Sichtbare Nachbarseiten
werden bei Bedarf geladen und mit eigener Kamera gezeichnet. Die Seite in der
Fenstermitte wird nach dem Scrollen zur aktuellen; Zeichnen, Radieren und
Auswählen auf einer Nachbarseite wechseln zuerst dorthin. Wer im unteren
Fünftel der letzten Seite schreibt, bekommt automatisch eine neue Seite.
Scrollen bleibt auf das Notizbuch begrenzt. Abschaltbar im ☰-Menü (Ansicht).
Nie gespeicherte, angehängte Seiten laden jetzt als leere Seite statt als
schreibgeschützte Fehlerseite.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Lineal ein-/ausblenden über die Werkzeugleiste oder Taste L
(26 cm, mm-/cm-Skala an beiden Kanten, Winkelanzeige)
- Fläche ziehen verschiebt, Griff ⟳ dreht; 15°-Schritte rasten ein
- Striche, die bis 6 mm neben einer Längskante beginnen, folgen bis zum
Abheben exakt der Kante (Stift, Textmarker, Formen); die Tinte liegt
um die halbe Strichbreite neben dem Lineal
- Lineal bleibt beim Blättern an seiner Stelle; nur seine Fläche und
der Griff nehmen Eingaben an, an den Kanten wird gezeichnet
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Radierer-Modus „✂ Teilstrich“: entfernt nur den überstrichenen Teil, der Rest
bleibt in Stücken; ein Radierzug ist ein Undo-Schritt, Formen werden ganz radiert
- ☰ → „Seite als PNG / PNG transparent / SVG“ nach ~/Documents (über den
PDF-Export gerendert: Bilder und importierte PDF-Seiten inklusive)
- Strg+C legt die Auswahl zusätzlich als Bild in die Systemzwischenablage
(für Chat, Mail, Office); in ink-notes fügt Strg+V weiter die Objekte ein
- Seitentitel in der Seitenübersicht, Ansicht „Inhalt“ als Inhaltsverzeichnis,
Lesezeichen-Ecke an benannten Seiten, Titel im Fenstertitel und als
PDF-Lesezeichen (Umlaute als UTF-16)
- Dateiformat-Version 6 (Seitentitel)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Mit rust-version 1.92 meldet Clippy is_none_or statt map_or(true, …) und
as_chunks statt chunks_exact mit fester Größe; die CI bricht bei Warnungen ab.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- ☰ → „PDF importieren …“ oder PDF ins Fenster ziehen: neues Notizbuch
mit einer Seite je PDF-Seite, die Originalseite als Hintergrund
- Querformat-Folien liegen oben auf dem A4-Blatt, darunter ist Platz für
Notizen; gedrehte Seiten (/Rotate) erscheinen wie im PDF-Betrachter
- Anzeige mit hayro (reines Rust) im Hintergrund-Thread, nächste Seite
wird vorab gerendert
- PDF-Export legt die Originalseiten als Vektorgrafik (Form-XObject via
lopdf) unter Bilder und Tinte; nicht übernehmbare Seiten (z. B.
verschlüsselt) werden als Bild mit 200 dpi eingebettet
- Dateiformat-Version 5 (pdf_background an der Seite)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Bilder per ☰ → „Bild einfügen …“ (Strg+I, eingebaute Dateiauswahl),
Strg+V aus der Systemzwischenablage oder durch Ziehen ins Fenster
- Bilder sind Objekte mit vier Ecken: verschieben, drehen, skalieren,
kopieren, löschen und Undo über die bestehende Auswahl
- Gespeichert einmalig unter ihrer Prüfsumme in <Notizbuch>/assets
(JPEG unverändert, sonst PNG); Dateiformat-Version 4
- GPU-Darstellung mit Mipmaps unter der Tinte; Radierer und Umfärben
lassen Bilder unberührt, Tinte auf Bildern hat beim Antippen Vorrang
- PDF-Export: JPEG verlustfrei eingebettet, sonst bis 300 dpi
- Strg+V: die jüngste Kopie gewinnt (Systembild oder interne Objekte);
Bilder werden beim Einfügen in ein anderes Notizbuch mitkopiert
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Radierer: Modus „Nur Textmarker“ (gilt auch für Stiftrückseite und Seitentaste)
- Striche speichern jetzt ihr Werkzeug; bisher wurde jeder Strich als "pen"
gespeichert. Ältere Textmarker werden an der Halbtransparenz erkannt.
- Papierfarben Weiß/Creme/Dunkelgrau/Schwarz (nur Anzeige); auf dunklem Papier
hellt der Shader dunkle Tinte auf (HSL-Helligkeit gespiegelt)
- Einstellbare Druckkurve (weich/hart, Mindestdruck) mit Vorschau
- Einstellungen in ui.json; ☰-Menü scrollt bei kleinen Fenstern
- Test prüft den WGSL-Shader mit naga
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Ellipse
- Achsen aus der Hauptkomponentenanalyse des gleichmäßig abgetasteten Strichs,
Halbachsen aus der Ausdehnung (2.–98. Perzentil); fast runde Formen
(Achsenverhältnis ≥ 0,85) bleiben Kreise; leicht schiefe werden gerade
- konkurriert im Formvergleich mit Kreis, Rechteck, Dreieck, Raute, Vieleck
Pfeil / Doppelpfeil
- in einem Zug gezeichnet: langer Schaft, an einem oder beiden Enden
Widerhaken auf beiden Seiten (10°–80° schräg nach hinten); T-Enden und
Zickzack sind keine Pfeile
- Schaft wird über fast gerade weiterlaufende Punkte verlängert (die
Vereinfachung teilt ihn sonst kurz vor der Spitze)
- Spitzen über die gemeinsame arrow_head-Geometrie, Schaft endet an der Basis
Außerdem: Drehen/Skalieren/Verschieben, PDF-Export, Namen für die
Einrast-Meldung; Dateiformat-Version 3, damit ältere App-Versionen das
Notizbuch sauber ablehnen statt Seiten mit neuen Formen für beschädigt zu
halten.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Die Achsenlinien liefen in voller Strichbreite bis zur Spitze und überdeckten
sie; zudem war die Spitze klein und breit (~67° Öffnung).
- Gemeinsame Pfeilspitzen-Geometrie (arrow_head) für Bildschirm und PDF:
~4 mm lang (dicke Linien länger, höchstens 1/5 der Achse), ~40° Öffnung
- Achsen enden an der Basis der Spitze
- PDF-Export nutzt dieselben Maße (vorher eigene, abweichende Werte)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Unter WSLg trennt der Wayland-Compositor die Verbindung, kurz nachdem die App
ein Bild über Vulkan übergibt ("Connection reset by peer", ExitFailure). Über
X11 (Xwayland) läuft die App stabil – deshalb funktionierte sie als root, wo
der Wayland-Socket nicht gefunden wird und winit auf X11 ausweicht.
- WSL-Erkennung (WSL_DISTRO_NAME/WSL_INTEROP, /proc/sys/kernel/osrelease)
- Unter WSL mit gesetztem DISPLAY wird die Ereignisschleife mit X11 erzeugt
- INK_NOTES_DISPLAY=x11|wayland übersteuert die Wahl
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Ohne Zugriff auf die Grafikkarte (z. B. Benutzer nicht in der Gruppe render)
lieferte EGL/Zink zunächst Darstellungsmodi, später eine leere Liste; die
nächste Neueinrichtung der Surface ließ wgpu abstürzen ("Requested present
mode Mailbox is not in the list of supported present modes: []").
- Adapter der Reihe nach prüfen (GPU, dann Software-Renderer); nur Adapter
mit Formaten und Darstellungsmodi für das Fenster werden genommen
- Darstellungsmodus: Mailbox, sonst Fifo, sonst der erste angebotene
- Bei Größenänderung/verlorener Surface Fähigkeiten neu abfragen statt blind
neu einzurichten; ohne Modi wird nicht eingerichtet (einmalige Meldung)
- Ohne nutzbaren Adapter verständliche Meldung (Gruppe render, /dev/dri,
Software-Renderer, WGPU_BACKEND) statt Panic; WGPU_BACKEND wird beachtet
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Eine erkannte Form ersetzt den Strich nur noch, wenn sie ihn gut beschreibt
(mittlere Abweichung ≤ 4 % der Strichdiagonale, gemessen gegen den
Linienzug der Form). Vorher wurde fast jeder geschlossene Strich umgewandelt
(Herz → Kreis, Stern/Spirale → Oktaeder, Wolke → Dreieck).
- Vielecke verlangen echte Ecken: Die Richtungsänderung muss sich an den Ecken
konzentrieren; glatte Ovale werden so nicht mehr zu Sechs-/Achtecken.
- Vielecke konkurrieren mit Kreis, Dreieck, Rechteck und Raute (gewichtet:
Rechteck vor Raute/Vieleck, Vieleck vor Kreis); überzählige Punkte der
Vereinfachung (Strichende vor dem Start, Punkte auf einer Geraden) entfallen.
- Tests: Freiformen bleiben unverändert, Fünf-/Sechs-/Achtecke, Ovale;
jeder Einzeldetektor-Test prüft zusätzlich die vollständige Erkennung.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Kreis, Dreieck, Rechteck und Raute konkurrieren; gewählt wird die Form,
deren Kontur am besten zu den Punkten passt (RMS-Abweichung). Vorher gewann
der Kreis immer, weil auch Quadrate nur ~10 % Radiusschwankung haben, und
die Dreieckserkennung griff gestreckte Rechtecke ab.
- Rechteckerkennung über das kleinste umschließende Rechteck (alle Drehwinkel,
Ausreißer-robust), Kanten auf den Median der Punkte; verlangt gezeichnete
Ecken und enge Passung, damit Ovale und Kritzeleien keine Rechtecke werden.
Die alte Variante schnitt bei kleinen/zittrigen Strichen die Ecken ab.
- extract_k_corners wählte die geradesten statt der markantesten Punkte
(Sortierung verkehrt herum); betrifft auch Dreieck und Raute.
- Rechteck wird der Raute vorgezogen, wenn es fast so gut passt.
- Oktaeder nur noch, wenn keine geschlossene Form gut passt.
- Tests mit nachgebildeten Freihandstrichen: Rechtecke in vielen Größen,
Seitenverhältnissen und Drehungen, mit runden Ecken, schiefen Kanten und
Überstrich; Kreise, Dreiecke; Ellipsen und Freiformen nie als Rechteck.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Behebt Datenverlust nach Neustart auf einer späteren Seite (v0.2.3 – v0.3.2); Seitenauswahl mit Vorschaubildern.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Kacheln zeigen eine verkleinerte A4-Vorschau jeder Seite (Striche als
Linien, Textmarker halbtransparent, volle Seiten auf ~1500 Punkte
ausgedünnt), Seitenzahl darunter, aktuelle Seite blau umrandet
- Noch nicht geladene Seiten werden bei offener Seitenauswahl nachgeladen
(UiAction::LoadAllPages)
- Kachelgröße über PAGE_TILE (vorher feste Werte)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Beim Start wurde nur die erste Seite geladen. War zuletzt eine spätere Seite
offen, war sie nach dem Neustart ein leerer, ungeladener Platzhalter: Das
Blatt erschien leer, und Zeichnen/Radieren/Hintergrund wechseln speicherte
den Platzhalter und überschrieb den bisherigen Inhalt der Seite.
- load_notebook lädt zusätzlich die aktuelle Seite
- Autosave schreibt nie ungeladene Platzhalter (Schutz ging beim Merge des
Storage-Branches verloren)
- Regressionstests für beide Fälle
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Dialoge (Notizbücher, Updates, Warnfenster) mit gemeinsamem deckendem
Rahmen, ohne doppelte Titelleiste, zentriert neben der Werkzeugleiste;
Schließen-Knopf 36 px, größere Knöpfe, Eingabefelder und Schieberegler
- Seitenauswahl als Popover neben dem Seitenknopf mit Kachelraster
(56 × 48 px) und „Neue Seite anhängen“
- Immer nur ein Dialog oder Popover gleichzeitig offen (close_overlays);
Seitenauswahl schließt bei Tippen daneben
- Stift-/Marker-Popover: Farbtupfer 30 px, Stärke-Vorschau 40 px hoch,
breiterer Schieberegler, deckender Rahmen
- Auswahl-Überlagerung und Griff-Trefferprüfung rechnen mit der
Display-Skalierung (lag bei Skalierung ≠ 1 neben den Strichen);
Trefferradius der Griffe 18 Punkte für Finger
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Regression aus v0.3.0: Die UI-Trefferprüfung (egui layer_id_at) wertete eine
bildschirmfüllende egui-Ebene der Ordnung Background als UI. Dadurch galt jeder
Punkt auf dem Blatt als Oberfläche, und Maus, Stift und Touch zeichneten nicht.
Background-Ebenen zählen jetzt nicht mehr als UI; die Prüfung liegt in ui.rs
und ist durch einen Test abgedeckt (Blattpunkte, Leiste, Skalierung 1 und 2).
Außerdem:
- 25 ungültige vormultiplizierte Farben (RGB > Alpha) auf unmultipliziert
umgestellt: Knöpfe in Dialogen waren weiße Kästen mit unlesbarer Schrift,
die Auswahlfüllung war deckend statt durchscheinend
- Zeichen ohne Glyphe in den egui-Schriften ersetzt (✓ ✕ ● ↑ ↓, Variantenzeichen
U+FE0F hinter ⚠)
- Tests finden künftig ungültige Farben und nicht darstellbare Zeichen in
ui.rs, selection.rs und main.rs
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Werkzeugleiste
- Schmale senkrechte Leiste statt ~30 Elemente in einer Zeile; seitlich oben
angedockt (links, im ☰-Menü auf rechts umschaltbar, gespeichert in
~/.config/ink-notes/ui.json)
- Symbol-Knöpfe 40 px, auf niedrigen Fenstern schrittweise bis 28 px; Größe
richtet sich nach dem höchsten Fall, damit Knöpfe beim Werkzeugwechsel
nicht springen (fester Platz für die Farbpalette)
- Selten genutztes (PDF, Hintergrund, Zoom, Finger-Zeichnen, Leistenseite,
Updates, Speicherstatus) im ☰-Menü; Popover öffnen zur Blattseite hin
- Blatt wird im freien Bereich neben der Leiste zentriert
- Symbole ohne Glyphe in den egui-Schriften (🖍 ⌫ ⬚ ◄ ► ● ✕ ▾) ersetzt bzw.
selbst gezeichnet; Hover-Farbe korrigiert (falsch vormultipliziert)
Eingabe
- UI-Trefferprüfung in logischen Punkten (vorher physische Pixel gegen
egui-Koordinaten: bei Skalierung ≠ 1 trafen Stift und Touch die Leiste nicht)
und über egui::Context::layer_id_at für alle egui-Bereiche
- Stift-Ereignisse über egui_input_mut() statt ctx.input_mut() (wurden vom
nächsten Frame verworfen); Stiftbewegungen für Hover/Ziehen weitergereicht,
Stift bleibt vom Aufsetzen bis Abheben bei der UI
- Berührungen, die auf der UI beginnen, bleiben bis zum Abheben bei egui
- egui-Neuzeichenwünsche (repaint_delay) werden beachtet
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Der Signaturschlüssel wurde mit `rsign generate -W` erzeugt und ist mit
leerem Passwort verschlüsselt; das minisign-CLI aus Ubuntu (0.11) verlangt
dafür ein Terminal und brach in der CI mit "Error while loading the secret
key file" ab.
- Workflow installiert rsign2 0.6.7 (ohne -D warnings) statt minisign
- build-release.sh signiert und verifiziert mit rsign; da rsign bei falscher
Key-ID mit Exit-Code 0 endet, wird zusätzlich die Erfolgsmeldung geprüft
- README: Signierwerkzeug und Fallstrick dokumentiert
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
setup-rust-toolchain installiert mit --profile minimal; ohne explizite
components fehlen rustfmt und clippy, wodurch die Quality Gates bei jedem
Release-Lauf sofort abbrachen (cargo fmt --check nach 2 Sekunden).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- updater.rs: rustfmt-konforme Formatierung des öffentlichen Schlüssels
(cargo fmt --check ließ die Release-Pipeline scheitern)
- storage.rs: test_io_error_* simuliert den I/O-Fehler über ein Verzeichnis
statt chmod 000, damit er auch als root (CI-Runner) greift
- build-release.sh: findet den öffentlichen Schlüssel auch, wenn rustfmt ihn
in die Folgezeile umbricht
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Öffentlicher Schlüssel (Key-ID 3CFE290C190DA9D9). Der geheime Schlüssel wird
in der CI als Secret MINISIGN_SECRET_KEY erwartet.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Konfliktlösung: Speicher-Architektur des Branches (Formatversionierung,
Papierkorb, Backups, Instance-Lock, robuster Autosave) übernommen und die
dort fehlenden Korrekturen aus main darauf übertragen:
- Autosave gleicht das Manifest bei jeder Änderung mit dem Notizbuch ab
(mark_dirty); per Taste N/Bild-ab angelegte Seiten gingen sonst nach
einem Neustart verloren
- Start öffnet keine beschädigten Notizbücher automatisch und verwendet den
Ordner eines nicht ladbaren Notizbuchs nicht wieder
- PDF-Export lädt nicht geöffnete Seiten nach (load_all_pages), verweigert
unvollständige Exporte und meldet das echte Ergebnis an die UI
- Cargo.toml: minisign-verify und fs2
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- SHA256SUMS.txt muss mit dem eingebauten Minisign-Schlüssel
(UPDATE_SIGNING_PUBLIC_KEY) signiert sein; fehlende oder ungültige
Signaturen und Versionen ohne Schlüssel lehnen Updates ab
- Prüfsummen und Signatur werden vor dem Paket geladen und geprüft
- build-release.sh signiert mit MINISIGN_SECRET_KEY und prüft, dass der
Schlüssel zum eingebauten öffentlichen Schlüssel passt; in der CI ist die
Signatur Pflicht
- publish-gitea-release.sh lädt SHA256SUMS.txt.minisig hoch
- README: Einrichtung des Schlüsselpaars dokumentiert
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Bisher wurde nur die Server-URL geprüft. Download-Links aus der Release-API
und Weiterleitungsziele durften auch http:// sein, womit Paket und
SHA256SUMS.txt unverschlüsselt geladen werden konnten. Jetzt wird jede
Anfrage einzeln geprüft (allow_insecure_http bleibt als Ausnahme).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Beschädigte Seiten werden als page_<id>.json.corrupt-<zeit> gesichert statt
leer überschrieben; bei I/O-Fehlern wird die Ersatzseite als load_failed
markiert und nie gespeichert
- Autosave gleicht das Manifest (page_ids, Zähler) mit dem Notizbuch ab, damit
neu angelegte Seiten nach einem Neustart nicht verloren gehen
- Start: nicht ladbares Notizbuch bleibt unverändert, stattdessen wird ein
neues angelegt
- Aktuelles Notizbuch löschen: ausstehende Schreibvorgänge vorher abarbeiten,
damit der Ordner nicht wieder angelegt wird
- PDF-Export lädt nicht geöffnete Seiten nach und verweigert unvollständige
Exporte; Ergebnis wird per Kanal an die UI gemeldet
- Strg+S speichert alle geladenen Seiten und meldet Schreibfehler; flush()
liefert Fehler zurück statt immer "Gespeichert"
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>