// Copyright 2019 Google LLC. #ifndef ParagraphPainter_DEFINED #define ParagraphPainter_DEFINED #include "include/core/SkPaint.h" #include "include/core/SkRRect.h" #include "include/core/SkTextBlob.h" #include #include namespace skia { namespace textlayout { class ParagraphPainter { public: typedef int PaintID; typedef std::variant SkPaintOrID; struct DashPathEffect { DashPathEffect(SkScalar onLength, SkScalar offLength); SkScalar fOnLength; SkScalar fOffLength; }; class DecorationStyle { public: DecorationStyle(); DecorationStyle(SkColor color, SkScalar strokeWidth, std::optional dashPathEffect); SkColor getColor() const { return fColor; } SkScalar getStrokeWidth() const { return fStrokeWidth; } std::optional getDashPathEffect() const { return fDashPathEffect; } const SkPaint& skPaint() const { return fPaint; } private: SkColor fColor; SkScalar fStrokeWidth; std::optional fDashPathEffect; SkPaint fPaint; }; virtual ~ParagraphPainter() = default; virtual void drawTextBlob(const sk_sp& blob, SkScalar x, SkScalar y, const SkPaintOrID& paint) = 0; virtual void drawTextShadow(const sk_sp& blob, SkScalar x, SkScalar y, SkColor color, SkScalar blurSigma) = 0; virtual void drawRect(const SkRect& rect, const SkPaintOrID& paint) = 0; virtual void drawRRect(const SkRRect& rrect, const SkColor color) = 0; virtual void drawFilledRect(const SkRect& rect, const DecorationStyle& decorStyle) = 0; virtual void drawPath(const SkPath& path, const DecorationStyle& decorStyle) = 0; virtual void drawLine(SkScalar x0, SkScalar y0, SkScalar x1, SkScalar y1, const DecorationStyle& decorStyle) = 0; virtual void clipRect(const SkRect& rect) = 0; virtual void translate(SkScalar dx, SkScalar dy) = 0; virtual void save() = 0; virtual void restore() = 0; }; } // namespace textlayout } // namespace skia #endif // ParagraphPainter_DEFINED