You should probably use a Bitmap object rather than the display for this, since the pixel format is important. That should make it possible to test other depths, even though they can't yet be implemented properly in Wine.
Also, you should mark tests that fail in wine with todo_wine and remove the todo_wine in any subsequent patches that fix them.
On Tue, Feb 23, 2010 at 8:56 PM, Justin Chevrier jchevrier@gmail.com wrote:
dlls/gdiplus/tests/graphics.c | 45 +++++++++++++++++++++++++++++++++++++++++ 1 files changed, 45 insertions(+), 0 deletions(-)
diff --git a/dlls/gdiplus/tests/graphics.c b/dlls/gdiplus/tests/graphics.c index 45bd9f7..97c520d 100644 --- a/dlls/gdiplus/tests/graphics.c +++ b/dlls/gdiplus/tests/graphics.c @@ -21,6 +21,7 @@ #include "windows.h" #include "gdiplus.h" #include "wingdi.h" +#include "winuser.h" #include "wine/test.h" #include <math.h>
@@ -2270,6 +2271,49 @@ static void test_GdipIsVisibleRect(void) ReleaseDC(0, hdc); }
+static void test_GdipGetNearestColor(void) +{
- GpStatus status;
- GpGraphics *graphics = NULL;
- ARGB color = 0xdeadbeef;
- HDC hdc = GetDC(0);
- DEVMODEA dmA;
- BOOL ret;
- /* create a graphics object */
- ok(hdc != NULL, "Expected HDC to be initialized\n");
- status = GdipCreateFromHDC(hdc, &graphics);
- expect(Ok, status);
- ok(graphics != NULL, "Expected graphics to be initialized\n");
- status = GdipGetNearestColor(graphics, NULL);
- expect(InvalidParameter, status);
- status = GdipGetNearestColor(NULL, &color);
- expect(InvalidParameter, status);
- ret = EnumDisplaySettingsA(NULL, ENUM_CURRENT_SETTINGS, &dmA);
- if (!ret)
- {
- skip("Could not determine color depth\n");
- goto end;
- }
- if (dmA.dmBitsPerPel >= 24)
- {
- status = GdipGetNearestColor(graphics, &color);
- expect(Ok, status);
- ok(color == 0xdeadbeef, "expected 0xdeadbeef, got: 0x%08x\n", color);
- }
- else
- skip("Color depth less than 24bpp.\n");
- end:
- GdipDeleteGraphics(graphics);
- ReleaseDC(0, hdc);
+}
START_TEST(graphics) { struct GdiplusStartupInput gdiplusStartupInput; @@ -2296,6 +2340,7 @@ START_TEST(graphics) test_GdipDrawLineI(); test_GdipDrawLinesI(); test_GdipDrawString();
- test_GdipGetNearestColor();
test_GdipGetVisibleClipBounds(); test_GdipIsVisiblePoint(); test_GdipIsVisibleRect(); -- 1.6.5.rc1
Thanks for reviewing the patch Vincent!
I'm reworking the test to use bitmaps but I've run into a problem. I'm using GdipGetImageGraphicsContext to convert from a bitmap to a graphic, this works fine at 16bpp and higher, but below that it returns OutOfMemory on Window (seems that this function doesn't accept palettized images). Thoughts on how to test at these color depths?
Justin
On Tue, Feb 23, 2010 at 10:55 PM, Vincent Povirk madewokherd+8cd9@gmail.com wrote:
You should probably use a Bitmap object rather than the display for this, since the pixel format is important. That should make it possible to test other depths, even though they can't yet be implemented properly in Wine.
Also, you should mark tests that fail in wine with todo_wine and remove the todo_wine in any subsequent patches that fix them.
On Tue, Feb 23, 2010 at 8:56 PM, Justin Chevrier jchevrier@gmail.com wrote:
dlls/gdiplus/tests/graphics.c | 45 +++++++++++++++++++++++++++++++++++++++++ 1 files changed, 45 insertions(+), 0 deletions(-)
diff --git a/dlls/gdiplus/tests/graphics.c b/dlls/gdiplus/tests/graphics.c index 45bd9f7..97c520d 100644 --- a/dlls/gdiplus/tests/graphics.c +++ b/dlls/gdiplus/tests/graphics.c @@ -21,6 +21,7 @@ #include "windows.h" #include "gdiplus.h" #include "wingdi.h" +#include "winuser.h" #include "wine/test.h" #include <math.h>
@@ -2270,6 +2271,49 @@ static void test_GdipIsVisibleRect(void) ReleaseDC(0, hdc); }
+static void test_GdipGetNearestColor(void) +{
- GpStatus status;
- GpGraphics *graphics = NULL;
- ARGB color = 0xdeadbeef;
- HDC hdc = GetDC(0);
- DEVMODEA dmA;
- BOOL ret;
- /* create a graphics object */
- ok(hdc != NULL, "Expected HDC to be initialized\n");
- status = GdipCreateFromHDC(hdc, &graphics);
- expect(Ok, status);
- ok(graphics != NULL, "Expected graphics to be initialized\n");
- status = GdipGetNearestColor(graphics, NULL);
- expect(InvalidParameter, status);
- status = GdipGetNearestColor(NULL, &color);
- expect(InvalidParameter, status);
- ret = EnumDisplaySettingsA(NULL, ENUM_CURRENT_SETTINGS, &dmA);
- if (!ret)
- {
- skip("Could not determine color depth\n");
- goto end;
- }
- if (dmA.dmBitsPerPel >= 24)
- {
- status = GdipGetNearestColor(graphics, &color);
- expect(Ok, status);
- ok(color == 0xdeadbeef, "expected 0xdeadbeef, got: 0x%08x\n", color);
- }
- else
- skip("Color depth less than 24bpp.\n");
- end:
- GdipDeleteGraphics(graphics);
- ReleaseDC(0, hdc);
+}
START_TEST(graphics) { struct GdiplusStartupInput gdiplusStartupInput; @@ -2296,6 +2340,7 @@ START_TEST(graphics) test_GdipDrawLineI(); test_GdipDrawLinesI(); test_GdipDrawString();
- test_GdipGetNearestColor();
test_GdipGetVisibleClipBounds(); test_GdipIsVisiblePoint(); test_GdipIsVisibleRect(); -- 1.6.5.rc1
Well, that's interesting.
It would be worth trying your test on Windows 7, as some other problems with paletted images were fixed in that version.
You could also try creating an 8-bit device-independent bitmap using gdi32 and selecting it into a compatible DC.
On Wed, Feb 24, 2010 at 6:29 PM, Justin Chevrier jchevrier@gmail.com wrote:
Thanks for reviewing the patch Vincent!
I'm reworking the test to use bitmaps but I've run into a problem. I'm using GdipGetImageGraphicsContext to convert from a bitmap to a graphic, this works fine at 16bpp and higher, but below that it returns OutOfMemory on Window (seems that this function doesn't accept palettized images). Thoughts on how to test at these color depths?
Justin
On Tue, Feb 23, 2010 at 10:55 PM, Vincent Povirk madewokherd+8cd9@gmail.com wrote:
You should probably use a Bitmap object rather than the display for this, since the pixel format is important. That should make it possible to test other depths, even though they can't yet be implemented properly in Wine.
Also, you should mark tests that fail in wine with todo_wine and remove the todo_wine in any subsequent patches that fix them.
On Tue, Feb 23, 2010 at 8:56 PM, Justin Chevrier jchevrier@gmail.com wrote:
dlls/gdiplus/tests/graphics.c | 45 +++++++++++++++++++++++++++++++++++++++++ 1 files changed, 45 insertions(+), 0 deletions(-)
diff --git a/dlls/gdiplus/tests/graphics.c b/dlls/gdiplus/tests/graphics.c index 45bd9f7..97c520d 100644 --- a/dlls/gdiplus/tests/graphics.c +++ b/dlls/gdiplus/tests/graphics.c @@ -21,6 +21,7 @@ #include "windows.h" #include "gdiplus.h" #include "wingdi.h" +#include "winuser.h" #include "wine/test.h" #include <math.h>
@@ -2270,6 +2271,49 @@ static void test_GdipIsVisibleRect(void) ReleaseDC(0, hdc); }
+static void test_GdipGetNearestColor(void) +{
- GpStatus status;
- GpGraphics *graphics = NULL;
- ARGB color = 0xdeadbeef;
- HDC hdc = GetDC(0);
- DEVMODEA dmA;
- BOOL ret;
- /* create a graphics object */
- ok(hdc != NULL, "Expected HDC to be initialized\n");
- status = GdipCreateFromHDC(hdc, &graphics);
- expect(Ok, status);
- ok(graphics != NULL, "Expected graphics to be initialized\n");
- status = GdipGetNearestColor(graphics, NULL);
- expect(InvalidParameter, status);
- status = GdipGetNearestColor(NULL, &color);
- expect(InvalidParameter, status);
- ret = EnumDisplaySettingsA(NULL, ENUM_CURRENT_SETTINGS, &dmA);
- if (!ret)
- {
- skip("Could not determine color depth\n");
- goto end;
- }
- if (dmA.dmBitsPerPel >= 24)
- {
- status = GdipGetNearestColor(graphics, &color);
- expect(Ok, status);
- ok(color == 0xdeadbeef, "expected 0xdeadbeef, got: 0x%08x\n", color);
- }
- else
- skip("Color depth less than 24bpp.\n");
- end:
- GdipDeleteGraphics(graphics);
- ReleaseDC(0, hdc);
+}
START_TEST(graphics) { struct GdiplusStartupInput gdiplusStartupInput; @@ -2296,6 +2340,7 @@ START_TEST(graphics) test_GdipDrawLineI(); test_GdipDrawLinesI(); test_GdipDrawString();
- test_GdipGetNearestColor();
test_GdipGetVisibleClipBounds(); test_GdipIsVisiblePoint(); test_GdipIsVisibleRect(); -- 1.6.5.rc1
I tried creating a DIB, then converting it to a GpBitmap via: GdipCreateBitmapFromHBITMAP and piping that into GdipGetImageGraphicsContext with the same result. I also tried selecting the DIB and sending the DC into GdipCreateFromHDC, same deal. Maybe you're talking about doing something else though.
I don't have Windows 7 here, what's the easiest way to test that out? Get the test committed leaving the test expecting OutOfMemory and see if Win7 returns something else?
Justin
On Wed, Feb 24, 2010 at 8:12 PM, Vincent Povirk madewokherd+8cd9@gmail.com wrote:
Well, that's interesting.
It would be worth trying your test on Windows 7, as some other problems with paletted images were fixed in that version.
You could also try creating an 8-bit device-independent bitmap using gdi32 and selecting it into a compatible DC.
On Wed, Feb 24, 2010 at 6:29 PM, Justin Chevrier jchevrier@gmail.com wrote:
Thanks for reviewing the patch Vincent!
I'm reworking the test to use bitmaps but I've run into a problem. I'm using GdipGetImageGraphicsContext to convert from a bitmap to a graphic, this works fine at 16bpp and higher, but below that it returns OutOfMemory on Window (seems that this function doesn't accept palettized images). Thoughts on how to test at these color depths?
Justin
On Tue, Feb 23, 2010 at 10:55 PM, Vincent Povirk madewokherd+8cd9@gmail.com wrote:
You should probably use a Bitmap object rather than the display for this, since the pixel format is important. That should make it possible to test other depths, even though they can't yet be implemented properly in Wine.
Also, you should mark tests that fail in wine with todo_wine and remove the todo_wine in any subsequent patches that fix them.
On Tue, Feb 23, 2010 at 8:56 PM, Justin Chevrier jchevrier@gmail.com wrote:
dlls/gdiplus/tests/graphics.c | 45 +++++++++++++++++++++++++++++++++++++++++ 1 files changed, 45 insertions(+), 0 deletions(-)
diff --git a/dlls/gdiplus/tests/graphics.c b/dlls/gdiplus/tests/graphics.c index 45bd9f7..97c520d 100644 --- a/dlls/gdiplus/tests/graphics.c +++ b/dlls/gdiplus/tests/graphics.c @@ -21,6 +21,7 @@ #include "windows.h" #include "gdiplus.h" #include "wingdi.h" +#include "winuser.h" #include "wine/test.h" #include <math.h>
@@ -2270,6 +2271,49 @@ static void test_GdipIsVisibleRect(void) ReleaseDC(0, hdc); }
+static void test_GdipGetNearestColor(void) +{
- GpStatus status;
- GpGraphics *graphics = NULL;
- ARGB color = 0xdeadbeef;
- HDC hdc = GetDC(0);
- DEVMODEA dmA;
- BOOL ret;
- /* create a graphics object */
- ok(hdc != NULL, "Expected HDC to be initialized\n");
- status = GdipCreateFromHDC(hdc, &graphics);
- expect(Ok, status);
- ok(graphics != NULL, "Expected graphics to be initialized\n");
- status = GdipGetNearestColor(graphics, NULL);
- expect(InvalidParameter, status);
- status = GdipGetNearestColor(NULL, &color);
- expect(InvalidParameter, status);
- ret = EnumDisplaySettingsA(NULL, ENUM_CURRENT_SETTINGS, &dmA);
- if (!ret)
- {
- skip("Could not determine color depth\n");
- goto end;
- }
- if (dmA.dmBitsPerPel >= 24)
- {
- status = GdipGetNearestColor(graphics, &color);
- expect(Ok, status);
- ok(color == 0xdeadbeef, "expected 0xdeadbeef, got: 0x%08x\n", color);
- }
- else
- skip("Color depth less than 24bpp.\n");
- end:
- GdipDeleteGraphics(graphics);
- ReleaseDC(0, hdc);
+}
START_TEST(graphics) { struct GdiplusStartupInput gdiplusStartupInput; @@ -2296,6 +2340,7 @@ START_TEST(graphics) test_GdipDrawLineI(); test_GdipDrawLinesI(); test_GdipDrawString();
- test_GdipGetNearestColor();
test_GdipGetVisibleClipBounds(); test_GdipIsVisiblePoint(); test_GdipIsVisibleRect(); -- 1.6.5.rc1
If you send me a patch for the test, I'll run it on Windows 7.
Also, there's https://winetestbot.geldorp.nl/
On Wed, Feb 24, 2010 at 8:48 PM, Justin Chevrier jchevrier@gmail.com wrote:
I tried creating a DIB, then converting it to a GpBitmap via: GdipCreateBitmapFromHBITMAP and piping that into GdipGetImageGraphicsContext with the same result. I also tried selecting the DIB and sending the DC into GdipCreateFromHDC, same deal. Maybe you're talking about doing something else though.
I don't have Windows 7 here, what's the easiest way to test that out? Get the test committed leaving the test expecting OutOfMemory and see if Win7 returns something else?
Justin
On Wed, Feb 24, 2010 at 8:12 PM, Vincent Povirk madewokherd+8cd9@gmail.com wrote:
Well, that's interesting.
It would be worth trying your test on Windows 7, as some other problems with paletted images were fixed in that version.
You could also try creating an 8-bit device-independent bitmap using gdi32 and selecting it into a compatible DC.
On Wed, Feb 24, 2010 at 6:29 PM, Justin Chevrier jchevrier@gmail.com wrote:
Thanks for reviewing the patch Vincent!
I'm reworking the test to use bitmaps but I've run into a problem. I'm using GdipGetImageGraphicsContext to convert from a bitmap to a graphic, this works fine at 16bpp and higher, but below that it returns OutOfMemory on Window (seems that this function doesn't accept palettized images). Thoughts on how to test at these color depths?
Justin
On Tue, Feb 23, 2010 at 10:55 PM, Vincent Povirk madewokherd+8cd9@gmail.com wrote:
You should probably use a Bitmap object rather than the display for this, since the pixel format is important. That should make it possible to test other depths, even though they can't yet be implemented properly in Wine.
Also, you should mark tests that fail in wine with todo_wine and remove the todo_wine in any subsequent patches that fix them.
On Tue, Feb 23, 2010 at 8:56 PM, Justin Chevrier jchevrier@gmail.com wrote:
dlls/gdiplus/tests/graphics.c | 45 +++++++++++++++++++++++++++++++++++++++++ 1 files changed, 45 insertions(+), 0 deletions(-)
diff --git a/dlls/gdiplus/tests/graphics.c b/dlls/gdiplus/tests/graphics.c index 45bd9f7..97c520d 100644 --- a/dlls/gdiplus/tests/graphics.c +++ b/dlls/gdiplus/tests/graphics.c @@ -21,6 +21,7 @@ #include "windows.h" #include "gdiplus.h" #include "wingdi.h" +#include "winuser.h" #include "wine/test.h" #include <math.h>
@@ -2270,6 +2271,49 @@ static void test_GdipIsVisibleRect(void) ReleaseDC(0, hdc); }
+static void test_GdipGetNearestColor(void) +{
- GpStatus status;
- GpGraphics *graphics = NULL;
- ARGB color = 0xdeadbeef;
- HDC hdc = GetDC(0);
- DEVMODEA dmA;
- BOOL ret;
- /* create a graphics object */
- ok(hdc != NULL, "Expected HDC to be initialized\n");
- status = GdipCreateFromHDC(hdc, &graphics);
- expect(Ok, status);
- ok(graphics != NULL, "Expected graphics to be initialized\n");
- status = GdipGetNearestColor(graphics, NULL);
- expect(InvalidParameter, status);
- status = GdipGetNearestColor(NULL, &color);
- expect(InvalidParameter, status);
- ret = EnumDisplaySettingsA(NULL, ENUM_CURRENT_SETTINGS, &dmA);
- if (!ret)
- {
- skip("Could not determine color depth\n");
- goto end;
- }
- if (dmA.dmBitsPerPel >= 24)
- {
- status = GdipGetNearestColor(graphics, &color);
- expect(Ok, status);
- ok(color == 0xdeadbeef, "expected 0xdeadbeef, got: 0x%08x\n", color);
- }
- else
- skip("Color depth less than 24bpp.\n");
- end:
- GdipDeleteGraphics(graphics);
- ReleaseDC(0, hdc);
+}
START_TEST(graphics) { struct GdiplusStartupInput gdiplusStartupInput; @@ -2296,6 +2340,7 @@ START_TEST(graphics) test_GdipDrawLineI(); test_GdipDrawLinesI(); test_GdipDrawString();
- test_GdipGetNearestColor();
test_GdipGetVisibleClipBounds(); test_GdipIsVisiblePoint(); test_GdipIsVisibleRect(); -- 1.6.5.rc1