blob: 56388e64f17bd583e5b042ef63783a1599019911 [file] [log] [blame]
// 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