root/src/tests/kits/interface/SetDiskModeTest.cpp
#include <Application.h>
#include <Box.h>
#include <Picture.h>
#include <Region.h>
#include <Shape.h>
#include <View.h>
#include <Window.h>



class PictureView : public BBox {
public:
        PictureView(BRect frame);
        ~PictureView();
        
        virtual void Draw(BRect update);
        virtual void AllAttached();

private:
        BPicture *fPicture;
};


static void
DrawStuff(BView *view)
{
        // StrokeShape
        BShape shape;
        BPoint bezier[3] = {BPoint(100,0), BPoint(100, 100), BPoint(25, 50)};
        shape.MoveTo(BPoint(150,0));
        shape.LineTo(BPoint(200,100));
        shape.BezierTo(bezier);
        shape.Close();
        view->StrokeShape(&shape);
        
        // Stroke/FillRect, Push/PopState, SetHighColor, SetLineMode, SetPenSize
        view->PushState();
        const rgb_color blue = { 0, 0, 240, 0 };
        view->SetHighColor(blue);
        view->SetLineMode(B_BUTT_CAP, B_BEVEL_JOIN);
        view->SetPenSize(7);
        view->StrokeRect(BRect(10, 220, 50, 260));
        view->FillRect(BRect(65, 245, 120, 300));
        view->PopState();
        
        // Stroke/FillEllipse
        view->StrokeEllipse(BPoint(50, 150), 50, 50);
        view->FillEllipse(BPoint(100, 120), 50, 50);
        
        // Stroke/FillArc
        view->StrokeArc(BRect(0, 200, 50, 250), 180, 180);
        view->FillArc(BPoint(150, 250), 50, 50, 0, 125);
        
        // DrawString, SetHighColor, SetFontSize
        const rgb_color red = { 240, 0, 0, 0 };
        view->SetHighColor(red);
        view->SetFontSize(20);
        view->DrawString("BPicture test", BPoint(30, 20));

        BRegion region;
        region.Include(BRect(10, 10, 40, 40));
        region.Include(BRect(30, 30, 100, 50));
        view->ConstrainClippingRegion(&region);
}




// PictureView
PictureView::PictureView(BRect frame)
        :       BBox(frame, "pict_view", B_FOLLOW_ALL_SIDES, B_WILL_DRAW),
                fPicture(NULL)
{
}


PictureView::~PictureView()
{
        delete fPicture;
}


void
PictureView::AllAttached()
{       
        SetDiskMode("picture", 0);

        DrawStuff(this);

        BPicture *picture = EndPicture();
        if (picture == NULL)
                return;

}

void
PictureView::Draw(BRect update)
{
        DrawPicture("picture", 0, B_ORIGIN);
}


// main
int
main()
{               
        BApplication pictureApp("application/x-vnd.SetDiskModeTest");
        BWindow *pictureWindow = new BWindow(BRect(100, 100, 500, 400),
                                "SetDiskMode test", B_TITLED_WINDOW,
                                B_NOT_RESIZABLE|B_NOT_ZOOMABLE|B_QUIT_ON_WINDOW_CLOSE);
        
        
        BRect rect(pictureWindow->Bounds());
        
        PictureView *pictureView = new PictureView(rect);
        
        pictureWindow->AddChild(pictureView);
        pictureWindow->Show();

        pictureApp.Run();
        
        return 0;
}