• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright 2011 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 #include "include/effects/SkColorMatrixFilter.h"
9 
byte_to_unit_float(U8CPU byte)10 static SkScalar byte_to_unit_float(U8CPU byte) {
11     if (0xFF == byte) {
12         // want to get this exact
13         return 1;
14     } else {
15         return byte * 0.00392156862745f;
16     }
17 }
18 
MakeLightingFilter(SkColor mul,SkColor add)19 sk_sp<SkColorFilter> SkColorMatrixFilter::MakeLightingFilter(SkColor mul, SkColor add) {
20     const SkColor opaqueAlphaMask = SK_ColorBLACK;
21     // omit the alpha and compare only the RGB values
22     if (0 == (add & ~opaqueAlphaMask)) {
23         return SkColorFilters::Blend(mul | opaqueAlphaMask, SkBlendMode::kModulate);
24     }
25 
26     SkColorMatrix matrix;
27     matrix.setScale(byte_to_unit_float(SkColorGetR(mul)),
28                     byte_to_unit_float(SkColorGetG(mul)),
29                     byte_to_unit_float(SkColorGetB(mul)),
30                     1);
31     matrix.postTranslate(byte_to_unit_float(SkColorGetR(add)),
32                          byte_to_unit_float(SkColorGetG(add)),
33                          byte_to_unit_float(SkColorGetB(add)),
34                          0);
35     return SkColorFilters::Matrix(matrix);
36 }
37