You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Keyboard Zoom Center: Keyboard zoom (Cmd +/-) now centers towards bbox center in editing mode or cursor position in text mode, instead of always zooming towards canvas center.
Variable Axis Animation: Added play/pause button next to each variable axis slider that animates the axis in a sine wave. Animation wavelength configurable via AXIS_ANIMATION_WAVELENGTH setting (default: 5 seconds). Animation starts from current slider position, suppresses layer/master selection during playback, and Escape key stops all active animations. Button uses Material Symbols play_arrow/pause icons.
Measurement Tool Improvements: Changed activation key from Alt to Shift (keeps delay). Added coordinate labels: y-coordinate on left edge in both modes, x-coordinate at top in editing mode (relative to glyph origin).
Preview and Panning on Space Key: Instead of splitting panning to Cmd and preview to space key, both are now on space key. In text mode, preview mode kicks in after 200ms of pressing space, while shorter inserts the space character.
OpenType Feature Layer Data Refresh: After applying OpenType features in editing mode, layer data is now refreshed to reflect potential glyph substitutions (e.g., ligatures, alternates), and the viewport maintains the glyph's bounding box center at the same screen position using the auto-pan system.
Component Counter Rendering and Hit Detection: Components with paths in opposite directions now correctly render as open countershapes (holes) using the canvas nonzero winding rule. Both rendering and hit detection now combine all component paths (including nested components) into a single canvas path before filling/testing, allowing proper counter handling. Fixed double-click priority so component/point interactions in edit mode take precedence over glyph switching.
Browser Navigation Prevention: Added protection against accidental app closure from browser back navigation shortcuts (Backspace when not in text fields, Alt+Left, Cmd+[, Cmd+Left on macOS). Also prevents accidental page reload in production (Cmd/Ctrl+R, F5) while allowing reload shortcuts in development mode.
Component Labels in Edit Mode: Added hover labels for components in edit mode, similar to glyph name labels in text/preview modes. Labels display the component reference name centered below the component's bounding box, with proper handling of component transforms and nested components.
Canvas Plugin Architecture: Implemented Python-based plugin system for drawing custom visualizations on the glyph canvas. Plugins are loaded as wheels via Pyodide, discovered using Python entry points (context_canvas_plugins group), and can draw below or above the canvas by implementing draw_below(layer_data, glyph_name, ctx, viewport_manager) and/or draw_above(layer_data, glyph_name, ctx, viewport_manager) methods. Includes complete example plugin that draws filled outlines and glyph names. See instructions/CANVAS_PLUGINS.md for documentation.
Error Display UI: When font compilation fails (during loading or editing), the right sidebar now displays a nicely designed error message instead of the OpenType features and sliders. The error UI automatically disappears when the font compiles successfully again.
OpenType Parsing Refactoring: Replaced opentype.js JavaScript library with native Rust/WASM implementation using skrifa and read-fonts from Google Fonts fontations project. Added WASM functions get_glyph_name(), get_glyph_order(), get_font_features(), get_stylistic_set_names(), and get_font_axes() that parse compiled fonts directly. Features UI now displays stylistic set names (ss01-ss20) from GSUB/GPOS feature parameters + name table lookups. Axes manager reads variation axes from fvar table with name table lookups for axis names. Removed opentype.js dependency and @types/opentype.js from package.json. Separated font reading code into dedicated font_reader.rs module and interpolation code into interpolation.rs module for better code organization.
OpenType Features Refactoring: Migrated OpenType feature information (default-on/default-off features, descriptions) from Python (webapp/py/opentype.py) to JavaScript/TypeScript (webapp/js/opentype-features.ts). Features UI now uses native JS module instead of calling Python via Pyodide, improving performance and reducing Python dependencies.