A few fixes.
This commit is contained in:
parent
c4d9f6515b
commit
15776efc64
|
@ -13,14 +13,6 @@
|
||||||
*
|
*
|
||||||
* FIXME: The Xshm implementation has been temporarily removed. It will be
|
* FIXME: The Xshm implementation has been temporarily removed. It will be
|
||||||
* later reintegrated into the Xlib implementation.
|
* later reintegrated into the Xlib implementation.
|
||||||
*
|
|
||||||
* FIXME: The Xlib implementation hangs the windowmanager and all other
|
|
||||||
* running X clients, even though I am polling X events and answering
|
|
||||||
* them. But you can switch to another console (ctrl-alt-fx) and
|
|
||||||
* "killall wine" processes. Any help on this one appreciated. -Marcus
|
|
||||||
* NOTE: The hanging only seems to happen with -managed. I have
|
|
||||||
* implemented support for the -desktop option. This seems
|
|
||||||
* to not have the hanging problems. - Peter Hunnisett
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
@ -376,9 +368,9 @@ static HRESULT WINAPI Xlib_IDirectDrawSurface3_Unlock(
|
||||||
this->t.xlib.image->width,
|
this->t.xlib.image->width,
|
||||||
this->t.xlib.image->height
|
this->t.xlib.image->height
|
||||||
);
|
);
|
||||||
if (this->s.palette && this->s.palette->cm) {
|
if (this->s.palette && this->s.palette->cm)
|
||||||
TSXSetWindowColormap(display,this->s.ddraw->e.xlib.drawable,this->s.palette->cm);
|
TSXSetWindowColormap(display,this->s.ddraw->e.xlib.drawable,this->s.palette->cm);
|
||||||
}
|
|
||||||
return DD_OK;
|
return DD_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -421,7 +413,6 @@ static HRESULT WINAPI DGA_IDirectDrawSurface3_Flip(
|
||||||
static HRESULT WINAPI Xlib_IDirectDrawSurface3_Flip(
|
static HRESULT WINAPI Xlib_IDirectDrawSurface3_Flip(
|
||||||
LPDIRECTDRAWSURFACE3 this,LPDIRECTDRAWSURFACE3 flipto,DWORD dwFlags
|
LPDIRECTDRAWSURFACE3 this,LPDIRECTDRAWSURFACE3 flipto,DWORD dwFlags
|
||||||
) {
|
) {
|
||||||
|
|
||||||
TRACE(ddraw,"(%p)->Flip(%p,%08lx)\n",this,flipto,dwFlags);
|
TRACE(ddraw,"(%p)->Flip(%p,%08lx)\n",this,flipto,dwFlags);
|
||||||
Xlib_MessagePump(this->s.ddraw->e.xlib.window);
|
Xlib_MessagePump(this->s.ddraw->e.xlib.window);
|
||||||
if (!this->s.ddraw->e.xlib.paintable)
|
if (!this->s.ddraw->e.xlib.paintable)
|
||||||
|
@ -441,11 +432,7 @@ static HRESULT WINAPI Xlib_IDirectDrawSurface3_Flip(
|
||||||
0, 0, 0, 0,
|
0, 0, 0, 0,
|
||||||
flipto->t.xlib.image->width,
|
flipto->t.xlib.image->width,
|
||||||
flipto->t.xlib.image->height);
|
flipto->t.xlib.image->height);
|
||||||
if (this->s.palette && this->s.palette->cm) {
|
TSXSetWindowColormap(display,this->s.ddraw->e.xlib.drawable,this->s.palette->cm);
|
||||||
TSXSetWindowColormap(display,
|
|
||||||
this->s.ddraw->e.xlib.drawable,
|
|
||||||
this->s.palette->cm);
|
|
||||||
}
|
|
||||||
if (flipto!=this) {
|
if (flipto!=this) {
|
||||||
XImage *tmp;
|
XImage *tmp;
|
||||||
LPVOID *surf;
|
LPVOID *surf;
|
||||||
|
@ -463,7 +450,7 @@ static HRESULT WINAPI Xlib_IDirectDrawSurface3_Flip(
|
||||||
* DirectDrawPalette object to a surface. The surface uses this palette for all
|
* DirectDrawPalette object to a surface. The surface uses this palette for all
|
||||||
* subsequent operations. The palette change takes place immediately.
|
* subsequent operations. The palette change takes place immediately.
|
||||||
*/
|
*/
|
||||||
static HRESULT WINAPI IDirectDrawSurface3_SetPalette(
|
static HRESULT WINAPI Xlib_IDirectDrawSurface3_SetPalette(
|
||||||
LPDIRECTDRAWSURFACE3 this,LPDIRECTDRAWPALETTE pal
|
LPDIRECTDRAWSURFACE3 this,LPDIRECTDRAWPALETTE pal
|
||||||
) {
|
) {
|
||||||
TRACE(ddraw,"(%p)->SetPalette(%p)\n",this,pal);
|
TRACE(ddraw,"(%p)->SetPalette(%p)\n",this,pal);
|
||||||
|
@ -474,39 +461,56 @@ static HRESULT WINAPI IDirectDrawSurface3_SetPalette(
|
||||||
if( this->s.palette != pal )
|
if( this->s.palette != pal )
|
||||||
{
|
{
|
||||||
if( pal != NULL )
|
if( pal != NULL )
|
||||||
{
|
|
||||||
pal->lpvtbl->fnAddRef( pal );
|
pal->lpvtbl->fnAddRef( pal );
|
||||||
}
|
|
||||||
if( this->s.palette != NULL )
|
if( this->s.palette != NULL )
|
||||||
{
|
|
||||||
this->s.palette->lpvtbl->fnRelease( this->s.palette );
|
this->s.palette->lpvtbl->fnRelease( this->s.palette );
|
||||||
}
|
|
||||||
this->s.palette = pal;
|
this->s.palette = pal;
|
||||||
|
|
||||||
/* I think that we need to attach it to all backbuffers...*/
|
/* I think that we need to attach it to all backbuffers...*/
|
||||||
if( this->s.backbuffer )
|
if( this->s.backbuffer ) {
|
||||||
{
|
|
||||||
if( this->s.backbuffer->s.palette )
|
if( this->s.backbuffer->s.palette )
|
||||||
{
|
|
||||||
this->s.backbuffer->s.palette->lpvtbl->fnRelease(
|
this->s.backbuffer->s.palette->lpvtbl->fnRelease(
|
||||||
this->s.backbuffer->s.palette );
|
this->s.backbuffer->s.palette );
|
||||||
}
|
|
||||||
this->s.backbuffer->s.palette = pal;
|
this->s.backbuffer->s.palette = pal;
|
||||||
if( pal )
|
if( pal )
|
||||||
{
|
|
||||||
pal->lpvtbl->fnAddRef( pal );
|
pal->lpvtbl->fnAddRef( pal );
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
/* Perform the refresh */
|
/* Perform the refresh */
|
||||||
TSXSetWindowColormap(display,
|
TSXSetWindowColormap(display,this->s.ddraw->e.xlib.drawable,this->s.palette->cm);
|
||||||
this->s.ddraw->e.xlib.drawable,
|
|
||||||
this->s.palette->cm);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static HRESULT WINAPI DGA_IDirectDrawSurface3_SetPalette(
|
||||||
|
LPDIRECTDRAWSURFACE3 this,LPDIRECTDRAWPALETTE pal
|
||||||
|
) {
|
||||||
|
TRACE(ddraw,"(%p)->SetPalette(%p)\n",this,pal);
|
||||||
|
|
||||||
|
/* According to spec, we are only supposed to
|
||||||
|
* AddRef if this is not the same palette.
|
||||||
|
*/
|
||||||
|
if( this->s.palette != pal )
|
||||||
|
{
|
||||||
|
if( pal != NULL )
|
||||||
|
pal->lpvtbl->fnAddRef( pal );
|
||||||
|
if( this->s.palette != NULL )
|
||||||
|
this->s.palette->lpvtbl->fnRelease( this->s.palette );
|
||||||
|
this->s.palette = pal;
|
||||||
|
|
||||||
|
/* I think that we need to attach it to all backbuffers...*/
|
||||||
|
if( this->s.backbuffer ) {
|
||||||
|
if( this->s.backbuffer->s.palette )
|
||||||
|
this->s.backbuffer->s.palette->lpvtbl->fnRelease(this->s.backbuffer->s.palette );
|
||||||
|
this->s.backbuffer->s.palette = pal;
|
||||||
|
if( pal ) pal->lpvtbl->fnAddRef( pal );
|
||||||
|
}
|
||||||
|
TSXF86DGAInstallColormap(display,DefaultScreen(display),this->s.palette->cm);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static HRESULT WINAPI IDirectDrawSurface3_Blt(
|
static HRESULT WINAPI IDirectDrawSurface3_Blt(
|
||||||
LPDIRECTDRAWSURFACE3 this,LPRECT32 rdst,LPDIRECTDRAWSURFACE3 src,LPRECT32 rsrc,DWORD dwFlags,LPDDBLTFX lpbltfx
|
LPDIRECTDRAWSURFACE3 this,LPRECT32 rdst,LPDIRECTDRAWSURFACE3 src,LPRECT32 rsrc,DWORD dwFlags,LPDDBLTFX lpbltfx
|
||||||
) {
|
) {
|
||||||
|
@ -678,9 +682,9 @@ static ULONG WINAPI Xlib_IDirectDrawSurface3_Release(LPDIRECTDRAWSURFACE3 this)
|
||||||
TSXDestroyImage(this->t.xlib.image);
|
TSXDestroyImage(this->t.xlib.image);
|
||||||
this->t.xlib.image = 0;
|
this->t.xlib.image = 0;
|
||||||
|
|
||||||
if (this->s.palette) {
|
if (this->s.palette)
|
||||||
this->s.palette->lpvtbl->fnRelease(this->s.palette);
|
this->s.palette->lpvtbl->fnRelease(this->s.palette);
|
||||||
}
|
|
||||||
|
|
||||||
HeapFree(GetProcessHeap(),0,this);
|
HeapFree(GetProcessHeap(),0,this);
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -790,7 +794,7 @@ static HRESULT WINAPI IDirectDrawSurface3_QueryInterface(LPDIRECTDRAWSURFACE3 th
|
||||||
}
|
}
|
||||||
|
|
||||||
static HRESULT WINAPI IDirectDrawSurface3_IsLost(LPDIRECTDRAWSURFACE3 this) {
|
static HRESULT WINAPI IDirectDrawSurface3_IsLost(LPDIRECTDRAWSURFACE3 this) {
|
||||||
FIXME(ddraw,"(%p)->(), stub!\n",this);
|
TRACE(ddraw,"(%p)->(), stub!\n",this);
|
||||||
return 0; /* hmm */
|
return 0; /* hmm */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -854,7 +858,7 @@ static struct IDirectDrawSurface3_VTable dga_dds3vt = {
|
||||||
IDirectDrawSurface3_SetClipper,
|
IDirectDrawSurface3_SetClipper,
|
||||||
IDirectDrawSurface3_SetColorKey,
|
IDirectDrawSurface3_SetColorKey,
|
||||||
(void*)31,
|
(void*)31,
|
||||||
IDirectDrawSurface3_SetPalette,
|
DGA_IDirectDrawSurface3_SetPalette,
|
||||||
DGA_IDirectDrawSurface3_Unlock,
|
DGA_IDirectDrawSurface3_Unlock,
|
||||||
(void*)34,
|
(void*)34,
|
||||||
(void*)35,
|
(void*)35,
|
||||||
|
@ -897,7 +901,7 @@ static struct IDirectDrawSurface3_VTable xlib_dds3vt = {
|
||||||
IDirectDrawSurface3_SetClipper,
|
IDirectDrawSurface3_SetClipper,
|
||||||
IDirectDrawSurface3_SetColorKey,
|
IDirectDrawSurface3_SetColorKey,
|
||||||
(void*)31,
|
(void*)31,
|
||||||
IDirectDrawSurface3_SetPalette,
|
Xlib_IDirectDrawSurface3_SetPalette,
|
||||||
Xlib_IDirectDrawSurface3_Unlock,
|
Xlib_IDirectDrawSurface3_Unlock,
|
||||||
(void*)34,
|
(void*)34,
|
||||||
(void*)35,
|
(void*)35,
|
||||||
|
@ -1364,9 +1368,10 @@ static HRESULT WINAPI Xlib_IDirectDraw2_CreateSurface(
|
||||||
(lpddsd->ddsCaps.dwCaps & DDSCAPS_OFFSCREENPLAIN)
|
(lpddsd->ddsCaps.dwCaps & DDSCAPS_OFFSCREENPLAIN)
|
||||||
) {
|
) {
|
||||||
if (!(lpddsd->dwFlags & DDSD_WIDTH))
|
if (!(lpddsd->dwFlags & DDSD_WIDTH))
|
||||||
lpddsd->dwWidth = this->d.width;
|
lpddsd->dwWidth = this->e.dga.fb_width;
|
||||||
if (!(lpddsd->dwFlags & DDSD_HEIGHT))
|
if (!(lpddsd->dwFlags & DDSD_HEIGHT))
|
||||||
lpddsd->dwHeight = this->d.height;
|
lpddsd->dwHeight = this->e.dga.fb_height;
|
||||||
|
(*lpdsf)->s.surface = (LPBYTE)HeapAlloc(GetProcessHeap(),0,lpddsd->dwWidth*lpddsd->dwHeight*this->d.depth/8);
|
||||||
TRACE(ddraw,"using system memory for a primary surface\n");
|
TRACE(ddraw,"using system memory for a primary surface\n");
|
||||||
} else {
|
} else {
|
||||||
TRACE(ddraw,"using standard XImage for a primary surface\n");
|
TRACE(ddraw,"using standard XImage for a primary surface\n");
|
||||||
|
@ -1376,7 +1381,6 @@ static HRESULT WINAPI Xlib_IDirectDraw2_CreateSurface(
|
||||||
if (!(lpddsd->dwFlags & DDSD_HEIGHT))
|
if (!(lpddsd->dwFlags & DDSD_HEIGHT))
|
||||||
lpddsd->dwHeight = this->d.height;
|
lpddsd->dwHeight = this->d.height;
|
||||||
}
|
}
|
||||||
|
|
||||||
(*lpdsf)->s.surface = HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,lpddsd->dwHeight*lpddsd->dwWidth*this->d.depth/8);
|
(*lpdsf)->s.surface = HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,lpddsd->dwHeight*lpddsd->dwWidth*this->d.depth/8);
|
||||||
(*lpdsf)->s.width = lpddsd->dwWidth;
|
(*lpdsf)->s.width = lpddsd->dwWidth;
|
||||||
(*lpdsf)->s.height = lpddsd->dwHeight;
|
(*lpdsf)->s.height = lpddsd->dwHeight;
|
||||||
|
@ -1397,7 +1401,6 @@ static HRESULT WINAPI Xlib_IDirectDraw2_CreateSurface(
|
||||||
);
|
);
|
||||||
/* END FIXME: Xlib */
|
/* END FIXME: Xlib */
|
||||||
}
|
}
|
||||||
|
|
||||||
(*lpdsf)->s.lpitch = img->bytes_per_line;
|
(*lpdsf)->s.lpitch = img->bytes_per_line;
|
||||||
if (lpddsd->dwFlags & DDSD_BACKBUFFERCOUNT) {
|
if (lpddsd->dwFlags & DDSD_BACKBUFFERCOUNT) {
|
||||||
LPDIRECTDRAWSURFACE3 back;
|
LPDIRECTDRAWSURFACE3 back;
|
||||||
|
@ -1584,10 +1587,11 @@ static HRESULT WINAPI Xlib_IDirectDraw_SetDisplayMode(
|
||||||
|
|
||||||
this->d.width = width;
|
this->d.width = width;
|
||||||
this->d.height = height;
|
this->d.height = height;
|
||||||
|
|
||||||
/* adjust fb_height, so we don't overlap */
|
/* adjust fb_height, so we don't overlap */
|
||||||
/*
|
/*
|
||||||
if (this->e.dga.fb_height < height)
|
if (this->e.dga.fb_height < height)
|
||||||
this->e.dga.fb_height = height; */
|
this->e.dga.fb_height = height;*/
|
||||||
this->d.depth = depth;
|
this->d.depth = depth;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -2220,6 +2224,7 @@ LRESULT WINAPI Xlib_DDWndProc(HWND32 hwnd,UINT32 msg,WPARAM32 wParam,LPARAM lPar
|
||||||
if( !ret )
|
if( !ret )
|
||||||
{
|
{
|
||||||
/* We didn't handle the message - give it to the application */
|
/* We didn't handle the message - give it to the application */
|
||||||
|
if (ddraw && ddraw->d.mainWindow && WIN_FindWndPtr(ddraw->d.mainWindow))
|
||||||
ret = CallWindowProc32A( WIN_FindWndPtr( ddraw->d.mainWindow )->winproc,
|
ret = CallWindowProc32A( WIN_FindWndPtr( ddraw->d.mainWindow )->winproc,
|
||||||
ddraw->d.mainWindow, msg, wParam, lParam );
|
ddraw->d.mainWindow, msg, wParam, lParam );
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue