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 11 class PictureView : public BBox { 12 public: 13 PictureView(BRect frame); 14 ~PictureView(); 15 16 virtual void Draw(BRect update); 17 virtual void AllAttached(); 18 19 private: 20 BPicture *fPicture; 21 }; 22 23 24 static void 25 DrawStuff(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(®ion); 64 } 65 66 67 68 69 // PictureView 70 PictureView::PictureView(BRect frame) 71 : BBox(frame, "pict_view", B_FOLLOW_ALL_SIDES, B_WILL_DRAW), 72 fPicture(NULL) 73 { 74 } 75 76 77 PictureView::~PictureView() 78 { 79 delete fPicture; 80 } 81 82 83 void 84 PictureView::AllAttached() 85 { 86 SetDiskMode("picture", 0); 87 88 DrawStuff(this); 89 90 BPicture *picture = EndPicture(); 91 if (picture == NULL) 92 return; 93 94 } 95 96 void 97 PictureView::Draw(BRect update) 98 { 99 DrawPicture("picture", 0, B_ORIGIN); 100 } 101 102 103 // main 104 int 105 main() 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