Commit Graph
69 Commits
Author SHA1 Message Date
Martin BallandClaude Opus 5.5 9dd39df78d feat(i18n): look up translations through the craft-i18n crate
The i18n module becomes a thin Lang wrapper over craft_i18n::I18n and the
catalogs embedded from craft-i18n. Plurals use trn_plain and PhotoCraft
keeps its own fmt; @id rows come only from PhotoCraft's own rows that keep
the label's shape. Detection, PHOTOCRAFT_LOCALE, tag bounds and the 35
offered languages are unchanged.

Serbian: sr, sr-RS, sr-Cyrl-RS and sr-ME reach sr-latn, the only Serbian
catalog, and a saved interface.language "sr" migrates to "sr-latn".

The menu completeness test becomes a report that never fails, and
`cargo xtask i18n-coverage` is replaced by `cargo xtask i18n-report`, which
reads CRAFT_I18N_DIR through the crate. Docs describe the new system.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-08 16:16:46 +00:00
Taxperia 4019112d1d i18n: fix Turkic UI casing and remove unrelated parity edits 2026-11-06 16:09:08 +03:00
3317aede3b Fix Paint Bucket target with Gradient-style crosshair (#7994)
* Mark Paint Bucket fill target with a lower-right crosshair

* Unify Paint Bucket artwork and crosshair in one cursor bitmap

* Match Paint Bucket target crosshair to Gradient cursor

* Keep Paint Bucket cursor errors concise and fix Windows Clippy

* Simplify blend preview condition for strict Clippy

* Fix deprecated IDs in Linux bucket cursor test

* Paint Bucket: a cursor error clears when the cursor recovers

The failure branch wrote its error to the status bar, but nothing cleared
it after a later scale worked, and the same failure could not report again.
The open dialog stays until it is closed: it reports what happened.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: envy-ai <bart.kelsey@osumc.edu>
Co-authored-by: FredApps <153173854+FredApps@users.noreply.github.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-05 20:27:28 +01:00
Taxperia 081dd26d57 i18n: limit language contribution to Azerbaijani 2026-11-01 11:27:12 +03:00
Taxperia 5d54be710c i18n: add Azerbaijani and Romanian UI languages 2026-10-31 22:26:12 +03:00
Claude 7a2794c730 Merge storytold/photocraft main into the Fill/Stroke popover branch
217 upstream commits. Upstream added a colour swatch (Select and Mask's
overlay colour): it now opens the Color Picker titled "Color Picker
(Overlay Color)". Content-Aware Fill and Select and Mask leave their keys
to an open Color Picker, as they did for the swatch popup it replaced
(test keys_wait_while_the_overlay_colour_picker_is_open).
docs/ui-parity.md keeps the scorecard's 12 of 182.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TYsCL5E2GM6hUabP9dmYAv
2026-10-30 01:11:55 +00:00
Claude 957e7d3347 Merge storytold/photocraft main into the Fill/Stroke popover branch
Upstream moved the touched modules (dialogs/, tools/, widgets/ split) and
added its own Gradient tab to the shape Fill/Stroke swatches. Resolved by
porting this branch's changes onto the new layout:

- widgets/color.rs: color_edit_button* open the full Color Picker dialog
  (tests in widgets/color_button_tests.rs).
- tools/paint_picker.rs (was paint_picker.rs): the popover reuses
  shape_paint_ui::PaintChange (plus OpenPicker) and upstream's
  shape_gradient_ui Gradient tab instead of its own gradient preset list,
  so gradients now also work for the next shape's defaults.
- shape_paint_ui::swatch draws the popover; shape_options and
  vector_ui/options handle OpenPicker and Recently Used Colors.
- adjust_editors, caf_ui, file_ui call sites and tests moved to their
  new files; i18n entries appended after upstream's.
- docs/scorecard.md regenerated (12 of 181 settings unread).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TYsCL5E2GM6hUabP9dmYAv
2026-10-27 21:04:03 +00:00
Khawar Zamman Wani 34b6a94b0c Merge origin/main into fix/6501-multi-layer-free-transform 2026-10-26 10:20:08 +05:30
Khawar Zamman WaniandClaude Opus 5.5 f3e66beea6 Merge origin/main into fix/6501-multi-layer-free-transform
Main's smart-object cache handling in edit.transform (take_caches /
restore_unrendered) now covers every transformed layer; the params doc
keeps both the layers field and main's bicubic variants.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 13:07:24 +05:30
Ratul Paul 2818bc1e7c Merge upstream main and preserve UI scale progress
Keep all upstream contributor entries, progress notes and current document
dates alongside the existing intermediate UI scale feature.

