Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(46)

Side by Side Diff: include/core/SkFlattenable.h

Issue 395603002: Simplify flattening to just write enough to call the factory (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: simplify xfermodes, fix SkLayerDrawLooper Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1
2 /* 1 /*
3 * Copyright 2006 The Android Open Source Project 2 * Copyright 2006 The Android Open Source Project
4 * 3 *
5 * Use of this source code is governed by a BSD-style license that can be 4 * Use of this source code is governed by a BSD-style license that can be
6 * found in the LICENSE file. 5 * found in the LICENSE file.
7 */ 6 */
8 7
9
10 #ifndef SkFlattenable_DEFINED 8 #ifndef SkFlattenable_DEFINED
11 #define SkFlattenable_DEFINED 9 #define SkFlattenable_DEFINED
12 10
13 #include "SkRefCnt.h" 11 #include "SkRefCnt.h"
14 12
13 #define SK_SUPPORT_LEGACY_DEEPFLATTENING
14
15 class SkReadBuffer; 15 class SkReadBuffer;
16 class SkWriteBuffer; 16 class SkWriteBuffer;
17 17
18 #define SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(flattenable) \
19 SkFlattenable::Registrar(#flattenable, flattenable::CreateProc, \
20 flattenable::GetFlattenableType());
21
22 #define SK_DECLARE_FLATTENABLE_REGISTRAR_GROUP() static void InitializeFlattenab les(); 18 #define SK_DECLARE_FLATTENABLE_REGISTRAR_GROUP() static void InitializeFlattenab les();
23 19
24 #define SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(flattenable) \ 20 #define SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(flattenable) \
25 void flattenable::InitializeFlattenables() { 21 void flattenable::InitializeFlattenables() {
26 22
27 #define SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END \ 23 #define SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END \
28 } 24 }
29 25
30 #define SK_DECLARE_UNFLATTENABLE_OBJECT() \ 26 #define SK_DECLARE_UNFLATTENABLE_OBJECT() \
31 virtual Factory getFactory() const SK_OVERRIDE { return NULL; } 27 virtual Factory getFactory() const SK_OVERRIDE { return NULL; }
32 28
33 #define SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(flattenable) \ 29 #ifdef SK_SUPPORT_LEGACY_DEEPFLATTENING
34 virtual Factory getFactory() const SK_OVERRIDE { return CreateProc; } \ 30 #define SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(flattenable) \
35 static SkFlattenable* CreateProc(SkReadBuffer& buffer) { \ 31 SkFlattenable::Registrar(#flattenable, flattenable::DeepCreateProc, \
36 return SkNEW_ARGS(flattenable, (buffer)); \ 32 flattenable::GetFlattenableType());
33
34 #define SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(flattenable) \
35 static SkFlattenable* CreateProc(SkReadBuffer&); \
36 virtual Factory getFactory() const SK_OVERRIDE {return DeepCreateProc;} \
37 static SkFlattenable* DeepCreateProc(SkReadBuffer& buffer) { \
38 if (NeedsDeepUnflatten(buffer)) { \
39 return SkNEW_ARGS(flattenable, (buffer)); \
40 } \
41 return CreateProc(buffer); \
37 } 42 }
43 #else
44 #define SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(flattenable) \
45 SkFlattenable::Registrar(#flattenable, flattenable::CreateProc, \
46 flattenable::GetFlattenableType());
47
48 #define SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(flattenable) \
49 static SkFlattenable* CreateProc(SkReadBuffer&); \
50 virtual Factory getFactory() const SK_OVERRIDE { return CreateProc; }
51 #endif
52
robertphillips 2014/08/19 15:23:27 typo (declar)
reed1 2014/08/19 19:58:05 Done.
53 // If your subclass will *never* need to be unflattened, declar this.
54 #define SK_DECLARE_NOT_FLATTENABLE_PROCS(flattenable) \
55 virtual Factory getFactory() const SK_OVERRIDE { return ReturnNullCreateProc ; }
38 56
39 /** For SkFlattenable derived objects with a valid type 57 /** For SkFlattenable derived objects with a valid type
40 This macro should only be used in base class objects in core 58 This macro should only be used in base class objects in core
41 */ 59 */
42 #define SK_DEFINE_FLATTENABLE_TYPE(flattenable) \ 60 #define SK_DEFINE_FLATTENABLE_TYPE(flattenable) \
43 static Type GetFlattenableType() { \ 61 static Type GetFlattenableType() { \
44 return k##flattenable##_Type; \ 62 return k##flattenable##_Type; \
45 } 63 }
46 64
47 /** \class SkFlattenable 65 /** \class SkFlattenable
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
94 } 112 }
95 }; 113 };
96 114
97 /** Override this to write data specific to your subclass into the buffer, 115 /** Override this to write data specific to your subclass into the buffer,
98 being sure to call your super-class' version first. This data will later 116 being sure to call your super-class' version first. This data will later
99 be passed to your Factory function, returned by getFactory(). 117 be passed to your Factory function, returned by getFactory().
100 */ 118 */
101 virtual void flatten(SkWriteBuffer&) const; 119 virtual void flatten(SkWriteBuffer&) const;
102 120
103 protected: 121 protected:
122 #ifdef SK_SUPPORT_LEGACY_DEEPFLATTENING
123 static bool NeedsDeepUnflatten(const SkReadBuffer&);
104 SkFlattenable(SkReadBuffer&) {} 124 SkFlattenable(SkReadBuffer&) {}
125 #endif
126
127 static SkFlattenable* ReturnNullCreateProc(SkReadBuffer&) {
128 return NULL;
129 }
105 130
106 private: 131 private:
107 static void InitializeFlattenablesIfNeeded(); 132 static void InitializeFlattenablesIfNeeded();
108 133
109 friend class SkGraphics; 134 friend class SkGraphics;
110 135
111 typedef SkRefCnt INHERITED; 136 typedef SkRefCnt INHERITED;
112 }; 137 };
113 138
114 #endif 139 #endif
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698