LCOV - code coverage report
Current view: top level - gfx/skia/skia/src/gpu/text - GrTextUtils.h (source / functions) Hit Total Coverage
Test: output.info Lines: 0 19 0.0 %
Date: 2017-07-14 16:53:18 Functions: 0 9 0.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /*
       2             :  * Copyright 2015 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 GrTextUtils_DEFINED
       9             : #define GrTextUtils_DEFINED
      10             : 
      11             : #include "GrColor.h"
      12             : #include "SkColorFilter.h"
      13             : #include "SkGr.h"
      14             : #include "SkPaint.h"
      15             : #include "SkScalar.h"
      16             : #include "SkTLazy.h"
      17             : 
      18             : class GrAtlasGlyphCache;
      19             : class GrAtlasTextBlob;
      20             : class GrAtlasTextStrike;
      21             : class GrClip;
      22             : class GrContext;
      23             : class GrPaint;
      24             : class GrRenderTargetContext;
      25             : class GrShaderCaps;
      26             : class SkDrawFilter;
      27             : class SkGlyph;
      28             : class SkMatrix;
      29             : struct SkIRect;
      30             : struct SkPoint;
      31             : class SkGlyphCache;
      32             : class SkTextBlobRunIterator;
      33             : class SkSurfaceProps;
      34             : 
      35             : /**
      36             :  * A class to house a bunch of common text utilities.  This class should *ONLY* have static
      37             :  * functions.  It is not a namespace only because we wish to friend SkPaint
      38             :  */
      39             : class GrTextUtils {
      40             : public:
      41             :     /**
      42             :      *  This is used to wrap a SkPaint and its post-color filter color. It is also used by RunPaint
      43             :      *  (below). This keeps a pointer to the SkPaint it is initialized with and expects it to remain
      44             :      *  const. It is also used to transform to GrPaint.
      45             :      */
      46             :     class Paint {
      47             :     public:
      48           0 :         explicit Paint(const SkPaint* paint) : fPaint(paint) { this->initFilteredColor(); }
      49             : 
      50             :         // These expose the paint's color run through its color filter (if any). This is only valid
      51             :         // when drawing grayscale/lcd glyph masks and not when drawing color glyphs.
      52           0 :         SkColor filteredSkColor() const { return fFilteredSkColor; }
      53           0 :         GrColor filteredPremulGrColor() const { return fFilteredGrColor; }
      54             : 
      55           0 :         const SkPaint& skPaint() const { return *fPaint; }
      56           0 :         operator const SkPaint&() const { return this->skPaint(); }
      57             : 
      58             :         bool toGrPaint(GrMaskFormat, GrRenderTargetContext*, const SkMatrix& viewMatrix,
      59             :                        GrPaint*) const;
      60             : 
      61             :     protected:
      62           0 :         void initFilteredColor() {
      63           0 :             fFilteredSkColor = fPaint->getColor();
      64           0 :             if (fPaint->getColorFilter()) {
      65           0 :                 fFilteredSkColor = fPaint->getColorFilter()->filterColor(fFilteredSkColor);
      66             :             }
      67           0 :             fFilteredGrColor = SkColorToPremulGrColor(fFilteredSkColor);
      68           0 :         }
      69           0 :         Paint() = default;
      70             :         const SkPaint* fPaint;
      71             :         // This is the paint's color run through its color filter, if present. This color should
      72             :         // be used except when rendering bitmap text, in which case the bitmap must be filtered in
      73             :         // the fragment shader.
      74             :         SkColor fFilteredSkColor;
      75             :         SkColor fFilteredGrColor;
      76             :     };
      77             : 
      78             :     /**
      79             :      *  An extension of Paint that incorporated per-run modifications to the paint text settings and
      80             :      *  application of a draw filter. It expects its constructor arguments to remain alive and const
      81             :      *  during its lifetime.
      82             :      */
      83           0 :     class RunPaint : public Paint {
      84             :     public:
      85           0 :         RunPaint(const Paint* paint, SkDrawFilter* filter, const SkSurfaceProps& props)
      86           0 :                 : fOriginalPaint(paint), fFilter(filter), fProps(props) {
      87             :             // Initially we represent the original paint.
      88           0 :             fPaint = &fOriginalPaint->skPaint();
      89           0 :             fFilteredSkColor = fOriginalPaint->filteredSkColor();
      90           0 :             fFilteredGrColor = fOriginalPaint->filteredPremulGrColor();
      91           0 :         }
      92             : 
      93             :         bool modifyForRun(const SkTextBlobRunIterator&);
      94             : 
      95             :     private:
      96             :         SkTLazy<SkPaint> fModifiedPaint;
      97             :         const Paint* fOriginalPaint;
      98             :         SkDrawFilter* fFilter;
      99             :         const SkSurfaceProps& fProps;
     100             :     };
     101             : 
     102             :     // Functions for appending BMP text to GrAtlasTextBlob
     103             :     static void DrawBmpText(GrAtlasTextBlob*, int runIndex, GrAtlasGlyphCache*,
     104             :                             const SkSurfaceProps&, const Paint& paint, uint32_t scalerContextFlags,
     105             :                             const SkMatrix& viewMatrix, const char text[], size_t byteLength,
     106             :                             SkScalar x, SkScalar y);
     107             : 
     108             :     static void DrawBmpPosText(GrAtlasTextBlob*, int runIndex, GrAtlasGlyphCache*,
     109             :                                const SkSurfaceProps&, const Paint& paint,
     110             :                                uint32_t scalerContextFlags, const SkMatrix& viewMatrix,
     111             :                                const char text[], size_t byteLength, const SkScalar pos[],
     112             :                                int scalarsPerPosition, const SkPoint& offset);
     113             : 
     114             :     // functions for appending distance field text
     115             :     static bool CanDrawAsDistanceFields(const SkPaint& skPaint, const SkMatrix& viewMatrix,
     116             :                                         const SkSurfaceProps& props, const GrShaderCaps& caps);
     117             : 
     118             :     static void DrawDFText(GrAtlasTextBlob* blob, int runIndex, GrAtlasGlyphCache*,
     119             :                            const SkSurfaceProps&, const Paint& paint, uint32_t scalerContextFlags,
     120             :                            const SkMatrix& viewMatrix, const char text[], size_t byteLength,
     121             :                            SkScalar x, SkScalar y);
     122             : 
     123             :     static void DrawDFPosText(GrAtlasTextBlob* blob, int runIndex, GrAtlasGlyphCache*,
     124             :                               const SkSurfaceProps&, const Paint& paint,
     125             :                               uint32_t scalerContextFlags, const SkMatrix& viewMatrix,
     126             :                               const char text[], size_t byteLength, const SkScalar pos[],
     127             :                               int scalarsPerPosition, const SkPoint& offset);
     128             : 
     129             :     // Functions for drawing text as paths
     130             :     static void DrawTextAsPath(GrContext*, GrRenderTargetContext*, const GrClip& clip,
     131             :                                const SkPaint& paint, const SkMatrix& viewMatrix, const char text[],
     132             :                                size_t byteLength, SkScalar x, SkScalar y,
     133             :                                const SkIRect& clipBounds);
     134             : 
     135             :     static void DrawPosTextAsPath(GrContext* context, GrRenderTargetContext* rtc,
     136             :                                   const SkSurfaceProps& props, const GrClip& clip,
     137             :                                   const SkPaint& paint, const SkMatrix& viewMatrix,
     138             :                                   const char text[], size_t byteLength, const SkScalar pos[],
     139             :                                   int scalarsPerPosition, const SkPoint& offset,
     140             :                                   const SkIRect& clipBounds);
     141             : 
     142             :     static bool ShouldDisableLCD(const SkPaint& paint);
     143             : 
     144             : 
     145             : private:
     146             :     static uint32_t FilterTextFlags(const SkSurfaceProps& surfaceProps, const SkPaint& paint);
     147             : 
     148             :     static void InitDistanceFieldPaint(GrAtlasTextBlob* blob,
     149             :                                        SkPaint* skPaint,
     150             :                                        SkScalar* textRatio,
     151             :                                        const SkMatrix& viewMatrix);
     152             : 
     153             :     static void BmpAppendGlyph(GrAtlasTextBlob*, int runIndex, GrAtlasGlyphCache*,
     154             :                                GrAtlasTextStrike**, const SkGlyph&, int left, int top,
     155             :                                GrColor color, SkGlyphCache*);
     156             : 
     157             :     static bool DfAppendGlyph(GrAtlasTextBlob*, int runIndex, GrAtlasGlyphCache*,
     158             :                               GrAtlasTextStrike**, const SkGlyph&,
     159             :                               SkScalar sx, SkScalar sy, GrColor color,
     160             :                               SkGlyphCache* cache,
     161             :                               SkScalar textRatio, const SkMatrix& viewMatrix);
     162             : };
     163             : 
     164             : #endif

Generated by: LCOV version 1.13