Henri Verbeet : ddraw: Add a separate function for palette initialization.
Alexandre Julliard
julliard at winehq.org
Fri Aug 20 10:19:10 CDT 2010
Module: wine
Branch: master
Commit: e2021722fc24870d1004898d63e8b5f95be6a60c
URL: http://source.winehq.org/git/wine.git/?a=commit;h=e2021722fc24870d1004898d63e8b5f95be6a60c
Author: Henri Verbeet <hverbeet at codeweavers.com>
Date: Thu Aug 19 18:57:46 2010 +0200
ddraw: Add a separate function for palette initialization.
---
dlls/ddraw/ddraw.c | 15 ++++++---------
dlls/ddraw/ddraw_private.h | 4 +++-
dlls/ddraw/palette.c | 24 +++++++++++++++++++++++-
3 files changed, 32 insertions(+), 11 deletions(-)
diff --git a/dlls/ddraw/ddraw.c b/dlls/ddraw/ddraw.c
index 920a365..c8cebcb 100644
--- a/dlls/ddraw/ddraw.c
+++ b/dlls/ddraw/ddraw.c
@@ -3952,7 +3952,8 @@ static HRESULT WINAPI ddraw7_CreatePalette(IDirectDraw7 *iface, DWORD Flags,
{
IDirectDrawImpl *This = (IDirectDrawImpl *)iface;
IDirectDrawPaletteImpl *object;
- HRESULT hr = DDERR_GENERIC;
+ HRESULT hr;
+
TRACE("(%p)->(%x,%p,%p,%p)\n", This, Flags, ColorTable, Palette, pUnkOuter);
EnterCriticalSection(&ddraw_cs);
@@ -3979,20 +3980,16 @@ static HRESULT WINAPI ddraw7_CreatePalette(IDirectDraw7 *iface, DWORD Flags,
return E_OUTOFMEMORY;
}
- object->lpVtbl = &IDirectDrawPalette_Vtbl;
- object->ref = 1;
-
- hr = IWineD3DDevice_CreatePalette(This->wineD3DDevice, Flags,
- ColorTable, &object->wineD3DPalette, (IUnknown *)object);
- if(hr != DD_OK)
+ hr = ddraw_palette_init(object, This, Flags, ColorTable);
+ if (FAILED(hr))
{
+ WARN("Failed to initialize palette, hr %#x.\n", hr);
HeapFree(GetProcessHeap(), 0, object);
LeaveCriticalSection(&ddraw_cs);
return hr;
}
- IDirectDraw7_AddRef(iface);
- object->ifaceToRelease = (IUnknown *) iface;
+ TRACE("Created palette %p.\n", object);
*Palette = (IDirectDrawPalette *)object;
LeaveCriticalSection(&ddraw_cs);
return DD_OK;
diff --git a/dlls/ddraw/ddraw_private.h b/dlls/ddraw/ddraw_private.h
index bfca885..6be5016 100644
--- a/dlls/ddraw/ddraw_private.h
+++ b/dlls/ddraw/ddraw_private.h
@@ -477,7 +477,9 @@ struct IDirectDrawPaletteImpl
/* IDirectDrawPalette fields */
IUnknown *ifaceToRelease;
};
-extern const IDirectDrawPaletteVtbl IDirectDrawPalette_Vtbl DECLSPEC_HIDDEN;
+
+HRESULT ddraw_palette_init(IDirectDrawPaletteImpl *palette,
+ IDirectDrawImpl *ddraw, DWORD flags, PALETTEENTRY *entries) DECLSPEC_HIDDEN;
/******************************************************************************
* DirectDraw ClassFactory implementation - incomplete
diff --git a/dlls/ddraw/palette.c b/dlls/ddraw/palette.c
index 2937ec6..7b9dcc2 100644
--- a/dlls/ddraw/palette.c
+++ b/dlls/ddraw/palette.c
@@ -240,7 +240,7 @@ IDirectDrawPaletteImpl_GetEntries(IDirectDrawPalette *iface,
return hr;
}
-const IDirectDrawPaletteVtbl IDirectDrawPalette_Vtbl =
+static const struct IDirectDrawPaletteVtbl ddraw_palette_vtbl =
{
/*** IUnknown ***/
IDirectDrawPaletteImpl_QueryInterface,
@@ -252,3 +252,25 @@ const IDirectDrawPaletteVtbl IDirectDrawPalette_Vtbl =
IDirectDrawPaletteImpl_Initialize,
IDirectDrawPaletteImpl_SetEntries
};
+
+HRESULT ddraw_palette_init(IDirectDrawPaletteImpl *palette,
+ IDirectDrawImpl *ddraw, DWORD flags, PALETTEENTRY *entries)
+{
+ HRESULT hr;
+
+ palette->lpVtbl = &ddraw_palette_vtbl;
+ palette->ref = 1;
+
+ hr = IWineD3DDevice_CreatePalette(ddraw->wineD3DDevice, flags,
+ entries, &palette->wineD3DPalette, (IUnknown *)palette);
+ if (FAILED(hr))
+ {
+ WARN("Failed to create wined3d palette, hr %#x.\n", hr);
+ return hr;
+ }
+
+ palette->ifaceToRelease = (IUnknown *)ddraw;
+ IUnknown_AddRef(palette->ifaceToRelease);
+
+ return DD_OK;
+}
More information about the wine-cvs
mailing list