[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

When and how to register various font backends

From: Eli Zaretskii
Subject: When and how to register various font backends
Date: Fri, 07 Jun 2019 22:40:45 +0300

With HarfBuzz now available on master, we basically have 3 font
backends on almost every supported platform: the basic backend (Xfont
on Posix systems, GDI on Windows), a backend capable of shaping
complex scripts (ftfont/xftfont with FLT on X, Uniscribe on Windows),
and HarfBuzz.

Having too many active font backends is not a good idea, because when
there's no fonts on your system that can display some character, Emacs
tries to find a font with each of the active backends, so having 3
backends instead of 2 will make such failed searches significantly
longer (approximately by 50%).

Since HarfBuzz can do everything FLT can do, and more, I think it
makes sense to register HarfBuzz in preference to FLT backends when
both are available.  That is, by default each frame will only register
the basic backend and HarfBuzz; the FLT/Uniscribe backends will only
be registered if HarfBuzz is not available or if the user or the code
that creates the frame explicitly requested the other backends.

The question is how to implement this preference.  In the code that is
currently on master, you will see one way of implementing it in
w32fns.c, where the Windows code creates GUI frames (look in
x-create-frame).  Basically, after determining whether Uniscribe was
explicitly requested, this implementation registers or doesn't
register Uniscribe for each new frame.  This means the backends to be
available to a frame must be specified at frame creation time, or be
known by that time.

Yamamoto-san suggested a slightly different way of implementing the
same idea; I will let him explain his proposal in more detail.

Each implementation produces a slightly different behavior.  Since I
believe we should have the same behavior on all platforms, I would
like people to express their opinions on the two implementation, so
that we could eventually decide with which one to go, and implement it
for all platforms.


reply via email to

[Prev in Thread] Current Thread [Next in Thread]