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

Side by Side Diff: src/core/SkScan_Hairline.cpp

Issue 1893433002: In SkDraw::drawRect, use SkPath for huge rects. Base URL: https://skia.googlesource.com/skia@fixed-assert
Patch Set: Created 4 years, 8 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/core/SkScan_AntiPath.cpp ('k') | src/core/SkScan_Path.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 2006 The Android Open Source Project 2 * Copyright 2006 The Android Open Source Project
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 "SkScan.h" 8 #include "SkScan.h"
9 #include "SkBlitter.h" 9 #include "SkBlitter.h"
10 #include "SkRasterClip.h" 10 #include "SkRasterClip.h"
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after
140 } 140 }
141 } 141 }
142 142
143 // we don't just draw 4 lines, 'cause that can leave a gap in the bottom-right 143 // we don't just draw 4 lines, 'cause that can leave a gap in the bottom-right
144 // and double-hit the top-left. 144 // and double-hit the top-left.
145 // TODO: handle huge coordinates on rect (before calling SkScalarToFixed) 145 // TODO: handle huge coordinates on rect (before calling SkScalarToFixed)
146 void SkScan::HairRect(const SkRect& rect, const SkRasterClip& clip, 146 void SkScan::HairRect(const SkRect& rect, const SkRasterClip& clip,
147 SkBlitter* blitter) { 147 SkBlitter* blitter) {
148 SkAAClipBlitterWrapper wrapper; 148 SkAAClipBlitterWrapper wrapper;
149 SkBlitterClipper clipper; 149 SkBlitterClipper clipper;
150 SkIRect r;
151 150
152 r.set(SkScalarToFixed(rect.fLeft) >> 16, 151 const SkIRect r = SkIRect::MakeLTRB(SkScalarTruncToInt(rect.fLeft),
153 SkScalarToFixed(rect.fTop) >> 16, 152 SkScalarTruncToInt(rect.fTop),
154 (SkScalarToFixed(rect.fRight) >> 16) + 1, 153 SkScalarTruncToInt(rect.fRight) + 1,
155 (SkScalarToFixed(rect.fBottom) >> 16) + 1); 154 SkScalarTruncToInt(rect.fBottom) + 1);
156 155
157 if (clip.quickReject(r)) { 156 if (clip.quickReject(r)) {
158 return; 157 return;
159 } 158 }
160 if (!clip.quickContains(r)) { 159 if (!clip.quickContains(r)) {
161 const SkRegion* clipRgn; 160 const SkRegion* clipRgn;
162 if (clip.isBW()) { 161 if (clip.isBW()) {
163 clipRgn = &clip.bwRgn(); 162 clipRgn = &clip.bwRgn();
164 } else { 163 } else {
165 wrapper.init(clip, blitter); 164 wrapper.init(clip, blitter);
(...skipping 300 matching lines...) Expand 10 before | Expand all | Expand 10 after
466 } 465 }
467 466
468 SkAAClipBlitterWrapper wrap; 467 SkAAClipBlitterWrapper wrap;
469 const SkRegion* clip = nullptr; 468 const SkRegion* clip = nullptr;
470 SkRect insetStorage, outsetStorage; 469 SkRect insetStorage, outsetStorage;
471 const SkRect* insetClip = nullptr; 470 const SkRect* insetClip = nullptr;
472 const SkRect* outsetClip = nullptr; 471 const SkRect* outsetClip = nullptr;
473 472
474 { 473 {
475 const int capOut = SkPaint::kButt_Cap == capStyle ? 1 : 2; 474 const int capOut = SkPaint::kButt_Cap == capStyle ? 1 : 2;
476 const SkIRect ibounds = path.getBounds().roundOut().makeOutset(capOut, c apOut); 475 const SkRect bounds = path.getBounds().makeOutset(capOut, capOut);
477 if (rclip.quickReject(ibounds)) { 476 if (rclip.quickReject(bounds)) {
478 return; 477 return;
479 } 478 }
480 if (!rclip.quickContains(ibounds)) { 479 if (!rclip.quickContains(bounds)) {
481 if (rclip.isBW()) { 480 if (rclip.isBW()) {
482 clip = &rclip.bwRgn(); 481 clip = &rclip.bwRgn();
483 } else { 482 } else {
484 wrap.init(rclip, blitter); 483 wrap.init(rclip, blitter);
485 blitter = wrap.getBlitter(); 484 blitter = wrap.getBlitter();
486 clip = &wrap.getRgn(); 485 clip = &wrap.getRgn();
487 } 486 }
488 487
489 /* 488 /*
490 * We now cache two scalar rects, to use for culling per-segment (e .g. cubic). 489 * We now cache two scalar rects, to use for culling per-segment (e .g. cubic).
(...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after
679 678
680 SkAAClipBlitterWrapper wrap; 679 SkAAClipBlitterWrapper wrap;
681 if (!clip.quickContains(r.roundOut().makeOutset(1, 1))) { 680 if (!clip.quickContains(r.roundOut().makeOutset(1, 1))) {
682 wrap.init(clip, blitter); 681 wrap.init(clip, blitter);
683 blitter = wrap.getBlitter(); 682 blitter = wrap.getBlitter();
684 clipRgn = &wrap.getRgn(); 683 clipRgn = &wrap.getRgn();
685 } 684 }
686 AntiHairLineRgn(pts, count, clipRgn, blitter); 685 AntiHairLineRgn(pts, count, clipRgn, blitter);
687 } 686 }
688 } 687 }
OLDNEW
« no previous file with comments | « src/core/SkScan_AntiPath.cpp ('k') | src/core/SkScan_Path.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698