LayoutTests/ChangeLog

 12011-01-07 Simon Fraser <simon.fraser@apple.com>
 2
 3 Reviewed by NOBODY (OOPS!).
 4
 5 Implement object-fit CSS property
 6 https://bugs.webkit.org/show_bug.cgi?id=52040
 7
 8 New tests for -webkit-object-fit.
 9
 10 * fast/css/object-fit-elements.html: Added.
 11 * fast/css/object-fit-elements2.html: Added.
 12 * fast/css/object-fit-grow.html: Added.
 13 * fast/css/object-fit-shrink.html: Added.
 14 * fast/css/parsing-object-fit-expected.txt: Added.
 15 * fast/css/parsing-object-fit.html: Added.
 16 * fast/css/resources/circles-landscape-small.png: Added.
 17 * fast/css/resources/circles-landscape.png: Added.
 18 * fast/css/resources/circles-portrait-small.png: Added.
 19 * fast/css/resources/circles-portrait.png: Added.
 20 * fast/css/script-tests/parsing-object-fit.js: Added.
 21 (test):
 22 (testComputedStyle):
 23 * media/video-object-fit.html: Added.
 24 * platform/mac/fast/css/object-fit-elements-expected.checksum: Added.
 25 * platform/mac/fast/css/object-fit-elements-expected.png: Added.
 26 * platform/mac/fast/css/object-fit-elements-expected.txt: Added.
 27 * platform/mac/fast/css/object-fit-elements2-expected.checksum: Added.
 28 * platform/mac/fast/css/object-fit-elements2-expected.png: Added.
 29 * platform/mac/fast/css/object-fit-elements2-expected.txt: Added.
 30 * platform/mac/fast/css/object-fit-grow-expected.checksum: Added.
 31 * platform/mac/fast/css/object-fit-grow-expected.png: Added.
 32 * platform/mac/fast/css/object-fit-grow-expected.txt: Added.
 33 * platform/mac/fast/css/object-fit-shrink-expected.checksum: Added.
 34 * platform/mac/fast/css/object-fit-shrink-expected.png: Added.
 35 * platform/mac/fast/css/object-fit-shrink-expected.txt: Added.
 36 * platform/mac/media/video-object-fit-expected.checksum: Added.
 37 * platform/mac/media/video-object-fit-expected.png: Added.
 38 * platform/mac/media/video-object-fit-expected.txt: Added.
 39
1402011-04-11 Jian Li <jianli@chromium.org>
241
342 Unreviewed, Updated chromium test expectations.

