[Bug 648] New - wineconsole regression on April 4
wine-bugs at winehq.com
wine-bugs at winehq.com
Mon May 6 03:45:13 CDT 2002
http://bugs.winehq.com/show_bug.cgi?id=648
*** shadow/648 Mon May 6 03:45:13 2002
--- shadow/648.tmp.6993 Mon May 6 03:45:13 2002
***************
*** 0 ****
--- 1,266 ----
+ +============================================================================+
+ | wineconsole regression on April 4 |
+ +----------------------------------------------------------------------------+
+ | Bug #: 648 Product: Wine |
+ | Status: UNCONFIRMED Version: 20020411 |
+ | Resolution: Platform: |
+ | Severity: normal OS/Version: All |
+ | Priority: P1 Component: wine-console |
+ +----------------------------------------------------------------------------+
+ | Assigned To: wine-bugs at winehq.com |
+ | Reported By: duncan.sands at wanadoo.fr |
+ | CC list: Cc: |
+ +----------------------------------------------------------------------------+
+ | Milestone: TargetMilestone: --- |
+ | URL: |
+ +============================================================================+
+ | DESCRIPTION |
+ Wineconsole regressed between 10pm April 3 and 10pm April 4 (GMT).
+ The IDA Pro disassembler (idaw.exe, available from
+ http://www.datarescue.be/downloadfreeware.htm) fails due to changes
+ on this date. This is a console mode program with turbo pascal style
+ windows, for example windows have a little green square as a close box.
+
+ History:
+
+ Jan 1 CVS : program runs with good sized font, however bitmaps like
+ the little green square show up as odd characters.
+
+ Apr 3 CVS : program runs with tiny font, bitmaps are displayed correctly.
+
+ > Apr 4 CVS : window comes up, disappears, wine exits without an error.
+ (Normal behaviour: window comes up, is resized, initial screen is drawn.)
+
+ Thus the bug is: wine exits immediately after bringing up the window (but
+ before drawing anything in it). This seems to be due to changes in xfont.c.
+
+ I offer here a choice of two patches that "fix" this. Surely neither
+ of them is getting to the root cause of the problem. Either works,
+ but with patch 2, the text comes up in a tiny font like with Apr 3 CVS, with
+ patch 1 it comes up in a normal font (but no little bitmaps, like Jan 1 CVS).
+
+ All the best,
+
+ Duncan.
+
+ Patch 1. This reverts from using the global
+ variable text_caps to using a local variable XTextCaps.
+
+ --- bad/graphics/x11drv/xfont.c.orig Wed May 1 09:42:32 2002
+ +++ bad/graphics/x11drv/xfont.c Wed May 1 09:46:39 2002
+ @@ -78,6 +78,11 @@
+
+ static fontAlias *aliasTable = NULL;
+
+ +static UINT XTextCaps = (TC_OP_CHARACTER | TC_OP_STROKE | TC_CP_STROKE | TC_CR_ANY |
+ + TC_SA_DOUBLE | TC_SA_INTEGER | TC_SA_CONTIN |
+ + TC_UA_ABLE | TC_SO_ABLE | TC_RA_ABLE);
+ + /* X11R6 adds TC_SF_X_YINDEP, maybe more... */
+ +
+ static const char* INIFontMetrics = "cachedmetrics.";
+ static const char* INIFontSection = "Software\\Wine\\Wine\\Config\\fonts";
+ static const char* INIAliasSection = "Alias";
+ @@ -948,7 +953,7 @@
+ aLFD.resolution_x = resx_string;
+
+ strcpy(resy_string, resx_string);
+ - if( uRelax == 0 && text_caps & TC_SF_X_YINDEP )
+ + if( uRelax == 0 && XTextCaps & TC_SF_X_YINDEP )
+ {
+ if( fo->lf.lfWidth && !(fo->fo_flags & FO_SYNTH_WIDTH))
+ {
+ @@ -2424,7 +2429,7 @@
+ fontInfo* pfi = pfm->pfi; /* device font to match */
+ LPLOGFONT16 plf = pfm->plf; /* wanted logical font */
+ UINT penalty = 0;
+ - BOOL bR6 = pfm->flags & FO_MATCH_XYINDEP; /* from text_caps */
+ + BOOL bR6 = pfm->flags & FO_MATCH_XYINDEP; /* from XTextCaps */
+ BOOL bScale = pfi->fi_flags & FI_SCALABLE;
+ int d = 0, height;
+
+ @@ -2947,7 +2952,7 @@
+ strcpy(buffer, "-*-*-*-*-normal-*-[12 0 0 12]-*-72-*-*-*-iso8859-1");
+ if( (x_fs = TSXLoadQueryFont(gdi_display, buffer)) )
+ {
+ - text_caps |= TC_SF_X_YINDEP;
+ + XTextCaps |= TC_SF_X_YINDEP;
+ TSXFreeFont(gdi_display, x_fs);
+ }
+ }
+ @@ -2980,7 +2985,7 @@
+ XFONT_GetPointResolution( log_pixels_x, log_pixels_y );
+
+ if(X11DRV_XRender_Installed)
+ - text_caps |= TC_VA_ABLE;
+ + XTextCaps |= TC_VA_ABLE;
+
+ return;
+ }
+ @@ -3055,7 +3060,7 @@
+ fm.plf = plf;
+ fm.internal_charset = internal_charset;
+
+ - if( text_caps & TC_SF_X_YINDEP ) fm.flags = FO_MATCH_XYINDEP;
+ + if( XTextCaps & TC_SF_X_YINDEP ) fm.flags = FO_MATCH_XYINDEP;
+
+ /* allocate new font cache entry */
+
+ -------------------------------------------------------------------
+
+ Patch 2. BOTH lines need to be changed.
+
+ --- bad/graphics/x11drv/xfont.c.orig Wed May 1 09:42:32 2002
+ +++ bad/graphics/x11drv/xfont.c Wed May 1 09:15:35 2002
+ @@ -2978,6 +2978,7 @@
+ void X11DRV_FONT_Init( int *log_pixels_x, int *log_pixels_y )
+ {
+ XFONT_GetPointResolution( log_pixels_x, log_pixels_y );
+ + X11DRV_FONT_InitX11Metrics();
+
+ if(X11DRV_XRender_Installed)
+ text_caps |= TC_VA_ABLE;
+ @@ -3324,7 +3325,7 @@
+ LOGFONT16 lf16;
+
+ /* don't enumerate x11 fonts if we're using client side fonts */
+ - if (physDev->dc->gdiFont) return FALSE;
+ +/* if (physDev->dc->gdiFont) return FALSE;*/
+
+ FONT_LogFontWTo16(plf, &lf16);
+
+ -------------------------------------------------------------------------------
+
+ For information, here are the changes to xfont.c between
+ April 3 and April 4.
+
+ diff -u -r --exclude=CVS 4_april_2002_mid/graphics/x11drv/xfont.c 4_april_2002/graphics/x11drv/xfont.c
+ --- 4_april_2002_mid/graphics/x11drv/xfont.c Mon Apr 29 20:56:51 2002
+ +++ 4_april_2002/graphics/x11drv/xfont.c Sun Apr 28 20:53:50 2002
+ @@ -77,11 +77,6 @@
+
+ static fontAlias *aliasTable = NULL;
+
+ -static UINT XTextCaps = (TC_OP_CHARACTER | TC_OP_STROKE | TC_CP_STROKE | TC_CR_ANY |
+ - TC_SA_DOUBLE | TC_SA_INTEGER | TC_SA_CONTIN |
+ - TC_UA_ABLE | TC_SO_ABLE | TC_RA_ABLE);
+ - /* X11R6 adds TC_SF_X_YINDEP, maybe more... */
+ -
+ static const char* INIFontMetrics = "cachedmetrics.";
+ static const char* INIFontSection = "Software\\Wine\\Wine\\Config\\fonts";
+ static const char* INIAliasSection = "Alias";
+ @@ -952,7 +947,7 @@
+ aLFD.resolution_x = resx_string;
+
+ strcpy(resy_string, resx_string);
+ - if( uRelax == 0 && XTextCaps & TC_SF_X_YINDEP )
+ + if( uRelax == 0 && text_caps & TC_SF_X_YINDEP )
+ {
+ if( fo->lf.lfWidth && !(fo->fo_flags & FO_SYNTH_WIDTH))
+ {
+ @@ -2428,7 +2423,7 @@
+ fontInfo* pfi = pfm->pfi; /* device font to match */
+ LPLOGFONT16 plf = pfm->plf; /* wanted logical font */
+ UINT penalty = 0;
+ - BOOL bR6 = pfm->flags & FO_MATCH_XYINDEP; /* from TextCaps */
+ + BOOL bR6 = pfm->flags & FO_MATCH_XYINDEP; /* from text_caps */
+ BOOL bScale = pfi->fi_flags & FI_SCALABLE;
+ int d = 0, height;
+
+ @@ -2834,24 +2829,22 @@
+ }
+
+ /***********************************************************************
+ - * X11DRV_FONT_Init
+ + * X11DRV_FONT_InitX11Metrics
+ *
+ * Initialize font resource list and allocate font cache.
+ */
+ -int X11DRV_FONT_Init( int *log_pixels_x, int *log_pixels_y )
+ +void X11DRV_FONT_InitX11Metrics( void )
+ {
+ char** x_pattern;
+ unsigned x_checksum;
+ - int i,res, x_count, fd, buf_size;
+ + int i, x_count, fd, buf_size;
+ char *buffer;
+ HKEY hkey;
+
+ - res = XFONT_GetPointResolution( log_pixels_x, log_pixels_y );
+ -
+ +
+ x_pattern = TSXListFonts(gdi_display, "*", MAX_FONTS, &x_count );
+
+ - TRACE("Font Mapper: initializing %i fonts [logical dpi=%i, default dpi=%i]\n",
+ - x_count, res, DefResolution);
+ + TRACE("Font Mapper: initializing %i x11 fonts\n", x_count);
+ if (x_count == MAX_FONTS)
+ MESSAGE("There may be more fonts available - try increasing the value of MAX_FONTS\n");
+
+ @@ -2917,7 +2910,7 @@
+ strcpy(buffer, "-*-*-*-*-normal-*-[12 0 0 12]-*-72-*-*-*-iso8859-1");
+ if( (x_fs = TSXLoadQueryFont(gdi_display, buffer)) )
+ {
+ - XTextCaps |= TC_SF_X_YINDEP;
+ + text_caps |= TC_SF_X_YINDEP;
+ TSXFreeFont(gdi_display, x_fs);
+ }
+ }
+ @@ -2939,11 +2932,20 @@
+
+ RAW_ASCENT = TSXInternAtom(gdi_display, "RAW_ASCENT", TRUE);
+ RAW_DESCENT = TSXInternAtom(gdi_display, "RAW_DESCENT", TRUE);
+ + return;
+ +}
+ +
+ +/***********************************************************************
+ + * X11DRV_FONT_Init
+ + */
+ +void X11DRV_FONT_Init( int *log_pixels_x, int *log_pixels_y )
+ +{
+ + XFONT_GetPointResolution( log_pixels_x, log_pixels_y );
+
+ if(X11DRV_XRender_Installed)
+ - XTextCaps |= TC_VA_ABLE;
+ + text_caps |= TC_VA_ABLE;
+
+ - return XTextCaps;
+ + return;
+ }
+
+ /**********************************************************************
+ @@ -3016,7 +3018,7 @@
+ fm.plf = plf;
+ fm.internal_charset = internal_charset;
+
+ - if( XTextCaps & TC_SF_X_YINDEP ) fm.flags = FO_MATCH_XYINDEP;
+ + if( text_caps & TC_SF_X_YINDEP ) fm.flags = FO_MATCH_XYINDEP;
+
+ /* allocate new font cache entry */
+
+ @@ -3203,6 +3205,8 @@
+
+ EnterCriticalSection( &crtsc_fonts_X11 );
+
+ + if(fontList == NULL) X11DRV_FONT_InitX11Metrics();
+ +
+ if( CHECK_PFONT(physDev->font) )
+ XFONT_ReleaseCacheEntry( __PFONT(physDev->font) );
+
+ @@ -3279,9 +3283,17 @@
+ ENUMLOGFONTEXW lf;
+ NEWTEXTMETRICEXW tm;
+ fontResource* pfr = fontList;
+ - BOOL b, bRet = 0;
+ + BOOL b, bRet = 0, using_gdi = 0;
+ LOGFONT16 lf16;
+ + DC *dc;
+ +
+ + dc = DC_GetDCPtr(hdc);
+ + if(!dc) return FALSE;
+ + if(dc->gdiFont) using_gdi = TRUE;
+ + GDI_ReleaseObj(hdc);
+
+ + /* don't enumerate x11 fonts if we're using client side fonts */
+ + if(using_gdi) return FALSE;
+
+ FONT_LogFontWTo16(plf, &lf16);
\ No newline at end of file
More information about the wine-bugs
mailing list