Source code for bdflib.effects
# bdflib, a library for working with BDF font files
# Copyright (C) 2009-2022, Timothy Allen
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
"""
Automatically generate visual variants of a font.
"""
[docs]def embolden(font, maintain_spacing=True):
"""
Create a bold version of a font by widening each glyph.
:param Font font: The font to embolden.
:param bool maintain_spacing: If true, each glyph's advance width
will be incremented, because a wider glyph needs more room.
:returns: A copy of ``font``, with each glyph emboldened.
:rtype: :class:`.Font`
To embolden a glyph, it is drawn over itself one pixel to the right,
making each vertical stroke one pixel wider.
"""
res = font.copy()
for cp in res.codepoints():
g = res[cp]
g.merge_glyph(g, 1, 0)
if maintain_spacing:
g.advance += 1
return res
[docs]def merge(base, custom):
"""
Create a new font by choosing glyphs from two other fonts.
:param Font base: The lower-priority font.
:param Font custom: The higher-priority font.
:returns: A font where each glyph comes from ``base`` or ``custom``.
For any given codepoint, the resulting font will use the corresponding
glyph from ``custom`` if there is one, falling back to the glyph from
``base``. The new font's properties and other metadata are all copied
from ``custom``.
"""
res = custom.copy()
for cp in base.codepoints():
if cp not in res:
old_glyph = base[cp]
res.new_glyph_from_data(
old_glyph.name,
old_glyph.data,
old_glyph.bbX,
old_glyph.bbY,
old_glyph.bbW,
old_glyph.bbH,
old_glyph.advance,
old_glyph.codepoint,
)
return res