Validation: fmt, locked engine/UI tests (6389 passed), Clippy, layers, wasm,
scorecard generation/check, and panic_hunt all passed.
2026-10-24 09:41:37 +06:00
aiongg c3aa3f9e51 Tests: missing translations don't fail; xtask ci prints them
Delete the coverage tests, the per-language parity checks and the tests
of one language's exact wording. Catalog integrity, placeholder and
plural-form checks stay, as do the engine tests (locale resolution,
plural rules, fallback, language scoping, drawing in a language); those
compare against tr() or the plural rule rather than catalog wording.
Docs describe the report instead of a failing test.
2026-10-23 19:07:23 +00:00
Ratul Paul b088a6cbac Merge upstream main and retain complete UI scale coverage
Preserve upstream progress documentation alongside the scale-preset notes.
Add numeric preset labels to the newly introduced Hindi catalog, keeping all
21 catalogs covered. Preserve contributors, tests and existing coauthor credit.

Validation: fmt, locked engine/UI tests (6196 passed), Clippy, layers, wasm,
scorecard generation/check, and panic_hunt all passed.
2026-10-23 10:04:33 +06:00
SimoneRecchia a5d555a3d0 Merge storytold/photocraft main into the Fill/Stroke popover branch
Conflicts:
- vector_ui.rs: main gave egui's shape picker a hex field and a screen
  colour button; this branch replaces that picker with the popover, whose
  Color Picker has both, so the popover version is kept.
- vector_paint_tests.rs: main's zero-width stroke tests are kept; its two
  hex tests now type and paste into the Color Picker the popover opens
  (the test harness draws dialogs, as the app does).
- i18n catalogs: both sides' new strings kept; fr and ru keep main's
  translations of Color Picker, Solid Color and Tint Color.
- paint_picker.rs uses photocraft_color::convert::hsb_to_rgb, which
  replaced color_picker_ui::hsv_to_rgb on main.
- docs: both sides' rows and revision entries kept; scorecard regenerated.
2026-10-22 21:24:19 +00:00
Khawar Zamman Wani 8a7134135e Merge remote-tracking branch 'origin/main' into fix/6501-multi-layer-free-transform
# Conflicts:
#	docs/gaps.md
#	docs/ui-parity.md
2026-10-22 22:36:29 +05:30
aiongg 1f01abeebe Merge PR #7808: Add a draggable center diagram for Radial Blur Zoom 2026-10-22 02:22:16 +00:00
SimoneRecchia 729e5c68ed feat(ui): Photoshop Fill/Stroke popover and full Color Picker for every colour swatch
The shape Fill and Stroke swatches (options bar and Properties) opened egui's
built-in picker, which only has RGBA fields and no hex. They now open
Photoshop's popover: No Color, Solid Color, Gradient and Pattern along the
top, the Color Picker button at the top right, Recently Used Colors and the
swatch library's folders. Gradient applies a gradient preset to the selected
shape; Pattern is shown but off, since shapes don't render pattern paint yet.

The Color Picker button opens the full Color Picker dialog (HSB, RGB, Lab,
CMYK, hex, eyedropper) titled Color Picker (Fill Color) / (Stroke Color),
with a live canvas preview; OK is one undo step (shape_fill_ui::open_paint).

Every other colour swatch built on widgets::color_edit_button* (Photo
Filter, Black & White tint, Gradient Map stop, Content-Aware Fill overlay,
Filter Gallery glow, Save for Web colour table) now opens the same Color
Picker dialog instead of egui's picker; OK hands the colour back to the
swatch through color_picker_ui::widget_tick.

Recently Used Colors are kept in Preferences::recent_colors (newest first,
15), filled by the Color Picker's OK and by popover picks.
2026-10-21 10:54:46 +00:00
Khawar Zamman Wani 0dfa3bc0b7 Merge remote-tracking branch 'origin/main' into fix/6501-multi-layer-free-transform
# Conflicts:
#	docs/gaps.md
2026-10-21 10:06:22 +05:30
Ratul Paul 69ce08594d Merge upstream main and preserve contributor credits
Retain upstream contributor entries and Ratul’s original entry while
refreshing the UI scale presets branch against current main. Preserve
all scale presets, catalog labels, tests, documentation and coauthor history.

