1 /* 2 * Copyright 2010 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 #ifndef GrClip_DEFINED 9 #define GrClip_DEFINED 10 11 #include "SkClipStack.h" 12 #include "GrSurface.h" 13 14 struct SkIRect; 15 16 /** 17 * GrClipData encapsulates the information required to construct the clip 18 * masks. 'fOrigin' is only non-zero when saveLayer has been called 19 * with an offset bounding box. The clips in 'fClipStack' are in 20 * device coordinates (i.e., they have been translated by -fOrigin w.r.t. 21 * the canvas' device coordinates). 22 */ 23 class GrClipData : SkNoncopyable { 24 public: 25 const SkClipStack* fClipStack; 26 SkIPoint fOrigin; 27 GrClipData()28 GrClipData() 29 : fClipStack(NULL) { 30 fOrigin.setZero(); 31 } 32 33 bool operator==(const GrClipData& other) const { 34 if (fOrigin != other.fOrigin) { 35 return false; 36 } 37 38 if (NULL != fClipStack && NULL != other.fClipStack) { 39 return *fClipStack == *other.fClipStack; 40 } 41 42 return fClipStack == other.fClipStack; 43 } 44 45 bool operator!=(const GrClipData& other) const { 46 return !(*this == other); 47 } 48 49 void getConservativeBounds(const GrSurface* surface, 50 SkIRect* devResult, 51 bool* isIntersectionOfRects = NULL) const { 52 this->getConservativeBounds(surface->width(), surface->height(), 53 devResult, isIntersectionOfRects); 54 } 55 56 void getConservativeBounds(int width, int height, 57 SkIRect* devResult, 58 bool* isIntersectionOfRects = NULL) const; 59 }; 60 61 #endif 62