Skip to content

Commit

Permalink
Extended Color Cleanup: Move SimpleColor into its own files
Browse files Browse the repository at this point in the history
https://bugs.webkit.org/show_bug.cgi?id=212309

Reviewed by Simon Fraser.

Move SimpleColor into its own files. It's about time.

* Headers.cmake:
* Sources.txt:
* WebCore.xcodeproj/project.pbxproj:
* platform/graphics/Color.cpp:
(WebCore::premultipliedChannel): Deleted.
(WebCore::unpremultipliedChannel): Deleted.
(WebCore::makePremultipliedRGBA): Deleted.
(WebCore::makeUnPremultipliedRGBA): Deleted.
(WebCore::colorFloatToRGBAByte): Deleted.
(WebCore::makeRGBA32FromFloats): Deleted.
(WebCore::makeRGBAFromHSLA): Deleted.
(WebCore::makeRGBAFromCMYKA): Deleted.
(WebCore::SimpleColor::serializationForHTML const): Deleted.
(WebCore::decimalDigit): Deleted.
(WebCore::fractionDigitsForFractionalAlphaValue): Deleted.
(WebCore::SimpleColor::serializationForCSS const): Deleted.
(WebCore::RGBA32::serializationForRenderTreeAsText const): Deleted.
* platform/graphics/Color.h:
(WebCore::SimpleColor::SimpleColor): Deleted.
(WebCore::SimpleColor::value const): Deleted.
(WebCore::SimpleColor::redComponent const): Deleted.
(WebCore::SimpleColor::greenComponent const): Deleted.
(WebCore::SimpleColor::blueComponent const): Deleted.
(WebCore::SimpleColor::alphaComponent const): Deleted.
(WebCore::SimpleColor::alphaComponentAsFloat const): Deleted.
(WebCore::SimpleColor::isOpaque const): Deleted.
(WebCore::SimpleColor::isVisible const): Deleted.
(WebCore::SimpleColor::colorWithAlpha const): Deleted.
(WebCore::SimpleColor::get const): Deleted.
(WebCore::roundAndClampColorChannel): Deleted.
(WebCore::fastMultiplyBy255): Deleted.
(WebCore::fastDivideBy255): Deleted.
(WebCore::makeRGB): Deleted.
(WebCore::makeRGBA): Deleted.
* platform/graphics/SimpleColor.cpp: Copied from platform/graphics/Color.cpp.
(WebCore::SimpleColor::serializationForRenderTreeAsText const):
(): Deleted.
(WebCore::colorFloatToRGBAByte): Deleted.
(WebCore::parseHexColorInternal): Deleted.
(WebCore::Color::parseHexColor): Deleted.
(WebCore::differenceSquared): Deleted.
(WebCore::findNamedColor): Deleted.
(WebCore::Color::Color): Deleted.
(WebCore::Color::operator=): Deleted.
(WebCore::Color::serialized const): Deleted.
(WebCore::Color::cssText const): Deleted.
(WebCore::RGBA32::serializationForRenderTreeAsText const): Deleted.
(WebCore::Color::nameForRenderTreeAsText const): Deleted.
(WebCore::Color::light const): Deleted.
(WebCore::Color::dark const): Deleted.
(WebCore::Color::isDark const): Deleted.
(WebCore::Color::lightness const): Deleted.
(WebCore::blendComponent): Deleted.
(WebCore::Color::blend const): Deleted.
(WebCore::Color::blendWithWhite const): Deleted.
(WebCore::Color::colorWithAlphaMultipliedBy const): Deleted.
(WebCore::Color::colorWithAlphaMultipliedByUsingAlternativeRounding const): Deleted.
(WebCore::Color::colorWithAlpha const): Deleted.
(WebCore::Color::colorWithAlphaUsingAlternativeRounding const): Deleted.
(WebCore::Color::colorSpaceAndComponents const): Deleted.
(WebCore::Color::toSRGBASimpleColorLossy const): Deleted.
(WebCore::Color::toSRGBAComponentsLossy const): Deleted.
(WebCore::extendedColorsEqual): Deleted.
(WebCore::blend): Deleted.
(WebCore::blendWithoutPremultiply): Deleted.
(WebCore::Color::tagAsValid): Deleted.
(WebCore::Color::asExtended const): Deleted.
(WebCore::operator<<): Deleted.
* platform/graphics/SimpleColor.h: Copied from platform/graphics/Color.h.
(WebCore::SimpleColor::alphaComponentAsFloat const):
(WebCore::SimpleColor::colorWithAlpha const):
(WebCore::SimpleColor::get const):
(WebCore::colorFloatToRGBAByte):
(WebCore::Color::Color): Deleted.
(WebCore::Color::isHashTableDeletedValue const): Deleted.
(WebCore::Color::~Color): Deleted.
(WebCore::Color::isValid const): Deleted.
(WebCore::Color::isOpaque const): Deleted.
(WebCore::Color::isVisible const): Deleted.
(WebCore::Color::red const): Deleted.
(WebCore::Color::green const): Deleted.
(WebCore::Color::blue const): Deleted.
(WebCore::Color::alpha const): Deleted.
(WebCore::Color::alphaAsFloat const): Deleted.
(WebCore::Color::opaqueColor const): Deleted.
(WebCore::Color::isSemantic const): Deleted.
(WebCore::Color::isExtended const): Deleted.
(WebCore::Color::setRGB): Deleted.
(WebCore::Color::setIsSemantic): Deleted.
(WebCore::equalIgnoringSemanticColor): Deleted.
(WebCore::Color::hash const): Deleted.
(WebCore::Color::colorWithAlphaMultipliedByUsingAlternativeRounding const): Deleted.
(WebCore::Color::colorWithAlphaUsingAlternativeRounding const): Deleted.
(WebCore::Color::rgb const): Deleted.
(WebCore::Color::isBlackColor): Deleted.
(WebCore::Color::isWhiteColor): Deleted.
(WebCore::Color::encode const): Deleted.
(WebCore::Color::decode): Deleted.


