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

Side by Side Diff: src/core/SkPaint.cpp

Issue 1758023003: Move annotations to canvas virtual (patchset #8 id:140001 of https://codereview.chromium.org/174410… (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: manual rebase Created 4 years, 9 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
« no previous file with comments | « src/core/SkCanvas.cpp ('k') | src/core/SkPictureFlat.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2006 The Android Open Source Project 2 * Copyright 2006 The Android Open Source Project
3 * 3 *
4 * 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
5 * found in the LICENSE file. 5 * found in the LICENSE file.
6 */ 6 */
7 7
8 #include "SkPaint.h" 8 #include "SkPaint.h"
9 #include "SkAnnotation.h"
10 #include "SkAutoKern.h" 9 #include "SkAutoKern.h"
11 #include "SkChecksum.h" 10 #include "SkChecksum.h"
12 #include "SkColorFilter.h" 11 #include "SkColorFilter.h"
13 #include "SkData.h" 12 #include "SkData.h"
14 #include "SkDraw.h" 13 #include "SkDraw.h"
15 #include "SkFontDescriptor.h" 14 #include "SkFontDescriptor.h"
16 #include "SkGlyphCache.h" 15 #include "SkGlyphCache.h"
17 #include "SkImageFilter.h" 16 #include "SkImageFilter.h"
18 #include "SkMaskFilter.h" 17 #include "SkMaskFilter.h"
19 #include "SkMaskGamma.h" 18 #include "SkMaskGamma.h"
(...skipping 27 matching lines...) Expand all
47 SkPaint::SkPaint() { 46 SkPaint::SkPaint() {
48 fTypeface = nullptr; 47 fTypeface = nullptr;
49 fPathEffect = nullptr; 48 fPathEffect = nullptr;
50 fShader = nullptr; 49 fShader = nullptr;
51 fXfermode = nullptr; 50 fXfermode = nullptr;
52 fMaskFilter = nullptr; 51 fMaskFilter = nullptr;
53 fColorFilter = nullptr; 52 fColorFilter = nullptr;
54 fRasterizer = nullptr; 53 fRasterizer = nullptr;
55 fLooper = nullptr; 54 fLooper = nullptr;
56 fImageFilter = nullptr; 55 fImageFilter = nullptr;
57 fAnnotation = nullptr;
58 56
59 fTextSize = SkPaintDefaults_TextSize; 57 fTextSize = SkPaintDefaults_TextSize;
60 fTextScaleX = SK_Scalar1; 58 fTextScaleX = SK_Scalar1;
61 fTextSkewX = 0; 59 fTextSkewX = 0;
62 fColor = SK_ColorBLACK; 60 fColor = SK_ColorBLACK;
63 fWidth = 0; 61 fWidth = 0;
64 fMiterLimit = SkPaintDefaults_MiterLimit; 62 fMiterLimit = SkPaintDefaults_MiterLimit;
65 63
66 // Zero all bitfields, then set some non-zero defaults. 64 // Zero all bitfields, then set some non-zero defaults.
67 fBitfieldsUInt = 0; 65 fBitfieldsUInt = 0;
(...skipping 12 matching lines...) Expand all
80 78
81 REF_COPY(fTypeface); 79 REF_COPY(fTypeface);
82 REF_COPY(fPathEffect); 80 REF_COPY(fPathEffect);
83 REF_COPY(fShader); 81 REF_COPY(fShader);
84 REF_COPY(fXfermode); 82 REF_COPY(fXfermode);
85 REF_COPY(fMaskFilter); 83 REF_COPY(fMaskFilter);
86 REF_COPY(fColorFilter); 84 REF_COPY(fColorFilter);
87 REF_COPY(fRasterizer); 85 REF_COPY(fRasterizer);
88 REF_COPY(fLooper); 86 REF_COPY(fLooper);
89 REF_COPY(fImageFilter); 87 REF_COPY(fImageFilter);
90 REF_COPY(fAnnotation);
91 88
92 COPY(fTextSize); 89 COPY(fTextSize);
93 COPY(fTextScaleX); 90 COPY(fTextScaleX);
94 COPY(fTextSkewX); 91 COPY(fTextSkewX);
95 COPY(fColor); 92 COPY(fColor);
96 COPY(fWidth); 93 COPY(fWidth);
97 COPY(fMiterLimit); 94 COPY(fMiterLimit);
98 COPY(fBitfields); 95 COPY(fBitfields);
99 96
100 #undef COPY 97 #undef COPY
101 #undef REF_COPY 98 #undef REF_COPY
102 } 99 }
103 100
104 SkPaint::SkPaint(SkPaint&& src) { 101 SkPaint::SkPaint(SkPaint&& src) {
105 #define MOVE(field) field = std::move(src.field) 102 #define MOVE(field) field = std::move(src.field)
106 #define REF_MOVE(field) field = src.field; src.field = nullptr 103 #define REF_MOVE(field) field = src.field; src.field = nullptr
107 104
108 REF_MOVE(fTypeface); 105 REF_MOVE(fTypeface);
109 REF_MOVE(fPathEffect); 106 REF_MOVE(fPathEffect);
110 REF_MOVE(fShader); 107 REF_MOVE(fShader);
111 REF_MOVE(fXfermode); 108 REF_MOVE(fXfermode);
112 REF_MOVE(fMaskFilter); 109 REF_MOVE(fMaskFilter);
113 REF_MOVE(fColorFilter); 110 REF_MOVE(fColorFilter);
114 REF_MOVE(fRasterizer); 111 REF_MOVE(fRasterizer);
115 REF_MOVE(fLooper); 112 REF_MOVE(fLooper);
116 REF_MOVE(fImageFilter); 113 REF_MOVE(fImageFilter);
117 REF_MOVE(fAnnotation);
118 114
119 MOVE(fTextSize); 115 MOVE(fTextSize);
120 MOVE(fTextScaleX); 116 MOVE(fTextScaleX);
121 MOVE(fTextSkewX); 117 MOVE(fTextSkewX);
122 MOVE(fColor); 118 MOVE(fColor);
123 MOVE(fWidth); 119 MOVE(fWidth);
124 MOVE(fMiterLimit); 120 MOVE(fMiterLimit);
125 MOVE(fBitfields); 121 MOVE(fBitfields);
126 122
127 #undef MOVE 123 #undef MOVE
128 #undef REF_MOVE 124 #undef REF_MOVE
129 } 125 }
130 126
131 SkPaint::~SkPaint() { 127 SkPaint::~SkPaint() {
132 SkSafeUnref(fTypeface); 128 SkSafeUnref(fTypeface);
133 SkSafeUnref(fPathEffect); 129 SkSafeUnref(fPathEffect);
134 SkSafeUnref(fShader); 130 SkSafeUnref(fShader);
135 SkSafeUnref(fXfermode); 131 SkSafeUnref(fXfermode);
136 SkSafeUnref(fMaskFilter); 132 SkSafeUnref(fMaskFilter);
137 SkSafeUnref(fColorFilter); 133 SkSafeUnref(fColorFilter);
138 SkSafeUnref(fRasterizer); 134 SkSafeUnref(fRasterizer);
139 SkSafeUnref(fLooper); 135 SkSafeUnref(fLooper);
140 SkSafeUnref(fImageFilter); 136 SkSafeUnref(fImageFilter);
141 SkSafeUnref(fAnnotation);
142 } 137 }
143 138
144 SkPaint& SkPaint::operator=(const SkPaint& src) { 139 SkPaint& SkPaint::operator=(const SkPaint& src) {
145 if (this == &src) { 140 if (this == &src) {
146 return *this; 141 return *this;
147 } 142 }
148 143
149 #define COPY(field) field = src.field 144 #define COPY(field) field = src.field
150 #define REF_COPY(field) SkSafeUnref(field); field = SkSafeRef(src.field) 145 #define REF_COPY(field) SkSafeUnref(field); field = SkSafeRef(src.field)
151 146
152 REF_COPY(fTypeface); 147 REF_COPY(fTypeface);
153 REF_COPY(fPathEffect); 148 REF_COPY(fPathEffect);
154 REF_COPY(fShader); 149 REF_COPY(fShader);
155 REF_COPY(fXfermode); 150 REF_COPY(fXfermode);
156 REF_COPY(fMaskFilter); 151 REF_COPY(fMaskFilter);
157 REF_COPY(fColorFilter); 152 REF_COPY(fColorFilter);
158 REF_COPY(fRasterizer); 153 REF_COPY(fRasterizer);
159 REF_COPY(fLooper); 154 REF_COPY(fLooper);
160 REF_COPY(fImageFilter); 155 REF_COPY(fImageFilter);
161 REF_COPY(fAnnotation);
162 156
163 COPY(fTextSize); 157 COPY(fTextSize);
164 COPY(fTextScaleX); 158 COPY(fTextScaleX);
165 COPY(fTextSkewX); 159 COPY(fTextSkewX);
166 COPY(fColor); 160 COPY(fColor);
167 COPY(fWidth); 161 COPY(fWidth);
168 COPY(fMiterLimit); 162 COPY(fMiterLimit);
169 COPY(fBitfields); 163 COPY(fBitfields);
170 164
171 return *this; 165 return *this;
(...skipping 12 matching lines...) Expand all
184 178
185 REF_MOVE(fTypeface); 179 REF_MOVE(fTypeface);
186 REF_MOVE(fPathEffect); 180 REF_MOVE(fPathEffect);
187 REF_MOVE(fShader); 181 REF_MOVE(fShader);
188 REF_MOVE(fXfermode); 182 REF_MOVE(fXfermode);
189 REF_MOVE(fMaskFilter); 183 REF_MOVE(fMaskFilter);
190 REF_MOVE(fColorFilter); 184 REF_MOVE(fColorFilter);
191 REF_MOVE(fRasterizer); 185 REF_MOVE(fRasterizer);
192 REF_MOVE(fLooper); 186 REF_MOVE(fLooper);
193 REF_MOVE(fImageFilter); 187 REF_MOVE(fImageFilter);
194 REF_MOVE(fAnnotation);
195 188
196 MOVE(fTextSize); 189 MOVE(fTextSize);
197 MOVE(fTextScaleX); 190 MOVE(fTextScaleX);
198 MOVE(fTextSkewX); 191 MOVE(fTextSkewX);
199 MOVE(fColor); 192 MOVE(fColor);
200 MOVE(fWidth); 193 MOVE(fWidth);
201 MOVE(fMiterLimit); 194 MOVE(fMiterLimit);
202 MOVE(fBitfields); 195 MOVE(fBitfields);
203 196
204 return *this; 197 return *this;
205 198
206 #undef MOVE 199 #undef MOVE
207 #undef REF_MOVE 200 #undef REF_MOVE
208 } 201 }
209 202
210 bool operator==(const SkPaint& a, const SkPaint& b) { 203 bool operator==(const SkPaint& a, const SkPaint& b) {
211 #define EQUAL(field) (a.field == b.field) 204 #define EQUAL(field) (a.field == b.field)
212 return EQUAL(fTypeface) 205 return EQUAL(fTypeface)
213 && EQUAL(fPathEffect) 206 && EQUAL(fPathEffect)
214 && EQUAL(fShader) 207 && EQUAL(fShader)
215 && EQUAL(fXfermode) 208 && EQUAL(fXfermode)
216 && EQUAL(fMaskFilter) 209 && EQUAL(fMaskFilter)
217 && EQUAL(fColorFilter) 210 && EQUAL(fColorFilter)
218 && EQUAL(fRasterizer) 211 && EQUAL(fRasterizer)
219 && EQUAL(fLooper) 212 && EQUAL(fLooper)
220 && EQUAL(fImageFilter) 213 && EQUAL(fImageFilter)
221 && EQUAL(fAnnotation)
222 && EQUAL(fTextSize) 214 && EQUAL(fTextSize)
223 && EQUAL(fTextScaleX) 215 && EQUAL(fTextScaleX)
224 && EQUAL(fTextSkewX) 216 && EQUAL(fTextSkewX)
225 && EQUAL(fColor) 217 && EQUAL(fColor)
226 && EQUAL(fWidth) 218 && EQUAL(fWidth)
227 && EQUAL(fMiterLimit) 219 && EQUAL(fMiterLimit)
228 && EQUAL(fBitfieldsUInt) 220 && EQUAL(fBitfieldsUInt)
229 ; 221 ;
230 #undef EQUAL 222 #undef EQUAL
231 } 223 }
(...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after
413 SkDrawLooper* SkPaint::setLooper(SkDrawLooper* looper) { 405 SkDrawLooper* SkPaint::setLooper(SkDrawLooper* looper) {
414 SkRefCnt_SafeAssign(fLooper, looper); 406 SkRefCnt_SafeAssign(fLooper, looper);
415 return looper; 407 return looper;
416 } 408 }
417 409
418 SkImageFilter* SkPaint::setImageFilter(SkImageFilter* imageFilter) { 410 SkImageFilter* SkPaint::setImageFilter(SkImageFilter* imageFilter) {
419 SkRefCnt_SafeAssign(fImageFilter, imageFilter); 411 SkRefCnt_SafeAssign(fImageFilter, imageFilter);
420 return imageFilter; 412 return imageFilter;
421 } 413 }
422 414
423 SkAnnotation* SkPaint::setAnnotation(SkAnnotation* annotation) {
424 SkRefCnt_SafeAssign(fAnnotation, annotation);
425 return annotation;
426 }
427
428 /////////////////////////////////////////////////////////////////////////////// 415 ///////////////////////////////////////////////////////////////////////////////
429 416
430 static SkScalar mag2(SkScalar x, SkScalar y) { 417 static SkScalar mag2(SkScalar x, SkScalar y) {
431 return x * x + y * y; 418 return x * x + y * y;
432 } 419 }
433 420
434 static bool tooBig(const SkMatrix& m, SkScalar ma2max) { 421 static bool tooBig(const SkMatrix& m, SkScalar ma2max) {
435 return mag2(m[SkMatrix::kMScaleX], m[SkMatrix::kMSkewY]) > ma2max 422 return mag2(m[SkMatrix::kMScaleX], m[SkMatrix::kMSkewY]) > ma2max
436 || 423 ||
437 mag2(m[SkMatrix::kMSkewX], m[SkMatrix::kMScaleY]) > ma2max; 424 mag2(m[SkMatrix::kMSkewX], m[SkMatrix::kMScaleY]) > ma2max;
(...skipping 1452 matching lines...) Expand 10 before | Expand all | Expand 10 after
1890 if (this->getTypeface()) { 1877 if (this->getTypeface()) {
1891 flatFlags |= kHasTypeface_FlatFlag; 1878 flatFlags |= kHasTypeface_FlatFlag;
1892 } 1879 }
1893 if (asint(this->getPathEffect()) | 1880 if (asint(this->getPathEffect()) |
1894 asint(this->getShader()) | 1881 asint(this->getShader()) |
1895 asint(this->getXfermode()) | 1882 asint(this->getXfermode()) |
1896 asint(this->getMaskFilter()) | 1883 asint(this->getMaskFilter()) |
1897 asint(this->getColorFilter()) | 1884 asint(this->getColorFilter()) |
1898 asint(this->getRasterizer()) | 1885 asint(this->getRasterizer()) |
1899 asint(this->getLooper()) | 1886 asint(this->getLooper()) |
1900 asint(this->getAnnotation()) |
1901 asint(this->getImageFilter())) { 1887 asint(this->getImageFilter())) {
1902 flatFlags |= kHasEffects_FlatFlag; 1888 flatFlags |= kHasEffects_FlatFlag;
1903 } 1889 }
1904 1890
1905 SkASSERT(SkAlign4(kPODPaintSize) == kPODPaintSize); 1891 SkASSERT(SkAlign4(kPODPaintSize) == kPODPaintSize);
1906 uint32_t* ptr = buffer.reserve(kPODPaintSize); 1892 uint32_t* ptr = buffer.reserve(kPODPaintSize);
1907 1893
1908 ptr = write_scalar(ptr, this->getTextSize()); 1894 ptr = write_scalar(ptr, this->getTextSize());
1909 ptr = write_scalar(ptr, this->getTextScaleX()); 1895 ptr = write_scalar(ptr, this->getTextScaleX());
1910 ptr = write_scalar(ptr, this->getTextSkewX()); 1896 ptr = write_scalar(ptr, this->getTextSkewX());
(...skipping 13 matching lines...) Expand all
1924 } 1910 }
1925 if (flatFlags & kHasEffects_FlatFlag) { 1911 if (flatFlags & kHasEffects_FlatFlag) {
1926 buffer.writeFlattenable(this->getPathEffect()); 1912 buffer.writeFlattenable(this->getPathEffect());
1927 buffer.writeFlattenable(this->getShader()); 1913 buffer.writeFlattenable(this->getShader());
1928 buffer.writeFlattenable(this->getXfermode()); 1914 buffer.writeFlattenable(this->getXfermode());
1929 buffer.writeFlattenable(this->getMaskFilter()); 1915 buffer.writeFlattenable(this->getMaskFilter());
1930 buffer.writeFlattenable(this->getColorFilter()); 1916 buffer.writeFlattenable(this->getColorFilter());
1931 buffer.writeFlattenable(this->getRasterizer()); 1917 buffer.writeFlattenable(this->getRasterizer());
1932 buffer.writeFlattenable(this->getLooper()); 1918 buffer.writeFlattenable(this->getLooper());
1933 buffer.writeFlattenable(this->getImageFilter()); 1919 buffer.writeFlattenable(this->getImageFilter());
1934
1935 if (fAnnotation) {
1936 buffer.writeBool(true);
1937 fAnnotation->writeToBuffer(buffer);
1938 } else {
1939 buffer.writeBool(false);
1940 }
1941 } 1920 }
1942 } 1921 }
1943 1922
1944 void SkPaint::unflatten(SkReadBuffer& buffer) { 1923 void SkPaint::unflatten(SkReadBuffer& buffer) {
1945 SkASSERT(SkAlign4(kPODPaintSize) == kPODPaintSize); 1924 SkASSERT(SkAlign4(kPODPaintSize) == kPODPaintSize);
1946 if (!buffer.validateAvailable(kPODPaintSize)) { 1925 if (!buffer.validateAvailable(kPODPaintSize)) {
1947 return; 1926 return;
1948 } 1927 }
1949 const void* podData = buffer.skip(kPODPaintSize); 1928 const void* podData = buffer.skip(kPODPaintSize);
1950 const uint32_t* pod = reinterpret_cast<const uint32_t*>(podData); 1929 const uint32_t* pod = reinterpret_cast<const uint32_t*>(podData);
(...skipping 23 matching lines...) Expand all
1974 if (flatFlags & kHasEffects_FlatFlag) { 1953 if (flatFlags & kHasEffects_FlatFlag) {
1975 SkSafeUnref(this->setPathEffect(buffer.readPathEffect())); 1954 SkSafeUnref(this->setPathEffect(buffer.readPathEffect()));
1976 SkSafeUnref(this->setShader(buffer.readShader())); 1955 SkSafeUnref(this->setShader(buffer.readShader()));
1977 SkSafeUnref(this->setXfermode(buffer.readXfermode())); 1956 SkSafeUnref(this->setXfermode(buffer.readXfermode()));
1978 SkSafeUnref(this->setMaskFilter(buffer.readMaskFilter())); 1957 SkSafeUnref(this->setMaskFilter(buffer.readMaskFilter()));
1979 SkSafeUnref(this->setColorFilter(buffer.readColorFilter())); 1958 SkSafeUnref(this->setColorFilter(buffer.readColorFilter()));
1980 SkSafeUnref(this->setRasterizer(buffer.readRasterizer())); 1959 SkSafeUnref(this->setRasterizer(buffer.readRasterizer()));
1981 SkSafeUnref(this->setLooper(buffer.readDrawLooper())); 1960 SkSafeUnref(this->setLooper(buffer.readDrawLooper()));
1982 SkSafeUnref(this->setImageFilter(buffer.readImageFilter())); 1961 SkSafeUnref(this->setImageFilter(buffer.readImageFilter()));
1983 1962
1984 if (buffer.readBool()) { 1963 if (buffer.isVersionLT(SkReadBuffer::kAnnotationsMovedToCanvas_Version)) {
1985 this->setAnnotation(SkAnnotation::Create(buffer))->unref(); 1964 // We used to store annotations here (string+skdata) if this bool wa s true
1965 if (buffer.readBool()) {
1966 // Annotations have moved to drawAnnotation, so we just drop thi s one on the floor.
1967 SkString key;
1968 buffer.readString(&key);
1969 SkSafeUnref(buffer.readByteArrayAsData());
1970 }
1986 } 1971 }
1987 } else { 1972 } else {
1988 this->setPathEffect(nullptr); 1973 this->setPathEffect(nullptr);
1989 this->setShader(nullptr); 1974 this->setShader(nullptr);
1990 this->setXfermode(nullptr); 1975 this->setXfermode(nullptr);
1991 this->setMaskFilter(nullptr); 1976 this->setMaskFilter(nullptr);
1992 this->setColorFilter(nullptr); 1977 this->setColorFilter(nullptr);
1993 this->setRasterizer(nullptr); 1978 this->setRasterizer(nullptr);
1994 this->setLooper(nullptr); 1979 this->setLooper(nullptr);
1995 this->setImageFilter(nullptr); 1980 this->setImageFilter(nullptr);
(...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after
2198 str->append("</dd>"); 2183 str->append("</dd>");
2199 } 2184 }
2200 2185
2201 SkImageFilter* imageFilter = this->getImageFilter(); 2186 SkImageFilter* imageFilter = this->getImageFilter();
2202 if (imageFilter) { 2187 if (imageFilter) {
2203 str->append("<dt>ImageFilter:</dt><dd>"); 2188 str->append("<dt>ImageFilter:</dt><dd>");
2204 imageFilter->toString(str); 2189 imageFilter->toString(str);
2205 str->append("</dd>"); 2190 str->append("</dd>");
2206 } 2191 }
2207 2192
2208 SkAnnotation* annotation = this->getAnnotation();
2209 if (annotation) {
2210 str->append("<dt>Annotation:</dt><dd>");
2211 str->append("</dd>");
2212 }
2213
2214 str->append("<dt>Color:</dt><dd>0x"); 2193 str->append("<dt>Color:</dt><dd>0x");
2215 SkColor color = this->getColor(); 2194 SkColor color = this->getColor();
2216 str->appendHex(color); 2195 str->appendHex(color);
2217 str->append("</dd>"); 2196 str->append("</dd>");
2218 2197
2219 str->append("<dt>Stroke Width:</dt><dd>"); 2198 str->append("<dt>Stroke Width:</dt><dd>");
2220 str->appendScalar(this->getStrokeWidth()); 2199 str->appendScalar(this->getStrokeWidth());
2221 str->append("</dd>"); 2200 str->append("</dd>");
2222 2201
2223 str->append("<dt>Stroke Miter:</dt><dd>"); 2202 str->append("<dt>Stroke Miter:</dt><dd>");
(...skipping 206 matching lines...) Expand 10 before | Expand all | Expand 10 after
2430 default: 2409 default:
2431 break; 2410 break;
2432 } 2411 }
2433 } 2412 }
2434 return false; 2413 return false;
2435 } 2414 }
2436 2415
2437 uint32_t SkPaint::getHash() const { 2416 uint32_t SkPaint::getHash() const {
2438 // We're going to hash 10 pointers and 7 32-bit values, finishing up with fB itfields, 2417 // We're going to hash 10 pointers and 7 32-bit values, finishing up with fB itfields,
2439 // so fBitfields should be 10 pointers and 6 32-bit values from the start. 2418 // so fBitfields should be 10 pointers and 6 32-bit values from the start.
2440 static_assert(offsetof(SkPaint, fBitfields) == 10 * sizeof(void*) + 6 * size of(uint32_t), 2419 static_assert(offsetof(SkPaint, fBitfields) == 9 * sizeof(void*) + 6 * sizeo f(uint32_t),
2441 "SkPaint_notPackedTightly"); 2420 "SkPaint_notPackedTightly");
2442 return SkChecksum::Murmur3(reinterpret_cast<const uint32_t*>(this), 2421 return SkChecksum::Murmur3(reinterpret_cast<const uint32_t*>(this),
2443 offsetof(SkPaint, fBitfields) + sizeof(fBitfields )); 2422 offsetof(SkPaint, fBitfields) + sizeof(fBitfields ));
2444 } 2423 }
OLDNEW
« no previous file with comments | « src/core/SkCanvas.cpp ('k') | src/core/SkPictureFlat.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698