• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright 2014 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 SkNoSaveLayerCanvas_DEFINED
9 #define SkNoSaveLayerCanvas_DEFINED
10 
11 #include "SkCanvas.h"
12 #include "SkRRect.h"
13 
14 // The NoSaveLayerCanvas is used to play back SkPictures when the saveLayer
15 // functionality isn't required (e.g., during analysis of the draw calls).
16 // It also simplifies the clipping calls to only use rectangles.
17 class SK_API SkNoSaveLayerCanvas : public SkCanvas {
18 public:
SkNoSaveLayerCanvas(SkBaseDevice * device)19     SkNoSaveLayerCanvas(SkBaseDevice* device) : INHERITED(device) {}
20 
21 protected:
willSaveLayer(const SkRect * bounds,const SkPaint * paint,SaveFlags flags)22     virtual SaveLayerStrategy willSaveLayer(const SkRect* bounds, const SkPaint* paint,
23                                             SaveFlags flags) SK_OVERRIDE {
24         this->INHERITED::willSaveLayer(bounds, paint, flags);
25         return kNoLayer_SaveLayerStrategy;
26     }
27 
28     // disable aa for speed
onClipRect(const SkRect & rect,SkRegion::Op op,ClipEdgeStyle)29     virtual void onClipRect(const SkRect& rect, SkRegion::Op op, ClipEdgeStyle) SK_OVERRIDE {
30         this->INHERITED::onClipRect(rect, op, kHard_ClipEdgeStyle);
31     }
32 
33     // for speed, just respect the bounds, and disable AA. May give us a few
34     // false positives and negatives.
onClipPath(const SkPath & path,SkRegion::Op op,ClipEdgeStyle)35     virtual void onClipPath(const SkPath& path, SkRegion::Op op, ClipEdgeStyle) SK_OVERRIDE {
36         this->updateClipConservativelyUsingBounds(path.getBounds(), op,
37                                                   path.isInverseFillType());
38     }
onClipRRect(const SkRRect & rrect,SkRegion::Op op,ClipEdgeStyle)39     virtual void onClipRRect(const SkRRect& rrect, SkRegion::Op op, ClipEdgeStyle) SK_OVERRIDE {
40         this->updateClipConservativelyUsingBounds(rrect.getBounds(), op, false);
41     }
42 
43 private:
44     typedef SkCanvas INHERITED;
45 };
46 
47 #endif // SkNoSaveLayerCanvas_DEFINED
48