blob: 03d14d342e69e3679f057f814b84d3694343a9c4 [file] [log] [blame]
Mike Reed0ef539a2018-07-18 13:28:42 -04001/*
2 * Copyright 2018 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
8#ifndef SkOpPE_DEFINED
9#define SkOpPE_DEFINED
10
Mike Reedec9d0e82021-05-21 17:42:14 -040011#include "include/pathops/SkPathOps.h"
12#include "src/core/SkPathEffectBase.h"
Mike Reed0ef539a2018-07-18 13:28:42 -040013
Mike Reedec9d0e82021-05-21 17:42:14 -040014class SkOpPE : public SkPathEffectBase {
Mike Reed0ef539a2018-07-18 13:28:42 -040015public:
16 SkOpPE(sk_sp<SkPathEffect> one, sk_sp<SkPathEffect> two, SkPathOp op);
17
Mike Reed0ef539a2018-07-18 13:28:42 -040018
19protected:
20 void flatten(SkWriteBuffer&) const override;
Mike Reed6d10f8b2018-08-16 13:22:16 -040021 bool onFilterPath(SkPath* dst, const SkPath& src, SkStrokeRec*, const SkRect*) const override;
Mike Reed0ef539a2018-07-18 13:28:42 -040022
23private:
Mike Klein4fee3232018-10-18 17:27:16 -040024 SK_FLATTENABLE_HOOKS(SkOpPE)
Mike Reed0ef539a2018-07-18 13:28:42 -040025
Michael Ludwig4e1c1a72021-05-11 11:39:36 -040026 bool computeFastBounds(SkRect* bounds) const override;
27
Mike Reed0ef539a2018-07-18 13:28:42 -040028 sk_sp<SkPathEffect> fOne;
29 sk_sp<SkPathEffect> fTwo;
30 SkPathOp fOp;
31
Mike Reedec9d0e82021-05-21 17:42:14 -040032 using INHERITED = SkPathEffectBase;
Mike Reed0ef539a2018-07-18 13:28:42 -040033};
34
Mike Reedec9d0e82021-05-21 17:42:14 -040035class SkMatrixPE : public SkPathEffectBase {
Mike Reed0ef539a2018-07-18 13:28:42 -040036public:
37 SkMatrixPE(const SkMatrix&);
38
Mike Reed0ef539a2018-07-18 13:28:42 -040039protected:
40 void flatten(SkWriteBuffer&) const override;
Mike Reed6d10f8b2018-08-16 13:22:16 -040041 bool onFilterPath(SkPath* dst, const SkPath& src, SkStrokeRec*, const SkRect*) const override;
Mike Reed0ef539a2018-07-18 13:28:42 -040042
43private:
Mike Klein4fee3232018-10-18 17:27:16 -040044 SK_FLATTENABLE_HOOKS(SkMatrixPE)
Mike Reed0ef539a2018-07-18 13:28:42 -040045
Michael Ludwig4e1c1a72021-05-11 11:39:36 -040046 bool computeFastBounds(SkRect* bounds) const override {
47 if (bounds) {
48 fMatrix.mapRect(bounds);
49 }
50 return true;
51 }
52
Mike Reed0ef539a2018-07-18 13:28:42 -040053 SkMatrix fMatrix;
54
Mike Reedec9d0e82021-05-21 17:42:14 -040055 using INHERITED = SkPathEffectBase;
Mike Reed0ef539a2018-07-18 13:28:42 -040056};
57
Mike Reedec9d0e82021-05-21 17:42:14 -040058class SkStrokePE : public SkPathEffectBase {
Mike Reed0ef539a2018-07-18 13:28:42 -040059public:
60 SkStrokePE(SkScalar width, SkPaint::Join, SkPaint::Cap, SkScalar miter);
61
Mike Reed0ef539a2018-07-18 13:28:42 -040062protected:
63 void flatten(SkWriteBuffer&) const override;
Mike Reed6d10f8b2018-08-16 13:22:16 -040064 bool onFilterPath(SkPath* dst, const SkPath& src, SkStrokeRec*, const SkRect*) const override;
Mike Reed0ef539a2018-07-18 13:28:42 -040065
66private:
Mike Klein4fee3232018-10-18 17:27:16 -040067 SK_FLATTENABLE_HOOKS(SkStrokePE)
Mike Reed0ef539a2018-07-18 13:28:42 -040068
Michael Ludwig4e1c1a72021-05-11 11:39:36 -040069 bool computeFastBounds(SkRect* bounds) const override;
70
Mike Reed0ef539a2018-07-18 13:28:42 -040071 SkScalar fWidth,
72 fMiter;
73 SkPaint::Join fJoin;
74 SkPaint::Cap fCap;
75
Mike Reedec9d0e82021-05-21 17:42:14 -040076 using INHERITED = SkPathEffectBase;
Mike Reed0ef539a2018-07-18 13:28:42 -040077};
78
Mike Reedec9d0e82021-05-21 17:42:14 -040079class SkStrokeAndFillPE : public SkPathEffectBase {
Mike Reed3e843122020-05-20 09:55:58 -040080public:
81 SkStrokeAndFillPE() {}
82
83protected:
84 void flatten(SkWriteBuffer&) const override;
85 bool onFilterPath(SkPath* dst, const SkPath& src, SkStrokeRec*, const SkRect*) const override;
Mike Reed3e843122020-05-20 09:55:58 -040086
87private:
88 SK_FLATTENABLE_HOOKS(SkStrokeAndFillPE)
89
Michael Ludwig4e1c1a72021-05-11 11:39:36 -040090 bool computeFastBounds(SkRect* bounds) const override {
91 // The effect's bounds depend on the StrokeRect that is not yet available
92 return false;
93 }
94
Mike Reedec9d0e82021-05-21 17:42:14 -040095 using INHERITED = SkPathEffectBase;
Mike Reed3e843122020-05-20 09:55:58 -040096};
97
Mike Reed0ef539a2018-07-18 13:28:42 -040098#endif