void SVGResourcesCache::clientStyleChanged(LayoutObject* layoutObject, StyleDifference diff, const ComputedStyle& newStyle) { ASSERT(layoutObject); ASSERT(layoutObject->node()); ASSERT(layoutObject->node()->isSVGElement()); if (!diff.hasDifference() || !layoutObject->parent()) return; // In this case the proper SVGFE*Element will decide whether the modified CSS properties require a relayout or paintInvalidation. if (layoutObject->isSVGResourceFilterPrimitive() && !diff.needsLayout()) return; // Dynamic changes of CSS properties like 'clip-path' may require us to recompute the associated resources for a layoutObject. // FIXME: Avoid passing in a useless StyleDifference, but instead compare oldStyle/newStyle to see which resources changed // to be able to selectively rebuild individual resources, instead of all of them. if (layoutObjectCanHaveResources(layoutObject)) { SVGResourcesCache* cache = resourcesCacheFromLayoutObject(layoutObject); cache->removeResourcesFromLayoutObject(layoutObject); cache->addResourcesFromLayoutObject(layoutObject, newStyle); } LayoutSVGResourceContainer::markForLayoutAndParentResourceInvalidation(layoutObject, false); }
void LayoutScrollbarPart::styleDidChange(StyleDifference diff, const ComputedStyle* oldStyle) { LayoutBlock::styleDidChange(diff, oldStyle); setInline(false); clearPositionedState(); setFloating(false); setHasOverflowClip(false); if (oldStyle && m_scrollbar && m_part != NoPart && (diff.needsPaintInvalidation() || diff.needsLayout())) m_scrollbar->theme()->invalidatePart(m_scrollbar, m_part); }