diff --git a/src/tests/kits/interface/ClippingPlusRedraw.cpp b/src/tests/kits/interface/ClippingPlusRedraw.cpp new file mode 100644 index 0000000000..26d71e6ef3 --- /dev/null +++ b/src/tests/kits/interface/ClippingPlusRedraw.cpp @@ -0,0 +1,112 @@ +#include +#include +#include +#include +#include +#include + + +class ClippingView : public BView { +public: + ClippingView(BRect frame); + +virtual void Draw(BRect updateRect); +virtual void MouseDown(BPoint where); +virtual void KeyDown(const char *bytes, int32 numBytes); + +private: + BWindow * fFloatingWindow; +}; + + +class ClippingWindow : public BWindow { +public: + ClippingWindow(BRect frame); + +private: + ClippingView * fView; +}; + + +class ClippingApp : public BApplication { +public: + ClippingApp(); + +private: + ClippingWindow * fWindow; +}; + + +ClippingApp::ClippingApp() + : BApplication("application/x.vnd-Haiku.ClippingPlusRedraw") +{ + fWindow = new ClippingWindow(BRect(200, 200, 500, 400)); + fWindow->Show(); +} + + +ClippingWindow::ClippingWindow(BRect frame) + : BWindow(frame, "Window", B_TITLED_WINDOW, B_QUIT_ON_WINDOW_CLOSE) +{ + fView = new ClippingView(frame.OffsetToSelf(0, 0)); + AddChild(fView); + fView->MakeFocus(); +} + + +ClippingView::ClippingView(BRect frame) + : BView(frame, "View", B_FOLLOW_ALL, B_WILL_DRAW), + fFloatingWindow(NULL) +{ +} + + +void +ClippingView::Draw(BRect updateRect) +{ + printf("got draw with update rect: %f, %f, %f, %f\n", + updateRect.left, updateRect.top, updateRect.right, updateRect.bottom); + + SetHighColor(0, 255, 0); + FillRect(Bounds(), B_SOLID_HIGH); +} + + +void +ClippingView::MouseDown(BPoint where) +{ + if (fFloatingWindow == NULL) { + BPoint leftTop = ConvertToScreen(BPoint(50, 50)); + fFloatingWindow = new BWindow(BRect(leftTop, leftTop + BPoint(100, 50)), + "Floating", B_FLOATING_WINDOW, B_AVOID_FOCUS); + fFloatingWindow->Show(); + } else { + fFloatingWindow->Lock(); + fFloatingWindow->Quit(); + fFloatingWindow = NULL; + } +} + + +void +ClippingView::KeyDown(const char *bytes, int32 numBytes) +{ + SetHighColor(0, 0, 255); + FillRect(Bounds(), B_SOLID_HIGH); + + BRegion region(BRect(200, 100, 250, 150)); + ConstrainClippingRegion(®ion); + + SetHighColor(255, 0, 0); + FillRect(Bounds(), B_SOLID_HIGH); +} + + +int +main(int argc, const char *argv[]) +{ + ClippingApp *app = new ClippingApp(); + app->Run(); + delete app; + return 0; +} diff --git a/src/tests/kits/interface/Jamfile b/src/tests/kits/interface/Jamfile index 5f00788ed7..9b8dd3b0be 100644 --- a/src/tests/kits/interface/Jamfile +++ b/src/tests/kits/interface/Jamfile @@ -129,6 +129,12 @@ SimpleTest WidthBufferTest : : be ; + +SimpleTest ClippingPlusRedraw : + ClippingPlusRedraw.cpp + : be +; + SEARCH on [ FGristFiles ScrollView.cpp CheckBox.cpp ChannelSlider.cpp ChannelControl.cpp Slider.cpp Control.cpp ] = [ FDirName $(HAIKU_TOP) src kits interface ] ;