* Wrote application to test the invalidation area on window changes.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32468 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Axel Dörfler
2009-08-17 16:16:25 +00:00
parent f4300c3072
commit e527d80934
3 changed files with 206 additions and 0 deletions
+1
View File
@@ -194,5 +194,6 @@ SubInclude HAIKU_TOP src tests servers app textview ;
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 ;
SubInclude HAIKU_TOP src tests servers app window_invalidation ;
SubInclude HAIKU_TOP src tests servers app workspace_activated ;
SubInclude HAIKU_TOP src tests servers app workspace_switcher ;
@@ -0,0 +1,18 @@
SubDir HAIKU_TOP src tests servers app window_invalidation ;
SetSubDirSupportedPlatformsBeOSCompatible ;
AddSubDirSupportedPlatforms libbe_test ;
UseHeaders [ FDirName os app ] ;
UseHeaders [ FDirName os interface ] ;
Application WindowInvalidation :
WindowInvalidation.cpp
: be $(TARGET_LIBSUPC++)
;
if $(TARGET_PLATFORM) = libbe_test {
HaikuInstall install-test-apps : $(HAIKU_APP_TEST_DIR) : WindowInvalidation
: tests!apps ;
}
@@ -0,0 +1,187 @@
/*
* Copyright 2009, Haiku Inc.
* Distributed under the terms of the MIT License.
*
* Authors:
* Axel Dörfler, [email protected]
*/
#include <Application.h>
#include <MessageRunner.h>
#include <Window.h>
#include <View.h>
//#include <stdio.h>
#include <stdlib.h>
class ShowInvalidationView : public BView {
public:
ShowInvalidationView(BRect rect);
virtual ~ShowInvalidationView();
virtual void Draw(BRect updateRect);
};
class ShowingWindow : public BWindow {
public:
ShowingWindow();
};
class ChangingWindow : public BWindow {
public:
ChangingWindow();
virtual ~ChangingWindow();
virtual void MessageReceived(BMessage* message);
private:
BMessageRunner* fRunner;
};
class Application : public BApplication {
public:
Application();
virtual void ReadyToRun();
};
ShowInvalidationView::ShowInvalidationView(BRect rect)
:
BView(rect, "show invalidation", B_FOLLOW_ALL, B_WILL_DRAW)
{
SetViewColor(B_TRANSPARENT_COLOR);
}
ShowInvalidationView::~ShowInvalidationView()
{
}
void
ShowInvalidationView::Draw(BRect updateRect)
{
SetHighColor(rand() % 256, rand() % 256, rand() % 256);
FillRect(updateRect);
}
// #pragma mark -
ShowingWindow::ShowingWindow()
:
BWindow(BRect(150, 150, 450, 450), "WindowInvalidation-Test",
B_TITLED_WINDOW, B_ASYNCHRONOUS_CONTROLS | B_QUIT_ON_WINDOW_CLOSE)
{
BView* view = new ShowInvalidationView(Bounds());
AddChild(view);
}
// #pragma mark -
ChangingWindow::ChangingWindow()
:
BWindow(BRect(150, 150, 400, 400), "WindowInvalidation-Test",
B_TITLED_WINDOW, B_ASYNCHRONOUS_CONTROLS | B_QUIT_ON_WINDOW_CLOSE)
{
BMessage message('actn');
fRunner = new BMessageRunner(this, &message, 25000);
}
ChangingWindow::~ChangingWindow()
{
delete fRunner;
}
void
ChangingWindow::MessageReceived(BMessage* message)
{
if (message->what == 'actn') {
switch (rand() % 3) {
case 0:
{
// resize window
BRect bounds;
do {
bounds = Bounds();
bounds.right += rand() % 21 - 10;
bounds.bottom += rand() % 21 - 10;
} while (bounds.Width() > 400 || bounds.Height() > 400
|| bounds.Width() < 50 || bounds.Height() < 50);
ResizeTo(bounds.Width() + 1, bounds.Height() + 1);
break;
}
case 1:
{
// move window
BPoint leftTop;
do {
leftTop = Frame().LeftTop();
leftTop.x += rand() % 21 - 10;
leftTop.y += rand() % 21 - 10;
} while (!BRect(100, 100, 200, 200).Contains(leftTop));
MoveTo(leftTop);
break;
}
case 2:
{
// set title
static const char* kChoices[]
= {"Window", "Invalidation", "Test", "Hooray"};
SetTitle(kChoices[rand() % (sizeof(kChoices) / sizeof(char*))]);
break;
}
}
} else
BWindow::MessageReceived(message);
}
// #pragma mark -
Application::Application()
:
BApplication("application/x-vnd.haiku-view_state")
{
}
void
Application::ReadyToRun()
{
BWindow* window = new ChangingWindow();
window->Show();
window = new ShowingWindow();
window->Show();
}
// #pragma mark -
int
main(int argc, char** argv)
{
Application app;
app.Run();
return 0;
}