Extended Color Cleanup: Move Color coder definitions to Color to allow for future...
authorweinig@apple.com <weinig@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 22 May 2020 03:52:07 +0000 (03:52 +0000)
committerweinig@apple.com <weinig@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 22 May 2020 03:52:07 +0000 (03:52 +0000)
https://bugs.webkit.org/show_bug.cgi?id=212247

Reviewed by Simon Fraser.

Move IPC encoder/decoder definitions from WebKit down into Color itself to move closer
to making Color::rgb() private.

Source/WebCore:

* platform/graphics/Color.h:
(WebCore::Color::encode const):
(WebCore::Color::decode):

Source/WebKit:

* Shared/WebCoreArgumentCoders.cpp:
(IPC::ArgumentCoder<Color>::encode): Deleted.
(IPC::ArgumentCoder<Color>::decode): Deleted.
* Shared/WebCoreArgumentCoders.h:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@262045 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WebCore/ChangeLog
Source/WebCore/platform/graphics/Color.h
Source/WebKit/ChangeLog
Source/WebKit/Shared/WebCoreArgumentCoders.cpp
Source/WebKit/Shared/WebCoreArgumentCoders.h

index 5aed6cd..a4623c6 100644 (file)
@@ -1,3 +1,17 @@
+2020-05-21  Sam Weinig  <weinig@apple.com>
+
+        Extended Color Cleanup: Move Color coder definitions to Color to allow for future encaspulation improvements
+        https://bugs.webkit.org/show_bug.cgi?id=212247
+
+        Reviewed by Simon Fraser.
+
+        Move IPC encoder/decoder definitions from WebKit down into Color itself to move closer
+        to making Color::rgb() private.
+
+        * platform/graphics/Color.h:
+        (WebCore::Color::encode const):
+        (WebCore::Color::decode):
+
 2020-05-21  Simon Fraser  <simon.fraser@apple.com>
 
         Scrolling thread scrolls on sync-scrolling scrollers don't get to the main thread
index b13a477..ddb7c2e 100644 (file)
@@ -286,6 +286,9 @@ public:
     static bool isBlackColor(const Color&);
     static bool isWhiteColor(const Color&);
 
+    template<class Encoder> void encode(Encoder&) const;
+    template<class Decoder> static Optional<Color> decode(Decoder&);
+
 private:
     void setRGB(int r, int g, int b) { setRGB(makeRGB(r, g, b)); }
     void setRGB(RGBA32);
@@ -439,6 +442,74 @@ inline bool Color::isWhiteColor(const Color& color)
     return color.rgb() == Color::white;
 }
 
