xref: /haiku/src/tests/kits/interface/ClippingPlusRedraw.cpp (revision 1e60bdeab63fa7a57bc9a55b032052e95a18bd2c)
1 #include <Application.h>
2 #include <Bitmap.h>
3 #include <Region.h>
4 #include <View.h>
5 #include <Window.h>
6 #include <stdio.h>
7 
8 
9 class ClippingView : public BView {
10 public:
11 							ClippingView(BRect frame);
12 
13 virtual	void				Draw(BRect updateRect);
14 virtual	void				MouseDown(BPoint where);
15 virtual	void				KeyDown(const char *bytes, int32 numBytes);
16 
17 private:
18 		BWindow *			fFloatingWindow;
19 };
20 
21 
22 class ClippingWindow : public BWindow {
23 public:
24 							ClippingWindow(BRect frame);
25 
26 private:
27 		ClippingView *		fView;
28 };
29 
30 
31 class ClippingApp : public BApplication {
32 public:
33 							ClippingApp();
34 
35 private:
36 		ClippingWindow *	fWindow;
37 };
38 
39 
40 ClippingApp::ClippingApp()
41 	:	BApplication("application/x.vnd-Haiku.ClippingPlusRedraw")
42 {
43 	fWindow = new ClippingWindow(BRect(200, 200, 500, 400));
44 	fWindow->Show();
45 }
46 
47 
48 ClippingWindow::ClippingWindow(BRect frame)
49 	:	BWindow(frame, "Window", B_TITLED_WINDOW, B_QUIT_ON_WINDOW_CLOSE)
50 {
51 	fView = new ClippingView(frame.OffsetToSelf(0, 0));
52 	AddChild(fView);
53 	fView->MakeFocus();
54 }
55 
56 
57 ClippingView::ClippingView(BRect frame)
58 	:	BView(frame, "View", B_FOLLOW_ALL, B_WILL_DRAW),
59 		fFloatingWindow(NULL)
60 {
61 }
62 
63 
64 void
65 ClippingView::Draw(BRect updateRect)
66 {
67 	printf("got draw with update rect: %f, %f, %f, %f\n",
68 		updateRect.left, updateRect.top, updateRect.right, updateRect.bottom);
69 
70 	SetHighColor(0, 255, 0);
71 	FillRect(Bounds(), B_SOLID_HIGH);
72 }
73 
74 
75 void
76 ClippingView::MouseDown(BPoint where)
77 {
78 	if (fFloatingWindow == NULL) {
79 		BPoint leftTop = ConvertToScreen(BPoint(50, 50));
80 		fFloatingWindow = new BWindow(BRect(leftTop, leftTop + BPoint(100, 50)),
81 			"Floating", B_FLOATING_WINDOW, B_AVOID_FOCUS);
82 		fFloatingWindow->Show();
83 	} else {
84 		fFloatingWindow->Lock();
85 		fFloatingWindow->Quit();
86 		fFloatingWindow = NULL;
87 	}
88 }
89 
90 
91 void
92 ClippingView::KeyDown(const char *bytes, int32 numBytes)
93 {
94 	SetHighColor(0, 0, 255);
95 	FillRect(Bounds(), B_SOLID_HIGH);
96 
97 	BRegion region(BRect(200, 100, 250, 150));
98 	ConstrainClippingRegion(&region);
99 
100 	SetHighColor(255, 0, 0);
101 	FillRect(Bounds(), B_SOLID_HIGH);
102 }
103 
104 
105 int
106 main(int argc, const char *argv[])
107 {
108 	ClippingApp *app = new ClippingApp();
109 	app->Run();
110 	delete app;
111 	return 0;
112 }
113