• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2020 Google LLC.
2 #ifndef Decorations_DEFINED
3 #define Decorations_DEFINED
4 
5 #include "include/core/SkPath.h"
6 #include "modules/skparagraph/include/ParagraphPainter.h"
7 #include "modules/skparagraph/include/TextStyle.h"
8 #include "modules/skparagraph/src/TextLine.h"
9 
10 namespace skia {
11 namespace textlayout {
12 
13 class Decorations {
14     public:
15     void paint(ParagraphPainter* painter, const TextStyle& textStyle, const TextLine::ClipContext& context, SkScalar baseline);
16     SkScalar calculateThickness(const TextStyle& textStyle, const TextLine::ClipContext& context);
setThickness(SkScalar thickness)17     void setThickness(SkScalar thickness)
18     {
19         fThickness = thickness;
20     }
setDecorationContext(DecorationContext context)21     void setDecorationContext(DecorationContext context)
22     {
23         fDecorationContext = context;
24         setThickness(fDecorationContext.thickness);
25     }
26 
27     private:
28 #ifdef OHOS_SUPPORT
29     constexpr static float UNDER_LINE_THICKNESS_RATIO = (1.0f / 18.0f);
30     constexpr static float LINE_THROUGH_OFFSET = (-6.0f / 21.0f);
31     constexpr static float LINE_THROUGH_TOP = LINE_THROUGH_OFFSET - 0.5f * UNDER_LINE_THICKNESS_RATIO;
32 #endif
33 
34 #ifndef USE_SKIA_TXT
35     void calculateThickness(TextStyle textStyle, sk_sp<SkTypeface> typeface);
36 #else
37     void calculateThickness(TextStyle textStyle, std::shared_ptr<RSTypeface> typeface);
38 #endif
39 #ifdef OHOS_SUPPORT
40     void calculatePosition(TextDecoration decoration, SkScalar ascent, const TextDecorationStyle textDecorationStyle,
41         SkScalar textBaselineShift, const SkScalar& fontSize);
42 #else
43     void calculatePosition(TextDecoration decoration, SkScalar ascent, const TextDecorationStyle textDecorationStyle,
44         SkScalar textBaselineShift);
45 #endif
46     void calculatePaint(const TextStyle& textStyle);
47     void calculateWaves(const TextStyle& textStyle, SkRect clip);
48     void calculateAvoidanceWaves(const TextStyle& textStyle, SkRect clip);
49     void calculateGaps(const TextLine::ClipContext& context, const SkRect& rect, SkScalar baseline,
50         SkScalar halo, const TextStyle& textStyle);
51 
52     SkScalar fThickness;
53     SkScalar fPosition;
54     DecorationContext fDecorationContext;
55 
56 #ifndef USE_SKIA_TXT
57     SkFontMetrics fFontMetrics;
58     ParagraphPainter::DecorationStyle fDecorStyle;
59     SkPath fPath;
60 #else
61     RSFontMetrics fFontMetrics;
62     ParagraphPainter::DecorationStyle fDecorStyle;
63     RSPath fPath;
64 #endif
65 };
66 }  // namespace textlayout
67 }  // namespace skia
68 #endif
69