const StylePropertySet* HTMLTableElement::additionalGroupStyle(bool rows) { if (m_rulesAttr != GroupsRules) return 0; if (rows) { DEFINE_STATIC_REF_WILL_BE_PERSISTENT(StylePropertySet, rowBorderStyle, (createGroupBorderStyle(true))); return rowBorderStyle; } DEFINE_STATIC_REF_WILL_BE_PERSISTENT(StylePropertySet, columnBorderStyle, (createGroupBorderStyle(false))); return columnBorderStyle; }
PassRefPtrWillBeRawPtr<AnimatableValue> AnimatableStrokeDasharrayList::interpolateTo(const AnimatableValue* value, double fraction) const { WillBeHeapVector<RefPtrWillBeMember<AnimatableValue> > from = m_values; WillBeHeapVector<RefPtrWillBeMember<AnimatableValue> > to = toAnimatableStrokeDasharrayList(value)->m_values; // The spec states that if the sum of all values is zero, this should be // treated like a value of 'none', which means that a solid line is drawn. // Since we animate to and from values of zero, treat a value of 'none' the // same. If both the two and from values are 'none', we return 'none' // rather than '0 0'. if (from.isEmpty() && to.isEmpty()) return takeConstRef(this); if (from.isEmpty() || to.isEmpty()) { DEFINE_STATIC_REF_WILL_BE_PERSISTENT(AnimatableSVGLength, zeroPixels, (AnimatableSVGLength::create(SVGLength::create()))); if (from.isEmpty()) { from.append(zeroPixels); from.append(zeroPixels); } if (to.isEmpty()) { to.append(zeroPixels); to.append(zeroPixels); } } WillBeHeapVector<RefPtrWillBeMember<AnimatableValue> > interpolatedValues; bool success = interpolateLists(from, to, fraction, interpolatedValues); ASSERT_UNUSED(success, success); return adoptRefWillBeNoop(new AnimatableStrokeDasharrayList(interpolatedValues)); }
const StylePropertySet* HTMLTableElement::additionalPresentationAttributeStyle() { if (m_frameAttr) return 0; if (!m_borderAttr && !m_borderColorAttr) { // Setting the border to 'hidden' allows it to win over any border // set on the table's cells during border-conflict resolution. if (m_rulesAttr != UnsetRules) { DEFINE_STATIC_REF_WILL_BE_PERSISTENT(StylePropertySet, solidBorderStyle, (createBorderStyle(CSSValueHidden))); return solidBorderStyle; } return 0; } if (m_borderColorAttr) { DEFINE_STATIC_REF_WILL_BE_PERSISTENT(StylePropertySet, solidBorderStyle, (createBorderStyle(CSSValueSolid))); return solidBorderStyle; } DEFINE_STATIC_REF_WILL_BE_PERSISTENT(StylePropertySet, outsetBorderStyle, (createBorderStyle(CSSValueOutset))); return outsetBorderStyle; }
static void appendBackgroundRepeatValue(StringBuilder& builder, const CSSValue& repeatXCSSValue, const CSSValue& repeatYCSSValue) { // FIXME: Ensure initial values do not appear in CSS_VALUE_LISTS. DEFINE_STATIC_REF_WILL_BE_PERSISTENT(CSSPrimitiveValue, initialRepeatValue, (CSSPrimitiveValue::create(CSSValueRepeat))); const CSSPrimitiveValue& repeatX = repeatXCSSValue.isInitialValue() ? *initialRepeatValue : toCSSPrimitiveValue(repeatXCSSValue); const CSSPrimitiveValue& repeatY = repeatYCSSValue.isInitialValue() ? *initialRepeatValue : toCSSPrimitiveValue(repeatYCSSValue); CSSValueID repeatXValueId = repeatX.getValueID(); CSSValueID repeatYValueId = repeatY.getValueID(); if (repeatXValueId == repeatYValueId) { builder.append(repeatX.cssText()); } else if (repeatXValueId == CSSValueNoRepeat && repeatYValueId == CSSValueRepeat) { builder.appendLiteral("repeat-y"); } else if (repeatXValueId == CSSValueRepeat && repeatYValueId == CSSValueNoRepeat) { builder.appendLiteral("repeat-x"); } else { builder.append(repeatX.cssText()); builder.appendLiteral(" "); builder.append(repeatY.cssText()); } }
const AnimatableValue* AnimatableValue::neutralValue() { DEFINE_STATIC_REF_WILL_BE_PERSISTENT(AnimatableNeutral, neutralSentinelValue, (AnimatableNeutral::create())); return neutralSentinelValue; }