Home | History | Annotate | Download | only in tests
      1 /*
      2  * Copyright 2015 Google Inc.
      3  *
      4  * Use of this source code is governed by a BSD-style license that can be
      5  * found in the LICENSE file.
      6  */
      7 
      8 #include "SkTypes.h"
      9 
     10 #include "GrClipStackClip.h"
     11 #include "SkClipOpPriv.h"
     12 #include "SkClipStack.h"
     13 #include "SkMatrix.h"
     14 #include "SkRect.h"
     15 #include "Test.h"
     16 
     17 // Ensure that the 'getConservativeBounds' calls are returning bounds clamped
     18 // to the render target
     19 DEF_GPUTEST_FOR_RENDERING_CONTEXTS(GrClipBounds, reporter, ctxInfo) {
     20     static const int kXSize = 100;
     21     static const int kYSize = 100;
     22 
     23     const SkIRect intScreen = SkIRect::MakeWH(kXSize, kYSize);
     24     const SkRect screen = SkRect::Make(intScreen);
     25 
     26     SkRect clipRect(screen);
     27     clipRect.outset(10, 10);
     28 
     29     // create a clip stack that will (trivially) reduce to a single rect that
     30     // is larger than the screen
     31     SkClipStack stack;
     32     stack.clipRect(clipRect, SkMatrix::I(), kReplace_SkClipOp, false);
     33 
     34     bool isIntersectionOfRects = true;
     35     SkRect devStackBounds;
     36 
     37     stack.getConservativeBounds(0, 0, kXSize, kYSize,
     38                                 &devStackBounds,
     39                                 &isIntersectionOfRects);
     40 
     41     // make sure that the SkClipStack is behaving itself
     42     REPORTER_ASSERT(reporter, screen == devStackBounds);
     43     REPORTER_ASSERT(reporter, isIntersectionOfRects);
     44 
     45     // wrap the SkClipStack in a GrClip
     46     GrClipStackClip clipData(&stack);
     47 
     48     SkIRect devGrClipBound;
     49     clipData.getConservativeBounds(kXSize, kYSize,
     50                                    &devGrClipBound,
     51                                    &isIntersectionOfRects);
     52 
     53     // make sure that GrClip is behaving itself
     54     REPORTER_ASSERT(reporter, intScreen == devGrClipBound);
     55     REPORTER_ASSERT(reporter, isIntersectionOfRects);
     56 }
     57