diff --git a/src/tests/kits/interface/flatten_picture/PictureTest.cpp b/src/tests/kits/interface/flatten_picture/PictureTest.cpp index 8cb787e411..336c79b6af 100644 --- a/src/tests/kits/interface/flatten_picture/PictureTest.cpp +++ b/src/tests/kits/interface/flatten_picture/PictureTest.cpp @@ -16,7 +16,7 @@ #define TEST_AND_RETURN(condition, message, result) \ { \ if (condition) { \ - fErrorMessage = message; \ + SetErrorMessage(message); \ return result; \ } \ } @@ -173,6 +173,13 @@ PictureTest::CleanUp() fErrorMessage = ""; } +void +PictureTest::SetErrorMessage(const char *message) +{ + if (fErrorMessage.Length() == 0) + fErrorMessage = message; +} + bool PictureTest::Test(draw_func* func, BRect frame) { @@ -205,8 +212,7 @@ BBitmap * PictureTest::CreateBitmap(draw_func* func, BRect frame) { OffscreenBitmap bitmap(frame, fColorSpace); - if (bitmap.InitCheck() != B_OK) - return NULL; + TEST_AND_RETURN(bitmap.InitCheck() != B_OK, "Offscreen bitmap for direct drawing could not be created!" , NULL); func(bitmap.View(), frame); return bitmap.Copy(); } @@ -215,8 +221,7 @@ BPicture * PictureTest::RecordPicture(draw_func* func, BRect frame) { OffscreenBitmap bitmap(frame, fColorSpace); - if (bitmap.InitCheck() != B_OK) - return NULL; + TEST_AND_RETURN(bitmap.InitCheck() != B_OK, "Offscreen bitmap for picture recording could not be created!" , NULL); BView *view = bitmap.View(); // record @@ -232,8 +237,7 @@ BBitmap * PictureTest::CreateBitmap(BPicture *picture, BRect frame) { OffscreenBitmap bitmap(frame, fColorSpace); - if (bitmap.InitCheck() != B_OK) - return NULL; + TEST_AND_RETURN(bitmap.InitCheck() != B_OK, "Offscreen bitmap for picture drawing could not be created!" , NULL); BView *view = bitmap.View(); view->DrawPicture(picture); @@ -265,15 +269,13 @@ FlattenPictureTest::SaveAndRestore(BPicture *picture) { BMallocIO *data = new BMallocIO(); AutoDelete _data(data); - if (data == NULL) - return NULL; + TEST_AND_RETURN(data == NULL, "BMallocIO could not be allocated for flattening the picture!" , NULL); picture->Flatten(data); data->Seek(0, SEEK_SET); BPicture *archivedPicture = new BPicture(); - if (archivedPicture == NULL) - return NULL; + TEST_AND_RETURN(archivedPicture == NULL, "BPicture could not be allocated for unflattening the picture!" , NULL); archivedPicture->Unflatten(data); return archivedPicture; @@ -287,13 +289,16 @@ BPicture * ArchivePictureTest::SaveAndRestore(BPicture *picture) { BMessage archive; - if (picture->Archive(&archive) != B_OK) - return NULL; + TEST_AND_RETURN(picture->Archive(&archive) != B_OK, "Picture could not be archived to BMessage", NULL); - BPicture *archivedPicture = new BPicture(&archive); - if (archivedPicture == NULL) - return NULL; + BArchivable *archivable = BPicture::Instantiate(&archive); + AutoDelete _archivable(archivable); + TEST_AND_RETURN(archivable == NULL, "Picture could not be instantiated from BMessage", NULL); + + BPicture *archivedPicture = dynamic_cast(archivable); + TEST_AND_RETURN(archivedPicture == NULL, "Picture could not be restored from BMessage", NULL); + _archivable.Release(); return archivedPicture; } diff --git a/src/tests/kits/interface/flatten_picture/PictureTest.h b/src/tests/kits/interface/flatten_picture/PictureTest.h index 844e3b7361..d6f6072041 100644 --- a/src/tests/kits/interface/flatten_picture/PictureTest.h +++ b/src/tests/kits/interface/flatten_picture/PictureTest.h @@ -32,6 +32,7 @@ public: protected: virtual BPicture *SaveAndRestore(BPicture *picture) = 0; + void SetErrorMessage(const char* message); private: diff --git a/src/tests/kits/interface/flatten_picture/PictureTestCases.cpp b/src/tests/kits/interface/flatten_picture/PictureTestCases.cpp index 657ab926f5..6708e23b8d 100644 --- a/src/tests/kits/interface/flatten_picture/PictureTestCases.cpp +++ b/src/tests/kits/interface/flatten_picture/PictureTestCases.cpp @@ -315,22 +315,72 @@ static void testInvertRect(BView *view, BRect frame) view->InvertRect(frame); } -static void testBitmap(BView *view, BRect frame) { - BBitmap bitmap(frame, B_RGBA32); - for (int32 y = 0; y < bitmap.Bounds().IntegerHeight(); y ++) { - for (int32 x = 0; x < bitmap.Bounds().IntegerWidth(); x ++) { +static bool isBorder(int32 x, int32 y, int32 width, int32 height) { + return x == 0 || y == 0 || x == width - 1 || y == height - 1; +} + +static void fillBitmap(BBitmap &bitmap) { + int32 height = bitmap.Bounds().IntegerHeight()+1; + int32 width = bitmap.Bounds().IntegerWidth()+1; + for (int32 y = 0; y < height; y ++) { + for (int32 x = 0; x < width; x ++) { char *pixel = (char*)bitmap.Bits(); pixel += bitmap.BytesPerRow() * y + 4 * x; - // fill with blue - pixel[0] = 255; - pixel[1] = 0; - pixel[2] = 0; - pixel[3] = 255; + if (isBorder(x, y, width, height)) { + // fill with green + pixel[0] = 255; + pixel[1] = 0; + pixel[2] = 255; + pixel[3] = 0; + } else { + // fill with blue + pixel[0] = 255; + pixel[1] = 0; + pixel[2] = 0; + pixel[3] = 255; + } } } +} + +static void testDrawBitmap(BView *view, BRect frame) { + BBitmap bitmap(frame, B_RGBA32); + fillBitmap(bitmap); view->DrawBitmap(&bitmap, BPoint(0, 0)); } +static void testDrawBitmapAtPoint(BView *view, BRect frame) { + frame.InsetBy(2, 2); + + BRect bounds(frame); + bounds.OffsetTo(0, 0); + bounds.right /= 2; + bounds.bottom /= 2; + + BBitmap bitmap(bounds, B_RGBA32); + fillBitmap(bitmap); + view->DrawBitmap(&bitmap, centerPoint(frame)); +} + +static void testDrawBitmapAtRect(BView *view, BRect frame) { + BRect bounds(frame); + BBitmap bitmap(bounds, B_RGBA32); + fillBitmap(bitmap); + frame.InsetBy(2, 2); + view->DrawBitmap(&bitmap, frame); +} + +static void testDrawLargeBitmap(BView *view, BRect frame) { + BRect bounds(frame); + bounds.OffsetTo(0, 0); + bounds.left = 1024; + bounds.bottom = 767; + BBitmap bitmap(bounds, B_RGBA32); + fillBitmap(bitmap); + frame.InsetBy(2, 2); + view->DrawBitmap(&bitmap, frame); +} + static void testConstrainClippingRegion(BView *view, BRect frame) { frame.InsetBy(2, 2); @@ -672,7 +722,10 @@ TestCase gTestCases[] = { { "Test AppendToPicture", testAppendToPicture }, { "Test LineArray", testLineArray }, { "Test InvertRect", testInvertRect }, - { "Test Bitmap", testBitmap }, + { "Test DrawBitmap", testDrawBitmap }, + { "Test DrawBitmapAtPoint", testDrawBitmapAtPoint }, + { "Test DrawBitmapAtRect", testDrawBitmapAtRect }, + { "Test DrawDrawLargeBitmap", testDrawLargeBitmap }, { "Test ConstrainClippingRegion", testConstrainClippingRegion }, { "Test ClipToPicture", testClipToPicture }, { "Test ClipToInversePicture", testClipToInversePicture },