Coverage Report

Created: 2021-08-22 09:07

/src/skia/src/effects/SkColorMatrixFilter.cpp
Line
Count
Source
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
10
72.6k
static SkScalar byte_to_unit_float(U8CPU byte) {
11
72.6k
    if (0xFF == byte) {
12
        // want to get this exact
13
1.70k
        return 1;
14
70.9k
    } else {
15
70.9k
        return byte * 0.00392156862745f;
16
70.9k
    }
17
72.6k
}
18
19
13.0k
sk_sp<SkColorFilter> SkColorMatrixFilter::MakeLightingFilter(SkColor mul, SkColor add) {
20
13.0k
    const SkColor opaqueAlphaMask = SK_ColorBLACK;
21
    // omit the alpha and compare only the RGB values
22
13.0k
    if (0 == (add & ~opaqueAlphaMask)) {
23
954
        return SkColorFilters::Blend(mul | opaqueAlphaMask, SkBlendMode::kModulate);
24
954
    }
25
26
12.1k
    SkColorMatrix matrix;
27
12.1k
    matrix.setScale(byte_to_unit_float(SkColorGetR(mul)),
28
12.1k
                    byte_to_unit_float(SkColorGetG(mul)),
29
12.1k
                    byte_to_unit_float(SkColorGetB(mul)),
30
12.1k
                    1);
31
12.1k
    matrix.postTranslate(byte_to_unit_float(SkColorGetR(add)),
32
12.1k
                         byte_to_unit_float(SkColorGetG(add)),
33
12.1k
                         byte_to_unit_float(SkColorGetB(add)),
34
12.1k
                         0);
35
12.1k
    return SkColorFilters::Matrix(matrix);
36
12.1k
}