/src/skia/src/pdf/SkPDFShader.h
Line | Count | Source (jump to first uncovered line) |
1 | | /* |
2 | | * Copyright 2011 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 | | #ifndef SkPDFShader_DEFINED |
8 | | #define SkPDFShader_DEFINED |
9 | | |
10 | | #include "include/core/SkColor.h" |
11 | | #include "include/core/SkMatrix.h" |
12 | | #include "include/core/SkRect.h" |
13 | | #include "include/private/base/SkAssert.h" |
14 | | #include "include/private/base/SkMacros.h" |
15 | | #include "src/core/SkChecksum.h" |
16 | | #include "src/pdf/SkBitmapKey.h" |
17 | | #include "src/pdf/SkPDFTypes.h" |
18 | | |
19 | | class SkPDFDocument; |
20 | | class SkShader; |
21 | | enum class SkTileMode; |
22 | | |
23 | | /** Make a PDF shader for the passed SkShader. If the SkShader is invalid in |
24 | | * some way, returns nullptr. |
25 | | * |
26 | | * In PDF parlance, this is a pattern, used in place of a color when the |
27 | | * pattern color space is selected. |
28 | | * |
29 | | * May cache the shader in the document for later re-use. If this function is |
30 | | * called again with an equivalent shader, a new reference to the cached pdf |
31 | | * shader may be returned. |
32 | | * |
33 | | * @param doc The parent document, must be non-null. |
34 | | * @param shader The SkShader to emulate. |
35 | | * @param ctm The current transform matrix. (PDF shaders are absolutely |
36 | | * positioned, relative to where the page is drawn.) |
37 | | * @param surfaceBBox The bounding box of the drawing surface (with matrix |
38 | | * already applied). |
39 | | * @param paintColor Color+Alpha of the paint. Color is usually ignored, |
40 | | * unless it is a alpha shader. |
41 | | */ |
42 | | SkPDFIndirectReference SkPDFMakeShader(SkPDFDocument* doc, |
43 | | SkShader* shader, |
44 | | const SkMatrix& ctm, |
45 | | const SkIRect& surfaceBBox, |
46 | | SkColor4f paintColor); |
47 | | |
48 | | SK_BEGIN_REQUIRE_DENSE |
49 | | struct SkPDFImageShaderKey { |
50 | | SkMatrix fTransform; |
51 | | SkIRect fBBox; |
52 | | SkBitmapKey fBitmapKey; |
53 | | SkTileMode fImageTileModes[2]; |
54 | | SkColor4f fPaintColor; |
55 | | |
56 | | using Hash = SkForceDirectHash<SkPDFImageShaderKey>; |
57 | | }; |
58 | | SK_END_REQUIRE_DENSE |
59 | | |
60 | 0 | inline bool operator==(const SkPDFImageShaderKey& a, const SkPDFImageShaderKey& b) { |
61 | 0 | SkASSERT(a.fBitmapKey.fID != 0); |
62 | 0 | SkASSERT(b.fBitmapKey.fID != 0); |
63 | 0 | return a.fTransform == b.fTransform |
64 | 0 | && a.fBBox == b.fBBox |
65 | 0 | && a.fBitmapKey == b.fBitmapKey |
66 | 0 | && a.fImageTileModes[0] == b.fImageTileModes[0] |
67 | 0 | && a.fImageTileModes[1] == b.fImageTileModes[1] |
68 | 0 | && a.fPaintColor == b.fPaintColor; |
69 | 0 | } |
70 | | #endif |