21. April 2026

19. April 2026

18. April 2026

16. April 2026

14. April 2026

Subtractor

mekkablue • Merge branch 'claude/add-masked-components-checkbox-1vXJQ'

Subtractor

Claude • Remove stale subtract components before placing a new masked component When the mask option is active in Edit view, any components on the layer whose glyph name equals or starts with the subtract-shapes prefix are stripped before the new component is added. This prevents duplicate subtract components from accumulating across repeated filter runs. The tooltip on the 'Add as Masked Components' checkbox now documents this behaviour. https://claude.ai/code/session_0111BBtHhcwvQuhN1hEWCeWS

Subtractor

mekkablue • Version 1.0.2: "Added non-destructive mask option for Edit view."

Subtractor

Claude • Apply centering/rotation/offset transforms to masked components When 'Add as Masked Components' is active, the same Center Bounding Boxes, Random Rotate, and Random Offset settings now apply to the placed GSComponent via a computed affine transform matrix. The matrix is derived by composing the three operations—centering translation, rotation around the (possibly shifted) bbox pivot, and random offset—into a single (m11,m12,m21,m22,tX,tY) tuple that produces an algebraically identical result to what subtractFromLayer applies to paths. A new buildComponentTransform() helper encapsulates the derivation. https://claude.ai/code/session_0111BBtHhcwvQuhN1hEWCeWS

13. April 2026

Subtractor

Claude • Add 'Add as Masked Components' checkbox (Edit view only) When checked, the filter skips the boolean subtraction and instead appends a GSComponent of the chosen subtract glyph to the layer with component.attributes['mask'] = 1. The option is stored as a user preference and exposed in the GUI dialog (new checkbox below 'Center Bounding Boxes'). It is intentionally excluded from generateCustomParameter so it has no effect on batch-export custom parameters. https://claude.ai/code/session_0111BBtHhcwvQuhN1hEWCeWS

11. April 2026

Hanzi IDS Component Explorer

Erikyin • feat: 加入筆畫數篩選功能(CNS11643 整合) (#10) * feat(#9): 加入筆畫數篩選功能 從 CNS11643-OpenData 的 CNS_stroke.txt 載入筆畫資料,編譯進 ids.pdata (新增 strokes 欄位),並在主視窗底部加入離散滑桿(±0/±1/±2/±3/±5/關閉) 讓使用者依與當前主字的筆畫差篩選右側相關字面板。 資料層 - IDSGenerator 新增 cns_properties_path 與 _load_stroke_data - _save_pdata 把 strokes 寫入紀錄;以 lstrip("0") 處理 BMP/非 BMP 不同 hex 寬度 - 覆蓋率約 76,983 字(74.8%),剩餘為超出 CNS 範圍的 Ext-G/H 罕字 核心 API - HanziCore._convert_format 保留 strokes 欄位(向後相容舊資料庫) - HanziCore.get_stroke_count / filter_by_strokes - 主字無資料時回退為全顯示,避免空白面板 UI - localization 新增 slider_stroke_label / slider_stroke_off / tooltip_stroke_filter - glyphs_ui showDerivedCheckbox 左移 56px,騰出空間給 vanilla.Slider - 滑桿狀態跨 session 持久化(settings strokeFilterTick) - 套用於 update_related_display 的 sister 與 derived 兩個迴圈 - 無筆畫資料的字僅在「關閉」時顯示 文件 - NOTICE 補上 CNS_stroke.txt 來源說明 - CHANGELOG 新增 1.0.3 區段 - README 中英版同步說明新功能與資料覆蓋率 測試 - tests/test_hanzi_core_strokes.py:15 測試(get_stroke_count + filter_by_strokes) - tests/test_ids_generator.py:新增 6 測試(stroke 載入 + 整合) - 全套 30 測試通過 closes #9 * feat(#9): 滑桿狀態加上常駐顯示 原本筆畫篩選滑桿的當前值只能透過 hover tooltip 看到,不直覺。 新增右側 inline TextBox 常駐顯示當前值(±0/±1/±2/±3/±5/OFF), slider 縮短 40px 騰出空間。 - 新增 _format_stroke_filter_value() helper 回傳簡短顯示字串 - 重新命名 _update_stroke_filter_tooltip → _refresh_stroke_filter_display 同時更新 tooltip 與 inline 文字 - on_stroke_filter_changed 改呼叫新 helper - tooltip 仍保留完整功能說明(hover 時顯示) * fix(#9): 滑桿狀態文字改靠左對齊貼緊滑桿 原本 alignment=right 讓短文字(中文「關」1 字)與滑桿之間 出現大量左側空白,視覺上像有 20px 缺口。改為 left 對齊後 文字緊貼滑桿右緣,且不論 OFF/±0/±5/關 長度都一致。 順便把 TextBox 寬度從 36 縮到 30,並把 slider 右側 margin 從 -82 調回 -76 收緊空間。 * chore(#9): v1.0.3 版本號更新 - Info.plist: CFBundleShortVersionString 1.0.2 → 1.0.3, CFBundleVersion 3 → 4 - pyproject.toml: version 1.0.1 → 1.0.3(先前與 Info.plist 不同步) - pyproject.toml: 加上 py-modules=[] 明確宣告無 Python 套件,避免 setuptools 在 data/ 與 LICENSES/ 之間做自動探索失敗 - CHANGELOG 1.0.3 區段補上字符與筆畫覆蓋統計,並新增 release 連結 - CHANGELOG 1.0.3 條目補「滑桿狀態常駐顯示」這次迭代結果

10. April 2026

8. April 2026

Show TrueType Curves

Henrique Beier • Draw deviation label at max-deviation point instead of glyph bounds Place the deviation label near the actual point of maximum deviation, offset along the PS-to-TT normal vector, rather than below the glyph bounding box. Also returns the point and normal from `_computeLayerDeviation` so callers can use them without recomputing.

Show TrueType Curves

Henrique Beier • Add deviation analysis and high-deviation glyph reporting Implement PS→TT deviation computation using segment-local sampling of cubic vs. quadratic Bézier curves. Deviation is cached lazily alongside the existing TT path cache. Layers exceeding MAX_DEVIATION (0.7 units) display a numeric label in the edit view. A new menu action opens a tab with all high-deviation glyphs in the current master, sorted by severity.

7. April 2026

Show TrueType Curves

Henrique Beier • Refactor plugin code for clarity and maintainability - Extract magic numbers to module-level constants - Replace `Glyphs` variable with `app` for clarity - Create `_getActiveTool()` helper method to reduce duplication - Fix indentation in `conditionsAreMetForDrawing()` - Change `self.masterIds` to local variable (only used once) - Remove unused `masterIds` instance variable initialization

Show TrueType Curves

Henrique Beier • Draw TrueType preview on inactive layers - Replace instance variables with a per-layer cache dictionary - Extract TrueType path conversion into `_getTrueTypePaths()` - Extract preview drawing logic into `_drawTrueTypePreviewForLayer()`

Show TrueType Curves

Henrique Beier • Refactor preview tool detection and add foreground method - Rename _isHandToolActive to _isPreviewToolActive to reflect that both hand and text tools trigger the preview - Add foreground method to draw TrueType preview on top of Glyphs' default preview with proper background clearing - Update references to use new method name

6. April 2026

1. April 2026