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 SkMatrixUtils_DEFINED
      9 #define SkMatrixUtils_DEFINED
     10 
     11 #include "SkMatrix.h"
     12 
     13 /**
     14  *  Number of subpixel bits used in skia's bilerp.
     15  *  See SkBitmapProcState_procs.h and SkBitmapProcState_filter.h
     16  */
     17 #define kSkSubPixelBitsForBilerp   4
     18 
     19 /**
     20  *  Given a matrix and width/height, return true if the computed dst-rect would
     21  *  align such that there is a 1-to-1 coorspondence between src and dst pixels.
     22  *  This can be called by drawing code to see if drawBitmap can be turned into
     23  *  drawSprite (which is faster).
     24  *
     25  *  The src-rect is defined to be { 0, 0, width, height }
     26  *
     27  *  The "closeness" test is based on the subpixelBits parameter. Pass 0 for
     28  *  round-to-nearest behavior (e.g. nearest neighbor sampling). Pass the number
     29  *  of subpixel-bits to simulate filtering.
     30  */
     31 bool SkTreatAsSprite(const SkMatrix&, int width, int height,
     32                      unsigned subpixelBits);
     33 
     34 /**
     35  *  Calls SkTreatAsSprite() with default subpixelBits value to match Skia's
     36  *  filter-bitmap implementation (i.e. kSkSubPixelBitsForBilerp).
     37  */
     38 static inline bool SkTreatAsSpriteFilter(const SkMatrix& matrix,
     39                                          int width, int height) {
     40     return SkTreatAsSprite(matrix, width, height, kSkSubPixelBitsForBilerp);
     41 }
     42 
     43 #endif
     44