Source/WebCore/ChangeLog

 12011-01-07 Simon Fraser <simon.fraser@apple.com>
 2
 3 Reviewed by NOBODY (OOPS!).
 4
 5 Implement object-fit CSS property
 6 https://bugs.webkit.org/show_bug.cgi?id=52040
 7
 8 Implement -webkit-object-fit, as described in
 9 <http://dev.w3.org/csswg/css3-images/#object-fit>,
 10 with the exception of the overflow behavior.
 11
 12 This property allows authors to fit replaced elements in their
 13 contents box while maintaining aspect ratio.
 14
 15 Tests: fast/css/object-fit-elements.html
 16 fast/css/object-fit-elements2.html
 17 fast/css/object-fit-grow.html
 18 fast/css/object-fit-shrink.html
 19 fast/css/parsing-object-fit.html
 20 media/video-object-fit.html
 21
 22 * css/CSSComputedStyleDeclaration.cpp:
 23 (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue): Return computed
 24 style for the property.
 25
 26 * css/CSSParser.cpp:
 27 (WebCore::CSSParser::parseValue): Handle object-fit, whose value is just keywords.
 28
 29 * css/CSSPrimitiveValueMappings.h:
 30 (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
 31 (WebCore::CSSPrimitiveValue::operator EObjectFitType): Map between RenderStyle enums
 32 and the primitive value IDs.
 33
 34 * css/CSSPropertyNames.in: Add -webkit-object-fit.
 35
 36 * css/CSSStyleSelector.cpp:
 37 (WebCore::CSSStyleSelector::applyProperty): Apply CSSPropertyWebkitObjectFit.
 38
 39 * css/CSSValueKeywords.in: Commented lines denoting use of existing keywords
 40 for this property.
 41
 42 * platform/graphics/FloatRect.h: Add three new functions.
 43 * platform/graphics/FloatRect.cpp:
 44 (WebCore::enclosedIntRect): Like enclosingIntRect(), but rounds inwards.
 45 (WebCore::centeredRect): Center one rect in another.
 46 (WebCore::fitInRectMaintainingAspectRatio): Grow or shrink a rect, maintaining
 47 aspect ratio, to fix into another rect (possibly spilling out on one axis).
 48
 49 * rendering/RenderHTMLCanvas.cpp:
 50 (WebCore::RenderHTMLCanvas::paintReplaced): Respect object-fit when rendering, clipping
 51 if necessary.
 52
 53 * rendering/RenderImage.h: Pass tx,ty into paintIntoRect().
 54 * rendering/RenderImage.cpp:
 55 (WebCore::RenderImage::paintReplaced): Call replacedContentRect() to get the rect
 56 to paint into.
 57 (WebCore::RenderImage::paintIntoRect): Now that rect can extend outside contentBoxRect(),
 58 clip if necessary.
 59
 60 * rendering/RenderReplaced.h:
 61 (WebCore::RenderReplaced::hasIntrinsicSize): New getter.
 62 * rendering/RenderReplaced.cpp:
 63 (WebCore::RenderReplaced::replacedContentRect): Compute the rect for the replaced content,
 64 taking object-fit into account. Map 'auto' values to 'contain' for video, otherwise 'fill'.
 65
 66 * rendering/RenderVideo.cpp:
 67 (WebCore::RenderVideo::videoBox): Replace existing aspect-ratio mapping code with call to
 68 replacedContentRect().
 69 (WebCore::RenderVideo::paintReplaced): Pass tx, ty.
 70
 71 * rendering/style/RenderStyle.h:
 72 (WebCore::InheritedFlags::objectFit): Getter.
 73 (WebCore::InheritedFlags::setObjectFit): Setter.
 74 (WebCore::InheritedFlags::initialObjectFit): Initial value.
 75 * rendering/style/RenderStyle.cpp:
 76 (WebCore::RenderStyle::diff): Compare rareInheritedData->objectFit.
 77
 78 * rendering/style/RenderStyleConstants.h: New enum for object-fit values.
 79
 80 * rendering/style/StyleRareInheritedData.h: Add object-fit.
 81 * rendering/style/StyleRareInheritedData.cpp:
 82 (WebCore::StyleRareInheritedData::StyleRareInheritedData):
 83 (WebCore::StyleRareInheritedData::operator==):
 84
1852011-04-11 Dan Bernstein <mitz@apple.com>
286
387 Build fix.

Source/WebCore/css/CSSComputedStyleDeclaration.cpp

@@PassRefPtr<CSSValue> CSSComputedStyleDeclaration::getPropertyCSSValue(int proper
13981398 return primitiveValueCache->createValue(style->khtmlLineBreak());
13991399 case CSSPropertyWebkitNbspMode:
14001400 return primitiveValueCache->createValue(style->nbspMode());
 1401 case CSSPropertyWebkitObjectFit:
 1402 return CSSPrimitiveValue::create(style->objectFit());
14011403 case CSSPropertyWebkitMatchNearestMailBlockquoteColor:
14021404 return primitiveValueCache->createValue(style->matchNearestMailBlockquoteColor());
14031405 case CSSPropertyResize:

Source/WebCore/css/CSSParser.cpp

@@bool CSSParser::parseValue(int propId, bool important)
16271627 }
16281628 return false;
16291629 }
 1630 case CSSPropertyWebkitObjectFit: {
 1631 if (id == CSSValueAuto || id == CSSValueFill || id == CSSValueContain || id == CSSValueCover)
 1632 validPrimitive = true;
 1633 break;
 1634 }
16301635 case CSSPropertyWebkitMarginCollapse: {
16311636 const int properties[2] = { CSSPropertyWebkitMarginBeforeCollapse,
16321637 CSSPropertyWebkitMarginAfterCollapse };

Source/WebCore/css/CSSPrimitiveValueMappings.h

@@template<> inline CSSPrimitiveValue::operator EPointerEvents() const
22832283 }
22842284}
22852285
 2286template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EObjectFitType e)
 2287 : m_type(CSS_IDENT)
 2288 , m_hasCachedCSSText(false)
 2289{
 2290 switch (e) {
 2291 case ObjectFitAuto:
 2292 m_value.ident = CSSValueAuto;
 2293 break;
 2294 case ObjectFitFill:
 2295 m_value.ident = CSSValueFill;
 2296 break;
 2297 case ObjectFitContain:
 2298 m_value.ident = CSSValueContain;
 2299 break;
 2300 case ObjectFitCover:
 2301 m_value.ident = CSSValueCover;
 2302 break;
 2303 }
 2304}
 2305
 2306template<> inline CSSPrimitiveValue::operator EObjectFitType() const
 2307{
 2308 switch (m_value.ident) {
 2309 case CSSValueAuto:
 2310 return ObjectFitAuto;
 2311 case CSSValueFill:
 2312 return ObjectFitFill;
 2313 case CSSValueContain:
 2314 return ObjectFitContain;
 2315 case CSSValueCover:
 2316 return ObjectFitCover;
 2317 default:
 2318 ASSERT_NOT_REACHED();
 2319 return ObjectFitFill;
 2320 }
 2321}
 2322
