1 // Copyright 2019 Google LLC. 2 #ifndef ParagraphPainterImpl_DEFINED 3 #define ParagraphPainterImpl_DEFINED 4 5 #include "include/core/SkCanvas.h" 6 #include "modules/skparagraph/include/ParagraphPainter.h" 7 8 namespace skia { 9 namespace textlayout { 10 11 class CanvasParagraphPainter : public ParagraphPainter { 12 public: 13 CanvasParagraphPainter(SkCanvas* canvas); 14 15 #ifndef USE_SKIA_TXT 16 void drawTextBlob(const sk_sp<SkTextBlob>& blob, SkScalar x, SkScalar y, const SkPaintOrID& paint) override; 17 void drawTextShadow(const sk_sp<SkTextBlob>& blob, SkScalar x, SkScalar y, SkColor color, SkScalar blurSigma) override; 18 #else drawTextBlob(const std::shared_ptr<RSTextBlob> & blob,SkScalar x,SkScalar y,const SkPaintOrID & paint)19 void drawTextBlob( 20 const std::shared_ptr<RSTextBlob>& blob, SkScalar x, SkScalar y, const SkPaintOrID& paint) override {} drawTextShadow(const std::shared_ptr<RSTextBlob> & blob,SkScalar x,SkScalar y,SkColor color,SkScalar blurSigma)21 void drawTextShadow( 22 const std::shared_ptr<RSTextBlob>& blob, SkScalar x, SkScalar y, SkColor color, SkScalar blurSigma) override {} 23 #endif 24 void drawRect(const SkRect& rect, const SkPaintOrID& paint) override; 25 void drawRRect(const SkRRect& rrect, const SkColor color) override; 26 void drawFilledRect(const SkRect& rect, const DecorationStyle& decorStyle) override; 27 #ifndef USE_SKIA_TXT 28 void drawPath(const SkPath& path, const DecorationStyle& decorStyle) override; 29 #else drawPath(const RSPath & path,const DecorationStyle & decorStyle)30 void drawPath(const RSPath& path, const DecorationStyle& decorStyle) override {} 31 #endif 32 void drawLine(SkScalar x0, SkScalar y0, SkScalar x1, SkScalar y1, const DecorationStyle& decorStyle) override; 33 34 void clipRect(const SkRect& rect) override; 35 void translate(SkScalar dx, SkScalar dy) override; 36 37 void save() override; 38 void restore() override; 39 40 private: 41 SkCanvas* fCanvas; 42 }; 43 44 class ParagraphPainterAutoRestore { 45 public: ParagraphPainterAutoRestore(ParagraphPainter * painter)46 ParagraphPainterAutoRestore(ParagraphPainter* painter) 47 : fPainter(painter) { 48 fPainter->save(); 49 } 50 ~ParagraphPainterAutoRestore()51 ~ParagraphPainterAutoRestore() { 52 fPainter->restore(); 53 } 54 55 private: 56 ParagraphPainter* fPainter; 57 }; 58 59 } // namespace textlayout 60 } // namespace skia 61 62 #endif // ParagraphPainterImpl_DEFINED 63