OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2016 Google Inc. | 2 * Copyright 2016 Google Inc. |
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 "SkPathEffect.h" | 8 #include "SkPathEffect.h" |
9 #include "SkColorFilter.h" | 9 #include "SkColorFilter.h" |
10 #include "SkDrawLooper.h" | 10 #include "SkDrawLooper.h" |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
74 bits |= (paint.getStrokeMiter() != kStrokeMiter_Default ? kStrokeMit
er_NonDef : 0); | 74 bits |= (paint.getStrokeMiter() != kStrokeMiter_Default ? kStrokeMit
er_NonDef : 0); |
75 } | 75 } |
76 } | 76 } |
77 | 77 |
78 if (usage & | 78 if (usage & |
79 (kText_PaintUsage | kGeometry_PaintUsage | kImage_PaintUsage | kTextBlob
_PaintUsage)) | 79 (kText_PaintUsage | kGeometry_PaintUsage | kImage_PaintUsage | kTextBlob
_PaintUsage)) |
80 { | 80 { |
81 bits |= (paint.getMaskFilter() ? kMaskFilter_NonDef : 0); | 81 bits |= (paint.getMaskFilter() ? kMaskFilter_NonDef : 0); |
82 } | 82 } |
83 | 83 |
84 bits |= (paint.getXfermode() ? kXfermode_NonDef : 0); | |
85 bits |= (paint.getColorFilter() ? kColorFilter_NonDef : 0); | 84 bits |= (paint.getColorFilter() ? kColorFilter_NonDef : 0); |
86 bits |= (paint.getImageFilter() ? kImageFilter_NonDef : 0); | 85 bits |= (paint.getImageFilter() ? kImageFilter_NonDef : 0); |
87 bits |= (paint.getDrawLooper() ? kDrawLooper_NonDef : 0); | 86 bits |= (paint.getDrawLooper() ? kDrawLooper_NonDef : 0); |
88 | 87 |
89 return SkToU16(bits); | 88 return SkToU16(bits); |
90 } | 89 } |
91 | 90 |
92 static uint32_t pack_paint_flags(unsigned flags, unsigned hint, unsigned align, | 91 static uint32_t pack_paint_flags(unsigned flags, unsigned hint, unsigned align, |
93 unsigned filter, unsigned style, unsigned caps,
unsigned joins, | 92 unsigned filter, unsigned style, unsigned caps,
unsigned joins, |
94 unsigned encoding) { | 93 unsigned encoding) { |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
143 * pad zeros : 8 | 142 * pad zeros : 8 |
144 */ | 143 */ |
145 static void write_paint(SkWriteBuffer& writer, const SkPaint& paint, unsigned us
age) { | 144 static void write_paint(SkWriteBuffer& writer, const SkPaint& paint, unsigned us
age) { |
146 uint32_t packedFlags = pack_paint_flags(paint.getFlags(), paint.getHinting()
, | 145 uint32_t packedFlags = pack_paint_flags(paint.getFlags(), paint.getHinting()
, |
147 paint.getTextAlign(), paint.getFilte
rQuality(), | 146 paint.getTextAlign(), paint.getFilte
rQuality(), |
148 paint.getStyle(), paint.getStrokeCap
(), | 147 paint.getStyle(), paint.getStrokeCap
(), |
149 paint.getStrokeJoin(), paint.getText
Encoding()); | 148 paint.getStrokeJoin(), paint.getText
Encoding()); |
150 writer.write32(packedFlags); | 149 writer.write32(packedFlags); |
151 | 150 |
152 unsigned nondef = compute_nondef(paint, (PaintUsage)usage); | 151 unsigned nondef = compute_nondef(paint, (PaintUsage)usage); |
153 SkXfermode::Mode mode; | |
154 if (SkXfermode::AsMode(paint.getXfermode(), &mode)) { | |
155 nondef &= ~kXfermode_NonDef; // don't need to store a pointer since w
e have an enum | |
156 } else { | |
157 SkASSERT(nondef & kXfermode_NonDef); | |
158 mode = (SkXfermode::Mode)0; | |
159 } | |
160 const uint8_t pad = 0; | 152 const uint8_t pad = 0; |
161 writer.write32((nondef << 16) | ((unsigned)mode << 8) | pad); | 153 writer.write32((nondef << 16) | ((unsigned)paint.getBlendMode() << 8) | pad)
; |
162 | 154 |
163 CHECK_WRITE_SCALAR(writer, nondef, paint, TextSize); | 155 CHECK_WRITE_SCALAR(writer, nondef, paint, TextSize); |
164 CHECK_WRITE_SCALAR(writer, nondef, paint, TextScaleX); | 156 CHECK_WRITE_SCALAR(writer, nondef, paint, TextScaleX); |
165 CHECK_WRITE_SCALAR(writer, nondef, paint, TextSkewX); | 157 CHECK_WRITE_SCALAR(writer, nondef, paint, TextSkewX); |
166 CHECK_WRITE_SCALAR(writer, nondef, paint, StrokeWidth); | 158 CHECK_WRITE_SCALAR(writer, nondef, paint, StrokeWidth); |
167 CHECK_WRITE_SCALAR(writer, nondef, paint, StrokeMiter); | 159 CHECK_WRITE_SCALAR(writer, nondef, paint, StrokeMiter); |
168 | 160 |
169 if (nondef & kColor_NonDef) { | 161 if (nondef & kColor_NonDef) { |
170 writer.write32(paint.getColor()); | 162 writer.write32(paint.getColor()); |
171 } | 163 } |
172 if (nondef & kTypeface_NonDef) { | 164 if (nondef & kTypeface_NonDef) { |
173 // TODO: explore idea of writing bits indicating "use the prev (or prev
N) face" | 165 // TODO: explore idea of writing bits indicating "use the prev (or prev
N) face" |
174 // e.g. 1-N bits is an index into a ring buffer of typefaces | 166 // e.g. 1-N bits is an index into a ring buffer of typefaces |
175 SkTypeface* tf = paint.getTypeface(); | 167 SkTypeface* tf = paint.getTypeface(); |
176 SkASSERT(tf); | 168 SkASSERT(tf); |
177 writer.writeTypeface(tf); | 169 writer.writeTypeface(tf); |
178 } | 170 } |
179 | 171 |
180 CHECK_WRITE_FLATTENABLE(writer, nondef, paint, PathEffect); | 172 CHECK_WRITE_FLATTENABLE(writer, nondef, paint, PathEffect); |
181 CHECK_WRITE_FLATTENABLE(writer, nondef, paint, Shader); | 173 CHECK_WRITE_FLATTENABLE(writer, nondef, paint, Shader); |
182 CHECK_WRITE_FLATTENABLE(writer, nondef, paint, Xfermode); | |
183 CHECK_WRITE_FLATTENABLE(writer, nondef, paint, MaskFilter); | 174 CHECK_WRITE_FLATTENABLE(writer, nondef, paint, MaskFilter); |
184 CHECK_WRITE_FLATTENABLE(writer, nondef, paint, ColorFilter); | 175 CHECK_WRITE_FLATTENABLE(writer, nondef, paint, ColorFilter); |
185 CHECK_WRITE_FLATTENABLE(writer, nondef, paint, Rasterizer); | 176 CHECK_WRITE_FLATTENABLE(writer, nondef, paint, Rasterizer); |
186 CHECK_WRITE_FLATTENABLE(writer, nondef, paint, ImageFilter); | 177 CHECK_WRITE_FLATTENABLE(writer, nondef, paint, ImageFilter); |
187 CHECK_WRITE_FLATTENABLE(writer, nondef, paint, DrawLooper); | 178 CHECK_WRITE_FLATTENABLE(writer, nondef, paint, DrawLooper); |
188 } | 179 } |
189 | 180 |
190 class SkPipeWriter : public SkBinaryWriteBuffer { | 181 class SkPipeWriter : public SkBinaryWriteBuffer { |
191 enum { | 182 enum { |
192 N = 1024/4, | 183 N = 1024/4, |
(...skipping 876 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1069 fImpl->fDeduper.setStream(stream); | 1060 fImpl->fDeduper.setStream(stream); |
1070 fImpl->fDeduper.setCanvas(fImpl->fCanvas.get()); | 1061 fImpl->fDeduper.setCanvas(fImpl->fCanvas.get()); |
1071 return fImpl->fCanvas.get(); | 1062 return fImpl->fCanvas.get(); |
1072 } | 1063 } |
1073 | 1064 |
1074 void SkPipeSerializer::endWrite() { | 1065 void SkPipeSerializer::endWrite() { |
1075 fImpl->fCanvas->restoreToCount(1); | 1066 fImpl->fCanvas->restoreToCount(1); |
1076 fImpl->fCanvas.reset(nullptr); | 1067 fImpl->fCanvas.reset(nullptr); |
1077 fImpl->fDeduper.setCanvas(nullptr); | 1068 fImpl->fDeduper.setCanvas(nullptr); |
1078 } | 1069 } |
OLD | NEW |