Subject: bug#73730: 31.0.50; Support for color fonts on MS-Windows

From: Eli Zaretskii <[email-masked]>
Date: Wed, 23 Oct 2024 20:53:12 +0300

> Date: Wed, 23 Oct 2024 16:17:03 +0200
> From: Cecilio Pardo <[email-masked]>
> 
> 
> On 23/10/2024 12:03, Eli Zaretskii wrote:
> 
> >> - DirectWrite is available since Windows 7, but color glyphs are
> >>     available only since Windows 8.1.  We only enable DirectWrite since
> >>     Windows 8.1. This is stated on the NEWS entry.
> > 
> > Sounds okay, but I don't see the Windows version tested anywhere in
> > the code which initializes DWrite.  What did I miss?
> 
> The IDWriteFactory2 interface is only available from 8.1, so it will
> fail on previous versions when we request it in
> w32_initialize_direct_write.

OK, so please add a comment there to this effect.

> >> - The default value for the Gamma render parameter in DirectWrite
> >>     gives very 'light' characters.  I changed it to 1.4, which matches
> >>     GDI and looks better. But that's just my opinion.
> > 
> > Does the best value depend on whether the theme is light or dark?  
> 
> No, it looks too dim for me on both.
> 
> > In any case, this sounds like a good candidate for a variable that people
> > could modify if they want.  Maybe we should also expose to Lisp the
> > values of enhanced contrast and clear-type level?  Assuming that
> > setting these from .emacs (or maybe in early-init?) at all could take
> > effect, that is.
> 
> [...]
> 
> > Does it work to set w32-inhibit-dwrite in the .emacs init file?
> 
> If you change it in .emacs or early-int it will work, but will not
> prevent dwrite initialization and some text output. I am
> initializing on syms_of_w32uniscribe_for_pdumper. Could I initialize
> on some other place, so that the user can skip dwrite completely?
> Also, it will allow to add configuracion variables for Gamma, etc,
> without having to reinit if the user sets them.

Initializing dwrite even though the user said we shouldn't use it
doesn't sound too bad to me.  We could provide a function to
reinitialize (if it's needed) and document that it should be called if
the user wants to disable dwrite in the init file.  I wouldn't go
farther than this unless we get complaints and discover that
initializing dwrite could cause trouble in some configurations.