Canonical link: https://commits.webkit.org/225173@main
git-svn-id: https://svn.webkit.org/repository/webkit/trunk@262110 268f45cc-cd09-0410-ab3c-d52691b4dbfc
  • Loading branch information
weinig committed May 24, 2020
1 parent cbb588e commit 76dea72
Show file tree
Hide file tree
Showing 8 changed files with 423 additions and 232 deletions.
108 changes: 108 additions & 0 deletions Source/WebCore/ChangeLog
@@ -1,3 +1,111 @@
2020-05-24 Sam Weinig <weinig@apple.com>

Extended Color Cleanup: Move SimpleColor into its own files
https://bugs.webkit.org/show_bug.cgi?id=212309

Reviewed by Simon Fraser.

Move SimpleColor into its own files. It's about time.

* Headers.cmake:
* Sources.txt:
* WebCore.xcodeproj/project.pbxproj:
* platform/graphics/Color.cpp:
(WebCore::premultipliedChannel): Deleted.
(WebCore::unpremultipliedChannel): Deleted.
(WebCore::makePremultipliedRGBA): Deleted.
(WebCore::makeUnPremultipliedRGBA): Deleted.
(WebCore::colorFloatToRGBAByte): Deleted.
(WebCore::makeRGBA32FromFloats): Deleted.
(WebCore::makeRGBAFromHSLA): Deleted.
(WebCore::makeRGBAFromCMYKA): Deleted.
(WebCore::SimpleColor::serializationForHTML const): Deleted.
(WebCore::decimalDigit): Deleted.
(WebCore::fractionDigitsForFractionalAlphaValue): Deleted.
(WebCore::SimpleColor::serializationForCSS const): Deleted.
(WebCore::RGBA32::serializationForRenderTreeAsText const): Deleted.
* platform/graphics/Color.h:
(WebCore::SimpleColor::SimpleColor): Deleted.
(WebCore::SimpleColor::value const): Deleted.
(WebCore::SimpleColor::redComponent const): Deleted.
(WebCore::SimpleColor::greenComponent const): Deleted.
(WebCore::SimpleColor::blueComponent const): Deleted.
(WebCore::SimpleColor::alphaComponent const): Deleted.
(WebCore::SimpleColor::alphaComponentAsFloat const): Deleted.
(WebCore::SimpleColor::isOpaque const): Deleted.
(WebCore::SimpleColor::isVisible const): Deleted.
(WebCore::SimpleColor::colorWithAlpha const): Deleted.
(WebCore::SimpleColor::get const): Deleted.
(WebCore::roundAndClampColorChannel): Deleted.
(WebCore::fastMultiplyBy255): Deleted.
(WebCore::fastDivideBy255): Deleted.
(WebCore::makeRGB): Deleted.
(WebCore::makeRGBA): Deleted.
* platform/graphics/SimpleColor.cpp: Copied from platform/graphics/Color.cpp.
(WebCore::SimpleColor::serializationForRenderTreeAsText const):
(): Deleted.
(WebCore::colorFloatToRGBAByte): Deleted.
(WebCore::parseHexColorInternal): Deleted.
(WebCore::Color::parseHexColor): Deleted.
(WebCore::differenceSquared): Deleted.
(WebCore::findNamedColor): Deleted.
(WebCore::Color::Color): Deleted.
(WebCore::Color::operator=): Deleted.
(WebCore::Color::serialized const): Deleted.
(WebCore::Color::cssText const): Deleted.
(WebCore::RGBA32::serializationForRenderTreeAsText const): Deleted.
(WebCore::Color::nameForRenderTreeAsText const): Deleted.
(WebCore::Color::light const): Deleted.
(WebCore::Color::dark const): Deleted.
(WebCore::Color::isDark const): Deleted.
(WebCore::Color::lightness const): Deleted.
(WebCore::blendComponent): Deleted.
(WebCore::Color::blend const): Deleted.
(WebCore::Color::blendWithWhite const): Deleted.
(WebCore::Color::colorWithAlphaMultipliedBy const): Deleted.
(WebCore::Color::colorWithAlphaMultipliedByUsingAlternativeRounding const): Deleted.
(WebCore::Color::colorWithAlpha const): Deleted.
(WebCore::Color::colorWithAlphaUsingAlternativeRounding const): Deleted.
(WebCore::Color::colorSpaceAndComponents const): Deleted.
(WebCore::Color::toSRGBASimpleColorLossy const): Deleted.
(WebCore::Color::toSRGBAComponentsLossy const): Deleted.
(WebCore::extendedColorsEqual): Deleted.
(WebCore::blend): Deleted.
(WebCore::blendWithoutPremultiply): Deleted.
(WebCore::Color::tagAsValid): Deleted.
(WebCore::Color::asExtended const): Deleted.
(WebCore::operator<<): Deleted.
* platform/graphics/SimpleColor.h: Copied from platform/graphics/Color.h.
(WebCore::SimpleColor::alphaComponentAsFloat const):
(WebCore::SimpleColor::colorWithAlpha const):
(WebCore::SimpleColor::get const):
(WebCore::colorFloatToRGBAByte):
(WebCore::Color::Color): Deleted.
(WebCore::Color::isHashTableDeletedValue const): Deleted.
(WebCore::Color::~Color): Deleted.
(WebCore::Color::isValid const): Deleted.
(WebCore::Color::isOpaque const): Deleted.
(WebCore::Color::isVisible const): Deleted.
(WebCore::Color::red const): Deleted.
(WebCore::Color::green const): Deleted.
(WebCore::Color::blue const): Deleted.
(WebCore::Color::alpha const): Deleted.
(WebCore::Color::alphaAsFloat const): Deleted.
(WebCore::Color::opaqueColor const): Deleted.
(WebCore::Color::isSemantic const): Deleted.
(WebCore::Color::isExtended const): Deleted.
(WebCore::Color::setRGB): Deleted.
(WebCore::Color::setIsSemantic): Deleted.
(WebCore::equalIgnoringSemanticColor): Deleted.
(WebCore::Color::hash const): Deleted.
(WebCore::Color::colorWithAlphaMultipliedByUsingAlternativeRounding const): Deleted.
(WebCore::Color::colorWithAlphaUsingAlternativeRounding const): Deleted.
(WebCore::Color::rgb const): Deleted.
(WebCore::Color::isBlackColor): Deleted.
(WebCore::Color::isWhiteColor): Deleted.
(WebCore::Color::encode const): Deleted.
(WebCore::Color::decode): Deleted.

