Like the AUTORADIOBUTTON, the parent of a RADIOBUTTON style button
[wine] / dlls / ddraw / dpalette / x11.c
1 /*              DirectDraw IDirectDrawPalette X11 implementation
2  *
3  * Copyright 1997-2000 Marcus Meissner
4  */
5
6 #include "config.h"
7 #include "winerror.h"
8
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 "x11_private.h"
18
19 DEFAULT_DEBUG_CHANNEL(ddraw);
20
21 #define DPPRIVATE(x) x11_dp_private *dppriv = ((x11_dp_private*)x->private)
22
23 /******************************************************************************
24  *                      IDirectDrawPalette
25  */
26
27 HRESULT WINAPI Xlib_IDirectDrawPaletteImpl_SetEntries(
28     LPDIRECTDRAWPALETTE iface,DWORD x,DWORD start,DWORD count,LPPALETTEENTRY palent
29 ) {
30     ICOM_THIS(IDirectDrawPaletteImpl,iface);
31     XColor      xc;
32     int         i;
33     DPPRIVATE(This);
34
35     TRACE("(%p)->SetEntries(%08lx,%ld,%ld,%p)\n",This,x,start,count,palent);
36     for (i=0;i<count;i++) {
37         xc.red = palent[i].peRed<<8;
38         xc.blue = palent[i].peBlue<<8;
39         xc.green = palent[i].peGreen<<8;
40         xc.flags = DoRed|DoBlue|DoGreen;
41         xc.pixel = start+i;
42
43         if (dppriv->cm)
44             TSXStoreColor(display,dppriv->cm,&xc);
45
46         This->palents[start+i].peRed = palent[i].peRed;
47         This->palents[start+i].peBlue = palent[i].peBlue;
48         This->palents[start+i].peGreen = palent[i].peGreen;
49         This->palents[start+i].peFlags = palent[i].peFlags;
50     }
51
52     /* Now, if we are in 'depth conversion mode', update the screen palette */
53     /* FIXME: we need to update the image or we won't get palette fading. */
54     if (This->ddraw->d.palette_convert != NULL) {
55         This->ddraw->d.palette_convert(palent,This->screen_palents,start,count);
56     }
57     return DD_OK;
58 }
59
60 ULONG WINAPI Xlib_IDirectDrawPaletteImpl_Release(LPDIRECTDRAWPALETTE iface) {
61     ICOM_THIS(IDirectDrawPaletteImpl,iface);
62     DPPRIVATE(This);
63     TRACE("(%p)->() decrementing from %lu.\n", This, This->ref );
64     if (!--(This->ref)) {
65         if (dppriv->cm) {
66             TSXFreeColormap(display,dppriv->cm);
67             dppriv->cm = 0;
68         }
69         HeapFree(GetProcessHeap(),0,This);
70         return S_OK;
71     }
72     return This->ref;
73 }
74
75 ICOM_VTABLE(IDirectDrawPalette) xlib_ddpalvt = 
76 {
77     ICOM_MSVTABLE_COMPAT_DummyRTTIVALUE
78     IDirectDrawPaletteImpl_QueryInterface,
79     IDirectDrawPaletteImpl_AddRef,
80     Xlib_IDirectDrawPaletteImpl_Release,
81     IDirectDrawPaletteImpl_GetCaps,
82     IDirectDrawPaletteImpl_GetEntries,
83     IDirectDrawPaletteImpl_Initialize,
84     Xlib_IDirectDrawPaletteImpl_SetEntries
85 };