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