tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

SkPDFGradientShader.h (2434B)


      1 /*
      2 * Copyright 2017 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 SkPDFGradientShader_DEFINED
      8 #define SkPDFGradientShader_DEFINED
      9 
     10 #include "include/core/SkColor.h"
     11 #include "include/core/SkMatrix.h"
     12 #include "include/core/SkRect.h"
     13 #include "include/core/SkScalar.h"
     14 #include "include/private/base/SkAssert.h"
     15 #include "include/private/base/SkPoint_impl.h"
     16 #include "src/pdf/SkPDFTypes.h"
     17 #include "src/pdf/SkPDFUtils.h"
     18 #include "src/shaders/SkShaderBase.h"
     19 
     20 #include <cstdint>
     21 #include <memory>
     22 
     23 class SkPDFDocument;
     24 class SkShader;
     25 
     26 namespace SkPDFGradientShader {
     27 
     28 SkPDFIndirectReference Make(SkPDFDocument* doc,
     29                            SkShader* shader,
     30                            const SkMatrix& matrix,
     31                            const SkIRect& surfaceBBox);
     32 
     33 struct Key {
     34    SkShaderBase::GradientType fType;
     35    SkShaderBase::GradientInfo fInfo;
     36    std::unique_ptr<SkColor4f[]> fColors;
     37    std::unique_ptr<SkScalar[]> fStops;
     38    SkMatrix fCanvasTransform;
     39    SkMatrix fShaderTransform;
     40    SkIRect fBBox;
     41    uint32_t fHash;
     42 };
     43 
     44 struct KeyHash {
     45    uint32_t operator()(const Key& k) const { return k.fHash; }
     46 };
     47 
     48 inline bool operator==(const SkShaderBase::GradientInfo& u, const SkShaderBase::GradientInfo& v) {
     49    return u.fColorCount    == v.fColorCount
     50        && u.fPoint[0]      == v.fPoint[0]
     51        && u.fPoint[1]      == v.fPoint[1]
     52        && u.fRadius[0]     == v.fRadius[0]
     53        && u.fRadius[1]     == v.fRadius[1]
     54        && u.fTileMode      == v.fTileMode
     55        && u.fGradientFlags == v.fGradientFlags
     56        && SkPackedArrayEqual(u.fColors, v.fColors, u.fColorCount)
     57        && SkPackedArrayEqual(u.fColorOffsets, v.fColorOffsets, u.fColorCount);
     58 }
     59 
     60 inline bool operator==(const Key& u, const Key& v) {
     61    SkASSERT(u.fInfo.fColors       == u.fColors.get());
     62    SkASSERT(u.fInfo.fColorOffsets == u.fStops.get());
     63    SkASSERT(v.fInfo.fColors       == v.fColors.get());
     64    SkASSERT(v.fInfo.fColorOffsets == v.fStops.get());
     65    return u.fType            == v.fType
     66        && u.fInfo            == v.fInfo
     67        && u.fCanvasTransform == v.fCanvasTransform
     68        && u.fShaderTransform == v.fShaderTransform
     69        && u.fBBox            == v.fBBox;
     70 }
     71 inline bool operator!=(const Key& u, const Key& v) { return !(u == v); }
     72 
     73 }  // namespace SkPDFGradientShader
     74 #endif  // SkPDFGradientShader_DEFINED