photocraft/crates/engine/tests
Brandon Thomas ffd811d679 feat(save): File › Save keeps a JPEG's quality and a WebP's lossy/lossless encoding (#2399)
Opening a JPEG now estimates the quality it was saved at from its quantisation
tables (the Annex K tables of ITU-T T.81 scaled by the IJG quality curve; exact
for such tables, the closest fit otherwise). Opening a WebP records whether it
is lossless (VP8L) or lossy (VP8), and a lossy one's quality from its base
quantiser index. The settings live on the document (`Document::file_encoding`,
saved in .pcraft) and a save that asks for no quality writes the file back the
same way, as Photoshop's Save does: File › Save, Save As and Save a Copy start
there instead of the fixed codec defaults (quality 90, WebP always lossless).
An explicit quality still wins; new documents and other formats keep the
defaults. Hostile or truncated DQT/VP8 headers give no estimate, never a panic.

Refs #2399

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 04:13:51 -04:00
..
affinity.rs AF.3: open Affinity 1 and 2 extensions everywhere and match the new fallback warning 2026-10-08 18:58:33 +00:00
background_layer_consistency.rs fix(layers): preserve Background behavior across merge, duplication and canvas resize (#2419) 2026-10-10 13:26:11 -04:00
brush_smoothing.rs Painting: right-click opens the brush picker (or erases), real Smoothing, eraser-on-Background tests (#86) 2026-10-04 23:31:17 -04:00
camera_raw_noise_clamp.rs fix(engine): Camera Raw clamps the noise amounts to their range (#707) (#839) 2026-10-07 20:24:42 -04:00
close_document.rs Keep the active document when closing another tab (#1148) 2026-10-09 06:14:12 +07:00
command_lookup.rs Command lookup: index registered and shell command IDs (#1156) 2026-10-09 01:26:44 -04:00
current_affinity_artboards.rs AF.3: recognize current Affinity artboard properties (#2355) 2026-10-10 13:14:59 -04:00
duplicate_layer_comps.rs fix(document): restore layer comps when duplicating documents (#2429) 2026-10-10 13:12:15 -04:00
empty_selection_combine.rs Keep empty selections empty for subtract and intersect (#1190) 2026-10-08 16:38:53 -04:00
eraser_locked.rs Eraser on locked layers: no lock-out from the simple lock button; Stroke Path erases to the background colour (#76) (#229) (#229) 2026-10-05 11:26:06 -04:00
explicit_layer_target.rs Commands check an explicit "layer" instead of whichever layer is active (#3466) 2026-10-11 23:17:45 -04:00
fill_lock_transparency.rs Paint Bucket and Gradient keep alpha on a transparency-locked layer (#1104) (#1193) 2026-10-08 17:05:25 -04:00
filter_locked.rs fix(vector): Stroke Path refuses pixel-locked and fully locked layers (#2388) (#2408) 2026-10-10 13:11:51 -04:00
flatten_background.rs Keep the Background position lock after Flatten Image (#1238) 2026-10-08 15:41:44 -04:00
gallery_colours.rs fix(algo): gallery colour injection covers Colored Pencil and Neon Glow (#709) (#805) 2026-10-07 14:45:59 -07:00
gauss_small_sigma.rs fix(algo): blur small sigmas instead of silently no-oping (#706) (#783) 2026-10-07 14:45:54 -07:00
guide_layout_limit.rs fix(engine): view.newGuideLayout rejects absurd column/row counts (#704) (#797) 2026-10-07 14:47:42 -07:00
guide_layout_preview.rs Add Photoshop-style guide layout dialog and live preview (#2930) 2026-10-11 08:23:03 -04:00
hdr_gamma_direction.rs rustfmt crates/engine/tests/hdr_gamma_direction.rs (Format red on main since #801) (#842) 2026-10-07 18:09:41 -04:00
jpeg_exif_resolution.rs fix(codecs): read the resolution from EXIF, XMP and Photoshop APP13; write it consistently (#1691) (#1744) 2026-10-09 22:07:59 +07:00
keyboard_shortcut_bulk.rs fix(engine): keyboard shortcut bulk set reports in-call clashes (#719) (#799) 2026-10-07 14:46:08 -07:00
kys_import.rs kys import: first launch asks before importing; edit.keyboardShortcuts importKys (#1987 review) (#2251) 2026-10-10 07:12:24 -04:00
layer_delete_last.rs layer.delete keeps a document's last layer (#1107) (#1189) 2026-10-08 17:05:20 -04:00
layer_mask_depth.rs fix(engine): create new layer masks at the document depth (#3359) 2026-10-11 22:30:26 -04:00
layer_range_panel_order.rs fix(layers): select Shift ranges in visible panel row order (#3041) (#3180) 2026-10-11 04:12:27 -04:00
live_line_transform.rs fix(vector): preserve scaled live-line thickness during endpoint edits (#3184) 2026-10-11 04:31:47 -04:00
mask_cache_purge.rs Bound mask-cache memory and include it in Purge All (#1650) 2026-10-09 10:00:00 -04:00
panic_hunt.rs Tests: panic_hunt reruns a timed-out command before calling it hung (#2994) (#2997) 2026-10-11 14:54:14 -04:00
path_blur_speed_clamp.rs fix(algo): Path Blur clamps per-path speeds (#708) (#840) 2026-10-07 21:06:10 -04:00
path_transform_target.rs fix(vector): pivot explicit path transforms on target layer (#3062) (#3183) 2026-10-11 04:23:08 -04:00
pdn.rs Add native layered Paint.NET (.pdn) import (#1998) 2026-10-09 21:05:00 -04:00
photoshop_oracles.rs Smart Objects and Smart Filters survive PSD save and open (#288) (#288) 2026-10-06 07:46:37 -04:00
pixel_lock_edits.rs Clear, Cut and Image › Adjustments refuse a pixel-locked layer (#1103) (#1194) 2026-10-08 17:04:33 -04:00
prefs_usage.rs Fix preference usage scanning on CRLF checkouts (#331) (#331) 2026-10-06 10:46:21 -04:00
rasterize_selected_layers.rs Layer › Rasterize acts on every selected layer; the Layers menu offers Rasterize Layers (#2243) (#2253) 2026-10-10 03:55:43 -04:00
rendering_preferences.rs Add rendering modes and CPU fallback recovery (#434) 2026-10-07 06:11:06 -04:00
save_keeps_encoding.rs feat(save): File › Save keeps a JPEG's quality and a WebP's lossy/lossless encoding (#2399) 2026-10-12 04:13:51 -04:00
selection_layer_commands.rs Layers menu and layer commands follow the selection, not the active layer (#2244) (#2254) 2026-10-10 04:18:42 -04:00
smart_duplicates.rs Keep duplicated Smart Objects linked to shared contents (#2222) 2026-10-10 05:05:56 -04:00
smart_filter_canvas_geometry.rs fix(image): keep smart-filter masks aligned through Image Size, Canvas Size and Crop (#3195) 2026-10-11 05:18:52 -04:00
smart_filter_stages.rs Smart filter edits: re-render from cached stages, in a background job (#2739) 2026-10-10 17:38:59 -04:00
smart_psd.rs Camera Raw: read and write settings as a live PSD Smart Filter (part of #215) (#459) 2026-10-07 17:59:16 -04:00
svg_smart_object.rs SVG opens as shape layers and places as a vector smart object (FILE-215-9, part of #215) (#1305) 2026-10-08 17:04:21 -04:00
text_gamma.rs fix(engine): prefs.set and prefs.reset apply the text blending gamma (#987) (#1709) 2026-10-09 18:00:29 +07:00
type_format_targets.rs Apply Type formatting to selected text layers (#2266) 2026-10-10 06:09:54 -04:00
undo_keeps_active_layer.rs fix(history): restore empty layer target on undo and redo (#3042) (#3179) 2026-10-11 04:02:23 -04:00
unicode_colors.rs Colours: handle non-hex Unicode values without an internal error (#261) (#261) 2026-10-05 18:14:20 -04:00
wand_transparent_copy.rs Ignore hidden RGB when Magic Wand selects transparency (#2273) 2026-10-10 01:51:28 -04:00