From: Massimo Del Fedele Date: Sun, 18 Jul 2010 10:26:09 +0000 (+0200) Subject: DIB Engine: Fork DDB-DIB behaviour X-Git-Url: https://repo.or.cz/w/wine/hacks.git/commitdiff_plain/bed36322d64b0816769d9c10f1718bd0720baa38 DIB Engine: Fork DDB-DIB behaviour --- diff --git a/dlls/winedib.drv/bitblt.c b/dlls/winedib.drv/bitblt.c index fa9e2ec7c85..022f2237b88 100644 --- a/dlls/winedib.drv/bitblt.c +++ b/dlls/winedib.drv/bitblt.c @@ -32,12 +32,43 @@ BOOL DIBDRV_AlphaBlend( DIBDRVPHYSDEV *physDevDst, INT xDst, INT yDst, INT width DIBDRVPHYSDEV *physDevSrc, INT xSrc, INT ySrc, INT widthSrc, INT heightSrc, BLENDFUNCTION blendfn) { + BOOL res; + TRACE("physDevDst:%p, xDst:%d, yDst:%d, widthDst:%d, heightDst:%d, physDevSrc:%p, xSrc:%d, ySrc:%d, widthSrc:%d, heightSrc:%d\n", physDevDst, xDst, yDst, widthDst, heightDst, physDevSrc, xSrc, ySrc, widthSrc, heightSrc); - ONCE(FIXME("stub\n")); - return _DIBDRV_GetDisplayDriver()->pAlphaBlend(physDevDst->X11PhysDev, xDst, yDst, widthDst, heightDst, + + if(physDevDst->hasDIB && physDevSrc->hasDIB) + { + /* DIB section selected in both source and dest DC, use DIB Engine */ + ONCE(FIXME("TEMPORARY - fallback to X11 driver\n")); + res = _DIBDRV_GetDisplayDriver()->pAlphaBlend(physDevDst->X11PhysDev, xDst, yDst, widthDst, heightDst, + physDevSrc->X11PhysDev, xSrc, ySrc, widthSrc, heightSrc, + blendfn); + } + else if(!physDevDst->hasDIB && !physDevSrc->hasDIB) + { + /* DDB selected in noth source and dest DC, use X11 driver */ + res = _DIBDRV_GetDisplayDriver()->pAlphaBlend(physDevDst->X11PhysDev, xDst, yDst, widthDst, heightDst, + physDevSrc->X11PhysDev, xSrc, ySrc, widthSrc, heightSrc, + blendfn); + } + else if(physDevSrc->hasDIB) + { + /* DIB on source, DDB on dest -- must convert source DIB to DDB and use X11 driver for blit */ + ONCE(FIXME("TEMPORARY - fallback to X11 driver\n")); + res = _DIBDRV_GetDisplayDriver()->pAlphaBlend(physDevDst->X11PhysDev, xDst, yDst, widthDst, heightDst, + physDevSrc->X11PhysDev, xSrc, ySrc, widthSrc, heightSrc, + blendfn); + } + else /* if(physDevDst->hasDIB) */ + { + /* DDB on source, DIB on dest -- must convert source DDB to DIB and use the engine for blit */ + ONCE(FIXME("TEMPORARY - fallback to X11 driver\n")); + res = _DIBDRV_GetDisplayDriver()->pAlphaBlend(physDevDst->X11PhysDev, xDst, yDst, widthDst, heightDst, physDevSrc->X11PhysDev, xSrc, ySrc, widthSrc, heightSrc, blendfn); + } + return res; } /*********************************************************************** @@ -47,11 +78,39 @@ BOOL DIBDRV_BitBlt( DIBDRVPHYSDEV *physDevDst, INT xDst, INT yDst, INT width, INT height, DIBDRVPHYSDEV *physDevSrc, INT xSrc, INT ySrc, DWORD rop ) { + BOOL res; + TRACE("physDevDst:%p, xDst:%d, yDst:%d, width:%d, height:%d, physDevSrc:%p, xSrc:%d, ySrc:%d, rop:%08x\n", physDevDst, xDst, yDst, width, height, physDevSrc, xSrc, ySrc, rop); - ONCE(FIXME("stub\n")); - return _DIBDRV_GetDisplayDriver()->pBitBlt(physDevDst->X11PhysDev, xDst, yDst, width, height, + + if(physDevDst->hasDIB && physDevSrc->hasDIB) + { + /* DIB section selected in both source and dest DC, use DIB Engine */ + ONCE(FIXME("TEMPORARY - fallback to X11 driver\n")); + res = _DIBDRV_GetDisplayDriver()->pBitBlt(physDevDst->X11PhysDev, xDst, yDst, width, height, physDevSrc->X11PhysDev, xSrc, ySrc, rop); + } + else if(!physDevDst->hasDIB && !physDevSrc->hasDIB) + { + /* DDB selected in noth source and dest DC, use X11 driver */ + res = _DIBDRV_GetDisplayDriver()->pBitBlt(physDevDst->X11PhysDev, xDst, yDst, width, height, + physDevSrc->X11PhysDev, xSrc, ySrc, rop); + } + else if(physDevSrc->hasDIB) + { + /* DIB on source, DDB on dest -- must convert source DIB to DDB and use X11 driver for blit */ + ONCE(FIXME("TEMPORARY - fallback to X11 driver\n")); + res = _DIBDRV_GetDisplayDriver()->pBitBlt(physDevDst->X11PhysDev, xDst, yDst, width, height, + physDevSrc->X11PhysDev, xSrc, ySrc, rop); + } + else /* if(physDevDst->hasDIB) */ + { + /* DDB on source, DIB on dest -- must convert source DDB to DIB and use the engine for blit */ + ONCE(FIXME("TEMPORARY - fallback to X11 driver\n")); + res = _DIBDRV_GetDisplayDriver()->pBitBlt(physDevDst->X11PhysDev, xDst, yDst, width, height, + physDevSrc->X11PhysDev, xSrc, ySrc, rop); + } + return res; } /*********************************************************************** @@ -62,11 +121,39 @@ BOOL DIBDRV_StretchBlt( DIBDRVPHYSDEV *physDevDst, INT xDst, INT yDst, DIBDRVPHYSDEV *physDevSrc, INT xSrc, INT ySrc, INT widthSrc, INT heightSrc, DWORD rop ) { + BOOL res; + TRACE("physDevDst:%p, xDst:%d, yDst:%d, widthDst:%d, heightDst:%d, physDevSrc:%p, xSrc:%d, ySrc:%d, widthSrc:%d, heightSrc:%d, rop:%8x\n", physDevDst, xDst, yDst, widthDst, heightDst, physDevSrc, xSrc, ySrc, widthSrc, heightSrc, rop); - ONCE(FIXME("stub\n")); - return _DIBDRV_GetDisplayDriver()->pStretchBlt(physDevDst->X11PhysDev, xDst, yDst, widthSrc, heightSrc, + + if(physDevDst->hasDIB && physDevSrc->hasDIB) + { + /* DIB section selected in both source and dest DC, use DIB Engine */ + ONCE(FIXME("TEMPORARY - fallback to X11 driver\n")); + res = _DIBDRV_GetDisplayDriver()->pStretchBlt(physDevDst->X11PhysDev, xDst, yDst, widthSrc, heightSrc, + physDevSrc->X11PhysDev, xSrc, ySrc, widthDst, heightDst, rop); + } + else if(!physDevDst->hasDIB && !physDevSrc->hasDIB) + { + /* DDB selected in noth source and dest DC, use X11 driver */ + res = _DIBDRV_GetDisplayDriver()->pStretchBlt(physDevDst->X11PhysDev, xDst, yDst, widthSrc, heightSrc, + physDevSrc->X11PhysDev, xSrc, ySrc, widthDst, heightDst, rop); + } + else if(physDevSrc->hasDIB) + { + /* DIB on source, DDB on dest -- must convert source DIB to DDB and use X11 driver for blit */ + ONCE(FIXME("TEMPORARY - fallback to X11 driver\n")); + res = _DIBDRV_GetDisplayDriver()->pStretchBlt(physDevDst->X11PhysDev, xDst, yDst, widthSrc, heightSrc, physDevSrc->X11PhysDev, xSrc, ySrc, widthDst, heightDst, rop); + } + else /* if(physDevDst->hasDIB) */ + { + /* DDB on source, DIB on dest -- must convert source DDB to DIB and use the engine for blit */ + ONCE(FIXME("TEMPORARY - fallback to X11 driver\n")); + res = _DIBDRV_GetDisplayDriver()->pStretchBlt(physDevDst->X11PhysDev, xDst, yDst, widthSrc, heightSrc, + physDevSrc->X11PhysDev, xSrc, ySrc, widthDst, heightDst, rop); + } + return res; } /*********************************************************************** @@ -74,7 +161,20 @@ BOOL DIBDRV_StretchBlt( DIBDRVPHYSDEV *physDevDst, INT xDst, INT yDst, */ BOOL DIBDRV_PatBlt( DIBDRVPHYSDEV *physDev, INT left, INT top, INT width, INT height, DWORD rop ) { + BOOL res; + TRACE("physDev:%p, left:%d, top:%d, width:%d, height:%d, rop:%06x\n", physDev, left, top, width, height, rop); - ONCE(FIXME("stub\n")); - return _DIBDRV_GetDisplayDriver()->pPatBlt(physDev->X11PhysDev, left, top, width, height, rop); + + if(physDev->hasDIB) + { + /* DIB section selected in, use DIB Engine */ + ONCE(FIXME("TEMPORARY - fallback to X11 driver\n")); + res = _DIBDRV_GetDisplayDriver()->pPatBlt(physDev->X11PhysDev, left, top, width, height, rop); + } + else + { + /* DDB selected in, use X11 driver */ + res = _DIBDRV_GetDisplayDriver()->pPatBlt(physDev->X11PhysDev, left, top, width, height, rop); + } + return res; } diff --git a/dlls/winedib.drv/bitmap.c b/dlls/winedib.drv/bitmap.c index 09cca69d752..df7c03a22d8 100644 --- a/dlls/winedib.drv/bitmap.c +++ b/dlls/winedib.drv/bitmap.c @@ -31,9 +31,31 @@ WINE_DEFAULT_DEBUG_CHANNEL(dibdrv); */ HBITMAP DIBDRV_SelectBitmap( DIBDRVPHYSDEV *physDev, HBITMAP hbitmap ) { + DIBSECTION dibSection; + HBITMAP res; + TRACE("physDev:%p, hbitmap:%p\n", physDev, hbitmap); - ONCE(FIXME("stub\n")); - return _DIBDRV_GetDisplayDriver()->pSelectBitmap(physDev->X11PhysDev, hbitmap); + + /* try to get the DIBSECTION data from the bitmap */ + if(GetObjectW(hbitmap, sizeof(DIBSECTION), &dibSection) == sizeof(BITMAP)) + { + /* not a DIB section, sets it on physDev and use X11 behaviour */ + physDev->hasDIB = FALSE; + res = _DIBDRV_GetDisplayDriver()->pSelectBitmap(physDev->X11PhysDev, hbitmap); + if(res) + physDev->hbitmap = hbitmap; + } + else + { + /* it's a DIB section, sets it on physDev and use DIB Engine behaviour */ + ONCE(FIXME("TEMPORARY - fallback to X11 driver\n")); + physDev->hasDIB = TRUE; + res = _DIBDRV_GetDisplayDriver()->pSelectBitmap(physDev->X11PhysDev, hbitmap); + if(res) + physDev->hbitmap = hbitmap; + } + return res; + } /**************************************************************************** @@ -41,9 +63,24 @@ HBITMAP DIBDRV_SelectBitmap( DIBDRVPHYSDEV *physDev, HBITMAP hbitmap ) */ BOOL DIBDRV_CreateBitmap( DIBDRVPHYSDEV *physDev, HBITMAP hbitmap, LPVOID bmBits ) { + DIBSECTION dibSection; + BOOL res; + TRACE("physDev:%p, hbitmap:%p, bmBits:%p\n", physDev, hbitmap, bmBits); - ONCE(FIXME("stub\n")); - return _DIBDRV_GetDisplayDriver()->pCreateBitmap(physDev->X11PhysDev, hbitmap, bmBits); + + /* try to get the DIBSECTION data from the bitmap */ + if(GetObjectW(hbitmap, sizeof(DIBSECTION), &dibSection) == sizeof(BITMAP)) + { + /* not a DIB section, use X11 behaviour */ + res = _DIBDRV_GetDisplayDriver()->pCreateBitmap(physDev->X11PhysDev, hbitmap, bmBits); + } + else + { + /* it's a DIB section, use DIB Engine behaviour */ + ONCE(FIXME("TEMPORARY - fallback to X11 driver\n")); + res = _DIBDRV_GetDisplayDriver()->pCreateBitmap(physDev->X11PhysDev, hbitmap, bmBits); + } + return res; } /*********************************************************************** @@ -51,9 +88,24 @@ BOOL DIBDRV_CreateBitmap( DIBDRVPHYSDEV *physDev, HBITMAP hbitmap, LPVOID bmBits */ BOOL DIBDRV_DeleteBitmap( HBITMAP hbitmap ) { + DIBSECTION dibSection; + BOOL res; + TRACE("hbitmap:%p\n", hbitmap); - ONCE(FIXME("stub\n")); - return _DIBDRV_GetDisplayDriver()->pDeleteBitmap(hbitmap); + + /* try to get the DIBSECTION data from the bitmap */ + if(GetObjectW(hbitmap, sizeof(DIBSECTION), &dibSection) == sizeof(BITMAP)) + { + /* not a DIB section, use X11 behaviour */ + res = _DIBDRV_GetDisplayDriver()->pDeleteBitmap(hbitmap); + } + else + { + /* it's a DIB section, use DIB Engine behaviour */ + ONCE(FIXME("TEMPORARY - fallback to X11 driver\n")); + res = _DIBDRV_GetDisplayDriver()->pDeleteBitmap(hbitmap); + } + return res; } /*********************************************************************** @@ -61,9 +113,14 @@ BOOL DIBDRV_DeleteBitmap( HBITMAP hbitmap ) */ LONG DIBDRV_GetBitmapBits( HBITMAP hbitmap, void *buffer, LONG count ) { + LONG res; + TRACE("hbitmap:%p, buffer:%p, count:%d\n", hbitmap, buffer, count); - ONCE(FIXME("stub\n")); - return _DIBDRV_GetDisplayDriver()->pGetBitmapBits(hbitmap, buffer, count); + + /* GetBitmapBits is only valid for DDBs, so use X11 driver */ + res = _DIBDRV_GetDisplayDriver()->pGetBitmapBits(hbitmap, buffer, count); + + return res; } /****************************************************************************** @@ -71,7 +128,12 @@ LONG DIBDRV_GetBitmapBits( HBITMAP hbitmap, void *buffer, LONG count ) */ LONG DIBDRV_SetBitmapBits( HBITMAP hbitmap, const void *bits, LONG count ) { + LONG res; + TRACE("hbitmap:%p, bits:%p, count:%d\n", hbitmap, bits, count); - ONCE(FIXME("stub\n")); - return _DIBDRV_GetDisplayDriver()->pSetBitmapBits(hbitmap, bits, count); + + /* SetBitmapBits is only valid for DDBs, so use X11 driver */ + res = _DIBDRV_GetDisplayDriver()->pSetBitmapBits(hbitmap, bits, count); + + return res; } diff --git a/dlls/winedib.drv/clipping.c b/dlls/winedib.drv/clipping.c index b3c18efbb9a..1ddbb1b4984 100644 --- a/dlls/winedib.drv/clipping.c +++ b/dlls/winedib.drv/clipping.c @@ -31,6 +31,16 @@ WINE_DEFAULT_DEBUG_CHANNEL(dibdrv); void DIBDRV_SetDeviceClipping( DIBDRVPHYSDEV *physDev, HRGN vis_rgn, HRGN clip_rgn ) { TRACE("physDev:%p, vis_rgn:%p, clip_rgn:%p\n", physDev, vis_rgn, clip_rgn); - ONCE(FIXME("stub\n")); - _DIBDRV_GetDisplayDriver()->pSetDeviceClipping(physDev->X11PhysDev, vis_rgn, clip_rgn); + + if(physDev->hasDIB) + { + /* DIB section selected in, use DIB Engine */ + ONCE(FIXME("TEMPORARY - fallback to X11 driver\n")); + _DIBDRV_GetDisplayDriver()->pSetDeviceClipping(physDev->X11PhysDev, vis_rgn, clip_rgn); + } + else + { + /* DDB selected in, use X11 driver */ + _DIBDRV_GetDisplayDriver()->pSetDeviceClipping(physDev->X11PhysDev, vis_rgn, clip_rgn); + } } diff --git a/dlls/winedib.drv/dc.c b/dlls/winedib.drv/dc.c index e0ffb4d0f79..c8e3b91ad97 100644 --- a/dlls/winedib.drv/dc.c +++ b/dlls/winedib.drv/dc.c @@ -52,10 +52,15 @@ BOOL DIBDRV_CreateDC( HDC hdc, DIBDRVPHYSDEV **pdev, LPCWSTR driver, LPCWSTR dev /* sets X11 Device pointer in DIB Engine device */ physDev->X11PhysDev = X11PhysDev; + /* stock bitmap selected on DC creation */ + physDev->hbitmap = GetStockObject(DEFAULT_BITMAP); + + /* no DIB selected into DC on creation */ + physDev->hasDIB = FALSE; + /* sets the result value and returns */ *pdev = physDev; - ONCE(FIXME("stub\n")); return TRUE; } @@ -85,11 +90,23 @@ BOOL DIBDRV_DeleteDC( DIBDRVPHYSDEV *physDev ) INT DIBDRV_ExtEscape( DIBDRVPHYSDEV *physDev, INT escape, INT in_count, LPCVOID in_data, INT out_count, LPVOID out_data ) { + INT res; + TRACE("physDev:%p, escape:%d, in_count:%d, in_data:%p, out_count:%d, out_data:%p\n", physDev, escape, in_count, in_data, out_count, out_data); - ONCE(FIXME("stub\n")); - return _DIBDRV_GetDisplayDriver()->pExtEscape(physDev->X11PhysDev, escape, in_count, in_data, out_count, out_data); + if(physDev->hasDIB) + { + /* DIB section selected in, use DIB Engine */ + ONCE(FIXME("TEMPORARY - fallback to X11 driver\n")); + res = _DIBDRV_GetDisplayDriver()->pExtEscape(physDev->X11PhysDev, escape, in_count, in_data, out_count, out_data); + } + else + { + /* DDB selected in, use X11 driver */ + res = _DIBDRV_GetDisplayDriver()->pExtEscape(physDev->X11PhysDev, escape, in_count, in_data, out_count, out_data); + } + return res; } /*********************************************************************** @@ -97,8 +114,20 @@ INT DIBDRV_ExtEscape( DIBDRVPHYSDEV *physDev, INT escape, INT in_count, LPCVOID */ INT DIBDRV_GetDeviceCaps( DIBDRVPHYSDEV *physDev, INT cap ) { + INT res; + TRACE("physDev:%p, cap:%d\n", physDev, cap); - ONCE(FIXME("stub\n")); - return _DIBDRV_GetDisplayDriver()->pGetDeviceCaps(physDev->X11PhysDev, cap); + if(physDev->hasDIB) + { + /* DIB section selected in, use DIB Engine */ + ONCE(FIXME("TEMPORARY - fallback to X11 driver\n")); + res = _DIBDRV_GetDisplayDriver()->pGetDeviceCaps(physDev->X11PhysDev, cap); + } + else + { + /* DDB selected in, use X11 driver */ + res = _DIBDRV_GetDisplayDriver()->pGetDeviceCaps(physDev->X11PhysDev, cap); + } + return res; } diff --git a/dlls/winedib.drv/dib.c b/dlls/winedib.drv/dib.c index 47dce0e6672..28330faf320 100644 --- a/dlls/winedib.drv/dib.c +++ b/dlls/winedib.drv/dib.c @@ -31,10 +31,15 @@ WINE_DEFAULT_DEBUG_CHANNEL(dibdrv); HBITMAP DIBDRV_CreateDIBSection( DIBDRVPHYSDEV *physDev, HBITMAP hbitmap, const BITMAPINFO *bmi, UINT usage ) { + HBITMAP res; + TRACE("physDev:%p, hbitmap:%p, bmi:%p, usage:%d\n", physDev, hbitmap, bmi, usage); - ONCE(FIXME("stub\n")); - return _DIBDRV_GetDisplayDriver()->pCreateDIBSection(physDev->X11PhysDev, hbitmap, bmi, usage); + /* createDIBSection is only DIB-related, so we just use the engine */ + ONCE(FIXME("TEMPORARY - fallback to X11 driver\n")); + res = _DIBDRV_GetDisplayDriver()->pCreateDIBSection(physDev->X11PhysDev, hbitmap, bmi, usage); + + return res; } /*********************************************************************** @@ -43,11 +48,15 @@ HBITMAP DIBDRV_CreateDIBSection( DIBDRVPHYSDEV *physDev, HBITMAP hbitmap, INT DIBDRV_GetDIBits( DIBDRVPHYSDEV *physDev, HBITMAP hbitmap, UINT startscan, UINT lines, LPCVOID bits, const BITMAPINFO *bmi, UINT coloruse ) { + INT res; + TRACE("physDev:%p, hbitmap:%p, startscan:%d, lines:%d, bits:%p, bmi:%p, coloruse:%d\n", physDev, hbitmap, startscan, lines, bits, bmi, coloruse); - ONCE(FIXME("stub\n")); - return _DIBDRV_GetDisplayDriver()->pGetDIBits(physDev->X11PhysDev, hbitmap, startscan, lines, bits, bmi, coloruse); + /* GetDIBits reads bits from a DDB, so we should use the X11 driver */ + res = _DIBDRV_GetDisplayDriver()->pGetDIBits(physDev->X11PhysDev, hbitmap, startscan, lines, bits, bmi, coloruse); + + return res; } /*********************************************************************** @@ -56,10 +65,15 @@ INT DIBDRV_GetDIBits( DIBDRVPHYSDEV *physDev, HBITMAP hbitmap, UINT startscan, UINT DIBDRV_SetDIBColorTable( DIBDRVPHYSDEV *physDev, UINT start, UINT count, const RGBQUAD *colors ) { + UINT res; + TRACE("physDev:%p, start:%d, count:%d, colors:%p\n", physDev, start, count, colors); - ONCE(FIXME("stub\n")); - return _DIBDRV_GetDisplayDriver()->pSetDIBColorTable(physDev->X11PhysDev, start, count, colors); + /* SetDIBColorTable operates on a DIB, so we use the engine */ + ONCE(FIXME("TEMPORARY - fallback to X11 driver\n")); + res = _DIBDRV_GetDisplayDriver()->pSetDIBColorTable(physDev->X11PhysDev, start, count, colors); + + return res; } /*********************************************************************** @@ -68,11 +82,15 @@ UINT DIBDRV_SetDIBColorTable( DIBDRVPHYSDEV *physDev, UINT start, UINT count, INT DIBDRV_SetDIBits( DIBDRVPHYSDEV *physDev, HBITMAP hbitmap, UINT startscan, UINT lines, LPCVOID bits, const BITMAPINFO *info, UINT coloruse ) { + INT res; + TRACE("physDev:%p, hbitmap:%p, startscan:%d, lines:%d, bits:%p, bmi:%p, coloruse:%d\n", physDev, hbitmap, startscan, lines, bits, info, coloruse); - ONCE(FIXME("stub\n")); - return _DIBDRV_GetDisplayDriver()->pSetDIBits(physDev->X11PhysDev, hbitmap, startscan, lines, bits, info, coloruse); + /* SetDIBits writes bits to a DDB, so we should use the X11 driver */ + res = _DIBDRV_GetDisplayDriver()->pSetDIBits(physDev->X11PhysDev, hbitmap, startscan, lines, bits, info, coloruse); + + return res; } /************************************************************************* @@ -83,10 +101,14 @@ INT DIBDRV_SetDIBitsToDevice( DIBDRVPHYSDEV *physDev, INT xDest, INT yDest, DWOR UINT startscan, UINT lines, LPCVOID bits, const BITMAPINFO *info, UINT coloruse ) { + INT res; + TRACE("physDev:%p, xDest:%d, yDest:%d, cx:%x, cy:%x, xSrc:%d, ySrc:%d, startscan:%d, lines:%d, bits:%p, info:%p, coloruse:%d\n", physDev, xDest, yDest, cx, cy, xSrc, ySrc, startscan, lines, bits, info, coloruse); - ONCE(FIXME("stub\n")); - return _DIBDRV_GetDisplayDriver()->pSetDIBitsToDevice(physDev->X11PhysDev, xDest, yDest, cx, cy, xSrc, ySrc, + /* SetDIBitsToDevice operates on a physical device, so we should use the X11 driver */ + res = _DIBDRV_GetDisplayDriver()->pSetDIBitsToDevice(physDev->X11PhysDev, xDest, yDest, cx, cy, xSrc, ySrc, startscan, lines, bits, info, coloruse); + + return res; } diff --git a/dlls/winedib.drv/dibdrv.h b/dlls/winedib.drv/dibdrv.h index 6dfba069bc4..8a2e139856a 100644 --- a/dlls/winedib.drv/dibdrv.h +++ b/dlls/winedib.drv/dibdrv.h @@ -52,6 +52,9 @@ } \ } +/* extra stock object: default 1x1 bitmap for memory DCs + grabbed from gdi_private.h */ +#define DEFAULT_BITMAP (STOCK_LAST+1) /* DIB driver physical device */ typedef struct _DIBDRVPHYSDEV @@ -59,6 +62,12 @@ typedef struct _DIBDRVPHYSDEV /* X11 driver physical device */ PHYSDEV X11PhysDev; + /* is a DIB selected into DC ? */ + BOOL hasDIB; + + /* currently selected HBITMAP */ + HBITMAP hbitmap; + /* active ROP2 */ INT rop2; diff --git a/dlls/winedib.drv/font.c b/dlls/winedib.drv/font.c index 85f91984320..675145fbd29 100644 --- a/dlls/winedib.drv/font.c +++ b/dlls/winedib.drv/font.c @@ -31,10 +31,22 @@ WINE_DEFAULT_DEBUG_CHANNEL(dibdrv); */ COLORREF DIBDRV_SetTextColor( DIBDRVPHYSDEV *physDev, COLORREF color ) { + COLORREF res; + TRACE("physDev:%p, color:%08x\n", physDev, color); - ONCE(FIXME("stub\n")); - return _DIBDRV_GetDisplayDriver()->pSetTextColor(physDev->X11PhysDev, color); + if(physDev->hasDIB) + { + /* DIB section selected in, use DIB Engine */ + ONCE(FIXME("TEMPORARY - fallback to X11 driver\n")); + res = _DIBDRV_GetDisplayDriver()->pSetTextColor(physDev->X11PhysDev, color); + } + else + { + /* DDB selected in, use X11 driver */ + res = _DIBDRV_GetDisplayDriver()->pSetTextColor(physDev->X11PhysDev, color); + } + return res; } /*********************************************************************** @@ -42,10 +54,22 @@ COLORREF DIBDRV_SetTextColor( DIBDRVPHYSDEV *physDev, COLORREF color ) */ HFONT DIBDRV_SelectFont( DIBDRVPHYSDEV *physDev, HFONT hfont, HANDLE gdiFont ) { + HFONT res; + TRACE("physDev:%p, hfont:%p, gdiFont:%p\n", physDev, hfont, gdiFont); - ONCE(FIXME("stub\n")); - return _DIBDRV_GetDisplayDriver()->pSelectFont(physDev->X11PhysDev, hfont, gdiFont); + if(physDev->hasDIB) + { + /* DIB section selected in, use DIB Engine */ + ONCE(FIXME("TEMPORARY - fallback to X11 driver\n")); + res = _DIBDRV_GetDisplayDriver()->pSelectFont(physDev->X11PhysDev, hfont, gdiFont); + } + else + { + /* DDB selected in, use X11 driver */ + res = _DIBDRV_GetDisplayDriver()->pSelectFont(physDev->X11PhysDev, hfont, gdiFont); + } + return res; } /*********************************************************************** @@ -54,10 +78,22 @@ HFONT DIBDRV_SelectFont( DIBDRVPHYSDEV *physDev, HFONT hfont, HANDLE gdiFont ) BOOL DIBDRV_EnumDeviceFonts( DIBDRVPHYSDEV *physDev, LPLOGFONTW plf, FONTENUMPROCW proc, LPARAM lp ) { + BOOL res; + TRACE("physDev:%p, plf:%p, proc:%p, lp:%lx\n", physDev, plf, proc, lp); - ONCE(FIXME("stub\n")); - return _DIBDRV_GetDisplayDriver()->pEnumDeviceFonts(physDev->X11PhysDev, plf, proc, lp); + if(physDev->hasDIB) + { + /* DIB section selected in, use DIB Engine */ + ONCE(FIXME("TEMPORARY - fallback to X11 driver\n")); + res = _DIBDRV_GetDisplayDriver()->pEnumDeviceFonts(physDev->X11PhysDev, plf, proc, lp); + } + else + { + /* DDB selected in, use X11 driver */ + res = _DIBDRV_GetDisplayDriver()->pEnumDeviceFonts(physDev->X11PhysDev, plf, proc, lp); + } + return res; } /*********************************************************************** @@ -65,9 +101,22 @@ BOOL DIBDRV_EnumDeviceFonts( DIBDRVPHYSDEV *physDev, LPLOGFONTW plf, */ BOOL DIBDRV_GetTextMetrics( DIBDRVPHYSDEV *physDev, TEXTMETRICW *metrics ) { + BOOL res; + TRACE("physDev:%p, metrics:%p\n", physDev, metrics); - ONCE(FIXME("stub\n")); - return _DIBDRV_GetDisplayDriver()->pGetTextMetrics(physDev->X11PhysDev, metrics); + + if(physDev->hasDIB) + { + /* DIB section selected in, use DIB Engine */ + ONCE(FIXME("TEMPORARY - fallback to X11 driver\n")); + res = _DIBDRV_GetDisplayDriver()->pGetTextMetrics(physDev->X11PhysDev, metrics); + } + else + { + /* DDB selected in, use X11 driver */ + res = _DIBDRV_GetDisplayDriver()->pGetTextMetrics(physDev->X11PhysDev, metrics); + } + return res; } /*********************************************************************** @@ -76,8 +125,20 @@ BOOL DIBDRV_GetTextMetrics( DIBDRVPHYSDEV *physDev, TEXTMETRICW *metrics ) BOOL DIBDRV_GetCharWidth( DIBDRVPHYSDEV *physDev, UINT firstChar, UINT lastChar, LPINT buffer ) { + BOOL res; + TRACE("physDev:%p, firstChar:%d, lastChar:%d, buffer:%pn", physDev, firstChar, lastChar, buffer); - ONCE(FIXME("stub\n")); - return _DIBDRV_GetDisplayDriver()->pGetCharWidth(physDev->X11PhysDev, firstChar, lastChar, buffer); + if(physDev->hasDIB) + { + /* DIB section selected in, use DIB Engine */ + ONCE(FIXME("TEMPORARY - fallback to X11 driver\n")); + res = _DIBDRV_GetDisplayDriver()->pGetCharWidth(physDev->X11PhysDev, firstChar, lastChar, buffer); + } + else + { + /* DDB selected in, use X11 driver */ + res = _DIBDRV_GetDisplayDriver()->pGetCharWidth(physDev->X11PhysDev, firstChar, lastChar, buffer); + } + return res; } diff --git a/dlls/winedib.drv/graphics.c b/dlls/winedib.drv/graphics.c index b746af27a66..b74c08ef728 100644 --- a/dlls/winedib.drv/graphics.c +++ b/dlls/winedib.drv/graphics.c @@ -31,12 +31,25 @@ WINE_DEFAULT_DEBUG_CHANNEL(dibdrv); BOOL DIBDRV_Arc( DIBDRVPHYSDEV *physDev, INT left, INT top, INT right, INT bottom, INT xstart, INT ystart, INT xend, INT yend ) { + BOOL res; + TRACE("physDev:%p, left:%d, top:%d, right:%d, bottom:%d, xstart:%d, ystart:%d, xend:%d, yend:%d\n", physDev, left, top, right, bottom, xstart, ystart, xend, yend); - ONCE(FIXME("stub\n")); - return _DIBDRV_GetDisplayDriver()->pArc(physDev->X11PhysDev, left, top, right, bottom, - xstart, ystart, xend, yend); + if(physDev->hasDIB) + { + /* DIB section selected in, use DIB Engine */ + ONCE(FIXME("TEMPORARY - fallback to X11 driver\n")); + res = _DIBDRV_GetDisplayDriver()->pArc(physDev->X11PhysDev, left, top, right, bottom, + xstart, ystart, xend, yend); + } + else + { + /* DDB selected in, use X11 driver */ + res = _DIBDRV_GetDisplayDriver()->pArc(physDev->X11PhysDev, left, top, right, bottom, + xstart, ystart, xend, yend); + } + return res; } /*********************************************************************** @@ -45,12 +58,25 @@ BOOL DIBDRV_Arc( DIBDRVPHYSDEV *physDev, INT left, INT top, INT right, INT botto BOOL DIBDRV_Chord( DIBDRVPHYSDEV *physDev, INT left, INT top, INT right, INT bottom, INT xstart, INT ystart, INT xend, INT yend ) { + BOOL res; + TRACE("physDev:%p, left:%d, top:%d, right:%d, bottom:%d, xstart:%d, ystart:%d, xend:%d, yend:%d\n", physDev, left, top, right, bottom, xstart, ystart, xend, yend); - ONCE(FIXME("stub\n")); - return _DIBDRV_GetDisplayDriver()->pChord(physDev->X11PhysDev, left, top, right, bottom, - xstart, ystart, xend, yend); + if(physDev->hasDIB) + { + /* DIB section selected in, use DIB Engine */ + ONCE(FIXME("TEMPORARY - fallback to X11 driver\n")); + res = _DIBDRV_GetDisplayDriver()->pChord(physDev->X11PhysDev, left, top, right, bottom, + xstart, ystart, xend, yend); + } + else + { + /* DDB selected in, use X11 driver */ + res = _DIBDRV_GetDisplayDriver()->pChord(physDev->X11PhysDev, left, top, right, bottom, + xstart, ystart, xend, yend); + } + return res; } /*********************************************************************** @@ -58,11 +84,23 @@ BOOL DIBDRV_Chord( DIBDRVPHYSDEV *physDev, INT left, INT top, INT right, INT bot */ BOOL DIBDRV_Ellipse( DIBDRVPHYSDEV *physDev, INT left, INT top, INT right, INT bottom ) { + BOOL res; + TRACE("physDev:%p, left:%d, top:%d, right:%d, bottom:%d\n", physDev, left, top, right, bottom); - ONCE(FIXME("stub\n")); - return _DIBDRV_GetDisplayDriver()->pEllipse(physDev->X11PhysDev, left, top, right, bottom); + if(physDev->hasDIB) + { + /* DIB section selected in, use DIB Engine */ + ONCE(FIXME("TEMPORARY - fallback to X11 driver\n")); + res = _DIBDRV_GetDisplayDriver()->pEllipse(physDev->X11PhysDev, left, top, right, bottom); + } + else + { + /* DDB selected in, use X11 driver */ + res = _DIBDRV_GetDisplayDriver()->pEllipse(physDev->X11PhysDev, left, top, right, bottom); + } + return res; } /********************************************************************** @@ -71,11 +109,23 @@ BOOL DIBDRV_Ellipse( DIBDRVPHYSDEV *physDev, INT left, INT top, INT right, INT b BOOL DIBDRV_ExtFloodFill( DIBDRVPHYSDEV *physDev, INT x, INT y, COLORREF color, UINT fillType ) { + BOOL res; + TRACE("physDev:%p, x:%d, y:%d, color:%x, fillType:%d\n", physDev, x, y, color, fillType); - ONCE(FIXME("stub\n")); - return _DIBDRV_GetDisplayDriver()->pExtFloodFill(physDev->X11PhysDev, x, y, color, fillType); + if(physDev->hasDIB) + { + /* DIB section selected in, use DIB Engine */ + ONCE(FIXME("TEMPORARY - fallback to X11 driver\n")); + res = _DIBDRV_GetDisplayDriver()->pExtFloodFill(physDev->X11PhysDev, x, y, color, fillType); + } + else + { + /* DDB selected in, use X11 driver */ + res = _DIBDRV_GetDisplayDriver()->pExtFloodFill(physDev->X11PhysDev, x, y, color, fillType); + } + return res; } /*********************************************************************** @@ -83,10 +133,22 @@ BOOL DIBDRV_ExtFloodFill( DIBDRVPHYSDEV *physDev, INT x, INT y, COLORREF color, */ BOOL DIBDRV_GetDCOrgEx( DIBDRVPHYSDEV *physDev, LPPOINT lpp ) { + BOOL res; + TRACE("physDev:%p, lpp:%p\n", physDev, lpp); - ONCE(FIXME("stub\n")); - return _DIBDRV_GetDisplayDriver()->pGetDCOrgEx(physDev->X11PhysDev, lpp); + if(physDev->hasDIB) + { + /* DIB section selected in, use DIB Engine */ + ONCE(FIXME("TEMPORARY - fallback to X11 driver\n")); + res = _DIBDRV_GetDisplayDriver()->pGetDCOrgEx(physDev->X11PhysDev, lpp); + } + else + { + /* DDB selected in, use X11 driver */ + res = _DIBDRV_GetDisplayDriver()->pGetDCOrgEx(physDev->X11PhysDev, lpp); + } + return res; } /*********************************************************************** @@ -94,10 +156,22 @@ BOOL DIBDRV_GetDCOrgEx( DIBDRVPHYSDEV *physDev, LPPOINT lpp ) */ COLORREF DIBDRV_GetPixel( DIBDRVPHYSDEV *physDev, INT x, INT y ) { + COLORREF res; + TRACE("physDev:%p, x:%d, y:%d\n", physDev, x, y); - ONCE(FIXME("stub\n")); - return _DIBDRV_GetDisplayDriver()->pGetPixel(physDev->X11PhysDev, x, y); + if(physDev->hasDIB) + { + /* DIB section selected in, use DIB Engine */ + ONCE(FIXME("TEMPORARY - fallback to X11 driver\n")); + res = _DIBDRV_GetDisplayDriver()->pGetPixel(physDev->X11PhysDev, x, y); + } + else + { + /* DDB selected in, use X11 driver */ + res = _DIBDRV_GetDisplayDriver()->pGetPixel(physDev->X11PhysDev, x, y); + } + return res; } /*********************************************************************** @@ -105,10 +179,22 @@ COLORREF DIBDRV_GetPixel( DIBDRVPHYSDEV *physDev, INT x, INT y ) */ BOOL DIBDRV_LineTo( DIBDRVPHYSDEV *physDev, INT x, INT y ) { + BOOL res; + TRACE("physDev:%p, x:%d, y:%d\n", physDev, x, y); - ONCE(FIXME("stub\n")); - return _DIBDRV_GetDisplayDriver()->pLineTo(physDev->X11PhysDev, x, y); + if(physDev->hasDIB) + { + /* DIB section selected in, use DIB Engine */ + ONCE(FIXME("TEMPORARY - fallback to X11 driver\n")); + res = _DIBDRV_GetDisplayDriver()->pLineTo(physDev->X11PhysDev, x, y); + } + else + { + /* DDB selected in, use X11 driver */ + res = _DIBDRV_GetDisplayDriver()->pLineTo(physDev->X11PhysDev, x, y); + } + return res; } /*********************************************************************** @@ -116,10 +202,22 @@ BOOL DIBDRV_LineTo( DIBDRVPHYSDEV *physDev, INT x, INT y ) */ BOOL DIBDRV_PaintRgn( DIBDRVPHYSDEV *physDev, HRGN hrgn ) { + BOOL res; + TRACE("physDev:%p, hrgn:%p\n", physDev, hrgn); - ONCE(FIXME("stub\n")); - return _DIBDRV_GetDisplayDriver()->pPaintRgn(physDev->X11PhysDev, hrgn); + if(physDev->hasDIB) + { + /* DIB section selected in, use DIB Engine */ + ONCE(FIXME("TEMPORARY - fallback to X11 driver\n")); + res = _DIBDRV_GetDisplayDriver()->pPaintRgn(physDev->X11PhysDev, hrgn); + } + else + { + /* DDB selected in, use X11 driver */ + res = _DIBDRV_GetDisplayDriver()->pPaintRgn(physDev->X11PhysDev, hrgn); + } + return res; } /*********************************************************************** @@ -128,12 +226,25 @@ BOOL DIBDRV_PaintRgn( DIBDRVPHYSDEV *physDev, HRGN hrgn ) BOOL DIBDRV_Pie( DIBDRVPHYSDEV *physDev, INT left, INT top, INT right, INT bottom, INT xstart, INT ystart, INT xend, INT yend ) { + BOOL res; + TRACE("physDev:%p, left:%d, top:%d, right:%d, bottom:%d, xstart:%d, ystart:%d, xend:%d, yend:%d\n", physDev, left, top, right, bottom, xstart, ystart, xend, yend); - ONCE(FIXME("stub\n")); - return _DIBDRV_GetDisplayDriver()->pPie(physDev->X11PhysDev, left, top, right, bottom, - xstart, ystart, xend, yend); + if(physDev->hasDIB) + { + /* DIB section selected in, use DIB Engine */ + ONCE(FIXME("TEMPORARY - fallback to X11 driver\n")); + res = _DIBDRV_GetDisplayDriver()->pPie(physDev->X11PhysDev, left, top, right, bottom, + xstart, ystart, xend, yend); + } + else + { + /* DDB selected in, use X11 driver */ + res = _DIBDRV_GetDisplayDriver()->pPie(physDev->X11PhysDev, left, top, right, bottom, + xstart, ystart, xend, yend); + } + return res; } /********************************************************************** @@ -141,10 +252,22 @@ BOOL DIBDRV_Pie( DIBDRVPHYSDEV *physDev, INT left, INT top, INT right, INT botto */ BOOL DIBDRV_Polygon( DIBDRVPHYSDEV *physDev, const POINT* pt, INT count ) { + BOOL res; + TRACE("physDev:%p, pt:%p, count:%d\n", physDev, pt, count); - ONCE(FIXME("stub\n")); - return _DIBDRV_GetDisplayDriver()->pPolygon(physDev->X11PhysDev, pt, count); + if(physDev->hasDIB) + { + /* DIB section selected in, use DIB Engine */ + ONCE(FIXME("TEMPORARY - fallback to X11 driver\n")); + res = _DIBDRV_GetDisplayDriver()->pPolygon(physDev->X11PhysDev, pt, count); + } + else + { + /* DDB selected in, use X11 driver */ + res = _DIBDRV_GetDisplayDriver()->pPolygon(physDev->X11PhysDev, pt, count); + } + return res; } /********************************************************************** @@ -152,10 +275,22 @@ BOOL DIBDRV_Polygon( DIBDRVPHYSDEV *physDev, const POINT* pt, INT count ) */ BOOL DIBDRV_Polyline( DIBDRVPHYSDEV *physDev, const POINT* pt, INT count ) { + BOOL res; + TRACE("physDev:%p, pt:%p, count:%d\n", physDev, pt, count); - ONCE(FIXME("stub\n")); - return _DIBDRV_GetDisplayDriver()->pPolyline(physDev->X11PhysDev, pt, count); + if(physDev->hasDIB) + { + /* DIB section selected in, use DIB Engine */ + ONCE(FIXME("TEMPORARY - fallback to X11 driver\n")); + res = _DIBDRV_GetDisplayDriver()->pPolyline(physDev->X11PhysDev, pt, count); + } + else + { + /* DDB selected in, use X11 driver */ + res = _DIBDRV_GetDisplayDriver()->pPolyline(physDev->X11PhysDev, pt, count); + } + return res; } /********************************************************************** @@ -163,10 +298,22 @@ BOOL DIBDRV_Polyline( DIBDRVPHYSDEV *physDev, const POINT* pt, INT count ) */ BOOL DIBDRV_PolyPolygon( DIBDRVPHYSDEV *physDev, const POINT* pt, const INT* counts, UINT polygons) { + BOOL res; + TRACE("physDev:%p, pt:%p, counts:%p, polygons:%d\n", physDev, pt, counts, polygons); - ONCE(FIXME("stub\n")); - return _DIBDRV_GetDisplayDriver()->pPolyPolygon(physDev->X11PhysDev, pt, counts, polygons); + if(physDev->hasDIB) + { + /* DIB section selected in, use DIB Engine */ + ONCE(FIXME("TEMPORARY - fallback to X11 driver\n")); + res = _DIBDRV_GetDisplayDriver()->pPolyPolygon(physDev->X11PhysDev, pt, counts, polygons); + } + else + { + /* DDB selected in, use X11 driver */ + res = _DIBDRV_GetDisplayDriver()->pPolyPolygon(physDev->X11PhysDev, pt, counts, polygons); + } + return res; } /********************************************************************** @@ -175,10 +322,22 @@ BOOL DIBDRV_PolyPolygon( DIBDRVPHYSDEV *physDev, const POINT* pt, const INT* cou BOOL DIBDRV_PolyPolyline( DIBDRVPHYSDEV *physDev, const POINT* pt, const DWORD* counts, DWORD polylines ) { + BOOL res; + TRACE("physDev:%p, pt:%p, counts:%p, polylines:%d\n", physDev, pt, counts, polylines); - ONCE(FIXME("stub\n")); - return _DIBDRV_GetDisplayDriver()->pPolyPolyline(physDev->X11PhysDev, pt, counts, polylines); + if(physDev->hasDIB) + { + /* DIB section selected in, use DIB Engine */ + ONCE(FIXME("TEMPORARY - fallback to X11 driver\n")); + res = _DIBDRV_GetDisplayDriver()->pPolyPolyline(physDev->X11PhysDev, pt, counts, polylines); + } + else + { + /* DDB selected in, use X11 driver */ + res = _DIBDRV_GetDisplayDriver()->pPolyPolyline(physDev->X11PhysDev, pt, counts, polylines); + } + return res; } /*********************************************************************** @@ -186,11 +345,23 @@ BOOL DIBDRV_PolyPolyline( DIBDRVPHYSDEV *physDev, const POINT* pt, const DWORD* */ BOOL DIBDRV_Rectangle( DIBDRVPHYSDEV *physDev, INT left, INT top, INT right, INT bottom) { + BOOL res; + TRACE("physDev:%p, left:%d, top:%d, right:%d, bottom:%d\n", physDev, left, top, right, bottom); - ONCE(FIXME("stub\n")); - return _DIBDRV_GetDisplayDriver()->pRectangle(physDev->X11PhysDev, left, top, right, bottom); + if(physDev->hasDIB) + { + /* DIB section selected in, use DIB Engine */ + ONCE(FIXME("TEMPORARY - fallback to X11 driver\n")); + res = _DIBDRV_GetDisplayDriver()->pRectangle(physDev->X11PhysDev, left, top, right, bottom); + } + else + { + /* DDB selected in, use X11 driver */ + res = _DIBDRV_GetDisplayDriver()->pRectangle(physDev->X11PhysDev, left, top, right, bottom); + } + return res; } /*********************************************************************** @@ -199,12 +370,25 @@ BOOL DIBDRV_Rectangle( DIBDRVPHYSDEV *physDev, INT left, INT top, INT right, INT BOOL DIBDRV_RoundRect( DIBDRVPHYSDEV *physDev, INT left, INT top, INT right, INT bottom, INT ell_width, INT ell_height ) { + BOOL res; + TRACE("physDev:%p, left:%d, top:%d, right:%d, bottom:%d, ell_width:%d, ell_height:%d\n", physDev, left, top, right, bottom, ell_width, ell_height); - ONCE(FIXME("stub\n")); - return _DIBDRV_GetDisplayDriver()->pRoundRect(physDev->X11PhysDev, left, top, right, bottom, - ell_width, ell_height); + if(physDev->hasDIB) + { + /* DIB section selected in, use DIB Engine */ + ONCE(FIXME("TEMPORARY - fallback to X11 driver\n")); + res = _DIBDRV_GetDisplayDriver()->pRoundRect(physDev->X11PhysDev, left, top, right, bottom, + ell_width, ell_height); + } + else + { + /* DDB selected in, use X11 driver */ + res = _DIBDRV_GetDisplayDriver()->pRoundRect(physDev->X11PhysDev, left, top, right, bottom, + ell_width, ell_height); + } + return res; } /*********************************************************************** @@ -212,10 +396,22 @@ BOOL DIBDRV_RoundRect( DIBDRVPHYSDEV *physDev, INT left, INT top, INT right, */ COLORREF DIBDRV_SetPixel( DIBDRVPHYSDEV *physDev, INT x, INT y, COLORREF color ) { + COLORREF res; + TRACE("physDev:%p, x:%d, y:%d, color:%x\n", physDev, x, y, color); - ONCE(FIXME("stub\n")); - return _DIBDRV_GetDisplayDriver()->pSetPixel(physDev->X11PhysDev, x, y, color); + if(physDev->hasDIB) + { + /* DIB section selected in, use DIB Engine */ + ONCE(FIXME("TEMPORARY - fallback to X11 driver\n")); + res = _DIBDRV_GetDisplayDriver()->pSetPixel(physDev->X11PhysDev, x, y, color); + } + else + { + /* DDB selected in, use X11 driver */ + res = _DIBDRV_GetDisplayDriver()->pSetPixel(physDev->X11PhysDev, x, y, color); + } + return res; } /*********************************************************************** @@ -223,8 +419,20 @@ COLORREF DIBDRV_SetPixel( DIBDRVPHYSDEV *physDev, INT x, INT y, COLORREF color ) */ DWORD DIBDRV_SetDCOrg( DIBDRVPHYSDEV *physDev, INT x, INT y ) { + DWORD res; + TRACE("physDev:%p, x:%d, y:%d\n", physDev, x, y); - ONCE(FIXME("stub\n")); - return _DIBDRV_GetDisplayDriver()->pSetDCOrg(physDev->X11PhysDev, x, y); + if(physDev->hasDIB) + { + /* DIB section selected in, use DIB Engine */ + ONCE(FIXME("TEMPORARY - fallback to X11 driver\n")); + res = _DIBDRV_GetDisplayDriver()->pSetDCOrg(physDev->X11PhysDev, x, y); + } + else + { + /* DDB selected in, use X11 driver */ + res = _DIBDRV_GetDisplayDriver()->pSetDCOrg(physDev->X11PhysDev, x, y); + } + return res; } diff --git a/dlls/winedib.drv/opengl.c b/dlls/winedib.drv/opengl.c index 27e42290a87..e8ec96cbedf 100644 --- a/dlls/winedib.drv/opengl.c +++ b/dlls/winedib.drv/opengl.c @@ -30,10 +30,22 @@ WINE_DEFAULT_DEBUG_CHANNEL(dibdrv); int DIBDRV_ChoosePixelFormat( DIBDRVPHYSDEV *physDev, const PIXELFORMATDESCRIPTOR *ppfd ) { + int res; + TRACE("physDev:%p, ppfd:%p\n", physDev, ppfd); - ONCE(FIXME("stub\n")); - return _DIBDRV_GetDisplayDriver()->pChoosePixelFormat(physDev->X11PhysDev, ppfd); + if(physDev->hasDIB) + { + /* DIB section selected in, use DIB Engine */ + ONCE(FIXME("TEMPORARY - fallback to X11 driver\n")); + res = _DIBDRV_GetDisplayDriver()->pChoosePixelFormat(physDev->X11PhysDev, ppfd); + } + else + { + /* DDB selected in, use X11 driver */ + res = _DIBDRV_GetDisplayDriver()->pChoosePixelFormat(physDev->X11PhysDev, ppfd); + } + return res; } int DIBDRV_DescribePixelFormat( DIBDRVPHYSDEV *physDev, @@ -41,36 +53,84 @@ int DIBDRV_DescribePixelFormat( DIBDRVPHYSDEV *physDev, UINT nBytes, PIXELFORMATDESCRIPTOR *ppfd ) { + int res; + TRACE("physDev:%p, iPixelFormat:%d, nBytes:%d, ppfd:%p\n", physDev, iPixelFormat, nBytes, ppfd); - ONCE(FIXME("stub\n")); - return _DIBDRV_GetDisplayDriver()->pDescribePixelFormat(physDev->X11PhysDev, iPixelFormat, nBytes, ppfd); + if(physDev->hasDIB) + { + /* DIB section selected in, use DIB Engine */ + ONCE(FIXME("TEMPORARY - fallback to X11 driver\n")); + res = _DIBDRV_GetDisplayDriver()->pDescribePixelFormat(physDev->X11PhysDev, iPixelFormat, nBytes, ppfd); + } + else + { + /* DDB selected in, use X11 driver */ + res = _DIBDRV_GetDisplayDriver()->pDescribePixelFormat(physDev->X11PhysDev, iPixelFormat, nBytes, ppfd); + } + return res; } int DIBDRV_GetPixelFormat( DIBDRVPHYSDEV *physDev) { + int res; + TRACE("physDev:%p\n", physDev); - ONCE(FIXME("stub\n")); - return _DIBDRV_GetDisplayDriver()->pGetPixelFormat(physDev->X11PhysDev); + if(physDev->hasDIB) + { + /* DIB section selected in, use DIB Engine */ + ONCE(FIXME("TEMPORARY - fallback to X11 driver\n")); + res = _DIBDRV_GetDisplayDriver()->pGetPixelFormat(physDev->X11PhysDev); + } + else + { + /* DDB selected in, use X11 driver */ + res = _DIBDRV_GetDisplayDriver()->pGetPixelFormat(physDev->X11PhysDev); + } + return res; } BOOL DIBDRV_SetPixelFormat( DIBDRVPHYSDEV *physDev, int iPixelFormat, const PIXELFORMATDESCRIPTOR *ppfd ) { + BOOL res; + TRACE("physDev:%p, iPixelFormat:%d, ppfd:%p\n", physDev, iPixelFormat, ppfd); - ONCE(FIXME("stub\n")); - return _DIBDRV_GetDisplayDriver()->pSetPixelFormat(physDev->X11PhysDev, iPixelFormat, ppfd); + if(physDev->hasDIB) + { + /* DIB section selected in, use DIB Engine */ + ONCE(FIXME("TEMPORARY - fallback to X11 driver\n")); + res = _DIBDRV_GetDisplayDriver()->pSetPixelFormat(physDev->X11PhysDev, iPixelFormat, ppfd); + } + else + { + /* DDB selected in, use X11 driver */ + res = _DIBDRV_GetDisplayDriver()->pSetPixelFormat(physDev->X11PhysDev, iPixelFormat, ppfd); + } + return res; } BOOL DIBDRV_SwapBuffers( DIBDRVPHYSDEV *physDev ) { + BOOL res; + TRACE("physDev:%p\n", physDev); - ONCE(FIXME("stub\n")); - return _DIBDRV_GetDisplayDriver()->pSwapBuffers(physDev->X11PhysDev); + if(physDev->hasDIB) + { + /* DIB section selected in, use DIB Engine */ + ONCE(FIXME("TEMPORARY - fallback to X11 driver\n")); + res = _DIBDRV_GetDisplayDriver()->pSwapBuffers(physDev->X11PhysDev); + } + else + { + /* DDB selected in, use X11 driver */ + res = _DIBDRV_GetDisplayDriver()->pSwapBuffers(physDev->X11PhysDev); + } + return res; } /** @@ -80,10 +140,14 @@ BOOL DIBDRV_SwapBuffers( DIBDRVPHYSDEV *physDev ) */ BOOL CDECL DIBDRV_wglCopyContext(HGLRC hglrcSrc, HGLRC hglrcDst, UINT mask) { + BOOL res; + TRACE("hglrcSrc:%p, hglrcDst:%p, mask:%x\n", hglrcSrc, hglrcDst, mask); ONCE(FIXME("stub\n")); - return _DIBDRV_GetDisplayDriver()->pwglCopyContext(hglrcSrc, hglrcDst, mask); + res = _DIBDRV_GetDisplayDriver()->pwglCopyContext(hglrcSrc, hglrcDst, mask); + + return res; } /** @@ -93,10 +157,22 @@ BOOL CDECL DIBDRV_wglCopyContext(HGLRC hglrcSrc, HGLRC hglrcDst, UINT mask) */ HGLRC CDECL DIBDRV_wglCreateContext(DIBDRVPHYSDEV *physDev) { + HGLRC res; + TRACE("physDev:%p\n", physDev); - ONCE(FIXME("stub\n")); - return _DIBDRV_GetDisplayDriver()->pwglCreateContext(physDev->X11PhysDev); + if(physDev->hasDIB) + { + /* DIB section selected in, use DIB Engine */ + ONCE(FIXME("TEMPORARY - fallback to X11 driver\n")); + res = _DIBDRV_GetDisplayDriver()->pwglCreateContext(physDev->X11PhysDev); + } + else + { + /* DDB selected in, use X11 driver */ + res = _DIBDRV_GetDisplayDriver()->pwglCreateContext(physDev->X11PhysDev); + } + return res; } /** @@ -106,10 +182,13 @@ HGLRC CDECL DIBDRV_wglCreateContext(DIBDRVPHYSDEV *physDev) */ BOOL CDECL DIBDRV_wglDeleteContext(HGLRC hglrc) { + BOOL res; + TRACE("hglrc:%p\n", hglrc); ONCE(FIXME("stub\n")); - return _DIBDRV_GetDisplayDriver()->pwglDeleteContext(hglrc); + res = _DIBDRV_GetDisplayDriver()->pwglDeleteContext(hglrc); + return res; } /** @@ -119,10 +198,14 @@ BOOL CDECL DIBDRV_wglDeleteContext(HGLRC hglrc) */ PROC CDECL DIBDRV_wglGetProcAddress(LPCSTR lpszProc) { + PROC res; + TRACE("lpszProc:%p\n", lpszProc); ONCE(FIXME("stub\n")); - return _DIBDRV_GetDisplayDriver()->pwglGetProcAddress(lpszProc); + res = _DIBDRV_GetDisplayDriver()->pwglGetProcAddress(lpszProc); + + return res; } /** @@ -135,10 +218,22 @@ PROC CDECL DIBDRV_wglGetProcAddress(LPCSTR lpszProc) */ HDC CDECL DIBDRV_wglGetPbufferDCARB(DIBDRVPHYSDEV *physDev, HPBUFFERARB hPbuffer) { + HDC res; + TRACE("physDev:%p, hPbuffer:%p\n", physDev, hPbuffer); - ONCE(FIXME("stub\n")); - return _DIBDRV_GetDisplayDriver()->pwglGetPbufferDCARB(physDev->X11PhysDev, hPbuffer); + if(physDev->hasDIB) + { + /* DIB section selected in, use DIB Engine */ + ONCE(FIXME("TEMPORARY - fallback to X11 driver\n")); + res = _DIBDRV_GetDisplayDriver()->pwglGetPbufferDCARB(physDev->X11PhysDev, hPbuffer); + } + else + { + /* DDB selected in, use X11 driver */ + res = _DIBDRV_GetDisplayDriver()->pwglGetPbufferDCARB(physDev->X11PhysDev, hPbuffer); + } + return res; } /** @@ -148,10 +243,34 @@ HDC CDECL DIBDRV_wglGetPbufferDCARB(DIBDRVPHYSDEV *physDev, HPBUFFERARB hPbuffer */ BOOL CDECL DIBDRV_wglMakeContextCurrentARB(DIBDRVPHYSDEV* pDrawDev, DIBDRVPHYSDEV* pReadDev, HGLRC hglrc) { + BOOL res; + TRACE("pDrawDev:%p, pReadDev:%p, hglrc:%p\n", pDrawDev, pReadDev, hglrc); - ONCE(FIXME("stub\n")); - return _DIBDRV_GetDisplayDriver()->pwglMakeContextCurrentARB(pDrawDev->X11PhysDev, pReadDev->X11PhysDev, hglrc); + if(pDrawDev->hasDIB && pReadDev->hasDIB) + { + /* DIB section selected both in source and dest DCs, use DIB Engine */ + ONCE(FIXME("TEMPORARY - fallback to X11 driver\n")); + res = _DIBDRV_GetDisplayDriver()->pwglMakeContextCurrentARB(pDrawDev->X11PhysDev, pReadDev->X11PhysDev, hglrc); + } + if(!pDrawDev->hasDIB && !pReadDev->hasDIB) + { + /* DDB selected both in source and dest DCs, use X11 Driver */ + res = _DIBDRV_GetDisplayDriver()->pwglMakeContextCurrentARB(pDrawDev->X11PhysDev, pReadDev->X11PhysDev, hglrc); + } + else if(pDrawDev->hasDIB) + { + /* DIB selected in pDrawDev, must convert pReadDev to DIB and use DIB Engine */ + ONCE(FIXME("TEMPORARY - fallback to X11 driver\n")); + res = _DIBDRV_GetDisplayDriver()->pwglMakeContextCurrentARB(pDrawDev->X11PhysDev, pReadDev->X11PhysDev, hglrc); + } + else /* if(pReadDev->hasDIB) */ + { + /* DIB selected in pReadDev, must convert pReadDev to DDB and use X11 Driver */ + ONCE(FIXME("TEMPORARY - fallback to X11 driver\n")); + res = _DIBDRV_GetDisplayDriver()->pwglMakeContextCurrentARB(pDrawDev->X11PhysDev, pReadDev->X11PhysDev, hglrc); + } + return res; } /** @@ -161,10 +280,22 @@ BOOL CDECL DIBDRV_wglMakeContextCurrentARB(DIBDRVPHYSDEV* pDrawDev, DIBDRVPHYSDE */ BOOL CDECL DIBDRV_wglMakeCurrent(DIBDRVPHYSDEV *physDev, HGLRC hglrc) { + BOOL res; + TRACE("physDev:%p, hglrc:%p\n", physDev, hglrc); - ONCE(FIXME("stub\n")); - return _DIBDRV_GetDisplayDriver()->pwglMakeCurrent(physDev->X11PhysDev, hglrc); + if(physDev->hasDIB) + { + /* DIB section selected in, use DIB Engine */ + ONCE(FIXME("TEMPORARY - fallback to X11 driver\n")); + res = _DIBDRV_GetDisplayDriver()->pwglMakeCurrent(physDev->X11PhysDev, hglrc); + } + else + { + /* DDB selected in, use X11 driver */ + res = _DIBDRV_GetDisplayDriver()->pwglMakeCurrent(physDev->X11PhysDev, hglrc); + } + return res; } /** @@ -175,10 +306,22 @@ BOOL CDECL DIBDRV_wglMakeCurrent(DIBDRVPHYSDEV *physDev, HGLRC hglrc) */ BOOL CDECL DIBDRV_wglSetPixelFormatWINE(DIBDRVPHYSDEV *physDev, int iPixelFormat, const PIXELFORMATDESCRIPTOR *ppfd) { + BOOL res; + TRACE("physDev:%p, iPixelFormat:%d, ppfd:%p\n", physDev, iPixelFormat, ppfd); - ONCE(FIXME("stub\n")); - return _DIBDRV_GetDisplayDriver()->pwglSetPixelFormatWINE(physDev->X11PhysDev, iPixelFormat, ppfd); + if(physDev->hasDIB) + { + /* DIB section selected in, use DIB Engine */ + ONCE(FIXME("TEMPORARY - fallback to X11 driver\n")); + res = _DIBDRV_GetDisplayDriver()->pwglSetPixelFormatWINE(physDev->X11PhysDev, iPixelFormat, ppfd); + } + else + { + /* DDB selected in, use X11 driver */ + res = _DIBDRV_GetDisplayDriver()->pwglSetPixelFormatWINE(physDev->X11PhysDev, iPixelFormat, ppfd); + } + return res; } /** @@ -188,10 +331,14 @@ BOOL CDECL DIBDRV_wglSetPixelFormatWINE(DIBDRVPHYSDEV *physDev, int iPixelFormat */ BOOL CDECL DIBDRV_wglShareLists(HGLRC hglrc1, HGLRC hglrc2) { + BOOL res; + TRACE("hglrc1:%p, hglrc2:%p\n", hglrc1, hglrc2); ONCE(FIXME("stub\n")); - return _DIBDRV_GetDisplayDriver()->pwglShareLists(hglrc1, hglrc2); + res = _DIBDRV_GetDisplayDriver()->pwglShareLists(hglrc1, hglrc2); + + return res; } /** @@ -201,10 +348,22 @@ BOOL CDECL DIBDRV_wglShareLists(HGLRC hglrc1, HGLRC hglrc2) */ BOOL CDECL DIBDRV_wglUseFontBitmapsA(DIBDRVPHYSDEV *physDev, DWORD first, DWORD count, DWORD listBase) { + BOOL res; + TRACE("physDev:%p, first:%d, count:%d, listBase:%d\n", physDev, first, count, listBase); - ONCE(FIXME("stub\n")); - return _DIBDRV_GetDisplayDriver()->pwglUseFontBitmapsA(physDev->X11PhysDev, first, count, listBase); + if(physDev->hasDIB) + { + /* DIB section selected in, use DIB Engine */ + ONCE(FIXME("TEMPORARY - fallback to X11 driver\n")); + res = _DIBDRV_GetDisplayDriver()->pwglUseFontBitmapsA(physDev->X11PhysDev, first, count, listBase); + } + else + { + /* DDB selected in, use X11 driver */ + res = _DIBDRV_GetDisplayDriver()->pwglUseFontBitmapsA(physDev->X11PhysDev, first, count, listBase); + } + return res; } /** @@ -214,8 +373,20 @@ BOOL CDECL DIBDRV_wglUseFontBitmapsA(DIBDRVPHYSDEV *physDev, DWORD first, DWORD */ BOOL CDECL DIBDRV_wglUseFontBitmapsW(DIBDRVPHYSDEV *physDev, DWORD first, DWORD count, DWORD listBase) { + BOOL res; + TRACE("physDev:%p, first:%d, count:%d, listBase:%d\n", physDev, first, count, listBase); - ONCE(FIXME("stub\n")); - return _DIBDRV_GetDisplayDriver()->pwglUseFontBitmapsW(physDev->X11PhysDev, first, count, listBase); + if(physDev->hasDIB) + { + /* DIB section selected in, use DIB Engine */ + ONCE(FIXME("TEMPORARY - fallback to X11 driver\n")); + res = _DIBDRV_GetDisplayDriver()->pwglUseFontBitmapsW(physDev->X11PhysDev, first, count, listBase); + } + else + { + /* DDB selected in, use X11 driver */ + res = _DIBDRV_GetDisplayDriver()->pwglUseFontBitmapsW(physDev->X11PhysDev, first, count, listBase); + } + return res; } diff --git a/dlls/winedib.drv/palette.c b/dlls/winedib.drv/palette.c index 28fae0935d2..9daf47dff97 100644 --- a/dlls/winedib.drv/palette.c +++ b/dlls/winedib.drv/palette.c @@ -30,10 +30,21 @@ WINE_DEFAULT_DEBUG_CHANNEL(dibdrv); */ UINT DIBDRV_RealizePalette( DIBDRVPHYSDEV *physDev, HPALETTE hpal, BOOL primary ) { + UINT res; + TRACE("physDev:%p, hpal:%p, primary:%s\n", physDev, hpal, (primary ? "TRUE" : "FALSE")); - ONCE(FIXME("stub\n")); - return _DIBDRV_GetDisplayDriver()->pRealizePalette(physDev->X11PhysDev, hpal, primary); + /* we should in any case call X11 function, as UnrealizePalette() doesn't + * take a physDev parameter */ + res = _DIBDRV_GetDisplayDriver()->pRealizePalette(physDev->X11PhysDev, hpal, primary); + + if(physDev->hasDIB) + { + /* DIB section selected in, additional (if needed) engine code */ + ONCE(FIXME("STUB\n")); + } + + return res; } /*********************************************************************** @@ -41,10 +52,18 @@ UINT DIBDRV_RealizePalette( DIBDRVPHYSDEV *physDev, HPALETTE hpal, BOOL primary */ BOOL DIBDRV_UnrealizePalette( HPALETTE hpal ) { + BOOL res; + TRACE("hpal:%p\n", hpal); - ONCE(FIXME("stub\n")); - return _DIBDRV_GetDisplayDriver()->pUnrealizePalette(hpal); + /* we should in any case call X11 function, as UnrealizePalette() doesn't + * take a physDev parameter */ + res = _DIBDRV_GetDisplayDriver()->pUnrealizePalette(hpal); + + /* additional Engine code here, if needed */ + ONCE(FIXME("STUB\n")); + + return res; } /*********************************************************************** @@ -53,10 +72,22 @@ BOOL DIBDRV_UnrealizePalette( HPALETTE hpal ) UINT DIBDRV_GetSystemPaletteEntries( DIBDRVPHYSDEV *physDev, UINT start, UINT count, LPPALETTEENTRY entries ) { + UINT res; + TRACE("physDev:%p, start:%d, count:%d, entries:%p\n", physDev, start, count, entries); - ONCE(FIXME("stub\n")); - return _DIBDRV_GetDisplayDriver()->pGetSystemPaletteEntries(physDev->X11PhysDev, start, count, entries); + if(physDev->hasDIB) + { + /* DIB section selected in, use DIB Engine */ + ONCE(FIXME("TEMPORARY - fallback to X11 driver\n")); + res = _DIBDRV_GetDisplayDriver()->pGetSystemPaletteEntries(physDev->X11PhysDev, start, count, entries); + } + else + { + /* DDB selected in, use X11 driver */ + res = _DIBDRV_GetDisplayDriver()->pGetSystemPaletteEntries(physDev->X11PhysDev, start, count, entries); + } + return res; } /*********************************************************************** @@ -64,10 +95,22 @@ UINT DIBDRV_GetSystemPaletteEntries( DIBDRVPHYSDEV *physDev, UINT start, UINT co */ COLORREF DIBDRV_GetNearestColor( DIBDRVPHYSDEV *physDev, COLORREF color ) { + COLORREF res; + TRACE("physDev:%p, color:%x\n", physDev, color); - ONCE(FIXME("stub\n")); - return _DIBDRV_GetDisplayDriver()->pGetNearestColor(physDev->X11PhysDev, color); + if(physDev->hasDIB) + { + /* DIB section selected in, use DIB Engine */ + ONCE(FIXME("TEMPORARY - fallback to X11 driver\n")); + res = _DIBDRV_GetDisplayDriver()->pGetNearestColor(physDev->X11PhysDev, color); + } + else + { + /* DDB selected in, use X11 driver */ + res = _DIBDRV_GetDisplayDriver()->pGetNearestColor(physDev->X11PhysDev, color); + } + return res; } /*********************************************************************** @@ -75,16 +118,40 @@ COLORREF DIBDRV_GetNearestColor( DIBDRVPHYSDEV *physDev, COLORREF color ) */ UINT DIBDRV_RealizeDefaultPalette( DIBDRVPHYSDEV *physDev ) { + UINT res; + TRACE("physDev:%p\n", physDev); - ONCE(FIXME("stub\n")); - return _DIBDRV_GetDisplayDriver()->pRealizeDefaultPalette(physDev->X11PhysDev); + if(physDev->hasDIB) + { + /* DIB section selected in, use DIB Engine */ + ONCE(FIXME("TEMPORARY - fallback to X11 driver\n")); + res = _DIBDRV_GetDisplayDriver()->pRealizeDefaultPalette(physDev->X11PhysDev); + } + else + { + /* DDB selected in, use X11 driver */ + res = _DIBDRV_GetDisplayDriver()->pRealizeDefaultPalette(physDev->X11PhysDev); + } + return res; } BOOL DIBDRV_GetICMProfile(DIBDRVPHYSDEV *physDev, LPDWORD lpcbName, LPWSTR lpszFilename) { + BOOL res; + TRACE("physDev:%p, lpcpName:%p, lpszFilename:%p\n", physDev, lpcbName, lpszFilename); - ONCE(FIXME("stub\n")); - return _DIBDRV_GetDisplayDriver()->pGetICMProfile(physDev->X11PhysDev, lpcbName, lpszFilename); + if(physDev->hasDIB) + { + /* DIB section selected in, use DIB Engine */ + ONCE(FIXME("TEMPORARY - fallback to X11 driver\n")); + res = _DIBDRV_GetDisplayDriver()->pGetICMProfile(physDev->X11PhysDev, lpcbName, lpszFilename); + } + else + { + /* DDB selected in, use X11 driver */ + res = _DIBDRV_GetDisplayDriver()->pGetICMProfile(physDev->X11PhysDev, lpcbName, lpszFilename); + } + return res; } diff --git a/dlls/winedib.drv/pen_brush.c b/dlls/winedib.drv/pen_brush.c index 1e992e0d96e..bde2f232634 100644 --- a/dlls/winedib.drv/pen_brush.c +++ b/dlls/winedib.drv/pen_brush.c @@ -31,10 +31,22 @@ WINE_DEFAULT_DEBUG_CHANNEL(dibdrv); */ HPEN DIBDRV_SelectPen( DIBDRVPHYSDEV *physDev, HPEN hpen ) { + HPEN res; + TRACE("physDev:%p, hpen:%p\n", physDev, hpen); - ONCE(FIXME("stub\n")); - return _DIBDRV_GetDisplayDriver()->pSelectPen(physDev->X11PhysDev, hpen); + if(physDev->hasDIB) + { + /* DIB section selected in, use DIB Engine */ + ONCE(FIXME("TEMPORARY - fallback to X11 driver\n")); + res = _DIBDRV_GetDisplayDriver()->pSelectPen(physDev->X11PhysDev, hpen); + } + else + { + /* DDB selected in, use X11 driver */ + res = _DIBDRV_GetDisplayDriver()->pSelectPen(physDev->X11PhysDev, hpen); + } + return res; } /*********************************************************************** @@ -42,10 +54,22 @@ HPEN DIBDRV_SelectPen( DIBDRVPHYSDEV *physDev, HPEN hpen ) */ COLORREF DIBDRV_SetDCPenColor( DIBDRVPHYSDEV *physDev, COLORREF crColor ) { + COLORREF res; + TRACE("physDev:%p, crColor:%x\n", physDev, crColor); - ONCE(FIXME("stub\n")); - return _DIBDRV_GetDisplayDriver()->pSetDCPenColor(physDev->X11PhysDev, crColor); + if(physDev->hasDIB) + { + /* DIB section selected in, use DIB Engine */ + ONCE(FIXME("TEMPORARY - fallback to X11 driver\n")); + res = _DIBDRV_GetDisplayDriver()->pSetDCPenColor(physDev->X11PhysDev, crColor); + } + else + { + /* DDB selected in, use X11 driver */ + res = _DIBDRV_GetDisplayDriver()->pSetDCPenColor(physDev->X11PhysDev, crColor); + } + return res; } /*********************************************************************** @@ -53,10 +77,22 @@ COLORREF DIBDRV_SetDCPenColor( DIBDRVPHYSDEV *physDev, COLORREF crColor ) */ HBRUSH DIBDRV_SelectBrush( DIBDRVPHYSDEV *physDev, HBRUSH hbrush ) { + HBRUSH res; + TRACE("physDev:%p, hbrush:%p\n", physDev, hbrush); - ONCE(FIXME("stub\n")); - return _DIBDRV_GetDisplayDriver()->pSelectBrush(physDev->X11PhysDev, hbrush); + if(physDev->hasDIB) + { + /* DIB section selected in, use DIB Engine */ + ONCE(FIXME("TEMPORARY - fallback to X11 driver\n")); + res = _DIBDRV_GetDisplayDriver()->pSelectBrush(physDev->X11PhysDev, hbrush); + } + else + { + /* DDB selected in, use X11 driver */ + res = _DIBDRV_GetDisplayDriver()->pSelectBrush(physDev->X11PhysDev, hbrush); + } + return res; } /*********************************************************************** @@ -64,10 +100,22 @@ HBRUSH DIBDRV_SelectBrush( DIBDRVPHYSDEV *physDev, HBRUSH hbrush ) */ COLORREF DIBDRV_SetDCBrushColor( DIBDRVPHYSDEV *physDev, COLORREF crColor ) { + COLORREF res; + TRACE("physDev:%p, crColor:%x\n", physDev, crColor); - ONCE(FIXME("stub\n")); - return _DIBDRV_GetDisplayDriver()->pSetDCBrushColor(physDev->X11PhysDev, crColor); + if(physDev->hasDIB) + { + /* DIB section selected in, use DIB Engine */ + ONCE(FIXME("TEMPORARY - fallback to X11 driver\n")); + res = _DIBDRV_GetDisplayDriver()->pSetDCBrushColor(physDev->X11PhysDev, crColor); + } + else + { + /* DDB selected in, use X11 driver */ + res = _DIBDRV_GetDisplayDriver()->pSetDCBrushColor(physDev->X11PhysDev, crColor); + } + return res; } /*********************************************************************** @@ -79,7 +127,6 @@ INT DIBDRV_SetROP2( DIBDRVPHYSDEV *physDev, INT rop ) TRACE("physDev:%p, rop:%x\n", physDev, rop); - ONCE(FIXME("stub\n")); prevRop = physDev->rop2; physDev->rop2 = rop; return prevRop; @@ -91,8 +138,20 @@ INT DIBDRV_SetROP2( DIBDRVPHYSDEV *physDev, INT rop ) */ COLORREF DIBDRV_SetBkColor( DIBDRVPHYSDEV *physDev, COLORREF color ) { + COLORREF res; + TRACE("physDev:%p, color:%x\n", physDev, color); - ONCE(FIXME("stub\n")); - return _DIBDRV_GetDisplayDriver()->pSetBkColor(physDev->X11PhysDev, color); + if(physDev->hasDIB) + { + /* DIB section selected in, use DIB Engine */ + ONCE(FIXME("TEMPORARY - fallback to X11 driver\n")); + res = _DIBDRV_GetDisplayDriver()->pSetBkColor(physDev->X11PhysDev, color); + } + else + { + /* DDB selected in, use X11 driver */ + res = _DIBDRV_GetDisplayDriver()->pSetBkColor(physDev->X11PhysDev, color); + } + return res; } diff --git a/dlls/winedib.drv/text.c b/dlls/winedib.drv/text.c index fdb075f61bc..0176011c04a 100644 --- a/dlls/winedib.drv/text.c +++ b/dlls/winedib.drv/text.c @@ -28,17 +28,29 @@ WINE_DEFAULT_DEBUG_CHANNEL(dibdrv); /*********************************************************************** * DIBDRV_ExtTextOut */ -BOOL -DIBDRV_ExtTextOut( DIBDRVPHYSDEV *physDev, INT x, INT y, UINT flags, - const RECT *lprect, LPCWSTR wstr, UINT count, - const INT *lpDx ) +BOOL DIBDRV_ExtTextOut( DIBDRVPHYSDEV *physDev, INT x, INT y, UINT flags, + const RECT *lprect, LPCWSTR wstr, UINT count, + const INT *lpDx ) { + BOOL res; + TRACE("physDev:%p, x:%d, y:%d, flags:%x, lprect:%p, wstr:%s, count:%d, lpDx:%p\n", physDev, x, y, flags, lprect, debugstr_w(wstr), count, lpDx); - ONCE(FIXME("stub\n")); - return _DIBDRV_GetDisplayDriver()->pExtTextOut(physDev->X11PhysDev, x, y, flags, lprect, + if(physDev->hasDIB) + { + /* DIB section selected in, use DIB Engine */ + ONCE(FIXME("TEMPORARY - fallback to X11 driver\n")); + res = _DIBDRV_GetDisplayDriver()->pExtTextOut(physDev->X11PhysDev, x, y, flags, lprect, wstr, count, lpDx); + } + else + { + /* DDB selected in, use X11 driver */ + res = _DIBDRV_GetDisplayDriver()->pExtTextOut(physDev->X11PhysDev, x, y, flags, lprect, + wstr, count, lpDx); + } + return res; } /*********************************************************************** @@ -47,9 +59,23 @@ DIBDRV_ExtTextOut( DIBDRVPHYSDEV *physDev, INT x, INT y, UINT flags, BOOL DIBDRV_GetTextExtentExPoint( DIBDRVPHYSDEV *physDev, LPCWSTR str, INT count, INT maxExt, LPINT lpnFit, LPINT alpDx, LPSIZE size ) { + BOOL res; + TRACE("physDev:%p, str:%s, count:%d, maxExt:%d, lpnFit:%p, alpDx:%p, size:%p\n", physDev, debugstr_w(str), count, maxExt, lpnFit, alpDx, size); - ONCE(FIXME("stub\n")); - return _DIBDRV_GetDisplayDriver()->pGetTextExtentExPoint(physDev->X11PhysDev, str, count, maxExt, - lpnFit, alpDx, size); + + if(physDev->hasDIB) + { + /* DIB section selected in, use DIB Engine */ + ONCE(FIXME("TEMPORARY - fallback to X11 driver\n")); + res = _DIBDRV_GetDisplayDriver()->pGetTextExtentExPoint(physDev->X11PhysDev, str, count, maxExt, + lpnFit, alpDx, size); + } + else + { + /* DDB selected in, use X11 driver */ + res = _DIBDRV_GetDisplayDriver()->pGetTextExtentExPoint(physDev->X11PhysDev, str, count, maxExt, + lpnFit, alpDx, size); + } + return res; } diff --git a/dlls/winedib.drv/video.c b/dlls/winedib.drv/video.c index 6490ac60f1d..730e62a8fda 100644 --- a/dlls/winedib.drv/video.c +++ b/dlls/winedib.drv/video.c @@ -30,10 +30,22 @@ WINE_DEFAULT_DEBUG_CHANNEL(dibdrv); */ BOOL DIBDRV_GetDeviceGammaRamp( DIBDRVPHYSDEV *physDev, LPVOID ramp ) { + BOOL res; + TRACE("physDev:%p, ramp:%p\n", physDev, ramp); - ONCE(FIXME("stub\n")); - return _DIBDRV_GetDisplayDriver()->pGetDeviceGammaRamp(physDev->X11PhysDev, ramp); + if(physDev->hasDIB) + { + /* DIB section selected in, use DIB Engine */ + ONCE(FIXME("TEMPORARY - fallback to X11 driver\n")); + res = _DIBDRV_GetDisplayDriver()->pGetDeviceGammaRamp(physDev->X11PhysDev, ramp); + } + else + { + /* DDB selected in, use X11 driver */ + res = _DIBDRV_GetDisplayDriver()->pGetDeviceGammaRamp(physDev->X11PhysDev, ramp); + } + return res; } /*********************************************************************** @@ -41,8 +53,20 @@ BOOL DIBDRV_GetDeviceGammaRamp( DIBDRVPHYSDEV *physDev, LPVOID ramp ) */ BOOL DIBDRV_SetDeviceGammaRamp( DIBDRVPHYSDEV *physDev, LPVOID ramp ) { + BOOL res; + TRACE("physDev:%p, ramp:%p\n", physDev, ramp); - ONCE(FIXME("stub\n")); - return _DIBDRV_GetDisplayDriver()->pSetDeviceGammaRamp(physDev->X11PhysDev, ramp); + if(physDev->hasDIB) + { + /* DIB section selected in, use DIB Engine */ + ONCE(FIXME("TEMPORARY - fallback to X11 driver\n")); + res = _DIBDRV_GetDisplayDriver()->pSetDeviceGammaRamp(physDev->X11PhysDev, ramp); + } + else + { + /* DDB selected in, use X11 driver */ + res = _DIBDRV_GetDisplayDriver()->pSetDeviceGammaRamp(physDev->X11PhysDev, ramp); + } + return res; }