From: Zhiyi Zhang zzhang@codeweavers.com
--- dlls/wintypes/main.c | 34 +++++++++++++++++++++++++++++++++- dlls/wintypes/tests/wintypes.c | 3 +++ 2 files changed, 36 insertions(+), 1 deletion(-)
diff --git a/dlls/wintypes/main.c b/dlls/wintypes/main.c index 4d16e8b21a5..697e896f10e 100644 --- a/dlls/wintypes/main.c +++ b/dlls/wintypes/main.c @@ -410,6 +410,7 @@ struct property_value IReference_DateTime datetime_iface; IReference_GUID guid_iface; IReference_Point point_iface; + IReference_Size size_iface; IReference_Rect rect_iface; IReference_HSTRING hstring_iface; } irefs; @@ -546,6 +547,12 @@ static HRESULT STDMETHODCALLTYPE property_value_QueryInterface(IPropertyValue *i *out = &impl->irefs.point_iface; return S_OK; } + else if (IsEqualIID(riid, &IID_IReference_Size) && impl->type == PropertyType_Size) + { + IReference_Size_AddRef(&impl->irefs.size_iface); + *out = &impl->irefs.size_iface; + return S_OK; + } else if (IsEqualIID(riid, &IID_IReference_Rect) && impl->type == PropertyType_Rect) { IReference_Rect_AddRef(&impl->irefs.rect_iface); @@ -1274,6 +1281,31 @@ static const struct IReference_PointVtbl iref_point_vtbl = iref_point_get_Value, };
+DEFINE_IINSPECTABLE_(iref_size, IReference_Size, struct property_value, + impl_from_IReference_Size, irefs.size_iface, &impl->IPropertyValue_iface); + +static HRESULT STDMETHODCALLTYPE iref_size_get_Value(IReference_Size *iface, Size *value) +{ + struct property_value *impl = impl_from_IReference_Size(iface); + + TRACE("iface %p, value %p.\n", iface, value); + + return property_value_GetSize(&impl->IPropertyValue_iface, value); +} + +static const struct IReference_SizeVtbl iref_size_vtbl = +{ + iref_size_QueryInterface, + iref_size_AddRef, + iref_size_Release, + /* IInspectable methods */ + iref_size_GetIids, + iref_size_GetRuntimeClassName, + iref_size_GetTrustLevel, + /* IReference<Size> methods */ + iref_size_get_Value, +}; + DEFINE_IINSPECTABLE_(iref_rect, IReference_Rect, struct property_value, impl_from_IReference_Rect, irefs.rect_iface, &impl->IPropertyValue_iface);
@@ -1436,7 +1468,7 @@ static HRESULT STDMETHODCALLTYPE property_value_statics_CreateSize(IPropertyValu Size value, IInspectable **property_value) { TRACE("iface %p, value (%fx%f), property_value %p.\n", iface, value.Width, value.Height, property_value); - return create_primitive_property_value(PropertyType_Size); + create_primitive_property_value_iref(PropertyType_Size, irefs.size_iface.lpVtbl, iref_size_vtbl); }
static HRESULT STDMETHODCALLTYPE property_value_statics_CreateRect(IPropertyValueStatics *iface, diff --git a/dlls/wintypes/tests/wintypes.c b/dlls/wintypes/tests/wintypes.c index be2265ddc71..d4a07e01331 100644 --- a/dlls/wintypes/tests/wintypes.c +++ b/dlls/wintypes/tests/wintypes.c @@ -749,6 +749,7 @@ static void test_IPropertyValueStatics(void) IReference_DateTime *iref_datetime; IReference_GUID *iref_guid; IReference_Point *iref_point; + IReference_Size *iref_size; IReference_Rect *iref_rect; IPropertyValue *value = NULL; enum PropertyType type; @@ -765,6 +766,7 @@ static void test_IPropertyValueStatics(void) struct DateTime ret_datetime; GUID ret_guid; struct Point ret_point; + struct Size ret_size; struct Rect ret_rect; boolean ret; HRESULT hr; @@ -1030,6 +1032,7 @@ static void test_IPropertyValueStatics(void) TEST_PROPERTY_VALUE_IREFERENCE(DateTime, IReference_DateTime, datetime_value, iref_datetime, ret_datetime) TEST_PROPERTY_VALUE_IREFERENCE(Guid, IReference_GUID, IID_IPropertyValue, iref_guid, ret_guid) TEST_PROPERTY_VALUE_IREFERENCE(Point, IReference_Point, point_value, iref_point, ret_point) + TEST_PROPERTY_VALUE_IREFERENCE(Size, IReference_Size, size_value, iref_size, ret_size) TEST_PROPERTY_VALUE_IREFERENCE(Rect, IReference_Rect, rect_value, iref_rect, ret_rect)
#undef TEST_PROPERTY_VALUE_IREFERENCE