Commit Graph
3053 Commits
Author SHA1 Message Date
Dylan M. Taylor c2dbcff51f ci: add SonarCloud scan via shared reusable workflow
Calls storytold/craft-common-actions/.github/workflows/sonarcloud.yml@main
with secrets: inherit. Adds SonarCloud badge to README where missing and
removes the redundant sonar-project.properties (config now passed by the
reusable workflow).
2026-10-21 15:46:54 -04:00
Brandon ThomasandClaude Opus 5.5 4d62a501c1 Release 0.11.0
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
v0.11.0
2026-10-21 13:57:30 -04:00
Dylan M. Taylor b67232a6c8 ci: add SonarCloud scan workflow and config 2026-10-21 13:57:06 -04:00
Dylan M. Taylor 9826154db3 ci: add SonarCloud scan workflow and config 2026-10-21 13:56:26 -04:00
aiongg 0e43a8c87a #1311: rustfmt 2026-10-21 16:32:29 +00:00
aiongg 3eb1937fce #1311: floating windows stay below the macOS title-bar strip (craft-ui float_bounds) 2026-10-21 16:32:08 +00:00
Hamza 0fc845750a An underline runs across a tab, as the rest of the line's text (#1466)
A tab draws nothing, so it was left out of the underline and strikethrough
bars: they stopped at the last letter before each tab and began again after it.
Forms rule their fill-in lines with underlined tabs — `Name ⇥⇥⇥⇥, city ⇥⇥⇥⇥` —
so an imported form lost every writing line, and an IDML `Underline="true"` on
a run of tabs drew nothing at all.

A tab is a character with an advance, and InDesign rules its whole width.
`PlacedGlyph::spans_rules` says which glyphs a rule runs across: the drawn
ones, and a tab or a right-indent tab that advances. The spaces a line break
trimmed off the end, the break characters and the markers' carriers are not
part of the line's text and are still skipped, so an underline stops at the
text and not at the frame edge.

Both places that draw the bars from the glyphs use it: the renderer
(`build_line`) and the PDF export (`text_rules`). The HTML and PPTX exports
mark up runs of text, which already included their tabs.

Measured on the repro in the issue, a 420×120 pt page at 2×:

  before   one underline, 63 px: the word "Name"
  now      three, 63 + 219 + 231 px: the word and both tab stretches

and the exported PDF gains the two fills for them. A tab with a leader is one
continuous bar across the leader dots to the right-aligned text after it.

