Home | History | Annotate | Download | only in effects
      1 /*
      2  * Copyright 2007 The Android Open Source Project
      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 SkColorMatrix_DEFINED
      9 #define SkColorMatrix_DEFINED
     10 
     11 #include "SkScalar.h"
     12 
     13 class SK_API SkColorMatrix {
     14 public:
     15     SkScalar    fMat[20];
     16 
     17     void setIdentity();
     18     void setScale(SkScalar rScale, SkScalar gScale, SkScalar bScale,
     19                   SkScalar aScale = SK_Scalar1);
     20     void preScale(SkScalar rScale, SkScalar gScale, SkScalar bScale,
     21                   SkScalar aScale = SK_Scalar1);
     22     void postScale(SkScalar rScale, SkScalar gScale, SkScalar bScale,
     23                    SkScalar aScale = SK_Scalar1);
     24 
     25     enum Axis {
     26         kR_Axis = 0,
     27         kG_Axis = 1,
     28         kB_Axis = 2
     29     };
     30     void setRotate(Axis, SkScalar degrees);
     31     void setSinCos(Axis, SkScalar sine, SkScalar cosine);
     32     void preRotate(Axis, SkScalar degrees);
     33     void postRotate(Axis, SkScalar degrees);
     34 
     35     void setConcat(const SkColorMatrix& a, const SkColorMatrix& b);
     36     void preConcat(const SkColorMatrix& mat) { this->setConcat(*this, mat); }
     37     void postConcat(const SkColorMatrix& mat) { this->setConcat(mat, *this); }
     38 
     39     void setSaturation(SkScalar sat);
     40     void setRGB2YUV();
     41     void setYUV2RGB();
     42 
     43     bool operator==(const SkColorMatrix& other) const {
     44         return 0 == memcmp(fMat, other.fMat, sizeof(fMat));
     45     }
     46 
     47     bool operator!=(const SkColorMatrix& other) const { return !((*this) == other); }
     48 };
     49 
     50 #endif
     51