diff options
Diffstat (limited to 'engines/testbed/graphics.cpp')
-rw-r--r-- | engines/testbed/graphics.cpp | 189 |
1 files changed, 183 insertions, 6 deletions
diff --git a/engines/testbed/graphics.cpp b/engines/testbed/graphics.cpp index c4701982c6..5b3759f2dd 100644 --- a/engines/testbed/graphics.cpp +++ b/engines/testbed/graphics.cpp @@ -1,5 +1,11 @@ +#include "common/events.h" + #include "testbed/graphics.h" -#include "testbed/gfxtests.h" +#include "testbed/testsuite.h" + +#include "graphics/cursorman.h" +#include "graphics/fontman.h" +#include "graphics/surface.h" namespace Testbed { @@ -7,16 +13,16 @@ byte GFXTestSuite::_palette[3 * 4] = {0, 0, 0, 0, 255, 255, 255, 0, 255, 255, 25 GFXTestSuite::GFXTestSuite() { // Initialize color palettes - // Te fourth field is for alpha channel which is unused + // The fourth field is for alpha channel which is unused // Assuming 8bpp as of now g_system->setPalette(_palette, 0, 3); g_system->grabPalette(_palette, 0, 3); // Add tests here - addTest("FullScreenMode", &testFullScreenMode); - addTest("AspectRatio", &testAspectRatio); - addTest("PalettizedCursors", &testPalettizedCursors); - addTest("BlitBitmaps", &testCopyRectToScreen); + addTest("FullScreenMode", &GFXtests::fullScreenMode); + addTest("AspectRatio", &GFXtests::aspectRatio); + addTest("PalettizedCursors", &GFXtests::palettizedCursors); + addTest("BlitBitmaps", &GFXtests::copyRectToScreen); } const char *GFXTestSuite::getName() { @@ -48,4 +54,175 @@ void GFXTestSuite::execute() { genReport(); } +// GFXtests go here + +bool GFXtests::fullScreenMode() { + + Testsuite::displayMessage("Testing fullscreen mode. \n \ + If the feature is supported by the backend, you should expect to see a toggle between fullscreen and normal modes"); + + Common::Point pt(0,100); + Common::Rect rect = Testsuite::writeOnScreen("Testing fullscreen mode", pt); + + bool isFeaturePresent; + bool isFeatureEnabled; + + isFeaturePresent = g_system->hasFeature(OSystem::kFeatureFullscreenMode); + isFeatureEnabled = g_system->getFeatureState(OSystem::kFeatureFullscreenMode); + g_system->delayMillis(1000); + + if (isFeaturePresent) { + // Toggle + + g_system->beginGFXTransaction(); + g_system->setFeatureState(OSystem::kFeatureFullscreenMode, !isFeatureEnabled); + g_system->endGFXTransaction(); + + g_system->delayMillis(1000); + + g_system->beginGFXTransaction(); + g_system->setFeatureState(OSystem::kFeatureFullscreenMode, isFeatureEnabled); + g_system->endGFXTransaction(); + } + else { + Testsuite::displayMessage("feature not supported"); + } + + Testsuite::clearScreen(rect); + return true; +} + +bool GFXtests::aspectRatio() { + Testsuite::displayMessage("Testing Aspect Ratio Correction.\n" + "With this feature enabled games running at 320x200 should be scaled upto 320x240 pixels"); + + Common::Point pt(0,100); + Common::Rect rect = Testsuite::writeOnScreen("Testing Aspect ratio correction", pt); + + bool isFeaturePresent; + bool isFeatureEnabled; + + isFeaturePresent = g_system->hasFeature(OSystem::kFeatureAspectRatioCorrection); + isFeatureEnabled = g_system->getFeatureState(OSystem::kFeatureAspectRatioCorrection); + g_system->delayMillis(1000); + + if (isFeaturePresent) { + // Toggle + + g_system->beginGFXTransaction(); + g_system->setFeatureState(OSystem::kFeatureAspectRatioCorrection, !isFeatureEnabled); + g_system->endGFXTransaction(); + + g_system->delayMillis(1000); + + g_system->beginGFXTransaction(); + g_system->setFeatureState(OSystem::kFeatureAspectRatioCorrection, isFeatureEnabled); + g_system->endGFXTransaction(); + } + else { + Testsuite::displayMessage("feature not supported"); + } + + Testsuite::clearScreen(rect); + return true; +} + +bool GFXtests::palettizedCursors() { + Testsuite::displayMessage("Testing Cursors. You should expect to see a yellow colored square cursor.\n" + "You should be able to move it. The test finishes when the mouse(L/R) is clicked"); + + Common::Point pt(0, 100); + Common::Rect rect = Testsuite::writeOnScreen("Testing Palettized Cursors", pt); + + bool isFeaturePresent; + bool isFeatureEnabled; + + isFeaturePresent = g_system->hasFeature(OSystem::kFeatureCursorHasPalette); + isFeatureEnabled = g_system->getFeatureState(OSystem::kFeatureCursorHasPalette); + + if (isFeaturePresent) { + byte palette[3 * 4]; // Black, white and yellow + palette[0] = palette[1] = palette[2] = 0; + palette[4] = palette[5] = palette[6] = 255; + palette[8] = palette[9] = 255; + palette[10] = 0; + + byte buffer[10 * 10]; + memset(buffer, 2, 10 * 10); + + CursorMan.pushCursorPalette(palette, 0, 3); + CursorMan.pushCursor(buffer, 10, 10, 45, 45, 1); + CursorMan.showMouse(true); + + Common::EventManager *eventMan = g_system->getEventManager(); + Common::Event event; + + bool quitLoop = false; + uint32 lastRedraw = 0; + const uint32 waitTime = 1000 / 45; + + while (!quitLoop) { + while (eventMan->pollEvent(event)) { + + if (lastRedraw + waitTime < g_system->getMillis()) { + g_system->updateScreen(); + lastRedraw = g_system->getMillis(); + } + + switch (event.type) { + case Common::EVENT_MOUSEMOVE: + printf("Mouse Move\n"); + break; + case Common::EVENT_LBUTTONDOWN: + case Common::EVENT_RBUTTONDOWN: + Testsuite::clearScreen(rect); + Testsuite::writeOnScreen("Mouse Clicked", pt); + printf("Mouse Clicked\n"); + g_system->delayMillis(1000); + quitLoop = true; + CursorMan.popCursorPalette(); + CursorMan.popCursor(); + Testsuite::clearScreen(rect); + Testsuite::writeOnScreen("TestFinished", pt); + g_system->delayMillis(1000); + break; + default: + ;// Ignore any other event + + } + } + } + } else { + Testsuite::displayMessage("feature not supported"); + } + Testsuite::clearScreen(rect); + return true; +} + +bool GFXtests::mouseMovements() { + return true; +} + +bool GFXtests::copyRectToScreen() { + Testsuite::displayMessage("Testing Blitting a Bitmap to screen.\n" + "You should expect to see a 20x40 yellow horizontal rectangle centred at the screen."); + + GFXTestSuite::setCustomColor(255, 255, 0); + byte buffer[20 * 40]; + memset(buffer, 2, 20 * 40); + + uint x = g_system->getWidth() / 2 - 20; + uint y = g_system->getHeight() / 2 - 10; + + g_system->copyRectToScreen(buffer, 40, x, y, 40, 20); + g_system->updateScreen(); + g_system->delayMillis(1000); + + Common::Rect rect(x, y, x+40, y+20); + Testsuite::clearScreen(rect); + + return true; + +} + } |