Module: FontMetrics
- Defined in:
- lib/rsyntaxtree/utils.rb
Defined Under Namespace
Classes: Metrics
Constant Summary collapse
- LINE_HEIGHT_FACTOR =
Vertical rhythm is defined deterministically from the font size rather than taken from Pango's font-dependent logical extents. The 1.4 factor reproduces the line height the previous RMagick-based measurement reported for the Latin fonts (45px at a 32px font size), preserving the vertical look of existing trees; Pango's own logical height (~1.03x) would compact every tree by roughly 25%. It also makes the rhythm identical across scripts (the old engine gave JP 1.5x and WenQuanYi 1.25x, so mixed-language documents had inconsistent spacing).
1.4
Class Method Summary collapse
-
.get_metrics(text, font, fontsize, font_style, font_weight) ⇒ Object
Measures text with Pango, the same engine (and the same font fallback resolution) that librsvg uses to render the SVG output, so widths stay consistent with the drawn output for any script.
- .pango_layout ⇒ Object
Class Method Details
.get_metrics(text, font, fontsize, font_style, font_weight) ⇒ Object
Measures text with Pango, the same engine (and the same font fallback
resolution) that librsvg uses to render the SVG output, so widths stay
consistent with the drawn output for any script. font is a
comma-separated family list (e.g. FontFamily.for_pango(:sans)).
130 131 132 133 134 135 136 137 138 139 140 141 142 143 |
# File 'lib/rsyntaxtree/utils.rb', line 130 def get_metrics(text, font, fontsize, font_style, font_weight) layout = pango_layout desc = Pango::FontDescription.new desc.family = font # absolute_size is in device pixels, matching the unitless font-size # (px) of the SVG text that librsvg renders. desc.absolute_size = fontsize * Pango::SCALE desc.style = font_style == :italic ? :italic : :normal desc.weight = font_weight == :bold ? :bold : :normal layout.font_description = desc layout.text = text width, = layout.pixel_size Metrics.new(width, fontsize * LINE_HEIGHT_FACTOR) end |
.pango_layout ⇒ Object
145 146 147 |
# File 'lib/rsyntaxtree/utils.rb', line 145 def pango_layout @pango_layout ||= Pango::Layout.new(Pango::CairoFontMap.default.create_context) end |