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
10static 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
19sk_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