/*
 * Copyright 2017 Google LLC
 *
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file.
 */

#include "gm/gm.h"
#include "include/core/SkCanvas.h"
#include "include/core/SkColorFilter.h"
#include "include/core/SkPaint.h"
#include "include/core/SkRefCnt.h"
#include "tools/DecodeUtils.h"
#include "tools/Resources.h"

DEF_SIMPLE_GM(srgb_colorfilter, canvas, 512, 256*3) {
    auto img = ToolUtils::GetResourceAsImage("images/mandrill_256.png");

    const float array[] = {
        1, 0, 0, 0, 0,
        0, 1, 0, 0, 0,
        0, 0, 1, 0, 0,
        -1, 0, 0, 1, 0,
    };
    auto cf0 = SkColorFilters::Matrix(array);
    auto cf1 = SkColorFilters::LinearToSRGBGamma();
    auto cf2 = SkColorFilters::SRGBToLinearGamma();

    SkSamplingOptions sampling;
    SkPaint p;
    p.setColorFilter(cf0);
    canvas->drawImage(img, 0, 0);
    canvas->drawImage(img, 256, 0, sampling, &p);

    p.setColorFilter(cf1);
    canvas->drawImage(img, 0, 256, sampling, &p);
    p.setColorFilter(cf1->makeComposed(cf0));
    canvas->drawImage(img, 256, 256, sampling, &p);

    p.setColorFilter(cf2);
    canvas->drawImage(img, 0, 512, sampling, &p);
    p.setColorFilter(cf2->makeComposed(cf0));
    canvas->drawImage(img, 256, 512, sampling, &p);
}
