1// main.cpp
2
3#include <stdio.h>
4
5#include <Application.h>
6#include <View.h>
7#include <Window.h>
8
9class TestView : public BView {
10
11 public:
12					TestView(BRect frame, const char* name,
13							 uint32 resizeFlags, uint32 flags);
14
15	virtual	void	Draw(BRect updateRect);
16	virtual	void	MouseDown(BPoint where);
17
18 private:
19			BList	fMouseSamples;
20};
21
22// constructor
23TestView::TestView(BRect frame, const char* name,
24		uint32 resizeFlags, uint32 flags)
25	: BView(frame, name, resizeFlags, flags),
26	  fMouseSamples(128)
27{
28}
29
30// Draw
31void
32TestView::Draw(BRect updateRect)
33{
34	int32 count = fMouseSamples.CountItems();
35	if (count > 0) {
36		BPoint* p = (BPoint*)fMouseSamples.ItemAtFast(0);
37		MovePenTo(*p);
38	}
39
40	for (int32 i = 0; i < count; i++) {
41		BPoint* p = (BPoint*)fMouseSamples.ItemAtFast(i);
42		StrokeLine(*p);
43	}
44}
45
46// MouseDown
47void
48TestView::MouseDown(BPoint where)
49{
50	// clear previous stroke
51	int32 count = fMouseSamples.CountItems();
52	for (int32 i = 0; i < count; i++)
53		delete (BPoint*)fMouseSamples.ItemAtFast(i);
54	fMouseSamples.MakeEmpty();
55	FillRect(Bounds(), B_SOLID_LOW);
56
57	// sample new stroke
58	uint32 buttons;
59	GetMouse(&where, &buttons);
60	MovePenTo(where);
61	while (buttons) {
62
63		StrokeLine(where);
64		fMouseSamples.AddItem(new BPoint(where));
65
66		snooze(20000);
67		GetMouse(&where, &buttons);
68	}
69}
70
71
72// main
73int
74main(int argc, char** argv)
75{
76	BApplication app("application/x.vnd-Haiku.BitmapBounds");
77
78	BRect frame(50.0, 50.0, 300.0, 250.0);
79	BWindow* window = new BWindow(frame, "Bitmap Bounds", B_TITLED_WINDOW,
80		B_ASYNCHRONOUS_CONTROLS | B_QUIT_ON_WINDOW_CLOSE);
81
82	BView* view = new TestView(window->Bounds(), "test",
83		B_FOLLOW_ALL, B_WILL_DRAW);
84	window->AddChild(view);
85
86	window->Show();
87
88	app.Run();
89
90	return 0;
91}
92