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

Unified Diff: skia/ext/analysis_canvas.cc

Issue 761903003: Update from https://crrev.com/306655 (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 6 years 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « skia/config/SkUserConfig.h ('k') | skia/ext/analysis_canvas_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: skia/ext/analysis_canvas.cc
diff --git a/skia/ext/analysis_canvas.cc b/skia/ext/analysis_canvas.cc
index ca19170339fdede31acb2af07dd4cc30c6ab89ca..48a09d11f535f01cb4c39b6766f40e9f2f45af00 100644
--- a/skia/ext/analysis_canvas.cc
+++ b/skia/ext/analysis_canvas.cc
@@ -15,6 +15,23 @@ namespace {
const int kNoLayer = -1;
+bool ActsLikeClear(SkXfermode::Mode mode, unsigned src_alpha) {
+ switch (mode) {
+ case SkXfermode::kClear_Mode:
+ return true;
+ case SkXfermode::kSrc_Mode:
+ case SkXfermode::kSrcIn_Mode:
+ case SkXfermode::kDstIn_Mode:
+ case SkXfermode::kSrcOut_Mode:
+ case SkXfermode::kDstATop_Mode:
+ return src_alpha == 0;
+ case SkXfermode::kDstOut_Mode:
+ return src_alpha == 0xFF;
+ default:
+ return false;
+ }
+}
+
bool IsSolidColorPaint(const SkPaint& paint) {
SkXfermode::Mode xfermode;
@@ -90,14 +107,9 @@ void AnalysisCanvas::clear(SkColor color) {
}
void AnalysisCanvas::drawPaint(const SkPaint& paint) {
- // This check is in SkCanvas::drawPaint(), and some of our unittests rely on
- // on this, so we reproduce it here.
- if (isClipEmpty())
- return;
-
- is_solid_color_ = false;
- is_transparent_ = false;
- ++draw_op_count_;
+ SkRect rect;
+ getClipBounds(&rect);
+ drawRect(rect, paint);
}
void AnalysisCanvas::drawPoints(SkCanvas::PointMode mode,
@@ -137,7 +149,7 @@ void AnalysisCanvas::drawRect(const SkRect& rect, const SkPaint& paint) {
// In all other cases, we keep the current transparent value
if (does_cover_canvas &&
!is_forced_not_transparent_ &&
- xfermode == SkXfermode::kClear_Mode) {
+ ActsLikeClear(xfermode, paint.getAlpha())) {
is_transparent_ = true;
} else if (paint.getAlpha() != 0 || xfermode != SkXfermode::kSrc_Mode) {
is_transparent_ = false;
« no previous file with comments | « skia/config/SkUserConfig.h ('k') | skia/ext/analysis_canvas_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698