Marc Aurele La France:
> At first, I really liked this idea, but I now realize that, because your 
> spacing changes (as I have them integrated) are only effective for Xft 
> fonts, "Xft'ing" bitmap fonts would change twm's default behaviour.  Thus, 
> I'd rather not call XftFontOpenXlfd(), which leaves me with a GetFont() 
> function that looks like ...
> void
> GetFont(MyFont *font)
> {
>      if (font->fontset != NULL)
>          XFreeFontSet(dpy, font->fontset);
>      if (font->font != NULL)
>          XFreeFont(dpy, font->font);
> #ifdef TWM_USE_XFT
>      if (font->xftfont != NULL)
>          XftFontClose(dpy, font->xftfont);
>      font->xftfont = XftFontOpenName(dpy, Scr->screen, font->name);
>      if (font->xftfont != NULL) {
>          font->height = font->xftfont->ascent + font->xftfont->descent;
>          font->y = font->xftfont->ascent;
>          font->ascent = font->xftfont->ascent;
>          font->descent = font->xftfont->descent;
>          return;
>      }
> #endif /* TWM_USE_XFT */
> [....]
> This means that, to use Xft, the user would need to specify
> a font name that is recognized by XftFontOpenName().

May I give two quick comments. :-)

I am very afraid that XftFontOpenName() is going to recognise each name,
including XFLD compliant names, at the same time probably not evaluating
them in the way one would expect.  So if TWM_USE_XFT is defined, every
font name like


is being caught by XftFontOpenName() and ending up with some default Xft
font (which is no doubt going to look very good; but it is not that
lucidatypewriter font) and the control never passes to XLoadQueryFont()
few lines below.

This is kind of behaviour described in chapter 5.1 in

    Keith Packard: "The Xft font library: architecture and users guide"

In fact this is the only piece of information I could find in order to
learn about Xft, plus a small usage demo program source code found in[EMAIL PROTECTED]/msg00131.html.  (This explains
in fact all bugs I have done/experienced so far in using Xft because of
the incompleteness of this small program.)  Even until today I am
convinced that XftDrawCreate() never fails (much like XCreateWindow() is
never expected to fail) analogously to the Xft claim to always load a
font and report success even if that one requested by the user could not
be found; and last but not least because I am not being able to find any
evidence/documenting of the opposite of being the case.

(Maybe this document is outdated today (or going to outdate someday) and
the Xft's promise not to fail in loading fonts in that document is going
to change.)

The second point I wanted to touch in the above is spacing.  Meanwhile I
consider the absolute pixel spacing as it now is in twm a design
deficiency, regardless if it is used with or without Xft (scalable)
fonts.  Therefore I have decided to split spacing corrections from
TWM_USE_XFT and enclose these into TWM_USE_SPACING, so anyone interested
can enable/disable them unrelated to TWM_USE_XFT.  (Even core fonts can
be given in "points" which is a typographical metrics and it is probably
true that today noone is going to design 120, 150, ... 600 dpi bitmap
fonts besides already existing 75 and 100 dpi fonts any more, but this
doesn't invalidate absolute distances of e.g. 4 pixels in twm of being a
"flawed design".)  :-)

> In looking over your latest patch sets, I notice a fair amount of activity 
> in the Fixes and Appearance ones.  Do you now consider them as finalised? 
> What about SloppyFocus?

These cannot be consider finalised.  In the meantime I was working on
vtwm in porting some of these twm enhancements to vtwm.  (In particular
vtwm got a better infowindow spacing which I want to bring back to twm,
among a few other things.) Then, SloppyFocus is getting into a good
shape thanks to vtwm experiments (there are some minor iconmanager rare
painting issues left) then I am probably finished with vtwm and I'll
want to continue with twm then.


I was a little surprised to find twm's iconmanager (especially in a
multiscreen environment) and the function execution mechanism in an
unfinished state --- partly as unfinished design, partly even as
unfinished code --- as I began to add Xft support; I did not expect it
being so and therefore according to my initial estimate I should have
been done long ago.

So I cant give any estimate how long it takes to finalise the "Fixes",
"Appearances" and "Improvements" enhancements; it depends which parts of
these abovementioned parts need to (or make sense to) be completed
(partly it even is hard to guess how e.g. the icon manager in twm was
supposed to work at all --- maybe one should dig in decades old mailing
lists to get some hints :-).

> I'm attaching a diff, against XFree86 CVS source, of those of your changes 
> that I have so far integrated.

In the Xorg version of the twm source code one has to use in the
following code sequence while drawing the window title


    else if (Tmp_win != NULL)
        if (Event.xany.window == Tmp_win->title_w)
            MyFont_DrawImageString (dpy, DRAW_WIN(Tmp_win,title_w),
                &Scr->TitleBarFont, DRAW_COL(Tmp_win,TitleC),
                Scr->TBInfo.titlex, Scr->TitleBarFont.y,
                Tmp_win->name, strlen(Tmp_win->name));
            flush_expose (Event.xany.window);
        else if (Event.xany.window == Tmp_win->icon_w)


the function MyFont_DrawImageString() and not MyFont_DrawString(). This
is because if there is no "NoTitleHighlight" in .twmrc then moving mouse
in and out of the client window causes the title-highlight window (the
checkerboard pattern) be mapped/unmapped as focus moves in and out.
While moving out expose events are generated for the underlying
titlebar-window which draws the title bar always anew without erasing
the draw area first, effectively alpha-blending the Xft partly
transparent text onto the title window again and again resulting in
smearing the titlebar text.  In the other case if NoTitleHighlight is
active then expose events only come if the title bar was obscured,
resulting in clearing the titlebar window by the X server first, then
drawing the title by MyFont_DrawString().

> Lastly, do you intend to update twm's man page?

It has to be updated of course if these improvements are finished and
considered useful to be included into the twm source tree.
I am happily going to write the initial text, but I'll have to find
someone with English as a native language to correct this then.  :-)


    Eeri Kask
Devel mailing list

Reply via email to