/* DirectDrawPalette XF86DGA implementation * * Copyright 1997-2000 Marcus Meissner * Copyright 1998 Lionel Ulmer (most of Direct3D stuff) */ #include "config.h" #include "winerror.h" #include #include #include #include #include "debugtools.h" #include "dga_private.h" DEFAULT_DEBUG_CHANNEL(ddraw); #define DPPRIVATE(x) dga_dp_private *dppriv = ((dga_dp_private*)(x)->private) #define DDPRIVATE(x) dga_dd_private *ddpriv = ((dga_dd_private*)(x)->d->private) HRESULT WINAPI DGA_IDirectDrawPaletteImpl_SetEntries( LPDIRECTDRAWPALETTE iface,DWORD x,DWORD start,DWORD count,LPPALETTEENTRY palent ) { ICOM_THIS(IDirectDrawPaletteImpl,iface); DPPRIVATE(This); DDPRIVATE(This->ddraw); XColor xc; Colormap cm; int i; TRACE("(%p)->SetEntries(%08lx,%ld,%ld,%p)\n",This,x,start,count,palent); if (!dppriv->cm) /* should not happen */ { FIXME("app tried to set colormap in non-palettized mode\n"); return DDERR_GENERIC; } /* FIXME: free colorcells instead of freeing whole map */ cm = dppriv->cm; dppriv->cm = TSXCopyColormapAndFree(display,dppriv->cm); TSXFreeColormap(display,cm); for (i=0;icm,&xc); This->palents[start+i].peRed = palent[i].peRed; This->palents[start+i].peBlue = palent[i].peBlue; This->palents[start+i].peGreen = palent[i].peGreen; This->palents[start+i].peFlags = palent[i].peFlags; } ddpriv->InstallColormap(display,DefaultScreen(display),dppriv->cm); TSXFlush(display); return DD_OK; } ICOM_VTABLE(IDirectDrawPalette) dga_ddpalvt = { ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE IDirectDrawPaletteImpl_QueryInterface, IDirectDrawPaletteImpl_AddRef, Xlib_IDirectDrawPaletteImpl_Release, IDirectDrawPaletteImpl_GetCaps, IDirectDrawPaletteImpl_GetEntries, IDirectDrawPaletteImpl_Initialize, DGA_IDirectDrawPaletteImpl_SetEntries };