22862323template<> inline CSSPrimitiveValue::CSSPrimitiveValue(FontSmoothingMode smoothing)
22872324 : m_type(CSS_IDENT)
22882325 , m_hasCachedCSSText(false)

Source/WebCore/css/CSSPropertyNames.in

@@z-index
272272-webkit-min-logical-width
273273-webkit-min-logical-height
274274-webkit-nbsp-mode
 275-webkit-object-fit
275276-webkit-padding-after
276277-webkit-padding-before
277278-webkit-padding-end

Source/WebCore/css/CSSStyleSelector.cpp

@@void CSSStyleSelector::applyProperty(int id, CSSValue *value)
61936193 ASSERT_NOT_REACHED();
61946194 return;
61956195
 6196 // CSS3 Images
 6197 case CSSPropertyWebkitObjectFit:
 6198 HANDLE_INHERIT_AND_INITIAL_AND_PRIMITIVE(objectFit, ObjectFit)
 6199 break;
 6200
61966201#if ENABLE(SVG)
61976202 default:
61986203 // Try the SVG properties

Source/WebCore/css/CSSValueKeywords.in

@@farthest-corner
793793# contain
794794# cover
795795
 796# -webkit-object-fit
 797# fill
 798# contain
 799# cover
 800# auto
 801
796802# -webkit-text-orientation
797803upright
798804vertical-right

Source/WebCore/platform/graphics/FloatRect.cpp

@@IntRect enclosingIntRect(const FloatRect& rect)
205205 safeFloatToInt(width), safeFloatToInt(height));
206206}
207207
 208IntRect enclosedIntRect(const FloatRect& rect)
 209{
 210 float left = ceilf(rect.x());
 211 float top = ceilf(rect.y());
 212 float width = floorf(rect.right()) - left;
 213 float height = floorf(rect.bottom()) - top;
 214 return IntRect(safeFloatToInt(left), safeFloatToInt(top),
 215 safeFloatToInt(width), safeFloatToInt(height));
 216}
 217
208218FloatRect mapRect(const FloatRect& r, const FloatRect& srcRect, const FloatRect& destRect)
209219{
210220 if (srcRect.width() == 0 || srcRect.height() == 0)

@@FloatRect mapRect(const FloatRect& r, const FloatRect& srcRect, const FloatRect&
217227 r.width() * widthScale, r.height() * heightScale);
218228}
219229
 230FloatRect centeredRect(const FloatRect& r, const FloatRect& enclosingRect)
 231{
 232 FloatRect result = r;
 233 result.setX(enclosingRect.x() + (enclosingRect.width() - r.width()) / 2);
 234 result.setY(enclosingRect.y() + (enclosingRect.height() - r.height()) / 2);
 235 return result;
 236}
 237
 238FloatRect fitInRectMaintainingAspectRatio(const FloatSize& size, const FloatRect& enclosingRect, AspectRatioFit fit)
 239{
 240 FloatRect r(FloatPoint(), size);
 241
 242 switch (fit) {
 243 case AspectRatioContain: {
 244 float horizontalRatio = enclosingRect.width() / size.width();
 245 float verticalRatio = enclosingRect.height() / size.height();
 246 float shrinkRatio = min(horizontalRatio, verticalRatio);
 247
 248 r.setWidth(size.width() * shrinkRatio);
 249 r.setHeight(size.height() * shrinkRatio);
 250 break;
 251 }
 252 case AspectRatioCover: {
 253 float horizontalRatio = enclosingRect.width() / size.width();
 254 float verticalRatio = enclosingRect.height() / size.height();
 255 float shrinkRatio = max(horizontalRatio, verticalRatio);
 256
 257 r.setWidth(size.width() * shrinkRatio);
 258 r.setHeight(size.height() * shrinkRatio);
 259 break;
 260 }
 261 }
 262
 263 return centeredRect(r, enclosingRect);
 264}
 265