+template<class Encoder>
+void Color::encode(Encoder& encoder) const
+{
+    if (isExtended()) {
+        encoder << true;
+        encoder << asExtended().red();
+        encoder << asExtended().green();
+        encoder << asExtended().blue();
+        encoder << asExtended().alpha();
+        encoder << asExtended().colorSpace();
+        return;
+    }
+
+    encoder << false;
+
+    if (!isValid()) {
+        encoder << false;
+        return;
+    }
+
+    // FIXME: This should encode whether the color is semantic.
+
+    uint32_t value = rgb().value();
+
+    encoder << true;
+    encoder << value;
+}
+
+template<class Decoder>
+Optional<Color> Color::decode(Decoder& decoder)
+{
+    bool isExtended;
+    if (!decoder.decode(isExtended))
+        return WTF::nullopt;
+
+    if (isExtended) {
+        float red;
+        float green;
+        float blue;
+        float alpha;
+        ColorSpace colorSpace;
+        if (!decoder.decode(red))
+            return WTF::nullopt;
+        if (!decoder.decode(green))
+            return WTF::nullopt;
+        if (!decoder.decode(blue))
+            return WTF::nullopt;
+        if (!decoder.decode(alpha))
+            return WTF::nullopt;
+        if (!decoder.decode(colorSpace))
+            return WTF::nullopt;
+        return Color(red, green, blue, alpha, colorSpace);
+    }
+
+    bool isValid;
+    if (!decoder.decode(isValid))
+        return WTF::nullopt;
+
+    if (!isValid)
+        return Color();
+
+    uint32_t value;
+    if (!decoder.decode(value))
+        return WTF::nullopt;
+
+    return Color { SimpleColor { value } };
+}
+
 constexpr RGBA32 makeRGB(int r, int g, int b)
 {
     return makeRGBA(r, g, b, 0xFF);
index fce6b01..897b8a4 100644 (file)
@@ -1,3 +1,18 @@
+2020-05-21  Sam Weinig  <weinig@apple.com>
+
+        Extended Color Cleanup: Move Color coder definitions to Color to allow for future encaspulation improvements
+        https://bugs.webkit.org/show_bug.cgi?id=212247
+
+        Reviewed by Simon Fraser.
+
+        Move IPC encoder/decoder definitions from WebKit down into Color itself to move closer
+        to making Color::rgb() private.
+
+        * Shared/WebCoreArgumentCoders.cpp:
+        (IPC::ArgumentCoder<Color>::encode): Deleted.
+        (IPC::ArgumentCoder<Color>::decode): Deleted.
+        * Shared/WebCoreArgumentCoders.h:
+
 2020-05-21  Peng Liu  <peng.liu6@apple.com>
 
         Fix issues of the Picture-in-Picture API under stress tests
index fd2662e..0cf4cec 100644 (file)
@@ -1526,84 +1526,6 @@ bool ArgumentCoder<WindowFeatures>::decode(Decoder& decoder, WindowFeatures& win
     return true;
 }
 
-
-void ArgumentCoder<Color>::encode(Encoder& encoder, const Color& color)
-{
-    if (color.isExtended()) {
-        encoder << true;
-        encoder << color.asExtended().red();
-        encoder << color.asExtended().green();
-        encoder << color.asExtended().blue();
-        encoder << color.asExtended().alpha();
-        encoder << color.asExtended().colorSpace();
-        return;
-    }
-
-    encoder << false;
-
-    if (!color.isValid()) {
-        encoder << false;
-        return;
-    }
-
-    uint32_t value = color.rgb().value();
-
-    encoder << true;
-    encoder << value;
-}
-
-bool ArgumentCoder<Color>::decode(Decoder& decoder, Color& color)
-{
-    bool isExtended;
-    if (!decoder.decode(isExtended))
-        return false;
-
-    if (isExtended) {
-        float red;
-        float green;
-        float blue;
-        float alpha;
-        ColorSpace colorSpace;
-        if (!decoder.decode(red))
-            return false;
-        if (!decoder.decode(green))
-            return false;
-        if (!decoder.decode(blue))
-            return false;
-        if (!decoder.decode(alpha))
-            return false;
-        if (!decoder.decode(colorSpace))
-            return false;
-        color = Color(red, green, blue, alpha, colorSpace);
-        return true;
-    }
-
-    bool isValid;
-    if (!decoder.decode(isValid))
-        return false;
-
-    if (!isValid) {
-        color = Color();
-        return true;
-    }
-
-    uint32_t value;
-    if (!decoder.decode(value))
-        return false;
-
-    color = SimpleColor { value };
-    return true;
-}
-
-Optional<Color> ArgumentCoder<Color>::decode(Decoder& decoder)
-{
-    Color color;
-    if (!decode(decoder, color))
-        return WTF::nullopt;
-
-    return color;
-}
-
 #if ENABLE(DRAG_SUPPORT)
 void ArgumentCoder<DragData>::encode(Encoder& encoder, const DragData& dragData)
 {
index 7fd70b8..a9f86d2 100644 (file)
@@ -443,12 +443,6 @@ template<> struct ArgumentCoder<WebCore::WindowFeatures> {
     static WARN_UNUSED_RETURN bool decode(Decoder&, WebCore::WindowFeatures&);
 };
 
-template<> struct ArgumentCoder<WebCore::Color> {
-    static void encode(Encoder&, const WebCore::Color&);
-    static WARN_UNUSED_RETURN bool decode(Decoder&, WebCore::Color&);
-    static Optional<WebCore::Color> decode(Decoder&);
-};
-
 #if ENABLE(DRAG_SUPPORT)
 template<> struct ArgumentCoder<WebCore::DragData> {
     static void encode(Encoder&, const WebCore::DragData&);