1#include <Application.h>
2#include <Box.h>
3#include <Picture.h>
4#include <Region.h>
5#include <Shape.h>
6#include <View.h>
7#include <Window.h>
8
9
10
11class PictureView : public BBox {
12public:
13	PictureView(BRect frame);
14	~PictureView();
15
16	virtual void Draw(BRect update);
17	virtual void AllAttached();
18
19private:
20	BPicture *fPicture;
21};
22
23
24static void
25DrawStuff(BView *view)
26{
27	// StrokeShape
28	BShape shape;
29	BPoint bezier[3] = {BPoint(100,0), BPoint(100, 100), BPoint(25, 50)};
30	shape.MoveTo(BPoint(150,0));
31	shape.LineTo(BPoint(200,100));
32	shape.BezierTo(bezier);
33	shape.Close();
34	view->StrokeShape(&shape);
35
36	// Stroke/FillRect, Push/PopState, SetHighColor, SetLineMode, SetPenSize
37	view->PushState();
38	const rgb_color blue = { 0, 0, 240, 0 };
39	view->SetHighColor(blue);
40	view->SetLineMode(B_BUTT_CAP, B_BEVEL_JOIN);
41	view->SetPenSize(7);
42	view->StrokeRect(BRect(10, 220, 50, 260));
43	view->FillRect(BRect(65, 245, 120, 300));
44	view->PopState();
45
46	// Stroke/FillEllipse
47	view->StrokeEllipse(BPoint(50, 150), 50, 50);
48	view->FillEllipse(BPoint(100, 120), 50, 50);
49
50	// Stroke/FillArc
51	view->StrokeArc(BRect(0, 200, 50, 250), 180, 180);
52	view->FillArc(BPoint(150, 250), 50, 50, 0, 125);
53
54	// DrawString, SetHighColor, SetFontSize
55	const rgb_color red = { 240, 0, 0, 0 };
56	view->SetHighColor(red);
57	view->SetFontSize(20);
58	view->DrawString("BPicture test", BPoint(30, 20));
59
60	BRegion region;
61	region.Include(BRect(10, 10, 40, 40));
62	region.Include(BRect(30, 30, 100, 50));
63	view->ConstrainClippingRegion(&region);
64}
65
66
67
68
69// PictureView
70PictureView::PictureView(BRect frame)
71	:	BBox(frame, "pict_view", B_FOLLOW_ALL_SIDES, B_WILL_DRAW),
72		fPicture(NULL)
73{
74}
75
76
77PictureView::~PictureView()
78{
79	delete fPicture;
80}
81
82
83void
84PictureView::AllAttached()
85{
86	SetDiskMode("picture", 0);
87
88	DrawStuff(this);
89
90	BPicture *picture = EndPicture();
91	if (picture == NULL)
92		return;
93
94}
95
96void
97PictureView::Draw(BRect update)
98{
99	DrawPicture("picture", 0, B_ORIGIN);
100}
101
102
103// main
104int
105main()
106{
107	BApplication pictureApp("application/x-vnd.SetDiskModeTest");
108	BWindow *pictureWindow = new BWindow(BRect(100, 100, 500, 400),
109				"SetDiskMode test", B_TITLED_WINDOW,
110				B_NOT_RESIZABLE|B_NOT_ZOOMABLE|B_QUIT_ON_WINDOW_CLOSE);
111
112
113	BRect rect(pictureWindow->Bounds());
114
115	PictureView *pictureView = new PictureView(rect);
116
117	pictureWindow->AddChild(pictureView);
118	pictureWindow->Show();
119
120	pictureApp.Run();
121
122	return 0;
123}
124
125