Tests: the renderer's bars and the PDF export's bars for "Name<tab>City" are
one bar covering the tab's width, not two with a gap where it is. Both fail
without the change (two bars, 36→67.7 and 72→93.2, the tab's 67.7–72 unruled).
2026-10-21 20:04:12 +05:00
paaspaas00andClaude Opus 5.5 2c1973a6e4 Control panel (¶): Bulleted and Numbered List, Shading and Border, as InDesign's
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-21 16:16:25 +02:00
paaspaas00 0ff33bead8 Merge list-buttons-hanging-indent (#1483) into control-panel-lists-shading 2026-10-21 16:09:04 +02:00
paaspaas00andClaude Opus 5.5 189cccd2fc Bulleted and Numbered List buttons give InDesign's default hanging indent
The Properties buttons and Type > Bulleted & Numbered Lists > Apply Bullets /
Apply Numbers (list.bullets, list.numbers) apply the list with Left Indent
0.25 in / First Line Indent -0.25 in when the paragraph has no indents, so the
text lines up after the bullet; pressed again, the list and that indent go.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-21 16:04:31 +02:00
paaspaas00andClaude Opus 5.5 8ec58cc1cc Number fields are labelled by the icon that names them (accessibility)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-21 14:38:28 +02:00
paaspaas00 b768ea789e Merge properties-more-options into control-panel-text-modes 2026-10-21 14:33:32 +02:00
paaspaas00andClaude Opus 5.5 4320235bc6 Space Before / Space After in the shared translation table
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-21 14:33:10 +02:00
paaspaas00andClaude Opus 5.5 13527f9cb7 Control panel fields: Escape reverts any typed value; parity docs for the text modes
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-21 13:15:51 +02:00
Nikolai Nyegaard 5879134502 Preferences: list the languages alphabetically by their own name
- English (and Auto where offered) stays first as the source language and fallback; the rest sort by native name with accents folded, so Čeština is under C and Magyar under M; Cyrillic and CJK names follow the Latin ones
- The list used the registry order, which is the order the languages were added
2026-10-21 12:01:45 +02:00
paaspaas00andClaude Opus 5.5 6cb9466129 Docs: the Properties ••• sections in the UI parity checklist
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-21 11:57:12 +02:00
paaspaas00andClaude Opus 5.5 e177529f98 Control panel: the text controls have InDesign's Character (A) and Paragraph (¶) modes
A shows the Character Formatting Controls: font and style, size and leading, All Caps,
Superscript, Underline / Small Caps, Subscript, Strikethrough, kerning and tracking, vertical and
horizontal scale, baseline shift and skew, the character style and the language. ¶ shows the
Paragraph Formatting Controls: the nine alignments, left and first line indents, right and last
line indents, space before and after, the drop cap's lines and characters, the paragraph style,
Hyphenate and Align to Baseline Grid. The fields' icons carry their names (tooltip and
accessibility). It used to show a fixed mix of both.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-21 10:02:03 +02:00
paaspaas00 7a970ca88c Merge remote-tracking branch 'fork/properties-more-options' into control-panel-text-modes
# Conflicts:
#	ROADMAP.md
2026-10-21 09:55:50 +02:00
paaspaas00andClaude Opus 5.5 578a1ce169 Properties: ••• expands Character and Paragraph in place, as in InDesign
Character's ••• shows vertical and horizontal scale, baseline shift, skew, language and
OpenType (the Typography panel), and the All Caps, Small Caps, Superscript, Subscript,
Underline and Strikethrough buttons. Paragraph's ••• shows the left, right, first line and last
line indents, space before and after, the drop cap's lines and characters, Align to Baseline Grid
and Hyphenate. ••• again folds the section. It used to open the Character or Paragraph panel.

The language field moves under •••, where InDesign has it. New icons for the scales, baseline
shift, skew, indents, spacing and drop caps; widgets::checkbox and ••• report their labels to
accessibility.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-21 09:54:22 +02:00
Dylan M. Taylor 3ce3a24f08 Merge pull request #1110 from dylanmtaylor/ci/shared-nix-workflow
ci: switch to shared nix workflow from craft-common-actions
2026-10-21 03:40:09 -04:00
aiongg 8097e2cf4d #1311: group the dock's panel icons as InDesign does 2026-10-21 04:49:27 +00:00
skylar taylor-barrick 9f7504931d Merge pull request #1352 from FredApps/ci-xtask-ci-workflow
CI: run cargo xtask ci on pull requests and pushes to main
2026-10-20 22:40:42 -06:00
skylar taylor-barrick 63a68b3d49 Merge current main into CI workflow branch 2026-10-20 21:33:52 -06:00
skylar taylor-barrick 417ef40c4c Pin winit to storytold/winit (same commit) (#1113)
The fork moved from skylartaylor/winit to the storytold org. The pinned
revision 3d51077f is unchanged; only the repository URL differs.
2026-10-20 20:26:43 -06:00
HEOJUNFOandClaude Opus 5.5 d49343f132 Export placed greyscale TIFFs as DeviceGray (#1426)
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-21 11:18:27 +09:00
moppeeerandClaude Opus 5.5 babb86c3ae Escape cancels a value typed over an automatic one
Typing over "(87.6 pt)" and pressing Escape leaves the leading automatic;
only Enter or leaving the field commits it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-21 03:54:27 +02:00
skylar taylor-barrick 1420d8c79b refactor(pdf): share placed-PDF rendering (PDFR) (#876) 2026-10-20 19:52:28 -06:00
moppeeerandClaude Opus 5.5 aa3b7b7a24 Typing the automatic leading over its value fixes it
A field showing an automatic value in parentheses commits what is typed over
it even when it is the same number, so typing 87.6 over (87.6 pt) sets fixed
leading, as InDesign does.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-21 00:52:13 +02:00
moppeeerandClaude Opus 5.5 606b28dbec Control panel: font size, leading and tracking have a spinner and a list of values
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 21:30:54 +02:00
NetterSilverandClaude Haiku 5.5 e1e9923471 Keep ':', '<', '>' and '\' in Tagged Text style names
Found while testing crates/textimport/src/tagged.rs:35 (also :52)

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-20 18:02:07 +00:00
aiongg 801dc17988 #1311: translate the docking labels
Catalog rows in German, French, Spanish, Japanese and Chinese for the
docking labels in DOCK_LABELS that had none.
2026-10-20 18:01:18 +00:00
aiongg a92c9ac18a #1311: report an old layout that cannot be converted
A dock-only layout that from_dock_only cannot convert clears intact, so
the preferences file it came from is kept.
2026-10-20 18:01:18 +00:00
aiongg c06d25a73d #1311: window.panel closes the panel's open flyout
Choosing a panel whose iconic-column flyout is open closes the flyout,
as clicking its icon does.
2026-10-20 18:01:18 +00:00
aiongg 9e633b06b8 #1311: window.panel.dock rejects an edge zone without anchor or side
A zone is a side of the anchor. Without anchor or side, craft-ui would
make a frame on the outer edge of DesignCraft's root, which splits the
canvas; the error names anchor and side instead.
2026-10-20 18:01:17 +00:00
aiongg c75ff9d32c #1311: Dock Panel in a floating panel's menu
A floating panel's tab menu and three-line menu have Dock Panel, which
runs window.panel.dock and so returns the panel to where it floated
from.
2026-10-20 18:01:17 +00:00
aiongg 4239e1b0c2 #1311: craft-ui 352a830 (craft-libs#187 review fixes)
Pin craft-ui to aiongg/craft-libs 352a830. Workspace::set_visible takes
the panels' permissions; group_header_width takes the strip width. Tests
reach docking controls through DockArea::hit_id and floating_layer
instead of rebuilding egui ids. Control names in DOCK_LABELS follow
craft-ui's sentence case.

Test: dragging a dock divider and then pressing an arrow key nudges the
selection and leaves the dock's size alone.
2026-10-20 18:01:07 +00:00
NetterSilverandClaude Haiku 5.5 6641e7c29f Drop out-of-range RTF \uN values instead of wrapping them
Found while testing crates/textimport/src/rtf.rs:237

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-20 17:44:49 +00:00
Hamza ba4b6d4089 Say which backend was chosen without claiming it was the first
Two corrections to the message, both reported by CodeRabbit on #1371.

switched_from being None only means this start did not switch from a
backend that never showed a frame. A backend that failed on an earlier
start is remembered in the record, and choose() then picks the first
candidate that is not in that list -- so calling it the "first choice"
misstates how it was arrived at. The line now says either "nothing has
failed before" or which backends had, so the log says what happened.

The comment claimed that reaching this line means WGPU_BACKEND is
unset. wgpu-types returns an empty mask for an empty or unrecognised
value and begin() only returns early for a non-empty one, so such a
value reaches here with the variable set. The comment says that instead.
2026-10-20 20:59:04 +05:00
Brandon ThomasandClaude Opus 5.5 8dff7ecdb0 Skip CodeRabbit reviews on Dependabot PRs (#1386)
Adds .coderabbit.yaml so CodeRabbit no longer reviews or comments on PRs opened by dependabot[bot].

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 11:39:20 -04:00
Dylan M. Taylor 72f8186550 docs: add SonarCloud and CodeRabbit badges to README (#1266)
* docs: add SonarCloud and CodeRabbit badges to README

* docs: put SonarCloud and CodeRabbit badges on their own line
2026-10-20 11:33:05 -04:00
NetterSilverandClaude Haiku 5.5 c35dd44f82 Remember the Preview checkbox in Paragraph/Character Style Options
Fixes #1340

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-20 15:17:27 +00:00
NetterSilverandClaude Haiku 5.5 d271298362 Refuse PDF page ranges in the Place PDF dialog instead of using page 1
Fixes #1337

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-20 14:34:47 +00:00
NetterSilverandClaude Haiku 5.5 7aba0e15af Saturate table alternating-fill and index paragraph counts
Found while testing crates/engine/src/cmd/table.rs:1396-1403

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-20 14:10:59 +00:00
Hamza e572a5316f Graphics: the start-up log says which backend was chosen and how to change it
`Fallback::begin` returns before the fallback runs when `WGPU_BACKEND`
is set, logging that wgpu picks the backend. So the line below it is
reached only when the variable is *not* set -- and it said
"(WGPU_BACKEND overrides)", which reads in a log as though the user's
environment had chosen the backend when nothing had.

    before: graphics: DirectX 12 (WGPU_BACKEND overrides)
    after:  graphics: DirectX 12 (first choice; set WGPU_BACKEND to choose another)

The report quotes that line as evidence of which backend a start used,
which is exactly the wrong conclusion to be led to.

Part of #1343.
2026-10-20 18:26:44 +05:00
NetterSilverandClaude Haiku 5.5 0e7e5c3f04 Clamp polygon side count before narrowing to u32
Found while testing crates/engine/src/cmd/object.rs:710-711 (also :975)

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-20 15:07:40 +02:00
NetterSilverandClaude Haiku 5.5 9887272efb Fix "-0p0" for tiny negative pica/cicero values
Found while testing crates/geom/src/units.rs:276

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-20 12:39:05 +00:00
FredAppsandClaude Opus 5.5 1fec005d19 CI: run cargo xtask ci on pull requests and pushes to main
Only path-filtered workflows run on pull requests today, so most PRs land
without a test run. Port of the wordcraft#800 workflow: Linux, standard
GitHub-hosted runner, read-only token, no secrets, craft-fonts pinned to
the release.yml commit.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-20 10:57:30 +02:00
Brandon ThomasandClaude Opus 5.5 15a2f3c8c8 Release 0.10.0
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
v0.10.0
2026-10-19 22:18:33 -04:00
aiongg 0d6fe6bff7 Merge remote-tracking branch 'upstream/main' into docking-trial
# Conflicts:
#	crates/ui-egui/src/dock.rs
2026-10-19 20:49:04 +00:00
NetterSilverandClaude Haiku 5.5 177ac86741 Keep CDATA text in the DOCX/XLSX XML parser
Found while testing crates/textimport/src/docx.rs:134-135

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-19 17:41:15 +00:00