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

Side by Side Diff: src/pdf/SkPDFDevice.cpp

Issue 2355483002: abstract name of clipping ops, to transtion to a more restricted set (Closed)
Patch Set: no need for ifdef for globals Created 4 years, 3 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/SkPDFCanvas.cpp ('k') | src/pipe/SkPipeCanvas.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 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 "SkPDFDevice.h" 8 #include "SkPDFDevice.h"
9 9
10 #include "SkAdvancedTypefaceMetrics.h" 10 #include "SkAdvancedTypefaceMetrics.h"
(...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after
169 // enums so region_op_to_pathops_op can do a straight passthrough cast. 169 // enums so region_op_to_pathops_op can do a straight passthrough cast.
170 // If these are failing, it may be necessary to make region_op_to_pathops_op 170 // If these are failing, it may be necessary to make region_op_to_pathops_op
171 // do more. 171 // do more.
172 static_assert(SkRegion::kDifference_Op == (int)kDifference_SkPathOp, "region_pat hop_mismatch"); 172 static_assert(SkRegion::kDifference_Op == (int)kDifference_SkPathOp, "region_pat hop_mismatch");
173 static_assert(SkRegion::kIntersect_Op == (int)kIntersect_SkPathOp, "region_patho p_mismatch"); 173 static_assert(SkRegion::kIntersect_Op == (int)kIntersect_SkPathOp, "region_patho p_mismatch");
174 static_assert(SkRegion::kUnion_Op == (int)kUnion_SkPathOp, "region_pathop_mismat ch"); 174 static_assert(SkRegion::kUnion_Op == (int)kUnion_SkPathOp, "region_pathop_mismat ch");
175 static_assert(SkRegion::kXOR_Op == (int)kXOR_SkPathOp, "region_pathop_mismatch") ; 175 static_assert(SkRegion::kXOR_Op == (int)kXOR_SkPathOp, "region_pathop_mismatch") ;
176 static_assert(SkRegion::kReverseDifference_Op == (int)kReverseDifference_SkPathO p, 176 static_assert(SkRegion::kReverseDifference_Op == (int)kReverseDifference_SkPathO p,
177 "region_pathop_mismatch"); 177 "region_pathop_mismatch");
178 178
179 static SkPathOp region_op_to_pathops_op(SkRegion::Op op) { 179 static SkPathOp region_op_to_pathops_op(SkCanvas::ClipOp op) {
180 SkASSERT(op >= 0); 180 SkASSERT(op >= 0);
181 SkASSERT(op <= SkRegion::kReverseDifference_Op); 181 SkASSERT(op <= SkCanvas::kReverseDifference_Op);
182 return (SkPathOp)op; 182 return (SkPathOp)op;
183 } 183 }
184 184
185 /* Uses Path Ops to calculate a vector SkPath clip from a clip stack. 185 /* Uses Path Ops to calculate a vector SkPath clip from a clip stack.
186 * Returns true if successful, or false if not successful. 186 * Returns true if successful, or false if not successful.
187 * If successful, the resulting clip is stored in outClipPath. 187 * If successful, the resulting clip is stored in outClipPath.
188 * If not successful, outClipPath is undefined, and a fallback method 188 * If not successful, outClipPath is undefined, and a fallback method
189 * should be used. 189 * should be used.
190 */ 190 */
191 static bool get_clip_stack_path(const SkMatrix& transform, 191 static bool get_clip_stack_path(const SkMatrix& transform,
(...skipping 10 matching lines...) Expand all
202 SkPath entryPath; 202 SkPath entryPath;
203 if (SkClipStack::Element::kEmpty_Type == clipEntry->getType()) { 203 if (SkClipStack::Element::kEmpty_Type == clipEntry->getType()) {
204 outClipPath->reset(); 204 outClipPath->reset();
205 outClipPath->setFillType(SkPath::kInverseWinding_FillType); 205 outClipPath->setFillType(SkPath::kInverseWinding_FillType);
206 continue; 206 continue;
207 } else { 207 } else {
208 clipEntry->asPath(&entryPath); 208 clipEntry->asPath(&entryPath);
209 } 209 }
210 entryPath.transform(transform); 210 entryPath.transform(transform);
211 211
212 if (SkRegion::kReplace_Op == clipEntry->getOp()) { 212 if (SkCanvas::kReplace_Op == clipEntry->getOp()) {
213 *outClipPath = entryPath; 213 *outClipPath = entryPath;
214 } else { 214 } else {
215 SkPathOp op = region_op_to_pathops_op(clipEntry->getOp()); 215 SkPathOp op = region_op_to_pathops_op(clipEntry->getOp());
216 if (!Op(*outClipPath, entryPath, op, outClipPath)) { 216 if (!Op(*outClipPath, entryPath, op, outClipPath)) {
217 return false; 217 return false;
218 } 218 }
219 } 219 }
220 } 220 }
221 221
222 if (outClipPath->isInverseFillType()) { 222 if (outClipPath->isInverseFillType()) {
(...skipping 1523 matching lines...) Expand 10 before | Expand all | Expand 10 after
1746 if (clipStack == nullptr) { 1746 if (clipStack == nullptr) {
1747 if (clipRegion == fExistingClipRegion) { 1747 if (clipRegion == fExistingClipRegion) {
1748 clipStack = &fExistingClipStack; 1748 clipStack = &fExistingClipStack;
1749 } else { 1749 } else {
1750 // GraphicStackState::updateClip expects the clip stack to have 1750 // GraphicStackState::updateClip expects the clip stack to have
1751 // fExistingClip as a prefix, so start there, then set the clip 1751 // fExistingClip as a prefix, so start there, then set the clip
1752 // to the passed region. 1752 // to the passed region.
1753 synthesizedClipStack = fExistingClipStack; 1753 synthesizedClipStack = fExistingClipStack;
1754 SkPath clipPath; 1754 SkPath clipPath;
1755 clipRegion.getBoundaryPath(&clipPath); 1755 clipRegion.getBoundaryPath(&clipPath);
1756 synthesizedClipStack.clipDevPath(clipPath, SkRegion::kReplace_Op, 1756 synthesizedClipStack.clipDevPath(clipPath, SkCanvas::kReplace_Op,
1757 false); 1757 false);
1758 clipStack = &synthesizedClipStack; 1758 clipStack = &synthesizedClipStack;
1759 } 1759 }
1760 } 1760 }
1761 1761
1762 SkXfermode::Mode xfermode = SkXfermode::kSrcOver_Mode; 1762 SkXfermode::Mode xfermode = SkXfermode::kSrcOver_Mode;
1763 if (paint.getXfermode()) { 1763 if (paint.getXfermode()) {
1764 paint.getXfermode()->asMode(&xfermode); 1764 paint.getXfermode()->asMode(&xfermode);
1765 } 1765 }
1766 1766
(...skipping 542 matching lines...) Expand 10 before | Expand all | Expand 10 after
2309 } 2309 }
2310 2310
2311 sk_sp<SkSpecialImage> SkPDFDevice::makeSpecial(const SkImage* image) { 2311 sk_sp<SkSpecialImage> SkPDFDevice::makeSpecial(const SkImage* image) {
2312 return SkSpecialImage::MakeFromImage(SkIRect::MakeWH(image->width(), image-> height()), 2312 return SkSpecialImage::MakeFromImage(SkIRect::MakeWH(image->width(), image-> height()),
2313 image->makeNonTextureImage()); 2313 image->makeNonTextureImage());
2314 } 2314 }
2315 2315
2316 sk_sp<SkSpecialImage> SkPDFDevice::snapSpecial() { 2316 sk_sp<SkSpecialImage> SkPDFDevice::snapSpecial() {
2317 return nullptr; 2317 return nullptr;
2318 } 2318 }
OLDNEW
« no previous file with comments | « src/pdf/SkPDFCanvas.cpp ('k') | src/pipe/SkPipeCanvas.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698