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 "Test.h"
9// This is a GR test
10#if SK_SUPPORT_GPU
11#include "GrClipStackClip.h"
12#include "GrContext.h"
13
14// Ensure that the 'getConservativeBounds' calls are returning bounds clamped
15// to the render target
16DEF_GPUTEST_FOR_RENDERING_CONTEXTS(GrClipBounds, reporter, ctxInfo) {
17    static const int kXSize = 100;
18    static const int kYSize = 100;
19
20    const SkIRect intScreen = SkIRect::MakeWH(kXSize, kYSize);
21    const SkRect screen = SkRect::Make(intScreen);
22
23    SkRect clipRect(screen);
24    clipRect.outset(10, 10);
25
26    // create a clip stack that will (trivially) reduce to a single rect that
27    // is larger than the screen
28    SkClipStack stack;
29    stack.clipRect(clipRect, SkMatrix::I(), kReplace_SkClipOp, false);
30
31    bool isIntersectionOfRects = true;
32    SkRect devStackBounds;
33
34    stack.getConservativeBounds(0, 0, kXSize, kYSize,
35                                &devStackBounds,
36                                &isIntersectionOfRects);
37
38    // make sure that the SkClipStack is behaving itself
39    REPORTER_ASSERT(reporter, screen == devStackBounds);
40    REPORTER_ASSERT(reporter, isIntersectionOfRects);
41
42    // wrap the SkClipStack in a GrClip
43    GrClipStackClip clipData(&stack);
44
45    SkIRect devGrClipBound;
46    clipData.getConservativeBounds(kXSize, kYSize,
47                                   &devGrClipBound,
48                                   &isIntersectionOfRects);
49
50    // make sure that GrClip is behaving itself
51    REPORTER_ASSERT(reporter, intScreen == devGrClipBound);
52    REPORTER_ASSERT(reporter, isIntersectionOfRects);
53}
54
55#endif
56