⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 259817 in webkit


Ignore:
Timestamp:
Apr 9, 2020, 1:00:41 PM (6 years ago)
Author:
Ryan Haddad
Message:

Unreviewed, reverting r259804.

Breaks the watchOS build.

Reverted changeset:

"IPC serialization of enums should serialize
std::underlying_type instead of uint64_t"
https://bugs.webkit.org/show_bug.cgi?id=210228
https://trac.webkit.org/changeset/259804

Location:
trunk/Source
Files:
23 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r259816 r259817  
     12020-04-09  Ryan Haddad  <ryanhaddad@apple.com>
     2
     3        Unreviewed, reverting r259804.
     4
     5        Breaks the watchOS build.
     6
     7        Reverted changeset:
     8
     9        "IPC serialization of enums should serialize
     10        std::underlying_type instead of uint64_t"
     11        https://bugs.webkit.org/show_bug.cgi?id=210228
     12        https://trac.webkit.org/changeset/259804
     13
    1142020-04-09  Youenn Fablet  <youenn@apple.com>
    215
  • trunk/Source/WebCore/html/canvas/CanvasRenderingContext2D.cpp

    r259804 r259817  
    559559        }
    560560
    561         maskImageContext.setTextDrawingMode(fill ? TextDrawingMode::Fill : TextDrawingMode::Stroke);
     561        maskImageContext.setTextDrawingMode(fill ? TextModeFill : TextModeStroke);
    562562
    563563        if (useMaxWidth) {
     
    579579#endif
    580580
    581     c->setTextDrawingMode(fill ? TextDrawingMode::Fill : TextDrawingMode::Stroke);
     581    c->setTextDrawingMode(fill ? TextModeFill : TextModeStroke);
    582582
    583583    GraphicsContextStateSaver stateSaver(*c);
  • trunk/Source/WebCore/platform/graphics/GraphicsContext.cpp

    r259804 r259817  
    286286
    287287    if (m_changeFlags.contains(GraphicsContextState::TextDrawingModeChange))
    288         ts.dumpProperty("text-drawing-mode", m_state.textDrawingMode.toRaw());
     288        ts.dumpProperty("text-drawing-mode", m_state.textDrawingMode);
    289289
    290290    if (m_changeFlags.contains(GraphicsContextState::StrokeColorChange))
  • trunk/Source/WebCore/platform/graphics/GraphicsContext.h

    r259804 r259817  
    9999class TransformationMatrix;
    100100
    101 enum class TextDrawingMode : uint8_t {
    102     Fill = 1 << 0,
    103     Stroke = 1 << 1,
     101enum TextDrawingMode {
     102    TextModeFill = 1 << 0,
     103    TextModeStroke = 1 << 1,
    104104#if ENABLE(LETTERPRESS)
    105     Letterpress = 1 << 2,
    106 #endif
    107 };
    108 using TextDrawingModeFlags = OptionSet<TextDrawingMode>;
     105    TextModeLetterpress = 1 << 2,
     106#endif
     107};
     108typedef unsigned TextDrawingModeFlags;
    109109
    110110enum StrokeStyle {
     
    211211    float shadowBlur { 0 };
    212212
    213     TextDrawingModeFlags textDrawingMode { TextDrawingMode::Fill };
     213    TextDrawingModeFlags textDrawingMode { TextModeFill };
    214214
    215215    Color strokeColor { Color::black };
  • trunk/Source/WebCore/platform/graphics/ca/PlatformCALayer.cpp

    r259804 r259817  
    133133        graphicsContext.setStrokeColor(linearGlyphMaskOutlineColor);
    134134        graphicsContext.setStrokeThickness(4.5);
    135         graphicsContext.setTextDrawingMode(TextDrawingModeFlags { TextDrawingMode::Fill, TextDrawingMode::Stroke });
     135        graphicsContext.setTextDrawingMode(TextModeFill | TextModeStroke);
    136136    }
    137137
  • trunk/Source/WebCore/platform/graphics/cairo/CairoOperations.cpp

    r259804 r259817  
    316316{
    317317    ShadowBlur shadow({ shadowState.blur, shadowState.blur }, shadowState.offset, shadowState.color, shadowState.ignoreTransforms);
    318     if (!textDrawingMode.contains(TextDrawingMode::Fill) || shadow.type() == ShadowBlur::NoShadow)
     318    if (!(textDrawingMode & TextModeFill) || shadow.type() == ShadowBlur::NoShadow)
    319319        return;
    320320
     
    833833    cairo_save(cr);
    834834
    835     if (textDrawingMode.contains(TextDrawingMode::Fill)) {
     835    if (textDrawingMode & TextModeFill) {
    836836        prepareForFilling(cr, fillSource, AdjustPatternForGlobalAlpha);
    837837        drawGlyphsToContext(cr, scaledFont, syntheticBoldOffset, glyphs, fontSmoothingMode);
     
    842842    // the text as even one single stroke would cover the full wdth of the text.
    843843    //  See https://bugs.webkit.org/show_bug.cgi?id=33759.
    844     if (textDrawingMode.contains(TextDrawingMode::Stroke) && strokeThickness < 2 * xOffset) {
     844    if (textDrawingMode & TextModeStroke && strokeThickness < 2 * xOffset) {
    845845        prepareForStroking(cr, strokeSource, PreserveAlpha);
    846846        cairo_set_line_width(cr, strokeThickness);
  • trunk/Source/WebCore/platform/graphics/cg/GraphicsContextCG.cpp

    r259804 r259817  
    17611761
    17621762    CGContextRef context = platformContext();
    1763    
    1764     bool fill = mode.contains(TextDrawingMode::Fill);
    1765     bool stroke = mode.contains(TextDrawingMode::Stroke);
    1766     if (fill && stroke)
     1763    switch (mode) {
     1764    case TextModeFill:
     1765        CGContextSetTextDrawingMode(context, kCGTextFill);
     1766        break;
     1767    case TextModeStroke:
     1768        CGContextSetTextDrawingMode(context, kCGTextStroke);
     1769        break;
     1770    case TextModeFill | TextModeStroke:
    17671771        CGContextSetTextDrawingMode(context, kCGTextFillStroke);
    1768     else if (fill)
    1769         CGContextSetTextDrawingMode(context, kCGTextFill);
    1770     else if (stroke)
    1771         CGContextSetTextDrawingMode(context, kCGTextStroke);
     1772        break;
     1773    default:
     1774        break;
     1775    }
    17721776}
    17731777
  • trunk/Source/WebCore/platform/graphics/cocoa/FontCascadeCocoa.mm

    r259804 r259817  
    9292{
    9393#if ENABLE(LETTERPRESS)
    94     return context.textDrawingMode().contains(TextDrawingMode::Letterpress);
     94    return context.textDrawingMode() & TextModeLetterpress;
    9595#else
    9696    UNUSED_PARAM(context);
     
    279279    };
    280280
    281     bool hasSimpleShadow = context.textDrawingMode() == TextDrawingMode::Fill && shadowColor.isValid() && !shadowBlur && !platformData.isColorBitmapFont() && (!context.shadowsIgnoreTransforms() || contextCTM.isIdentityOrTranslationOrFlipped()) && !context.isInTransparencyLayer();
     281    bool hasSimpleShadow = context.textDrawingMode() == TextModeFill && shadowColor.isValid() && !shadowBlur && !platformData.isColorBitmapFont() && (!context.shadowsIgnoreTransforms() || contextCTM.isIdentityOrTranslationOrFlipped()) && !context.isInTransparencyLayer();
    282282    if (hasSimpleShadow) {
    283283        // Paint simple shadows ourselves instead of relying on CG shadows, to avoid losing subpixel antialiasing.
  • trunk/Source/WebCore/platform/graphics/displaylists/DisplayListItems.h

    r259804 r259817  
    417417
    418418    if (changeFlags.contains(GraphicsContextState::TextDrawingModeChange))
    419         encoder << state.textDrawingMode;
     419        encoder.encodeEnum(state.textDrawingMode);
    420420
    421421    if (changeFlags.contains(GraphicsContextState::StrokeColorChange))
     
    569569
    570570    if (stateChange.m_changeFlags.contains(GraphicsContextState::TextDrawingModeChange)) {
    571         Optional<TextDrawingModeFlags> textDrawingMode;
    572         decoder >> textDrawingMode;
    573         if (!textDrawingMode)
     571        TextDrawingModeFlags textDrawingMode;
     572        if (!decoder.decodeEnum(textDrawingMode))
    574573            return WTF::nullopt;
    575574
    576         stateChange.m_state.textDrawingMode = WTFMove(*textDrawingMode);
     575        stateChange.m_state.textDrawingMode = textDrawingMode;
    577576    }
    578577
  • trunk/Source/WebCore/platform/graphics/texmap/BitmapTexture.cpp

    r259804 r259817  
    4646    GraphicsContext& context = imageBuffer->context();
    4747    context.setImageInterpolationQuality(InterpolationQuality::Default);
    48     context.setTextDrawingMode(TextDrawingMode::Fill);
     48    context.setTextDrawingMode(TextModeFill);
    4949
    5050    IntRect sourceRect(targetRect);
  • trunk/Source/WebCore/platform/graphics/win/Direct2DOperations.cpp

    r259804 r259817  
    776776    graphicsContext.getShadow(shadowOffset, shadowBlur, shadowColor);
    777777
    778     bool hasSimpleShadow = graphicsContext.textDrawingMode() == TextDrawingMode::Fill && shadowColor.isValid() && !shadowBlur && (!graphicsContext.shadowsIgnoreTransforms() || graphicsContext.getCTM().isIdentityOrTranslationOrFlipped());
     778    bool hasSimpleShadow = graphicsContext.textDrawingMode() == TextModeFill && shadowColor.isValid() && !shadowBlur && (!graphicsContext.shadowsIgnoreTransforms() || graphicsContext.getCTM().isIdentityOrTranslationOrFlipped());
    779779    if (hasSimpleShadow) {
    780780        // Paint simple shadows ourselves instead of relying on CG shadows, to avoid losing subpixel antialiasing.
  • trunk/Source/WebCore/platform/graphics/win/FontCGWin.cpp

    r259804 r259817  
    182182    graphicsContext.getShadow(shadowOffset, shadowBlur, shadowColor);
    183183
    184     bool hasSimpleShadow = graphicsContext.textDrawingMode() == TextDrawingMode::Fill && shadowColor.isValid() && !shadowBlur && (!graphicsContext.shadowsIgnoreTransforms() || graphicsContext.getCTM().isIdentityOrTranslationOrFlipped());
     184    bool hasSimpleShadow = graphicsContext.textDrawingMode() == TextModeFill && shadowColor.isValid() && !shadowBlur && (!graphicsContext.shadowsIgnoreTransforms() || graphicsContext.getCTM().isIdentityOrTranslationOrFlipped());
    185185    if (hasSimpleShadow) {
    186186        // Paint simple shadows ourselves instead of relying on CG shadows, to avoid losing subpixel antialiasing.
  • trunk/Source/WebCore/platform/graphics/win/FontCascadeDirect2D.cpp

    r259804 r259817  
    117117    graphicsContext.getShadow(shadowOffset, shadowBlur, shadowColor);
    118118
    119     bool hasSimpleShadow = graphicsContext.textDrawingMode() == TextDrawingMode::Fill && shadowColor.isValid() && !shadowBlur && (!graphicsContext.shadowsIgnoreTransforms() || graphicsContext.getCTM().isIdentityOrTranslationOrFlipped());
     119    bool hasSimpleShadow = graphicsContext.textDrawingMode() == TextModeFill && shadowColor.isValid() && !shadowBlur && (!graphicsContext.shadowsIgnoreTransforms() || graphicsContext.getCTM().isIdentityOrTranslationOrFlipped());
    120120    if (hasSimpleShadow) {
    121121        // Paint simple shadows ourselves instead of relying on CG shadows, to avoid losing subpixel antialiasing.
  • trunk/Source/WebCore/platform/mock/MockRealtimeVideoSource.cpp

    r259804 r259817  
    354354    FloatPoint timeLocation(captureSize.width() * .05, captureSize.height() * .15);
    355355    context.setFillColor(Color::white);
    356     context.setTextDrawingMode(TextDrawingMode::Fill);
     356    context.setTextDrawingMode(TextModeFill);
    357357    String string = makeString(pad('0', 2, hours), ':', pad('0', 2, minutes), ':', pad('0', 2, seconds), '.', pad('0', 3, milliseconds % 1000));
    358358    context.drawText(timeFont, TextRun((StringView(string))), timeLocation);
  • trunk/Source/WebCore/rendering/TextPaintStyle.cpp

    r259804 r259817  
    186186#if ENABLE(LETTERPRESS)
    187187    if (paintStyle.useLetterpressEffect)
    188         newMode.add(TextDrawingMode::Letterpress);
     188        newMode |= TextModeLetterpress;
    189189    else
    190         newMode.remove(TextDrawingMode::Letterpress);
     190        newMode &= ~TextModeLetterpress;
    191191#endif
    192192    if (paintStyle.strokeWidth > 0 && paintStyle.strokeColor.isVisible())
    193         newMode.add(TextDrawingMode::Stroke);
     193        newMode |= TextModeStroke;
    194194    if (mode != newMode) {
    195195        context.setTextDrawingMode(newMode);
     
    202202
    203203    Color fillColor = fillColorType == UseEmphasisMarkColor ? paintStyle.emphasisMarkColor : paintStyle.fillColor;
    204     if (mode.contains(TextDrawingMode::Fill) && (fillColor != context.fillColor()))
     204    if (mode & TextModeFill && (fillColor != context.fillColor()))
    205205        context.setFillColor(fillColor);
    206206
    207     if (mode & TextDrawingMode::Stroke) {
     207    if (mode & TextModeStroke) {
    208208        if (paintStyle.strokeColor != context.strokeColor())
    209209            context.setStrokeColor(paintStyle.strokeColor);
  • trunk/Source/WebCore/rendering/TextPainter.cpp

    r259804 r259817  
    160160        for (auto order : paintOrder) {
    161161            switch (order) {
    162             case PaintType::Fill: {
    163                 auto textDrawingModeWithoutStroke = textDrawingMode;
    164                 textDrawingModeWithoutStroke.remove(TextDrawingMode::Stroke);
    165                 m_context.setTextDrawingMode(textDrawingModeWithoutStroke);
     162            case PaintType::Fill:
     163                m_context.setTextDrawingMode(textDrawingMode & ~TextModeStroke);
    166164                paintTextWithShadows(shadowToUse, shadowColorFilter, *m_font, textRun, boxRect, textOrigin, startOffset, endOffset, nullAtom(), 0, false);
    167165                shadowToUse = nullptr;
    168166                m_context.setTextDrawingMode(textDrawingMode);
    169167                break;
    170             }
    171             case PaintType::Stroke: {
    172                 auto textDrawingModeWithoutFill = textDrawingMode;
    173                 textDrawingModeWithoutFill.remove(TextDrawingMode::Fill);
    174                 m_context.setTextDrawingMode(textDrawingModeWithoutFill);
     168            case PaintType::Stroke:
     169                m_context.setTextDrawingMode(textDrawingMode & ~TextModeFill);
    175170                paintTextWithShadows(shadowToUse, shadowColorFilter, *m_font, textRun, boxRect, textOrigin, startOffset, endOffset, nullAtom(), 0, paintStyle.strokeWidth > 0);
    176171                shadowToUse = nullptr;
    177172                m_context.setTextDrawingMode(textDrawingMode);
    178             }
    179173                break;
    180174            case PaintType::Markers:
  • trunk/Source/WebCore/rendering/svg/RenderSVGResourceGradient.cpp

    r259804 r259817  
    168168#endif
    169169
    170         context->setTextDrawingMode(resourceMode.contains(RenderSVGResourceMode::ApplyToFill) ? TextDrawingMode::Fill : TextDrawingMode::Stroke);
     170        context->setTextDrawingMode(resourceMode.contains(RenderSVGResourceMode::ApplyToFill) ? TextModeFill : TextModeStroke);
    171171    }
    172172
  • trunk/Source/WebCore/rendering/svg/RenderSVGResourcePattern.cpp

    r259804 r259817  
    186186    if (resourceMode.contains(RenderSVGResourceMode::ApplyToText)) {
    187187        if (resourceMode.contains(RenderSVGResourceMode::ApplyToFill)) {
    188             context->setTextDrawingMode(TextDrawingMode::Fill);
     188            context->setTextDrawingMode(TextModeFill);
    189189
    190190#if USE(CG)
     
    192192#endif
    193193        } else if (resourceMode.contains(RenderSVGResourceMode::ApplyToStroke)) {
    194             context->setTextDrawingMode(TextDrawingMode::Stroke);
     194            context->setTextDrawingMode(TextModeStroke);
    195195
    196196#if USE(CG)
  • trunk/Source/WebCore/rendering/svg/RenderSVGResourceSolidColor.cpp

    r259804 r259817  
    5252
    5353        if (resourceMode.contains(RenderSVGResourceMode::ApplyToText))
    54             context->setTextDrawingMode(TextDrawingMode::Fill);
     54            context->setTextDrawingMode(TextModeFill);
    5555    } else if (resourceMode.contains(RenderSVGResourceMode::ApplyToStroke)) {
    5656        // When rendering the mask for a RenderSVGResourceClipper, the stroke code path is never hit.
     
    6262
    6363        if (resourceMode.contains(RenderSVGResourceMode::ApplyToText))
    64             context->setTextDrawingMode(TextDrawingMode::Stroke);
     64            context->setTextDrawingMode(TextModeStroke);
    6565    }
    6666
  • trunk/Source/WebKit/ChangeLog

    r259816 r259817  
     12020-04-09  Ryan Haddad  <ryanhaddad@apple.com>
     2
     3        Unreviewed, reverting r259804.
     4
     5        Breaks the watchOS build.
     6
     7        Reverted changeset:
     8
     9        "IPC serialization of enums should serialize
     10        std::underlying_type instead of uint64_t"
     11        https://bugs.webkit.org/show_bug.cgi?id=210228
     12        https://trac.webkit.org/changeset/259804
     13
    1142020-04-09  Youenn Fablet  <youenn@apple.com>
    215
  • trunk/Source/WebKit/Platform/IPC/Decoder.h

    r259804 r259817  
    105105    Decoder& operator>>(Optional<double>&);
    106106
    107     template<typename E, typename = std::enable_if_t<std::is_enum<E>::value>>
    108     bool decode(E& e)
    109     {
    110         typename std::underlying_type<E>::type value;
     107    template<typename E>
     108    auto decode(E& e) -> std::enable_if_t<std::is_enum<E>::value, bool>
     109    {
     110        uint64_t value;
    111111        if (!decode(value))
    112112            return false;
     
    118118    }
    119119
    120     template<typename E, typename = std::enable_if_t<std::is_enum<E>::value>>
     120    template<typename E, std::enable_if_t<std::is_enum<E>::value>* = nullptr>
    121121    Decoder& operator>>(Optional<E>& optional)
    122122    {
    123         Optional<typename std::underlying_type<E>::type> value;
     123        Optional<uint64_t> value;
    124124        *this >> value;
    125125        if (value && isValidEnum<E>(*value))
     
    130130    template<typename T> bool decodeEnum(T& result)
    131131    {
    132         typename std::underlying_type<T>::type value;
     132        static_assert(sizeof(T) <= 8, "Enum type T must not be larger than 64 bits!");
     133
     134        uint64_t value;
    133135        if (!decode(value))
    134136            return false;
    135 
     137       
    136138        result = static_cast<T>(value);
    137139        return true;
  • trunk/Source/WebKit/Platform/IPC/Encoder.h

    r259804 r259817  
    6262    template<typename T> void encodeEnum(T t)
    6363    {
    64         encode(static_cast<typename std::underlying_type<T>::type>(t));
     64        COMPILE_ASSERT(sizeof(T) <= sizeof(uint64_t), enum_type_must_not_be_larger_than_64_bits);
     65
     66        encode(static_cast<uint64_t>(t));
    6567    }
    6668
     
    7476    Encoder& operator<<(T&& t)
    7577    {
    76         encode(static_cast<typename std::underlying_type<T>::type>(t));
     78        encode(static_cast<uint64_t>(t));
    7779        return *this;
    7880    }
     
    112114    auto encode(E value) -> std::enable_if_t<std::is_enum<E>::value>
    113115    {
    114         ASSERT(isValidEnum<E>(static_cast<typename std::underlying_type<E>::type>(value)));
    115         encode(static_cast<typename std::underlying_type<E>::type>(value));
     116        static_assert(sizeof(E) <= sizeof(uint64_t), "Enum type must not be larger than 64 bits.");
     117
     118        ASSERT(isValidEnum<E>(static_cast<uint64_t>(value)));
     119        encode(static_cast<uint64_t>(value));
    116120    }
    117121
  • trunk/Source/WebKit/Shared/cf/ArgumentCodersCF.cpp

    r259804 r259817  
    492492    ASSERT_UNUSED(result, result);
    493493
    494     encoder << static_cast<uint8_t>(numberType);
     494    encoder.encodeEnum(numberType);
    495495    encoder << IPC::DataReference(buffer);
    496496}
     
    538538bool decode(Decoder& decoder, RetainPtr<CFNumberRef>& result)
    539539{
    540     Optional<uint8_t> numberTypeFromIPC;
    541     decoder >> numberTypeFromIPC;
    542     if (!numberTypeFromIPC || *numberTypeFromIPC > kCFNumberMaxType)
    543         return false;
    544     auto numberType = static_cast<CFNumberType>(*numberTypeFromIPC);
     540    CFNumberType numberType;
     541    if (!decoder.decodeEnum(numberType))
     542        return false;
    545543
    546544    IPC::DataReference dataReference;
     
    574572    ASSERT(numConvertedBytes == length);
    575573
    576     encoder << static_cast<UInt32>(encoding);
     574    encoder.encodeEnum(encoding);
    577575    encoder << IPC::DataReference(buffer);
    578576}
     
    580578bool decode(Decoder& decoder, RetainPtr<CFStringRef>& result)
    581579{
    582     UInt32 encodingFromIPC;
    583     if (!decoder.decode(encodingFromIPC))
    584         return false;
    585     // FIXME: Should we validate that this value is an expected value?
    586     auto encoding = static_cast<CFStringEncoding>(encodingFromIPC);
     580    CFStringEncoding encoding;
     581    if (!decoder.decodeEnum(encoding))
     582        return false;
    587583
    588584    if (!CFStringIsEncodingAvailable(encoding))
Note: See TracChangeset for help on using the changeset viewer.