1 /* 2 * Copyright 2015 Google Inc. 3 * 4 * Use of this source code is governed by a BSD-style license that can be 5 * found in the LICENSE file. 6 */ 7 #include "SkCanvas.h" 8 #include "SkDocument.h" 9 #include "SkStream.h" 10 #include "Test.h" 11 12 static void run_test(SkWStream* out, SkXfermode::Mode mode, U8CPU alpha) { 13 SkAutoTUnref<SkDocument> pdfDoc(SkDocument::CreatePDF(out)); 14 SkCanvas* c = pdfDoc->beginPage(612.0f, 792.0f); 15 SkPaint black; 16 SkPaint background; 17 background.setColor(SK_ColorWHITE); 18 background.setAlpha(alpha); 19 background.setXfermodeMode(mode); 20 c->drawRect(SkRect::MakeWH(612.0f, 792.0f), background); 21 c->drawRect(SkRect::MakeXYWH(36.0f, 36.0f, 9.0f, 9.0f), black); 22 c->drawRect(SkRect::MakeXYWH(72.0f, 72.0f, 468.0f, 648.0f), background); 23 c->drawRect(SkRect::MakeXYWH(108.0f, 108.0f, 9.0f, 9.0f), black); 24 pdfDoc->close(); 25 } 26 27 // http://crbug.com/473572 28 DEF_TEST(SkPDF_OpaqueSrcModeToSrcOver, r) { 29 REQUIRE_PDF_DOCUMENT(SkPDF_OpaqueSrcModeToSrcOver, r); 30 SkDynamicMemoryWStream srcMode; 31 SkDynamicMemoryWStream srcOverMode; 32 33 U8CPU alpha = SK_AlphaOPAQUE; 34 run_test(&srcMode, SkXfermode::kSrc_Mode, alpha); 35 run_test(&srcOverMode, SkXfermode::kSrcOver_Mode, alpha); 36 REPORTER_ASSERT(r, srcMode.getOffset() == srcOverMode.getOffset()); 37 // The two PDFs should be equal because they have an opaque alpha. 38 39 srcMode.reset(); 40 srcOverMode.reset(); 41 42 alpha = 0x80; 43 run_test(&srcMode, SkXfermode::kSrc_Mode, alpha); 44 run_test(&srcOverMode, SkXfermode::kSrcOver_Mode, alpha); 45 REPORTER_ASSERT(r, srcMode.getOffset() > srcOverMode.getOffset()); 46 // The two PDFs should not be equal because they have a non-opaque alpha. 47 } 48