• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright 2020 Google Inc.
3  *
4  * Use of this source code is governed by a BSD-style license that can be
5  * found in the LICENSE file.
6  */
7 
8 #ifndef GrSDFTControl_DEFINED
9 #define GrSDFTControl_DEFINED
10 
11 #include "include/core/SkFont.h"
12 #include "include/core/SkScalar.h"
13 
14 class SkMatrix;
15 class SkSurfaceProps;
16 
17 class GrSDFTControl {
18 public:
19     GrSDFTControl(bool ableToUseSDFT, bool useSDFTForSmallText, SkScalar min, SkScalar max);
20 
21     enum DrawingType : uint8_t {
22         kDirect = 1,
23         kSDFT = 2,
24         kPath = 4
25     };
26 
27     DrawingType drawingType(
28             const SkFont& font, const SkPaint& paint, const SkMatrix& viewMatrix) const;
29 
30     SkFont getSDFFont(const SkFont& font,
31                       const SkMatrix& viewMatrix,
32                       SkScalar* textRatio) const;
33     std::pair<SkScalar, SkScalar> computeSDFMinMaxScale(
34             SkScalar textSize, const SkMatrix& viewMatrix) const;
35 private:
36     static SkScalar MinSDFTRange(bool useSDFTForSmallText, SkScalar min);
37 
38     // Below this size (in device space) distance field text will not be used.
39     const SkScalar fMinDistanceFieldFontSize;
40 
41     // Above this size (in device space) distance field text will not be used and glyphs will
42     // be rendered from outline as individual paths.
43     const SkScalar fMaxDistanceFieldFontSize;
44 
45     const bool fAbleToUseSDFT;
46 };
47 
48 #endif  // GrSDFTControl_DEFINED
49