• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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