blob: abfc244f208cf537f3aa229197d696aca1776c15 [file] [log] [blame]
bsalomon@google.com170bd792012-12-05 22:26:11 +00001
2/*
3 * Copyright 2012 Google Inc.
4 *
5 * Use of this source code is governed by a BSD-style license that can be
6 * found in the LICENSE file.
7 */
8
9#include "SkClipStack.h"
10#include "SkTLList.h"
11
12namespace GrReducedClip {
13
14typedef SkTLList<SkClipStack::Element> ElementList;
15
16enum InitialState {
17 kAllIn_InitialState,
18 kAllOut_InitialState,
19};
20
21/**
22 * This function takes a clip stack and a query rectangle and it produces a reduced set of
23 * SkClipStack::Elements that are equivalent to applying the full stack to the rectangle. The
24 * initial state of the query rectangle before the first clip element is applied is returned via
bsalomon@google.com34cd70a2012-12-06 14:23:20 +000025 * initialState. Optionally, the caller can request a tighter bounds on the clip be returned via
26 * tighterBounds. If not NULL, tighterBounds will always be contained by queryBounds after return.
27 * If tighterBounds is specified then it is assumed that the caller will implicitly clip against it.
28 * If the caller specifies non-NULL for requiresAA then it will indicate whether anti-aliasing is
29 * required to process any of the elements in the result.
30 *
31 * This may become a member function of SkClipStack when its interface is determined to be stable.
bsalomon@google.com170bd792012-12-05 22:26:11 +000032 */
bsalomon@google.com34cd70a2012-12-06 14:23:20 +000033void ReduceClipStack(const SkClipStack& stack,
34 const SkIRect& queryBounds,
35 ElementList* result,
36 InitialState* initialState,
37 SkIRect* tighterBounds = NULL,
38 bool* requiresAA = NULL);
bsalomon@google.com170bd792012-12-05 22:26:11 +000039
40} // namespace GrReducedClip