Christian Costa : mciavi: In MCI, RECT structure is used differently: rc. right = width & rc.bottom = height so do the conversion when needed.
Alexandre Julliard
julliard at winehq.org
Mon Jan 12 10:41:03 CST 2009
Module: wine
Branch: master
Commit: 2322a06dd61677a8af84110ccc6cb41115f7c3e2
URL: http://source.winehq.org/git/wine.git/?a=commit;h=2322a06dd61677a8af84110ccc6cb41115f7c3e2
Author: Christian Costa <titan.costa at wanadoo.fr>
Date: Sun Jan 11 16:45:51 2009 +0100
mciavi: In MCI, RECT structure is used differently: rc.right = width & rc.bottom = height so do the conversion when needed.
---
dlls/mciavi32/wnd.c | 46 +++++++++++++++++++++++++++++-----------------
1 files changed, 29 insertions(+), 17 deletions(-)
diff --git a/dlls/mciavi32/wnd.c b/dlls/mciavi32/wnd.c
index 682a311..36f56e6 100644
--- a/dlls/mciavi32/wnd.c
+++ b/dlls/mciavi32/wnd.c
@@ -158,7 +158,12 @@ DWORD MCIAVI_mciPut(UINT wDevID, DWORD dwFlags, LPMCI_DGV_PUT_PARMS lpParms)
EnterCriticalSection(&wma->cs);
if (dwFlags & MCI_DGV_RECT) {
- rc = lpParms->rc;
+ /* In MCI, RECT structure is used differently: rc.right = width & rc.bottom = height
+ * So convert input MCI RECT into a normal RECT */
+ rc.left = lpParms->rc.left;
+ rc.top = lpParms->rc.top;
+ rc.right = lpParms->rc.left + lpParms->rc.right;
+ rc.bottom = lpParms->rc.top + lpParms->rc.bottom;
} else {
GetClientRect(wma->hWndPaint, &rc);
}
@@ -188,7 +193,7 @@ DWORD MCIAVI_mciPut(UINT wDevID, DWORD dwFlags, LPMCI_DGV_PUT_PARMS lpParms)
}
if (dwFlags & MCI_DGV_PUT_WINDOW) {
TRACE("PUT_WINDOW %s\n", wine_dbgstr_rect(&rc));
- SetWindowPos(wma->hWndPaint, NULL, rc.left, rc.top, rc.right, rc.bottom, SWP_NOZORDER);
+ SetWindowPos(wma->hWndPaint, NULL, rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top, SWP_NOZORDER);
}
LeaveCriticalSection(&wma->cs);
return 0;
@@ -200,6 +205,7 @@ DWORD MCIAVI_mciPut(UINT wDevID, DWORD dwFlags, LPMCI_DGV_PUT_PARMS lpParms)
DWORD MCIAVI_mciWhere(UINT wDevID, DWORD dwFlags, LPMCI_DGV_RECT_PARMS lpParms)
{
WINE_MCIAVI* wma = MCIAVI_mciGetOpenDev(wDevID);
+ RECT rc;
TRACE("(%04x, %08x, %p)\n", wDevID, dwFlags, lpParms);
@@ -210,11 +216,11 @@ DWORD MCIAVI_mciWhere(UINT wDevID, DWORD dwFlags, LPMCI_DGV_RECT_PARMS lpParms)
if (dwFlags & MCI_DGV_WHERE_DESTINATION) {
if (dwFlags & MCI_DGV_WHERE_MAX) {
- GetClientRect(wma->hWndPaint, &lpParms->rc);
- TRACE("WHERE_DESTINATION_MAX %s\n", wine_dbgstr_rect(&lpParms->rc));
+ GetClientRect(wma->hWndPaint, &rc);
+ TRACE("WHERE_DESTINATION_MAX %s\n", wine_dbgstr_rect(&rc));
} else {
TRACE("WHERE_DESTINATION %s\n", wine_dbgstr_rect(&wma->dest));
- lpParms->rc = wma->dest;
+ rc = wma->dest;
}
}
if (dwFlags & MCI_DGV_WHERE_FRAME) {
@@ -227,16 +233,14 @@ DWORD MCIAVI_mciWhere(UINT wDevID, DWORD dwFlags, LPMCI_DGV_RECT_PARMS lpParms)
}
if (dwFlags & MCI_DGV_WHERE_SOURCE) {
if (dwFlags & MCI_DGV_WHERE_MAX) {
- RECT rect;
- rect.left = 0;
- rect.top = 0;
- rect.right = wma->inbih->biWidth;
- rect.bottom = wma->inbih->biHeight;
- TRACE("WHERE_SOURCE_MAX %s\n", wine_dbgstr_rect(&rect));
- lpParms->rc = rect;
+ rc.left = 0;
+ rc.top = 0;
+ rc.right = wma->inbih->biWidth;
+ rc.bottom = wma->inbih->biHeight;
+ TRACE("WHERE_SOURCE_MAX %s\n", wine_dbgstr_rect(&rc));
} else {
TRACE("WHERE_SOURCE %s\n", wine_dbgstr_rect(&wma->source));
- lpParms->rc = wma->source;
+ rc = wma->source;
}
}
if (dwFlags & MCI_DGV_WHERE_VIDEO) {
@@ -249,13 +253,21 @@ DWORD MCIAVI_mciWhere(UINT wDevID, DWORD dwFlags, LPMCI_DGV_RECT_PARMS lpParms)
}
if (dwFlags & MCI_DGV_WHERE_WINDOW) {
if (dwFlags & MCI_DGV_WHERE_MAX) {
- GetWindowRect(GetDesktopWindow(), &lpParms->rc);
- TRACE("WHERE_WINDOW_MAX %s\n", wine_dbgstr_rect(&lpParms->rc));
+ GetWindowRect(GetDesktopWindow(), &rc);
+ TRACE("WHERE_WINDOW_MAX %s\n", wine_dbgstr_rect(&rc));
} else {
- GetWindowRect(wma->hWndPaint, &lpParms->rc);
- TRACE("WHERE_WINDOW %s\n", wine_dbgstr_rect(&lpParms->rc));
+ GetWindowRect(wma->hWndPaint, &rc);
+ TRACE("WHERE_WINDOW %s\n", wine_dbgstr_rect(&rc));
}
}
+
+ /* In MCI, RECT structure is used differently: rc.right = width & rc.bottom = height
+ * So convert the normal RECT into a MCI RECT before returning */
+ lpParms->rc.left = rc.left;
+ lpParms->rc.top = rc.top;
+ lpParms->rc.right = rc.right - rc.left;
+ lpParms->rc.bottom = rc.bottom - rc.top;
+
LeaveCriticalSection(&wma->cs);
return 0;
}
More information about the wine-cvs
mailing list