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