Like the AUTORADIOBUTTON, the parent of a RADIOBUTTON style button
[wine] / dlls / ddraw / dpalette / dga.c
1 /*              DirectDrawPalette XF86DGA implementation
2  *
3  * Copyright 1997-2000 Marcus Meissner
4  * Copyright 1998 Lionel Ulmer (most of Direct3D stuff)
5  */
6
7 #include "config.h"
8 #include "winerror.h"
9
10 #include <unistd.h>
11 #include <assert.h>
12 #include <string.h>
13 #include <stdlib.h>
14
15 #include "debugtools.h"
16
17 #include "dga_private.h"
18
19 DEFAULT_DEBUG_CHANNEL(ddraw);
20
21 #define DPPRIVATE(x) dga_dp_private *dppriv = ((dga_dp_private*)(x)->private)
22 #define DDPRIVATE(x) dga_dd_private *ddpriv = ((dga_dd_private*)(x)->private)
23
24 HRESULT WINAPI DGA_IDirectDrawPaletteImpl_SetEntries(
25     LPDIRECTDRAWPALETTE iface,DWORD x,DWORD start,DWORD count,LPPALETTEENTRY palent
26 ) {
27     ICOM_THIS(IDirectDrawPaletteImpl,iface);
28     DPPRIVATE(This);
29     DDPRIVATE(This->ddraw);
30     XColor      xc;
31     Colormap    cm;
32     int         i;
33
34     TRACE("(%p)->SetEntries(%08lx,%ld,%ld,%p)\n",This,x,start,count,palent);
35     if (!dppriv->cm) /* should not happen */ {
36         FIXME("app tried to set colormap in non-palettized mode\n");
37         return DDERR_GENERIC;
38     }
39     /* FIXME: free colorcells instead of freeing whole map */
40     cm = dppriv->cm;
41     dppriv->cm = TSXCopyColormapAndFree(display,dppriv->cm);
42     TSXFreeColormap(display,cm);
43
44     for (i=0;i<count;i++) {
45         xc.red = palent[i].peRed<<8;
46         xc.blue = palent[i].peBlue<<8;
47         xc.green = palent[i].peGreen<<8;
48         xc.flags = DoRed|DoBlue|DoGreen;
49         xc.pixel = i+start;
50
51         TSXStoreColor(display,dppriv->cm,&xc);
52
53         This->palents[start+i].peRed = palent[i].peRed;
54         This->palents[start+i].peBlue = palent[i].peBlue;
55         This->palents[start+i].peGreen = palent[i].peGreen;
56         This->palents[start+i].peFlags = palent[i].peFlags;
57     }
58     ddpriv->InstallColormap(display,DefaultScreen(display),dppriv->cm);
59     return DD_OK;
60 }
61 ICOM_VTABLE(IDirectDrawPalette) dga_ddpalvt = 
62 {
63         ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
64         IDirectDrawPaletteImpl_QueryInterface,
65         IDirectDrawPaletteImpl_AddRef,
66         Xlib_IDirectDrawPaletteImpl_Release,
67         IDirectDrawPaletteImpl_GetCaps,
68         IDirectDrawPaletteImpl_GetEntries,
69         IDirectDrawPaletteImpl_Initialize,
70         DGA_IDirectDrawPaletteImpl_SetEntries
71 };