Changeset 259845 in webkit
- Timestamp:
- Apr 9, 2020, 9:53:55 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
r259843 r259845 1 2020-04-09 Alex Christensen <achristensen@webkit.org> 2 3 IPC serialization of enums should serialize std::underlying_type instead of uint64_t 4 https://bugs.webkit.org/show_bug.cgi?id=210228 5 6 Reviewed by Chris Dumez and Darin Adler. 7 8 No change in behavior, other than less memory and time spent in IPC code. 9 10 * html/canvas/CanvasRenderingContext2D.cpp: 11 (WebCore::CanvasRenderingContext2D::drawTextInternal): 12 * platform/graphics/GraphicsContext.cpp: 13 (WebCore::GraphicsContextStateChange::dump const): 14 * platform/graphics/GraphicsContext.h: 15 * platform/graphics/ca/PlatformCALayer.cpp: 16 (WebCore::PlatformCALayer::drawRepaintIndicator): 17 * platform/graphics/cg/GraphicsContextCG.cpp: 18 (WebCore::GraphicsContext::setPlatformTextDrawingMode): 19 * platform/graphics/cocoa/FontCascadeCocoa.mm: 20 (WebCore::shouldUseLetterpressEffect): 21 (WebCore::FontCascade::drawGlyphs): 22 * platform/mock/MockRealtimeVideoSource.cpp: 23 (WebCore::MockRealtimeVideoSource::drawText): 24 * rendering/TextPaintStyle.cpp: 25 (WebCore::updateGraphicsContext): 26 * rendering/TextPainter.cpp: 27 (WebCore::TextPainter::paintTextAndEmphasisMarksIfNeeded): 28 * rendering/svg/RenderSVGResourceGradient.cpp: 29 (WebCore::RenderSVGResourceGradient::applyResource): 30 * rendering/svg/RenderSVGResourcePattern.cpp: 31 (WebCore::RenderSVGResourcePattern::applyResource): 32 * rendering/svg/RenderSVGResourceSolidColor.cpp: 33 (WebCore::RenderSVGResourceSolidColor::applyResource): 34 1 35 2020-04-08 Darin Adler <darin@apple.com> 2 36 -
trunk/Source/WebCore/html/canvas/CanvasRenderingContext2D.cpp
r259817 r259845 559 559 } 560 560 561 maskImageContext.setTextDrawingMode(fill ? Text ModeFill : TextModeStroke);561 maskImageContext.setTextDrawingMode(fill ? TextDrawingMode::Fill : TextDrawingMode::Stroke); 562 562 563 563 if (useMaxWidth) { … … 579 579 #endif 580 580 581 c->setTextDrawingMode(fill ? Text ModeFill : TextModeStroke);581 c->setTextDrawingMode(fill ? TextDrawingMode::Fill : TextDrawingMode::Stroke); 582 582 583 583 GraphicsContextStateSaver stateSaver(*c); -
trunk/Source/WebCore/platform/graphics/GraphicsContext.cpp
r259817 r259845 286 286 287 287 if (m_changeFlags.contains(GraphicsContextState::TextDrawingModeChange)) 288 ts.dumpProperty("text-drawing-mode", m_state.textDrawingMode );288 ts.dumpProperty("text-drawing-mode", m_state.textDrawingMode.toRaw()); 289 289 290 290 if (m_changeFlags.contains(GraphicsContextState::StrokeColorChange)) -
trunk/Source/WebCore/platform/graphics/GraphicsContext.h
r259817 r259845 99 99 class TransformationMatrix; 100 100 101 enum TextDrawingMode{102 TextModeFill = 1 << 0,103 TextModeStroke = 1 << 1,101 enum class TextDrawingMode : uint8_t { 102 Fill = 1 << 0, 103 Stroke = 1 << 1, 104 104 #if ENABLE(LETTERPRESS) 105 TextModeLetterpress = 1 << 2,106 #endif 107 }; 108 typedef unsigned TextDrawingModeFlags;105 Letterpress = 1 << 2, 106 #endif 107 }; 108 using TextDrawingModeFlags = OptionSet<TextDrawingMode>; 109 109 110 110 enum StrokeStyle { … … 211 211 float shadowBlur { 0 }; 212 212 213 TextDrawingModeFlags textDrawingMode { Text ModeFill };213 TextDrawingModeFlags textDrawingMode { TextDrawingMode::Fill }; 214 214 215 215 Color strokeColor { Color::black }; -
trunk/Source/WebCore/platform/graphics/ca/PlatformCALayer.cpp
r259817 r259845 133 133 graphicsContext.setStrokeColor(linearGlyphMaskOutlineColor); 134 134 graphicsContext.setStrokeThickness(4.5); 135 graphicsContext.setTextDrawingMode(Text ModeFill | TextModeStroke);135 graphicsContext.setTextDrawingMode(TextDrawingModeFlags { TextDrawingMode::Fill, TextDrawingMode::Stroke }); 136 136 } 137 137 -
trunk/Source/WebCore/platform/graphics/cairo/CairoOperations.cpp
r259817 r259845 316 316 { 317 317 ShadowBlur shadow({ shadowState.blur, shadowState.blur }, shadowState.offset, shadowState.color, shadowState.ignoreTransforms); 318 if (! (textDrawingMode & TextModeFill) || shadow.type() == ShadowBlur::NoShadow)318 if (!textDrawingMode.contains(TextDrawingMode::Fill) || shadow.type() == ShadowBlur::NoShadow) 319 319 return; 320 320 … … 833 833 cairo_save(cr); 834 834 835 if (textDrawingMode & TextModeFill) {835 if (textDrawingMode.contains(TextDrawingMode::Fill)) { 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 & TextModeStroke&& strokeThickness < 2 * xOffset) {844 if (textDrawingMode.contains(TextDrawingMode::Stroke) && 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
r259817 r259845 1761 1761 1762 1762 CGContextRef context = platformContext(); 1763 switch (mode) { 1764 case TextModeFill: 1763 1764 bool fill = mode.contains(TextDrawingMode::Fill); 1765 bool stroke = mode.contains(TextDrawingMode::Stroke); 1766 if (fill && stroke) 1767 CGContextSetTextDrawingMode(context, kCGTextFillStroke); 1768 else if (fill) 1765 1769 CGContextSetTextDrawingMode(context, kCGTextFill); 1766 break; 1767 case TextModeStroke: 1770 else if (stroke) 1768 1771 CGContextSetTextDrawingMode(context, kCGTextStroke); 1769 break;1770 case TextModeFill | TextModeStroke:1771 CGContextSetTextDrawingMode(context, kCGTextFillStroke);1772 break;1773 default:1774 break;1775 }1776 1772 } 1777 1773 -
trunk/Source/WebCore/platform/graphics/cocoa/FontCascadeCocoa.mm
r259817 r259845 92 92 { 93 93 #if ENABLE(LETTERPRESS) 94 return context.textDrawingMode() & TextModeLetterpress;94 return context.textDrawingMode().contains(TextDrawingMode::Letterpress); 95 95 #else 96 96 UNUSED_PARAM(context); … … 279 279 }; 280 280 281 bool hasSimpleShadow = context.textDrawingMode() == Text ModeFill && shadowColor.isValid() && !shadowBlur && !platformData.isColorBitmapFont() && (!context.shadowsIgnoreTransforms() || contextCTM.isIdentityOrTranslationOrFlipped()) && !context.isInTransparencyLayer();281 bool hasSimpleShadow = context.textDrawingMode() == TextDrawingMode::Fill && 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
r259817 r259845 417 417 418 418 if (changeFlags.contains(GraphicsContextState::TextDrawingModeChange)) 419 encoder .encodeEnum(state.textDrawingMode);419 encoder << state.textDrawingMode; 420 420 421 421 if (changeFlags.contains(GraphicsContextState::StrokeColorChange)) … … 569 569 570 570 if (stateChange.m_changeFlags.contains(GraphicsContextState::TextDrawingModeChange)) { 571 TextDrawingModeFlags textDrawingMode; 572 if (!decoder.decodeEnum(textDrawingMode)) 571 Optional<TextDrawingModeFlags> textDrawingMode; 572 decoder >> textDrawingMode; 573 if (!textDrawingMode) 573 574 return WTF::nullopt; 574 575 575 stateChange.m_state.textDrawingMode = textDrawingMode;576 stateChange.m_state.textDrawingMode = WTFMove(*textDrawingMode); 576 577 } 577 578 -
trunk/Source/WebCore/platform/graphics/texmap/BitmapTexture.cpp
r259817 r259845 46 46 GraphicsContext& context = imageBuffer->context(); 47 47 context.setImageInterpolationQuality(InterpolationQuality::Default); 48 context.setTextDrawingMode(Text ModeFill);48 context.setTextDrawingMode(TextDrawingMode::Fill); 49 49 50 50 IntRect sourceRect(targetRect); -
trunk/Source/WebCore/platform/graphics/win/Direct2DOperations.cpp
r259817 r259845 776 776 graphicsContext.getShadow(shadowOffset, shadowBlur, shadowColor); 777 777 778 bool hasSimpleShadow = graphicsContext.textDrawingMode() == Text ModeFill && shadowColor.isValid() && !shadowBlur && (!graphicsContext.shadowsIgnoreTransforms() || graphicsContext.getCTM().isIdentityOrTranslationOrFlipped());778 bool hasSimpleShadow = graphicsContext.textDrawingMode() == TextDrawingMode::Fill && 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
r259817 r259845 182 182 graphicsContext.getShadow(shadowOffset, shadowBlur, shadowColor); 183 183 184 bool hasSimpleShadow = graphicsContext.textDrawingMode() == Text ModeFill && shadowColor.isValid() && !shadowBlur && (!graphicsContext.shadowsIgnoreTransforms() || graphicsContext.getCTM().isIdentityOrTranslationOrFlipped());184 bool hasSimpleShadow = graphicsContext.textDrawingMode() == TextDrawingMode::Fill && 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
r259817 r259845 117 117 graphicsContext.getShadow(shadowOffset, shadowBlur, shadowColor); 118 118 119 bool hasSimpleShadow = graphicsContext.textDrawingMode() == Text ModeFill && shadowColor.isValid() && !shadowBlur && (!graphicsContext.shadowsIgnoreTransforms() || graphicsContext.getCTM().isIdentityOrTranslationOrFlipped());119 bool hasSimpleShadow = graphicsContext.textDrawingMode() == TextDrawingMode::Fill && 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
r259817 r259845 354 354 FloatPoint timeLocation(captureSize.width() * .05, captureSize.height() * .15); 355 355 context.setFillColor(Color::white); 356 context.setTextDrawingMode(Text ModeFill);356 context.setTextDrawingMode(TextDrawingMode::Fill); 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
r259817 r259845 186 186 #if ENABLE(LETTERPRESS) 187 187 if (paintStyle.useLetterpressEffect) 188 newMode |= TextModeLetterpress;188 newMode.add(TextDrawingMode::Letterpress); 189 189 else 190 newMode &= ~TextModeLetterpress;190 newMode.remove(TextDrawingMode::Letterpress); 191 191 #endif 192 192 if (paintStyle.strokeWidth > 0 && paintStyle.strokeColor.isVisible()) 193 newMode |= TextModeStroke;193 newMode.add(TextDrawingMode::Stroke); 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 & TextModeFill&& (fillColor != context.fillColor()))204 if (mode.contains(TextDrawingMode::Fill) && (fillColor != context.fillColor())) 205 205 context.setFillColor(fillColor); 206 206 207 if (mode & Text ModeStroke) {207 if (mode & TextDrawingMode::Stroke) { 208 208 if (paintStyle.strokeColor != context.strokeColor()) 209 209 context.setStrokeColor(paintStyle.strokeColor); -
trunk/Source/WebCore/rendering/TextPainter.cpp
r259817 r259845 160 160 for (auto order : paintOrder) { 161 161 switch (order) { 162 case PaintType::Fill: 163 m_context.setTextDrawingMode(textDrawingMode & ~TextModeStroke); 162 case PaintType::Fill: { 163 auto textDrawingModeWithoutStroke = textDrawingMode; 164 textDrawingModeWithoutStroke.remove(TextDrawingMode::Stroke); 165 m_context.setTextDrawingMode(textDrawingModeWithoutStroke); 164 166 paintTextWithShadows(shadowToUse, shadowColorFilter, *m_font, textRun, boxRect, textOrigin, startOffset, endOffset, nullAtom(), 0, false); 165 167 shadowToUse = nullptr; 166 168 m_context.setTextDrawingMode(textDrawingMode); 167 169 break; 168 case PaintType::Stroke: 169 m_context.setTextDrawingMode(textDrawingMode & ~TextModeFill); 170 } 171 case PaintType::Stroke: { 172 auto textDrawingModeWithoutFill = textDrawingMode; 173 textDrawingModeWithoutFill.remove(TextDrawingMode::Fill); 174 m_context.setTextDrawingMode(textDrawingModeWithoutFill); 170 175 paintTextWithShadows(shadowToUse, shadowColorFilter, *m_font, textRun, boxRect, textOrigin, startOffset, endOffset, nullAtom(), 0, paintStyle.strokeWidth > 0); 171 176 shadowToUse = nullptr; 172 177 m_context.setTextDrawingMode(textDrawingMode); 178 } 173 179 break; 174 180 case PaintType::Markers: -
trunk/Source/WebCore/rendering/svg/RenderSVGResourceGradient.cpp
r259817 r259845 168 168 #endif 169 169 170 context->setTextDrawingMode(resourceMode.contains(RenderSVGResourceMode::ApplyToFill) ? Text ModeFill : TextModeStroke);170 context->setTextDrawingMode(resourceMode.contains(RenderSVGResourceMode::ApplyToFill) ? TextDrawingMode::Fill : TextDrawingMode::Stroke); 171 171 } 172 172 -
trunk/Source/WebCore/rendering/svg/RenderSVGResourcePattern.cpp
r259817 r259845 186 186 if (resourceMode.contains(RenderSVGResourceMode::ApplyToText)) { 187 187 if (resourceMode.contains(RenderSVGResourceMode::ApplyToFill)) { 188 context->setTextDrawingMode(Text ModeFill);188 context->setTextDrawingMode(TextDrawingMode::Fill); 189 189 190 190 #if USE(CG) … … 192 192 #endif 193 193 } else if (resourceMode.contains(RenderSVGResourceMode::ApplyToStroke)) { 194 context->setTextDrawingMode(Text ModeStroke);194 context->setTextDrawingMode(TextDrawingMode::Stroke); 195 195 196 196 #if USE(CG) -
trunk/Source/WebCore/rendering/svg/RenderSVGResourceSolidColor.cpp
r259817 r259845 52 52 53 53 if (resourceMode.contains(RenderSVGResourceMode::ApplyToText)) 54 context->setTextDrawingMode(Text ModeFill);54 context->setTextDrawingMode(TextDrawingMode::Fill); 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 ModeStroke);64 context->setTextDrawingMode(TextDrawingMode::Stroke); 65 65 } 66 66 -
trunk/Source/WebKit/ChangeLog
r259843 r259845 1 2020-04-09 Alex Christensen <achristensen@webkit.org> 2 3 IPC serialization of enums should serialize std::underlying_type instead of uint64_t 4 https://bugs.webkit.org/show_bug.cgi?id=210228 5 6 Reviewed by Chris Dumez and Darin Adler. 7 8 * Platform/IPC/Decoder.h: 9 (IPC::Decoder::decode): 10 (IPC::Decoder::operator>>): 11 (IPC::Decoder::decodeEnum): 12 * Platform/IPC/Encoder.h: 13 * Shared/cf/ArgumentCodersCF.cpp: 14 (IPC::encode): 15 (IPC::decode): 16 1 17 2020-04-08 Darin Adler <darin@apple.com> 2 18 -
trunk/Source/WebKit/Platform/IPC/Decoder.h
r259817 r259845 105 105 Decoder& operator>>(Optional<double>&); 106 106 107 template<typename E >108 auto decode(E& e) -> std::enable_if_t<std::is_enum<E>::value, bool>109 { 110 uint64_tvalue;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; 111 111 if (!decode(value)) 112 112 return false; … … 118 118 } 119 119 120 template<typename E, std::enable_if_t<std::is_enum<E>::value>* = nullptr>120 template<typename E, typename = std::enable_if_t<std::is_enum<E>::value>> 121 121 Decoder& operator>>(Optional<E>& optional) 122 122 { 123 Optional< uint64_t> value;123 Optional<typename std::underlying_type<E>::type> value; 124 124 *this >> value; 125 125 if (value && isValidEnum<E>(*value)) … … 130 130 template<typename T> bool decodeEnum(T& result) 131 131 { 132 static_assert(sizeof(T) <= 8, "Enum type T must not be larger than 64 bits!"); 133 134 uint64_t value; 132 typename std::underlying_type<T>::type value; 135 133 if (!decode(value)) 136 134 return false; 137 135 138 136 result = static_cast<T>(value); 139 137 return true; -
trunk/Source/WebKit/Platform/IPC/Encoder.h
r259817 r259845 62 62 template<typename T> void encodeEnum(T t) 63 63 { 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)); 64 encode(static_cast<typename std::underlying_type<T>::type>(t)); 67 65 } 68 66 … … 76 74 Encoder& operator<<(T&& t) 77 75 { 78 encode(static_cast< uint64_t>(t));76 encode(static_cast<typename std::underlying_type<T>::type>(t)); 79 77 return *this; 80 78 } … … 114 112 auto encode(E value) -> std::enable_if_t<std::is_enum<E>::value> 115 113 { 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)); 114 ASSERT(isValidEnum<E>(static_cast<typename std::underlying_type<E>::type>(value))); 115 encode(static_cast<typename std::underlying_type<E>::type>(value)); 120 116 } 121 117 -
trunk/Source/WebKit/Shared/cf/ArgumentCodersCF.cpp
r259817 r259845 492 492 ASSERT_UNUSED(result, result); 493 493 494 encoder .encodeEnum(numberType);494 encoder << static_cast<uint8_t>(numberType); 495 495 encoder << IPC::DataReference(buffer); 496 496 } … … 538 538 bool decode(Decoder& decoder, RetainPtr<CFNumberRef>& result) 539 539 { 540 CFNumberType numberType; 541 if (!decoder.decodeEnum(numberType)) 542 return false; 540 Optional<uint8_t> numberTypeFromIPC; 541 decoder >> numberTypeFromIPC; 542 if (!numberTypeFromIPC || *numberTypeFromIPC > kCFNumberMaxType) 543 return false; 544 auto numberType = static_cast<CFNumberType>(*numberTypeFromIPC); 543 545 544 546 IPC::DataReference dataReference; … … 572 574 ASSERT(numConvertedBytes == length); 573 575 574 encoder .encodeEnum(encoding);576 encoder << static_cast<uint32_t>(encoding); 575 577 encoder << IPC::DataReference(buffer); 576 578 } … … 578 580 bool decode(Decoder& decoder, RetainPtr<CFStringRef>& result) 579 581 { 580 CFStringEncoding encoding; 581 if (!decoder.decodeEnum(encoding)) 582 return false; 582 Optional<uint32_t> encodingFromIPC; 583 decoder >> encodingFromIPC; 584 if (!encodingFromIPC) 585 return false; 586 auto encoding = static_cast<CFStringEncoding>(*encodingFromIPC); 583 587 584 588 if (!CFStringIsEncodingAvailable(encoding))
Note:
See TracChangeset
for help on using the changeset viewer.