/* * Copyright 2012 Google Inc. * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #ifndef GrReducedClip_DEFINED #define GrReducedClip_DEFINED #include "SkClipStack.h" #include "SkTLList.h" class SK_API GrReducedClip { public: typedef SkTLList ElementList; enum InitialState { kAllIn_InitialState, kAllOut_InitialState, }; /** * This function produces a reduced set of SkClipStack::Elements that are equivalent to applying * a full clip stack within a specified query rectangle. * * @param stack the clip stack to reduce. * @param queryBounds bounding box of geometry the stack will clip. * @param result populated with a minimal list of elements that implement the clip * within the provided query bounds. * @param resultGenID uniquely identifies the resulting reduced clip. * @param clipIBounds bounding box within which the reduced clip is valid. The caller must * not draw any pixels outside this box. NOTE: this box may be undefined * if no pixels are valid (e.g. empty result, "all out" initial state.) * @param requiresAA indicates whether anti-aliasing is required to process any of the * elements in the element list result. Undefined if the result is empty. * @return the initial clip state within clipIBounds ("all in" or "all out"). */ static InitialState ReduceClipStack(const SkClipStack& stack, const SkRect& queryBounds, ElementList* result, int32_t* resultGenID, SkIRect* clipIBounds, bool* requiresAA); }; #endif