Title: [254206] trunk/Source/WebCore
Revision
254206
Author
[email protected]
Date
2020-01-08 11:02:11 -0800 (Wed, 08 Jan 2020)

Log Message

Add encoding/decoding support for data structures in TextFlags.h
https://bugs.webkit.org/show_bug.cgi?id=205903

Reviewed by Tim Horton.

Adds encoders and decoders for the enum classes and structs in TextFlags.h, with the eventual goal of being able
to send font creation parameters when sending font data to the GPU process. No change in behavior.

* platform/text/TextFlags.h:
(WebCore::FontVariantSettings::encode const):
(WebCore::FontVariantSettings::decode):
(WebCore::FontVariantLigaturesValues::encode const):
(WebCore::FontVariantLigaturesValues::decode):
(WebCore::FontVariantNumericValues::encode const):
(WebCore::FontVariantNumericValues::decode):
(WebCore::FontVariantEastAsianValues::encode const):
(WebCore::FontVariantEastAsianValues::decode):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (254205 => 254206)


--- trunk/Source/WebCore/ChangeLog	2020-01-08 18:58:39 UTC (rev 254205)
+++ trunk/Source/WebCore/ChangeLog	2020-01-08 19:02:11 UTC (rev 254206)
@@ -1,5 +1,25 @@
 2020-01-08  Wenson Hsieh  <[email protected]>
 
+        Add encoding/decoding support for data structures in TextFlags.h
+        https://bugs.webkit.org/show_bug.cgi?id=205903
+
+        Reviewed by Tim Horton.
+
+        Adds encoders and decoders for the enum classes and structs in TextFlags.h, with the eventual goal of being able
+        to send font creation parameters when sending font data to the GPU process. No change in behavior.
+
+        * platform/text/TextFlags.h:
+        (WebCore::FontVariantSettings::encode const):
+        (WebCore::FontVariantSettings::decode):
+        (WebCore::FontVariantLigaturesValues::encode const):
+        (WebCore::FontVariantLigaturesValues::decode):
+        (WebCore::FontVariantNumericValues::encode const):
+        (WebCore::FontVariantNumericValues::decode):
+        (WebCore::FontVariantEastAsianValues::encode const):
+        (WebCore::FontVariantEastAsianValues::decode):
+
+2020-01-08  Wenson Hsieh  <[email protected]>
+
         Add support for encoding WebCore::Font over IPC for DisplayList::DrawGlyphs
         https://bugs.webkit.org/show_bug.cgi?id=205830
         <rdar://problem/57347719>

Modified: trunk/Source/WebCore/platform/text/TextFlags.h (254205 => 254206)


--- trunk/Source/WebCore/platform/text/TextFlags.h	2020-01-08 18:58:39 UTC (rev 254205)
+++ trunk/Source/WebCore/platform/text/TextFlags.h	2020-01-08 19:02:11 UTC (rev 254206)
@@ -26,6 +26,7 @@
 #pragma once
 
 #include <wtf/EnumTraits.h>
+#include <wtf/Optional.h>
 
 namespace WebCore {
 
@@ -275,6 +276,9 @@
             | static_cast<unsigned>(eastAsianRuby) << 0;
     }
 
+    template<class Encoder> void encode(Encoder&) const;
+    template<class Decoder> static Optional<FontVariantSettings> decode(Decoder&);
+
     // FIXME: this would be much more compact with bitfields.
     FontVariantLigatures commonLigatures;
     FontVariantLigatures discretionaryLigatures;
@@ -293,6 +297,123 @@
     FontVariantEastAsianRuby eastAsianRuby;
 };
 
