From 8995b83bcbfbb68245f779b64e5517627c6cc6ea Mon Sep 17 00:00:00 2001 From: Simon Hausmann Date: Wed, 17 Oct 2012 16:21:14 +0200 Subject: Imported WebKit commit cf4f8fc6f19b0629f51860cb2d4b25e139d07e00 (http://svn.webkit.org/repository/webkit/trunk@131592) New snapshot that includes the build fixes for Mac OS X 10.6 and earlier as well as the previously cherry-picked changes --- Source/WebCore/css/CSSComputedStyleDeclaration.cpp | 90 +++++++++++++++++----- 1 file changed, 71 insertions(+), 19 deletions(-) (limited to 'Source/WebCore/css/CSSComputedStyleDeclaration.cpp') diff --git a/Source/WebCore/css/CSSComputedStyleDeclaration.cpp b/Source/WebCore/css/CSSComputedStyleDeclaration.cpp index d10d738a3..7307402bf 100644 --- a/Source/WebCore/css/CSSComputedStyleDeclaration.cpp +++ b/Source/WebCore/css/CSSComputedStyleDeclaration.cpp @@ -49,6 +49,7 @@ #include "FontFeatureSettings.h" #include "FontFeatureValue.h" #include "FontValue.h" +#include "HTMLFrameOwnerElement.h" #include "Pair.h" #include "Rect.h" #include "RenderBox.h" @@ -58,6 +59,7 @@ #include "StyleInheritedData.h" #include "StylePropertySet.h" #include "StylePropertyShorthand.h" +#include "StyleResolver.h" #include "WebCoreMemoryInstrumentation.h" #include "WebKitCSSTransformValue.h" #include "WebKitFontFamilyNames.h" @@ -78,7 +80,7 @@ #include "WebKitCSSFilterValue.h" #endif -#if ENABLE(DASHBOARD_SUPPORT) || ENABLE(WIDGET_REGION) +#if ENABLE(DASHBOARD_SUPPORT) #include "DashboardRegion.h" #endif @@ -349,8 +351,8 @@ static const CSSPropertyID computedProperties[] = { CSSPropertyWebkitRegionBreakBefore, CSSPropertyWebkitRegionBreakInside, #endif -#if ENABLE(WIDGET_REGION) - CSSPropertyWebkitWidgetRegion, +#if ENABLE(DRAGGABLE_REGION) + CSSPropertyWebkitAppRegion, #endif #if ENABLE(CSS_EXCLUSIONS) CSSPropertyWebkitWrapFlow, @@ -919,7 +921,7 @@ PassRefPtr CSSComputedStyleDeclaration::valueForFilter(const RenderObj shadersList->append(cssValuePool().createIdentifierValue(CSSValueNone)); const CustomFilterProgramMixSettings mixSettings = program->mixSettings(); - if (mixSettings.enabled) { + if (program->programType() == PROGRAM_TYPE_BLENDS_ELEMENT_TEXTURE) { RefPtr mixFunction = WebKitCSSMixFunctionValue::create(); mixFunction->append(program->fragmentShader()->cssValue()); mixFunction->append(cssValuePool().createValue(mixSettings.blendMode)); @@ -1300,8 +1302,8 @@ static PassRefPtr counterToCSSValue(const RenderStyle* style, CSSPrope RefPtr list = CSSValueList::createSpaceSeparated(); for (CounterDirectiveMap::const_iterator it = map->begin(); it != map->end(); ++it) { - list->append(cssValuePool().createValue(it->first, CSSPrimitiveValue::CSS_STRING)); - short number = propertyID == CSSPropertyCounterIncrement ? it->second.incrementValue() : it->second.resetValue(); + list->append(cssValuePool().createValue(it->key, CSSPrimitiveValue::CSS_STRING)); + short number = propertyID == CSSPropertyCounterIncrement ? it->value.incrementValue() : it->value.resetValue(); list->append(cssValuePool().createValue((double)number, CSSPrimitiveValue::CSS_NUMBER)); } return list.release(); @@ -1384,15 +1386,57 @@ static PassRefPtr fontWeightFromStyle(RenderStyle* style) return cssValuePool().createIdentifierValue(CSSValueNormal); } +static bool isLayoutDependentProperty(CSSPropertyID propertyID) +{ + switch (propertyID) { + case CSSPropertyWidth: + case CSSPropertyHeight: + case CSSPropertyMargin: + case CSSPropertyMarginTop: + case CSSPropertyMarginBottom: + case CSSPropertyMarginLeft: + case CSSPropertyMarginRight: + case CSSPropertyPadding: + case CSSPropertyPaddingTop: + case CSSPropertyPaddingBottom: + case CSSPropertyPaddingLeft: + case CSSPropertyPaddingRight: + case CSSPropertyWebkitPerspectiveOrigin: + case CSSPropertyWebkitTransformOrigin: + case CSSPropertyWebkitTransform: +#if ENABLE(CSS_FILTERS) + case CSSPropertyWebkitFilter: +#endif + return true; + default: + return false; + } +} + PassRefPtr CSSComputedStyleDeclaration::getPropertyCSSValue(CSSPropertyID propertyID, EUpdateLayout updateLayout) const { Node* node = m_node.get(); if (!node) return 0; - // Make sure our layout is up to date before we allow a query on these attributes. - if (updateLayout) - node->document()->updateLayoutIgnorePendingStylesheets(); + if (updateLayout) { + Document* document = m_node->document(); + // FIXME: Some of these cases could be narrowed down or optimized better. + bool forceFullLayout = isLayoutDependentProperty(propertyID) + || node->isInShadowTree() + || (document->styleResolverIfExists() && document->styleResolverIfExists()->hasViewportDependentMediaQueries() && document->ownerElement()) + || document->seamlessParentIFrame(); + + if (forceFullLayout) + document->updateLayoutIgnorePendingStylesheets(); + else { + bool needsStyleRecalc = document->hasPendingForcedStyleRecalc(); + for (Node* n = m_node.get(); n && !needsStyleRecalc; n = n->parentNode()) + needsStyleRecalc = n->needsStyleRecalc(); + if (needsStyleRecalc) + document->updateStyleIfNeeded(); + } + } RenderObject* renderer = node->renderer(); @@ -2125,13 +2169,8 @@ PassRefPtr CSSComputedStyleDeclaration::getPropertyCSSValue(CSSPropert if (style->boxSizing() == CONTENT_BOX) return cssValuePool().createIdentifierValue(CSSValueContentBox); return cssValuePool().createIdentifierValue(CSSValueBorderBox); -#if ENABLE(DASHBOARD_SUPPORT) || ENABLE(WIDGET_REGION) #if ENABLE(DASHBOARD_SUPPORT) case CSSPropertyWebkitDashboardRegion: -#endif -#if ENABLE(WIDGET_REGION) - case CSSPropertyWebkitWidgetRegion: -#endif { const Vector& regions = style->dashboardRegions(); unsigned count = regions.size(); @@ -2161,6 +2200,10 @@ PassRefPtr CSSComputedStyleDeclaration::getPropertyCSSValue(CSSPropert } return cssValuePool().createValue(firstRegion.release()); } +#endif +#if ENABLE(DRAGGABLE_REGION) + case CSSPropertyWebkitAppRegion: + return cssValuePool().createIdentifierValue(style->getDraggableRegionMode() == DraggableRegionDrag ? CSSValueDrag : CSSValueNoDrag); #endif case CSSPropertyWebkitAnimationDelay: return getDelayValue(style->animations()); @@ -2300,7 +2343,10 @@ PassRefPtr CSSComputedStyleDeclaration::getPropertyCSSValue(CSSPropert case CSSPropertyWebkitPerspectiveOrigin: { RefPtr list = CSSValueList::createSpaceSeparated(); if (renderer) { - LayoutRect box = sizingBox(renderer); + LayoutRect box; + if (renderer->isBox()) + box = toRenderBox(renderer)->borderBoxRect(); + RenderView* renderView = m_node->document()->renderView(); list->append(zoomAdjustedPixelValue(minimumValueForLength(style->perspectiveOriginX(), box.width(), renderView), style.get())); list->append(zoomAdjustedPixelValue(minimumValueForLength(style->perspectiveOriginY(), box.height(), renderView), style.get())); @@ -2421,6 +2467,12 @@ PassRefPtr CSSComputedStyleDeclaration::getPropertyCSSValue(CSSPropert if (ClipPathOperation* operation = style->clipPath()) { if (operation->getOperationType() == ClipPathOperation::SHAPE) return valueForBasicShape(static_cast(operation)->basicShape()); +#if ENABLE(SVG) + else if (operation->getOperationType() == ClipPathOperation::REFERENCE) { + ReferenceClipPathOperation* referenceOperation = static_cast(operation); + return CSSPrimitiveValue::create(referenceOperation->url(), CSSPrimitiveValue::CSS_URI); + } +#endif } return cssValuePool().createIdentifierValue(CSSValueNone); #if ENABLE(CSS_REGIONS) @@ -2443,13 +2495,13 @@ PassRefPtr CSSComputedStyleDeclaration::getPropertyCSSValue(CSSPropert case CSSPropertyWebkitWrapPadding: return cssValuePool().createValue(style->wrapPadding()); case CSSPropertyWebkitShapeInside: - if (!style->wrapShapeInside()) + if (!style->shapeInside()) return cssValuePool().createIdentifierValue(CSSValueAuto); - return valueForBasicShape(style->wrapShapeInside()); + return valueForBasicShape(style->shapeInside()); case CSSPropertyWebkitShapeOutside: - if (!style->wrapShapeOutside()) + if (!style->shapeOutside()) return cssValuePool().createIdentifierValue(CSSValueAuto); - return valueForBasicShape(style->wrapShapeOutside()); + return valueForBasicShape(style->shapeOutside()); case CSSPropertyWebkitWrapThrough: return cssValuePool().createValue(style->wrapThrough()); #endif -- cgit v1.2.1