xref: /aosp_15_r20/external/skia/modules/skparagraph/include/ParagraphPainter.h (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
1*c8dee2aaSAndroid Build Coastguard Worker // Copyright 2019 Google LLC.
2*c8dee2aaSAndroid Build Coastguard Worker #ifndef ParagraphPainter_DEFINED
3*c8dee2aaSAndroid Build Coastguard Worker #define ParagraphPainter_DEFINED
4*c8dee2aaSAndroid Build Coastguard Worker 
5*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkPaint.h"
6*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkTextBlob.h"
7*c8dee2aaSAndroid Build Coastguard Worker 
8*c8dee2aaSAndroid Build Coastguard Worker #include <optional>
9*c8dee2aaSAndroid Build Coastguard Worker #include <variant>
10*c8dee2aaSAndroid Build Coastguard Worker 
11*c8dee2aaSAndroid Build Coastguard Worker namespace skia {
12*c8dee2aaSAndroid Build Coastguard Worker namespace textlayout {
13*c8dee2aaSAndroid Build Coastguard Worker 
14*c8dee2aaSAndroid Build Coastguard Worker class ParagraphPainter {
15*c8dee2aaSAndroid Build Coastguard Worker public:
16*c8dee2aaSAndroid Build Coastguard Worker     typedef int PaintID;
17*c8dee2aaSAndroid Build Coastguard Worker     typedef std::variant<SkPaint, PaintID> SkPaintOrID;
18*c8dee2aaSAndroid Build Coastguard Worker 
19*c8dee2aaSAndroid Build Coastguard Worker     struct DashPathEffect {
20*c8dee2aaSAndroid Build Coastguard Worker         DashPathEffect(SkScalar onLength, SkScalar offLength);
21*c8dee2aaSAndroid Build Coastguard Worker 
22*c8dee2aaSAndroid Build Coastguard Worker         SkScalar fOnLength;
23*c8dee2aaSAndroid Build Coastguard Worker         SkScalar fOffLength;
24*c8dee2aaSAndroid Build Coastguard Worker     };
25*c8dee2aaSAndroid Build Coastguard Worker 
26*c8dee2aaSAndroid Build Coastguard Worker     class DecorationStyle {
27*c8dee2aaSAndroid Build Coastguard Worker     public:
28*c8dee2aaSAndroid Build Coastguard Worker         DecorationStyle();
29*c8dee2aaSAndroid Build Coastguard Worker         DecorationStyle(SkColor color, SkScalar strokeWidth,
30*c8dee2aaSAndroid Build Coastguard Worker                         std::optional<DashPathEffect> dashPathEffect);
31*c8dee2aaSAndroid Build Coastguard Worker 
getColor()32*c8dee2aaSAndroid Build Coastguard Worker         SkColor getColor() const { return fColor; }
getStrokeWidth()33*c8dee2aaSAndroid Build Coastguard Worker         SkScalar getStrokeWidth() const { return fStrokeWidth; }
getDashPathEffect()34*c8dee2aaSAndroid Build Coastguard Worker         std::optional<DashPathEffect> getDashPathEffect() const { return fDashPathEffect; }
skPaint()35*c8dee2aaSAndroid Build Coastguard Worker         const SkPaint& skPaint() const { return fPaint; }
36*c8dee2aaSAndroid Build Coastguard Worker 
37*c8dee2aaSAndroid Build Coastguard Worker     private:
38*c8dee2aaSAndroid Build Coastguard Worker         SkColor fColor;
39*c8dee2aaSAndroid Build Coastguard Worker         SkScalar fStrokeWidth;
40*c8dee2aaSAndroid Build Coastguard Worker         std::optional<DashPathEffect> fDashPathEffect;
41*c8dee2aaSAndroid Build Coastguard Worker         SkPaint fPaint;
42*c8dee2aaSAndroid Build Coastguard Worker     };
43*c8dee2aaSAndroid Build Coastguard Worker 
44*c8dee2aaSAndroid Build Coastguard Worker     virtual ~ParagraphPainter() = default;
45*c8dee2aaSAndroid Build Coastguard Worker 
46*c8dee2aaSAndroid Build Coastguard Worker     virtual void drawTextBlob(const sk_sp<SkTextBlob>& blob, SkScalar x, SkScalar y, const SkPaintOrID& paint) = 0;
47*c8dee2aaSAndroid Build Coastguard Worker     virtual void drawTextShadow(const sk_sp<SkTextBlob>& blob, SkScalar x, SkScalar y, SkColor color, SkScalar blurSigma) = 0;
48*c8dee2aaSAndroid Build Coastguard Worker     virtual void drawRect(const SkRect& rect, const SkPaintOrID& paint) = 0;
49*c8dee2aaSAndroid Build Coastguard Worker     virtual void drawFilledRect(const SkRect& rect, const DecorationStyle& decorStyle) = 0;
50*c8dee2aaSAndroid Build Coastguard Worker     virtual void drawPath(const SkPath& path, const DecorationStyle& decorStyle) = 0;
51*c8dee2aaSAndroid Build Coastguard Worker     virtual void drawLine(SkScalar x0, SkScalar y0, SkScalar x1, SkScalar y1, const DecorationStyle& decorStyle) = 0;
52*c8dee2aaSAndroid Build Coastguard Worker 
53*c8dee2aaSAndroid Build Coastguard Worker     virtual void clipRect(const SkRect& rect) = 0;
54*c8dee2aaSAndroid Build Coastguard Worker     virtual void translate(SkScalar dx, SkScalar dy) = 0;
55*c8dee2aaSAndroid Build Coastguard Worker 
56*c8dee2aaSAndroid Build Coastguard Worker     virtual void save() = 0;
57*c8dee2aaSAndroid Build Coastguard Worker     virtual void restore() = 0;
58*c8dee2aaSAndroid Build Coastguard Worker };
59*c8dee2aaSAndroid Build Coastguard Worker 
60*c8dee2aaSAndroid Build Coastguard Worker }  // namespace textlayout
61*c8dee2aaSAndroid Build Coastguard Worker }  // namespace skia
62*c8dee2aaSAndroid Build Coastguard Worker 
63*c8dee2aaSAndroid Build Coastguard Worker #endif  // ParagraphPainter_DEFINED
64