ux(bijsnijden): draaien waarschuwt vooraf dat het het bestand herschrijft #1872
No reviewers
Labels
No labels
accepted
bug
declined
docs
duplicate
enhancement
good first issue
in-progress
needs-info
privacy
security
triage
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
LibreKAT/Ocideck!1872
Loading…
Reference in a new issue
No description provided.
Delete branch "fix/rotatie-niet-destructief"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Wat dit is
Het antwoord op de vraag uit de spin-off van #1870 — kan draaien niet-destructief worden, net als bijsnijden? — plus het enige stuk dat geen beslissing nodig had.
Gedrag verandert hier nog niet. Draaien herschrijft het bestand nog steeds; wat erbij komt is dat de gebruiker het weet vóórdat hij klikt.
Het antwoord: ja, en de keuze is gemaakt
Uitgewerkt in
docs/design/IMAGE_ROTATION.md. Drie vormen gewogen; de eigenaar koos optie A.A landt in de
images/-map van het deck, niet naast het origineel — die indeling bestaat al (asset_staging.dartstageert naarimages//media/,copyImagesToProjecttilt het bij opslaan naar het project), dus een gedraaide kopie is een gewone deck-asset die meereist in het pakket en het git-vlak. Ernaast schrijven zou een OciDeck-artefact in de fotomap van de gebruiker leggen — hetzelfde soevereiniteitsprobleem in het klein. Een tweede kwartslag wordt opnieuw uit het origineel afgeleid, dus nooitr90.r90.Waarom niet B, dat het betere model is: het legt de rotatie als dia-commentaar in de
.md, en een oudere OciDeck slaat zo'n commentaar over én schrijft het bij opslaan niet terug. Een deck dat langs zo'n lezer komt, komt ongedraaid terug zonder melding. B koopt daarbovenop alleen één foto onder twee hoeken op twee dia's, en daar heeft niemand om gevraagd. Uitwisselbaarheid geeft de doorslag. §7.2 legt ook vast wát de afweging zou heropenen: zodra iemand wél twee hoeken vraagt, komt B — ná A, en met een front-matter-blok in plaats van een commentaar.Voor de volledigheid, want het is de reden dat B niet gratis is: er ís één schoon invoegpunt,
image_viewport_geometry.dart(het Flutter-vrije contract uit #1825 dat Flutter, LaTeX, de hit-testing en de kwaliteitsanalyse allemaal aanroepen). Daar is rotatie een dimensiewissel plus het meedraaien van callout-targets; §5.2 heeft de afbeelding, met de hoeken nagerekend. PDF/PPTX/ODP komen gratis mee — die rasterenSlidePreviewWidgetvia eenRepaintBoundary.Wat er wél in zit
De waarschuwing boven de draaiknoppen, vóór de klik, in alle 32 talen, met beide feiten: het bestand zelf verandert, en een gedeelde afbeelding draait overal mee. Twee regressietoetsen — ze staat er zodra draaien kan, en ze staat er niet bij een meegeleverde asset waar de knoppen sowieso ontbreken.
En passant: de ontwerpnotitie-index in
docs/README.mdmiste er negen, waaronderIMAGE_CALLOUTS.md— dat een formaatcontract draagt. Aangevuld. De correctienotitie van 22-07 legde dezelfde fout al vast en eindigt met "no test compares the two lists"; dat is nog steeds zo.Bewaker
§7.1. Soevereiniteit (waarde 3) is de reden dat het stuk bestaat. De botsing is uitwisselbaarheid tegen het rijkere model en valt tegen B uit. Geen van de drie raakt opslag, een afhankelijkheid of uitgaand verkeer. Deze PR zelf raakt het formaat niet.
Toetsing
test/image_crop_dialog_test.dart— 21/21 groen, inclusief de twee nieuwemake check-static— groenmake check-registrations— groenrotateImageBytesbestaat inderdaad niet meer)Eén bewering onderweg gecorrigeerd: ik schreef eerst dat
image_dedupeen identieke afbeelding één keer opslaat. Dat klopt niet — het is een opruimactie in de afbeeldingkiezer die duplicaten vindt, referenties over de decks op schijf telt en op het meest-aangehaalde bestand consolideert. Dat versterkt het punt eerder dan het te verzwakken, maar het stond er verkeerd.Ook mijn eigen misstap, voor de volledigheid: drie gelijktijdige testruns vochten om
build/native_assets/en lieten een Vulkan-gecompileerdeink_sparkle.fraginbuild/unit_test_assetsachter. Die liet ook een ongewijzigd testbestand vallen — dat was de controle waarmee ik uitsloot dat het aan de wijziging lag.