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 184*d0e89d53SStephan 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 } 191*d0e89d53SStephan 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 { 223bef1ed93SStephan Aßmus App app; 224bef1ed93SStephan Aßmus app.Run(); 225bef1ed93SStephan Aßmus return 0; 226bef1ed93SStephan Aßmus } 227