Changeset 259817 in webkit
- Timestamp:
- Apr 9, 2020, 1:00:41 PM (6 years ago)
- Location:
- trunk/Source
- Files:
-
- 23 edited
-
WebCore/ChangeLog (modified) (1 diff)
-
WebCore/html/canvas/CanvasRenderingContext2D.cpp (modified) (2 diffs)
-
WebCore/platform/graphics/GraphicsContext.cpp (modified) (1 diff)
-
WebCore/platform/graphics/GraphicsContext.h (modified) (2 diffs)
-
WebCore/platform/graphics/ca/PlatformCALayer.cpp (modified) (1 diff)
-
WebCore/platform/graphics/cairo/CairoOperations.cpp (modified) (3 diffs)
-
WebCore/platform/graphics/cg/GraphicsContextCG.cpp (modified) (1 diff)
-
WebCore/platform/graphics/cocoa/FontCascadeCocoa.mm (modified) (2 diffs)
-
WebCore/platform/graphics/displaylists/DisplayListItems.h (modified) (2 diffs)
-
WebCore/platform/graphics/texmap/BitmapTexture.cpp (modified) (1 diff)
-
WebCore/platform/graphics/win/Direct2DOperations.cpp (modified) (1 diff)
-
WebCore/platform/graphics/win/FontCGWin.cpp (modified) (1 diff)
-
WebCore/platform/graphics/win/FontCascadeDirect2D.cpp (modified) (1 diff)
-
WebCore/platform/mock/MockRealtimeVideoSource.cpp (modified) (1 diff)
-
WebCore/rendering/TextPaintStyle.cpp (modified) (2 diffs)
-
WebCore/rendering/TextPainter.cpp (modified) (1 diff)
-
WebCore/rendering/svg/RenderSVGResourceGradient.cpp (modified) (1 diff)
-
WebCore/rendering/svg/RenderSVGResourcePattern.cpp (modified) (2 diffs)
-
WebCore/rendering/svg/RenderSVGResourceSolidColor.cpp (modified) (2 diffs)
-
WebKit/ChangeLog (modified) (1 diff)
-
WebKit/Platform/IPC/Decoder.h (modified) (3 diffs)
-
WebKit/Platform/IPC/Encoder.h (modified) (3 diffs)
-
WebKit/Shared/cf/ArgumentCodersCF.cpp (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r259816 r259817 1 2020-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 1 14 2020-04-09 Youenn Fablet <youenn@apple.com> 2 15 -
trunk/Source/WebCore/html/canvas/CanvasRenderingContext2D.cpp
r259804 r259817 559 559 } 560 560 561 maskImageContext.setTextDrawingMode(fill ? Text DrawingMode::Fill : TextDrawingMode::Stroke);561 maskImageContext.setTextDrawingMode(fill ? TextModeFill : TextModeStroke); 562 562 563 563 if (useMaxWidth) { … … 579 579 #endif 580 580 581 c->setTextDrawingMode(fill ? Text DrawingMode::Fill : TextDrawingMode::Stroke);581 c->setTextDrawingMode(fill ? TextModeFill : TextModeStroke); 582 582 583 583 GraphicsContextStateSaver stateSaver(*c); -
trunk/Source/WebCore/platform/graphics/GraphicsContext.cpp
r259804 r259817 286 286 287 287 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); 289 289 290 290 if (m_changeFlags.contains(GraphicsContextState::StrokeColorChange)) -
trunk/Source/WebCore/platform/graphics/GraphicsContext.h
r259804 r259817 99 99 class TransformationMatrix; 100 100 101 enum class TextDrawingMode : uint8_t{102 Fill = 1 << 0,103 Stroke = 1 << 1,101 enum TextDrawingMode { 102 TextModeFill = 1 << 0, 103 TextModeStroke = 1 << 1, 104 104 #if ENABLE(LETTERPRESS) 105 Letterpress = 1 << 2,106 #endif 107 }; 108 using TextDrawingModeFlags = OptionSet<TextDrawingMode>;105 TextModeLetterpress = 1 << 2, 106 #endif 107 }; 108 typedef unsigned TextDrawingModeFlags; 109 109 110 110 enum StrokeStyle { … … 211 211 float shadowBlur { 0 }; 212 212 213 TextDrawingModeFlags textDrawingMode { Text DrawingMode::Fill };213 TextDrawingModeFlags textDrawingMode { TextModeFill }; 214 214 215 215 Color strokeColor { Color::black }; -
trunk/Source/WebCore/platform/graphics/ca/PlatformCALayer.cpp
r259804 r259817 133 133 graphicsContext.setStrokeColor(linearGlyphMaskOutlineColor); 134 134 graphicsContext.setStrokeThickness(4.5); 135 graphicsContext.setTextDrawingMode(Text DrawingModeFlags { TextDrawingMode::Fill, TextDrawingMode::Stroke });135 graphicsContext.setTextDrawingMode(TextModeFill | TextModeStroke); 136 136 } 137 137 -
trunk/Source/WebCore/platform/graphics/cairo/CairoOperations.cpp
r259804 r259817 316 316 { 317 317 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) 319 319 return; 320 320 … … 833 833 cairo_save(cr); 834 834 835 if (textDrawingMode .contains(TextDrawingMode::Fill)) {835 if (textDrawingMode & TextModeFill) { 836 836 prepareForFilling(cr, fillSource, AdjustPatternForGlobalAlpha); 837 837 drawGlyphsToContext(cr, scaledFont, syntheticBoldOffset, glyphs, fontSmoothingMode); … … 842 842 // the text as even one single stroke would cover the full wdth of the text. 843 843 // 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) { 845 845 prepareForStroking(cr, strokeSource, PreserveAlpha); 846 846 cairo_set_line_width(cr, strokeThickness); -
trunk/Source/WebCore/platform/graphics/cg/GraphicsContextCG.cpp
r259804 r259817 1761 1761 1762 1762 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: 1767 1771 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 } 1772 1776 } 1773 1777 -
trunk/Source/WebCore/platform/graphics/cocoa/FontCascadeCocoa.mm
r259804 r259817 92 92 { 93 93 #if ENABLE(LETTERPRESS) 94 return context.textDrawingMode() .contains(TextDrawingMode::Letterpress);94 return context.textDrawingMode() & TextModeLetterpress; 95 95 #else 96 96 UNUSED_PARAM(context); … … 279 279 }; 280 280 281 bool hasSimpleShadow = context.textDrawingMode() == Text DrawingMode::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(); 282 282 if (hasSimpleShadow) { 283 283 // 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 417 417 418 418 if (changeFlags.contains(GraphicsContextState::TextDrawingModeChange)) 419 encoder << state.textDrawingMode;419 encoder.encodeEnum(state.textDrawingMode); 420 420 421 421 if (changeFlags.contains(GraphicsContextState::StrokeColorChange)) … … 569 569 570 570 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)) 574 573 return WTF::nullopt; 575 574 576 stateChange.m_state.textDrawingMode = WTFMove(*textDrawingMode);575 stateChange.m_state.textDrawingMode = textDrawingMode; 577 576 } 578 577 -
trunk/Source/WebCore/platform/graphics/texmap/BitmapTexture.cpp
r259804 r259817 46 46 GraphicsContext& context = imageBuffer->context(); 47 47 context.setImageInterpolationQuality(InterpolationQuality::Default); 48 context.setTextDrawingMode(Text DrawingMode::Fill);48 context.setTextDrawingMode(TextModeFill); 49 49 50 50 IntRect sourceRect(targetRect); -
trunk/Source/WebCore/platform/graphics/win/Direct2DOperations.cpp
r259804 r259817 776 776 graphicsContext.getShadow(shadowOffset, shadowBlur, shadowColor); 777 777 778 bool hasSimpleShadow = graphicsContext.textDrawingMode() == Text DrawingMode::Fill && shadowColor.isValid() && !shadowBlur && (!graphicsContext.shadowsIgnoreTransforms() || graphicsContext.getCTM().isIdentityOrTranslationOrFlipped());778 bool hasSimpleShadow = graphicsContext.textDrawingMode() == TextModeFill && shadowColor.isValid() && !shadowBlur && (!graphicsContext.shadowsIgnoreTransforms() || graphicsContext.getCTM().isIdentityOrTranslationOrFlipped()); 779 779 if (hasSimpleShadow) { 780 780 // 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 182 182 graphicsContext.getShadow(shadowOffset, shadowBlur, shadowColor); 183 183 184 bool hasSimpleShadow = graphicsContext.textDrawingMode() == Text DrawingMode::Fill && shadowColor.isValid() && !shadowBlur && (!graphicsContext.shadowsIgnoreTransforms() || graphicsContext.getCTM().isIdentityOrTranslationOrFlipped());184 bool hasSimpleShadow = graphicsContext.textDrawingMode() == TextModeFill && shadowColor.isValid() && !shadowBlur && (!graphicsContext.shadowsIgnoreTransforms() || graphicsContext.getCTM().isIdentityOrTranslationOrFlipped()); 185 185 if (hasSimpleShadow) { 186 186 // 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 117 117 graphicsContext.getShadow(shadowOffset, shadowBlur, shadowColor); 118 118 119 bool hasSimpleShadow = graphicsContext.textDrawingMode() == Text DrawingMode::Fill && shadowColor.isValid() && !shadowBlur && (!graphicsContext.shadowsIgnoreTransforms() || graphicsContext.getCTM().isIdentityOrTranslationOrFlipped());119 bool hasSimpleShadow = graphicsContext.textDrawingMode() == TextModeFill && shadowColor.isValid() && !shadowBlur && (!graphicsContext.shadowsIgnoreTransforms() || graphicsContext.getCTM().isIdentityOrTranslationOrFlipped()); 120 120 if (hasSimpleShadow) { 121 121 // Paint simple shadows ourselves instead of relying on CG shadows, to avoid losing subpixel antialiasing. -
trunk/Source/WebCore/platform/mock/MockRealtimeVideoSource.cpp
r259804 r259817 354 354 FloatPoint timeLocation(captureSize.width() * .05, captureSize.height() * .15); 355 355 context.setFillColor(Color::white); 356 context.setTextDrawingMode(Text DrawingMode::Fill);356 context.setTextDrawingMode(TextModeFill); 357 357 String string = makeString(pad('0', 2, hours), ':', pad('0', 2, minutes), ':', pad('0', 2, seconds), '.', pad('0', 3, milliseconds % 1000)); 358 358 context.drawText(timeFont, TextRun((StringView(string))), timeLocation); -
trunk/Source/WebCore/rendering/TextPaintStyle.cpp
r259804 r259817 186 186 #if ENABLE(LETTERPRESS) 187 187 if (paintStyle.useLetterpressEffect) 188 newMode .add(TextDrawingMode::Letterpress);188 newMode |= TextModeLetterpress; 189 189 else 190 newMode .remove(TextDrawingMode::Letterpress);190 newMode &= ~TextModeLetterpress; 191 191 #endif 192 192 if (paintStyle.strokeWidth > 0 && paintStyle.strokeColor.isVisible()) 193 newMode .add(TextDrawingMode::Stroke);193 newMode |= TextModeStroke; 194 194 if (mode != newMode) { 195 195 context.setTextDrawingMode(newMode); … … 202 202 203 203 Color fillColor = fillColorType == UseEmphasisMarkColor ? paintStyle.emphasisMarkColor : paintStyle.fillColor; 204 if (mode .contains(TextDrawingMode::Fill)&& (fillColor != context.fillColor()))204 if (mode & TextModeFill && (fillColor != context.fillColor())) 205 205 context.setFillColor(fillColor); 206 206 207 if (mode & Text DrawingMode::Stroke) {207 if (mode & TextModeStroke) { 208 208 if (paintStyle.strokeColor != context.strokeColor()) 209 209 context.setStrokeColor(paintStyle.strokeColor); -
trunk/Source/WebCore/rendering/TextPainter.cpp
r259804 r259817 160 160 for (auto order : paintOrder) { 161 161 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); 166 164 paintTextWithShadows(shadowToUse, shadowColorFilter, *m_font, textRun, boxRect, textOrigin, startOffset, endOffset, nullAtom(), 0, false); 167 165 shadowToUse = nullptr; 168 166 m_context.setTextDrawingMode(textDrawingMode); 169 167 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); 175 170 paintTextWithShadows(shadowToUse, shadowColorFilter, *m_font, textRun, boxRect, textOrigin, startOffset, endOffset, nullAtom(), 0, paintStyle.strokeWidth > 0); 176 171 shadowToUse = nullptr; 177 172 m_context.setTextDrawingMode(textDrawingMode); 178 }179 173 break; 180 174 case PaintType::Markers: -
trunk/Source/WebCore/rendering/svg/RenderSVGResourceGradient.cpp
r259804 r259817 168 168 #endif 169 169 170 context->setTextDrawingMode(resourceMode.contains(RenderSVGResourceMode::ApplyToFill) ? Text DrawingMode::Fill : TextDrawingMode::Stroke);170 context->setTextDrawingMode(resourceMode.contains(RenderSVGResourceMode::ApplyToFill) ? TextModeFill : TextModeStroke); 171 171 } 172 172 -
trunk/Source/WebCore/rendering/svg/RenderSVGResourcePattern.cpp
r259804 r259817 186 186 if (resourceMode.contains(RenderSVGResourceMode::ApplyToText)) { 187 187 if (resourceMode.contains(RenderSVGResourceMode::ApplyToFill)) { 188 context->setTextDrawingMode(Text DrawingMode::Fill);188 context->setTextDrawingMode(TextModeFill); 189 189 190 190 #if USE(CG) … … 192 192 #endif 193 193 } else if (resourceMode.contains(RenderSVGResourceMode::ApplyToStroke)) { 194 context->setTextDrawingMode(Text DrawingMode::Stroke);194 context->setTextDrawingMode(TextModeStroke); 195 195 196 196 #if USE(CG) -
trunk/Source/WebCore/rendering/svg/RenderSVGResourceSolidColor.cpp
r259804 r259817 52 52 53 53 if (resourceMode.contains(RenderSVGResourceMode::ApplyToText)) 54 context->setTextDrawingMode(Text DrawingMode::Fill);54 context->setTextDrawingMode(TextModeFill); 55 55 } else if (resourceMode.contains(RenderSVGResourceMode::ApplyToStroke)) { 56 56 // When rendering the mask for a RenderSVGResourceClipper, the stroke code path is never hit. … … 62 62 63 63 if (resourceMode.contains(RenderSVGResourceMode::ApplyToText)) 64 context->setTextDrawingMode(Text DrawingMode::Stroke);64 context->setTextDrawingMode(TextModeStroke); 65 65 } 66 66 -
trunk/Source/WebKit/ChangeLog
r259816 r259817 1 2020-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 1 14 2020-04-09 Youenn Fablet <youenn@apple.com> 2 15 -
trunk/Source/WebKit/Platform/IPC/Decoder.h
r259804 r259817 105 105 Decoder& operator>>(Optional<double>&); 106 106 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>::typevalue;107 template<typename E> 108 auto decode(E& e) -> std::enable_if_t<std::is_enum<E>::value, bool> 109 { 110 uint64_t value; 111 111 if (!decode(value)) 112 112 return false; … … 118 118 } 119 119 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> 121 121 Decoder& operator>>(Optional<E>& optional) 122 122 { 123 Optional< typename std::underlying_type<E>::type> value;123 Optional<uint64_t> value; 124 124 *this >> value; 125 125 if (value && isValidEnum<E>(*value)) … … 130 130 template<typename T> bool decodeEnum(T& result) 131 131 { 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; 133 135 if (!decode(value)) 134 136 return false; 135 137 136 138 result = static_cast<T>(value); 137 139 return true; -
trunk/Source/WebKit/Platform/IPC/Encoder.h
r259804 r259817 62 62 template<typename T> void encodeEnum(T t) 63 63 { 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)); 65 67 } 66 68 … … 74 76 Encoder& operator<<(T&& t) 75 77 { 76 encode(static_cast< typename std::underlying_type<T>::type>(t));78 encode(static_cast<uint64_t>(t)); 77 79 return *this; 78 80 } … … 112 114 auto encode(E value) -> std::enable_if_t<std::is_enum<E>::value> 113 115 { 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)); 116 120 } 117 121 -
trunk/Source/WebKit/Shared/cf/ArgumentCodersCF.cpp
r259804 r259817 492 492 ASSERT_UNUSED(result, result); 493 493 494 encoder << static_cast<uint8_t>(numberType);494 encoder.encodeEnum(numberType); 495 495 encoder << IPC::DataReference(buffer); 496 496 } … … 538 538 bool decode(Decoder& decoder, RetainPtr<CFNumberRef>& result) 539 539 { 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; 545 543 546 544 IPC::DataReference dataReference; … … 574 572 ASSERT(numConvertedBytes == length); 575 573 576 encoder << static_cast<UInt32>(encoding);574 encoder.encodeEnum(encoding); 577 575 encoder << IPC::DataReference(buffer); 578 576 } … … 580 578 bool decode(Decoder& decoder, RetainPtr<CFStringRef>& result) 581 579 { 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; 587 583 588 584 if (!CFStringIsEncodingAvailable(encoding))
Note:
See TracChangeset
for help on using the changeset viewer.