220266}

Source/WebCore/platform/graphics/FloatRect.h

@@inline bool operator!=(const FloatRect& a, const FloatRect& b)
216216}
217217
218218IntRect enclosingIntRect(const FloatRect&);
 219IntRect enclosedIntRect(const FloatRect&);
219220
220221// Map rect r from srcRect to an equivalent rect in destRect.
221 FloatRect mapRect(const FloatRect& r, const FloatRect& srcRect, const FloatRect& destRect);
 222FloatRect mapRect(const FloatRect&, const FloatRect& srcRect, const FloatRect& destRect);
 223
 224// Return r centered in enclosingRect (even if bigger).
 225FloatRect centeredRect(const FloatRect&, const FloatRect& enclosingRect);
 226
 227// Resize rect r maintaining aspect ratio. The returned rect is centered.
 228enum AspectRatioFit {
 229 AspectRatioContain, // Shrink if necessary, centering.
 230 AspectRatioCover // Entirely cover the enclosingRect, possibly extending outside it.
 231};
 232FloatRect fitInRectMaintainingAspectRatio(const FloatSize&, const FloatRect& enclosingRect, AspectRatioFit);
222233
223234}
224235

Source/WebCore/rendering/RenderHTMLCanvas.cpp

@@bool RenderHTMLCanvas::requiresLayer() const
5656
5757void RenderHTMLCanvas::paintReplaced(PaintInfo& paintInfo, int tx, int ty)
5858{
59  IntRect rect = contentBoxRect();
 59 GraphicsContext* context = paintInfo.context;
 60
 61 IntRect rect = replacedContentRect(style()->objectFit());
6062 rect.move(tx, ty);
61  static_cast<HTMLCanvasElement*>(node())->paint(paintInfo.context, rect);
 63
 64 IntRect contentRect = contentBoxRect();
 65 contentRect.move(tx, ty);
 66 bool clip = !contentRect.contains(rect);
 67 if (clip) {
 68 context->save();
 69 context->clip(contentRect);
 70 }
 71
 72 static_cast<HTMLCanvasElement*>(node())->paint(context, rect);
 73
 74 if (clip)
 75 context->restore();
6276}
6377
6478void RenderHTMLCanvas::canvasSizeChanged()

Source/WebCore/rendering/RenderImage.cpp

@@void RenderImage::paintReplaced(PaintInfo& paintInfo, int tx, int ty)
309309 if (style()->highlight() != nullAtom && !paintInfo.context->paintingDisabled())
310310 paintCustomHighlight(tx - x(), ty - y(), style()->highlight(), true);
311311#endif
312 
313  IntSize contentSize(cWidth, cHeight);
314  IntRect rect(IntPoint(tx + leftBorder + leftPad, ty + topBorder + topPad), contentSize);
315  paintIntoRect(context, rect);
 312 IntRect rect = replacedContentRect(style()->objectFit());
 313 rect.move(tx, ty);
 314 paintIntoRect(context, tx, ty, rect);
316315 }
317316}
318317

@@void RenderImage::areaElementFocusChanged(HTMLAreaElement* element)
371370 repaint();
372371}
373372
374 void RenderImage::paintIntoRect(GraphicsContext* context, const IntRect& rect)
 373void RenderImage::paintIntoRect(GraphicsContext* context, int tx, int ty, const IntRect& rect)
375374{
376375 if (!m_imageResource->hasImage() || m_imageResource->errorOccurred() || rect.width() <= 0 || rect.height() <= 0)
377376 return;

@@void RenderImage::paintIntoRect(GraphicsContext* context, const IntRect& rect)
380379 if (!img || img->isNull())
381380 return;
382381
 382 IntRect contentRect = contentBoxRect();
 383 contentRect.move(tx, ty);
 384 bool clip = !contentRect.contains(rect);
 385 if (clip) {
 386 context->save();
 387 context->clip(contentRect);
 388 }
 389
383390 HTMLImageElement* imageElt = (node() && node()->hasTagName(imgTag)) ? static_cast<HTMLImageElement*>(node()) : 0;
384391 CompositeOperator compositeOperator = imageElt ? imageElt->compositeOperator() : CompositeSourceOver;
385392 Image* image = m_imageResource->image().get();
386393 bool useLowQualityScaling = shouldPaintAtLowQuality(context, image, image, rect.size());
387394 context->drawImage(m_imageResource->image(rect.width(), rect.height()).get(), style()->colorSpace(), rect, compositeOperator, useLowQualityScaling);
 395
 396 if (clip)
 397 context->restore();
388398}
389399
390400int RenderImage::minimumReplacedHeight() const

