From 31f3120815721c36b3f31a66e91a564aa3c5165b Mon Sep 17 00:00:00 2001 From: Henri Verbeet Date: Fri, 6 Jan 2012 11:20:05 +0100 Subject: [PATCH] ddraw: Convert to integer before adjusting the clipped source rect. This makes a difference for the bottom and right edges, and we could end up with an empty source rectangle otherwise. --- dlls/ddraw/surface.c | 8 ++++---- dlls/ddraw/tests/ddraw1.c | 10 +++------- dlls/ddraw/tests/ddraw2.c | 10 +++------- dlls/ddraw/tests/ddraw4.c | 10 +++------- dlls/ddraw/tests/ddraw7.c | 10 +++------- 5 files changed, 16 insertions(+), 32 deletions(-) diff --git a/dlls/ddraw/surface.c b/dlls/ddraw/surface.c index 0b9248c99d0..6069da7f3f9 100644 --- a/dlls/ddraw/surface.c +++ b/dlls/ddraw/surface.c @@ -1361,10 +1361,10 @@ static HRESULT ddraw_surface_blt_clipped(IDirectDrawSurfaceImpl *dst_surface, co if (src_surface) { - src_rect_clipped.left += (clip_rect[i].left - dst_rect.left) * scale_x; - src_rect_clipped.top += (clip_rect[i].top - dst_rect.top) * scale_y; - src_rect_clipped.right -= (dst_rect.right - clip_rect[i].right) * scale_x; - src_rect_clipped.bottom -= (dst_rect.bottom - clip_rect[i].bottom) * scale_y; + src_rect_clipped.left += (LONG)((clip_rect[i].left - dst_rect.left) * scale_x); + src_rect_clipped.top += (LONG)((clip_rect[i].top - dst_rect.top) * scale_y); + src_rect_clipped.right -= (LONG)((dst_rect.right - clip_rect[i].right) * scale_x); + src_rect_clipped.bottom -= (LONG)((dst_rect.bottom - clip_rect[i].bottom) * scale_y); if (src_surface->surface_desc.ddsCaps.dwCaps & DDSCAPS_FRONTBUFFER) { diff --git a/dlls/ddraw/tests/ddraw1.c b/dlls/ddraw/tests/ddraw1.c index 7275df65207..09d632a0b39 100644 --- a/dlls/ddraw/tests/ddraw1.c +++ b/dlls/ddraw/tests/ddraw1.c @@ -297,7 +297,7 @@ static void test_clipper_blt(void) SetRect(&src_rect, 0, 0, 4, 1); hr = IDirectDrawSurface_Blt(dst_surface, NULL, src_surface, &src_rect, DDBLT_WAIT, NULL); - todo_wine ok(SUCCEEDED(hr), "Failed to blit, hr %#x.\n", hr); + ok(SUCCEEDED(hr), "Failed to blit, hr %#x.\n", hr); for (i = 0; i < 4; ++i) { for (j = 0; j < 4; ++j) @@ -305,12 +305,8 @@ static void test_clipper_blt(void) x = 80 * ((2 * j) + 1); y = 60 * ((2 * i) + 1); color = get_surface_color(dst_surface, x, y); - if ((i < 2 && j < 2) || (i >= 2 && j >= 2)) - todo_wine ok(compare_color(color, expected1[i * 4 + j], 1), - "Expected color 0x%08x at %u,%u, got 0x%08x.\n", expected1[i * 4 + j], x, y, color); - else - ok(compare_color(color, expected1[i * 4 + j], 1), - "Expected color 0x%08x at %u,%u, got 0x%08x.\n", expected1[i * 4 + j], x, y, color); + ok(compare_color(color, expected1[i * 4 + j], 1), + "Expected color 0x%08x at %u,%u, got 0x%08x.\n", expected1[i * 4 + j], x, y, color); } } diff --git a/dlls/ddraw/tests/ddraw2.c b/dlls/ddraw/tests/ddraw2.c index 71a57a8ba62..7ffa977308a 100644 --- a/dlls/ddraw/tests/ddraw2.c +++ b/dlls/ddraw/tests/ddraw2.c @@ -304,7 +304,7 @@ static void test_clipper_blt(void) SetRect(&src_rect, 0, 0, 4, 1); hr = IDirectDrawSurface_Blt(dst_surface, NULL, src_surface, &src_rect, DDBLT_WAIT, NULL); - todo_wine ok(SUCCEEDED(hr), "Failed to blit, hr %#x.\n", hr); + ok(SUCCEEDED(hr), "Failed to blit, hr %#x.\n", hr); for (i = 0; i < 4; ++i) { for (j = 0; j < 4; ++j) @@ -312,12 +312,8 @@ static void test_clipper_blt(void) x = 80 * ((2 * j) + 1); y = 60 * ((2 * i) + 1); color = get_surface_color(dst_surface, x, y); - if ((i < 2 && j < 2) || (i >= 2 && j >= 2)) - todo_wine ok(compare_color(color, expected1[i * 4 + j], 1), - "Expected color 0x%08x at %u,%u, got 0x%08x.\n", expected1[i * 4 + j], x, y, color); - else - ok(compare_color(color, expected1[i * 4 + j], 1), - "Expected color 0x%08x at %u,%u, got 0x%08x.\n", expected1[i * 4 + j], x, y, color); + ok(compare_color(color, expected1[i * 4 + j], 1), + "Expected color 0x%08x at %u,%u, got 0x%08x.\n", expected1[i * 4 + j], x, y, color); } } diff --git a/dlls/ddraw/tests/ddraw4.c b/dlls/ddraw/tests/ddraw4.c index db8d005b13d..68448d13c5e 100644 --- a/dlls/ddraw/tests/ddraw4.c +++ b/dlls/ddraw/tests/ddraw4.c @@ -599,7 +599,7 @@ static void test_clipper_blt(void) SetRect(&src_rect, 0, 0, 4, 1); hr = IDirectDrawSurface4_Blt(dst_surface, NULL, src_surface, &src_rect, DDBLT_WAIT, NULL); - todo_wine ok(SUCCEEDED(hr), "Failed to blit, hr %#x.\n", hr); + ok(SUCCEEDED(hr), "Failed to blit, hr %#x.\n", hr); for (i = 0; i < 4; ++i) { for (j = 0; j < 4; ++j) @@ -607,12 +607,8 @@ static void test_clipper_blt(void) x = 80 * ((2 * j) + 1); y = 60 * ((2 * i) + 1); color = get_surface_color(dst_surface, x, y); - if ((i < 2 && j < 2) || (i >= 2 && j >= 2)) - todo_wine ok(compare_color(color, expected1[i * 4 + j], 1), - "Expected color 0x%08x at %u,%u, got 0x%08x.\n", expected1[i * 4 + j], x, y, color); - else - ok(compare_color(color, expected1[i * 4 + j], 1), - "Expected color 0x%08x at %u,%u, got 0x%08x.\n", expected1[i * 4 + j], x, y, color); + ok(compare_color(color, expected1[i * 4 + j], 1), + "Expected color 0x%08x at %u,%u, got 0x%08x.\n", expected1[i * 4 + j], x, y, color); } } diff --git a/dlls/ddraw/tests/ddraw7.c b/dlls/ddraw/tests/ddraw7.c index 630247b83f8..d434c94a363 100644 --- a/dlls/ddraw/tests/ddraw7.c +++ b/dlls/ddraw/tests/ddraw7.c @@ -592,7 +592,7 @@ static void test_clipper_blt(void) SetRect(&src_rect, 0, 0, 4, 1); hr = IDirectDrawSurface7_Blt(dst_surface, NULL, src_surface, &src_rect, DDBLT_WAIT, NULL); - todo_wine ok(SUCCEEDED(hr), "Failed to blit, hr %#x.\n", hr); + ok(SUCCEEDED(hr), "Failed to blit, hr %#x.\n", hr); for (i = 0; i < 4; ++i) { for (j = 0; j < 4; ++j) @@ -600,12 +600,8 @@ static void test_clipper_blt(void) x = 80 * ((2 * j) + 1); y = 60 * ((2 * i) + 1); color = get_surface_color(dst_surface, x, y); - if ((i < 2 && j < 2) || (i >= 2 && j >= 2)) - todo_wine ok(compare_color(color, expected1[i * 4 + j], 1), - "Expected color 0x%08x at %u,%u, got 0x%08x.\n", expected1[i * 4 + j], x, y, color); - else - ok(compare_color(color, expected1[i * 4 + j], 1), - "Expected color 0x%08x at %u,%u, got 0x%08x.\n", expected1[i * 4 + j], x, y, color); + ok(compare_color(color, expected1[i * 4 + j], 1), + "Expected color 0x%08x at %u,%u, got 0x%08x.\n", expected1[i * 4 + j], x, y, color); } }