1e527d809SAxel Dörfler /*
2e527d809SAxel Dörfler * Copyright 2009, Haiku Inc.
3e527d809SAxel Dörfler * Distributed under the terms of the MIT License.
4e527d809SAxel Dörfler *
5e527d809SAxel Dörfler * Authors:
6e527d809SAxel Dörfler * Axel Dörfler, axeld@pinc-software.de
7e527d809SAxel Dörfler */
8e527d809SAxel Dörfler
9e527d809SAxel Dörfler
10*572d609fSAxel Dörfler #include <stdlib.h>
11*572d609fSAxel Dörfler
12e527d809SAxel Dörfler #include <Application.h>
13e527d809SAxel Dörfler #include <MessageRunner.h>
14e527d809SAxel Dörfler #include <Window.h>
15e527d809SAxel Dörfler #include <View.h>
16e527d809SAxel Dörfler
17*572d609fSAxel Dörfler #include <WindowPrivate.h>
18e527d809SAxel Dörfler
19e527d809SAxel Dörfler
20e527d809SAxel Dörfler class ShowInvalidationView : public BView {
21e527d809SAxel Dörfler public:
22e527d809SAxel Dörfler ShowInvalidationView(BRect rect);
23e527d809SAxel Dörfler virtual ~ShowInvalidationView();
24e527d809SAxel Dörfler
25e527d809SAxel Dörfler virtual void Draw(BRect updateRect);
26e527d809SAxel Dörfler };
27e527d809SAxel Dörfler
28e527d809SAxel Dörfler
29e527d809SAxel Dörfler class ShowingWindow : public BWindow {
30e527d809SAxel Dörfler public:
31e527d809SAxel Dörfler ShowingWindow();
32e527d809SAxel Dörfler };
33e527d809SAxel Dörfler
34e527d809SAxel Dörfler
35e527d809SAxel Dörfler class ChangingWindow : public BWindow {
36e527d809SAxel Dörfler public:
37e527d809SAxel Dörfler ChangingWindow();
38e527d809SAxel Dörfler virtual ~ChangingWindow();
39e527d809SAxel Dörfler
40e527d809SAxel Dörfler virtual void MessageReceived(BMessage* message);
41e527d809SAxel Dörfler
42e527d809SAxel Dörfler private:
43e527d809SAxel Dörfler BMessageRunner* fRunner;
44e527d809SAxel Dörfler };
45e527d809SAxel Dörfler
46e527d809SAxel Dörfler
47e527d809SAxel Dörfler class Application : public BApplication {
48e527d809SAxel Dörfler public:
49e527d809SAxel Dörfler Application();
50e527d809SAxel Dörfler
51e527d809SAxel Dörfler virtual void ReadyToRun();
52e527d809SAxel Dörfler };
53e527d809SAxel Dörfler
54e527d809SAxel Dörfler
ShowInvalidationView(BRect rect)55e527d809SAxel Dörfler ShowInvalidationView::ShowInvalidationView(BRect rect)
56e527d809SAxel Dörfler :
57e527d809SAxel Dörfler BView(rect, "show invalidation", B_FOLLOW_ALL, B_WILL_DRAW)
58e527d809SAxel Dörfler {
59e527d809SAxel Dörfler SetViewColor(B_TRANSPARENT_COLOR);
60e527d809SAxel Dörfler }
61e527d809SAxel Dörfler
62e527d809SAxel Dörfler
~ShowInvalidationView()63e527d809SAxel Dörfler ShowInvalidationView::~ShowInvalidationView()
64e527d809SAxel Dörfler {
65e527d809SAxel Dörfler }
66e527d809SAxel Dörfler
67e527d809SAxel Dörfler
68e527d809SAxel Dörfler void
Draw(BRect updateRect)69e527d809SAxel Dörfler ShowInvalidationView::Draw(BRect updateRect)
70e527d809SAxel Dörfler {
71e527d809SAxel Dörfler SetHighColor(rand() % 256, rand() % 256, rand() % 256);
72e527d809SAxel Dörfler FillRect(updateRect);
73e527d809SAxel Dörfler }
74e527d809SAxel Dörfler
75e527d809SAxel Dörfler
76e527d809SAxel Dörfler // #pragma mark -
77e527d809SAxel Dörfler
78e527d809SAxel Dörfler
ShowingWindow()79e527d809SAxel Dörfler ShowingWindow::ShowingWindow()
80e527d809SAxel Dörfler :
81e527d809SAxel Dörfler BWindow(BRect(150, 150, 450, 450), "WindowInvalidation-Test",
82e527d809SAxel Dörfler B_TITLED_WINDOW, B_ASYNCHRONOUS_CONTROLS | B_QUIT_ON_WINDOW_CLOSE)
83e527d809SAxel Dörfler {
84e527d809SAxel Dörfler BView* view = new ShowInvalidationView(Bounds());
85e527d809SAxel Dörfler AddChild(view);
86e527d809SAxel Dörfler }
87e527d809SAxel Dörfler
88e527d809SAxel Dörfler
89e527d809SAxel Dörfler // #pragma mark -
90e527d809SAxel Dörfler
91e527d809SAxel Dörfler
ChangingWindow()92e527d809SAxel Dörfler ChangingWindow::ChangingWindow()
93e527d809SAxel Dörfler :
94e527d809SAxel Dörfler BWindow(BRect(150, 150, 400, 400), "WindowInvalidation-Test",
95e527d809SAxel Dörfler B_TITLED_WINDOW, B_ASYNCHRONOUS_CONTROLS | B_QUIT_ON_WINDOW_CLOSE)
96e527d809SAxel Dörfler {
97e527d809SAxel Dörfler BMessage message('actn');
98e527d809SAxel Dörfler fRunner = new BMessageRunner(this, &message, 25000);
99e527d809SAxel Dörfler }
100e527d809SAxel Dörfler
101e527d809SAxel Dörfler
~ChangingWindow()102e527d809SAxel Dörfler ChangingWindow::~ChangingWindow()
103e527d809SAxel Dörfler {
104e527d809SAxel Dörfler delete fRunner;
105e527d809SAxel Dörfler }
106e527d809SAxel Dörfler
107e527d809SAxel Dörfler
108e527d809SAxel Dörfler void
MessageReceived(BMessage * message)109e527d809SAxel Dörfler ChangingWindow::MessageReceived(BMessage* message)
110e527d809SAxel Dörfler {
111e527d809SAxel Dörfler if (message->what == 'actn') {
112*572d609fSAxel Dörfler switch (rand() % 4) {
113e527d809SAxel Dörfler case 0:
114e527d809SAxel Dörfler {
115e527d809SAxel Dörfler // resize window
116e527d809SAxel Dörfler BRect bounds;
117e527d809SAxel Dörfler do {
118e527d809SAxel Dörfler bounds = Bounds();
119e527d809SAxel Dörfler bounds.right += rand() % 21 - 10;
120e527d809SAxel Dörfler bounds.bottom += rand() % 21 - 10;
121e527d809SAxel Dörfler } while (bounds.Width() > 400 || bounds.Height() > 400
122e527d809SAxel Dörfler || bounds.Width() < 50 || bounds.Height() < 50);
123e527d809SAxel Dörfler
124e527d809SAxel Dörfler ResizeTo(bounds.Width() + 1, bounds.Height() + 1);
125e527d809SAxel Dörfler break;
126e527d809SAxel Dörfler }
127e527d809SAxel Dörfler
128e527d809SAxel Dörfler case 1:
129e527d809SAxel Dörfler {
130e527d809SAxel Dörfler // move window
131e527d809SAxel Dörfler BPoint leftTop;
132e527d809SAxel Dörfler do {
133e527d809SAxel Dörfler leftTop = Frame().LeftTop();
134e527d809SAxel Dörfler leftTop.x += rand() % 21 - 10;
135e527d809SAxel Dörfler leftTop.y += rand() % 21 - 10;
136e527d809SAxel Dörfler } while (!BRect(100, 100, 200, 200).Contains(leftTop));
137e527d809SAxel Dörfler
138e527d809SAxel Dörfler MoveTo(leftTop);
139e527d809SAxel Dörfler break;
140e527d809SAxel Dörfler }
141e527d809SAxel Dörfler
142e527d809SAxel Dörfler case 2:
143e527d809SAxel Dörfler {
144e527d809SAxel Dörfler // set title
145e527d809SAxel Dörfler static const char* kChoices[]
146e527d809SAxel Dörfler = {"Window", "Invalidation", "Test", "Hooray"};
147e527d809SAxel Dörfler
148e527d809SAxel Dörfler SetTitle(kChoices[rand() % (sizeof(kChoices) / sizeof(char*))]);
149e527d809SAxel Dörfler break;
150e527d809SAxel Dörfler }
151*572d609fSAxel Dörfler
152*572d609fSAxel Dörfler case 3:
153*572d609fSAxel Dörfler {
154*572d609fSAxel Dörfler // change look
155*572d609fSAxel Dörfler static const window_look kLooks[]
156*572d609fSAxel Dörfler = {B_TITLED_WINDOW_LOOK, B_DOCUMENT_WINDOW_LOOK,
157*572d609fSAxel Dörfler B_FLOATING_WINDOW_LOOK, kLeftTitledWindowLook};
158*572d609fSAxel Dörfler
159*572d609fSAxel Dörfler SetLook(kLooks[rand() % (sizeof(kLooks) / sizeof(kLooks[0]))]);
160*572d609fSAxel Dörfler break;
161*572d609fSAxel Dörfler }
162e527d809SAxel Dörfler }
163e527d809SAxel Dörfler } else
164e527d809SAxel Dörfler BWindow::MessageReceived(message);
165e527d809SAxel Dörfler }
166e527d809SAxel Dörfler
167e527d809SAxel Dörfler
168e527d809SAxel Dörfler // #pragma mark -
169e527d809SAxel Dörfler
170e527d809SAxel Dörfler
Application()171e527d809SAxel Dörfler Application::Application()
172e527d809SAxel Dörfler :
173e527d809SAxel Dörfler BApplication("application/x-vnd.haiku-view_state")
174e527d809SAxel Dörfler {
175e527d809SAxel Dörfler }
176e527d809SAxel Dörfler
177e527d809SAxel Dörfler
178e527d809SAxel Dörfler void
ReadyToRun()179e527d809SAxel Dörfler Application::ReadyToRun()
180e527d809SAxel Dörfler {
181e527d809SAxel Dörfler BWindow* window = new ChangingWindow();
182e527d809SAxel Dörfler window->Show();
183e527d809SAxel Dörfler
184e527d809SAxel Dörfler window = new ShowingWindow();
185e527d809SAxel Dörfler window->Show();
186e527d809SAxel Dörfler }
187e527d809SAxel Dörfler
188e527d809SAxel Dörfler
189e527d809SAxel Dörfler // #pragma mark -
190e527d809SAxel Dörfler
191e527d809SAxel Dörfler
192e527d809SAxel Dörfler int
main(int argc,char ** argv)193e527d809SAxel Dörfler main(int argc, char** argv)
194e527d809SAxel Dörfler {
195e527d809SAxel Dörfler Application app;
196e527d809SAxel Dörfler app.Run();
197e527d809SAxel Dörfler
198e527d809SAxel Dörfler return 0;
199e527d809SAxel Dörfler }
200