From: <no...@so...> - 2001-01-11 15:32:11
|
Bug #128444, was updated on 2001-Jan-11 07:32 Here is a current snapshot of the bug. Project: Tk Toolkit Category: Fonts Status: Open Resolution: None Bug Group: 8.3.2 Priority: 5 Submitted by: sheltond Assigned to : nobody Summary: Can't enumerate font families on Windows NT/2000 Details: The initialization of the Tk system creates the application window before calling TkpInit(). On windows, TkpInit() calls TkWinXInit(), which initialises the tkPlatformId variable. However, the font system is initialised during creation of the application window, and it uses this variable. In tkWinFont.c, in function TkpFontPkgInit(), the systemEncoding variable is set to unicodeEncoding, if the value of tkPlatformId is VER_PLATFORM_WIN32_NT. However, since this is done before the tkPlatformId variable is set up, the systemEncoding variable remains set to NULL. Later on, if you enumerate the fonts families (which calls TkpGetFontFamilies on windows), it determines that it is on NT (since the value of tkPlatformId is set up by this point), and calls the unicode version of EnumFontFamilies. This calls the callback function with a unicode string, but the systemEncoding variable is still NULL, so the strings don't get decoded properly. What you actually get is the first character of each of the font families. This also means that you can't set fonts properly using the form {Courier -size 8}. I have patched this on my system as follows (in win/tkWinX.c): Near the top: > static int tkPlatformId=-1; Later on: > int TkWinGetPlatformId() > { > if (tkPlatformId==-1) { > OSVERSIONINFO os; > GetVersionEx(&os); > tkPlatformId = os.dwPlatformId; > } > return tkPlatformId; > } For detailed info, follow this link: http://sourceforge.net/bugs/?func=detailbug&bug_id=128444&group_id=12997 |