tor-browser

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

SkPathEffect.h (3343B)


      1 /*
      2 * Copyright 2006 The Android Open Source Project
      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 
      8 #ifndef SkPathEffect_DEFINED
      9 #define SkPathEffect_DEFINED
     10 
     11 #include "include/core/SkFlattenable.h"
     12 #include "include/core/SkRefCnt.h"
     13 #include "include/core/SkTypes.h"
     14 
     15 // TODO(kjlubick) update clients and remove this unnecessary #include
     16 #include "include/core/SkPath.h"  // IWYU pragma: keep
     17 
     18 #include <cstddef>
     19 
     20 class SkMatrix;
     21 class SkPathBuilder;
     22 class SkStrokeRec;
     23 struct SkDeserialProcs;
     24 struct SkRect;
     25 
     26 /** \class SkPathEffect
     27 
     28    SkPathEffect is the base class for objects in the SkPaint that affect
     29    the geometry of a drawing primitive before it is transformed by the
     30    canvas' matrix and drawn.
     31 
     32    Dashing is implemented as a subclass of SkPathEffect.
     33 */
     34 class SK_API SkPathEffect : public SkFlattenable {
     35 public:
     36    /**
     37     *  Returns a patheffect that apples each effect (first and second) to the original path,
     38     *  and returns a path with the sum of these.
     39     *
     40     *  result = first(path) + second(path)
     41     *
     42     */
     43    static sk_sp<SkPathEffect> MakeSum(sk_sp<SkPathEffect> first, sk_sp<SkPathEffect> second);
     44 
     45    /**
     46     *  Returns a patheffect that applies the inner effect to the path, and then applies the
     47     *  outer effect to the result of the inner's.
     48     *
     49     *  result = outer(inner(path))
     50     */
     51    static sk_sp<SkPathEffect> MakeCompose(sk_sp<SkPathEffect> outer, sk_sp<SkPathEffect> inner);
     52 
     53    static SkFlattenable::Type GetFlattenableType() {
     54        return kSkPathEffect_Type;
     55    }
     56 
     57    /**
     58     *  Given a src path (input) and a stroke-rec (input and output), apply
     59     *  this effect to the src path, returning the new path in dst, and return
     60     *  true. If this effect cannot be applied, return false and ignore dst
     61     *  and stroke-rec.
     62     *
     63     *  The stroke-rec specifies the initial request for stroking (if any).
     64     *  The effect can treat this as input only, or it can choose to change
     65     *  the rec as well. For example, the effect can decide to change the
     66     *  stroke's width or join, or the effect can change the rec from stroke
     67     *  to fill (or fill to stroke) in addition to returning a new (dst) path.
     68     *
     69     *  If this method returns true, the caller will apply (as needed) the
     70     *  resulting stroke-rec to dst and then draw.
     71     */
     72    bool filterPath(SkPathBuilder* dst, const SkPath& src, SkStrokeRec*, const SkRect* cullR,
     73                    const SkMatrix& ctm) const;
     74    bool filterPath(SkPathBuilder* dst, const SkPath& src, SkStrokeRec*) const;
     75 
     76    /** True if this path effect requires a valid CTM */
     77    bool needsCTM() const;
     78 
     79    static sk_sp<SkPathEffect> Deserialize(const void* data, size_t size,
     80                                           const SkDeserialProcs* procs = nullptr);
     81 
     82 #ifdef SK_SUPPORT_MUTABLE_PATHEFFECT
     83    bool filterPath(SkPath* dst, const SkPath& src, SkStrokeRec*, const SkRect* cullR) const;
     84 
     85    /** Version of filterPath that can be called when the CTM is known. */
     86    bool filterPath(SkPath* dst, const SkPath& src, SkStrokeRec*, const SkRect* cullR,
     87                    const SkMatrix& ctm) const;
     88 #endif
     89 
     90 private:
     91    SkPathEffect() = default;
     92    friend class SkPathEffectBase;
     93 
     94    using INHERITED = SkFlattenable;
     95 };
     96 
     97 #endif