1 // main.cpp
2
3 #include <stdio.h>
4
5 #include <Application.h>
6 #include <Region.h>
7 #include <View.h>
8 #include <Window.h>
9
10 class TestView1 : public BView {
11
12 public:
TestView1(BRect frame,const char * name,uint32 resizeFlags,uint32 flags)13 TestView1(BRect frame, const char* name, uint32 resizeFlags, uint32 flags)
14 : BView(frame, name, resizeFlags, flags)
15 {
16 SetViewUIColor(B_PANEL_BACKGROUND_COLOR);
17 SetHighColor(ViewColor());
18 }
19
Draw(BRect updateRect)20 virtual void Draw(BRect updateRect)
21 {
22 BRegion region;
23 region.Include(BRect(20, 20, 40, 40));
24 region.Include(BRect(30, 30, 80, 80));
25 ConstrainClippingRegion(®ion);
26
27 SetHighColor(255, 0, 0, 255);
28 FillRect(BRect(0, 0, 100, 100));
29
30 ConstrainClippingRegion(NULL);
31
32 SetHighColor(0, 0, 0, 255);
33 StrokeLine(BPoint(2, 2), BPoint(80, 80));
34 }
35 };
36
37 class TestView2 : public BView {
38
39 public:
TestView2(BRect frame,const char * name,uint32 resizeFlags,uint32 flags)40 TestView2(BRect frame, const char* name, uint32 resizeFlags, uint32 flags)
41 : BView(frame, name, resizeFlags, flags)
42 {
43 SetViewUIColor(B_PANEL_BACKGROUND_COLOR);
44 SetHighColor(ViewColor());
45 }
46
AttachedToWindow()47 virtual void AttachedToWindow()
48 {
49 SetOrigin(20, 20);
50 }
51
Draw(BRect updateRect)52 virtual void Draw(BRect updateRect)
53 {
54 // SetOrigin(20, 20);
55
56 BRegion region;
57 region.Include(BRect(20, 20, 40, 40));
58 region.Include(BRect(30, 30, 80, 80));
59 ConstrainClippingRegion(®ion);
60
61 SetHighColor(255, 128, 0, 255);
62 FillRect(BRect(0, 0, 100, 100));
63
64 ConstrainClippingRegion(NULL);
65
66 SetHighColor(0, 0, 0, 255);
67 StrokeLine(BPoint(2, 2), BPoint(80, 80));
68 }
69 };
70
71 class TestView3 : public BView {
72
73 public:
TestView3(BRect frame,const char * name,uint32 resizeFlags,uint32 flags)74 TestView3(BRect frame, const char* name, uint32 resizeFlags, uint32 flags)
75 : BView(frame, name, resizeFlags, flags)
76 {
77 SetViewUIColor(B_PANEL_BACKGROUND_COLOR);
78 SetHighColor(ViewColor());
79 }
80
AttachedToWindow()81 virtual void AttachedToWindow()
82 {
83 SetOrigin(20, 20);
84 }
85
Draw(BRect updateRect)86 virtual void Draw(BRect updateRect)
87 {
88 BRegion region;
89 region.Include(BRect(20, 20, 40, 40));
90 region.Include(BRect(30, 30, 80, 80));
91 ConstrainClippingRegion(®ion);
92
93 SetHighColor(55, 255, 128, 255);
94 FillRect(BRect(0, 0, 100, 100));
95
96 PushState();
97 SetOrigin(15, 15);
98
99 ConstrainClippingRegion(®ion);
100
101 SetHighColor(155, 255, 128, 255);
102 FillRect(BRect(0, 0, 100, 100));
103
104 // ConstrainClippingRegion(NULL);
105
106 SetHighColor(0, 0, 0, 255);
107 StrokeLine(BPoint(2, 2), BPoint(80, 80));
108 SetHighColor(255, 0, 0, 255);
109 StrokeLine(BPoint(2, 2), BPoint(4, 2));
110 PopState();
111
112 SetHighColor(0, 0, 0, 255);
113 StrokeLine(BPoint(4, 2), BPoint(82, 80));
114 }
115 };
116
117 class TestView4 : public BView {
118
119 public:
TestView4(BRect frame,const char * name,uint32 resizeFlags,uint32 flags)120 TestView4(BRect frame, const char* name, uint32 resizeFlags, uint32 flags)
121 : BView(frame, name, resizeFlags, flags)
122 {
123 SetViewUIColor(B_PANEL_BACKGROUND_COLOR);
124 SetHighColor(ViewColor());
125 }
126
AttachedToWindow()127 virtual void AttachedToWindow()
128 {
129 SetOrigin(20, 20);
130 }
131
Draw(BRect updateRect)132 virtual void Draw(BRect updateRect)
133 {
134 BRegion region;
135 region.Include(BRect(20, 20, 40, 40));
136 region.Include(BRect(30, 30, 140, 140));
137 ConstrainClippingRegion(®ion);
138
139 SetHighColor(55, 255, 128, 255);
140 FillRect(BRect(0, 0, 200, 200));
141
142 // NOTE: This exposes broken behavior of the ZETA
143 // (probably R5 too) app_server. The new origin
144 // is not taken into account
145 PushState();
146
147 ConstrainClippingRegion(®ion);
148 SetOrigin(15, 15);
149 SetScale(1.5);
150
151 SetHighColor(155, 255, 128, 255);
152 FillRect(BRect(0, 0, 200, 200));
153
154 ConstrainClippingRegion(NULL);
155
156 SetHighColor(0, 0, 0, 255);
157 SetDrawingMode(B_OP_OVER);
158 DrawString("Text is scaled.", BPoint(20, 30));
159
160 SetScale(1.2);
161 DrawString("Text is scaled.", BPoint(20, 30));
162
163 StrokeLine(BPoint(2, 2), BPoint(80, 80));
164
165 PopState();
166
167 SetHighColor(0, 0, 0, 255);
168 StrokeLine(BPoint(4, 2), BPoint(82, 80));
169 }
170 };
171
172 class TestView5 : public BView {
173
174 public:
TestView5(BRect frame,const char * name,uint32 resizeFlags,uint32 flags)175 TestView5(BRect frame, const char* name, uint32 resizeFlags, uint32 flags)
176 : BView(frame, name, resizeFlags, flags)
177 {
178 SetViewUIColor(B_PANEL_BACKGROUND_COLOR);
179 SetHighColor(ViewColor());
180 }
181
AttachedToWindow()182 virtual void AttachedToWindow()
183 {
184 }
185
Draw(BRect updateRect)186 virtual void Draw(BRect updateRect)
187 {
188 BRegion region;
189 region.Include(BRect(0, 0, 40, 40));
190 region.Include(BRect(30, 30, 140, 140));
191 ConstrainClippingRegion(®ion);
192
193 SetHighColor(55, 255, 128, 255);
194 FillRect(BRect(0, 0, 200, 200));
195
196 PushState();
197 ConstrainClippingRegion(®ion);
198 SetOrigin(50, 10);
199
200 SetHighColor(155, 55, 128, 255);
201 FillRect(BRect(0, 0, 200, 200));
202 PopState();
203
204 SetHighColor(255, 0, 0);
205 StrokeLine(Bounds().LeftTop(), Bounds().RightBottom());
206 }
207 };
208
209
210 class TestView6 : public BView {
211
212 public:
TestView6(BRect frame,const char * name,uint32 resizeFlags,uint32 flags)213 TestView6(BRect frame, const char* name, uint32 resizeFlags, uint32 flags)
214 : BView(frame, name, resizeFlags, flags)
215 {
216 SetViewUIColor(B_PANEL_BACKGROUND_COLOR);
217 SetHighColor(ViewColor());
218 }
219
AttachedToWindow()220 virtual void AttachedToWindow()
221 {
222 }
223
Draw(BRect updateRect)224 virtual void Draw(BRect updateRect)
225 {
226 BRegion region;
227 region.Include(BRect(0, 0, 40, 40));
228 region.Include(BRect(30, 30, 140, 140));
229 ConstrainClippingRegion(®ion);
230
231 SetHighColor(55, 255, 128, 255);
232 FillRect(BRect(0, 0, 200, 200));
233
234 PushState();
235 SetOrigin(50, 10);
236 ConstrainClippingRegion(®ion);
237
238 SetHighColor(155, 55, 128, 255);
239 FillRect(BRect(0, 0, 200, 200));
240 PopState();
241
242 SetHighColor(255, 0, 0);
243 StrokeLine(Bounds().LeftTop(), Bounds().RightBottom());
244 }
245 };
246
247 // main
248 int
main(int argc,char ** argv)249 main(int argc, char** argv)
250 {
251 BApplication* app = new BApplication(
252 "application/x.vnd-Haiku.ClippingRegion");
253
254 BRect frame(50.0, 50.0, 300.0, 250.0);
255 BWindow* window;
256 BView* view;
257
258 // window = new BWindow(frame, "Test1", B_TITLED_WINDOW,
259 // B_ASYNCHRONOUS_CONTROLS | B_QUIT_ON_WINDOW_CLOSE);
260 //
261 // view = new TestView1(window->Bounds(), "test1", B_FOLLOW_ALL,
262 // B_WILL_DRAW);
263 // window->AddChild(view);
264 // window->Show();
265 //
266 // frame.OffsetBy(20, 20);
267 // window = new BWindow(frame, "Test2", B_TITLED_WINDOW,
268 // B_ASYNCHRONOUS_CONTROLS | B_QUIT_ON_WINDOW_CLOSE);
269 //
270 // view = new TestView2(window->Bounds(), "test2", B_FOLLOW_ALL,
271 // B_WILL_DRAW);
272 // window->AddChild(view);
273 // window->Show();
274 //
275 // frame.OffsetBy(20, 20);
276 // window = new BWindow(frame, "Test3", B_TITLED_WINDOW,
277 // B_ASYNCHRONOUS_CONTROLS | B_QUIT_ON_WINDOW_CLOSE);
278 //
279 // view = new TestView3(window->Bounds(), "test3", B_FOLLOW_ALL,
280 // B_WILL_DRAW);
281 // window->AddChild(view);
282 // window->Show();
283 //
284 // frame.OffsetBy(20, 20);
285 // window = new BWindow(frame, "Test4", B_TITLED_WINDOW,
286 // B_ASYNCHRONOUS_CONTROLS | B_QUIT_ON_WINDOW_CLOSE);
287 //
288 // view = new TestView4(window->Bounds(), "test4", B_FOLLOW_ALL,
289 // B_WILL_DRAW);
290 // window->AddChild(view);
291 // window->Show();
292
293
294 frame.OffsetBy(20, 20);
295 window = new BWindow(frame, "Test5", B_TITLED_WINDOW,
296 B_ASYNCHRONOUS_CONTROLS | B_QUIT_ON_WINDOW_CLOSE);
297
298 view = new TestView5(window->Bounds(), "test5", B_FOLLOW_ALL,
299 B_WILL_DRAW);
300 window->AddChild(view);
301 window->Show();
302
303 frame.OffsetBy(20, 20);
304 window = new BWindow(frame, "Test6", B_TITLED_WINDOW,
305 B_ASYNCHRONOUS_CONTROLS | B_QUIT_ON_WINDOW_CLOSE);
306
307 view = new TestView6(window->Bounds(), "test6", B_FOLLOW_ALL,
308 B_WILL_DRAW);
309 window->AddChild(view);
310 window->Show();
311
312 app->Run();
313
314 delete app;
315 return 0;
316 }
317