Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(915)

Unified Diff: src/effects/gradients/Sk4fGradientBase.cpp

Issue 1890253002: Observe gTreatSkColorAsSRGB for 4f gradients. (Closed) Base URL: https://chromium.googlesource.com/skia.git@master
Patch Set: Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/effects/gradients/Sk4fGradientBase.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/effects/gradients/Sk4fGradientBase.cpp
diff --git a/src/effects/gradients/Sk4fGradientBase.cpp b/src/effects/gradients/Sk4fGradientBase.cpp
index e09ba77a04da61e333ab39023c0311ed7fce2230..a22136831d6ec1f233bd4bb0177d2df92e2957bb 100644
--- a/src/effects/gradients/Sk4fGradientBase.cpp
+++ b/src/effects/gradients/Sk4fGradientBase.cpp
@@ -11,10 +11,13 @@
namespace {
-SkPMColor pack_color(SkColor c, bool premul) {
- return premul
- ? SkPreMultiplyColor(c)
- : SkPackARGB32NoCheck(SkColorGetA(c), SkColorGetR(c), SkColorGetG(c), SkColorGetB(c));
+Sk4f pack_color(SkColor c, bool premul, const Sk4f& component_scale) {
+ const SkColor4f c4f = SkColor4f::FromColor(c);
+ const Sk4f pm4f = premul
+ ? c4f.premul().to4f()
+ : Sk4f{c4f.fR, c4f.fG, c4f.fB, c4f.fA};
+
+ return pm4f * component_scale;
}
template<SkShader::TileMode>
@@ -117,20 +120,17 @@ private:
} // anonymous namespace
SkGradientShaderBase::GradientShaderBase4fContext::
-Interval::Interval(SkPMColor c0, SkScalar p0,
- SkPMColor c1, SkScalar p1,
- const Sk4f& componentScale)
+Interval::Interval(const Sk4f& c0, SkScalar p0,
+ const Sk4f& c1, SkScalar p1)
: fP0(p0)
, fP1(p1)
- , fZeroRamp(c0 == c1) {
- SkASSERT(p0 != p1);
+ , fZeroRamp((c0 == c1).allTrue()) {
- const Sk4f c4f0 = SkPM4f::FromPMColor(c0).to4f() * componentScale;
- const Sk4f c4f1 = SkPM4f::FromPMColor(c1).to4f() * componentScale;
- const Sk4f dc4f = (c4f1 - c4f0) / (p1 - p0);
+ SkASSERT(p0 != p1);
+ const Sk4f dc = (c1 - c0) / (p1 - p0);
- c4f0.store(&fC0.fVec);
- dc4f.store(&fDc.fVec);
+ c0.store(&fC0.fVec);
+ dc.store(&fDc.fVec);
}
SkGradientShaderBase::
@@ -216,12 +216,11 @@ GradientShaderBase4fContext::buildIntervals(const SkGradientShaderBase& shader,
if (shader.fTileMode == SkShader::kClamp_TileMode) {
// synthetic edge interval: -/+inf .. P0
- const SkPMColor clamp_color = pack_color(shader.fOrigColors[first_index],
- fColorsArePremul);
+ const Sk4f clamp_color = pack_color(shader.fOrigColors[first_index],
+ fColorsArePremul, componentScale);
const SkScalar clamp_pos = reverse ? SK_ScalarMax : SK_ScalarMin;
fIntervals.emplace_back(clamp_color, clamp_pos,
- clamp_color, first_pos,
- componentScale);
+ clamp_color, first_pos);
} else if (shader.fTileMode == SkShader::kMirror_TileMode && reverse) {
// synthetic mirror intervals injected before main intervals: (2 .. 1]
addMirrorIntervals(shader, componentScale, false);
@@ -234,21 +233,19 @@ GradientShaderBase4fContext::buildIntervals(const SkGradientShaderBase& shader,
iter.iterate([this, &componentScale] (SkColor c0, SkColor c1, SkScalar p0, SkScalar p1) {
SkASSERT(fIntervals.empty() || fIntervals.back().fP1 == p0);
- fIntervals.emplace_back(pack_color(c0, fColorsArePremul),
+ fIntervals.emplace_back(pack_color(c0, fColorsArePremul, componentScale),
p0,
- pack_color(c1, fColorsArePremul),
- p1,
- componentScale);
+ pack_color(c1, fColorsArePremul, componentScale),
+ p1);
});
if (shader.fTileMode == SkShader::kClamp_TileMode) {
// synthetic edge interval: Pn .. +/-inf
- const SkPMColor clamp_color =
- pack_color(shader.fOrigColors[last_index], fColorsArePremul);
+ const Sk4f clamp_color = pack_color(shader.fOrigColors[last_index],
+ fColorsArePremul, componentScale);
const SkScalar clamp_pos = reverse ? SK_ScalarMin : SK_ScalarMax;
fIntervals.emplace_back(clamp_color, last_pos,
- clamp_color, clamp_pos,
- componentScale);
+ clamp_color, clamp_pos);
} else if (shader.fTileMode == SkShader::kMirror_TileMode && !reverse) {
// synthetic mirror intervals injected after main intervals: [1 .. 2)
addMirrorIntervals(shader, componentScale, true);
@@ -265,11 +262,10 @@ GradientShaderBase4fContext::addMirrorIntervals(const SkGradientShaderBase& shad
iter.iterate([this, &componentScale] (SkColor c0, SkColor c1, SkScalar p0, SkScalar p1) {
SkASSERT(fIntervals.empty() || fIntervals.back().fP1 == 2 - p0);
- fIntervals.emplace_back(pack_color(c0, fColorsArePremul),
+ fIntervals.emplace_back(pack_color(c0, fColorsArePremul, componentScale),
2 - p0,
- pack_color(c1, fColorsArePremul),
- 2 - p1,
- componentScale);
+ pack_color(c1, fColorsArePremul, componentScale),
+ 2 - p1);
});
}
« no previous file with comments | « src/effects/gradients/Sk4fGradientBase.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698