ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

createpalette.c
Go to the documentation of this file.
00001 /* $Id$
00002  *
00003  * COPYRIGHT:            See COPYING in the top level directory
00004  * PROJECT:              ReactOS DirectX
00005  * FILE:                 ddraw/surface/createsurface.c
00006  * PURPOSE:              IDirectDrawPalette Creation
00007  * PROGRAMMER:           Jérôme Gardou
00008  *
00009  */
00010 #include "rosdraw.h"
00011 
00012 DWORD ConvertPCapsFlags(DWORD dwFlags)
00013 {
00014     DWORD ret = 0;
00015     if(dwFlags & DDPCAPS_4BIT)
00016         ret|=DDRAWIPAL_16;
00017     if(dwFlags & DDPCAPS_8BIT)
00018         ret|=DDRAWIPAL_256;
00019     if(dwFlags & DDPCAPS_8BITENTRIES)
00020         ret|=DDRAWIPAL_STORED_8INDEX;
00021     if(dwFlags & DDPCAPS_ALLOW256)
00022         ret|=DDRAWIPAL_ALLOW256;
00023     if(dwFlags & DDPCAPS_ALPHA)
00024         ret|=DDRAWIPAL_ALPHA;
00025     if(dwFlags & DDPCAPS_1BIT)
00026         ret|=DDRAWIPAL_2;
00027     if(dwFlags & DDPCAPS_2BIT)
00028         ret|=DDRAWIPAL_4;
00029 
00030     return ret;
00031 }
00032 
00033 HRESULT
00034 Internal_CreatePalette( LPDDRAWI_DIRECTDRAW_INT pDDraw, DWORD dwFlags,
00035                   LPPALETTEENTRY palent, LPDIRECTDRAWPALETTE* ppPalette, LPUNKNOWN pUnkOuter)
00036 {
00037     DDHAL_CREATEPALETTEDATA mDdCreatePalette = { 0 };
00038 
00039     LPDDRAWI_DDRAWPALETTE_INT ThisPalInt = NULL;
00040     LPDDRAWI_DDRAWPALETTE_LCL ThisPalLcl = NULL;
00041     LPDDRAWI_DDRAWPALETTE_GBL ThisPalGbl = NULL;
00042 
00043     HRESULT ret;
00044 
00045     if(pUnkOuter)
00046     {
00047         return CLASS_E_NOAGGREGATION;
00048     }
00049 
00050     if(!(pDDraw->lpLcl->dwLocalFlags & DDRAWILCL_SETCOOPCALLED))
00051     {
00052         return DDERR_NOCOOPERATIVELEVELSET;
00053     }
00054 
00055 
00056     if (pDDraw->lpLcl->dwProcessId != GetCurrentProcessId() )
00057     {
00058         return DDERR_INVALIDOBJECT;
00059     }
00060 
00061     /* Allocate the palette interface and needed members */
00062     DxHeapMemAlloc(ThisPalInt,  sizeof( DDRAWI_DDRAWPALETTE_INT ) );
00063     if( ThisPalInt == NULL )
00064     {
00065         ret = DDERR_OUTOFMEMORY;
00066         goto cleanup;
00067     }
00068 
00069     DxHeapMemAlloc(ThisPalLcl,  sizeof( DDRAWI_DDRAWPALETTE_LCL ) );
00070     if( ThisPalLcl == NULL )
00071     {
00072         ret = DDERR_OUTOFMEMORY;
00073         goto cleanup;
00074     }
00075 
00076     DxHeapMemAlloc(ThisPalGbl,  sizeof( DDRAWI_DDRAWPALETTE_GBL ) );
00077     if( ThisPalGbl == NULL )
00078     {
00079         ret = DDERR_OUTOFMEMORY;
00080         goto cleanup;
00081     }
00082 
00083     /*Some initial setup*/
00084 
00085     ThisPalInt->lpLcl = ThisPalLcl;
00086     ThisPalLcl->lpGbl = ThisPalGbl;
00087 
00088     ThisPalLcl->lpDD_lcl = ThisPalGbl->lpDD_lcl = pDDraw->lpLcl;
00089     ThisPalGbl->dwFlags = ConvertPCapsFlags(dwFlags);
00090 
00091     ThisPalInt->lpVtbl = (PVOID)&DirectDrawPalette_Vtable;
00092     ThisPalGbl->dwProcessId = GetCurrentProcessId();
00093 
00094     mDdCreatePalette.lpDD = pDDraw->lpLcl->lpGbl;
00095     mDdCreatePalette.lpDDPalette = ThisPalGbl;
00096     if(pDDraw->lpLcl->lpGbl->lpDDCBtmp->HALDD.dwFlags & DDHAL_CB32_CREATEPALETTE) {
00097         mDdCreatePalette.CreatePalette = pDDraw->lpLcl->lpGbl->lpDDCBtmp->HALDD.CreatePalette;
00098         DX_STUB_str("Using HAL CreatePalette\n");
00099     }
00100     else {
00101         mDdCreatePalette.CreatePalette = pDDraw->lpLcl->lpGbl->lpDDCBtmp->HELDD.CreatePalette;
00102         DX_STUB_str("Using HEL CreatePalette\n");
00103     }
00104     mDdCreatePalette.ddRVal = DDERR_GENERIC;
00105     mDdCreatePalette.lpColorTable = palent;
00106 
00107     if (mDdCreatePalette.CreatePalette(&mDdCreatePalette) == DDHAL_DRIVER_NOTHANDLED)
00108     {
00109         DX_STUB_str("mDdCreateSurface failed with DDHAL_DRIVER_NOTHANDLED.");
00110         ret = DDERR_NOTINITIALIZED;
00111         goto cleanup;
00112     }
00113 
00114     if (mDdCreatePalette.ddRVal != DD_OK)
00115     {
00116         DX_STUB_str("mDdCreateSurface failed.");
00117         ret = mDdCreatePalette.ddRVal;
00118         goto cleanup;
00119     }
00120 
00121     *ppPalette = (LPDIRECTDRAWPALETTE)ThisPalInt;
00122     ThisPalInt->lpLink = pDDraw->lpLcl->lpGbl->palList;
00123     pDDraw->lpLcl->lpGbl->palList = ThisPalInt;
00124     ThisPalInt->lpLcl->dwReserved1 = (ULONG_PTR)pDDraw;
00125     IDirectDrawPalette_AddRef(*ppPalette);
00126 
00127     return DD_OK;
00128 
00129 cleanup:
00130     if(ThisPalInt) DxHeapMemFree(ThisPalInt);
00131     if(ThisPalLcl) DxHeapMemFree(ThisPalLcl);
00132     if(ThisPalGbl) DxHeapMemFree(ThisPalGbl);
00133 
00134     return ret;
00135 }

Generated on Sun May 27 2012 04:21:25 for ReactOS by doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.