1#include <Application.h>
2#include <Window.h>
3#include <Bitmap.h>
4
5#include <vector>
6
7struct Bmp {
8 BBitmap *b;
9 BView *v;
10 BPoint l;
11 bool dr;
12};
13
14class View:public BView
15{
16public:View(BRect f):
17 BView(f, "Text", B_FOLLOW_ALL, B_WILL_DRAW){
18
19 /* bitmap shit */
20 SetHighColor(0,0,0);
21 bmp.b=new BBitmap(Bounds(), B_RGB32, true);
22 bmp.v=new BView(Bounds(), "bmpView", B_FOLLOW_ALL, B_WILL_DRAW);
23 bmp.b->AddChild(bmp.v);
24 bmp.b->Lock();
25
26 z=20;
27
28 bmp.v->SetHighColor(255,255,255);
29 bmp.v->FillRect(Bounds());
30 bmp.v->SetHighColor(0,0,0);
31
32 bmp.v->SetPenSize(z);
33 bmp.v->SetLineMode(B_ROUND_CAP, B_ROUND_JOIN);
34 bmp.b->Unlock();
35 bmp.dr=false;
36}
37
38 void AttachedToWindow()
39 {
40 MakeFocus(true);
41 }
42
43 void Draw(BRect r)
44 {
45 bmp.b->Lock();
46 bmp.v->Sync();
47 bmp.b->Unlock();
48 DrawBitmap(bmp.b, r, r);
49 }
50
51 void MouseMoved(BPoint p, uint32 c, const BMessage *m)
52 {
53 if (!bmp.dr) return;
54
55 bmp.b->Lock();
56 bmp.v->StrokeLine(bmp.l, p);
57 bmp.v->Sync();
58 bmp.b->Unlock();
59
60 Invalidate();
61 bmp.l=p;
62 }
63
64 void MouseDown(BPoint p)
65 {
66 bmp.dr=true;
67 bmp.l=p;
68 }
69
70 void MouseUp(BPoint p)
71 {
72 bmp.dr=false;
73 }
74
75 void KeyDown(const char *c, int32 n)
76 {
77 bmp.b->Lock();
78 switch (c[0])
79 {
80 case 'c':
81 bmp.v->SetHighColor(255, 255, 255);
82 bmp.v->FillRect(Bounds());
83 bmp.v->SetHighColor(0, 0, 0);
84 break;
85 case 'e':
86 er=!er;
87 if (er){
88 bmp.v->SetHighColor(255, 255, 255);
89 }else{
90 bmp.v->SetHighColor(0, 0, 0);
91 }
92 break;
93 }
94 bmp.b->Unlock();
95 Invalidate();
96 }
97private:
98 Bmp bmp;
99 uint32 z;
100 bool er=false;
101
102};
103
104class Win:public BWindow
105{
106public:Win(BRect f):
107 BWindow(f, "Bitdraw", B_TITLED_WINDOW, B_QUIT_ON_WINDOW_CLOSE)
108 {
109 View *view=new View(Bounds());
110 AddChild(view);
111 }
112};
113
114class App:public BApplication
115{
116public:App():BApplication("application/x-vnd.example.typist")
117 {
118 BRect rect(100,100,640,480);
119 Win *w = new Win(rect);
120 w->Show();
121 }
122};
123
124int main(void)
125{
126 App a;
127 a.Run();
128 return 0;
129}