Source/WebCore/rendering/RenderImage.h

@@protected:
5858
5959 virtual void imageChanged(WrappedImagePtr, const IntRect* = 0);
6060
61  virtual void paintIntoRect(GraphicsContext*, const IntRect&);
 61 void paintIntoRect(GraphicsContext*, int tx, int ty, const IntRect&);
6262 virtual void paint(PaintInfo&, int tx, int ty);
6363
6464 bool isLogicalWidthSpecified() const;

Source/WebCore/rendering/RenderReplaced.cpp

@@IntRect RenderReplaced::clippedOverflowRectForRepaint(RenderBoxModelObject* repa
405405 return r;
406406}
407407
 408IntRect RenderReplaced::replacedContentRect(EObjectFitType fitType) const
 409{
 410 if (fitType == ObjectFitAuto)
 411 fitType = isVideo() ? ObjectFitContain : ObjectFitFill;
 412
 413 IntRect rect = contentBoxRect();
 414 if (!hasIntrinsicSize() || fitType == ObjectFitFill)
 415 return rect;
 416
 417 if (fitType == ObjectFitContain)
 418 return enclosedIntRect(fitInRectMaintainingAspectRatio(intrinsicSize(), rect, AspectRatioContain));
 419
 420 if (fitType == ObjectFitCover)
 421 return enclosingIntRect(fitInRectMaintainingAspectRatio(intrinsicSize(), rect, AspectRatioCover));
 422
 423 ASSERT_NOT_REACHED();
 424 return rect;
 425}
 426
408427}

Source/WebCore/rendering/RenderReplaced.h

@@protected:
3636 virtual void layout();
3737
3838 virtual IntSize intrinsicSize() const;
 39 IntRect replacedContentRect(EObjectFitType) const;
3940
4041 virtual int computeReplacedLogicalWidth(bool includeMaxWidth = true) const;
4142 virtual int computeReplacedLogicalHeight() const;

@@protected:
5051 void setIntrinsicSize(const IntSize&);
5152 virtual void intrinsicSizeChanged();
5253 void setHasIntrinsicSize() { m_hasIntrinsicSize = true; }
 54 bool hasIntrinsicSize() const { return m_hasIntrinsicSize; }
5355
5456 virtual void paint(PaintInfo&, int tx, int ty);
5557 bool shouldPaint(PaintInfo&, int& tx, int& ty);

Source/WebCore/rendering/RenderVideo.cpp

@@IntRect RenderVideo::videoBox() const
161161 if (elementSize.isEmpty() || contentRect.isEmpty())
162162 return IntRect();
163163
164  IntRect renderBox = contentRect;
165  int ratio = renderBox.width() * elementSize.height() - renderBox.height() * elementSize.width();
166  if (ratio > 0) {
167  int newWidth = renderBox.height() * elementSize.width() / elementSize.height();
168  // Just fill the whole area if the difference is one pixel or less (in both sides)
169  if (renderBox.width() - newWidth > 2)
170  renderBox.setWidth(newWidth);
171  renderBox.move((contentRect.width() - renderBox.width()) / 2, 0);
172  } else if (ratio < 0) {
173  int newHeight = renderBox.width() * elementSize.height() / elementSize.width();
174  if (renderBox.height() - newHeight > 2)
175  renderBox.setHeight(newHeight);
176  renderBox.move(0, (contentRect.height() - renderBox.height()) / 2);
177  }
178 
179  return renderBox;
 164 return replacedContentRect(style()->objectFit());
180165}
181166
182167bool RenderVideo::shouldDisplayVideo() const

@@void RenderVideo::paintReplaced(PaintInfo& paintInfo, int tx, int ty)
201186 rect.move(tx, ty);
202187
203188 if (displayingPoster)
204  paintIntoRect(paintInfo.context, rect);
 189 paintIntoRect(paintInfo.context, tx, ty, rect);
205190 else if (document()->view() && document()->view()->paintBehavior() & PaintBehaviorFlattenCompositingLayers)
206191 mediaPlayer->paintCurrentFrameInContext(paintInfo.context, rect);
207192 else

Source/WebCore/rendering/style/RenderStyle.cpp

