On 5/17/22 08:00, Ziqing Hui wrote:
@@ -25,10 +25,72 @@ #include "wincrypt.h" #include "wine/test.h" #include "initguid.h" +#include "d2d1effectauthor.h" #include "dwrite.h" #include "wincodec.h" #include "wine/heap.h"
d2d1effectauthor.h should go to uuid, so you don't need to initguid it here.
+#define EFFECT_XML(x) L###x
+static const WCHAR *effect_xml_a = EFFECT_XML +(
<?xml version='1.0'?>
<Effect>
<Property name='DisplayName' type='string' value='TestEffect'/>
<Property name='Author' type='string' value='The Wine Project'/>
<Property name='Category' type='string' value='Test'/>
<Property name='Description' type='string' value='Test effect.'/>
<Inputs>
<Input name='Source'/>
</Inputs>
<Property name='Integer' type='uint32'>
<Property name='DisplayName' type='string' value='Integer'/>
<Property name='Min' type='uint32' value='0'/>
<Property name='Max' type='uint32' value='100'/>
<Property name='Default' type='uint32' value='10'/>
</Property>
</Effect>
+);
I personally don't like macro tricks for this. It believe this should work with regular L"", and "" and the end of the lines.
+static HRESULT STDMETHODCALLTYPE effect_impl_QueryInterface(ID2D1EffectImpl *iface, REFIID iid, void **out) +{
- if (IsEqualGUID(iid, &IID_ID2D1EffectImpl)
|| IsEqualGUID(iid, &IID_IUnknown))
- {
*out = iface;
return S_OK;
- }
- *out = NULL;
- return E_NOINTERFACE;
+}
This is an allocated test effect, so it should addref here,
+static ULONG STDMETHODCALLTYPE effect_impl_Release(ID2D1EffectImpl *iface) +{
- struct effect_impl *effect_impl = impl_from_ID2D1EffectImpl(iface);
- ULONG refcount = InterlockedDecrement(&effect_impl->refcount);
- return refcount;
+}
...release here...
+static HRESULT STDMETHODCALLTYPE effect_impl_Initialize(ID2D1EffectImpl *iface,
ID2D1EffectContext *context,ID2D1TransformGraph *graph)
+{
- struct effect_impl *effect_impl = impl_from_ID2D1EffectImpl(iface);
- effect_impl->effect_context = context;
- return S_OK;
+}
...addref here..
+static HRESULT STDMETHODCALLTYPE effect_impl_create(IUnknown **effect_impl) +{
- struct effect_impl *object;
- if (!(object = heap_alloc(sizeof(*object))))
return E_OUTOFMEMORY;
- object->ID2D1EffectImpl_iface.lpVtbl = &effect_impl_vtbl;
- object->refcount = 1;
- *effect_impl = (IUnknown *)&object->ID2D1EffectImpl_iface;
- return S_OK;
+}
and fully initialize here.