#include <stdio.h>
#include <Application.h>
#include <View.h>
#include <Window.h>
class TestView : public BView {
public:
TestView(BRect frame, const char* name,
uint32 resizeFlags, uint32 flags);
virtual void Draw(BRect updateRect);
virtual void MouseDown(BPoint where);
private:
BList fMouseSamples;
};
TestView::TestView(BRect frame, const char* name,
uint32 resizeFlags, uint32 flags)
: BView(frame, name, resizeFlags, flags),
fMouseSamples(128)
{
}
void
TestView::Draw(BRect updateRect)
{
int32 count = fMouseSamples.CountItems();
if (count > 0) {
BPoint* p = (BPoint*)fMouseSamples.ItemAtFast(0);
MovePenTo(*p);
}
for (int32 i = 0; i < count; i++) {
BPoint* p = (BPoint*)fMouseSamples.ItemAtFast(i);
StrokeLine(*p);
}
}
void
TestView::MouseDown(BPoint where)
{
int32 count = fMouseSamples.CountItems();
for (int32 i = 0; i < count; i++)
delete (BPoint*)fMouseSamples.ItemAtFast(i);
fMouseSamples.MakeEmpty();
FillRect(Bounds(), B_SOLID_LOW);
uint32 buttons;
GetMouse(&where, &buttons);
MovePenTo(where);
while (buttons) {
StrokeLine(where);
fMouseSamples.AddItem(new BPoint(where));
snooze(20000);
GetMouse(&where, &buttons);
}
}
int
main(int argc, char** argv)
{
BApplication app("application/x.vnd-Haiku.BitmapBounds");
BRect frame(50.0, 50.0, 300.0, 250.0);
BWindow* window = new BWindow(frame, "Bitmap Bounds", B_TITLED_WINDOW,
B_ASYNCHRONOUS_CONTROLS | B_QUIT_ON_WINDOW_CLOSE);
BView* view = new TestView(window->Bounds(), "test",
B_FOLLOW_ALL, B_WILL_DRAW);
window->AddChild(view);
window->Show();
app.Run();
return 0;
}