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

Side by Side Diff: src/pdf/SkPDFGraphicState.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.h ('k') | src/pipe/SkPipeCanvas.cpp » ('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 2011 Google Inc. 2 * Copyright 2011 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 "SkData.h" 8 #include "SkData.h"
9 #include "SkPaint.h" 9 #include "SkPaint.h"
10 #include "SkPDFCanon.h" 10 #include "SkPDFCanon.h"
11 #include "SkPDFFormXObject.h" 11 #include "SkPDFFormXObject.h"
12 #include "SkPDFGraphicState.h" 12 #include "SkPDFGraphicState.h"
13 #include "SkPDFUtils.h" 13 #include "SkPDFUtils.h"
14 14
15 static const char* as_blend_mode(SkXfermode::Mode mode) { 15 static const char* as_blend_mode(SkBlendMode mode) {
16 switch (mode) { 16 switch (mode) {
17 case SkXfermode::kSrcOver_Mode: 17 case SkBlendMode::kSrcOver:
18 return "Normal"; 18 return "Normal";
19 case SkXfermode::kMultiply_Mode: 19 case SkBlendMode::kMultiply:
20 return "Multiply"; 20 return "Multiply";
21 case SkXfermode::kScreen_Mode: 21 case SkBlendMode::kScreen:
22 return "Screen"; 22 return "Screen";
23 case SkXfermode::kOverlay_Mode: 23 case SkBlendMode::kOverlay:
24 return "Overlay"; 24 return "Overlay";
25 case SkXfermode::kDarken_Mode: 25 case SkBlendMode::kDarken:
26 return "Darken"; 26 return "Darken";
27 case SkXfermode::kLighten_Mode: 27 case SkBlendMode::kLighten:
28 return "Lighten"; 28 return "Lighten";
29 case SkXfermode::kColorDodge_Mode: 29 case SkBlendMode::kColorDodge:
30 return "ColorDodge"; 30 return "ColorDodge";
31 case SkXfermode::kColorBurn_Mode: 31 case SkBlendMode::kColorBurn:
32 return "ColorBurn"; 32 return "ColorBurn";
33 case SkXfermode::kHardLight_Mode: 33 case SkBlendMode::kHardLight:
34 return "HardLight"; 34 return "HardLight";
35 case SkXfermode::kSoftLight_Mode: 35 case SkBlendMode::kSoftLight:
36 return "SoftLight"; 36 return "SoftLight";
37 case SkXfermode::kDifference_Mode: 37 case SkBlendMode::kDifference:
38 return "Difference"; 38 return "Difference";
39 case SkXfermode::kExclusion_Mode: 39 case SkBlendMode::kExclusion:
40 return "Exclusion"; 40 return "Exclusion";
41 case SkXfermode::kHue_Mode: 41 case SkBlendMode::kHue:
42 return "Hue"; 42 return "Hue";
43 case SkXfermode::kSaturation_Mode: 43 case SkBlendMode::kSaturation:
44 return "Saturation"; 44 return "Saturation";
45 case SkXfermode::kColor_Mode: 45 case SkBlendMode::kColor:
46 return "Color"; 46 return "Color";
47 case SkXfermode::kLuminosity_Mode: 47 case SkBlendMode::kLuminosity:
48 return "Luminosity"; 48 return "Luminosity";
49 49
50 // These are handled in SkPDFDevice::setUpContentEntry. 50 // These are handled in SkPDFDevice::setUpContentEntry.
51 case SkXfermode::kClear_Mode: 51 case SkBlendMode::kClear:
52 case SkXfermode::kSrc_Mode: 52 case SkBlendMode::kSrc:
53 case SkXfermode::kDst_Mode: 53 case SkBlendMode::kDst:
54 case SkXfermode::kDstOver_Mode: 54 case SkBlendMode::kDstOver:
55 case SkXfermode::kSrcIn_Mode: 55 case SkBlendMode::kSrcIn:
56 case SkXfermode::kDstIn_Mode: 56 case SkBlendMode::kDstIn:
57 case SkXfermode::kSrcOut_Mode: 57 case SkBlendMode::kSrcOut:
58 case SkXfermode::kDstOut_Mode: 58 case SkBlendMode::kDstOut:
59 case SkXfermode::kSrcATop_Mode: 59 case SkBlendMode::kSrcATop:
60 case SkXfermode::kDstATop_Mode: 60 case SkBlendMode::kDstATop:
61 case SkXfermode::kModulate_Mode: 61 case SkBlendMode::kModulate:
62 return "Normal"; 62 return "Normal";
63 63
64 // TODO(vandebo): Figure out if we can support more of these modes. 64 // TODO(vandebo): Figure out if we can support more of these modes.
65 case SkXfermode::kXor_Mode: 65 case SkBlendMode::kXor:
66 case SkXfermode::kPlus_Mode: 66 case SkBlendMode::kPlus:
67 return nullptr; 67 return nullptr;
68 } 68 }
69 return nullptr; 69 return nullptr;
70 } 70 }
71 71
72 // If a SkXfermode is unsupported in PDF, this function returns 72 // If a SkXfermode is unsupported in PDF, this function returns
73 // SrcOver, otherwise, it returns that Xfermode as a Mode. 73 // SrcOver, otherwise, it returns that Xfermode as a Mode.
74 static SkXfermode::Mode mode_for_pdf(const SkXfermode* xfermode) { 74 static SkBlendMode mode_for_pdf(SkBlendMode mode) {
75 SkXfermode::Mode mode = SkXfermode::kSrcOver_Mode;
76 if (xfermode) {
77 xfermode->asMode(&mode);
78 }
79 switch (mode) { 75 switch (mode) {
80 case SkXfermode::kSrcOver_Mode: 76 case SkBlendMode::kSrcOver:
81 case SkXfermode::kMultiply_Mode: 77 case SkBlendMode::kMultiply:
82 case SkXfermode::kScreen_Mode: 78 case SkBlendMode::kScreen:
83 case SkXfermode::kOverlay_Mode: 79 case SkBlendMode::kOverlay:
84 case SkXfermode::kDarken_Mode: 80 case SkBlendMode::kDarken:
85 case SkXfermode::kLighten_Mode: 81 case SkBlendMode::kLighten:
86 case SkXfermode::kColorDodge_Mode: 82 case SkBlendMode::kColorDodge:
87 case SkXfermode::kColorBurn_Mode: 83 case SkBlendMode::kColorBurn:
88 case SkXfermode::kHardLight_Mode: 84 case SkBlendMode::kHardLight:
89 case SkXfermode::kSoftLight_Mode: 85 case SkBlendMode::kSoftLight:
90 case SkXfermode::kDifference_Mode: 86 case SkBlendMode::kDifference:
91 case SkXfermode::kExclusion_Mode: 87 case SkBlendMode::kExclusion:
92 case SkXfermode::kHue_Mode: 88 case SkBlendMode::kHue:
93 case SkXfermode::kSaturation_Mode: 89 case SkBlendMode::kSaturation:
94 case SkXfermode::kColor_Mode: 90 case SkBlendMode::kColor:
95 case SkXfermode::kLuminosity_Mode: 91 case SkBlendMode::kLuminosity:
96 // Mode is suppported and handled by pdf graphics state. 92 // Mode is suppported and handled by pdf graphics state.
97 return mode; 93 return mode;
98 default: 94 default:
99 return SkXfermode::kSrcOver_Mode; // Default mode. 95 return SkBlendMode::kSrcOver; // Default mode.
100 } 96 }
101 } 97 }
102 98
103 SkPDFGraphicState::SkPDFGraphicState(const SkPaint& p) 99 SkPDFGraphicState::SkPDFGraphicState(const SkPaint& p)
104 : fStrokeWidth(p.getStrokeWidth()) 100 : fStrokeWidth(p.getStrokeWidth())
105 , fStrokeMiter(p.getStrokeMiter()) 101 , fStrokeMiter(p.getStrokeMiter())
106 , fAlpha(p.getAlpha()) 102 , fAlpha(p.getAlpha())
107 , fStrokeCap(SkToU8(p.getStrokeCap())) 103 , fStrokeCap(SkToU8(p.getStrokeCap()))
108 , fStrokeJoin(SkToU8(p.getStrokeJoin())) 104 , fStrokeJoin(SkToU8(p.getStrokeJoin()))
109 , fMode(SkToU8(mode_for_pdf(p.getXfermode()))) {} 105 , fMode(SkToU8((unsigned)mode_for_pdf(p.getBlendMode()))) {}
110 106
111 // static 107 // static
112 SkPDFGraphicState* SkPDFGraphicState::GetGraphicStateForPaint( 108 SkPDFGraphicState* SkPDFGraphicState::GetGraphicStateForPaint(
113 SkPDFCanon* canon, const SkPaint& paint) { 109 SkPDFCanon* canon, const SkPaint& paint) {
114 SkASSERT(canon); 110 SkASSERT(canon);
115 SkPDFGraphicState key(paint); 111 SkPDFGraphicState key(paint);
116 if (const SkPDFGraphicState* canonGS = canon->findGraphicState(key)) { 112 if (const SkPDFGraphicState* canonGS = canon->findGraphicState(key)) {
117 // The returned SkPDFGraphicState must be made non-const, 113 // The returned SkPDFGraphicState must be made non-const,
118 // since the emitObject() interface is non-const. But We 114 // since the emitObject() interface is non-const. But We
119 // promise that there is no way to mutate this object from 115 // promise that there is no way to mutate this object from
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
179 const SkPDFObjNumMap& objNumMap) const { 175 const SkPDFObjNumMap& objNumMap) const {
180 auto dict = sk_make_sp<SkPDFDict>("ExtGState"); 176 auto dict = sk_make_sp<SkPDFDict>("ExtGState");
181 dict->insertName("Type", "ExtGState"); 177 dict->insertName("Type", "ExtGState");
182 178
183 SkScalar alpha = SkIntToScalar(fAlpha) / 0xFF; 179 SkScalar alpha = SkIntToScalar(fAlpha) / 0xFF;
184 dict->insertScalar("CA", alpha); 180 dict->insertScalar("CA", alpha);
185 dict->insertScalar("ca", alpha); 181 dict->insertScalar("ca", alpha);
186 182
187 SkPaint::Cap strokeCap = (SkPaint::Cap)fStrokeCap; 183 SkPaint::Cap strokeCap = (SkPaint::Cap)fStrokeCap;
188 SkPaint::Join strokeJoin = (SkPaint::Join)fStrokeJoin; 184 SkPaint::Join strokeJoin = (SkPaint::Join)fStrokeJoin;
189 SkXfermode::Mode xferMode = (SkXfermode::Mode)fMode;
190 185
191 static_assert(SkPaint::kButt_Cap == 0, "paint_cap_mismatch"); 186 static_assert(SkPaint::kButt_Cap == 0, "paint_cap_mismatch");
192 static_assert(SkPaint::kRound_Cap == 1, "paint_cap_mismatch"); 187 static_assert(SkPaint::kRound_Cap == 1, "paint_cap_mismatch");
193 static_assert(SkPaint::kSquare_Cap == 2, "paint_cap_mismatch"); 188 static_assert(SkPaint::kSquare_Cap == 2, "paint_cap_mismatch");
194 static_assert(SkPaint::kCapCount == 3, "paint_cap_mismatch"); 189 static_assert(SkPaint::kCapCount == 3, "paint_cap_mismatch");
195 SkASSERT(strokeCap >= 0 && strokeCap <= 2); 190 SkASSERT(strokeCap >= 0 && strokeCap <= 2);
196 dict->insertInt("LC", strokeCap); 191 dict->insertInt("LC", strokeCap);
197 192
198 static_assert(SkPaint::kMiter_Join == 0, "paint_join_mismatch"); 193 static_assert(SkPaint::kMiter_Join == 0, "paint_join_mismatch");
199 static_assert(SkPaint::kRound_Join == 1, "paint_join_mismatch"); 194 static_assert(SkPaint::kRound_Join == 1, "paint_join_mismatch");
200 static_assert(SkPaint::kBevel_Join == 2, "paint_join_mismatch"); 195 static_assert(SkPaint::kBevel_Join == 2, "paint_join_mismatch");
201 static_assert(SkPaint::kJoinCount == 3, "paint_join_mismatch"); 196 static_assert(SkPaint::kJoinCount == 3, "paint_join_mismatch");
202 SkASSERT(strokeJoin >= 0 && strokeJoin <= 2); 197 SkASSERT(strokeJoin >= 0 && strokeJoin <= 2);
203 dict->insertInt("LJ", strokeJoin); 198 dict->insertInt("LJ", strokeJoin);
204 199
205 dict->insertScalar("LW", fStrokeWidth); 200 dict->insertScalar("LW", fStrokeWidth);
206 dict->insertScalar("ML", fStrokeMiter); 201 dict->insertScalar("ML", fStrokeMiter);
207 dict->insertBool("SA", true); // SA = Auto stroke adjustment. 202 dict->insertBool("SA", true); // SA = Auto stroke adjustment.
208 dict->insertName("BM", as_blend_mode(xferMode)); 203 dict->insertName("BM", as_blend_mode((SkBlendMode)fMode));
209 dict->emitObject(stream, objNumMap); 204 dict->emitObject(stream, objNumMap);
210 } 205 }
OLDNEW
« no previous file with comments | « src/pdf/SkPDFGraphicState.h ('k') | src/pipe/SkPipeCanvas.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698