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

Side by Side Diff: src/gpu/GrShape.cpp

Issue 2051263003: Fix GrShape to preserve inverseness of rrects for strokes but not dashes. (Closed) Base URL: https://chromium.googlesource.com/skia.git@strokeinv
Patch Set: Address comment Created 4 years, 6 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/gpu/GrShape.h ('k') | tests/GrShapeTest.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 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 "GrShape.h" 8 #include "GrShape.h"
9 9
10 GrShape& GrShape::operator=(const GrShape& that) { 10 GrShape& GrShape::operator=(const GrShape& that) {
(...skipping 263 matching lines...) Expand 10 before | Expand all | Expand 10 after
274 SkAssertResult(parent.fStyle.applyToPath(fPath.get(), &fillOrHairline, * srcForParentStyle, 274 SkAssertResult(parent.fStyle.applyToPath(fPath.get(), &fillOrHairline, * srcForParentStyle,
275 scale)); 275 scale));
276 fStyle.resetToInitStyle(fillOrHairline); 276 fStyle.resetToInitStyle(fillOrHairline);
277 } 277 }
278 this->attemptToReduceFromPath(); 278 this->attemptToReduceFromPath();
279 this->setInheritedKey(*parentForKey, apply, scale); 279 this->setInheritedKey(*parentForKey, apply, scale);
280 } 280 }
281 281
282 static inline bool rrect_path_is_inverse_filled(const SkPath& path, const SkStro keRec& strokeRec, 282 static inline bool rrect_path_is_inverse_filled(const SkPath& path, const SkStro keRec& strokeRec,
283 const SkPathEffect* pe) { 283 const SkPathEffect* pe) {
284 // Dashing doesn't use the path fill type. Dashing only works with stroking 284 // This is currently imitating the questionable behavior of the sw-rasterize r. Inverseness is
285 // respected for stroking but not dashing + stroking. (We make no assumption s about arbitrary
286 // path effects and preserve the path's inverseness.)
287 // skbug.com/5421
285 if (pe && pe->asADash(nullptr)) { 288 if (pe && pe->asADash(nullptr)) {
286 pe = nullptr; 289 SkDEBUGCODE(SkStrokeRec::Style style = strokeRec.getStyle();)
290 SkASSERT(SkStrokeRec::kStroke_Style == style || SkStrokeRec::kHairline_S tyle == style);
291 return false;
287 } 292 }
288 293
289 SkStrokeRec::Style style = strokeRec.getStyle();
290 if (!pe && (SkStrokeRec::kStroke_Style == style || SkStrokeRec::kHairline_St yle == style)) {
291 // stroking ignores the path fill rule.
292 return false;
293 }
294 return path.isInverseFillType(); 294 return path.isInverseFillType();
295 } 295 }
296 296
297 GrShape::Type GrShape::AttemptToReduceFromPathImpl(const SkPath& path, SkRRect* rrect, 297 GrShape::Type GrShape::AttemptToReduceFromPathImpl(const SkPath& path, SkRRect* rrect,
298 SkPath::Direction* rrectDir, 298 SkPath::Direction* rrectDir,
299 unsigned* rrectStart, 299 unsigned* rrectStart,
300 bool* rrectIsInverted, 300 bool* rrectIsInverted,
301 const SkPathEffect* pe, 301 const SkPathEffect* pe,
302 const SkStrokeRec& strokeRec) { 302 const SkStrokeRec& strokeRec) {
303 if (path.isEmpty()) { 303 if (path.isEmpty()) {
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
349 // Since there is no path effect the dir and start index is imma terial. 349 // Since there is no path effect the dir and start index is imma terial.
350 *rrectDir = kDefaultRRectDir; 350 *rrectDir = kDefaultRRectDir;
351 *rrectStart = kDefaultRRectStart; 351 *rrectStart = kDefaultRRectStart;
352 *rrectIsInverted = rrect_path_is_inverse_filled(path, strokeRec, pe); 352 *rrectIsInverted = rrect_path_is_inverse_filled(path, strokeRec, pe);
353 return Type::kRRect; 353 return Type::kRRect;
354 } 354 }
355 } 355 }
356 } 356 }
357 return Type::kPath; 357 return Type::kPath;
358 } 358 }
OLDNEW
« no previous file with comments | « src/gpu/GrShape.h ('k') | tests/GrShapeTest.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698