2020-05-24 Zalan Bujtas <zalan@apple.com>

[LFC][TFC] Ignore section borders even when border collapse is off.
Expand Down
1 change: 1 addition & 0 deletions Source/WebCore/Headers.cmake
Expand Up @@ -1184,6 +1184,7 @@ set(WebCore_PRIVATE_FRAMEWORK_HEADERS
platform/graphics/RemoteVideoSample.h
platform/graphics/RenderingMode.h
platform/graphics/RoundedRect.h
platform/graphics/SimpleColor.h
platform/graphics/StringTruncator.h
platform/graphics/TabSize.h
platform/graphics/TextRun.h
Expand Down
1 change: 1 addition & 0 deletions Source/WebCore/Sources.txt
Expand Up @@ -1937,6 +1937,7 @@ platform/graphics/Region.cpp
platform/graphics/RemoteVideoSample.cpp
platform/graphics/RoundedRect.cpp
platform/graphics/ShadowBlur.cpp
platform/graphics/SimpleColor.cpp
platform/graphics/StringTruncator.cpp
platform/graphics/SurrogatePairAwareTextIterator.cpp
platform/graphics/TextRun.cpp
Expand Down
6 changes: 6 additions & 0 deletions Source/WebCore/WebCore.xcodeproj/project.pbxproj
Expand Up @@ -2241,6 +2241,7 @@
7C2FA6121EA95A3C00A03108 /* ResourceCryptographicDigest.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C2FA6101EA95A3200A03108 /* ResourceCryptographicDigest.h */; settings = {ATTRIBUTES = (Private, ); }; };
7C30D9841F815AEC00268356 /* JSAbortController.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C30D9801F815AC100268356 /* JSAbortController.h */; };
7C30D9861F815AEC00268356 /* JSAbortSignal.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C30D9811F815AC100268356 /* JSAbortSignal.h */; };
7C31C88E247AD595005BF319 /* SimpleColor.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C31C88C247AD595005BF319 /* SimpleColor.h */; settings = {ATTRIBUTES = (Private, ); }; };
7C330A021DF8FAC600D3395C /* GraphicsContextGLAttributes.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C330A011DF8FAC600D3395C /* GraphicsContextGLAttributes.h */; settings = {ATTRIBUTES = (Private, ); }; };
7C330A081DF9F95100D3395C /* JSPositionOptions.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C330A061DF9F95100D3395C /* JSPositionOptions.h */; };
7C3A91E61C963B8800D1A7E3 /* ClipboardAccessPolicy.h in Headers */ = {isa = PBXBuildFile; fileRef = 7C3A91E51C963B8800D1A7E3 /* ClipboardAccessPolicy.h */; settings = {ATTRIBUTES = (Private, ); }; };
Expand Down Expand Up @@ -9974,6 +9975,8 @@
7C30D9801F815AC100268356 /* JSAbortController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSAbortController.h; sourceTree = "<group>"; };
7C30D9811F815AC100268356 /* JSAbortSignal.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSAbortSignal.h; sourceTree = "<group>"; };
7C30D9821F815AC200268356 /* JSAbortSignal.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSAbortSignal.cpp; sourceTree = "<group>"; };
7C31C88A247AD594005BF319 /* SimpleColor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SimpleColor.cpp; sourceTree = "<group>"; };
7C31C88C247AD595005BF319 /* SimpleColor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SimpleColor.h; sourceTree = "<group>"; };
7C330A011DF8FAC600D3395C /* GraphicsContextGLAttributes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GraphicsContextGLAttributes.h; sourceTree = "<group>"; };
7C330A031DF9E95B00D3395C /* PositionOptions.idl */ = {isa = PBXFileReference; lastKnownFileType = text; path = PositionOptions.idl; sourceTree = "<group>"; };
7C330A051DF9F95100D3395C /* JSPositionOptions.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSPositionOptions.cpp; sourceTree = "<group>"; };
Expand Down Expand Up @@ -25594,6 +25597,8 @@
A73F95FD12C97BFE0031AAF9 /* RoundedRect.h */,
0F3DD44D12F5EA1B000D9190 /* ShadowBlur.cpp */,
0F3DD44E12F5EA1B000D9190 /* ShadowBlur.h */,
7C31C88A247AD594005BF319 /* SimpleColor.cpp */,
7C31C88C247AD595005BF319 /* SimpleColor.h */,
CD641EB21818F5ED00EE4C41 /* SourceBufferPrivate.h */,
CDC8B5AC1804AE5D0016E685 /* SourceBufferPrivateClient.h */,
7C83DE851D04CBD400FEBCF3 /* SpringSolver.h */,
Expand Down Expand Up @@ -33537,6 +33542,7 @@
CD336F6417FA0A4D00DDDCD0 /* VideoTrackPrivateAVF.h in Headers */,
CD336F6817FA0AC600DDDCD0 /* VideoTrackPrivateAVFObjC.h in Headers */,
CD8B5A43180D149A008B8E65 /* VideoTrackPrivateMediaSourceAVFObjC.h in Headers */,
7C31C88E247AD595005BF319 /* SimpleColor.h in Headers */,
070E81D11BF27656001FDA48 /* VideoTrackPrivateMediaStream.h in Headers */,
CEF418CF1179678C009D112C /* ViewportArguments.h in Headers */,
26F9A83918A046AC00AEB88A /* ViewportConfiguration.h in Headers */,
Expand Down
108 changes: 0 additions & 108 deletions Source/WebCore/platform/graphics/Color.cpp
Expand Up @@ -40,71 +40,6 @@ namespace WebCore {
static constexpr SimpleColor lightenedBlack { 0xFF545454 };
static constexpr SimpleColor darkenedWhite { 0xFFABABAB };

static inline unsigned premultipliedChannel(unsigned c, unsigned a, bool ceiling = true)
{
return fastDivideBy255(ceiling ? c * a + 254 : c * a);
}

static inline unsigned unpremultipliedChannel(unsigned c, unsigned a)
{
return (fastMultiplyBy255(c) + a - 1) / a;
}

RGBA32 makePremultipliedRGBA(int r, int g, int b, int a, bool ceiling)
{
return makeRGBA(premultipliedChannel(r, a, ceiling), premultipliedChannel(g, a, ceiling), premultipliedChannel(b, a, ceiling), a);
}

RGBA32 makePremultipliedRGBA(RGBA32 pixelColor)
{
if (pixelColor.isOpaque())
return pixelColor;
return makePremultipliedRGBA(pixelColor.redComponent(), pixelColor.greenComponent(), pixelColor.blueComponent(), pixelColor.alphaComponent());
}

RGBA32 makeUnPremultipliedRGBA(int r, int g, int b, int a)
{
return makeRGBA(unpremultipliedChannel(r, a), unpremultipliedChannel(g, a), unpremultipliedChannel(b, a), a);
}

RGBA32 makeUnPremultipliedRGBA(RGBA32 pixelColor)
{
if (pixelColor.isVisible() && !pixelColor.isOpaque())
return makeUnPremultipliedRGBA(pixelColor.redComponent(), pixelColor.greenComponent(), pixelColor.blueComponent(), pixelColor.alphaComponent());
return pixelColor;
}

static int colorFloatToRGBAByte(float f)
{
// We use lroundf and 255 instead of nextafterf(256, 0) to match CG's rounding
return std::max(0, std::min(static_cast<int>(lroundf(255.0f * f)), 255));
}

RGBA32 makeRGBA32FromFloats(float r, float g, float b, float a)
{
return makeRGBA(colorFloatToRGBAByte(r), colorFloatToRGBAByte(g), colorFloatToRGBAByte(b), colorFloatToRGBAByte(a));
}

RGBA32 makeRGBAFromHSLA(float hue, float saturation, float lightness, float alpha)
{
const float scaleFactor = 255.0;
FloatComponents floatResult = hslToSRGB({ hue, saturation, lightness, alpha });
return makeRGBA(
round(floatResult.components[0] * scaleFactor),
round(floatResult.components[1] * scaleFactor),
round(floatResult.components[2] * scaleFactor),
round(floatResult.components[3] * scaleFactor));
}

RGBA32 makeRGBAFromCMYKA(float c, float m, float y, float k, float a)
{
double colors = 1 - k;
int r = static_cast<int>(nextafter(256, 0) * (colors * (1 - c)));
int g = static_cast<int>(nextafter(256, 0) * (colors * (1 - m)));
int b = static_cast<int>(nextafter(256, 0) * (colors * (1 - y)));
return makeRGBA(r, g, b, static_cast<float>(nextafter(256, 0) * a));
}

// originally moved here from the CSS parser
template <typename CharacterType>
static inline bool parseHexColorInternal(const CharacterType* name, unsigned length, RGBA32& rgb)
Expand Down Expand Up @@ -292,63 +227,20 @@ Color& Color::operator=(Color&& other)
return *this;
}

