~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~ [ freetext search ] ~ [ file search ] ~

Wine Cross Reference
wine/dlls/ddraw/parent.c

Version: ~ [ wine-1.1.40 ] ~ [ wine-1.1.39 ] ~ [ wine-1.1.38 ] ~ [ wine-1.1.37 ] ~ [ wine-1.1.36 ] ~ [ wine-1.1.35 ] ~ [ wine-1.1.34 ] ~ [ wine-1.1.33 ] ~ [ wine-1.1.32 ] ~ [ wine-1.1.31 ] ~ [ wine-1.1.30 ] ~ [ wine-1.1.29 ] ~ [ wine-1.1.28 ] ~ [ wine-1.1.27 ] ~ [ wine-1.1.26 ] ~ [ wine-1.1.25 ] ~ [ wine-1.1.24 ] ~ [ wine-1.1.23 ] ~ [ wine-1.1.22 ] ~ [ wine-1.1.21 ] ~ [ wine-1.1.20 ] ~ [ wine-1.1.19 ] ~ [ wine-1.1.18 ] ~ [ wine-1.1.17 ] ~ [ wine-1.1.16 ] ~ [ wine-1.1.15 ] ~ [ wine-1.1.14 ] ~ [ wine-1.1.13 ] ~ [ wine-1.1.12 ] ~ [ wine-1.1.11 ] ~ [ wine-1.1.10 ] ~ [ wine-1.1.9 ] ~ [ wine-1.1.8 ] ~ [ wine-1.1.7 ] ~ [ wine-1.0.1 ] ~ [ wine-1.1.6 ] ~ [ wine-1.1.5 ] ~ [ wine-1.1.4 ] ~ [ wine-1.1.3 ] ~ [ wine-1.1.2 ] ~ [ wine-1.1.1 ] ~ [ wine-1.1.0 ] ~ [ wine-1.0 ] ~

  1 /*
  2  * IParent implementation
  3  *
  4  * Copyright (c) 2006 Stefan Dösinger
  5  *
  6  * This library is free software; you can redistribute it and/or
  7  * modify it under the terms of the GNU Lesser General Public
  8  * License as published by the Free Software Foundation; either
  9  * version 2.1 of the License, or (at your option) any later version.
 10  *
 11  * This library is distributed in the hope that it will be useful,
 12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
 13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 14  * Lesser General Public License for more details.
 15  *
 16  * You should have received a copy of the GNU Lesser General Public
 17  * License along with this library; if not, write to the Free Software
 18  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
 19  *
 20  * A universal parent interface for everything in WineD3D that doesn't have
 21  * a DDraw counterpart
 22  */
 23 
 24 #include "config.h"
 25 #include "wine/port.h"
 26 #include "wine/debug.h"
 27 
 28 #include <assert.h>
 29 #include <stdarg.h>
 30 #include <string.h>
 31 #include <stdlib.h>
 32 
 33 #define COBJMACROS
 34 
 35 #include "windef.h"
 36 #include "winbase.h"
 37 #include "winerror.h"
 38 #include "wingdi.h"
 39 #include "wine/exception.h"
 40 
 41 #include "ddraw.h"
 42 #include "d3d.h"
 43 
 44 #include "ddraw_private.h"
 45 
 46 WINE_DEFAULT_DEBUG_CHANNEL(ddraw);
 47 
 48 /*****************************************************************************
 49  * IUnknown methods
 50  *****************************************************************************/
 51 
 52 /*****************************************************************************
 53  * IParent::Queryinterface
 54  *
 55  * It can't query any interfaces, and it's not used for anything. So
 56  * it just returns E_NOINTERFACE
 57  *
 58  * Params:
 59  *  riid: guid of queried interface
 60  *  obj: returns a pointer to the interface
 61  *
 62  * Return values
 63  *  This implementation always returns E_NOINTERFACE and NULL
 64  *
 65  *****************************************************************************/
 66 static HRESULT WINAPI
 67 IParentImpl_QueryInterface(IParent *iface,
 68                            REFIID riid,
 69                            void **obj)
 70 {
 71     TRACE("(%p)->(%s,%p)\n", iface, debugstr_guid(riid), obj);
 72 
 73     *obj = NULL;
 74     if ( IsEqualGUID( &IID_IUnknown, riid ) ||
 75          IsEqualGUID( &IID_IParent, riid ) )
 76     {
 77         *obj = iface;
 78         IParent_AddRef(iface);
 79         return DD_OK;
 80     }
 81     return E_NOINTERFACE;
 82 }
 83 
 84 /*****************************************************************************
 85  * IParent::AddRef
 86  *
 87  * Increases the refcount
 88  *
 89  * Params:
 90  *
 91  * Return values
 92  *  The new refcount
 93  *
 94  *****************************************************************************/
 95 static ULONG WINAPI
 96 IParentImpl_AddRef(IParent *iface)
 97 {
 98     IParentImpl *This = (IParentImpl *)iface;
 99     ULONG ref = InterlockedIncrement(&This->ref);
100 
101     TRACE("(%p) : AddRef from %d\n", This, ref - 1);
102 
103     return ref;
104 }
105 
106 
107 /*****************************************************************************
108  * IParent::Release
109  *
110  * Releases the refcount, and destroys the object if the refcount falls to 0
111  * Also releases the child object, if destroyed. That's almost the whole sense
112  * of this interface.
113  *
114  * Params:
115  *
116  * Return values
117  *  The new refcount
118  *
119  *****************************************************************************/
120 static ULONG WINAPI IParentImpl_Release(IParent *iface)
121 {
122     IParentImpl *This = (IParentImpl *)iface;
123     ULONG ref = InterlockedDecrement(&This->ref);
124 
125     TRACE("(%p) : ReleaseRef to %d\n", This, ref);
126 
127     if (ref == 0)
128     {
129         TRACE("(%p) Releasing child at %p\n", This, This->child);
130         if(This->child)
131             IUnknown_Release(This->child);
132         HeapFree(GetProcessHeap(), 0, This);
133         TRACE("Released\n");
134     }
135     return ref;
136 }
137 
138 /*****************************************************************************
139  * The VTable
140  *****************************************************************************/
141 const IParentVtbl IParent_Vtbl =
142 {
143      IParentImpl_QueryInterface,
144      IParentImpl_AddRef,
145      IParentImpl_Release,
146 };
147 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~ [ freetext search ] ~ [ file search ] ~

This page was automatically generated by the LXR engine.
Visit the LXR main site for more information.