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(®ion); 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