| 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 |