| // Copyright 2019 Google LLC. |
| #ifndef ParagraphPainter_DEFINED |
| #define ParagraphPainter_DEFINED |
| |
| #include "include/core/SkPaint.h" |
| #include "include/core/SkTextBlob.h" |
| |
| #include <optional> |
| #include <variant> |
| |
| namespace skia { |
| namespace textlayout { |
| |
| class ParagraphPainter { |
| public: |
| typedef int PaintID; |
| typedef std::variant<SkPaint, PaintID> SkPaintOrID; |
| |
| struct DashPathEffect { |
| DashPathEffect(SkScalar onLength, SkScalar offLength); |
| |
| SkScalar fOnLength; |
| SkScalar fOffLength; |
| }; |
| |
| class DecorationStyle { |
| public: |
| DecorationStyle(); |
| DecorationStyle(SkColor color, SkScalar strokeWidth, |
| std::optional<DashPathEffect> dashPathEffect); |
| |
| SkColor getColor() const { return fColor; } |
| SkScalar getStrokeWidth() const { return fStrokeWidth; } |
| std::optional<DashPathEffect> getDashPathEffect() const { return fDashPathEffect; } |
| const SkPaint& skPaint() const { return fPaint; } |
| |
| private: |
| SkColor fColor; |
| SkScalar fStrokeWidth; |
| std::optional<DashPathEffect> fDashPathEffect; |
| SkPaint fPaint; |
| }; |
| |
| virtual ~ParagraphPainter() = default; |
| |
| virtual void drawTextBlob(const sk_sp<SkTextBlob>& blob, SkScalar x, SkScalar y, const SkPaintOrID& paint) = 0; |
| virtual void drawTextShadow(const sk_sp<SkTextBlob>& blob, SkScalar x, SkScalar y, SkColor color, SkScalar blurSigma) = 0; |
| virtual void drawRect(const SkRect& rect, const SkPaintOrID& paint) = 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 |