/* * Copyright 2017 Google Inc. * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #include "Test.h" #include "SkColorSpace.h" #include "SkTableColorFilter.h" #include "SkToSRGBColorFilter.h" // SkToSRGBColorFilter makes it easy to create out of range (>1, <0) color values. // Those can be dangerous as inputs to naive implementation of SkTableColorFilter. // This tests that our implementation is safe. DEF_TEST(TableColorFilter, r) { // Using a wide source gamut will make saturated colors go well out of range of sRGB. auto rec2020 = SkColorSpace::MakeRGB(SkColorSpace::kSRGB_RenderTargetGamma, SkColorSpace::kRec2020_Gamut); sk_sp to_srgb = SkToSRGBColorFilter::Make(rec2020); // Any table will work fine here. An identity table makes testing easy. uint8_t identity[256]; for (int i = 0; i < 256; i++) { identity[i] = i; } sk_sp table = SkTableColorFilter::Make(identity); // The rec2020 primaries are not representable in sRGB, but will clamp to the sRGB primaries. SkColor colors[] = { SK_ColorRED, SK_ColorGREEN, SK_ColorBLUE }; sk_sp composed = table->makeComposed(to_srgb); for (auto color : colors) { REPORTER_ASSERT(r, composed->filterColor(color) == color); } }