Validation: 5,290 engine/UI tests passed, 32 ignored; fmt, Clippy, layers,
wasm, scorecard generation/check and panic_hunt passed.
2026-10-20 09:25:09 +06:00
Marco Arnulfo 4f15642ee8 Toolbar: Edit Toolbar, Quick Mask and Screen Mode in every theme (part of #4653) (#4680) 2026-10-19 14:20:48 -04:00
Brian Blakely 6e20764ab6 Add a draggable center diagram to Zoom radial blur 2026-10-19 12:25:50 -04:00
Khawar Zamman WaniandClaude Opus 5.5 2432669578 Free Transform moves every selected layer (#6501, #3384, #6096)
With several layers selected, Ctrl/Cmd+T framed and transformed only the
active layer, whatever its kind: a pixel layer moved while a type layer
beside it stayed put (or the other way round).

Engine: `edit.transform` takes `layers` and, given no `layer`, moves the
selected layers that no selected group carries, leaving out the Background,
as Photoshop does. One transform, one history step; every layer is priced
and lock-checked before any is built. Transform Again repeats on the
selection; Transform Again on a Copy keeps the active layer's frame.

UI: the box frames all of them (`begin_several`) and its preview is their
composite with styles reaching past the frame, rebuilt when an edit made
while it is open changes how they look (children of a moving group and
styles of enclosing groups included). Selected pixels are lifted per pixel
layer. The Move tool's shared Show Transform Controls frame gets handles.
Warp is greyed for several layers, and so are Distort and Perspective
while editable type is among them.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01T48KpM3QwGvfQxtZ1icCRq
2026-10-16 16:26:53 +05:30
Ratul Paulandkartik8dwivedi 27b2a8d447 Merge upstream main and complete UI scale review updates
Preserve main’s contributor entries and Auto scaling documentation while
retaining the intermediate fixed presets and their existing tests.

Add the four labels to the Hungarian, Serbian, Turkish, and Vietnamese
catalogs. Adopt #3396’s UI-217-9 note and UI parity/gap updates, then
regenerate the scorecard.

Co-authored-by: kartik8dwivedi <codewithme.kartik@gmail.com>
2026-10-16 13:23:47 +06:00
envy-ai e47086717a Channels: load the targeted layer mask as selection (#5562)
* Load the targeted layer mask from Channels footer

* Fix Channels test setup after mask reveal
2026-10-14 23:49:15 -04:00
mroxsoandhighperfocused b37a148759 ui: remove the title-bar Discord button (#1737)
Co-authored-by: highperfocused <highperfocused@pm.me>
2026-10-14 13:05:47 -04:00
Roberto DutraandClaude Opus 5.5 887dcd7ef9 Linux: a virtual keyboard claiming BTN_TOOL_PEN no longer sends the window through Xwayland (#5284) (#5295)
* Linux: a virtual keyboard claiming BTN_TOOL_PEN no longer sends the window through Xwayland (#5284)

On Wayland the app opens its window through Xwayland when a pen is attached
(#639), and it took any input device whose key bitmap has BTN_TOOL_PEN for a
pen. A virtual keyboard made with uinput (RustDesk's, for one) claims every
key code, that one included, so the window went through Xwayland on machines
with no pen at all. On a fractionally scaled desktop (GNOME 46 at 125%) the
X11 window is drawn at the logical size and upscaled by the compositor, so
the UI came out blurred even though Auto UI Scale already followed the
system's 1.25 (#1237): native Wayland, where winit negotiates
wp_fractional_scale_v1 and renders at the physical 3840 px, was never used.

A pen now also needs ABS_X and ABS_Y in its absolute-axis bitmap, as
libinput asks of a tablet tool; a keyboard has no axes. Regression tests
with the virtual keyboard's own bitmaps, a pen beside it, and a pen display.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>

* Docs: on a fractionally scaled Wayland desktop, Xwayland is blurred and native Wayland has no file drops (#5284)

Say where the trade-off is: a native Wayland window is sharp at 125%,
150% and 175% but takes no dropped files (#386); an Xwayland window takes
drops and pen input (#639) but is enlarged by the compositor. List the ways
to open through Xwayland and what counts as a pen.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-14 12:45:30 -04:00
Sir Starch 2ec1c8c0aa Themes: default light theme to Pro Light to preserve the Pro layout (#5016) (#5029)
When appearance mode was toggled between dark and light with default
settings, PhotoCraft switched from Pro Medium (Pro layout) to Studio Light
(Studio layout), altering the UI and displaying a Fit button in the status
bar.

Now that the Photoshop Pro light brightness levels exist (#2661), default
the saved light theme to Pro Light so the Pro interface layout and status
bar are preserved when toggling appearance. Also map the "light" alias to
Pro Light and list the Pro options first under Light Theme preferences.

Fixes #5016.
2026-10-13 12:02:32 -04:00
e8af9d592f Themes: Soft Dark and Soft Light (#4368) (#4378)
* Themes: Soft Dark and Soft Light (#4368)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* docs: regenerate scorecard after merging main

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: Brandon Thomas <echelon@gmail.com>
2026-10-12 23:06:37 -04:00
Scott C Hughes 6ca04e5afa fix(ui): one eliding label for fixed-width chrome, so translations can't overrun (#3580) (#3616)
A translated label beside a fixed-width control could run over its neighbours: the Layers
Lock/Fill row guarded only the redundant "Lock:" caption, so "Fill:" ("Заливка:" in Russian,
longer still as pt-br "Preenchimento:" / fr "Remplissage :") overlapped the lock icons.

Rather than a per-row fit check, add the one shared primitive for fixed chrome:
`widgets::elided_label(ui, text, max_w)` lays the text out no wider than its room, cuts it with
'…' and puts the full string on hover (built on the existing `tab_strip::elided`). The
Opacity/Fill scrub labels now elide to the room beside their field, so any translation shrinks
instead of overlapping, in every locale.

Documented the rule in docs/ui-design.md: wrap by default; beside a fixed control, elide; a
redundant caption may drop on a narrow dock (the lock icons carry the meaning).

Test: widgets::tests::elided_label_never_exceeds_its_room. Full photocraft-ui-egui suite: 2077
pass; fmt and clippy clean.
2026-10-12 04:10:40 -04:00
kotulskyandkotulsky 51c671c5a0 fix(selection): load shape and path thumbnails with Ctrl-click (#3449)
Load Work Path, saved path and layer path thumbnails as selections on
Ctrl/Cmd-click. Support Shift to add, Alt to subtract and Shift+Alt to
intersect, without changing the selected path or treating the click as
Save Path. Clicking the row name keeps its existing selection behavior.

Render uncached shape transparency instead of selecting the entire canvas.
Add regression tests for thumbnail hit testing, active-layer preservation,
selection combinations, undo/redo and 8/16/32-bit uncached shapes.

Co-authored-by: kotulsky <7805437+kotulsky@users.noreply.github.com>
2026-10-11 22:51:42 -04:00
a1de9ce4c8 fix(ui): respect native desktop scale under Auto UI scaling (#1278) (#3165)
* fix(ui): respect native desktop scale under Auto UI scaling (#1278)

* UI scale: drop the now-unused monitor size, update docs and scorecard

Merge main; Auto no longer reads the monitor size, so remove the parameter and its
computation, simplify the test, and update ui-design.md and UI-217-9 to match.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Brandon Thomas <echelon@gmail.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 10:53:55 -04:00
ade5799165 Mirror the shell for right-to-left UI languages (DIST-220-4) (#3114)
* Mirror the shell for right-to-left UI languages (DIST-220-4)

Arabic, Hebrew, Persian and Urdu read right to left, but the window's
chrome was hard-wired left to right, so an RTL catalog (#2505) would
put Arabic labels into a left-to-right layout.

The reading direction now follows the language code
(i18n::dir_for_code: ar, ckb, dv, fa, he, ps, sd, ug, ur, yi), so a
catalog needs no extra setting and the LANGUAGES rows are unchanged.
In a right-to-left language the shell mirrors:

- the menu bar starts at the right with File; menus open under their
  title's right edge, and the arrow keys step through them in screen
  order
- the toolbox docks on the right, the panel dock and its rail on the
  left; tool flyouts open towards the canvas and their corner marks
  and the header chevrons follow
- the title, options and status bars read from the right, with the
  workspace controls and the Fit/progress group at the left end; the
  title and window-drag gap use the free span between them

New module direction.rs holds the helpers (start_panel/end_panel,
row/trailing layouts, horizontal_centered, the popup alignment). Left
to right, every change lays out as before.

No RTL catalog ships yet, so PHOTOCRAFT_UI_DIRECTION=rtl forces the
mirrored layout for review (read once, native only). Panel interiors,
dialogs, menu rows, submenus and document tabs stay left to right, and
egui still draws UI labels without Arabic shaping or bidi reordering;
docs/localization.md and the parity docs say so.

Adds Lucide's chevron-left (the status bar's info menu arrow points
left in RTL; Timeline's Previous frame button asked for it too and drew
the fallback square).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Localization docs: egui shapes Arabic words; what's missing is a font and bidi word order

egui 0.36 shapes right-to-left runs with HarfRust, so letters join within
a word. The gaps are an Arabic fallback font in the UI and paragraph bidi
(words are placed left to right; emilk/egui#8576, #8577).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: MathMattTech <334629259+MathMattTech@users.noreply.github.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 10:06:18 -04:00
30bd8a5598 Fix Shape Stroke controls, popup interactions and paint colours (#3019)
Co-authored-by: optimalbytee <optimalbytee@users.noreply.github.com>
Co-authored-by: Brandon Thomas <echelon@gmail.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 09:46:44 -04:00
cfd12263af Rulers: keep tick marks and labels out of the origin corner (#2617)
* Rulers: clip tick marks and labels outside the origin corner

* Rulers test: set ViewXform's new aspect field after merging main

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Brandon Thomas <echelon@gmail.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 03:46:29 -04:00
Ratul Paul 15a3ce86f0 Add intermediate UI scale presets between 100% and 125% 2026-10-11 13:32:17 +06:00
skylar taylor-barrick 77f50330c6 UI.9: refresh shared panel integration against current main 2026-10-10 19:30:56 -06:00
dhiaaddin 1e0f8844eb Font menus: add an Arabic sample for families that cover Arabic (#2535) 2026-10-10 19:06:05 -04:00
Sir Starch 67e34a1d4c Themes: add Breeze Light and Breeze Dark (#2276) (#2335)
Two Studio-layout themes for KDE Plasma desktops: original colour values
chosen to sit close to Breeze's cool blue-grey surfaces and blue accent
(and its 5 px radius) so the app blends into a Plasma desktop, without
copying Breeze's colour schemes. Text readability comes first.

- theme.rs: ThemeKind::BreezeLight / BreezeDark. Every text colour (text,
  secondary, faint, accent, danger, warning) holds 4.5:1 on every surface
  and on hovered, pressed and selected states; the primary button is a
  deeper blue that takes white text and stays above 4.5:1 while it
  darkens on hover and press. Breeze's own inactive text and link blue
  are only about 2.8:1 on its light surfaces, so ours are darker. The
  close button goes red on hover.
- prefs: Theme/LightTheme::BreezeLight ("breezeLight") and
  Theme/DarkTheme::BreezeDark ("breezeDark"): Preferences > Interface,
  `prefs.set`.
- Window > Theme > Breeze Light/Dark Theme (`window.theme.breezeLight`,
  `window.theme.breezeDark`) and `ui.set {"theme": ...}` (aliases:
  breeze, kde, plasma for the light one; ...dark for the dark one).
- i18n: the four new labels in all 16 catalogs.
- docs/ui-design.md and ATTRIBUTION.md (original work, credits Breeze as
  the inspiration; Breeze's schemes are LGPL-2.0-or-later and none of
  their values, files or code are copied).
- Tests: names/aliases, surface order and blue-grey character, the
  contrast matrix for both themes, and the preference/mode selection.
2026-10-10 19:01:53 -04:00
46af2e6e30 Workspaces: preserve the embedding host menu and rail flags (#2620)
Co-authored-by: Brandon Thomas <echelon@gmail.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-10 18:22:30 -04:00
Arthur Wagner 2194c7c58f Status bar: show document dimensions in the ruler unit (#2618) 2026-10-10 18:18:19 -04:00
skylar taylor-barrick 99a3970399 UI.9: preserve PhotoCraft controls in shared UI migration 2026-10-10 12:51:56 -06:00
MarekSpodBiedry 93629daedc Float the layer mask, not the layer, when the mask is targeted (#2468) (#2486) 2026-10-10 13:12:20 -04:00
Sean LaveryandBrandon Thomas 478acf70cc Expand arithmetic expressions across numeric inputs (#2252)
* Expand arithmetic expressions across numeric inputs

* Test arithmetic and scientific notation in indexed color counts

* Drop the numeric_fields example (it wrote PNGs to /tmp; the widget tests cover the behaviour)

---------

Co-authored-by: Brandon Thomas <echelon@gmail.com>
2026-10-10 05:50:58 -04:00
414b7b9e4b fix(ui): complete system appearance selection and styling (#2168)
* feat(ui): follow system appearance with a System theme

Follow the OS appearance through the existing egui input while retaining System as the saved theme choice. Apply the resolved palette to both egui styles and custom surfaces, and keep document surround settings independent.

Cover launch and live transitions, persistence, manual themes, menu checks, the Interface picker and Home contrast. Validate engine/UI suites, adversarial commands, wasm, layering, parity and the AutoReview gate. Strict Clippy reports pre-existing findings documented in the PR.

Refs: storytold/photocraft#2074

* Keep the document surround on the displayed theme in Sync with system (drop the dark-surround pinning)

---------

Co-authored-by: coygeek <coygeek@users.noreply.github.com>
Co-authored-by: Brandon Thomas <echelon@gmail.com>
2026-10-10 05:14:41 -04:00
16ad6e1079 Add font previews and keyboard cycling to font menus (#1746)
Co-authored-by: highperfocused <highperfocused@pm.me>
Co-authored-by: Brandon Thomas <echelon@gmail.com>
2026-10-09 21:43:59 -04:00
LuniiyaandBrandon Thomas 8c3b6f8e5f Appearance modes: sync with system, separate dark and light themes (#1981)
* Appearance modes: sync with system, separate dark and light themes

* Appearance button cycles Auto, Light, Dark

* Appearance: default stays Dark, follow the portal signal instead of polling, split out the Preferences resize

* Preferences: size both appearance cards for the five dark themes

---------

Co-authored-by: Brandon Thomas <echelon@gmail.com>
2026-10-09 21:34:49 -04:00
LuniiyaandBrandon Thomas 782bcb67fa Toolbar: Studio themes draw round colour chips with Switch Colors below (#2002)
* Toolbar: Studio themes draw large round colour chips with Switch Colors right below

* Toolbar: round chips keep Default Colors, follow Tokens::round_chips, lie side by side in two columns

* Theme: Solarized Dark and Adwaita use the Studio round colour chips

---------

Co-authored-by: Brandon Thomas <echelon@gmail.com>
2026-10-09 21:14:37 -04:00
cc584d9aff Add Adwaita and Adwaita Dark themes (+ brush chip fix on light themes) (#1823)
* Brush preset chip: draw the tip preview in the icon colour on light themes

The options-bar chip always painted the round tip white, which nearly vanished on Studio
Light's chrome (246 gray) and disappears entirely on a white header bar. Dark themes keep
Photoshop's white tip; light themes use their icon token.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* Add Adwaita and Adwaita Dark themes

Two opt-in themes that put the Studio layout in GNOME's libadwaita palette, so PhotoCraft
sits with the rest of a GNOME desktop: header bar, sidebar, card and view colours, the
GNOME blue accent (#3584e4), destructive and warning colours, 6 / 9 / 12 px radii, and a
neutral (not red) close button as in GNOME's title bars. The default theme is unchanged.

Wired through ThemeKind, the interface.theme preference (adwaita, adwaitaDark), Window ›
Theme and the control channel, with menu and preference labels in every complete-menus
language ("Adwaita" kept as the proper name). A test holds both themes to WCAG contrast:
7:1 for text and 4.5:1 for dim text on every surface that carries labels.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* i18n: translate the Adwaita theme names in Dutch and Ukrainian

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: Brandon Thomas <echelon@gmail.com>
2026-10-09 21:08:12 -04:00
Max MurphyandBrandon Thomas 9c427a7a2c Themes: add Solarized Dark (#1136) (#2098)
* Themes: add Solarized Dark (#1136)

* Solarized Dark: ship the palette's MIT license notice (#1136)

---------

Co-authored-by: Brandon Thomas <echelon@gmail.com>
2026-10-09 20:34:31 -04:00
AntonandClaude Opus 5.5 96cdff7454 Free Transform: edge handles scale proportionally, Shift stretches one axis (#1873)
As in Photoshop CC 2019 and later, dragging an edge handle now scales both axes by the same
factor about the middle of the box (Alt: about the reference point), and Shift stretches the
one axis. Use Legacy Free Transform restores the old behaviour for edges as well as corners.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 13:04:14 -04:00
midasdfandClaude Opus 5.5 b5320e590e Preferences: System Title Bar says it applies at next launch (#1677)
On Windows and Linux the System title bar checkbox now carries the existing "Applies at next
launch." note, since saving it does not change the current window. Fixes #1661.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 09:17:05 -04:00