From 08e109e57038a55f575d30849bc9260cde45e04e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stephan=20A=C3=9Fmus?= Date: Thu, 6 Feb 2014 10:53:09 +0100 Subject: [PATCH] New test for transformations --- src/tests/servers/app/Jamfile | 1 + src/tests/servers/app/transformation/Jamfile | 17 ++ src/tests/servers/app/transformation/main.cpp | 268 ++++++++++++++++++ 3 files changed, 286 insertions(+) create mode 100644 src/tests/servers/app/transformation/Jamfile create mode 100644 src/tests/servers/app/transformation/main.cpp diff --git a/src/tests/servers/app/Jamfile b/src/tests/servers/app/Jamfile index 6b5659758c..3024af6914 100644 --- a/src/tests/servers/app/Jamfile +++ b/src/tests/servers/app/Jamfile @@ -234,6 +234,7 @@ SubInclude HAIKU_TOP src tests servers app shape_test ; SubInclude HAIKU_TOP src tests servers app statusbar ; SubInclude HAIKU_TOP src tests servers app stress_test ; SubInclude HAIKU_TOP src tests servers app textview ; +SubInclude HAIKU_TOP src tests servers app transformation ; SubInclude HAIKU_TOP src tests servers app view_state ; SubInclude HAIKU_TOP src tests servers app view_transit ; SubInclude HAIKU_TOP src tests servers app window_creation ; diff --git a/src/tests/servers/app/transformation/Jamfile b/src/tests/servers/app/transformation/Jamfile new file mode 100644 index 0000000000..be48cd32a8 --- /dev/null +++ b/src/tests/servers/app/transformation/Jamfile @@ -0,0 +1,17 @@ +SubDir HAIKU_TOP src tests servers app transformation ; + +SetSubDirSupportedPlatformsBeOSCompatible ; +AddSubDirSupportedPlatforms libbe_test ; + +UseHeaders [ FDirName os app ] ; +UseHeaders [ FDirName os interface ] ; + +SimpleTest Transformation : + main.cpp + : be $(TARGET_LIBSUPC++) + ; + +if ( $(TARGET_PLATFORM) = libbe_test ) { + HaikuInstall install-test-apps : $(HAIKU_APP_TEST_DIR) : Transformation + : tests!apps ; +} diff --git a/src/tests/servers/app/transformation/main.cpp b/src/tests/servers/app/transformation/main.cpp new file mode 100644 index 0000000000..585c91dae5 --- /dev/null +++ b/src/tests/servers/app/transformation/main.cpp @@ -0,0 +1,268 @@ +/* + * Copyright 2014 Stephan Aßmus + * All rights reserved. Distributed under the terms of the MIT license. + */ + + +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +static const char* kAppSignature = "application/x.vnd-Haiku.Transformation"; + + +class Test { +public: + Test(const char* name); + virtual ~Test(); + + const char* Name() const + { return fName.String(); } + + virtual void Draw(BView* view, BRect updateRect) = 0; + +private: + BString fName; +}; + + +Test::Test(const char* name) + : + fName(name) +{ +} + + +Test::~Test() +{ +} + + +// #pragma mark - TestView + + +class TestView : public BView { +public: + TestView(); + virtual ~TestView(); + + virtual void Draw(BRect updateRect); + + void SetTest(Test* test); + +private: + Test* fTest; +}; + + +TestView::TestView() + : + BView(NULL, B_WILL_DRAW | B_FULL_UPDATE_ON_RESIZE), + fTest(NULL) +{ +} + + +TestView::~TestView() +{ +} + + +void +TestView::Draw(BRect updateRect) +{ + if (fTest != NULL) + fTest->Draw(this, updateRect); +} + + +void +TestView::SetTest(Test* test) +{ + fTest = test; + Invalidate(); +} + + +// #pragma mark - TestWindow + + +enum { + MSG_SELECT_TEST = 'stst' +}; + + +class TestWindow : public BWindow { +public: + TestWindow(); + virtual ~TestWindow(); + + virtual void MessageReceived(BMessage* message); + + void AddTest(Test* test); + void SetToTest(int32 index); + +private: + TestView* fTestView; + + BMenuField* fTestSelectionField; + + BList fTests; +}; + + +TestWindow::TestWindow() + : + BWindow(BRect(50.0, 50.0, 450.0, 250.0), "Transformations Test", + B_DOCUMENT_WINDOW, B_ASYNCHRONOUS_CONTROLS | B_QUIT_ON_WINDOW_CLOSE + | B_AUTO_UPDATE_SIZE_LIMITS) +{ + fTestView = new TestView(); + + BScrollView* scrollView = new BScrollView("scroll", fTestView, 0, true, + true); + + fTestSelectionField = new BMenuField("test selection", + "Select test:", new BPopUpMenu("select")); + + BLayoutBuilder::Group<>(this, B_VERTICAL, 0.0f) + .AddGroup(B_HORIZONTAL) + .Add(fTestSelectionField) + .AddGlue() + .SetInsets(B_USE_DEFAULT_SPACING) + .End() + .Add(scrollView) + ; +} + + +TestWindow::~TestWindow() +{ + for (int32 i = fTests.CountItems() - 1; i >= 0; i++) + delete (Test*)fTests.ItemAt(i); +} + + +void +TestWindow::MessageReceived(BMessage* message) +{ + switch (message->what) { + case MSG_SELECT_TEST: + { + int32 index; + if (message->FindInt32("index", &index) == B_OK) + SetToTest(index); + break; + } + + default: + BWindow::MessageReceived(message); + } +} + + +void +TestWindow::AddTest(Test* test) +{ + if (test == NULL || fTests.HasItem(test)) + return; + + if (!fTests.AddItem(test)) { + delete test; + return; + } + + BMessage* message = new BMessage(MSG_SELECT_TEST); + message->AddInt32("index", fTests.CountItems() - 1); + + BMenuItem* item = new BMenuItem(test->Name(), message); + if (!fTestSelectionField->Menu()->AddItem(item)) { + fTests.RemoveItem(fTests.CountItems() - 1); + delete test; + delete item; + return; + } + + if (fTests.CountItems() == 1) + SetToTest(0); +} + + +void +TestWindow::SetToTest(int32 index) +{ + Test* test = (Test*)fTests.ItemAt(index); + if (test == NULL) + return; + + fTestSelectionField->Menu()->ItemAt(index)->SetMarked(true); + + fTestView->SetTest(test); +} + + +// #pragma mark - Test1 + + +class RectsTest : public Test { +public: + RectsTest() + : + Test("Rects") + { + } + + virtual void Draw(BView* view, BRect updateRect) + { + view->DrawString("Rects", BPoint(20, 30)); + + view->SetDrawingMode(B_OP_ALPHA); + view->SetBlendingMode(B_PIXEL_ALPHA, B_ALPHA_OVERLAY); + view->SetHighColor(51, 151, 255, 40); + + BRect rect(view->Bounds()); + rect.InsetBy(rect.Width() / 3, rect.Height() / 3); + BPoint center( + rect.left + rect.Width() / 2, + rect.top + rect.Height() / 2); + + for (int32 i = 0; i < 360; i += 20) { + BAffineTransform transform; + transform.RotateBy(center, i * M_PI / 180.0); + view->SetTransform(transform); + view->FillRect(rect); + } + } +}; + + +// #pragma mark - + + +int +main(int argc, char** argv) +{ + BApplication app(kAppSignature); + + TestWindow* window = new TestWindow(); + + window->AddTest(new RectsTest()); + + window->SetToTest(0); + window->Show(); + + app.Run(); + return 0; +}