xref: /haiku/src/tests/servers/app/newerClipping/main.cpp (revision 727653f7ab76ecb76d377ae83c0a319f67ab8abe)
1bef1ed93SStephan Aßmus 
2bef1ed93SStephan Aßmus #include <Application.h>
3bef1ed93SStephan Aßmus #include <Window.h>
4bef1ed93SStephan Aßmus #include <View.h>
5bef1ed93SStephan Aßmus 
6bef1ed93SStephan Aßmus #include <stdio.h>
7bef1ed93SStephan Aßmus #include <stdlib.h>
8bef1ed93SStephan Aßmus 
9bef1ed93SStephan Aßmus #include "Desktop.h"
10bef1ed93SStephan Aßmus #include "DrawingEngine.h"
11bef1ed93SStephan Aßmus #include "ViewLayer.h"
12bef1ed93SStephan Aßmus #include "WindowLayer.h"
13bef1ed93SStephan Aßmus 
14bef1ed93SStephan Aßmus class App : public BApplication {
15bef1ed93SStephan Aßmus  public:
16bef1ed93SStephan Aßmus 						App();
17bef1ed93SStephan Aßmus 
18bef1ed93SStephan Aßmus 	virtual void		ReadyToRun();
19bef1ed93SStephan Aßmus };
20bef1ed93SStephan Aßmus 
21bef1ed93SStephan Aßmus class Window : public BWindow {
22bef1ed93SStephan Aßmus  public:
23bef1ed93SStephan Aßmus 						Window(const char* title);
240b78f37eSStephan Aßmus 	virtual				~Window();
25bef1ed93SStephan Aßmus 
26bef1ed93SStephan Aßmus 			void		AddWindow(BRect frame, const char* name);
27bef1ed93SStephan Aßmus 			void		Test();
28bef1ed93SStephan Aßmus  private:
29bef1ed93SStephan Aßmus 			DrawView*	fView;
30bef1ed93SStephan Aßmus 			Desktop*	fDesktop;
31bef1ed93SStephan Aßmus };
32bef1ed93SStephan Aßmus 
330b78f37eSStephan Aßmus // constructor
34bef1ed93SStephan Aßmus App::App()
35bef1ed93SStephan Aßmus 	: BApplication("application/x-vnd.stippi.ClippingTest")
36bef1ed93SStephan Aßmus {
37bef1ed93SStephan Aßmus 	srand(real_time_clock_usecs());
38bef1ed93SStephan Aßmus }
39bef1ed93SStephan Aßmus 
400b78f37eSStephan Aßmus // ReadyToRun
41bef1ed93SStephan Aßmus void
42bef1ed93SStephan Aßmus App::ReadyToRun()
43bef1ed93SStephan Aßmus {
44bef1ed93SStephan Aßmus 	Window* win = new Window("clipping");
45bef1ed93SStephan Aßmus 	win->Show();
46bef1ed93SStephan Aßmus 
47bef1ed93SStephan Aßmus 	win->Test();
48bef1ed93SStephan Aßmus }
49bef1ed93SStephan Aßmus 
500b78f37eSStephan Aßmus // constructor
51bef1ed93SStephan Aßmus Window::Window(const char* title)
52bef1ed93SStephan Aßmus 	: BWindow(BRect(50, 50, 800, 650), title,
53bef1ed93SStephan Aßmus 			  B_TITLED_WINDOW_LOOK, B_NORMAL_WINDOW_FEEL,
54bef1ed93SStephan Aßmus 			  B_QUIT_ON_WINDOW_CLOSE | B_ASYNCHRONOUS_CONTROLS)
55bef1ed93SStephan Aßmus {
56bef1ed93SStephan Aßmus 	fView = new DrawView(Bounds());
57bef1ed93SStephan Aßmus 	fDesktop = new Desktop(fView);
58bef1ed93SStephan Aßmus 	fDesktop->Run();
59bef1ed93SStephan Aßmus 	AddChild(fView);
60bef1ed93SStephan Aßmus 	fView->MakeFocus(true);
61bef1ed93SStephan Aßmus }
62bef1ed93SStephan Aßmus 
630b78f37eSStephan Aßmus // destructor
64bef1ed93SStephan Aßmus Window::~Window()
65bef1ed93SStephan Aßmus {
66bef1ed93SStephan Aßmus 	fDesktop->Lock();
67bef1ed93SStephan Aßmus 	fDesktop->Quit();
68bef1ed93SStephan Aßmus }
69bef1ed93SStephan Aßmus 
70bef1ed93SStephan Aßmus // AddWindow
71bef1ed93SStephan Aßmus void
72bef1ed93SStephan Aßmus Window::AddWindow(BRect frame, const char* name)
73bef1ed93SStephan Aßmus {
74bef1ed93SStephan Aßmus 	WindowLayer* window = new WindowLayer(frame, name,
75bef1ed93SStephan Aßmus 										  fDesktop->GetDrawingEngine(),
76bef1ed93SStephan Aßmus 										  fDesktop);
770b78f37eSStephan Aßmus 
780b78f37eSStephan Aßmus 	// add a coupld children
790b78f37eSStephan Aßmus 	frame.OffsetTo(B_ORIGIN);
800b78f37eSStephan Aßmus 	frame.InsetBy(5.0, 5.0);
810b78f37eSStephan Aßmus 	if (frame.IsValid()) {
820b78f37eSStephan Aßmus 		ViewLayer* layer1 = new ViewLayer(frame, "View 1",
830b78f37eSStephan Aßmus 										  B_FOLLOW_ALL,
840b78f37eSStephan Aßmus 										  B_FULL_UPDATE_ON_RESIZE,
850b78f37eSStephan Aßmus 										  (rgb_color){ 180, 180, 180, 255 });
860b78f37eSStephan Aßmus 
870b78f37eSStephan Aßmus 		frame.OffsetTo(B_ORIGIN);
880b78f37eSStephan Aßmus 		frame.InsetBy(15.0, 15.0);
890b78f37eSStephan Aßmus 		if (frame.IsValid()) {
900b78f37eSStephan Aßmus 
91f5180663SStephan Aßmus 			BRect f = frame;
92f5180663SStephan Aßmus 			f.bottom = f.top + f.Height() / 3 - 3;
93f5180663SStephan Aßmus 			f.right = f.left + f.Width() / 3 - 3;
940b78f37eSStephan Aßmus 
95f5180663SStephan Aßmus 			// top row of views
96f5180663SStephan Aßmus 			ViewLayer* layer;
97f5180663SStephan Aßmus 			layer = new ViewLayer(f, "View", B_FOLLOW_LEFT | B_FOLLOW_TOP,
98f5180663SStephan Aßmus 								  B_FULL_UPDATE_ON_RESIZE, (rgb_color){ 120, 120, 120, 255 });
99f5180663SStephan Aßmus 			layer1->AddChild(layer);
1000b78f37eSStephan Aßmus 
101f5180663SStephan Aßmus 			f.OffsetBy(f.Width() + 6, 0);
1020b78f37eSStephan Aßmus 
103f5180663SStephan Aßmus 			layer = new ViewLayer(f, "View", B_FOLLOW_LEFT_RIGHT | B_FOLLOW_TOP,
104f5180663SStephan Aßmus 								  B_FULL_UPDATE_ON_RESIZE, (rgb_color){ 120, 120, 120, 255 });
105f5180663SStephan Aßmus 			layer1->AddChild(layer);
1060b78f37eSStephan Aßmus 
107f5180663SStephan Aßmus 			f.OffsetBy(f.Width() + 6, 0);
108f5180663SStephan Aßmus 
109f5180663SStephan Aßmus 			layer = new ViewLayer(f, "View", B_FOLLOW_RIGHT | B_FOLLOW_TOP,
110f5180663SStephan Aßmus 								  B_FULL_UPDATE_ON_RESIZE, (rgb_color){ 120, 120, 120, 255 });
111f5180663SStephan Aßmus 			layer1->AddChild(layer);
112f5180663SStephan Aßmus 
113f5180663SStephan Aßmus 			// middle row of views
114f5180663SStephan Aßmus 			f = frame;
115f5180663SStephan Aßmus 			f.bottom = f.top + f.Height() / 3 - 3;
116f5180663SStephan Aßmus 			f.right = f.left + f.Width() / 3 - 3;
117f5180663SStephan Aßmus 			f.OffsetBy(0, f.Height() + 6);
118f5180663SStephan Aßmus 
119f5180663SStephan Aßmus 			layer = new ViewLayer(f, "View", B_FOLLOW_LEFT | B_FOLLOW_TOP_BOTTOM,
120f5180663SStephan Aßmus 								  B_FULL_UPDATE_ON_RESIZE, (rgb_color){ 120, 120, 120, 255 });
121f5180663SStephan Aßmus 			layer1->AddChild(layer);
122f5180663SStephan Aßmus 
123f5180663SStephan Aßmus 			f.OffsetBy(f.Width() + 6, 0);
124f5180663SStephan Aßmus 
125f5180663SStephan Aßmus 			layer = new ViewLayer(f, "View", B_FOLLOW_ALL,
126f5180663SStephan Aßmus 								  B_FULL_UPDATE_ON_RESIZE, (rgb_color){ 120, 120, 120, 255 });
127f5180663SStephan Aßmus 			layer1->AddChild(layer);
128f5180663SStephan Aßmus 
129f5180663SStephan Aßmus 			f.OffsetBy(f.Width() + 6, 0);
130f5180663SStephan Aßmus 
131f5180663SStephan Aßmus 			layer = new ViewLayer(f, "View", B_FOLLOW_RIGHT | B_FOLLOW_TOP_BOTTOM,
132f5180663SStephan Aßmus 								  B_FULL_UPDATE_ON_RESIZE, (rgb_color){ 120, 120, 120, 255 });
133f5180663SStephan Aßmus 			layer1->AddChild(layer);
134f5180663SStephan Aßmus 
135f5180663SStephan Aßmus 			// bottom row of views
136f5180663SStephan Aßmus 			f = frame;
137f5180663SStephan Aßmus 			f.bottom = f.top + f.Height() / 3 - 3;
138f5180663SStephan Aßmus 			f.right = f.left + f.Width() / 3 - 3;
139f5180663SStephan Aßmus 			f.OffsetBy(0, 2 * f.Height() + 12);
140f5180663SStephan Aßmus 
141f5180663SStephan Aßmus 			layer = new ViewLayer(f, "View", B_FOLLOW_LEFT | B_FOLLOW_BOTTOM,
142f5180663SStephan Aßmus 								  B_FULL_UPDATE_ON_RESIZE, (rgb_color){ 120, 120, 120, 255 });
143f5180663SStephan Aßmus 			layer1->AddChild(layer);
144f5180663SStephan Aßmus 
145f5180663SStephan Aßmus 			f.OffsetBy(f.Width() + 6, 0);
146f5180663SStephan Aßmus 
147748533bbSStephan Aßmus //			layer = new ViewLayer(f, "View", B_FOLLOW_LEFT_RIGHT | B_FOLLOW_BOTTOM,
148748533bbSStephan Aßmus 			layer = new ViewLayer(f, "View", B_FOLLOW_LEFT | B_FOLLOW_BOTTOM,
149f5180663SStephan Aßmus 								  B_FULL_UPDATE_ON_RESIZE, (rgb_color){ 120, 120, 120, 255 });
150f5180663SStephan Aßmus 			layer1->AddChild(layer);
151f5180663SStephan Aßmus 
152f5180663SStephan Aßmus 			f.OffsetBy(f.Width() + 6, 0);
153f5180663SStephan Aßmus 
154748533bbSStephan Aßmus //			layer = new ViewLayer(f, "View", B_FOLLOW_RIGHT | B_FOLLOW_BOTTOM,
155748533bbSStephan Aßmus 			layer = new ViewLayer(f, "View", B_FOLLOW_LEFT | B_FOLLOW_BOTTOM,
156f5180663SStephan Aßmus 								  B_FULL_UPDATE_ON_RESIZE, (rgb_color){ 120, 120, 120, 255 });
157f5180663SStephan Aßmus 			layer1->AddChild(layer);
1580b78f37eSStephan Aßmus 		}
1590b78f37eSStephan Aßmus 
1600b78f37eSStephan Aßmus 		window->AddChild(layer1);
1610b78f37eSStephan Aßmus 	}
1620b78f37eSStephan Aßmus 
163bef1ed93SStephan Aßmus 	window->Run();
164bef1ed93SStephan Aßmus 
165bef1ed93SStephan Aßmus 	BMessage message(MSG_ADD_WINDOW);
166bef1ed93SStephan Aßmus 	message.AddPointer("window", (void*)window);
167bef1ed93SStephan Aßmus 	fDesktop->PostMessage(&message);
168bef1ed93SStephan Aßmus }
169bef1ed93SStephan Aßmus 
170bef1ed93SStephan Aßmus // Test
171bef1ed93SStephan Aßmus void
172bef1ed93SStephan Aßmus Window::Test()
173bef1ed93SStephan Aßmus {
174f5180663SStephan Aßmus 	BRect frame(20, 20, 330, 230);
1754dd89c69SStephan Aßmus //	AddWindow(frame, "Window 1");
1764dd89c69SStephan Aßmus //	AddWindow(frame, "Window 2");
177f5180663SStephan Aßmus 	for (int32 i = 0; i < 20; i++) {
178f5180663SStephan Aßmus 		BString name("Window ");
179f5180663SStephan Aßmus 		frame.OffsetBy(20, 15);
180f5180663SStephan Aßmus 		name << i + 1;
181f5180663SStephan Aßmus 		AddWindow(frame, name.String());
182f5180663SStephan Aßmus 	}
183f5180663SStephan Aßmus 
184d0e89d53SStephan Aßmus /*	frame.Set(10, 80, 320, 290);
185f5180663SStephan Aßmus 	for (int32 i = 20; i < 40; i++) {
186f5180663SStephan Aßmus 		BString name("Window ");
187f5180663SStephan Aßmus 		frame.OffsetBy(20, 15);
188f5180663SStephan Aßmus 		name << i + 1;
189f5180663SStephan Aßmus 		AddWindow(frame, name.String());
190f5180663SStephan Aßmus 	}
191d0e89d53SStephan Aßmus 
1924dd89c69SStephan Aßmus 	frame.Set(20, 140, 330, 230);
193f5180663SStephan Aßmus 	for (int32 i = 40; i < 60; i++) {
194f5180663SStephan Aßmus 		BString name("Window ");
195f5180663SStephan Aßmus 		frame.OffsetBy(20, 15);
196f5180663SStephan Aßmus 		name << i + 1;
197f5180663SStephan Aßmus 		AddWindow(frame, name.String());
198f5180663SStephan Aßmus 	}
199f5180663SStephan Aßmus 
200f5180663SStephan Aßmus 	frame.Set(20, 200, 330, 230);
201f5180663SStephan Aßmus 	for (int32 i = 60; i < 80; i++) {
202f5180663SStephan Aßmus 		BString name("Window ");
203f5180663SStephan Aßmus 		frame.OffsetBy(20, 15);
204f5180663SStephan Aßmus 		name << i + 1;
205f5180663SStephan Aßmus 		AddWindow(frame, name.String());
206f5180663SStephan Aßmus 	}
207f5180663SStephan Aßmus 
208f5180663SStephan Aßmus 	frame.Set(20, 260, 330, 230);
209f5180663SStephan Aßmus // 99 windows are ok, the 100th looper does not run anymore,
210f5180663SStephan Aßmus // I guess I'm hitting a BeOS limit (max loopers per app?)
211f5180663SStephan Aßmus 	for (int32 i = 80; i < 99; i++) {
212f5180663SStephan Aßmus 		BString name("Window ");
213f5180663SStephan Aßmus 		frame.OffsetBy(20, 15);
214f5180663SStephan Aßmus 		name << i + 1;
215f5180663SStephan Aßmus 		AddWindow(frame, name.String());
216f5180663SStephan Aßmus 	}*/
217bef1ed93SStephan Aßmus }
218bef1ed93SStephan Aßmus 
219bef1ed93SStephan Aßmus // main
220bef1ed93SStephan Aßmus int
221bef1ed93SStephan Aßmus main(int argc, const char* argv[])
222bef1ed93SStephan Aßmus {
223*727653f7SStephan Aßmus 	srand((long int)system_time());
224*727653f7SStephan Aßmus 
225bef1ed93SStephan Aßmus 	App app;
226bef1ed93SStephan Aßmus 	app.Run();
227bef1ed93SStephan Aßmus 	return 0;
228bef1ed93SStephan Aßmus }
229