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 #ifdef ENABLE_TEXT_ENHANCE drawTextBlob(const std::shared_ptr<RSTextBlob> & blob,SkScalar x,SkScalar y,const SkPaintOrID & paint)16 void drawTextBlob( 17 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)18 void drawTextShadow( 19 const std::shared_ptr<RSTextBlob>& blob, SkScalar x, SkScalar y, SkColor color, SkScalar blurSigma) override {} 20 #else 21 void drawTextBlob(const sk_sp<SkTextBlob>& blob, SkScalar x, SkScalar y, const SkPaintOrID& paint) override; 22 void drawTextShadow(const sk_sp<SkTextBlob>& blob, SkScalar x, SkScalar y, SkColor color, SkScalar blurSigma) override; 23 #endif 24 void drawRect(const SkRect& rect, const SkPaintOrID& paint) override; 25 #ifdef ENABLE_TEXT_ENHANCE 26 void drawRRect(const SkRRect& rrect, const SkColor color) override; 27 #endif 28 void drawFilledRect(const SkRect& rect, const DecorationStyle& decorStyle) override; 29 #ifdef ENABLE_TEXT_ENHANCE drawPath(const RSPath & path,const DecorationStyle & decorStyle)30 void drawPath(const RSPath& path, const DecorationStyle& decorStyle) override {} 31 #else 32 void drawPath(const SkPath& path, const DecorationStyle& decorStyle) override; 33 #endif 34 void drawLine(SkScalar x0, SkScalar y0, SkScalar x1, SkScalar y1, const DecorationStyle& decorStyle) override; 35 36 void clipRect(const SkRect& rect) override; 37 void translate(SkScalar dx, SkScalar dy) override; 38 39 void save() override; 40 void restore() override; 41 42 private: 43 SkCanvas* fCanvas; 44 }; 45 46 class ParagraphPainterAutoRestore { 47 public: ParagraphPainterAutoRestore(ParagraphPainter * painter)48 ParagraphPainterAutoRestore(ParagraphPainter* painter) 49 : fPainter(painter) { 50 fPainter->save(); 51 } 52 ~ParagraphPainterAutoRestore()53 ~ParagraphPainterAutoRestore() { 54 fPainter->restore(); 55 } 56 57 private: 58 ParagraphPainter* fPainter; 59 }; 60 61 } // namespace textlayout 62 } // namespace skia 63 64 #endif // ParagraphPainterImpl_DEFINED 65