sysparams: fix SPI_{G|S}ETFONTSMOOTHING with tests
Rein Klazes
wijn at wanadoo.nl
Wed Jan 25 08:26:29 CST 2006
Hi,
This would have fixed bug #4315 as well.
Changelog:
dlls/user : sysparams.c
dlls/user/tests : sysparams.c
Add regression tests for SPI_{G|S}ETFONTSMOOTHING. Make them pass on
Wine.
Rein.
-------------- next part --------------
--- wine/dlls/user/sysparams.c 2006-01-17 09:38:30.000000000 +0100
+++ mywine/dlls/user/sysparams.c 2006-01-17 09:58:36.000000000 +0100
@@ -1898,13 +1898,17 @@ BOOL WINAPI SystemParametersInfoW( UINT
WINE_SPI_WARN(SPI_SETANIMATION); /* 73 WINVER >= 0x400 */
case SPI_GETFONTSMOOTHING:
+ {
+ UINT tmpval;
ret = get_uint_param( SPI_SETFONTSMOOTHING_IDX,
SPI_SETFONTSMOOTHING_REGKEY,
SPI_SETFONTSMOOTHING_VALNAME,
- &font_smoothing, pvParam );
+ &font_smoothing, &tmpval );
+ *(UINT *) pvParam = ( tmpval != 0);
break;
-
+ }
case SPI_SETFONTSMOOTHING:
+ uiParam = uiParam ? 2 : 0; /* Win NT4/2k/XP behavior */
ret = set_uint_param( SPI_SETFONTSMOOTHING_IDX,
SPI_SETFONTSMOOTHING_REGKEY,
SPI_SETFONTSMOOTHING_VALNAME,
--- wine/dlls/user/tests/sysparams.c 2005-12-17 09:44:50.000000000 +0100
+++ mywine/dlls/user/tests/sysparams.c 2006-01-17 10:34:06.000000000 +0100
@@ -39,6 +39,7 @@
static int strict;
static int dpi;
+static int iswin9x;
static HDC hdc;
#define eq(received, expected, label, type) \
@@ -118,6 +119,8 @@ static HDC hdc;
#define SPI_SETSCREENREADER_VALNAME "On"
#define SPI_SETSCREENREADER_REGKEY_LEGACY "Control Panel\\Accessibility"
#define SPI_SETSCREENREADER_VALNAME_LEGACY "Blind Access"
+#define SPI_SETFONTSMOOTHING_REGKEY "Control Panel\\Desktop"
+#define SPI_SETFONTSMOOTHING_VALNAME "FontSmoothing"
#define SPI_SETLOWPOWERACTIVE_REGKEY "Control Panel\\Desktop"
#define SPI_SETLOWPOWERACTIVE_VALNAME "LowPowerActive"
#define SPI_SETPOWEROFFACTIVE_REGKEY "Control Panel\\Desktop"
@@ -675,7 +678,6 @@ static void test_SPI_SETBORDER( void )
{
BOOL rc;
UINT old_border;
- int iswin9x;
NONCLIENTMETRICSA ncmsave;
INT CaptionWidth;
@@ -689,11 +691,6 @@ static void test_SPI_SETBORDER( void )
"Control Panel\\Desktop\\WindowMetrics","CaptionWidth", dpi);
ncmsave.iCaptionWidth = CaptionWidth;
- /* The SPI_SETBORDER seems to be buggy on Win9x/ME (looks like you need to
- * do it twice to make the intended change). So skip parts of the tests on
- * those platforms */
- iswin9x = GetVersion() & 0x80000000;
-
/* These tests hang when XFree86 4.0 for Windows is running (tested on
* WinNT, SP2, Cygwin/XFree 4.1.0. Skip the test when XFree86 is
* running.
@@ -711,6 +708,9 @@ static void test_SPI_SETBORDER( void )
if ( old_border == 7 || old_border == 20 )
old_border = 1;
+ /* The SPI_SETBORDER seems to be buggy on Win9x/ME (looks like you need to
+ * do it twice to make the intended change). So skip parts of the tests on
+ * those platforms */
if( !iswin9x) {
test_setborder(1, 1, dpi);
test_setborder(0, 1, dpi);
@@ -1837,6 +1837,41 @@ static void test_SPI_SETSCREENREADER( vo
ok(rc!=0,"***warning*** failed to restore the original value: rc=%d err=%ld\n",rc,GetLastError());
}
+static void test_SPI_SETFONTSMOOTHING( void ) /* 75 */
+{
+ BOOL rc;
+ BOOL old_b;
+ const UINT vals[]={0xffffffff,0,1,2};
+ unsigned int i;
+
+ trace("testing SPI_{GET,SET}FONTSMOOTHING\n");
+ if( iswin9x) return; /* 95/98/ME don't seem to implement this fully */
+ SetLastError(0xdeadbeef);
+ rc=SystemParametersInfoA( SPI_GETFONTSMOOTHING, 0, &old_b, 0 );
+ if (!test_error_msg(rc,"SPI_{GET,SET}FONTSMOOTHING"))
+ return;
+
+ for (i=0;i<sizeof(vals)/sizeof(*vals);i++)
+ {
+ UINT v;
+
+ rc=SystemParametersInfoA( SPI_SETFONTSMOOTHING, vals[i], 0,
+ SPIF_UPDATEINIFILE | SPIF_SENDCHANGE );
+ ok(rc!=0,"%d: rc=%d err=%ld\n",i,rc,GetLastError());
+ test_change_message( SPI_SETFONTSMOOTHING, 0 );
+ test_reg_key( SPI_SETFONTSMOOTHING_REGKEY,
+ SPI_SETFONTSMOOTHING_VALNAME,
+ vals[i] ? "2" : "0" );
+
+ rc=SystemParametersInfoA( SPI_GETFONTSMOOTHING, 0, &v, 0 );
+ ok(rc!=0,"%d: rc=%d err=%ld\n",i,rc,GetLastError());
+ eq( v, vals[i] ? 1 : 0, "SPI_GETFONTSMOOTHING", "%d" );
+ }
+
+ rc=SystemParametersInfoA( SPI_SETFONTSMOOTHING, old_b, 0, SPIF_UPDATEINIFILE );
+ ok(rc!=0,"***warning*** failed to restore the original value: rc=%d err=%ld\n",rc,GetLastError());
+}
+
static void test_SPI_SETLOWPOWERACTIVE( void ) /* 85 */
{
BOOL rc;
@@ -2160,6 +2195,7 @@ static DWORD WINAPI SysParamsThreadFunc(
test_SPI_SETSHOWSOUNDS(); /* 57 */
test_SPI_SETKEYBOARDPREF(); /* 69 */
test_SPI_SETSCREENREADER(); /* 71 */
+ test_SPI_SETFONTSMOOTHING(); /* 75 */
test_SPI_SETLOWPOWERACTIVE(); /* 85 */
test_SPI_SETPOWEROFFACTIVE(); /* 86 */
test_SPI_SETMOUSEHOVERWIDTH(); /* 99 */
@@ -2405,6 +2441,7 @@ START_TEST(sysparams)
hdc = GetDC(0);
dpi = GetDeviceCaps( hdc, LOGPIXELSY);
+ iswin9x = GetVersion() & 0x80000000;
/* This test requires interactivity, if we don't have it, give up */
if (!SystemParametersInfoA( SPI_SETBEEP, TRUE, 0, SPIF_UPDATEINIFILE | SPIF_SENDCHANGE ) &&
More information about the wine-patches
mailing list