/* * Copyright 2016 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" /** * This class takes a clip stack and produces a reduced set of elements that are equivalent to * applying that full stack within a specified query rectangle. */ class SK_API GrReducedClip { public: GrReducedClip(const SkClipStack& stack, const SkRect& queryBounds); /** * Uniquely identifies this reduced clip. */ int32_t genID() const { return fGenID; } /** * Bounding box within which the reduced clip is valid. The caller must not draw any pixels * outside this box. */ const SkIRect& iBounds() const { return fIBounds; } int left() const { return this->iBounds().left(); } int top() const { return this->iBounds().top(); } int width() const { return this->iBounds().width(); } int height() const { return this->iBounds().height(); } typedef SkTLList ElementList; /** * Populated with a minimal list of elements that implement the clip. */ const ElementList& elements() const { return fElements; } /** * Indicates whether antialiasing is required to process any of the clip elements. */ bool requiresAA() const { return fRequiresAA; } enum class InitialState : bool { kAllIn, kAllOut }; /** * The initial state of the clip within iBounds(). */ InitialState initialState() const { return fInitialState; } private: int32_t fGenID; SkIRect fIBounds; ElementList fElements; bool fRequiresAA; InitialState fInitialState; }; #endif