+template<class Encoder>
+void FontVariantSettings::encode(Encoder& encoder) const
+{
+    encoder << commonLigatures;
+    encoder << discretionaryLigatures;
+    encoder << historicalLigatures;
+    encoder << contextualAlternates;
+    encoder << position;
+    encoder << caps;
+    encoder << numericFigure;
+    encoder << numericSpacing;
+    encoder << numericFraction;
+    encoder << numericOrdinal;
+    encoder << numericSlashedZero;
+    encoder << alternates;
+    encoder << eastAsianVariant;
+    encoder << eastAsianWidth;
+    encoder << eastAsianRuby;
+}
+
+template<class Decoder>
+Optional<FontVariantSettings> FontVariantSettings::decode(Decoder& decoder)
+{
+    Optional<FontVariantLigatures> commonLigatures;
+    decoder >> commonLigatures;
+    if (!commonLigatures)
+        return WTF::nullopt;
+
+    Optional<FontVariantLigatures> discretionaryLigatures;
+    decoder >> discretionaryLigatures;
+    if (!discretionaryLigatures)
+        return WTF::nullopt;
+
+    Optional<FontVariantLigatures> historicalLigatures;
+    decoder >> historicalLigatures;
+    if (!historicalLigatures)
+        return WTF::nullopt;
+
+    Optional<FontVariantLigatures> contextualAlternates;
+    decoder >> contextualAlternates;
+    if (!contextualAlternates)
+        return WTF::nullopt;
+
+    Optional<FontVariantPosition> position;
+    decoder >> position;
+    if (!position)
+        return WTF::nullopt;
+
+    Optional<FontVariantCaps> caps;
+    decoder >> caps;
+    if (!caps)
+        return WTF::nullopt;
+
+    Optional<FontVariantNumericFigure> numericFigure;
+    decoder >> numericFigure;
+    if (!numericFigure)
+        return WTF::nullopt;
+
+    Optional<FontVariantNumericSpacing> numericSpacing;
+    decoder >> numericSpacing;
+    if (!numericSpacing)
+        return WTF::nullopt;
+
+    Optional<FontVariantNumericFraction> numericFraction;
+    decoder >> numericFraction;
+    if (!numericFraction)
+        return WTF::nullopt;
+
+    Optional<FontVariantNumericOrdinal> numericOrdinal;
+    decoder >> numericOrdinal;
+    if (!numericOrdinal)
+        return WTF::nullopt;
+
+    Optional<FontVariantNumericSlashedZero> numericSlashedZero;
+    decoder >> numericSlashedZero;
+    if (!numericSlashedZero)
+        return WTF::nullopt;
+
+    Optional<FontVariantAlternates> alternates;
+    decoder >> alternates;
+    if (!alternates)
+        return WTF::nullopt;
+
+    Optional<FontVariantEastAsianVariant> eastAsianVariant;
+    decoder >> eastAsianVariant;
+    if (!eastAsianVariant)
+        return WTF::nullopt;
+
+    Optional<FontVariantEastAsianWidth> eastAsianWidth;
+    decoder >> eastAsianWidth;
+    if (!eastAsianWidth)
+        return WTF::nullopt;
+
+    Optional<FontVariantEastAsianRuby> eastAsianRuby;
+    decoder >> eastAsianRuby;
+    if (!eastAsianRuby)
+        return WTF::nullopt;
+
+    return {{
+        *commonLigatures,
+        *discretionaryLigatures,
+        *historicalLigatures,
+        *contextualAlternates,
+        *position,
+        *caps,
+        *numericFigure,
+        *numericSpacing,
+        *numericFraction,
+        *numericOrdinal,
+        *numericSlashedZero,
+        *alternates,
+        *eastAsianVariant,
+        *eastAsianWidth,
+        *eastAsianRuby
+    }};
+}
+
 struct FontVariantLigaturesValues {
     FontVariantLigaturesValues(
         FontVariantLigatures commonLigatures,
@@ -306,6 +427,9 @@
     {
     }
 
+    template<class Encoder> void encode(Encoder&) const;
+    template<class Decoder> static Optional<FontVariantLigaturesValues> decode(Decoder&);
+
     FontVariantLigatures commonLigatures;
     FontVariantLigatures discretionaryLigatures;
     FontVariantLigatures historicalLigatures;
@@ -312,6 +436,41 @@
     FontVariantLigatures contextualAlternates;
 };
 
+template<class Encoder>
+void FontVariantLigaturesValues::encode(Encoder& encoder) const
+{
+    encoder << commonLigatures;
+    encoder << discretionaryLigatures;
+    encoder << historicalLigatures;
+    encoder << contextualAlternates;
+}
+
+template<class Decoder>
+Optional<FontVariantLigaturesValues> FontVariantLigaturesValues::decode(Decoder& decoder)
+{
+    Optional<FontVariantLigatures> commonLigatures;
+    decoder >> commonLigatures;
+    if (!commonLigatures)
+        return WTF::nullopt;
+
+    Optional<FontVariantLigatures> discretionaryLigatures;
+    decoder >> discretionaryLigatures;
+    if (!discretionaryLigatures)
+        return WTF::nullopt;
+
+    Optional<FontVariantLigatures> historicalLigatures;
+    decoder >> historicalLigatures;
+    if (!historicalLigatures)
+        return WTF::nullopt;
+
+    Optional<FontVariantLigatures> contextualAlternates;
+    decoder >> contextualAlternates;
+    if (!contextualAlternates)
+        return WTF::nullopt;
+
+    return {{ *commonLigatures, *discretionaryLigatures, *historicalLigatures, *contextualAlternates }};
+}
+
 struct FontVariantNumericValues {
     FontVariantNumericValues(
         FontVariantNumericFigure figure,
@@ -327,6 +486,9 @@
     {
     }
 
+    template<class Encoder> void encode(Encoder&) const;
+    template<class Decoder> static Optional<FontVariantNumericValues> decode(Decoder&);
+
     FontVariantNumericFigure figure;
     FontVariantNumericSpacing spacing;
     FontVariantNumericFraction fraction;
@@ -334,6 +496,47 @@
     FontVariantNumericSlashedZero slashedZero;
 };
 
+template<class Encoder>
+void FontVariantNumericValues::encode(Encoder& encoder) const
+{
+    encoder << figure;
+    encoder << spacing;
+    encoder << fraction;
+    encoder << ordinal;
+    encoder << slashedZero;
+}
+
+template<class Decoder>
+Optional<FontVariantNumericValues> FontVariantNumericValues::decode(Decoder& decoder)
+{
+    Optional<FontVariantNumericFigure> figure;
+    decoder >> figure;
+    if (!figure)
+        return WTF::nullopt;
+
+    Optional<FontVariantNumericSpacing> spacing;
+    decoder >> spacing;
+    if (!spacing)
+        return WTF::nullopt;
+
+    Optional<FontVariantNumericFraction> fraction;
+    decoder >> fraction;
+    if (!fraction)
+        return WTF::nullopt;
+
+    Optional<FontVariantNumericOrdinal> ordinal;
+    decoder >> ordinal;
+    if (!ordinal)
+        return WTF::nullopt;
+
+    Optional<FontVariantNumericSlashedZero> slashedZero;
+    decoder >> slashedZero;
+    if (!slashedZero)
+        return WTF::nullopt;
+
+    return {{ *figure, *spacing, *fraction, *ordinal, *slashedZero }};
+}
+
 struct FontVariantEastAsianValues {
     FontVariantEastAsianValues(
         FontVariantEastAsianVariant variant,
@@ -345,11 +548,43 @@
     {
     }
 
+    template<class Encoder> void encode(Encoder&) const;
+    template<class Decoder> static Optional<FontVariantEastAsianValues> decode(Decoder&);
+
     FontVariantEastAsianVariant variant;
     FontVariantEastAsianWidth width;
     FontVariantEastAsianRuby ruby;
 };
 
+template<class Encoder>
+void FontVariantEastAsianValues::encode(Encoder& encoder) const
+{
+    encoder << variant;
+    encoder << width;
+    encoder << ruby;
+}
+
+template<class Decoder>
+Optional<FontVariantEastAsianValues> FontVariantEastAsianValues::decode(Decoder& decoder)
+{
+    Optional<FontVariantEastAsianVariant> variant;
+    decoder >> variant;
+    if (!variant)
+        return WTF::nullopt;
+
+    Optional<FontVariantEastAsianWidth> width;
+    decoder >> width;
+    if (!width)
+        return WTF::nullopt;
+
+    Optional<FontVariantEastAsianRuby> ruby;
+    decoder >> ruby;
+    if (!ruby)
+        return WTF::nullopt;
+
+    return {{ *variant, *width, *ruby }};
+}
+
 enum class FontWidthVariant : uint8_t {
     RegularWidth,
     HalfWidth,
@@ -393,6 +628,16 @@
 
 namespace WTF {
 
+template<> struct EnumTraits<WebCore::TextRenderingMode> {
+    using values = EnumValues<
+    WebCore::TextRenderingMode,
+    WebCore::TextRenderingMode::AutoTextRendering,
+    WebCore::TextRenderingMode::OptimizeSpeed,
+    WebCore::TextRenderingMode::OptimizeLegibility,
+    WebCore::TextRenderingMode::GeometricPrecision
+    >;
+};
+
 template<> struct EnumTraits<WebCore::FontSmoothingMode> {
     using values = EnumValues<
     WebCore::FontSmoothingMode,
@@ -404,4 +649,192 @@
     >;
 };
 
+template<> struct EnumTraits<WebCore::FontRenderingMode> {
+    using values = EnumValues<
+    WebCore::FontRenderingMode,
+    WebCore::FontRenderingMode::Normal,
+    WebCore::FontRenderingMode::Alternate
+    >;
+};
+
+template<> struct EnumTraits<WebCore::FontOrientation> {
+    using values = EnumValues<
+    WebCore::FontOrientation,
+    WebCore::FontOrientation::Horizontal,
+    WebCore::FontOrientation::Vertical
+    >;
+};
+
+template<> struct EnumTraits<WebCore::NonCJKGlyphOrientation> {
+    using values = EnumValues<
+    WebCore::NonCJKGlyphOrientation,
+    WebCore::NonCJKGlyphOrientation::Mixed,
+    WebCore::NonCJKGlyphOrientation::Upright
+    >;
+};
+
+template<> struct EnumTraits<WebCore::FontVariantLigatures> {
+    using values = EnumValues<
+    WebCore::FontVariantLigatures,
+    WebCore::FontVariantLigatures::Normal,
+    WebCore::FontVariantLigatures::Yes,
+    WebCore::FontVariantLigatures::No
+    >;
+};
+
+template<> struct EnumTraits<WebCore::FontVariantPosition> {
+    using values = EnumValues<
+    WebCore::FontVariantPosition,
+    WebCore::FontVariantPosition::Normal,
+    WebCore::FontVariantPosition::Subscript,
+    WebCore::FontVariantPosition::Superscript
+    >;
+};
+
+template<> struct EnumTraits<WebCore::FontVariantCaps> {
+    using values = EnumValues<
+    WebCore::FontVariantCaps,
+    WebCore::FontVariantCaps::Normal,
+    WebCore::FontVariantCaps::Small,
+    WebCore::FontVariantCaps::AllSmall,
+    WebCore::FontVariantCaps::Petite,
+    WebCore::FontVariantCaps::AllPetite,
+    WebCore::FontVariantCaps::Unicase,
+    WebCore::FontVariantCaps::Titling
+    >;
+};
+
+template<> struct EnumTraits<WebCore::FontVariantNumericFigure> {
+    using values = EnumValues<
+    WebCore::FontVariantNumericFigure,
+    WebCore::FontVariantNumericFigure::Normal,
+    WebCore::FontVariantNumericFigure::LiningNumbers,
+    WebCore::FontVariantNumericFigure::OldStyleNumbers
+    >;
+};
+
+template<> struct EnumTraits<WebCore::FontVariantNumericSpacing> {
+    using values = EnumValues<
+    WebCore::FontVariantNumericSpacing,
+    WebCore::FontVariantNumericSpacing::Normal,
+    WebCore::FontVariantNumericSpacing::ProportionalNumbers,
+    WebCore::FontVariantNumericSpacing::TabularNumbers
+    >;
+};
+
+template<> struct EnumTraits<WebCore::FontVariantNumericFraction> {
+    using values = EnumValues<
+    WebCore::FontVariantNumericFraction,
+    WebCore::FontVariantNumericFraction::Normal,
+    WebCore::FontVariantNumericFraction::DiagonalFractions,
+    WebCore::FontVariantNumericFraction::StackedFractions
+    >;
+};
+
+template<> struct EnumTraits<WebCore::FontVariantNumericOrdinal> {
+    using values = EnumValues<
+    WebCore::FontVariantNumericOrdinal,
+    WebCore::FontVariantNumericOrdinal::Normal,
+    WebCore::FontVariantNumericOrdinal::Yes
+    >;
+};
+
+template<> struct EnumTraits<WebCore::FontVariantNumericSlashedZero> {
+    using values = EnumValues<
+    WebCore::FontVariantNumericSlashedZero,
+    WebCore::FontVariantNumericSlashedZero::Normal,
+    WebCore::FontVariantNumericSlashedZero::Yes
+    >;
+};
+
+template<> struct EnumTraits<WebCore::FontVariantAlternates> {
+    using values = EnumValues<
+    WebCore::FontVariantAlternates,
+    WebCore::FontVariantAlternates::Normal,
+    WebCore::FontVariantAlternates::HistoricalForms
+    >;
+};
+
+template<> struct EnumTraits<WebCore::FontVariantEastAsianVariant> {
+    using values = EnumValues<
+    WebCore::FontVariantEastAsianVariant,
+    WebCore::FontVariantEastAsianVariant::Normal,
+    WebCore::FontVariantEastAsianVariant::Jis78,
+    WebCore::FontVariantEastAsianVariant::Jis83,
+    WebCore::FontVariantEastAsianVariant::Jis90,
+    WebCore::FontVariantEastAsianVariant::Jis04,
+    WebCore::FontVariantEastAsianVariant::Simplified,
+    WebCore::FontVariantEastAsianVariant::Traditional,
+    WebCore::FontVariantEastAsianVariant::Normal
+    >;
+};
+
+template<> struct EnumTraits<WebCore::FontVariantEastAsianWidth> {
+    using values = EnumValues<
+    WebCore::FontVariantEastAsianWidth,
+    WebCore::FontVariantEastAsianWidth::Normal,
+    WebCore::FontVariantEastAsianWidth::Full,
+    WebCore::FontVariantEastAsianWidth::Proportional
+    >;
+};
+
+template<> struct EnumTraits<WebCore::FontVariantEastAsianRuby> {
+    using values = EnumValues<
+    WebCore::FontVariantEastAsianRuby,
+    WebCore::FontVariantEastAsianRuby::Normal,
+    WebCore::FontVariantEastAsianRuby::Yes
+    >;
+};
+
+template<> struct EnumTraits<WebCore::FontWidthVariant> {
+    using values = EnumValues<
+    WebCore::FontWidthVariant,
+    WebCore::FontWidthVariant::RegularWidth,
+    WebCore::FontWidthVariant::HalfWidth,
+    WebCore::FontWidthVariant::ThirdWidth,
+    WebCore::FontWidthVariant::QuarterWidth
+    >;
+};
+
+template<> struct EnumTraits<WebCore::FontSmallCaps> {
+    using values = EnumValues<
+    WebCore::FontSmallCaps,
+    WebCore::FontSmallCaps::Off,
+    WebCore::FontSmallCaps::On
+    >;
+};
+
+template<> struct EnumTraits<WebCore::Kerning> {
+    using values = EnumValues<
+    WebCore::Kerning,
+    WebCore::Kerning::Auto,
+    WebCore::Kerning::Normal,
+    WebCore::Kerning::NoShift
+    >;
+};
+
+template<> struct EnumTraits<WebCore::FontOpticalSizing> {
+    using values = EnumValues<
+    WebCore::FontOpticalSizing,
+    WebCore::FontOpticalSizing::Enabled,
+    WebCore::FontOpticalSizing::Disabled
+    >;
+};
+
+template<> struct EnumTraits<WebCore::FontStyleAxis> {
+    using values = EnumValues<
+    WebCore::FontStyleAxis,
+    WebCore::FontStyleAxis::slnt,
+    WebCore::FontStyleAxis::ital
+    >;
+};
+
+template<> struct EnumTraits<WebCore::AllowUserInstalledFonts> {
+    using values = EnumValues<
+    WebCore::AllowUserInstalledFonts,
+    WebCore::AllowUserInstalledFonts::No,
+    WebCore::AllowUserInstalledFonts::Yes
+    >;
+};
+
 } // namespace WTF
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to