PDFOpaqueSrcModeToSrcOverTest.cpp 1.7 KB

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