• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #ifndef SkLayerDrawLooper_DEFINED
2 #define SkLayerDrawLooper_DEFINED
3 
4 #include "SkDrawLooper.h"
5 
6 struct SkPoint;
7 
8 class SkLayerDrawLooper : public SkDrawLooper {
9 public:
10             SkLayerDrawLooper();
11     virtual ~SkLayerDrawLooper();
12 
13     /** Call for each layer you want to add (from top to bottom).
14         This returns a paint you can modify, but that ptr is only valid until
15         the next call made to this object.
16      */
17     SkPaint* addLayer(SkScalar dx, SkScalar dy);
18 
19     /** Helper for addLayer() which passes (0, 0) for the offset parameters
20      */
addLayer()21     SkPaint* addLayer() {
22         return this->addLayer(0, 0);
23     }
24 
25     // overrides from SkDrawLooper
26     virtual void init(SkCanvas*, SkPaint*);
27     virtual bool next();
28     virtual void restore();
29 
30     // must be public for Registrar :(
CreateProc(SkFlattenableReadBuffer & buffer)31     static SkFlattenable* CreateProc(SkFlattenableReadBuffer& buffer) {
32         return SkNEW_ARGS(SkLayerDrawLooper, (buffer));
33     }
34 
35 protected:
36     SkLayerDrawLooper(SkFlattenableReadBuffer&);
37 
38     // overrides from SkFlattenable
39     virtual void flatten(SkFlattenableWriteBuffer& );
getFactory()40     virtual Factory getFactory() { return CreateProc; }
41 
42 private:
43     struct Rec {
44         Rec*    fNext;
45         SkPaint fPaint;
46         SkPoint fOffset;
47 
48         static Rec* Reverse(Rec*);
49     };
50     Rec*    fRecs;
51     int     fCount;
52 
53     struct Iter {
54         SkPaint     fSavedPaint;
55         SkPaint*    fPaint;
56         SkCanvas*   fCanvas;
57         Rec*        fRec;
58     };
59     Iter    fIter;
60 
61     class MyRegistrar : public SkFlattenable::Registrar {
62     public:
63         MyRegistrar();
64     };
65 
66     typedef SkDrawLooper INHERITED;
67 };
68 
69 
70 #endif
71