1#include <Application.h> 2#include <Bitmap.h> 3#include <Region.h> 4#include <View.h> 5#include <Window.h> 6#include <stdio.h> 7 8 9class ClippingView : public BView { 10public: 11 ClippingView(BRect frame); 12 13virtual void Draw(BRect updateRect); 14virtual void MouseDown(BPoint where); 15virtual void KeyDown(const char *bytes, int32 numBytes); 16 17private: 18 BWindow * fFloatingWindow; 19}; 20 21 22class ClippingWindow : public BWindow { 23public: 24 ClippingWindow(BRect frame); 25 26private: 27 ClippingView * fView; 28}; 29 30 31class ClippingApp : public BApplication { 32public: 33 ClippingApp(); 34 35private: 36 ClippingWindow * fWindow; 37}; 38 39 40ClippingApp::ClippingApp() 41 : BApplication("application/x.vnd-Haiku.ClippingPlusRedraw") 42{ 43 fWindow = new ClippingWindow(BRect(200, 200, 500, 400)); 44 fWindow->Show(); 45} 46 47 48ClippingWindow::ClippingWindow(BRect frame) 49 : BWindow(frame, "Window", B_TITLED_WINDOW, B_QUIT_ON_WINDOW_CLOSE) 50{ 51 fView = new ClippingView(frame.OffsetToSelf(0, 0)); 52 AddChild(fView); 53 fView->MakeFocus(); 54} 55 56 57ClippingView::ClippingView(BRect frame) 58 : BView(frame, "View", B_FOLLOW_ALL, B_WILL_DRAW), 59 fFloatingWindow(NULL) 60{ 61} 62 63 64void 65ClippingView::Draw(BRect updateRect) 66{ 67 printf("got draw with update rect: %f, %f, %f, %f\n", 68 updateRect.left, updateRect.top, updateRect.right, updateRect.bottom); 69 70 SetHighColor(0, 255, 0); 71 FillRect(Bounds(), B_SOLID_HIGH); 72} 73 74 75void 76ClippingView::MouseDown(BPoint where) 77{ 78 if (fFloatingWindow == NULL) { 79 BPoint leftTop = ConvertToScreen(BPoint(50, 50)); 80 fFloatingWindow = new BWindow(BRect(leftTop, leftTop + BPoint(100, 50)), 81 "Floating", B_FLOATING_WINDOW, B_AVOID_FOCUS); 82 fFloatingWindow->Show(); 83 } else { 84 fFloatingWindow->Lock(); 85 fFloatingWindow->Quit(); 86 fFloatingWindow = NULL; 87 } 88} 89 90 91void 92ClippingView::KeyDown(const char *bytes, int32 numBytes) 93{ 94 SetHighColor(0, 0, 255); 95 FillRect(Bounds(), B_SOLID_HIGH); 96 97 BRegion region(BRect(200, 100, 250, 150)); 98 ConstrainClippingRegion(®ion); 99 100 SetHighColor(255, 0, 0); 101 FillRect(Bounds(), B_SOLID_HIGH); 102} 103 104 105int 106main(int argc, const char *argv[]) 107{ 108 ClippingApp *app = new ClippingApp(); 109 app->Run(); 110 delete app; 111 return 0; 112} 113