From b0aef63d27de07de1375a9a1b88cb3ed757c2ddc Mon Sep 17 00:00:00 2001 From: Dmitry Chapyshev Date: Thu, 26 Feb 2009 10:24:00 +0000 Subject: [PATCH] - Sync gdiplus, hhctrl and inetcomm with Wine head svn path=/trunk/; revision=39761 --- reactos/dll/win32/gdiplus/graphics.c | 1 - reactos/dll/win32/gdiplus/graphicspath.c | 27 ++++++++++--- reactos/dll/win32/gdiplus/image.c | 38 +++++++++++++------ reactos/dll/win32/gdiplus/region.c | 11 +++++- reactos/dll/win32/hhctrl.ocx/hhctrl.c | 19 +++++++++- reactos/dll/win32/inetcomm/inetcomm.rbuild | 2 +- reactos/dll/win32/inetcomm/inetcomm_private.h | 2 - .../dll/win32/inetcomm/internettransport.c | 23 ----------- reactos/dll/win32/inetcomm/mimeintl.c | 4 +- reactos/dll/win32/inetcomm/mimeole.c | 6 +-- reactos/dll/win32/inetcomm/smtptransport.c | 6 +-- 11 files changed, 86 insertions(+), 53 deletions(-) diff --git a/reactos/dll/win32/gdiplus/graphics.c b/reactos/dll/win32/gdiplus/graphics.c index 128e04d361e..f76e43c797c 100644 --- a/reactos/dll/win32/gdiplus/graphics.c +++ b/reactos/dll/win32/gdiplus/graphics.c @@ -1901,7 +1901,6 @@ GpStatus WINGDIPAPI GdipDrawString(GpGraphics *graphics, GDIPCONST WCHAR *string j++; } - stringdup[j] = 0; length = j; while(sum < length){ diff --git a/reactos/dll/win32/gdiplus/graphicspath.c b/reactos/dll/win32/gdiplus/graphicspath.c index c0f6584f8c7..6a4c99d4c2c 100644 --- a/reactos/dll/win32/gdiplus/graphicspath.c +++ b/reactos/dll/win32/gdiplus/graphicspath.c @@ -1384,16 +1384,33 @@ GpStatus WINGDIPAPI GdipIsVisiblePathPointI(GpPath* path, INT x, INT y, GpGraphi return GdipIsVisiblePathPoint(path, x, y, graphics, result); } +/***************************************************************************** + * GdipIsVisiblePathPoint [GDIPLUS.@] + */ GpStatus WINGDIPAPI GdipIsVisiblePathPoint(GpPath* path, REAL x, REAL y, GpGraphics *graphics, BOOL *result) { - static int calls; + GpRegion *region; + HRGN hrgn; + GpStatus status; - if(!path) return InvalidParameter; + if(!path || !result) return InvalidParameter; - if(!(calls++)) - FIXME("not implemented\n"); + status = GdipCreateRegionPath(path, ®ion); + if(status != Ok) + return status; - return NotImplemented; + status = GdipGetRegionHRgn(region, graphics, &hrgn); + if(status != Ok){ + GdipDeleteRegion(region); + return status; + } + + *result = PtInRegion(hrgn, roundr(x), roundr(y)); + + DeleteObject(hrgn); + GdipDeleteRegion(region); + + return Ok; } GpStatus WINGDIPAPI GdipStartPathFigure(GpPath *path) diff --git a/reactos/dll/win32/gdiplus/image.c b/reactos/dll/win32/gdiplus/image.c index 9944322b371..a229f8b637d 100644 --- a/reactos/dll/win32/gdiplus/image.c +++ b/reactos/dll/win32/gdiplus/image.c @@ -496,12 +496,6 @@ GpStatus WINGDIPAPI GdipCreateBitmapFromScan0(INT width, INT height, INT stride, if(scan0 && !stride) return InvalidParameter; - /* FIXME: windows allows negative stride (reads backwards from scan0) */ - if(stride < 0){ - FIXME("negative stride\n"); - return InvalidParameter; - } - *bitmap = GdipAlloc(sizeof(GpBitmap)); if(!*bitmap) return OutOfMemory; @@ -527,16 +521,29 @@ GpStatus WINGDIPAPI GdipCreateBitmapFromScan0(INT width, INT height, INT stride, bmih->biSize = sizeof(BITMAPINFOHEADER); bmih->biWidth = width; - bmih->biHeight = -height; /* FIXME: use the rest of the data from format */ bmih->biBitCount = PIXELFORMATBPP(format); bmih->biCompression = BI_RGB; bmih->biSizeImage = datalen; - if(scan0) - memcpy(bmih + 1, scan0, datalen); + if (scan0) + { + if (stride > 0) + { + bmih->biHeight = -height; + memcpy(bmih + 1, scan0, datalen); + } + else + { + bmih->biHeight = height; + memcpy(bmih + 1, scan0 + stride * (height - 1), datalen); + } + } else + { + bmih->biHeight = height; memset(bmih + 1, 0, datalen); + } if(CreateStreamOnHGlobal(buff, TRUE, &stream) != S_OK){ ERR("could not make stream\n"); @@ -1492,6 +1499,7 @@ GpStatus WINGDIPAPI GdipCreateBitmapFromHBITMAP(HBITMAP hbm, HPALETTE hpal, GpBi BITMAP bm; GpStatus retval; PixelFormat format; + BYTE* bits; TRACE("%p %p %p\n", hbm, hpal, bitmap); @@ -1532,8 +1540,16 @@ GpStatus WINGDIPAPI GdipCreateBitmapFromHBITMAP(HBITMAP hbm, HPALETTE hpal, GpBi return InvalidParameter; } - retval = GdipCreateBitmapFromScan0(bm.bmWidth, bm.bmHeight, bm.bmWidthBytes, - format, bm.bmBits, bitmap); + if (bm.bmBits) + bits = (BYTE*)bm.bmBits + (bm.bmHeight - 1) * bm.bmWidthBytes; + else + { + FIXME("can only get image data from DIB sections\n"); + bits = NULL; + } + + retval = GdipCreateBitmapFromScan0(bm.bmWidth, bm.bmHeight, -bm.bmWidthBytes, + format, bits, bitmap); return retval; } diff --git a/reactos/dll/win32/gdiplus/region.c b/reactos/dll/win32/gdiplus/region.c index e42c5cd12ab..8fe5e2694c4 100644 --- a/reactos/dll/win32/gdiplus/region.c +++ b/reactos/dll/win32/gdiplus/region.c @@ -339,6 +339,9 @@ GpStatus WINGDIPAPI GdipCombineRegionRectI(GpRegion *region, return GdipCombineRegionRect(region, &rectf, mode); } +/***************************************************************************** + * GdipCombineRegionRegion [GDIPLUS.@] + */ GpStatus WINGDIPAPI GdipCombineRegionRegion(GpRegion *region1, GpRegion *region2, CombineMode mode) { @@ -544,6 +547,9 @@ GpStatus WINGDIPAPI GdipCreateRegionRect(GDIPCONST GpRectF *rect, return Ok; } +/***************************************************************************** + * GdipCreateRegionRectI [GDIPLUS.@] + */ GpStatus WINGDIPAPI GdipCreateRegionRectI(GDIPCONST GpRect *rect, GpRegion **region) { @@ -621,6 +627,9 @@ GpStatus WINGDIPAPI GdipCreateRegionHrgn(HRGN hrgn, GpRegion **region) return stat; } +/***************************************************************************** + * GdipDeleteRegion [GDIPLUS.@] + */ GpStatus WINGDIPAPI GdipDeleteRegion(GpRegion *region) { TRACE("%p\n", region); @@ -799,7 +808,7 @@ static void write_element(const region_element* element, DWORD *buffer, * * RETURNS * SUCCESS: Ok - * FAILURE: InvalidParamter + * FAILURE: InvalidParameter * * NOTES * The header contains the size, a checksum, a version string, and the number diff --git a/reactos/dll/win32/hhctrl.ocx/hhctrl.c b/reactos/dll/win32/hhctrl.ocx/hhctrl.c index a224b64e1e5..5e707b92560 100644 --- a/reactos/dll/win32/hhctrl.ocx/hhctrl.c +++ b/reactos/dll/win32/hhctrl.ocx/hhctrl.c @@ -249,11 +249,28 @@ HWND WINAPI HtmlHelpA(HWND caller, LPCSTR filename, UINT command, DWORD_PTR data int WINAPI doWinMain(HINSTANCE hInstance, LPSTR szCmdLine) { MSG msg; + int len, buflen; + WCHAR *filename; + char *endq = NULL; hh_process = TRUE; /* FIXME: Check szCmdLine for bad arguments */ - HtmlHelpA(GetDesktopWindow(), szCmdLine, HH_DISPLAY_TOPIC, 0); + if (*szCmdLine == '\"') + endq = strchr(++szCmdLine, '\"'); + + if (endq) + len = endq - szCmdLine; + else + len = strlen(szCmdLine); + buflen = MultiByteToWideChar(CP_ACP, 0, szCmdLine, len, NULL, 0) + 1; + filename = heap_alloc(buflen * sizeof(WCHAR)); + MultiByteToWideChar(CP_ACP, 0, szCmdLine, len, filename, buflen); + filename[buflen-1] = 0; + + HtmlHelpW(GetDesktopWindow(), filename, HH_DISPLAY_TOPIC, 0); + + heap_free(filename); while (GetMessageW(&msg, 0, 0, 0)) { diff --git a/reactos/dll/win32/inetcomm/inetcomm.rbuild b/reactos/dll/win32/inetcomm/inetcomm.rbuild index ecdc10c94e8..e47321ffaa9 100644 --- a/reactos/dll/win32/inetcomm/inetcomm.rbuild +++ b/reactos/dll/win32/inetcomm/inetcomm.rbuild @@ -1,7 +1,7 @@ - + . diff --git a/reactos/dll/win32/inetcomm/inetcomm_private.h b/reactos/dll/win32/inetcomm/inetcomm_private.h index 1d752c0d831..533c92658df 100644 --- a/reactos/dll/win32/inetcomm/inetcomm_private.h +++ b/reactos/dll/win32/inetcomm/inetcomm_private.h @@ -61,8 +61,6 @@ HRESULT InternetTransport_DropConnection(InternetTransport *This); HRESULT InternetTransport_GetStatus(InternetTransport *This, IXPSTATUS *pCurrentStatus); HRESULT InternetTransport_ChangeStatus(InternetTransport *This, IXPSTATUS Status); -HRESULT InternetTransport_Read(InternetTransport *This, int cbBuffer, - INETXPORT_COMPLETION_FUNCTION fnCompletion); HRESULT InternetTransport_ReadLine(InternetTransport *This, INETXPORT_COMPLETION_FUNCTION fnCompletion); HRESULT InternetTransport_Write(InternetTransport *This, const char *pvData, diff --git a/reactos/dll/win32/inetcomm/internettransport.c b/reactos/dll/win32/inetcomm/internettransport.c index 7cef414434a..f0499bc19a1 100644 --- a/reactos/dll/win32/inetcomm/internettransport.c +++ b/reactos/dll/win32/inetcomm/internettransport.c @@ -204,29 +204,6 @@ HRESULT InternetTransport_ChangeStatus(InternetTransport *This, IXPSTATUS Status return S_OK; } -HRESULT InternetTransport_Read(InternetTransport *This, int cbBuffer, - INETXPORT_COMPLETION_FUNCTION fnCompletion) -{ - if (This->Status == IXP_DISCONNECTED) - return IXP_E_NOT_CONNECTED; - - if (This->fnCompletion) - return IXP_E_BUSY; - - This->fnCompletion = fnCompletion; - - This->cbBuffer = cbBuffer; - This->pBuffer = HeapAlloc(GetProcessHeap(), 0, This->cbBuffer); - This->iCurrentBufferOffset = 0; - - if (WSAAsyncSelect(This->Socket, This->hwnd, IX_READ, FD_READ) == SOCKET_ERROR) - { - ERR("WSAAsyncSelect failed with error %d\n", WSAGetLastError()); - /* FIXME: handle error */ - } - return S_OK; -} - HRESULT InternetTransport_ReadLine(InternetTransport *This, INETXPORT_COMPLETION_FUNCTION fnCompletion) { diff --git a/reactos/dll/win32/inetcomm/mimeintl.c b/reactos/dll/win32/inetcomm/mimeintl.c index e7cee39b692..6d37147e2bf 100644 --- a/reactos/dll/win32/inetcomm/mimeintl.c +++ b/reactos/dll/win32/inetcomm/mimeintl.c @@ -119,7 +119,7 @@ static HRESULT WINAPI MimeInternat_SetDefaultCharset(IMimeInternational *iface, if(hCharset == NULL) return E_INVALIDARG; /* FIXME check hCharset is valid */ - (void)InterlockedExchangePointer(&This->default_charset, hCharset); + InterlockedExchangePointer(&This->default_charset, hCharset); return S_OK; } @@ -136,7 +136,7 @@ static HRESULT WINAPI MimeInternat_GetDefaultCharset(IMimeInternational *iface, HCHARSET hcs; hr = IMimeInternational_GetCodePageCharset(iface, GetACP(), CHARSET_BODY, &hcs); if(SUCCEEDED(hr)) - (void)InterlockedCompareExchangePointer(&This->default_charset, hcs, NULL); + InterlockedCompareExchangePointer(&This->default_charset, hcs, NULL); } *phCharset = This->default_charset; diff --git a/reactos/dll/win32/inetcomm/mimeole.c b/reactos/dll/win32/inetcomm/mimeole.c index bcc08dc8ac8..871ffa502af 100644 --- a/reactos/dll/win32/inetcomm/mimeole.c +++ b/reactos/dll/win32/inetcomm/mimeole.c @@ -1125,7 +1125,7 @@ HRESULT MimeBody_create(IUnknown *outer, void **obj) body_offsets.cbBodyStart = body_offsets.cbBodyEnd = 0; MimeBody_set_offsets(This, &body_offsets); - *obj = (IMimeBody *)&This->lpVtbl; + *obj = &This->lpVtbl; return S_OK; } @@ -2563,7 +2563,7 @@ HRESULT MimeMessage_create(IUnknown *outer, void **obj) list_init(&This->body_tree); This->next_hbody = (HBODY)1; - *obj = (IMimeMessage *)&This->lpVtbl; + *obj = &This->lpVtbl; return S_OK; } @@ -2774,7 +2774,7 @@ HRESULT MimeSecurity_create(IUnknown *outer, void **obj) This->lpVtbl = &MimeSecurityVtbl; This->refs = 1; - *obj = (IMimeSecurity *)&This->lpVtbl; + *obj = &This->lpVtbl; return S_OK; } diff --git a/reactos/dll/win32/inetcomm/smtptransport.c b/reactos/dll/win32/inetcomm/smtptransport.c index d704525e1ed..91070b65512 100644 --- a/reactos/dll/win32/inetcomm/smtptransport.c +++ b/reactos/dll/win32/inetcomm/smtptransport.c @@ -735,7 +735,7 @@ static HRESULT WINAPI SMTPTransport_CommandMAIL(ISMTPTransport2 *iface, LPSTR ps int len = sizeof(szCommandFormat) - 2 /* "%s" */ + strlen(pszEmailFrom); HRESULT hr; - TRACE("(%s)\n", pszEmailFrom); + TRACE("(%s)\n", debugstr_a(pszEmailFrom)); if (!pszEmailFrom) return E_INVALIDARG; @@ -761,7 +761,7 @@ static HRESULT WINAPI SMTPTransport_CommandRCPT(ISMTPTransport2 *iface, LPSTR ps int len = sizeof(szCommandFormat) - 2 /* "%s" */ + strlen(pszEmailTo); HRESULT hr; - TRACE("(%s)\n", pszEmailTo); + TRACE("(%s)\n", debugstr_a(pszEmailTo)); if (!pszEmailTo) return E_INVALIDARG; @@ -836,7 +836,7 @@ static HRESULT WINAPI SMTPTransport_CommandAUTH(ISMTPTransport2 *iface, int len = sizeof(szCommandFormat) - 2 /* "%s" */ + strlen(pszAuthType); HRESULT hr; - TRACE("(%s)\n", pszAuthType); + TRACE("(%s)\n", debugstr_a(pszAuthType)); if (!pszAuthType) return E_INVALIDARG;