1ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com/* 2ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Copyright 2011 Google Inc. 3ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * 4ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * Use of this source code is governed by a BSD-style license that can be 5ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com * found in the LICENSE file. 6ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com */ 7b67eb2f9b9ec097aa963245a85be13daec09d2ccreed 88a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "SkColorMatrixFilter.h" 90daf5dd7fc682c939325e16cac6f8aa2e1295060reed 100daf5dd7fc682c939325e16cac6f8aa2e1295060reedstatic SkScalar byte_to_scale(U8CPU byte) { 110daf5dd7fc682c939325e16cac6f8aa2e1295060reed if (0xFF == byte) { 120daf5dd7fc682c939325e16cac6f8aa2e1295060reed // want to get this exact 130daf5dd7fc682c939325e16cac6f8aa2e1295060reed return 1; 140daf5dd7fc682c939325e16cac6f8aa2e1295060reed } else { 150daf5dd7fc682c939325e16cac6f8aa2e1295060reed return byte * 0.00392156862745f; 160daf5dd7fc682c939325e16cac6f8aa2e1295060reed } 170daf5dd7fc682c939325e16cac6f8aa2e1295060reed} 180daf5dd7fc682c939325e16cac6f8aa2e1295060reed 190daf5dd7fc682c939325e16cac6f8aa2e1295060reedSkColorFilter* SkColorMatrixFilter::CreateLightingFilter(SkColor mul, SkColor add) { 200698300cc567384d6c528b5b1757ed8abe930dc5Chris Craik if (0 == add) { 210698300cc567384d6c528b5b1757ed8abe930dc5Chris Craik return SkColorFilter::CreateModeFilter(mul | SK_ColorBLACK, 220698300cc567384d6c528b5b1757ed8abe930dc5Chris Craik SkXfermode::Mode::kModulate_Mode); 230698300cc567384d6c528b5b1757ed8abe930dc5Chris Craik } 240daf5dd7fc682c939325e16cac6f8aa2e1295060reed SkColorMatrix matrix; 250daf5dd7fc682c939325e16cac6f8aa2e1295060reed matrix.setScale(byte_to_scale(SkColorGetR(mul)), 260daf5dd7fc682c939325e16cac6f8aa2e1295060reed byte_to_scale(SkColorGetG(mul)), 270daf5dd7fc682c939325e16cac6f8aa2e1295060reed byte_to_scale(SkColorGetB(mul)), 280daf5dd7fc682c939325e16cac6f8aa2e1295060reed 1); 290daf5dd7fc682c939325e16cac6f8aa2e1295060reed matrix.postTranslate(SkIntToScalar(SkColorGetR(add)), 300daf5dd7fc682c939325e16cac6f8aa2e1295060reed SkIntToScalar(SkColorGetG(add)), 310daf5dd7fc682c939325e16cac6f8aa2e1295060reed SkIntToScalar(SkColorGetB(add)), 320daf5dd7fc682c939325e16cac6f8aa2e1295060reed 0); 330daf5dd7fc682c939325e16cac6f8aa2e1295060reed return SkColorMatrixFilter::Create(matrix); 340daf5dd7fc682c939325e16cac6f8aa2e1295060reed} 35