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