Commit Graph
859 Commits
Author SHA1 Message Date
bflatasticandClaude Opus 5.5 caeecf4b26 M14: Windows 7 build: patch windows-link for that build only, manual CI
- Drop the workspace [patch.crates-io] and restore windows-link's crates.io
  source and checksum in Cargo.lock, so every normal build keeps the
  checksum-verified crate. windows7.ps1 now applies vendor/windows-link with
  --config, checks that only windows-link's lock entry moved, builds and tests
  with --locked, checks the patched crate is the one in use, and restores
  Cargo.lock afterwards.
- windows7.yml runs on demand and weekly instead of on every PR, pins every
  action by commit SHA, and leaves the dependency check and host tests to the
  script (-Test) so the Cargo arguments live in one place.
- ROADMAP, README, NOTICE and docs: experimental, unsupported, not verified by
  maintainers.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-08 05:37:06 +07:00
njmueller 58e3916e03 M14: add Windows 7 SP1 x64 compatibility build 2026-10-08 05:36:44 +07:00
bflatasticandClaude Opus 5.5 3013bbc94f ROADMAP: Alt-drag with the transform tools copies (review of #377)
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-08 05:35:55 +07:00
theironchefandClaude Sonnet 5.5 12b56818b6 Alt-dragging with Rotate, Reflect, Scale or Shear transforms a copy
With Alt down at the press, the four transform tools opened their
dialog at once, so an Alt-drag did nothing: no transform and no copy.
They now decide on release: a click made with Alt still sets the
reference point and opens the dialog, and a drag made with Alt
transforms a copy about the reference point, as it does in
Illustrator.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-08 05:35:55 +07:00
bflatasticandClaude Opus 5.5 aad734e264 ROADMAP: Tab leaves the keyboard to the shortcuts (review of #366)
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-08 05:35:54 +07:00
theironchefandClaude Sonnet 5.5 746a271aeb Tab no longer leaves the keyboard focus on a hidden field
Tab is the Panels shortcut (show/hide all panels), but egui's own
focus navigation read the same Tab press at the start of the frame and
moved the keyboard focus on to a field. The shortcut handler returns
early while a field has the keyboard, so after one Tab a second Tab,
tool letters and Ctrl chords did nothing until a click or Esc, and in
the Type tool the letter typed after a Tab was lost. When no field has
the keyboard, the handler now cancels the focus move for that frame;
in dialogs, the command palette and panel fields, Tab still moves
between fields.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-08 05:35:54 +07:00
bflatasticandClaude Opus 5.5 256e938fff Number fields: arrows step plain fields too, keep the value selected; ROADMAP (review of #357)
The Up/Down stepping of #357 now serves every numeric field through one
helper: num_field (lengths, in their unit) and plain/mixed fields
(degrees, percent, counts, at their precision: a count ignores the
Ctrl/Cmd tenth), as in Illustrator's panels and dialogs. After a step
the new value is selected, so typing replaces it. The select-all code
the dialog focus and focus/double-click already duplicated becomes one
helper, and the tests move to tests_numfields.rs with its field harness
(which can now run with the window unfocused). ROADMAP.md notes it.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-08 05:35:54 +07:00
theironchefandClaude Opus 5.5 85dafc78d7 Fix #352: Up/Down arrows step the value of panel number fields
Panel number fields (num_field: X, Y, W, H, corner radius, stroke
weight, font size...) only parsed their text on Enter or focus loss,
so the arrow keys did nothing. With the field focused, Up/Down now
step the value by one of the field's unit (Shift: ten, Ctrl/Cmd: a
tenth), from the value shown, and apply it at once, as in the
reference app.

The field's focus is read from egui's memory, as its highlight and its
typing do: Response::has_focus also needs the window to report
keyboard focus, which the running app's window doesn't always do.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-08 05:35:54 +07:00
bflatasticandClaude Opus 5.5 acc708ec83 Direct Selection: Alt on a segment still picks the whole path; ROADMAP (review of #363)
With Alt held, a press on a path's stroke selects the whole path and
an Alt-drag copies it, as before #363 and as Group Selection does in
Illustrator; only a plain press on a segment selects its anchors and
reshapes it. Records the segment drag in ROADMAP.md.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-08 05:35:54 +07:00
theironchefandClaude Sonnet 5.5 2b56a91ce2 Fix #361: Direct Selection: dragging a segment bends or stretches it
Any hit on a path's stroke took the "select the whole path" branch, so
dragging a segment moved the whole path. Now a press on the stroke of
a path that isn't selected as a whole selects the segment's two
anchors (unless they already are), and the drag bends the segment
with path.reshapeSegment when it's curved, else moves the selected
anchors (a straight edge moves, the rest stays), as in the reference
app. The fill, Shift-click and a path selected as a whole keep their
behaviour.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
2026-10-08 05:35:54 +07:00
BFlat ce12b4b0f5 Merge pull request #378 from storytold/fix/issue-295
Fix #295, fix #354: open files from the macOS Finder and Dock
2026-10-08 05:32:55 +07:00
BFlat b5a7994df0 Merge pull request #375 from storytold/fix/issue-359
Fix #359: web drops land in the document they were dropped on
2026-10-08 05:32:40 +07:00
BFlat 5d49a2f4bf Merge pull request #248 from coygeek/docs/star-history
docs: add star history chart to README
2026-10-08 05:32:15 +07:00
BFlat 048db2d230 Merge pull request #303 from Pengjingyu1992/pr/simplified-chinese-cjk
M7: Simplified Chinese, horizontal CJK composition and compact UI fixes
2026-10-08 05:31:53 +07:00
BFlat 80307f11da Merge pull request #300 from daniel-efrat/codex/automatic-rtl-text
Add automatic Hebrew/Arabic RTL text and paragraph alignment
2026-10-08 05:31:25 +07:00
BFlat 038f344deb Merge pull request #383 from storytold/pr/review-followups-2026-10-08
Review follow-ups for #343, #350, #317, #339, #328, #318, #331
2026-10-08 05:31:04 +07:00
bflatasticandClaude Opus 5.5 b2c6764472 Fix #295: open files from the macOS Finder and Dock
Finder, Open With, a drop on the Dock icon and `open -a` failed with "VectorCraft cannot open
files in the PDF document format":

- The release Info.plist declared no document types, so Launch Services refused the files before
  the app saw them. Info.plist.in now declares every format File › Open reads (the engine's
  OPEN_EXTS; a test keeps them in step): VectorCraft owns its own documents and templates and is an
  alternate for the others, so it takes over no other app's files. `cargo xtask bundle` now fills
  in the same template instead of its own, shorter plist.
- macOS delivers such files as open-document events, not arguments. winit 0.30's application
  delegate has no `application:openURLs:`, so AppKit fell back to NSDocumentController, which
  refuses every file of a non-NSDocument app (the error in both issues). The new
  `open_documents` module adds that method to the delegate's class when the app is about to finish
  launching (before AppKit delivers launch files), queues the paths and wakes the UI, which opens
  them with `io::open_path` like command-line files; errors go to the status bar too.

New direct macOS dependencies `objc2-foundation` 0.3 and `block2` 0.6 were already in Cargo.lock
(through winit, muda and rfd). The module allows `unsafe_code` for the Objective-C runtime call.

Fixes #354

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-08 05:28:50 +07:00
bflatasticandClaude Opus 5.5 accfec7146 Fix #359: web drops land in the document they were dropped on
The web reads dropped files asynchronously, and the place inbox only kept
the drop point, so a file dropped on document A was placed into whatever
document was active when its bytes arrived. A drop on a canvas now carries
place::DropAt (the document's uid, the point, embed), and drop_files makes
that document active again before placing; when it has closed meanwhile,
nothing is placed and the status bar says so. The native drop path is
synchronous and goes through the same code, so it is unchanged in effect.

Test: a drop pending while another document opens lands in the first one
at the drop point; one whose document closes is not placed anywhere.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-08 05:28:50 +07:00
bflatasticandClaude Opus 5.5 7485dac6e8 Docs: the star history chart sits before License and credits (review of #248)
The ArtCraft footer stays the README's last block.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-08 05:28:50 +07:00
bflatasticandClaude Opus 5.5 d218e60168 i18n: Simplified Chinese rows for the strings that landed alongside the catalog
Simplified Chinese is a complete catalog, so the strings added the same day need rows: Delete
Anchor Points, Edit Selection and the 25 Saved Selection slots, Paragraph Direction and the
Mojikumi Set. Remove Anchor Points reads 移除锚点, apart from Delete Anchor Points (删除锚点), as in
Traditional Chinese.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-08 05:28:50 +07:00
Coy Geek bc4063f701 Docs: a star history chart in the README
Add a linked Star History chart at the bottom of the README so readers can see the repository star count over time. Use the date view with a top-left legend.
2026-10-08 05:28:50 +07:00
bflatasticandClaude Opus 5.5 27e8c695c1 i18n: Simplified Chinese reads as mainland Chinese, with rows for the strings added since (review of #303)
- Taiwan vocabulary left over from the zh-hant rows #303 started from is
  replaced with the mainland's, about 560 rows: 档案 → 文件, a Taiwan 文件
  (document) → 文档, 工作区域 → 画板, 笔画 → 描边, 色票 → 色板, 遮色片 → 蒙版,
  渐层 → 渐变, 偏好设定 → 首选项, 快速键 → 快捷键, 按一下 → 单击, 描述档 → 配置文件,
  品质 → 质量, 汇出/汇入 → 导出/导入, 连结 → 链接, 点阵 → 栅格, a row 列 → 行,
  「」 → “”, half-width parentheses; tool names that collided or were wrong
  are fixed (Selection Tool 选择工具, Scale Tool 比例缩放工具, Warp 变形,
  Puppet Warp 操控变形, Divide 分割, Exclude 差集, the 直排 type tools).
- 42 rows for strings that landed after #303 (Layers panel, graphics
  processor preference, panel collapse, the font menu's filters).
- A catalog header documenting the format and the vocabulary, and a test
  that zh-hans has no Traditional characters or Taiwan terms.

rows were the better base (hand-adjusted mainland terms in the menus and
dialogs), so no rows were taken from #316.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-08 05:28:49 +07:00
Pengjingyu1992 1e4db64362 i18n: Simplified Chinese (zh-hans) interface catalog
The zh-hans catalog, registered as 简体中文: zh-CN, zh-SG, zh-Hans-* and
a bare zh locale resolve to it (tested), and it claims complete menus.
NOTICE lists the craft-fonts faces of the current manifest (Noto Sans CJK
SC and Noto Sans Arabic were missing).

Landed from #303 (catalog, registration, locale tests and the NOTICE
line only). Its horizontal CJK composition, UI font fallback by weight,
dock, New Document, Brushes panel and preference-migration changes are
left for separate pull requests.
2026-10-08 05:28:49 +07:00
bflatasticandClaude Opus 5.5 3121bba275 Type: files with Auto alignment open in older builds (review of #300)
New type's Auto alignment is saved as the alignment it has in the
paragraph direction (Right for right to left, else Left) plus an
optional `justify_auto` flag, so builds without Auto parse the file
and lay it out the same; this build reads Auto back. Paragraph styles
keep Auto as one `justify` attribute.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-08 05:25:03 +07:00
bflatasticandClaude Opus 5.5 0687d2d127 Type: Paragraph Direction instead of an Automatic alignment toggle; bidi only where needed (review of #300)
Illustrator sets a paragraph's direction (Left-to-Right / Right-to-Left
Paragraph Direction in the Paragraph panel, with the Middle Eastern
options) and keeps its alignment buttons physical; it has no automatic
alignment toggle. So:

- ParaStyle.direction (None: from each paragraph's first strong
  character, as before; written only when set), the Paragraph panel's two
  direction buttons with Show Indic Options (original icons), and
  text.setFormat {direction: "auto"|"leftToRight"|"rightToLeft"}. The
  layout uses it as the base direction.
- The Automatic alignment check box is gone. Justify::Auto stays as the
  start of the paragraph's direction, set on new type only (text.create,
  the Type tools, with the mojikumi default in one new_type_para()):
  TextObject::point is Left again, so importers (PDF, SVG, DXF, EMF) keep
  their own alignment. The alignment buttons show what Auto resolves to.
- Bidi only where there is something right to left: plain paragraphs skip
  the algorithm (no per-layout allocation), it runs once per paragraph
  (shaping takes the paragraph's levels instead of recomputing them; path
  type computed it four times), and the shaper keeps Han, Hiragana,
  Katakana and Bopomofo in one segment (splitting at every change of
  script cost Japanese text a shaper call per kana-kanji switch).
- Vertical type keeps its logical order, so its glyphs and lines are not
  marked right to left (the caret no longer runs backwards down a column).
- PDF import puts Hebrew and Arabic, which PDFs (and VectorCraft's own
  export) draw in visual order, back in logical order with the direction
  that shows it as drawn; with bidi layout it came back mirrored.
- SVG import pins the direction SVG implies (left to right unless
  direction: rtl); SVG export also outlines right-to-left paragraphs.
- Docs (development.md), ROADMAP (folded into the Type entry, Type core
  row) and README updated; catalog rows for the new labels.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-08 05:25:01 +07:00
bflatasticandClaude Opus 5.5 7c3030ff52 EPS import: type layout counts against the op budget, hostile executable-file tests (review of #331)
Laying out type (show, stringwidth, cshow) costs about 300 operations plus
64 a character, measured, and now counts that much against MAX_OPS: a
300-byte file running cshow over a 4 MB string took 60 s, and
{ (a) stringwidth pop pop } loop ran for over 5 minutes (already the case on
main); both now stop with "the program runs too long" within seconds.
Tests: executable filters run inside themselves stop at the nesting limit
(directly, mutually and under stopped), currentfile cvx exec runs nothing
twice, cshow over a long string is refused; the hostile PostScript fuzz
tokens gain self-recursive filter execution, currentfile filters, cvlit and
cshow.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-08 05:24:44 +07:00
Daniel Efrat edc7c931dc Type: Hebrew and Arabic text laid out right to left (bidi), aligned by its direction
- Unicode bidi (unicode-bidi, unicode-script, unicode-general-category):
  each paragraph's direction from its first strong character, Hebrew and
  Arabic shaped right to left, embedded Latin and numbers keep theirs,
  lines wrapped in logical order and reordered per line by whole
  clusters; source text, undo and style ranges stay logical.
- Caret, hit testing, selection and the arrow keys follow the visual
  order.
- New text aligns automatically: right-to-left paragraphs right, others
  left (Justify::Auto, text.setStyle {justify: "auto"}); the Paragraph
  panel highlights the resolved alignment and has an Automatic alignment
  toggle. Explicit alignments, and older documents', are kept.
- SVG export outlines bidirectional text (with a warning) until it can
  be written as directional live text.
2026-10-08 05:24:44 +07:00
bflatasticandClaude Opus 5.5 249b34fc7c Select: saved selections checked when a file opens, names capped, docs (review of #318)
A file's saved selections are untrusted: on load at most 25 are kept, names
are trimmed, capped at 255 characters and unique, and ids the document
doesn't have are dropped (after fix_next_id such an id would select whatever
object is drawn next). Save and Edit Selection cap names the same way. The
limit, the name cleanup and the default "Selection N" live on
SavedSelection, shared by the engine, the Save Selection dialog and the
Select menu's slot table. docs/mcp.md documents the select.save /
savedList / recall / editSaved commands; ROADMAP counts 13 stubbed menu items
and names what's still missing (Update Selection, the Layers panel menu).

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-08 05:24:44 +07:00
bflatasticandClaude Opus 5.5 87d1acd589 MCP: panel names from the dock's own tables, object-read errors kept apart, docs (review of #328)
normalize_panel walks DockTab::ALL and ICON_PANELS instead of repeating the
dock tab ids. vectorcraft://object/{id} turns only a missing object into
-32602; no document or an unreachable app stay backend errors, as before.
docs/mcp.md documents document.node's summary flag and the panel names
open_panel takes; control-protocol.md the window.panel names. The ROADMAP
states the measured speed-up (a leaf read on 2,000 objects: ~20 ms to ~0.06 ms).

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-08 05:24:44 +07:00
bflatasticandClaude Opus 5.5 cea2ee6a54 Type: font menu previews end safely, rows and samples cost less per frame (review of #339)
- A preview whose menu has gone (the panel isn't drawn: text deselected,
  panel closed) or is closing (Escape, a press outside the menu) is undone
  at the start of the frame, before the canvas sees the input: a canvas
  drag no longer runs inside the preview's interaction and gets rolled
  back with it. The menu also ends the preview in the frame it closes.
- The list fits the popup (it was taller than the popup, which then
  scrolled too), so the current family is centred in view on opening;
  ↑/↓ scroll only as far as needed.
- Type › Font (in-window menu bar): each item keeps room for its sample
  after the name, so long family names no longer run under it.
- Rows are listed again only when the query, filters, expanded families,
  favourites or font list change, not every frame.
- Samples: one budget per frame across every menu (Type › Font gave each
  item its own), at most 8 rendering at once, the worker asks for a
  repaint when it is done instead of polling, the cache holds 512, and
  one function draws a sample for both menus.
- Font menus use menu_family_list (the hidden-family rule lives there);
  FontClass::label is gone (the menu's translated labels are the only
  ones).
- Tests: a preview left by a menu that is gone is undone; a press
  outside the open menu ends the preview in that frame.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-08 05:24:44 +07:00
bflatasticandClaude Opus 5.5 8f7949c30b i18n: Japanese rows for the Layers panel and GPU preference, consistency fixes (review of #317)
- 28 rows for strings that landed on main after #317 was written (Layers
  panel menu and options, Release to Layers, the Graphics Processor
  preference), so the Japanese catalog stays complete.
- Fixes: Live Paint Bucket is ライブペイントツール (was the selection
  tool's name), the File Info rating stars read {n} つ星 (were "rays"),
  Flare Tool Options and Symbol Sprayer match their tool names, Rectangular
  Grid matches its tool (長方形グリッド), recovery data is 復帰用データ
  throughout, (今後対応予定) for every roadmap note.
- Consistent spelling: フォルダー, 切り替え, Web サイト, 英語 (米国), and
  a half-width colon after every field label, as in the other 200 rows.
- tests: KEEPS_MENU_NAMES gets its own doc comment instead of taking
  MENU_KEEP_AS_IS's.
- ROADMAP and docs/development.md: Japanese ships complete, Czech covers
  the menus.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-08 05:24:44 +07:00
bflatasticandClaude Opus 5.5 079c46dafb Type: the Mojikumi Set menu shows with the East Asian options, under its feature name (review of #350)
The Paragraph panel's mojikumi control is one of the panel's options
(hidden with Hide Options) and appears when Preferences > Type > Show
East Asian Options is on, as Illustrator shows its Mojikumi and Kinsoku
sets; it is labelled Mojikumi Set. ROADMAP notes where it lives.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-08 05:24:13 +07:00
bflatasticandClaude Opus 5.5 e792d2a964 Type: vertical_glyph's doc names the two values it returns (review of #343)
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-08 05:23:48 +07:00
Brandon ThomasandClaude Opus 5.5 5196337ca8 i18n pt-br: drop three Layers strings main no longer shows (#384 follow-up)
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-07 18:04:30 -04:00
Brandon Thomas 0cf2879d06 Merge pull request #384 from RicSchonfelder/i18n-pt-br
i18n: add Brazilian Portuguese (pt-br) UI translation

# Conflicts:
#	ROADMAP.md
#	crates/ui-egui/src/i18n/tests.rs
2026-10-07 18:01:27 -04:00
Brandon ThomasandClaude Opus 5.5 4f159b98fb Merge pull request #376 from Haven-King/feat/artboard-snapping
Add Snapping to the Artboard Tool

Merged with the Artboard tool's Alt-drag duplicate (#348): a copy snaps too, and to the artboard
and art it leaves behind (a move skips them).

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-07 17:50:15 -04:00
Brandon Thomas 6b294c28b2 Merge pull request #373 from midasdf/fix/type-button-vertical-flyout
M7: expose Vertical Type in the basic Type tool flyout

# Conflicts:
#	ROADMAP.md
2026-10-07 17:49:18 -04:00
Brandon ThomasandClaude Opus 5.5 ecbb2c8c42 Type: the Japanese–Latin quarter em leaves Hangul alone and counts 々 〆 〇 as letters (#370 follow-up)
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-07 17:49:05 -04:00
Brandon Thomas e6da1ca3c3 Merge pull request #370 from imachus/pr/ja-wakan
Type: mojikumi — a quarter em between Japanese and Latin text

# Conflicts:
#	ROADMAP.md
2026-10-07 17:47:44 -04:00
Brandon ThomasandClaude Opus 5.5 5be1790717 PDF import (#337 follow-up): keep missing-font text live, decide each font's face once, Kangxi fix for CID text only
- Text in fonts that aren't installed comes in as live type in the fallback font again, named as
  before (Helvetica-Bold → Helvetica Bold), not outlines plus pink copies on a non-printing layer.
- The installed face that matches a PDF font is decided once per font from its first comparable
  glyph, not per glyph (loading up to 64 faces each time, and switching style mid-line).
- Kangxi radicals are unified only for text from Adobe's CID tables, not ToUnicode maps.
- A line is laid out again only when tracking changed it.
- CidText::of is tested on data that isn't a CID-keyed CFF (embedded fonts are untrusted).
- NOTICE: Adobe CMap resources (BSD-3-Clause) bundled through hayro-cmap.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-07 17:47:25 -04:00
RicSchonfelder 62d6ea4bed i18n: add Brazilian Portuguese (pt-br) UI translation
Add the crates/ui-egui/src/i18n/pt-br.tsv catalog (Brazilian Portuguese):
every menu label, every tl! literal of the shell and the plural messages
(2533 strings + 13 plurals), written clean-room in ordinary Brazilian
Portuguese computing vocabulary, placeholders and trailing ellipses kept
in lockstep with the English source.

Register the language in i18n::LANGUAGES (code pt-br, native name
"Português (Brasil)", one/other plural rule) so the Language menu, the
preference and the system-locale match (pt_BR → pt-br) pick it up.

Extend the menu-label test to pt-br: it covers every menu label like cs
and ja, and keeps the MENU_KEEP_AS_IS strings (product name, language
names, workspace names, perspective grid presets) in English.

Update docs/development.md and ROADMAP.md accordingly.
2026-10-07 18:44:42 -03:00
Brandon Thomas df31117196 Merge pull request #337 from imachus/pr/ja-pdf-text
PDF/.ai import: Japanese text as live type (CID fonts, vertical columns, missing fonts)
2026-10-07 17:38:15 -04:00
Brandon ThomasandClaude Opus 5.5 fc59594f6a i18n: Japanese for the strings main gained since #317 was written (Layers panel, saved selections, Delete Anchor Points)
#317 marks Japanese complete; the catalog tests require every menu string and tl! literal.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-07 17:15:56 -04:00
Brandon ThomasandClaude Opus 5.5 c2f6508447 MCP: a server sends log records only when its own client asked for them
The log queue is process-wide. Any server draining it after a request, whether or not its client
called logging/setLevel, could take another session's records; under parallel tests that made
log_records_go_out_as_notifications_once_asked_for flaky.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-07 17:15:56 -04:00
Brandon ThomasandClaude Opus 5.5 440174d563 Type: rustfmt the merged vertical-glyph rotation (#343 + #350)
Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-07 17:04:17 -04:00
Brandon Thomas 219c8d4ae3 Direct Selection: keep the spine, mesh and frame overlays while a handle is dragged (#332 follow-up)
Co-Authored-By: Claude Opus 5.5 <[email protected]>
(cherry picked from commit 65a5c24081c733e70ad453318cedadf01ed6451a)
2026-10-07 17:03:49 -04:00
Brandon Thomas 1a5b3f00ba Font menu: keep at most 256 sample textures (#339 follow-up)
Each sample can take ~370 KB of texture; 3000 of them could hold about a gigabyte.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
(cherry picked from commit d2daeefb6ef442a472696e78498deeedc03ca823)
2026-10-07 17:03:08 -04:00
Brandon Thomas b33e964aec Merge pull request #339 from imachus/pr/ja-font-menu
Type: a font menu with samples, live preview, script and kind filters, styles and favourites

# Conflicts:
#	crates/ui-egui/src/i18n/ja.tsv
2026-10-07 17:03:08 -04:00
Brandon Thomas 18df24c04d i18n tests: put MENU_KEEP_AS_IS's doc comment back on it (#317 follow-up)
Co-Authored-By: Claude Opus 5.5 <[email protected]>
(cherry picked from commit 030f8bc5344341b209b42b4a7e967cdaeeefed08)
2026-10-07 17:03:07 -04:00
Brandon Thomas 21b3dbf522 Merge pull request #317 from imachus/pr/ja-catalog
i18n: Japanese for the whole interface (panels, dialogs, tooltips, hints)

# Conflicts:
#	ROADMAP.md
#	crates/ui-egui/src/i18n/ja.tsv
2026-10-07 17:03:07 -04:00