Simplify Blend() Use STL algorithms to simplify Blend(). Also enforce the fact that Blend() does not handle non-separable blend modes using NOTREACHED_NORETURN(). Change-Id: I4ef2f519b8506a106cbc15758b5d0e50984bd8ac Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/113713 Commit-Queue: Lei Zhang <thestig@chromium.org> Reviewed-by: Nigi <nigi@chromium.org>
diff --git a/core/fxge/dib/blend.cpp b/core/fxge/dib/blend.cpp index 8384ee7..98839f8 100644 --- a/core/fxge/dib/blend.cpp +++ b/core/fxge/dib/blend.cpp
@@ -9,6 +9,7 @@ #include <algorithm> #include "core/fxge/dib/fx_dib.h" +#include "third_party/base/notreached.h" namespace fxge { @@ -51,28 +52,25 @@ case BlendMode::kOverlay: return Blend(BlendMode::kHardLight, src_color, back_color); case BlendMode::kDarken: - return src_color < back_color ? src_color : back_color; + return std::min(src_color, back_color); case BlendMode::kLighten: - return src_color > back_color ? src_color : back_color; + return std::max(src_color, back_color); case BlendMode::kColorDodge: { if (src_color == 255) { - return src_color; + return 255; } - return std::min(back_color * 255 / (255 - src_color), 255); } case BlendMode::kColorBurn: { if (src_color == 0) { - return src_color; + return 0; } - return 255 - std::min((255 - back_color) * 255 / src_color, 255); } case BlendMode::kHardLight: if (src_color < 128) { return (src_color * back_color * 2) / 255; } - return Blend(BlendMode::kScreen, back_color, 2 * src_color - 255); case BlendMode::kSoftLight: { if (src_color < 128) { @@ -83,12 +81,12 @@ (kColorSqrt[back_color] - back_color) / 255; } case BlendMode::kDifference: - return back_color < src_color ? src_color - back_color - : back_color - src_color; + return std::abs(back_color - src_color); case BlendMode::kExclusion: return back_color + src_color - 2 * back_color * src_color / 255; default: - return src_color; + // This function does not handle non-separable blend modes. + NOTREACHED_NORETURN(); } }