@@StyleDifference RenderStyle::diff(const RenderStyle* other, unsigned& changedCon
560560 rareInheritedData->textFillColor != other->rareInheritedData->textFillColor ||
561561 rareInheritedData->textStrokeColor != other->rareInheritedData->textStrokeColor ||
562562 rareInheritedData->textEmphasisColor != other->rareInheritedData->textEmphasisColor ||
563  rareInheritedData->textEmphasisFill != other->rareInheritedData->textEmphasisFill)
 563 rareInheritedData->textEmphasisFill != other->rareInheritedData->textEmphasisFill ||
 564 rareInheritedData->objectFit != other->rareInheritedData->objectFit)
564565 return StyleDifferenceRepaint;
565566
566567#if USE(ACCELERATED_COMPOSITING)

Source/WebCore/rendering/style/RenderStyle.h

@@public:
729729 const AtomicString& textEmphasisCustomMark() const { return rareInheritedData->textEmphasisCustomMark; }
730730 TextEmphasisPosition textEmphasisPosition() const { return static_cast<TextEmphasisPosition>(rareInheritedData->textEmphasisPosition); }
731731 const AtomicString& textEmphasisMarkString() const;
 732 static EObjectFitType initialObjectFit() { return ObjectFitAuto; }
 733
 734 EObjectFitType objectFit() const { return static_cast<EObjectFitType>(rareInheritedData->objectFit); }
732735
733736 // Return true if any transform related property (currently transform, transformStyle3D or perspective)
734737 // indicates that we are transforming

@@public:
10861089 void setTextEmphasisMark(TextEmphasisMark mark) { SET_VAR(rareInheritedData, textEmphasisMark, mark); }
10871090 void setTextEmphasisCustomMark(const AtomicString& mark) { SET_VAR(rareInheritedData, textEmphasisCustomMark, mark); }
10881091 void setTextEmphasisPosition(TextEmphasisPosition position) { SET_VAR(rareInheritedData, textEmphasisPosition, position); }
 1092 void setObjectFit(EObjectFitType type) { SET_VAR(rareInheritedData, objectFit, type); }
10891093 // End CSS3 Setters
10901094
10911095 // Apple-specific property setters

Source/WebCore/rendering/style/RenderStyleConstants.h

@@enum EUserSelect {
181181 SELECT_NONE, SELECT_TEXT
182182};
183183
 184// CSS3 Image Values
 185enum EObjectFitType { ObjectFitAuto, ObjectFitFill, ObjectFitContain, ObjectFitCover };
 186
184187// Word Break Values. Matches WinIE, rather than CSS3
185188
186189enum EWordBreak {

Source/WebCore/rendering/style/StyleRareInheritedData.cpp

@@StyleRareInheritedData::StyleRareInheritedData()
5252 , textEmphasisFill(TextEmphasisFillFilled)
5353 , textEmphasisMark(TextEmphasisMarkNone)
5454 , textEmphasisPosition(TextEmphasisPositionOver)
 55 , objectFit(RenderStyle::initialObjectFit())
5556 , m_lineBoxContain(RenderStyle::initialLineBoxContain())
5657 , hyphenationLimitBefore(-1)
5758 , hyphenationLimitAfter(-1)

@@StyleRareInheritedData::StyleRareInheritedData(const StyleRareInheritedData& o)
8687 , textEmphasisFill(o.textEmphasisFill)
8788 , textEmphasisMark(o.textEmphasisMark)
8889 , textEmphasisPosition(o.textEmphasisPosition)
 90 , objectFit(o.objectFit)
8991 , m_lineBoxContain(o.m_lineBoxContain)
9092 , hyphenationString(o.hyphenationString)
9193 , hyphenationLimitBefore(o.hyphenationLimitBefore)

@@bool StyleRareInheritedData::operator==(const StyleRareInheritedData& o) const
139141 && textEmphasisFill == o.textEmphasisFill
140142 && textEmphasisMark == o.textEmphasisMark
141143 && textEmphasisPosition == o.textEmphasisPosition
 144 && objectFit == o.objectFit
142145 && m_lineBoxContain == o.m_lineBoxContain
143146 && hyphenationString == o.hyphenationString
144147 && locale == o.locale

Source/WebCore/rendering/style/StyleRareInheritedData.h

@@public:
8484 unsigned textEmphasisFill : 1; // TextEmphasisFill
8585 unsigned textEmphasisMark : 3; // TextEmphasisMark
8686 unsigned textEmphasisPosition : 1; // TextEmphasisPosition
 87 unsigned objectFit: 2; // EObjectFitType
8788 unsigned m_lineBoxContain: 7; // LineBoxContain
8889
8990 AtomicString hyphenationString;