String SimpleColor::serializationForHTML() const
{
if (isOpaque())
return makeString('#', hex(redComponent(), 2, Lowercase), hex(greenComponent(), 2, Lowercase), hex(blueComponent(), 2, Lowercase));
return serializationForCSS();
}

String Color::serialized() const
{
if (isExtended())
return asExtended().cssText();
return rgb().serializationForHTML();
}

static char decimalDigit(unsigned number)
{
ASSERT(number < 10);
return '0' + number;
}

static std::array<char, 4> fractionDigitsForFractionalAlphaValue(uint8_t alpha)
{
ASSERT(alpha > 0);
ASSERT(alpha < 0xFF);
if (((alpha * 100 + 0x7F) / 0xFF * 0xFF + 50) / 100 != alpha)
return { { decimalDigit(alpha * 10 / 0xFF % 10), decimalDigit(alpha * 100 / 0xFF % 10), decimalDigit((alpha * 1000 + 0x7F) / 0xFF % 10), '\0' } };
if (int thirdDigit = (alpha * 100 + 0x7F) / 0xFF % 10)
return { { decimalDigit(alpha * 10 / 0xFF), decimalDigit(thirdDigit), '\0', '\0' } };
return { { decimalDigit((alpha * 10 + 0x7F) / 0xFF), '\0', '\0', '\0' } };
}

String SimpleColor::serializationForCSS() const
{
switch (alphaComponent()) {
case 0:
return makeString("rgba(", redComponent(), ", ", greenComponent(), ", ", blueComponent(), ", 0)");
case 0xFF:
return makeString("rgb(", redComponent(), ", ", greenComponent(), ", ", blueComponent(), ')');
default:
return makeString("rgba(", redComponent(), ", ", greenComponent(), ", ", blueComponent(), ", 0.", fractionDigitsForFractionalAlphaValue(alphaComponent()).data(), ')');
}
}

String Color::cssText() const
{
if (isExtended())
return asExtended().cssText();
return rgb().serializationForCSS();
}

String RGBA32::serializationForRenderTreeAsText() const
{
if (alphaComponent() < 0xFF)
return makeString('#', hex(redComponent(), 2), hex(greenComponent(), 2), hex(blueComponent(), 2), hex(alphaComponent(), 2));
return makeString('#', hex(redComponent(), 2), hex(greenComponent(), 2), hex(blueComponent(), 2));
}

String Color::nameForRenderTreeAsText() const
{
// FIXME: Handle extended colors.
Expand Down

0 comments on commit 76dea72

Please sign in to comment.