From 4b5f326e3fff8e836eb9e6484bd30649106b80ec Mon Sep 17 00:00:00 2001 From: Alexandre Julliard Date: Mon, 31 Oct 2005 15:43:10 +0000 Subject: [PATCH] Default to an empty driver instead of dying if the specified display driver couldn't be loaded. --- dlls/gdi/dc.c | 14 +++ dlls/gdi/driver.c | 251 +++++++++++++++++++++++----------------------- 2 files changed, 137 insertions(+), 128 deletions(-) diff --git a/dlls/gdi/dc.c b/dlls/gdi/dc.c index 0f51bc0c61b..c6247fcc62f 100644 --- a/dlls/gdi/dc.c +++ b/dlls/gdi/dc.c @@ -889,6 +889,20 @@ INT WINAPI GetDeviceCaps( HDC hdc, INT cap ) if ((dc = DC_GetDCPtr( hdc ))) { if (dc->funcs->pGetDeviceCaps) ret = dc->funcs->pGetDeviceCaps( dc->physDev, cap ); + else switch(cap) /* return meaningful values for some entries */ + { + case HORZRES: ret = 640; break; + case VERTRES: ret = 480; break; + case BITSPIXEL: ret = 1; break; + case PLANES: ret = 1; break; + case NUMCOLORS: ret = 2; break; + case ASPECTX: ret = 36; break; + case ASPECTY: ret = 36; break; + case ASPECTXY: ret = 51; break; + case LOGPIXELSX: ret = 72; break; + case LOGPIXELSY: ret = 72; break; + case SIZEPALETTE: ret = 2; break; + } GDI_ReleaseObj( hdc ); } return ret; diff --git a/dlls/gdi/driver.c b/dlls/gdi/driver.c index 84664ec37c2..269bbcaa6a1 100644 --- a/dlls/gdi/driver.c +++ b/dlls/gdi/driver.c @@ -73,128 +73,130 @@ static struct graphics_driver *create_driver( HMODULE module ) driver->count = 1; /* fill the function table */ - + if (module) + { #define GET_FUNC(name) driver->funcs.p##name = (void*)GetProcAddress( module, #name ) - - GET_FUNC(AbortDoc); - GET_FUNC(AbortPath); - GET_FUNC(AlphaBlend); - GET_FUNC(AngleArc); - GET_FUNC(Arc); - GET_FUNC(ArcTo); - GET_FUNC(BeginPath); - GET_FUNC(BitBlt); - GET_FUNC(ChoosePixelFormat); - GET_FUNC(Chord); - GET_FUNC(CloseFigure); - GET_FUNC(CreateBitmap); - GET_FUNC(CreateDC); - GET_FUNC(CreateDIBSection); - GET_FUNC(DeleteBitmap); - GET_FUNC(DeleteDC); - GET_FUNC(DescribePixelFormat); - GET_FUNC(DeviceCapabilities); - GET_FUNC(Ellipse); - GET_FUNC(EndDoc); - GET_FUNC(EndPage); - GET_FUNC(EndPath); - GET_FUNC(EnumDeviceFonts); - GET_FUNC(ExcludeClipRect); - GET_FUNC(ExtDeviceMode); - GET_FUNC(ExtEscape); - GET_FUNC(ExtFloodFill); - GET_FUNC(ExtSelectClipRgn); - GET_FUNC(ExtTextOut); - GET_FUNC(FillPath); - GET_FUNC(FillRgn); - GET_FUNC(FlattenPath); - GET_FUNC(FrameRgn); - GET_FUNC(GdiComment); - GET_FUNC(GetBitmapBits); - GET_FUNC(GetCharWidth); - GET_FUNC(GetDCOrgEx); - GET_FUNC(GetDIBColorTable); - GET_FUNC(GetDIBits); - GET_FUNC(GetDeviceCaps); - GET_FUNC(GetDeviceGammaRamp); - GET_FUNC(GetNearestColor); - GET_FUNC(GetPixel); - GET_FUNC(GetPixelFormat); - GET_FUNC(GetSystemPaletteEntries); - GET_FUNC(GetTextExtentPoint); - GET_FUNC(GetTextMetrics); - GET_FUNC(IntersectClipRect); - GET_FUNC(InvertRgn); - GET_FUNC(LineTo); - GET_FUNC(MoveTo); - GET_FUNC(ModifyWorldTransform); - GET_FUNC(OffsetClipRgn); - GET_FUNC(OffsetViewportOrg); - GET_FUNC(OffsetWindowOrg); - GET_FUNC(PaintRgn); - GET_FUNC(PatBlt); - GET_FUNC(Pie); - GET_FUNC(PolyBezier); - GET_FUNC(PolyBezierTo); - GET_FUNC(PolyDraw); - GET_FUNC(PolyPolygon); - GET_FUNC(PolyPolyline); - GET_FUNC(Polygon); - GET_FUNC(Polyline); - GET_FUNC(PolylineTo); - GET_FUNC(RealizeDefaultPalette); - GET_FUNC(RealizePalette); - GET_FUNC(Rectangle); - GET_FUNC(ResetDC); - GET_FUNC(RestoreDC); - GET_FUNC(RoundRect); - GET_FUNC(SaveDC); - GET_FUNC(ScaleViewportExt); - GET_FUNC(ScaleWindowExt); - GET_FUNC(SelectBitmap); - GET_FUNC(SelectBrush); - GET_FUNC(SelectClipPath); - GET_FUNC(SelectFont); - GET_FUNC(SelectPalette); - GET_FUNC(SelectPen); - GET_FUNC(SetArcDirection); - GET_FUNC(SetBitmapBits); - GET_FUNC(SetBkColor); - GET_FUNC(SetBkMode); - GET_FUNC(SetDCBrushColor); - GET_FUNC(SetDCOrg); - GET_FUNC(SetDCPenColor); - GET_FUNC(SetDIBColorTable); - GET_FUNC(SetDIBits); - GET_FUNC(SetDIBitsToDevice); - GET_FUNC(SetDeviceClipping); - GET_FUNC(SetDeviceGammaRamp); - GET_FUNC(SetMapMode); - GET_FUNC(SetMapperFlags); - GET_FUNC(SetPixel); - GET_FUNC(SetPixelFormat); - GET_FUNC(SetPolyFillMode); - GET_FUNC(SetROP2); - GET_FUNC(SetRelAbs); - GET_FUNC(SetStretchBltMode); - GET_FUNC(SetTextAlign); - GET_FUNC(SetTextCharacterExtra); - GET_FUNC(SetTextColor); - GET_FUNC(SetTextJustification); - GET_FUNC(SetViewportExt); - GET_FUNC(SetViewportOrg); - GET_FUNC(SetWindowExt); - GET_FUNC(SetWindowOrg); - GET_FUNC(SetWorldTransform); - GET_FUNC(StartDoc); - GET_FUNC(StartPage); - GET_FUNC(StretchBlt); - GET_FUNC(StretchDIBits); - GET_FUNC(StrokeAndFillPath); - GET_FUNC(StrokePath); - GET_FUNC(SwapBuffers); - GET_FUNC(WidenPath); + GET_FUNC(AbortDoc); + GET_FUNC(AbortPath); + GET_FUNC(AlphaBlend); + GET_FUNC(AngleArc); + GET_FUNC(Arc); + GET_FUNC(ArcTo); + GET_FUNC(BeginPath); + GET_FUNC(BitBlt); + GET_FUNC(ChoosePixelFormat); + GET_FUNC(Chord); + GET_FUNC(CloseFigure); + GET_FUNC(CreateBitmap); + GET_FUNC(CreateDC); + GET_FUNC(CreateDIBSection); + GET_FUNC(DeleteBitmap); + GET_FUNC(DeleteDC); + GET_FUNC(DescribePixelFormat); + GET_FUNC(DeviceCapabilities); + GET_FUNC(Ellipse); + GET_FUNC(EndDoc); + GET_FUNC(EndPage); + GET_FUNC(EndPath); + GET_FUNC(EnumDeviceFonts); + GET_FUNC(ExcludeClipRect); + GET_FUNC(ExtDeviceMode); + GET_FUNC(ExtEscape); + GET_FUNC(ExtFloodFill); + GET_FUNC(ExtSelectClipRgn); + GET_FUNC(ExtTextOut); + GET_FUNC(FillPath); + GET_FUNC(FillRgn); + GET_FUNC(FlattenPath); + GET_FUNC(FrameRgn); + GET_FUNC(GdiComment); + GET_FUNC(GetBitmapBits); + GET_FUNC(GetCharWidth); + GET_FUNC(GetDCOrgEx); + GET_FUNC(GetDIBColorTable); + GET_FUNC(GetDIBits); + GET_FUNC(GetDeviceCaps); + GET_FUNC(GetDeviceGammaRamp); + GET_FUNC(GetNearestColor); + GET_FUNC(GetPixel); + GET_FUNC(GetPixelFormat); + GET_FUNC(GetSystemPaletteEntries); + GET_FUNC(GetTextExtentPoint); + GET_FUNC(GetTextMetrics); + GET_FUNC(IntersectClipRect); + GET_FUNC(InvertRgn); + GET_FUNC(LineTo); + GET_FUNC(MoveTo); + GET_FUNC(ModifyWorldTransform); + GET_FUNC(OffsetClipRgn); + GET_FUNC(OffsetViewportOrg); + GET_FUNC(OffsetWindowOrg); + GET_FUNC(PaintRgn); + GET_FUNC(PatBlt); + GET_FUNC(Pie); + GET_FUNC(PolyBezier); + GET_FUNC(PolyBezierTo); + GET_FUNC(PolyDraw); + GET_FUNC(PolyPolygon); + GET_FUNC(PolyPolyline); + GET_FUNC(Polygon); + GET_FUNC(Polyline); + GET_FUNC(PolylineTo); + GET_FUNC(RealizeDefaultPalette); + GET_FUNC(RealizePalette); + GET_FUNC(Rectangle); + GET_FUNC(ResetDC); + GET_FUNC(RestoreDC); + GET_FUNC(RoundRect); + GET_FUNC(SaveDC); + GET_FUNC(ScaleViewportExt); + GET_FUNC(ScaleWindowExt); + GET_FUNC(SelectBitmap); + GET_FUNC(SelectBrush); + GET_FUNC(SelectClipPath); + GET_FUNC(SelectFont); + GET_FUNC(SelectPalette); + GET_FUNC(SelectPen); + GET_FUNC(SetArcDirection); + GET_FUNC(SetBitmapBits); + GET_FUNC(SetBkColor); + GET_FUNC(SetBkMode); + GET_FUNC(SetDCBrushColor); + GET_FUNC(SetDCOrg); + GET_FUNC(SetDCPenColor); + GET_FUNC(SetDIBColorTable); + GET_FUNC(SetDIBits); + GET_FUNC(SetDIBitsToDevice); + GET_FUNC(SetDeviceClipping); + GET_FUNC(SetDeviceGammaRamp); + GET_FUNC(SetMapMode); + GET_FUNC(SetMapperFlags); + GET_FUNC(SetPixel); + GET_FUNC(SetPixelFormat); + GET_FUNC(SetPolyFillMode); + GET_FUNC(SetROP2); + GET_FUNC(SetRelAbs); + GET_FUNC(SetStretchBltMode); + GET_FUNC(SetTextAlign); + GET_FUNC(SetTextCharacterExtra); + GET_FUNC(SetTextColor); + GET_FUNC(SetTextJustification); + GET_FUNC(SetViewportExt); + GET_FUNC(SetViewportOrg); + GET_FUNC(SetWindowExt); + GET_FUNC(SetWindowOrg); + GET_FUNC(SetWorldTransform); + GET_FUNC(StartDoc); + GET_FUNC(StartPage); + GET_FUNC(StretchBlt); + GET_FUNC(StretchDIBits); + GET_FUNC(StrokeAndFillPath); + GET_FUNC(StrokePath); + GET_FUNC(SwapBuffers); + GET_FUNC(WidenPath); #undef GET_FUNC + } + else memset( &driver->funcs, 0, sizeof(driver->funcs) ); /* add it to the list */ driver->prev = NULL; @@ -221,7 +223,7 @@ static struct graphics_driver *load_display_driver(void) return display_driver; } - strcpy( buffer, "x11,tty" ); /* default value */ + strcpy( buffer, "x11" ); /* default value */ /* @@ Wine registry key: HKCU\Software\Wine\Drivers */ if (!RegOpenKeyA( HKEY_CURRENT_USER, "Software\\Wine\\Drivers", &hkey )) { @@ -240,13 +242,6 @@ static struct graphics_driver *load_display_driver(void) if ((module = LoadLibraryA( libname )) != 0) break; name = next; } - if (!module) - { - MESSAGE( "wine: Could not load graphics driver '%s'.\n", buffer ); - if (!strcasecmp( buffer, "x11" )) - MESSAGE( "Make sure that your X server is running and that $DISPLAY is set correctly.\n" ); - ExitProcess(1); - } if (!(display_driver = create_driver( module ))) {