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 8#include "include/core/SkCanvas.h" 9#include "include/core/SkStream.h" 10#include "include/docs/SkPDFDocument.h" 11#include "tests/Test.h" 12 13static void run_test(SkWStream* out, SkBlendMode mode, U8CPU alpha) { 14 auto pdfDoc = SkPDF::MakeDocument(out); 15 SkCanvas* c = pdfDoc->beginPage(612.0f, 792.0f); 16 SkPaint black; 17 SkPaint background; 18 background.setColor(SK_ColorWHITE); 19 background.setAlpha(alpha); 20 background.setBlendMode(mode); 21 c->drawRect(SkRect::MakeWH(612.0f, 792.0f), background); 22 c->drawRect(SkRect::MakeXYWH(36.0f, 36.0f, 9.0f, 9.0f), black); 23 c->drawRect(SkRect::MakeXYWH(72.0f, 72.0f, 468.0f, 648.0f), background); 24 c->drawRect(SkRect::MakeXYWH(108.0f, 108.0f, 9.0f, 9.0f), black); 25 pdfDoc->close(); 26} 27 28// http://crbug.com/473572 29DEF_TEST(SkPDF_OpaqueSrcModeToSrcOver, r) { 30 REQUIRE_PDF_DOCUMENT(SkPDF_OpaqueSrcModeToSrcOver, r); 31 SkDynamicMemoryWStream srcMode; 32 SkDynamicMemoryWStream srcOverMode; 33 34 U8CPU alpha = SK_AlphaOPAQUE; 35 run_test(&srcMode, SkBlendMode::kSrc, alpha); 36 run_test(&srcOverMode, SkBlendMode::kSrcOver, alpha); 37 REPORTER_ASSERT(r, srcMode.bytesWritten() == srcOverMode.bytesWritten()); 38 // The two PDFs should be equal because they have an opaque alpha. 39 40 srcMode.reset(); 41 srcOverMode.reset(); 42 43 alpha = 0x80; 44 run_test(&srcMode, SkBlendMode::kSrc, alpha); 45 run_test(&srcOverMode, SkBlendMode::kSrcOver, alpha); 46 REPORTER_ASSERT(r, srcMode.bytesWritten() > srcOverMode.bytesWritten()); 47 // The two PDFs should not be equal because they have a non-opaque alpha. 48} 49