Home | History | Annotate | Download | only in tests
      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, SkBlendMode mode, U8CPU alpha) {
     13     sk_sp<SkDocument> pdfDoc(SkDocument::MakePDF(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.setBlendMode(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, SkBlendMode::kSrc, alpha);
     35     run_test(&srcOverMode, SkBlendMode::kSrcOver, alpha);
     36     REPORTER_ASSERT(r, srcMode.bytesWritten() == srcOverMode.bytesWritten());
     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, SkBlendMode::kSrc, alpha);
     44     run_test(&srcOverMode, SkBlendMode::kSrcOver, alpha);
     45     REPORTER_ASSERT(r, srcMode.bytesWritten() > srcOverMode.bytesWritten());
     46     // The two PDFs should not be equal because they have a non-opaque alpha.
     47 }
     48