Home | History | Annotate | Download | only in core
      1 /*
      2  * Copyright 2013 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 SkPaintPriv_DEFINED
      9 #define SkPaintPriv_DEFINED
     10 
     11 #include "SkImageInfo.h"
     12 #include "SkPaint.h"
     13 #include "SkMatrix.h"
     14 
     15 class SkBitmap;
     16 class SkImage;
     17 
     18 class SkPaintPriv {
     19 public:
     20     enum ShaderOverrideOpacity {
     21         kNone_ShaderOverrideOpacity,        //!< there is no overriding shader (bitmap or image)
     22         kOpaque_ShaderOverrideOpacity,      //!< the overriding shader is opaque
     23         kNotOpaque_ShaderOverrideOpacity,   //!< the overriding shader may not be opaque
     24     };
     25 
     26     /**
     27      *  Returns true if drawing with this paint (or nullptr) will ovewrite all affected pixels.
     28      *
     29      *  Note: returns conservative true, meaning it may return false even though the paint might
     30      *        in fact overwrite its pixels.
     31      */
     32     static bool Overwrites(const SkPaint* paint, ShaderOverrideOpacity);
     33 
     34     static bool Overwrites(const SkPaint& paint) {
     35         return Overwrites(&paint, kNone_ShaderOverrideOpacity);
     36     }
     37 
     38     /**
     39      *  Returns true if drawing this bitmap with this paint (or nullptr) will ovewrite all affected
     40      *  pixels.
     41      */
     42     static bool Overwrites(const SkBitmap&, const SkPaint* paint);
     43 
     44     /**
     45      *  Returns true if drawing this image with this paint (or nullptr) will ovewrite all affected
     46      *  pixels.
     47      */
     48     static bool Overwrites(const SkImage*, const SkPaint* paint);
     49 
     50     static void ScaleFontMetrics(SkPaint::FontMetrics*, SkScalar);
     51 
     52     /**
     53      *  Return a matrix that applies the paint's text values: size, scale, skew
     54      */
     55     static void MakeTextMatrix(SkMatrix* matrix, SkScalar size, SkScalar scaleX, SkScalar skewX) {
     56         matrix->setScale(size * scaleX, size);
     57         if (skewX) {
     58             matrix->postSkew(skewX, 0);
     59         }
     60     }
     61 
     62     static void MakeTextMatrix(SkMatrix* matrix, const SkPaint& paint) {
     63         MakeTextMatrix(matrix, paint.getTextSize(), paint.getTextScaleX(), paint.getTextSkewX());
     64     }
     65 
     66     static bool ShouldDither(const SkPaint&, SkColorType);
     67 
     68     // returns 0 if buffer is invalid for specified encoding
     69     static int ValidCountText(const void* text, size_t length, SkPaint::TextEncoding);
     70 };
     71 
     72 #endif
     73