Home | History | Annotate | Download | only in gpu
      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 
     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