Chromium Code Reviews| Index: third_party/WebKit/Source/core/html/canvas/CanvasRenderingContext.cpp |
| diff --git a/third_party/WebKit/Source/core/html/canvas/CanvasRenderingContext.cpp b/third_party/WebKit/Source/core/html/canvas/CanvasRenderingContext.cpp |
| index c017207a99e186d605034c190dfbaa6a5fb580ac..b925a83397d9f6f0acd3bec0dafc9b385429b12d 100644 |
| --- a/third_party/WebKit/Source/core/html/canvas/CanvasRenderingContext.cpp |
| +++ b/third_party/WebKit/Source/core/html/canvas/CanvasRenderingContext.cpp |
| @@ -29,12 +29,62 @@ |
| #include "platform/RuntimeEnabledFeatures.h" |
| #include "platform/weborigin/SecurityOrigin.h" |
| +const char * const kLinearRGBCanvasColorSpaceName = "linear-rgb"; |
| +const char * const kSRGBCanvasColorSpaceName = "srgb"; |
| +const char * const kLegacyCanvasColorSpaceName = "legacy-srgb"; |
| + |
| namespace blink { |
| -CanvasRenderingContext::CanvasRenderingContext(HTMLCanvasElement* canvas, OffscreenCanvas* offscreenCanvas) |
| +CanvasRenderingContext::CanvasRenderingContext(HTMLCanvasElement* canvas, OffscreenCanvas* offscreenCanvas, const String& colorSpace) |
| : m_canvas(canvas) |
| , m_offscreenCanvas(offscreenCanvas) |
| + , m_colorSpace(kLegacyCanvasColorSpace) |
| +{ |
| + if (RuntimeEnabledFeatures::experimentalCanvasFeaturesEnabled()) { |
| + if (colorSpace == kSRGBCanvasColorSpaceName) |
| + m_colorSpace = kSRGBCanvasColorSpace; |
| + else if (colorSpace == kLinearRGBCanvasColorSpaceName) |
| + m_colorSpace = kLinearRGBCanvasColorSpace; |
| + } |
| +} |
| + |
| +WTF::String CanvasRenderingContext::colorSpaceAsString() const |
| +{ |
| + switch (m_colorSpace) { |
| + case kSRGBCanvasColorSpace: |
| + return kSRGBCanvasColorSpaceName; |
| + case kLinearRGBCanvasColorSpace: |
| + return kLinearRGBCanvasColorSpaceName; |
| + case kLegacyCanvasColorSpace: |
| + return kLegacyCanvasColorSpaceName; |
| + }; |
| + CHECK(0); |
|
Stephen White
2016/08/11 20:41:27
Nit: CHECK(false) seems to be more common than CHE
Justin Novosad
2016/08/12 17:40:18
Done.
|
| + return ""; |
| +} |
| + |
| +sk_sp<SkColorSpace> CanvasRenderingContext::skColorSpace() const |
| { |
| + switch (m_colorSpace) { |
| + case kSRGBCanvasColorSpace: |
| + return SkColorSpace::NewNamed(SkColorSpace::kSRGB_Named); |
| + case kLinearRGBCanvasColorSpace: |
| + { |
| + // Creating a temp srgb colorspace just to get the matrix. |
| + // There should be a better way |
| + sk_sp<SkColorSpace> tmp = SkColorSpace::NewNamed(SkColorSpace::kSRGB_Named); |
| + return SkColorSpace::NewRGB(SkColorSpace::kLinear_GammaNamed, tmp->xyz()); |
| + } |
| + case kLegacyCanvasColorSpace: |
| + if (RuntimeEnabledFeatures::colorCorrectRenderingEnabled()) { |
| + // Legacy colorspace ensures color matching with CSS is preserved. |
| + // So if CSS is color corrected from sRGB to display space, then |
| + // canvas must do the same |
| + return SkColorSpace::NewNamed(SkColorSpace::kSRGB_Named); |
| + } |
| + return nullptr; |
| + }; |
| + CHECK(0); |
|
Stephen White
2016/08/11 20:41:27
Ibid.
Justin Novosad
2016/08/12 17:40:18
Done.
|
| + return nullptr; |
| } |
| void CanvasRenderingContext::dispose() |