OLD | NEW |
| (Empty) |
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 #if SK_SUPPORT_PDF | |
13 | |
14 static void run_test(SkWStream* out, SkXfermode::Mode mode, U8CPU alpha) { | |
15 SkAutoTUnref<SkDocument> pdfDoc(SkDocument::CreatePDF(out)); | |
16 SkCanvas* c = pdfDoc->beginPage(612.0f, 792.0f); | |
17 SkPaint black; | |
18 SkPaint background; | |
19 background.setColor(SK_ColorWHITE); | |
20 background.setAlpha(alpha); | |
21 background.setXfermodeMode(mode); | |
22 c->drawRect(SkRect::MakeWH(612.0f, 792.0f), background); | |
23 c->drawRect(SkRect::MakeXYWH(36.0f, 36.0f, 9.0f, 9.0f), black); | |
24 c->drawRect(SkRect::MakeXYWH(72.0f, 72.0f, 468.0f, 648.0f), background); | |
25 c->drawRect(SkRect::MakeXYWH(108.0f, 108.0f, 9.0f, 9.0f), black); | |
26 pdfDoc->close(); | |
27 } | |
28 | |
29 // http://crbug.com/473572 | |
30 DEF_TEST(SkPDF_OpaqueSrcModeToSrcOver, r) { | |
31 SkDynamicMemoryWStream srcMode; | |
32 SkDynamicMemoryWStream srcOverMode; | |
33 | |
34 U8CPU alpha = SK_AlphaOPAQUE; | |
35 run_test(&srcMode, SkXfermode::kSrc_Mode, alpha); | |
36 run_test(&srcOverMode, SkXfermode::kSrcOver_Mode, alpha); | |
37 REPORTER_ASSERT(r, srcMode.getOffset() == srcOverMode.getOffset()); | |
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, SkXfermode::kSrc_Mode, alpha); | |
45 run_test(&srcOverMode, SkXfermode::kSrcOver_Mode, alpha); | |
46 REPORTER_ASSERT(r, srcMode.getOffset() > srcOverMode.getOffset()); | |
47 // The two PDFs should not be equal because they have a non-opaque alpha. | |
48 } | |
49 #endif // SK_SUPPORT_PDF | |
OLD | NEW |