Major update for v1 and tests
This commit is contained in:
54
src/constants/textMetrics.js
Normal file
54
src/constants/textMetrics.js
Normal file
@@ -0,0 +1,54 @@
|
||||
/**
|
||||
* Text-rendering constants shared across measurement, bounds, and render code.
|
||||
*
|
||||
* Before this module: `1.2`, `12`, and similar magic numbers were repeated
|
||||
* across `textGeometry.js`, `elementBounds.js`, and `TextElement.jsx`. If
|
||||
* Konva's defaults ever changed (or the design system picked a different
|
||||
* line-height ratio), every site had to be updated in lockstep — and there
|
||||
* was no way to grep for "the line-height ratio" since it was just `1.2`.
|
||||
*
|
||||
* Centralizing here keeps those callers honest. New text-related constants
|
||||
* that show up in 2+ places should land here.
|
||||
*
|
||||
* Note on per-component font-family defaults
|
||||
* ──────────────────────────────────────────
|
||||
* `TextElement.jsx` defaults `fontFamily = 'DM Sans'` (the body face) for
|
||||
* its prop. `textGeometry.js` defaulted to `'Pacifico'` (the display face)
|
||||
* for its measurement-fallback path. Those are intentionally different —
|
||||
* an element rendered without a fontFamily uses DM Sans, but the
|
||||
* measurement helpers fall back to the display face that matches new-text
|
||||
* placement defaults. We keep that distinction by exposing both names
|
||||
* here and letting each call site pick the one that matches its semantics.
|
||||
*/
|
||||
|
||||
// Konva's default line-height ratio. Multiply by fontSize to get the
|
||||
// rendered height of a single text line.
|
||||
export const LINE_HEIGHT_RATIO = 1.2;
|
||||
|
||||
// Floor for fontSize during scale-down operations. Below this, text becomes
|
||||
// hard to read and the rounded display in the Text tab starts losing
|
||||
// precision (12 → 11 → 10 each cost ~10% of legibility).
|
||||
export const MIN_FONT_SIZE = 12;
|
||||
|
||||
// Ceiling for auto-computed fontSize values (e.g. width-preservation
|
||||
// when swapping to a narrower font). The Text tab's slider tops out at
|
||||
// 120 for typical fine-tuning, but width-preservation can legitimately
|
||||
// land above that when going from a wide display face to a very
|
||||
// condensed one. 200 gives plenty of headroom (about 2/3 of the
|
||||
// 300-design-unit canvas height) while preventing pathological growth
|
||||
// on a font whose measureText returns near-zero for a particular glyph.
|
||||
// The user can still corner-drag the text on canvas past this value;
|
||||
// the cap only governs the auto-preserve math.
|
||||
export const MAX_FONT_SIZE = 200;
|
||||
|
||||
// Default fontSize when an element doesn't specify one. Matches the
|
||||
// historical TEXT default in textGeometry.placeTextCentered.
|
||||
export const DEFAULT_FONT_SIZE = 32;
|
||||
|
||||
// Display face used by the freeform "Add text" button and as the
|
||||
// measurement fallback when an element has no explicit fontFamily.
|
||||
export const DEFAULT_DISPLAY_FONT = 'Pacifico';
|
||||
|
||||
// Body face used by TextElement's prop default (so Konva renders something
|
||||
// reasonable when the prop is omitted).
|
||||
export const DEFAULT_BODY_FONT = 'DM Sans';
|
||||
Reference in New Issue
Block a user