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

Side by Side Diff: src/pipe/SkPipeCanvas.cpp

Issue 2396953002: Revert[8] "replace SkXfermode obj with SkBlendMode enum in paints" (Closed)
Patch Set: add tmp virtual to unroll legacy arithmodes Created 4 years, 2 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/pdf/SkPDFGraphicState.cpp ('k') | src/pipe/SkPipeFormat.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 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
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
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
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 }
OLDNEW
« no previous file with comments | « src/pdf/SkPDFGraphicState.cpp ('k') | src/pipe/SkPipeFormat.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698