Commit Graph
1280 Commits
Author SHA1 Message Date
Tanish Manku 1b39fbbabe Merge pull request #2835 from storytold/fix/unused-patches
build: drop three egui patches nothing uses
2026-11-05 16:31:42 -07:00
Tanish Manku 2611bc5f5b Merge pull request #2833 from storytold/land/2016
Land #1971 and #2016: Georgian font and Georgian interface language
2026-11-05 16:31:28 -07:00
Tanish Manku deb1468d08 build: drop three egui patches nothing uses
egui_system_font_provider, egui_demo_lib and egui_inspection were patched to the egui fork
with the rest of its family (#2119), but no crate here depends on them: Cargo.lock lists
them as [[patch.unused]] and cargo warns on every build. A vendored offline build (Nix's
importCargoLock) refuses an unused git patch, so the flakes in #794 and #1814 can't build
main. Reported by @mbolling on #1814.
2026-11-05 16:10:30 -07:00
Tanish Manku befb9b6f61 Merge branch 'pr-2016' into land/2016 2026-11-05 14:36:35 -07:00
Tanish Manku ec0decfd5c Merge branch 'pr-1971' into land/2016 2026-11-05 14:36:35 -07:00
Tanish Manku fc157ea91f Merge pull request #2831 from storytold/land/1031
Land #1031: Latin accents in the CADCraft Stroke font
2026-11-05 14:17:44 -07:00
Tanish Manku 0d125d6a8f Merge remote-tracking branch 'origin/main' into land/1031 2026-11-05 13:08:56 -07:00
Tanish Manku 6d39cf2297 Merge #1031 (Latin accents in the stroke font) onto main
#1031's SHX reader, TextFont::Shx wiring and doc edits are superseded by main's SHX support
(#2751, which landed #1944) and resolved to main's. Kept from #1031: the accented Latin
letters of CADCraft Stroke (stroke.rs, composed from its own letter bodies and marks), their
test (fonts/tests/latin_accents.rs) and a synthetic SHX text-through-DXF test
(io/tests/shx_text.rs), which passes against main's reader.
2026-11-05 13:08:55 -07:00
FredApps df65974458 Merge pull request #2818 from ZIDAN44/fix/803-mcp-render-background
fix(mcp): render takes a background and a plot style (#803)
2026-11-05 15:04:04 +01:00
FredApps 74485a71b1 Merge branch 'main' into fix/803-mcp-render-background 2026-11-05 14:52:29 +01:00
FredApps 6ca414c344 Merge pull request #2180 from helenkwok/web/host-page
feat(web): page host mode, so a page can host CADCraft in its own document (#2178)
2026-11-05 14:10:58 +01:00
Zinadin ZidanandClaude Opus 5.5 75175c807d refactor(render): one constant for the dark canvas; the render error limits say they are limits (#803)
render_look's DARK repeated the rasteriser's default background; both now
read RasterOptions::DARK_BACKGROUND. ECHO and LISTED_TABLES are renamed
MAX_ECHO_CHARS and MAX_LISTED_TABLES. No change in behaviour.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-05 19:10:58 +06:00
Helen Kwok 0902a13b88 cadcraft-web: speak the host messages through craft-web-host
The transports, the message types and the origin checks come from the shared crate (storytold/craft-libs#420); CADCraft keeps the engine delivery hook, the open size limit and the upload inbox.
2026-11-05 17:50:59 +08:00
Helen Kwok afea2be761 packaging/web: document what page host mode trusts, the limits on host files, and the stable event names 2026-11-05 16:59:08 +08:00
Helen Kwok ea79be1309 ROADMAP: leave the roadmap rows to the maintainers (AGENTS.md) 2026-11-05 16:59:08 +08:00
Helen Kwok e5cac11426 packaging/web: the README example reports an init failure 2026-11-05 16:59:08 +08:00
Helen Kwok 1c3975523d feat(web): page host mode, so a page can host CADCraft in its own document (#2178)
data-host="page" on the canvas opts a page that loads the module into its own document into the host bridge. The ?host=parent messages travel as non-bubbling CustomEvents on the canvas; the bridge holds a Transport (Parent or Page) with one send, and the open, save, dirty, ready and failure handling is shared. ?host=parent is checked first and unchanged, including no bridge for an unframed page. The hosting guide documents both modes.
2026-11-05 16:59:08 +08:00
Helen Kwok 4b47a04a09 Contributors: credit helenkwok as Helen Kwok 2026-11-05 16:59:08 +08:00
Zinadin ZidanandClaude Opus 5.5 04a279cff0 fix(mcp): a render with a plot style plots on white; "none" turns plot styles off (#803)
A plot style alone drew black lines on the dark canvas: the tables that
change colours print colour 7 (and, in monochrome.ctb, every colour)
black. With `plot_style` and no `background`, the render now draws on
white, as a plot prints on paper; a given background still wins.

`plot_style: "none"` (or "") draws every object with its own
properties, also in a layout that shows its own plot styles. An unknown
table's error lists the built-in tables and at most ten of the
drawing's own. The app's ui.render test now draws a red line, so it
fails if the plot style isn't passed on.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-05 12:09:31 +06:00
Zinadin ZidanandClaude Opus 5.5 017cc9b1fc fix(mcp): render takes a background and a plot style (#803)
The MCP render tool and ui.render, in the app and headless, always drew
on the dark canvas with no plot style, so a PNG placed on a page needed
the SVG export instead.

They now take `background` ("dark", the default; "white", "paper" or
"#rrggbb") and `plot_style` (a built-in plot style table such as
monochrome.ctb or grayscale.ctb, or one the drawing holds). Colour 7 is
drawn black on a light background and white on a dark one, as on a plot.
An unknown value is refused with what is accepted. Both copies of
ui.render read the options through one function in the engine
(render_look). The render tool's description also says it returns an
image block, not text.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-05 11:20:52 +06:00
Davit MatchakhelidzeandClaude Sonnet 5.5 fe67c048ec Leave ROADMAP.md and docs/localization-parity.md to maintainers
CLAUDE.md: PRs don't edit these docs. The affected rows are named in the PR description.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YMTAbGNRxnMEzRvYnQGphF
2026-11-05 09:01:04 +04:00
Davit MatchakhelidzeandClaude Sonnet 5.5 40f060018d Leave .github/workflows/release.yml to a maintainer
CLAUDE.md: no CI changes in a feature or fix PR. The web-craft-fonts line is described in the PR description.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YMTAbGNRxnMEzRvYnQGphF
2026-11-05 09:01:04 +04:00
Davit Matchakhelidze 2c0fe29a02 Merge remote-tracking branch 'origin/main' into ka-language 2026-11-05 09:00:31 +04:00
Davit Matchakhelidze 7af5718b20 Merge remote-tracking branch 'origin/main' into fonts-georgian 2026-11-05 09:00:31 +04:00
FredAppsandClaude Opus 5.5 c4d9e6ac64 fix(ui): About credits tables fit without side-scrolling and their columns resize (#2747)
* fix(ui): About credits tables fit without side-scrolling and their columns resize

The Contributors table and the Models table were egui Grids inside a
two-way scroll area: they opened wider than the dialog, so they scrolled
sideways, and Company and Model sat almost touching. Both are now
egui_extras tables. Each column opens at the width of its header and widest
cell, the spare width goes to the text columns (Name; Company and Model),
and every column edge can be dragged. Widening a column grows the table
like a spreadsheet, and only then does it scroll sideways; the header stays
put while the rows scroll. Counts and dates are right-aligned and every
cell is vertically centred.

The sorted column stays highlighted and its direction shows on the
toolbar's sort-order button, so headers no longer reserve room for an
arrow. The opening widths come from fit_widths, a pure function with unit
tests that a fitted table fills its room exactly and that only the text
columns give way when room is short.

The About dialog opens 820 points wide, so every column fits at its natural width.

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

* Let every credits column be dragged, and refit changed tables

The last column was egui's remainder column, which has no drag handle, so
it could only be resized from the edge before it. It is now an ordinary
column with its own handle.

A table keeps its column widths, so switching to a longer name left the
Name column at its old width and clipped the text. The table now goes
back to the opening fit whenever that fit changes: a longer widest cell
or a resized window. Dragged widths are dropped at that point.

fit_widths could overflow the room when one column hit the minimum,
because the other columns did not take up its share. Columns now give
way in proportion to their width above the minimum.

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

* Refit credits tables on what they measure, not the fitted widths

Comparing the fitted widths missed the case it was meant for. Name is the
only growing column, so a longer name takes its extra width from the
spare room and the fit comes out the same: a dragged Name width stayed,
clipping the longer name.

It could also drop dragged widths by accident. The fit comes from the
available width inside the scroll area, which scrolling can nudge, so
scrolling a widened table could reset it.

The table now compares the natural widths and the clip rect's width,
which scrolling does not move.

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

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-05 04:33:26 +01:00
Tanish Manku 2569dbd58f Merge pull request #2803 from storytold/land/2316
Land #2316: Hebrew SHX fonts, font-change redraw, user font folders (fonts crate)
2026-11-04 20:20:01 -07:00
Tanish Manku 843ffb6507 Fonts: a registered font outlives a rescan, also beside a file of the same stem (CodeRabbit on #2803) 2026-11-04 19:58:44 -07:00
Tanish Manku 5b2c7bb0fb Fonts: a font's family name falls back to the family when the typographic one is blank (CodeRabbit on #2803) 2026-11-04 19:34:32 -07:00
Tanish Manku f7fbf41e61 Merge remote-tracking branch 'origin/main' into land/2316 2026-11-04 19:13:47 -07:00
Tanish Manku 1947e4e09e Fonts: review fixes on #2803 (Unix clippy, the degree sign in DOS Hebrew fonts, font-keyed caches)
- The linked-folder test (Unix only) passes a slice without a clone (clippy
  cloned_ref_to_slice_refs, which failed the Linux gate).
- In a DOS 862 Hebrew SHX font, %%d still draws from the old degree shape 127: only 128-129
  are letters there.
- The viewport highlight, drag preview and command preview caches key on the font set too,
  so text in them is drawn again when fonts change.
2026-11-04 19:13:39 -07:00
3c123fd61c New and redrawn icons (drawn in code); clicks on painted controls keep the keyboard with the drawing (#2319)
* New and redrawn icons (drawn in code); a click on a painted control leaves the keyboard with the drawing

Split out of #2034. No image files: every icon is drawn in code.

- New: Zoom In / Zoom Out / Zoom to Fit, Move to Top / Up / Down /
  Bottom, Text Style and Dimension Style (with a small gear); redrawn:
  Undo, Redo, Plot, Preview, the dimension tools and others.
- icons::button_bare: a button without its hover text, for callers that
  show a richer tooltip.
- Clicking a painted control (a file tab) no longer takes keyboard focus,
  so Ctrl+C in one drawing and Ctrl+V in another keep working; Tab still
  reaches it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RzTHYMZTCtkW9FExLCKj5V

* Undo/Redo icons of our own design; the clipboard test requires the copied text

Review (CodeRabbit): the Undo/Redo comment named another product's icons as
the model. The icons are redrawn to our own design (a straight run and a
half-turn back, in the icon colour) and the reference is gone.

The cross-drawing clipboard test no longer falls back to placeholder text:
it installs a DXF writer and requires the copy to reach the system
clipboard.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RzTHYMZTCtkW9FExLCKj5V

* Icons: fit upstream's split icon painter (the pen's painter, theme colours, dim flag)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RzTHYMZTCtkW9FExLCKj5V

* Icons: drop the dangling tool_button doc link; describe the tab click focus as it behaves

---------

Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: FredApps <FredApps@users.noreply.github.com>
2026-11-05 02:56:40 +01:00
Tanish Manku d12c87ca56 Fonts: review fixes on #2316 (load budget, linked font folders, a test in its own binary)
- A face found by family name in the user's font folders is loaded within the font-byte
  budget: no uncharged read past it (CodeRabbit on #2316).
- Linked font folders are followed again, as before #2316, in the system scan, the user
  scan and the SHX folder search; each real folder is read once, so a circle of links
  can't use up the scan's entry budget (CodeRabbit on #2316).
- The user-font-folder test changes process-wide font settings and emptied the font table
  under tests running beside it (2 of 3 runs failed): it moves to its own test binary,
  tests/ttf_font_folders.rs; that a list keeps no font bytes is checked on a local table.
2026-11-04 18:48:06 -07:00
Tanish Manku c56fcfc419 Merge branch 'pr-2316' into land/2316 2026-11-04 17:53:39 -07:00
Tanish Manku 5bfcee6299 Merge pull request #2795 from storytold/fix/array-extents
fix(doc): a rotated MINSERT array's extents reach its side copies
2026-11-04 17:51:22 -07:00
Dylan M. Taylor 594c30ae2d Pass the Linux signing key to the release workflow (#2798) 2026-11-04 17:45:46 -05:00
Tanish Manku fb6178b178 fix(doc): a rotated MINSERT array's extents reach its side copies
The extents took the first copy and the far corner copy only. Turned, the grid's
other two corner copies lie outside that box, so ZOOM Extents cut them off. All
four corner copies count now, and the counts are clamped to the 10,000 columns
and rows the renderer draws. Found by CodeRabbit on #2756.
2026-11-04 14:31:19 -07:00
Claude 962cebf9f6 Merge upstream main into split/shx-fonts
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RzTHYMZTCtkW9FExLCKj5V
2026-11-04 22:44:02 +02:00
Claude 7ea06a86db SHX fonts: list the ones in the user's font folders, for font lists
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RzTHYMZTCtkW9FExLCKj5V
2026-11-04 22:43:42 +02:00
Tanish Manku 3083b5b47f Merge pull request #2756 from storytold/land/2354
XCLIP and XCLIPFRAME; invert flag as AutoCAD's group 290 (#2354)
2026-11-04 13:41:12 -07:00
Tanish Manku f554de28b5 XCLIP: ON/OFF checks without copying boundaries and sets each reference once (CodeRabbit on #2756) 2026-11-04 13:02:38 -07:00
Claude 2c979eb14b Fonts: user font folders, Hebrew SHX fonts, redraw when fonts change (on #1944's SHX)
Rebuilt on main after #1944 (SHX shape fonts, big fonts, unifonts) landed: this part now
keeps only what #1944 doesn't do.

- User font folders (Options > Fonts, fontFolders): TrueType and OpenType files in them are
  found before the system's and listed first (ttf::set_font_dirs, installed, available,
  rescan); a face is found by its family name in any file there. SHX files in them, or in a
  folder under them, are found by the SHX font table too (shx::set_font_dirs), after the
  drawings' folders and before the search path. Folders are cleaned and capped, links to
  folders are not followed.
- Hebrew SHX fonts: a one-byte font with the letters at their Windows-1255 or DOS 862 places
  draws Hebrew text from them; a Cyrillic font with letters at those places is not taken for
  Hebrew. In a DOS 862 font, %%d %%p %%c come from shapes 256-258 only.
- The canvas draws text again when the TrueType or SHX font set changes (a font folder, a
  rescan, a drawing folder), the active viewport's model space included.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01RzTHYMZTCtkW9FExLCKj5V
2026-11-04 20:21:02 +02:00
Tanish Manku 371e8b9e02 XCLIP: ON/OFF checks every selected reference before changing any (CodeRabbit on #2756) 2026-11-03 21:56:58 -07:00
Tanish Manku ff5b55842e XCLIP: bound a filter's vertex count before allocating (CodeRabbit on #2756) 2026-11-03 21:34:23 -07:00
Tanish Manku 064f58f252 XCLIP: write an inverted clip as AutoCAD does in a file (no group 290)
AutoCAD 2024 writes no group 290 on a SPATIAL_FILTER in a DXF and discards a file whose
filter has one (measured by 2ez4gcx, #2756). An inverted clip's filter now gets an
extension dictionary with the ACAD_XREC_ROUNDTRIP XRECORD (ACAD_INVERTEDCLIP_ROUNDTRIP,
then ..._COMPARE). Reading takes the ROUNDTRIP list as the boundary while COMPARE matches
the filter's vertices, so AutoCAD's keyhole filters read as the clip drawn; 290 is still
read when present. The record survives DWG, so CADCraft's own CADCRAFT_XCLIP flag is gone.
2026-11-03 21:16:55 -07:00
Tanish Manku ef4b4f7e6c XCLIP: review fixes from CodeRabbit on #2756
- objects are found through a handle index when reading and writing clips, and removed in one pass (no scan per reference)
- the writer's handle seed starts past the clip objects, so a drawing with many clipped references gets no duplicate handles
- a clipped copy that runs out of the block budget marks the list truncated, like an unclipped one
- clipped block contents keep their own layers in plots
2026-11-03 19:34:20 -07:00
Tanish Manku 510b7283cb XCLIP: Chinese labels for Clip Xref, Xref and Xref Clip Frame 2026-11-03 19:11:23 -07:00
Tanish Manku 0d72152142 Merge main into land/2354 2026-11-03 18:21:00 -07:00
Tanish Manku 639c2e9825 XCLIP: clip on DVIEW's preview reference 2026-11-03 18:20:48 -07:00
Tanish Manku 2099288f54 Merge pull request #2751 from storytold/land/1944
SHX fonts, big fonts and unifonts; linetype shapes (#1944)
2026-11-03 18:20:27 -07:00
Tanish Manku 100d812155 Merge main into land/2354 2026-11-03 18:07:17 -07:00