void RenderWidget::setWidget(PassRefPtr<Widget> widget) { if (widget == m_widget) return; if (m_widget) { moveWidgetToParentSoon(m_widget.get(), 0); view().frameView().willRemoveWidgetFromRenderTree(*m_widget); widgetRendererMap().remove(m_widget.get()); m_widget = nullptr; } m_widget = widget; if (m_widget) { widgetRendererMap().add(m_widget.get(), this); view().frameView().didAddWidgetToRenderTree(*m_widget); // If we've already received a layout, apply the calculated space to the // widget immediately, but we have to have really been fully constructed. if (hasInitializedStyle()) { if (!needsLayout()) { WeakPtr<RenderWidget> weakThis = createWeakPtr(); updateWidgetGeometry(); if (!weakThis) return; } if (style().visibility() != VISIBLE) m_widget->hide(); else { m_widget->show(); repaint(); } } moveWidgetToParentSoon(m_widget.get(), &view().frameView()); } }
void RenderLayerModelObject::styleWillChange(StyleDifference diff, const RenderStyle& newStyle) { s_wasFloating = isFloating(); s_hadLayer = hasLayer(); s_hadTransform = hasTransform(); if (s_hadLayer) s_layerWasSelfPainting = layer()->isSelfPaintingLayer(); // If our z-index changes value or our visibility changes, // we need to dirty our stacking context's z-order list. const RenderStyle* oldStyle = hasInitializedStyle() ? &style() : nullptr; if (oldStyle) { if (parent()) { // Do a repaint with the old style first, e.g., for example if we go from // having an outline to not having an outline. if (diff == StyleDifferenceRepaintLayer) { layer()->repaintIncludingDescendants(); if (!(oldStyle->clip() == newStyle.clip())) layer()->clearClipRectsIncludingDescendants(); } else if (diff == StyleDifferenceRepaint || newStyle.outlineSize() < oldStyle->outlineSize()) repaint(); } if (diff == StyleDifferenceLayout || diff == StyleDifferenceSimplifiedLayout) { // When a layout hint happens, we go ahead and do a repaint of the layer, since the layer could // end up being destroyed. if (hasLayer()) { if (oldStyle->position() != newStyle.position() || oldStyle->zIndex() != newStyle.zIndex() || oldStyle->hasAutoZIndex() != newStyle.hasAutoZIndex() || !(oldStyle->clip() == newStyle.clip()) || oldStyle->hasClip() != newStyle.hasClip() || oldStyle->opacity() != newStyle.opacity() || oldStyle->transform() != newStyle.transform() #if ENABLE(CSS_FILTERS) || oldStyle->filter() != newStyle.filter() #endif ) layer()->repaintIncludingDescendants(); } else if (newStyle.hasTransform() || newStyle.opacity() < 1 || newStyle.hasFilter()) { // If we don't have a layer yet, but we are going to get one because of transform or opacity, // then we need to repaint the old position of the object. repaint(); } } } RenderElement::styleWillChange(diff, newStyle); }