[Fontconfig] [PATCH] don't artificially embolden fixed-width fonts

Adam Williamson awilliam at redhat.com
Sat Feb 14 13:31:52 PST 2015


On Sat, 2015-02-14 at 09:12 -0800, Adam Williamson wrote:
> On Sat, 2015-02-14 at 14:02 +0100, Raimund Steger wrote:
> > On 02/12/15 01:32, Raimund Steger wrote:
> > > > > > [...]
> > > 
> > > I'll have a look at them over the weekend. I think it should be 
> > > possible to isolate the interesting part.
> > 
> > I've taken a look at freetype-entire-infinality-patchset-20130514- 
> > 01.patch now and I think the relevant part is only the following 
> > (the patch contains other changes to emboldening, but these 
> > address unrelated things like pixel snapping):
> > 
> > diff --git a/src/base/ftsynth.c b/src/base/ftsynth.c
> > index 241d37f..3d5a593 100644
> > --- a/src/base/ftsynth.c
> > +++ b/src/base/ftsynth.c
> > @@ -141,6 +173,9 @@
> > 
> >       slot->metrics.width       += xstr;
> >       slot->metrics.height      += ystr;
> > +#ifdef FT_CONFIG_OPTION_INFINALITY_PATCHSET
> > +    if ( !use_various_tweaks )
> > +#endif
> >       slot->metrics.horiAdvance += xstr;
> >       slot->metrics.vertAdvance += ystr;
> > 
> > If I replace the "if ( !use_various_tweaks )" with "if ( 
> > !FT_IS_FIXED_WIDTH( face ) )", I seem to come up with a patch that 
> > keeps
> > the advance width for monospace fonts and leaves the rest 
> > unchanged. (Suggestion attached; note it's only created with quilt 
> > from a 2.5.5 tarball.) I've put up screenshots of Lucida Console at
> > http://steg0.eu/saurus/2015/02.emboldenmono/.
> > 
> > Could this already be it...??
> 
> Ah, that's interesting!
> 
> So my next move in cases like this tends to be to think "OK, so why 
> isn't it that way now?" But it certainly looks good. I quite enjoy 
> playing git Sherlock Holmes, so I'll have a poke through and see if I
> can find any skeletons in the closet that suggest that change might 
> cause any problems, but it sure looks promising! Thanks a lot for 
> figuring that out.

Well I can give a couple of thoughts:

1) your patch definitely works for me - thanks! It doesn't look bad at 
all either (with Droid Sans Mono).

2) I haven't been able to find any previous *upstream* attempt to 
change this that turned out badly, or discussion of changing it that 
was rejected...so seems like a good idea to send it upstream to 
freetype.

3) I *did* find some interesting history in infinality's patch set, 
though. There's a repo lying around on gitorious called 'lcd-
filtering':

https://gitorious.org/lcd-filtering/lcd-filtering

which happens to have re-synced with infinality quite often, so it 
acts as a sort of proxy for infinality's history. There's a rather 
interesting point in that repo. If you check it out at the state of 
commit 3735605ed6cb27a3cb70ff72864082c48d4b2090 - or just look at it 
online, 
https://gitorious.org/lcd-filtering/lcd-filtering/source/3735605ed6cb27a3cb70ff72864082c48d4b2090:media-libs/freetype/files - it has two freetype ebuilds, one for 2.4.2 and one for 2.4.3. Both 
have a patch named 'enhance-emboldening.patch'. If you look at the 
2.4.2 one, it's functionally identical to yours:

--- freetype-2.4.2.orig/src/base/ftsynth.c  2010-01-05 12:54:49.000000000 -0600
+++ freetype-2.4.2/src/base/ftsynth.c 2010-10-02 21:23:40.161154162 -0500
@@ -146,7 +146,8 @@
     slot->metrics.width        += xstr;
     slot->metrics.height       += ystr;
     slot->metrics.horiBearingY += ystr;
-    slot->metrics.horiAdvance  += xstr;
+    /* need to disable only when font is monospace */
+    if ( !( slot->face->face_flags & FT_FACE_FLAG_FIXED_WIDTH ) ) slot->metrics.horiAdvance  += xstr;
     slot->metrics.vertBearingX -= xstr / 2;
     slot->metrics.vertBearingY += ystr;
     slot->metrics.vertAdvance  += ystr;

but then at some point after, infinality decided he just preferred no 
horizontal advance on anything at all, and changed it to the current 
version. the 2.4.3 version of enhance-emboldening.patch has this 
instead:

@@ -146,7 +146,8 @@
     slot->metrics.width        += xstr;
     slot->metrics.height       += ystr;
     slot->metrics.horiBearingY += ystr;
-    slot->metrics.horiAdvance  += xstr;
+    /* Don't add any horiAdvance - Personal preference */
+    /*slot->metrics.horiAdvance  += xstr;*/
     slot->metrics.vertBearingX -= xstr / 2;
     slot->metrics.vertBearingY += ystr;
     slot->metrics.vertAdvance  += ystr;

So...it seems infinality figured this out 4.5 years ago but then 
decided to make the change much more 'personal preference'-y, and it 
got buried in history :/

Not sure if that changes much, just an interesting historical note. It 
certainly seems like a change worth suggesting upstream.
-- 
Adam Williamson
Fedora QA Community Monkey
IRC: adamw | Twitter: AdamW_Fedora | XMPP: adamw AT happyassassin . net
http://www.happyassassin.net



More information about the Fontconfig mailing list