15267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)/* 25267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) * Copyright (C) 2013 Google Inc. All rights reserved. 3e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch * Copyright (C) 1999 Lars Knoll (knoll@kde.org) 4e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch * (C) 2004-2005 Allan Sandfeld Jensen (kde@carewolf.com) 5e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch * Copyright (C) 2006, 2007 Nicholas Shanks (webkit@nickshanks.com) 6e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch * Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013 Apple Inc. All rights reserved. 7e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch * Copyright (C) 2007 Alexey Proskuryakov <ap@webkit.org> 8e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch * Copyright (C) 2007, 2008 Eric Seidel <eric@webkit.org> 9e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.torchmobile.com/) 10e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch * Copyright (c) 2011, Code Aurora Forum. All rights reserved. 11e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch * Copyright (C) Research In Motion Limited 2011. All rights reserved. 125267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) * Redistribution and use in source and binary forms, with or without 135267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) * modification, are permitted provided that the following conditions are 145267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) * met: 155267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) * 165267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) * * Redistributions of source code must retain the above copyright 175267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) * notice, this list of conditions and the following disclaimer. 185267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) * * Redistributions in binary form must reproduce the above 195267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) * copyright notice, this list of conditions and the following disclaimer 205267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) * in the documentation and/or other materials provided with the 215267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) * distribution. 225267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) * * Neither the name of Google Inc. nor the names of its 235267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) * contributors may be used to endorse or promote products derived from 245267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) * this software without specific prior written permission. 255267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) * 265267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 275267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 285267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 295267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 305267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 315267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 325267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 335267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 345267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 355267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 365267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 375267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) */ 385267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 395267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)#include "config.h" 405267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 415d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)#include "core/CSSPropertyNames.h" 425d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)#include "core/CSSValueKeywords.h" 435d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)#include "core/StyleBuilderFunctions.h" 445d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)#include "core/StylePropertyShorthand.h" 45e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#include "core/css/BasicShapeFunctions.h" 46e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#include "core/css/CSSAspectRatioValue.h" 47e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#include "core/css/CSSCursorImageValue.h" 481e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)#include "core/css/CSSFontValue.h" 497757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch#include "core/css/CSSGradientValue.h" 5009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)#include "core/css/CSSGridTemplateAreasValue.h" 51a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)#include "core/css/CSSHelper.h" 52e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#include "core/css/CSSImageSetValue.h" 53e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#include "core/css/CSSLineBoxContainValue.h" 54e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#include "core/css/CSSPrimitiveValueMappings.h" 55e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)#include "core/css/CSSPropertyMetadata.h" 56e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#include "core/css/Counter.h" 5709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)#include "core/css/Pair.h" 58f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)#include "core/css/StylePropertySet.h" 591e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)#include "core/css/StyleRule.h" 60e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#include "core/css/resolver/ElementStyleResources.h" 61e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#include "core/css/resolver/FilterOperationResolver.h" 627757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch#include "core/css/resolver/FontBuilder.h" 633c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch#include "core/css/resolver/StyleBuilder.h" 64e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#include "core/css/resolver/TransformBuilder.h" 65d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)#include "core/frame/LocalFrame.h" 6609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)#include "core/frame/Settings.h" 67e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#include "core/rendering/style/CounterContent.h" 68e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#include "core/rendering/style/QuotesData.h" 69e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#include "core/rendering/style/RenderStyle.h" 70e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#include "core/rendering/style/RenderStyleConstants.h" 71e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#include "core/rendering/style/SVGRenderStyle.h" 72e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#include "core/rendering/style/StyleGeneratedImage.h" 73f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles)#include "platform/fonts/FontDescription.h" 74e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#include "wtf/MathExtras.h" 75e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#include "wtf/StdLibExtras.h" 76e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#include "wtf/Vector.h" 77e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 78c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)namespace blink { 795267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 80d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)namespace { 81d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) 82d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)static inline bool isValidVisitedLinkProperty(CSSPropertyID id) 83d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles){ 84d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) switch (id) { 85d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) case CSSPropertyBackgroundColor: 86d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) case CSSPropertyBorderLeftColor: 87d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) case CSSPropertyBorderRightColor: 88d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) case CSSPropertyBorderTopColor: 89d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) case CSSPropertyBorderBottomColor: 90d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) case CSSPropertyColor: 91d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) case CSSPropertyFill: 92d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) case CSSPropertyOutlineColor: 93d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) case CSSPropertyStroke: 94d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) case CSSPropertyTextDecorationColor: 95d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) case CSSPropertyWebkitColumnRuleColor: 96d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) case CSSPropertyWebkitTextEmphasisColor: 97d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) case CSSPropertyWebkitTextFillColor: 98d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) case CSSPropertyWebkitTextStrokeColor: 99d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) return true; 100d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) default: 101d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) return false; 102d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) } 103d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)} 104d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) 105d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)} // namespace 106d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) 107d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)void StyleBuilder::applyProperty(CSSPropertyID id, StyleResolverState& state, CSSValue* value) 108d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles){ 109d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) ASSERT_WITH_MESSAGE(!isExpandedShorthand(id), "Shorthand property id = %d wasn't expanded at parsing time", id); 110d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) 111d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) bool isInherit = state.parentNode() && value->isInheritedValue(); 112d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) bool isInitial = value->isInitialValue() || (!state.parentNode() && value->isInheritedValue()); 113d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) 114d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) ASSERT(!isInherit || !isInitial); // isInherit -> !isInitial && isInitial -> !isInherit 115d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) ASSERT(!isInherit || (state.parentNode() && state.parentStyle())); // isInherit -> (state.parentNode() && state.parentStyle()) 116d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) 117d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) if (!state.applyPropertyToRegularStyle() && (!state.applyPropertyToVisitedLinkStyle() || !isValidVisitedLinkProperty(id))) { 118d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) // Limit the properties that can be applied to only the ones honored by :visited. 119d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) return; 120d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) } 121d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) 122e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) if (isInherit && !state.parentStyle()->hasExplicitlyInheritedProperties() && !CSSPropertyMetadata::isInheritedProperty(id)) 123d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) state.parentStyle()->setHasExplicitlyInheritedProperties(); 124d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) 125d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) StyleBuilder::applyProperty(id, state, value, isInitial, isInherit); 126d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)} 127d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) 12809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)void StyleBuilderFunctions::applyInitialCSSPropertyColor(StyleResolverState& state) 12909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles){ 13009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) Color color = RenderStyle::initialColor(); 13109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (state.applyPropertyToRegularStyle()) 13209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) state.style()->setColor(color); 13309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (state.applyPropertyToVisitedLinkStyle()) 13409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) state.style()->setVisitedLinkColor(color); 13509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)} 13609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 13709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)void StyleBuilderFunctions::applyInheritCSSPropertyColor(StyleResolverState& state) 13809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles){ 13909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) Color color = state.parentStyle()->color(); 14009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (state.applyPropertyToRegularStyle()) 14109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) state.style()->setColor(color); 14209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (state.applyPropertyToVisitedLinkStyle()) 14309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) state.style()->setVisitedLinkColor(color); 14409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)} 14509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 14609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)void StyleBuilderFunctions::applyValueCSSPropertyColor(StyleResolverState& state, CSSValue* value) 14709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles){ 14809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); 14909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) // As per the spec, 'color: currentColor' is treated as 'color: inherit' 15009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (primitiveValue->getValueID() == CSSValueCurrentcolor) { 15109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) applyInheritCSSPropertyColor(state); 15209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) return; 15309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) } 15409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 15509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (state.applyPropertyToRegularStyle()) 156c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) state.style()->setColor(StyleBuilderConverter::convertColor(state, value)); 15709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (state.applyPropertyToVisitedLinkStyle()) 158c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) state.style()->setVisitedLinkColor(StyleBuilderConverter::convertColor(state, value, true)); 15909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)} 16009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 161197021e6b966cfb06891637935ef33fff06433d1Ben Murdochvoid StyleBuilderFunctions::applyInitialCSSPropertyJustifyItems(StyleResolverState& state) 162197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch{ 163197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch state.style()->setJustifyItems(RenderStyle::initialJustifyItems()); 164197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch state.style()->setJustifyItemsOverflowAlignment(RenderStyle::initialJustifyItemsOverflowAlignment()); 165197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch state.style()->setJustifyItemsPositionType(RenderStyle::initialJustifyItemsPositionType()); 166197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch} 167197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch 168197021e6b966cfb06891637935ef33fff06433d1Ben Murdochvoid StyleBuilderFunctions::applyInheritCSSPropertyJustifyItems(StyleResolverState& state) 169197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch{ 170197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch state.style()->setJustifyItems(state.parentStyle()->justifyItems()); 171197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch state.style()->setJustifyItemsOverflowAlignment(state.parentStyle()->justifyItemsOverflowAlignment()); 172197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch state.style()->setJustifyItemsPositionType(state.parentStyle()->justifyItemsPositionType()); 173197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch} 174197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch 175197021e6b966cfb06891637935ef33fff06433d1Ben Murdochvoid StyleBuilderFunctions::applyValueCSSPropertyJustifyItems(StyleResolverState& state, CSSValue* value) 176197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch{ 177197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch 178197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); 179197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch if (Pair* pairValue = primitiveValue->getPairValue()) { 180197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch if (pairValue->first()->getValueID() == CSSValueLegacy) { 181197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch state.style()->setJustifyItemsPositionType(LegacyPosition); 182197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch state.style()->setJustifyItems(*pairValue->second()); 183197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch } else { 184197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch state.style()->setJustifyItems(*pairValue->first()); 185197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch state.style()->setJustifyItemsOverflowAlignment(*pairValue->second()); 186197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch } 187197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch } else { 188197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch state.style()->setJustifyItems(*primitiveValue); 189197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch } 190197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch} 191197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch 192f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)void StyleBuilderFunctions::applyInitialCSSPropertyCursor(StyleResolverState& state) 193e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch{ 194e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch state.style()->clearCursorList(); 195e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch state.style()->setCursor(RenderStyle::initialCursor()); 196e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch} 197e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 198f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)void StyleBuilderFunctions::applyInheritCSSPropertyCursor(StyleResolverState& state) 199e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch{ 200e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch state.style()->setCursor(state.parentStyle()->cursor()); 201e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch state.style()->setCursorList(state.parentStyle()->cursors()); 202e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch} 203e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 204f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)void StyleBuilderFunctions::applyValueCSSPropertyCursor(StyleResolverState& state, CSSValue* value) 205e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch{ 206e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch state.style()->clearCursorList(); 207e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch if (value->isValueList()) { 208e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch CSSValueList* list = toCSSValueList(value); 209e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch int len = list->length(); 210e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch state.style()->setCursor(CURSOR_AUTO); 211e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch for (int i = 0; i < len; i++) { 212197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch CSSValue* item = list->item(i); 213e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch if (item->isCursorImageValue()) { 2141e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) CSSCursorImageValue* image = toCSSCursorImageValue(item); 215e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch if (image->updateIfSVGCursorIsUsed(state.element())) // Elements with SVG cursors are not allowed to share style. 216e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch state.style()->setUnique(); 217e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch state.style()->addCursor(state.styleImage(CSSPropertyCursor, image), image->hotSpot()); 218d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) } else { 219d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) state.style()->setCursor(*toCSSPrimitiveValue(item)); 220e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch } 221e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch } 222d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) } else { 223d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) state.style()->setCursor(*toCSSPrimitiveValue(value)); 224e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch } 225e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch} 226e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 227f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)void StyleBuilderFunctions::applyValueCSSPropertyDirection(StyleResolverState& state, CSSValue* value) 228e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch{ 229e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch state.style()->setDirection(*toCSSPrimitiveValue(value)); 230e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch Element* element = state.element(); 2318abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) if (element && element == element->document().documentElement()) 2328abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) element->document().setDirectionSetOnDocumentElement(true); 233e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch} 234e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 235f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)void StyleBuilderFunctions::applyInitialCSSPropertyFontFamily(StyleResolverState& state) 236e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch{ 237d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) state.fontBuilder().setFontFamilyInitial(); 238e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch} 239e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 240f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)void StyleBuilderFunctions::applyInheritCSSPropertyFontFamily(StyleResolverState& state) 241e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch{ 2420019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch state.fontBuilder().setFontFamilyInherit(state.parentFontDescription()); 243e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch} 244e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 245f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)void StyleBuilderFunctions::applyValueCSSPropertyFontFamily(StyleResolverState& state, CSSValue* value) 246e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch{ 247d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) state.fontBuilder().setFontFamilyValue(value); 248e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch} 249e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 250323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)void StyleBuilderFunctions::applyValueCSSPropertyGlyphOrientationVertical(StyleResolverState& state, CSSValue* value) 251323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles){ 252323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) if (value->isPrimitiveValue() && toCSSPrimitiveValue(value)->getValueID() == CSSValueAuto) 253197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch state.style()->accessSVGStyle().setGlyphOrientationVertical(GO_AUTO); 254323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) else 255197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch state.style()->accessSVGStyle().setGlyphOrientationVertical(StyleBuilderConverter::convertGlyphOrientation(state, value)); 256323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)} 257323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) 258323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)void StyleBuilderFunctions::applyInitialCSSPropertyGridTemplateAreas(StyleResolverState& state) 259323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles){ 260323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) state.style()->setNamedGridArea(RenderStyle::initialNamedGridArea()); 261323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) state.style()->setNamedGridAreaRowCount(RenderStyle::initialNamedGridAreaCount()); 262323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) state.style()->setNamedGridAreaColumnCount(RenderStyle::initialNamedGridAreaCount()); 263323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)} 264323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) 265323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)void StyleBuilderFunctions::applyInheritCSSPropertyGridTemplateAreas(StyleResolverState& state) 266323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles){ 267323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) state.style()->setNamedGridArea(state.parentStyle()->namedGridArea()); 268323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) state.style()->setNamedGridAreaRowCount(state.parentStyle()->namedGridAreaRowCount()); 269323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) state.style()->setNamedGridAreaColumnCount(state.parentStyle()->namedGridAreaColumnCount()); 270323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)} 271323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) 272323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)void StyleBuilderFunctions::applyValueCSSPropertyGridTemplateAreas(StyleResolverState& state, CSSValue* value) 273323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles){ 274323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) if (value->isPrimitiveValue()) { 275323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) // FIXME: Shouldn't we clear the grid-area values 276323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) ASSERT(toCSSPrimitiveValue(value)->getValueID() == CSSValueNone); 277323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) return; 278323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) } 279323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) 280323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) CSSGridTemplateAreasValue* gridTemplateAreasValue = toCSSGridTemplateAreasValue(value); 281d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) const NamedGridAreaMap& newNamedGridAreas = gridTemplateAreasValue->gridAreaMap(); 282d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) 283d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) NamedGridLinesMap namedGridColumnLines = state.style()->namedGridColumnLines(); 284d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) NamedGridLinesMap namedGridRowLines = state.style()->namedGridRowLines(); 285d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) StyleBuilderConverter::createImplicitNamedGridLinesFromGridArea(newNamedGridAreas, namedGridColumnLines, ForColumns); 286d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) StyleBuilderConverter::createImplicitNamedGridLinesFromGridArea(newNamedGridAreas, namedGridRowLines, ForRows); 287d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) state.style()->setNamedGridColumnLines(namedGridColumnLines); 288d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) state.style()->setNamedGridRowLines(namedGridRowLines); 289d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) 290d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) state.style()->setNamedGridArea(newNamedGridAreas); 291323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) state.style()->setNamedGridAreaRowCount(gridTemplateAreasValue->rowCount()); 292323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) state.style()->setNamedGridAreaColumnCount(gridTemplateAreasValue->columnCount()); 293323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)} 294323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) 295f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)void StyleBuilderFunctions::applyValueCSSPropertyLineHeight(StyleResolverState& state, CSSValue* value) 296e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch{ 297e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); 298e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch Length lineHeight; 299e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 300e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch if (primitiveValue->getValueID() == CSSValueNormal) { 301e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch lineHeight = RenderStyle::initialLineHeight(); 302e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch } else if (primitiveValue->isLength()) { 303a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) float multiplier = state.style()->effectiveZoom(); 304d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) if (LocalFrame* frame = state.document().frame()) 305e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch multiplier *= frame->textZoomFactor(); 306a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) lineHeight = primitiveValue->computeLength<Length>(state.cssToLengthConversionData().copyWithAdjustedZoom(multiplier)); 307e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch } else if (primitiveValue->isPercentage()) { 3081e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) lineHeight = Length((state.style()->computedFontSize() * primitiveValue->getIntValue()) / 100.0, Fixed); 309e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch } else if (primitiveValue->isNumber()) { 310e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch lineHeight = Length(primitiveValue->getDoubleValue() * 100.0, Percent); 31119cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles) } else if (primitiveValue->isCalculated()) { 31219cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles) double multiplier = state.style()->effectiveZoom(); 313d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) if (LocalFrame* frame = state.document().frame()) 31419cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles) multiplier *= frame->textZoomFactor(); 315a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) Length zoomedLength = Length(primitiveValue->cssCalcValue()->toCalcValue(state.cssToLengthConversionData().copyWithAdjustedZoom(multiplier))); 31619cde67944066db31e633d9e386f2aa9bf9fadb3Torne (Richard Coles) lineHeight = Length(valueForLength(zoomedLength, state.style()->fontSize()), Fixed); 317e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch } else { 318e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch return; 319e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch } 320e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch state.style()->setLineHeight(lineHeight); 321e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch} 322e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 323f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)void StyleBuilderFunctions::applyValueCSSPropertyListStyleImage(StyleResolverState& state, CSSValue* value) 324e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch{ 325e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch state.style()->setListStyleImage(state.styleImage(CSSPropertyListStyleImage, value)); 326e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch} 327e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 328f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)void StyleBuilderFunctions::applyInitialCSSPropertyOutlineStyle(StyleResolverState& state) 329e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch{ 330e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch state.style()->setOutlineStyleIsAuto(RenderStyle::initialOutlineStyleIsAuto()); 331e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch state.style()->setOutlineStyle(RenderStyle::initialBorderStyle()); 332e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch} 333e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 334f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)void StyleBuilderFunctions::applyInheritCSSPropertyOutlineStyle(StyleResolverState& state) 335e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch{ 336e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch state.style()->setOutlineStyleIsAuto(state.parentStyle()->outlineStyleIsAuto()); 337e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch state.style()->setOutlineStyle(state.parentStyle()->outlineStyle()); 338e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch} 339e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 340f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)void StyleBuilderFunctions::applyValueCSSPropertyOutlineStyle(StyleResolverState& state, CSSValue* value) 341e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch{ 342e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); 343e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch state.style()->setOutlineStyleIsAuto(*primitiveValue); 344e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch state.style()->setOutlineStyle(*primitiveValue); 345e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch} 346e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 347f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)void StyleBuilderFunctions::applyValueCSSPropertyResize(StyleResolverState& state, CSSValue* value) 348e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch{ 349e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); 350e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 351e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch EResize r = RESIZE_NONE; 352d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) if (primitiveValue->getValueID() == CSSValueAuto) { 3538abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) if (Settings* settings = state.document().settings()) 354e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch r = settings->textAreasAreResizable() ? RESIZE_BOTH : RESIZE_NONE; 355d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) } else { 356e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch r = *primitiveValue; 357e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch } 358e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch state.style()->setResize(r); 359e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch} 360e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 361a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)static Length mmLength(double mm) { return Length(mm * cssPixelsPerMillimeter, Fixed); } 362a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)static Length inchLength(double inch) { return Length(inch * cssPixelsPerInch, Fixed); } 363e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdochstatic bool getPageSizeFromName(CSSPrimitiveValue* pageSizeName, CSSPrimitiveValue* pageOrientation, Length& width, Length& height) 364e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch{ 365e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch DEFINE_STATIC_LOCAL(Length, a5Width, (mmLength(148))); 366e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch DEFINE_STATIC_LOCAL(Length, a5Height, (mmLength(210))); 367e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch DEFINE_STATIC_LOCAL(Length, a4Width, (mmLength(210))); 368e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch DEFINE_STATIC_LOCAL(Length, a4Height, (mmLength(297))); 369e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch DEFINE_STATIC_LOCAL(Length, a3Width, (mmLength(297))); 370e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch DEFINE_STATIC_LOCAL(Length, a3Height, (mmLength(420))); 371e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch DEFINE_STATIC_LOCAL(Length, b5Width, (mmLength(176))); 372e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch DEFINE_STATIC_LOCAL(Length, b5Height, (mmLength(250))); 373e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch DEFINE_STATIC_LOCAL(Length, b4Width, (mmLength(250))); 374e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch DEFINE_STATIC_LOCAL(Length, b4Height, (mmLength(353))); 375e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch DEFINE_STATIC_LOCAL(Length, letterWidth, (inchLength(8.5))); 376e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch DEFINE_STATIC_LOCAL(Length, letterHeight, (inchLength(11))); 377e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch DEFINE_STATIC_LOCAL(Length, legalWidth, (inchLength(8.5))); 378e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch DEFINE_STATIC_LOCAL(Length, legalHeight, (inchLength(14))); 379e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch DEFINE_STATIC_LOCAL(Length, ledgerWidth, (inchLength(11))); 380e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch DEFINE_STATIC_LOCAL(Length, ledgerHeight, (inchLength(17))); 381e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 382e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch if (!pageSizeName) 383e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch return false; 384e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 385e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch switch (pageSizeName->getValueID()) { 386e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch case CSSValueA5: 387e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch width = a5Width; 388e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch height = a5Height; 389e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch break; 390e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch case CSSValueA4: 391e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch width = a4Width; 392e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch height = a4Height; 393e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch break; 394e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch case CSSValueA3: 395e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch width = a3Width; 396e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch height = a3Height; 397e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch break; 398e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch case CSSValueB5: 399e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch width = b5Width; 400e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch height = b5Height; 401e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch break; 402e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch case CSSValueB4: 403e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch width = b4Width; 404e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch height = b4Height; 405e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch break; 406e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch case CSSValueLetter: 407e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch width = letterWidth; 408e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch height = letterHeight; 409e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch break; 410e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch case CSSValueLegal: 411e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch width = legalWidth; 412e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch height = legalHeight; 413e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch break; 414e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch case CSSValueLedger: 415e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch width = ledgerWidth; 416e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch height = ledgerHeight; 417e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch break; 418e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch default: 419e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch return false; 420e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch } 421e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 422e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch if (pageOrientation) { 423e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch switch (pageOrientation->getValueID()) { 424e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch case CSSValueLandscape: 425e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch std::swap(width, height); 426e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch break; 427e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch case CSSValuePortrait: 428e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch // Nothing to do. 429e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch break; 430e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch default: 431e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch return false; 432e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch } 433e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch } 434e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch return true; 435e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch} 436e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 437f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)void StyleBuilderFunctions::applyInitialCSSPropertySize(StyleResolverState&) { } 438f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)void StyleBuilderFunctions::applyInheritCSSPropertySize(StyleResolverState&) { } 439f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)void StyleBuilderFunctions::applyValueCSSPropertySize(StyleResolverState& state, CSSValue* value) 440e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch{ 441e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch state.style()->resetPageSizeType(); 442e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch Length width; 443e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch Length height; 444e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch PageSizeType pageSizeType = PAGE_SIZE_AUTO; 445e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch CSSValueListInspector inspector(value); 446e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch switch (inspector.length()) { 447e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch case 2: { 448e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch // <length>{2} | <page-size> <orientation> 449e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch if (!inspector.first()->isPrimitiveValue() || !inspector.second()->isPrimitiveValue()) 450e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch return; 451e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch CSSPrimitiveValue* first = toCSSPrimitiveValue(inspector.first()); 452e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch CSSPrimitiveValue* second = toCSSPrimitiveValue(inspector.second()); 453e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch if (first->isLength()) { 454e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch // <length>{2} 455e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch if (!second->isLength()) 456e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch return; 457a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) width = first->computeLength<Length>(state.cssToLengthConversionData().copyWithAdjustedZoom(1.0)); 458a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) height = second->computeLength<Length>(state.cssToLengthConversionData().copyWithAdjustedZoom(1.0)); 459e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch } else { 460e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch // <page-size> <orientation> 46109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) // The value order is guaranteed. See BisonCSSParser::parseSizeParameter. 462e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch if (!getPageSizeFromName(first, second, width, height)) 463e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch return; 464e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch } 465e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch pageSizeType = PAGE_SIZE_RESOLVED; 466e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch break; 467e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch } 468e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch case 1: { 469e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch // <length> | auto | <page-size> | [ portrait | landscape] 470e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch if (!inspector.first()->isPrimitiveValue()) 471e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch return; 472e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(inspector.first()); 473e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch if (primitiveValue->isLength()) { 474e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch // <length> 475e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch pageSizeType = PAGE_SIZE_RESOLVED; 476a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) width = height = primitiveValue->computeLength<Length>(state.cssToLengthConversionData().copyWithAdjustedZoom(1.0)); 477e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch } else { 478e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch switch (primitiveValue->getValueID()) { 479e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch case 0: 480e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch return; 481e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch case CSSValueAuto: 482e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch pageSizeType = PAGE_SIZE_AUTO; 483e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch break; 484e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch case CSSValuePortrait: 485e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch pageSizeType = PAGE_SIZE_AUTO_PORTRAIT; 486e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch break; 487e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch case CSSValueLandscape: 488e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch pageSizeType = PAGE_SIZE_AUTO_LANDSCAPE; 489e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch break; 490e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch default: 491e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch // <page-size> 492e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch pageSizeType = PAGE_SIZE_RESOLVED; 493e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch if (!getPageSizeFromName(primitiveValue, 0, width, height)) 494e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch return; 495e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch } 496e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch } 497e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch break; 498e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch } 499e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch default: 500e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch return; 501e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch } 502e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch state.style()->setPageSizeType(pageSizeType); 503e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch state.style()->setPageSize(LengthSize(width, height)); 504e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch} 505e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 506f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)void StyleBuilderFunctions::applyValueCSSPropertyTextAlign(StyleResolverState& state, CSSValue* value) 507e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch{ 508e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch if (!value->isPrimitiveValue()) 509e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch return; 510e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 511e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); 512f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) // FIXME : Per http://www.w3.org/TR/css3-text/#text-align0 can now take <string> but this is not implemented in the 513f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) // rendering code. 514f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) if (primitiveValue->isString()) 515f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) return; 516e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 517f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) if (primitiveValue->isValueID() && primitiveValue->getValueID() != CSSValueWebkitMatchParent) 518e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch state.style()->setTextAlign(*primitiveValue); 519e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch else if (state.parentStyle()->textAlign() == TASTART) 520e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch state.style()->setTextAlign(state.parentStyle()->isLeftToRightDirection() ? LEFT : RIGHT); 521e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch else if (state.parentStyle()->textAlign() == TAEND) 522e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch state.style()->setTextAlign(state.parentStyle()->isLeftToRightDirection() ? RIGHT : LEFT); 523e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch else 524e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch state.style()->setTextAlign(state.parentStyle()->textAlign()); 525e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch} 526e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 527f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)void StyleBuilderFunctions::applyInheritCSSPropertyTextIndent(StyleResolverState& state) 528e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch{ 529e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch state.style()->setTextIndent(state.parentStyle()->textIndent()); 530e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch state.style()->setTextIndentLine(state.parentStyle()->textIndentLine()); 53110f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch state.style()->setTextIndentType(state.parentStyle()->textIndentType()); 532e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch} 533e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 534f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)void StyleBuilderFunctions::applyInitialCSSPropertyTextIndent(StyleResolverState& state) 535e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch{ 536e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch state.style()->setTextIndent(RenderStyle::initialTextIndent()); 537e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch state.style()->setTextIndentLine(RenderStyle::initialTextIndentLine()); 53810f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch state.style()->setTextIndentType(RenderStyle::initialTextIndentType()); 539e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch} 540e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 541f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)void StyleBuilderFunctions::applyValueCSSPropertyTextIndent(StyleResolverState& state, CSSValue* value) 542e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch{ 543e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch if (!value->isValueList()) 544e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch return; 545e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 54610f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch Length lengthOrPercentageValue; 54710f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch TextIndentLine textIndentLineValue = RenderStyle::initialTextIndentLine(); 54810f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch TextIndentType textIndentTypeValue = RenderStyle::initialTextIndentType(); 549e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 55010f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch for (CSSValueListIterator i(value); i.hasMore(); i.advance()) { 55110f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(i.value()); 55210f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch if (!primitiveValue->getValueID()) 55310f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch lengthOrPercentageValue = primitiveValue->convertToLength<FixedConversion | PercentConversion>(state.cssToLengthConversionData()); 55410f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch else if (primitiveValue->getValueID() == CSSValueEachLine) 55510f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch textIndentLineValue = TextIndentEachLine; 55610f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch else if (primitiveValue->getValueID() == CSSValueHanging) 55710f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch textIndentTypeValue = TextIndentHanging; 55810f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch else 55910f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch ASSERT_NOT_REACHED(); 56010f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch } 561e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 56210f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch state.style()->setTextIndent(lengthOrPercentageValue); 56310f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch state.style()->setTextIndentLine(textIndentLineValue); 56410f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdoch state.style()->setTextIndentType(textIndentTypeValue); 565e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch} 566e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 567323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)void StyleBuilderFunctions::applyValueCSSPropertyTransform(StyleResolverState& state, CSSValue* value) 568323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles){ 569323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) TransformOperations operations; 570323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) TransformBuilder::createTransformOperations(value, state.cssToLengthConversionData(), operations); 571323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) state.style()->setTransform(operations); 572323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)} 573323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) 574aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdochvoid StyleBuilderFunctions::applyInitialCSSPropertyTransformOrigin(StyleResolverState& state) 575aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch{ 576aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch applyInitialCSSPropertyWebkitTransformOriginX(state); 577aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch applyInitialCSSPropertyWebkitTransformOriginY(state); 578aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch applyInitialCSSPropertyWebkitTransformOriginZ(state); 579aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch} 580aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch 581aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdochvoid StyleBuilderFunctions::applyInheritCSSPropertyTransformOrigin(StyleResolverState& state) 582aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch{ 583aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch applyInheritCSSPropertyWebkitTransformOriginX(state); 584aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch applyInheritCSSPropertyWebkitTransformOriginY(state); 585aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch applyInheritCSSPropertyWebkitTransformOriginZ(state); 586aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch} 587aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch 588aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdochvoid StyleBuilderFunctions::applyValueCSSPropertyTransformOrigin(StyleResolverState& state, CSSValue* value) 589aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch{ 590aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch CSSValueList* list = toCSSValueList(value); 591aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch ASSERT(list->length() == 3); 592aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(list->item(0)); 593aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch if (primitiveValue->isValueID()) { 594aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch switch (primitiveValue->getValueID()) { 595aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch case CSSValueLeft: 596aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch state.style()->setTransformOriginX(Length(0, Percent)); 597aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch break; 598aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch case CSSValueRight: 599aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch state.style()->setTransformOriginX(Length(100, Percent)); 600aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch break; 601aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch case CSSValueCenter: 602aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch state.style()->setTransformOriginX(Length(50, Percent)); 603aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch break; 604aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch default: 605aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch ASSERT_NOT_REACHED(); 606aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch } 607aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch } else { 608aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch state.style()->setTransformOriginX(StyleBuilderConverter::convertLength(state, primitiveValue)); 609aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch } 610aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch 611aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch primitiveValue = toCSSPrimitiveValue(list->item(1)); 612aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch if (primitiveValue->isValueID()) { 613aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch switch (primitiveValue->getValueID()) { 614aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch case CSSValueTop: 615aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch state.style()->setTransformOriginY(Length(0, Percent)); 616aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch break; 617aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch case CSSValueBottom: 618aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch state.style()->setTransformOriginY(Length(100, Percent)); 619aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch break; 620aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch case CSSValueCenter: 621aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch state.style()->setTransformOriginY(Length(50, Percent)); 622aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch break; 623aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch default: 624aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch ASSERT_NOT_REACHED(); 625aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch } 626aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch } else { 627aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch state.style()->setTransformOriginY(StyleBuilderConverter::convertLength(state, primitiveValue)); 628aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch } 629aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch 630aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch primitiveValue = toCSSPrimitiveValue(list->item(2)); 631aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch state.style()->setTransformOriginZ(StyleBuilderConverter::convertComputedLength<float>(state, primitiveValue)); 632aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch} 633aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch 634aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdochvoid StyleBuilderFunctions::applyInitialCSSPropertyPerspectiveOrigin(StyleResolverState& state) 635aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch{ 636aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch applyInitialCSSPropertyWebkitPerspectiveOriginX(state); 637aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch applyInitialCSSPropertyWebkitPerspectiveOriginY(state); 638aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch} 639aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch 640aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdochvoid StyleBuilderFunctions::applyInheritCSSPropertyPerspectiveOrigin(StyleResolverState& state) 641aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch{ 642aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch applyInheritCSSPropertyWebkitPerspectiveOriginX(state); 643aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch applyInheritCSSPropertyWebkitPerspectiveOriginY(state); 644aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch} 645aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch 646aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdochvoid StyleBuilderFunctions::applyValueCSSPropertyPerspectiveOrigin(StyleResolverState& state, CSSValue* value) 647aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch{ 648aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch CSSValueList* list = toCSSValueList(value); 649aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch ASSERT(list->length() == 2); 650aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(list->item(0)); 651aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch if (primitiveValue->isValueID()) { 652aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch switch (primitiveValue->getValueID()) { 653aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch case CSSValueLeft: 654aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch state.style()->setPerspectiveOriginX(Length(0, Percent)); 655aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch break; 656aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch case CSSValueRight: 657aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch state.style()->setPerspectiveOriginX(Length(100, Percent)); 658aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch break; 659aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch case CSSValueCenter: 660aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch state.style()->setPerspectiveOriginX(Length(50, Percent)); 661aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch break; 662aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch default: 663aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch ASSERT_NOT_REACHED(); 664aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch } 665aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch } else { 666aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch state.style()->setPerspectiveOriginX(StyleBuilderConverter::convertLength(state, primitiveValue)); 667aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch } 668aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch 669aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch primitiveValue = toCSSPrimitiveValue(list->item(1)); 670aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch if (primitiveValue->isValueID()) { 671aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch switch (primitiveValue->getValueID()) { 672aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch case CSSValueTop: 673aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch state.style()->setPerspectiveOriginY(Length(0, Percent)); 674aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch break; 675aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch case CSSValueBottom: 676aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch state.style()->setPerspectiveOriginY(Length(100, Percent)); 677aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch break; 678aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch case CSSValueCenter: 679aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch state.style()->setPerspectiveOriginY(Length(50, Percent)); 680aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch break; 681aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch default: 682aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch ASSERT_NOT_REACHED(); 683aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch } 684aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch } else { 685aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch state.style()->setPerspectiveOriginY(StyleBuilderConverter::convertLength(state, primitiveValue)); 686aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch } 687aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch} 688aafa69cb17c9d6606c07663ade5f81388a2c5986Ben Murdoch 689d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)void StyleBuilderFunctions::applyInheritCSSPropertyVerticalAlign(StyleResolverState& state) 690d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles){ 691d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) EVerticalAlign verticalAlign = state.parentStyle()->verticalAlign(); 692d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) state.style()->setVerticalAlign(verticalAlign); 693d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) if (verticalAlign == LENGTH) 694d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) state.style()->setVerticalAlignLength(state.parentStyle()->verticalAlignLength()); 695d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)} 696d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) 697f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)void StyleBuilderFunctions::applyValueCSSPropertyVerticalAlign(StyleResolverState& state, CSSValue* value) 698e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch{ 699e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch if (!value->isPrimitiveValue()) 700e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch return; 701e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 702e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); 703e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 704d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) if (primitiveValue->getValueID()) { 705d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) state.style()->setVerticalAlign(*primitiveValue); 706d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) return; 707d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) } 708e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 709a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) state.style()->setVerticalAlignLength(primitiveValue->convertToLength<FixedConversion | PercentConversion>(state.cssToLengthConversionData())); 710e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch} 711e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 712e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdochstatic void resetEffectiveZoom(StyleResolverState& state) 7135267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles){ 7145267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) // Reset the zoom in effect. This allows the setZoom method to accurately compute a new zoom in effect. 715e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch state.setEffectiveZoom(state.parentStyle() ? state.parentStyle()->effectiveZoom() : RenderStyle::initialZoom()); 7165267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)} 7175267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 718f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)void StyleBuilderFunctions::applyInitialCSSPropertyZoom(StyleResolverState& state) 7195267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles){ 720e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch resetEffectiveZoom(state); 721e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch state.setZoom(RenderStyle::initialZoom()); 7225267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)} 7235267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 724f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)void StyleBuilderFunctions::applyInheritCSSPropertyZoom(StyleResolverState& state) 7255267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles){ 726e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch resetEffectiveZoom(state); 727e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch state.setZoom(state.parentStyle()->zoom()); 7285267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)} 7295267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 730f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)void StyleBuilderFunctions::applyValueCSSPropertyZoom(StyleResolverState& state, CSSValue* value) 7315267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles){ 7325267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) ASSERT_WITH_SECURITY_IMPLICATION(value->isPrimitiveValue()); 7335267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); 7345267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 7355267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) if (primitiveValue->getValueID() == CSSValueNormal) { 736e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch resetEffectiveZoom(state); 737e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch state.setZoom(RenderStyle::initialZoom()); 7385267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) } else if (primitiveValue->getValueID() == CSSValueReset) { 739e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch state.setEffectiveZoom(RenderStyle::initialZoom()); 740e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch state.setZoom(RenderStyle::initialZoom()); 7415267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) } else if (primitiveValue->getValueID() == CSSValueDocument) { 742e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch float docZoom = state.rootElementStyle() ? state.rootElementStyle()->zoom() : RenderStyle::initialZoom(); 743e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch state.setEffectiveZoom(docZoom); 744e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch state.setZoom(docZoom); 7455267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) } else if (primitiveValue->isPercentage()) { 746e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch resetEffectiveZoom(state); 7475267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) if (float percent = primitiveValue->getFloatValue()) 748e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch state.setZoom(percent / 100.0f); 7495267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) } else if (primitiveValue->isNumber()) { 750e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch resetEffectiveZoom(state); 7515267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) if (float number = primitiveValue->getFloatValue()) 752e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch state.setZoom(number); 753e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch } 754e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch} 755e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 756f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)void StyleBuilderFunctions::applyInitialCSSPropertyWebkitAspectRatio(StyleResolverState& state) 757e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch{ 758e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch state.style()->setHasAspectRatio(RenderStyle::initialHasAspectRatio()); 759e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch state.style()->setAspectRatioDenominator(RenderStyle::initialAspectRatioDenominator()); 760e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch state.style()->setAspectRatioNumerator(RenderStyle::initialAspectRatioNumerator()); 761e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch} 762e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 763f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)void StyleBuilderFunctions::applyInheritCSSPropertyWebkitAspectRatio(StyleResolverState& state) 764e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch{ 765e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch if (!state.parentStyle()->hasAspectRatio()) 766e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch return; 767e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch state.style()->setHasAspectRatio(true); 768e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch state.style()->setAspectRatioDenominator(state.parentStyle()->aspectRatioDenominator()); 769e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch state.style()->setAspectRatioNumerator(state.parentStyle()->aspectRatioNumerator()); 770e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch} 771e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 772f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)void StyleBuilderFunctions::applyValueCSSPropertyWebkitAspectRatio(StyleResolverState& state, CSSValue* value) 773e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch{ 774e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch if (!value->isAspectRatioValue()) { 775e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch state.style()->setHasAspectRatio(false); 776e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch return; 777e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch } 77806f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles) CSSAspectRatioValue* aspectRatioValue = toCSSAspectRatioValue(value); 779e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch state.style()->setHasAspectRatio(true); 780e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch state.style()->setAspectRatioDenominator(aspectRatioValue->denominatorValue()); 781e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch state.style()->setAspectRatioNumerator(aspectRatioValue->numeratorValue()); 782e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch} 783e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 784a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)void StyleBuilderFunctions::applyValueCSSPropertyWebkitBorderImage(StyleResolverState& state, CSSValue* value) 785a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles){ 786a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) NinePieceImage image; 787a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) state.styleMap().mapNinePieceImage(state.style(), CSSPropertyWebkitBorderImage, value, image); 788a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) state.style()->setBorderImage(image); 789a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)} 790a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) 791f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)void StyleBuilderFunctions::applyValueCSSPropertyWebkitClipPath(StyleResolverState& state, CSSValue* value) 792e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch{ 793e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch if (value->isPrimitiveValue()) { 794e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); 795e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch if (primitiveValue->getValueID() == CSSValueNone) { 796d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) state.style()->setClipPath(nullptr); 797e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch } else if (primitiveValue->isShape()) { 798e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch state.style()->setClipPath(ShapeClipPathOperation::create(basicShapeForValue(state, primitiveValue->getShapeValue()))); 799e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch } else if (primitiveValue->primitiveType() == CSSPrimitiveValue::CSS_URI) { 800e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch String cssURLValue = primitiveValue->getStringValue(); 8018abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) KURL url = state.document().completeURL(cssURLValue); 802e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch // FIXME: It doesn't work with forward or external SVG references (see https://bugs.webkit.org/show_bug.cgi?id=90405) 80309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) state.style()->setClipPath(ReferenceClipPathOperation::create(cssURLValue, AtomicString(url.fragmentIdentifier()))); 804e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch } 805e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch } 806e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch} 807e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 808323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)void StyleBuilderFunctions::applyValueCSSPropertyWebkitFilter(StyleResolverState& state, CSSValue* value) 809323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles){ 810323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) FilterOperations operations; 811323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) if (FilterOperationResolver::createFilterOperations(value, state.cssToLengthConversionData(), operations, state)) 812323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) state.style()->setFilter(operations); 813323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)} 814323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) 815f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)void StyleBuilderFunctions::applyInitialCSSPropertyWebkitTextEmphasisStyle(StyleResolverState& state) 816e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch{ 817e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch state.style()->setTextEmphasisFill(RenderStyle::initialTextEmphasisFill()); 818e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch state.style()->setTextEmphasisMark(RenderStyle::initialTextEmphasisMark()); 819e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch state.style()->setTextEmphasisCustomMark(RenderStyle::initialTextEmphasisCustomMark()); 820e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch} 821e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 822f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)void StyleBuilderFunctions::applyInheritCSSPropertyWebkitTextEmphasisStyle(StyleResolverState& state) 823e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch{ 824e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch state.style()->setTextEmphasisFill(state.parentStyle()->textEmphasisFill()); 825e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch state.style()->setTextEmphasisMark(state.parentStyle()->textEmphasisMark()); 826e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch state.style()->setTextEmphasisCustomMark(state.parentStyle()->textEmphasisCustomMark()); 827e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch} 828e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 829f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)void StyleBuilderFunctions::applyValueCSSPropertyWebkitTextEmphasisStyle(StyleResolverState& state, CSSValue* value) 830e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch{ 831e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch if (value->isValueList()) { 832e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch CSSValueList* list = toCSSValueList(value); 833e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch ASSERT(list->length() == 2); 834e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch if (list->length() != 2) 835e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch return; 836e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch for (unsigned i = 0; i < 2; ++i) { 837197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch CSSValue* item = list->item(i); 838e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch if (!item->isPrimitiveValue()) 839e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch continue; 840e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 841e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch CSSPrimitiveValue* value = toCSSPrimitiveValue(item); 842e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch if (value->getValueID() == CSSValueFilled || value->getValueID() == CSSValueOpen) 843e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch state.style()->setTextEmphasisFill(*value); 844e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch else 845e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch state.style()->setTextEmphasisMark(*value); 846e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch } 847e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch state.style()->setTextEmphasisCustomMark(nullAtom); 848e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch return; 849e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch } 850e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 851e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch if (!value->isPrimitiveValue()) 852e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch return; 853e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); 854e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 855e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch if (primitiveValue->isString()) { 856e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch state.style()->setTextEmphasisFill(TextEmphasisFillFilled); 857e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch state.style()->setTextEmphasisMark(TextEmphasisMarkCustom); 858a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) state.style()->setTextEmphasisCustomMark(AtomicString(primitiveValue->getStringValue())); 859e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch return; 860e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch } 861e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 862e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch state.style()->setTextEmphasisCustomMark(nullAtom); 863e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 864e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch if (primitiveValue->getValueID() == CSSValueFilled || primitiveValue->getValueID() == CSSValueOpen) { 865e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch state.style()->setTextEmphasisFill(*primitiveValue); 866e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch state.style()->setTextEmphasisMark(TextEmphasisMarkAuto); 867e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch } else { 868e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch state.style()->setTextEmphasisFill(TextEmphasisFillFilled); 869e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch state.style()->setTextEmphasisMark(*primitiveValue); 870e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch } 871e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch} 872e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 873d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)void StyleBuilderFunctions::applyInitialCSSPropertyWillChange(StyleResolverState& state) 874d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles){ 875d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) state.style()->setWillChangeContents(false); 876d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) state.style()->setWillChangeScrollPosition(false); 877d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) state.style()->setWillChangeProperties(Vector<CSSPropertyID>()); 878f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) state.style()->setSubtreeWillChangeContents(state.parentStyle()->subtreeWillChangeContents()); 879d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)} 880d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 881d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)void StyleBuilderFunctions::applyInheritCSSPropertyWillChange(StyleResolverState& state) 882d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles){ 883d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) state.style()->setWillChangeContents(state.parentStyle()->willChangeContents()); 884d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) state.style()->setWillChangeScrollPosition(state.parentStyle()->willChangeScrollPosition()); 885d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) state.style()->setWillChangeProperties(state.parentStyle()->willChangeProperties()); 886f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) state.style()->setSubtreeWillChangeContents(state.parentStyle()->subtreeWillChangeContents()); 887d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)} 888d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 889d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)void StyleBuilderFunctions::applyValueCSSPropertyWillChange(StyleResolverState& state, CSSValue* value) 890d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles){ 891d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) ASSERT(value->isValueList()); 892d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) bool willChangeContents = false; 893d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) bool willChangeScrollPosition = false; 894d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) Vector<CSSPropertyID> willChangeProperties; 895d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 896d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) for (CSSValueListIterator i(value); i.hasMore(); i.advance()) { 897d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(i.value()); 898d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) if (CSSPropertyID propertyID = primitiveValue->getPropertyID()) 899d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) willChangeProperties.append(propertyID); 900d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) else if (primitiveValue->getValueID() == CSSValueContents) 901d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) willChangeContents = true; 902d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) else if (primitiveValue->getValueID() == CSSValueScrollPosition) 903d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) willChangeScrollPosition = true; 904d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) else 905d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) ASSERT_NOT_REACHED(); 906d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) } 907d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) state.style()->setWillChangeContents(willChangeContents); 908d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) state.style()->setWillChangeScrollPosition(willChangeScrollPosition); 909d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) state.style()->setWillChangeProperties(willChangeProperties); 910f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) state.style()->setSubtreeWillChangeContents(willChangeContents || state.parentStyle()->subtreeWillChangeContents()); 911d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)} 912d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 913d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)void StyleBuilderFunctions::applyInitialCSSPropertyContent(StyleResolverState& state) 914e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch{ 915d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) state.style()->clearContent(); 916e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch} 917e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 918d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)void StyleBuilderFunctions::applyInheritCSSPropertyContent(StyleResolverState&) 919f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles){ 920d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) // FIXME: In CSS3, it will be possible to inherit content. In CSS2 it is not. This 921d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) // note is a reminder that eventually "inherit" needs to be supported. 922f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)} 923f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) 924d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)void StyleBuilderFunctions::applyValueCSSPropertyContent(StyleResolverState& state, CSSValue* value) 925f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles){ 926d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) // list of string, uri, counter, attr, i 927f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) 928d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) if (!value->isValueList()) 929f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) return; 930f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) 931d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) bool didSet = false; 932d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) for (CSSValueListIterator i = value; i.hasMore(); i.advance()) { 933d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) CSSValue* item = i.value(); 934d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) if (item->isImageGeneratorValue()) { 935d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) if (item->isGradientValue()) 936d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) state.style()->setContent(StyleGeneratedImage::create(toCSSGradientValue(item)->gradientWithStylesResolved(state.document().textLinkColors(), state.style()->color()).get()), didSet); 937d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) else 938d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) state.style()->setContent(StyleGeneratedImage::create(toCSSImageGeneratorValue(item)), didSet); 939d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) didSet = true; 940d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) } else if (item->isImageSetValue()) { 941d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) state.style()->setContent(state.elementStyleResources().setOrPendingFromValue(CSSPropertyContent, toCSSImageSetValue(item)), didSet); 942d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) didSet = true; 943d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) } 9448abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) 945d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) if (item->isImageValue()) { 946d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) state.style()->setContent(state.elementStyleResources().cachedOrPendingFromValue(state.document(), CSSPropertyContent, toCSSImageValue(item)), didSet); 947d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) didSet = true; 948d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) continue; 949d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) } 950f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) 951d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) if (!item->isPrimitiveValue()) 952d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) continue; 953f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) 954d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) CSSPrimitiveValue* contentValue = toCSSPrimitiveValue(item); 955f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) 956d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) if (contentValue->isString()) { 957d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) state.style()->setContent(contentValue->getStringValue().impl(), didSet); 958d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) didSet = true; 959d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) } else if (contentValue->isAttr()) { 960d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) // FIXME: Can a namespace be specified for an attr(foo)? 961d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) if (state.style()->styleType() == NOPSEUDO) 962d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) state.style()->setUnique(); 963d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) else 964d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) state.parentStyle()->setUnique(); 965d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) QualifiedName attr(nullAtom, AtomicString(contentValue->getStringValue()), nullAtom); 966d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) const AtomicString& value = state.element()->getAttribute(attr); 967d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) state.style()->setContent(value.isNull() ? emptyString() : value.string(), didSet); 968d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) didSet = true; 969d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) // register the fact that the attribute value affects the style 970d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) state.contentAttrValues().append(attr.localName()); 971d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) } else if (contentValue->isCounter()) { 972d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) Counter* counterValue = contentValue->getCounterValue(); 973d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) EListStyleType listStyleType = NoneListStyle; 974d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) CSSValueID listStyleIdent = counterValue->listStyleIdent(); 975d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) if (listStyleIdent != CSSValueNone) 976d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) listStyleType = static_cast<EListStyleType>(listStyleIdent - CSSValueDisc); 977d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) OwnPtr<CounterContent> counter = adoptPtr(new CounterContent(AtomicString(counterValue->identifier()), listStyleType, AtomicString(counterValue->separator()))); 978d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) state.style()->setContent(counter.release(), didSet); 979d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) didSet = true; 980d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) } else { 981d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) switch (contentValue->getValueID()) { 982d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) case CSSValueOpenQuote: 983d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) state.style()->setContent(OPEN_QUOTE, didSet); 984d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) didSet = true; 985d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) break; 986d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) case CSSValueCloseQuote: 987d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) state.style()->setContent(CLOSE_QUOTE, didSet); 988d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) didSet = true; 989d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) break; 990d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) case CSSValueNoOpenQuote: 991d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) state.style()->setContent(NO_OPEN_QUOTE, didSet); 992d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) didSet = true; 993d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) break; 994d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) case CSSValueNoCloseQuote: 995d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) state.style()->setContent(NO_CLOSE_QUOTE, didSet); 996d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) didSet = true; 997d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) break; 998d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) default: 999d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) // normal and none do not have any effect. 1000d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) { } 1001d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) } 1002d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) } 1003d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) } 1004d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) if (!didSet) 1005d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) state.style()->clearContent(); 1006d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)} 1007f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) 1008d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)void StyleBuilderFunctions::applyInitialCSSPropertyFont(StyleResolverState&) 1009e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch{ 1010d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) ASSERT_NOT_REACHED(); 1011d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)} 1012e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 1013d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)void StyleBuilderFunctions::applyInheritCSSPropertyFont(StyleResolverState&) 1014d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles){ 1015d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) ASSERT_NOT_REACHED(); 1016d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)} 1017e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 1018d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)void StyleBuilderFunctions::applyValueCSSPropertyFont(StyleResolverState& state, CSSValue* value) 1019d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles){ 1020d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) // Only System Font identifiers should come through this method 1021d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) // all other values should have been handled when the shorthand 1022d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) // was expanded by the parser. 1023d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) // FIXME: System Font identifiers should not hijack this 1024d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) // short-hand CSSProperty like this (crbug.com/353932) 1025d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) state.style()->setLineHeight(RenderStyle::initialLineHeight()); 1026d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) state.setLineHeightValue(0); 1027d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) state.fontBuilder().fromSystemFont(toCSSPrimitiveValue(value)->getValueID(), state.style()->effectiveZoom()); 1028d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)} 1029e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 1030d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)void StyleBuilderFunctions::applyValueCSSPropertyWebkitLocale(StyleResolverState& state, CSSValue* value) 1031d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles){ 1032d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) if (!value->isPrimitiveValue()) 1033e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch return; 1034d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) const CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); 1035d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) if (primitiveValue->getValueID() == CSSValueAuto) 1036d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) state.style()->setLocale(nullAtom); 1037d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) else 1038d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) state.style()->setLocale(AtomicString(primitiveValue->getStringValue())); 1039d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) state.fontBuilder().setScript(state.style()->locale()); 1040d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)} 1041e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 1042d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)void StyleBuilderFunctions::applyInitialCSSPropertyWebkitAppRegion(StyleResolverState&) 1043d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles){ 1044d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)} 1045e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 1046d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)void StyleBuilderFunctions::applyInheritCSSPropertyWebkitAppRegion(StyleResolverState&) 1047d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles){ 1048d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)} 1049e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 1050d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)void StyleBuilderFunctions::applyValueCSSPropertyWebkitAppRegion(StyleResolverState& state, CSSValue* value) 1051d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles){ 1052d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) if (!value->isPrimitiveValue()) 1053e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch return; 1054d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) const CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); 1055d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) if (!primitiveValue->getValueID()) 1056e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch return; 1057d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) state.style()->setDraggableRegionMode(primitiveValue->getValueID() == CSSValueDrag ? DraggableRegionDrag : DraggableRegionNoDrag); 1058d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) state.document().setHasAnnotatedRegions(true); 1059d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)} 1060e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 1061d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)void StyleBuilderFunctions::applyInitialCSSPropertyWebkitPerspective(StyleResolverState& state) 1062d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles){ 1063d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) applyInitialCSSPropertyPerspective(state); 1064d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)} 1065e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 1066d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)void StyleBuilderFunctions::applyInheritCSSPropertyWebkitPerspective(StyleResolverState& state) 1067d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles){ 1068d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) applyInheritCSSPropertyPerspective(state); 1069d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)} 1070e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 1071d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)void StyleBuilderFunctions::applyValueCSSPropertyWebkitPerspective(StyleResolverState& state, CSSValue* value) 1072d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles){ 1073d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) if (!value->isPrimitiveValue()) 1074d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) return; 1075d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); 1076d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) if (primitiveValue->isNumber()) { 1077d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) float perspectiveValue = CSSPrimitiveValue::create(primitiveValue->getDoubleValue(), CSSPrimitiveValue::CSS_PX)->computeLength<float>(state.cssToLengthConversionData()); 1078e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch if (perspectiveValue >= 0.0f) 1079e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch state.style()->setPerspective(perspectiveValue); 1080d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) } else { 1081d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) applyValueCSSPropertyPerspective(state, value); 1082e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch } 1083d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)} 1084e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 1085d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)void StyleBuilderFunctions::applyValueCSSPropertyPerspective(StyleResolverState& state, CSSValue* value) 1086d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles){ 1087d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) if (!value->isPrimitiveValue()) 1088d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) return; 1089d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); 1090d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) if (primitiveValue->getValueID() == CSSValueNone) { 1091d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) state.style()->setPerspective(0); 1092e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch return; 1093e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch } 1094e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 1095d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) if (!primitiveValue->isLength()) 1096d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) return; 1097d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) float perspectiveValue = primitiveValue->computeLength<float>(state.cssToLengthConversionData()); 1098d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) if (perspectiveValue >= 0.0f) 1099d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) state.style()->setPerspective(perspectiveValue); 1100d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)} 1101e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 1102d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)void StyleBuilderFunctions::applyValueCSSPropertyWebkitWritingMode(StyleResolverState& state, CSSValue* value) 1103d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles){ 1104d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) if (value->isPrimitiveValue()) 1105d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) state.setWritingMode(*toCSSPrimitiveValue(value)); 1106e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 1107d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) // FIXME: It is not ok to modify document state while applying style. 1108d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) if (state.element() && state.element() == state.document().documentElement()) 1109d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) state.document().setWritingModeSetOnDocumentElement(true); 1110d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)} 1111e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 1112d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)void StyleBuilderFunctions::applyValueCSSPropertyWebkitTextOrientation(StyleResolverState& state, CSSValue* value) 1113d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles){ 1114d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) if (value->isPrimitiveValue()) 1115d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) state.setTextOrientation(*toCSSPrimitiveValue(value)); 1116d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)} 1117e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch 1118197021e6b966cfb06891637935ef33fff06433d1Ben Murdochvoid StyleBuilderFunctions::applyInheritCSSPropertyBaselineShift(StyleResolverState& state) 1119197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch{ 1120197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch const SVGRenderStyle& parentSvgStyle = state.parentStyle()->svgStyle(); 1121197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch EBaselineShift baselineShift = parentSvgStyle.baselineShift(); 1122197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch SVGRenderStyle& svgStyle = state.style()->accessSVGStyle(); 1123197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch svgStyle.setBaselineShift(baselineShift); 1124197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch if (baselineShift == BS_LENGTH) 1125197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch svgStyle.setBaselineShiftValue(parentSvgStyle.baselineShiftValue()); 1126197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch} 1127f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) 1128d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles)void StyleBuilderFunctions::applyValueCSSPropertyBaselineShift(StyleResolverState& state, CSSValue* value) 1129d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles){ 1130197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch SVGRenderStyle& svgStyle = state.style()->accessSVGStyle(); 1131d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); 11327242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci if (!primitiveValue->isValueID()) { 1133197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch svgStyle.setBaselineShift(BS_LENGTH); 1134197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch svgStyle.setBaselineShiftValue(SVGLength::fromCSSPrimitiveValue(primitiveValue)); 11357242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci return; 11367242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci } 11377242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci switch (primitiveValue->getValueID()) { 11387242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci case CSSValueBaseline: 11397242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci svgStyle.setBaselineShift(BS_BASELINE); 11407242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci return; 11417242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci case CSSValueSub: 11427242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci svgStyle.setBaselineShift(BS_SUB); 11437242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci return; 11447242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci case CSSValueSuper: 11457242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci svgStyle.setBaselineShift(BS_SUPER); 11467242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci return; 11477242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci default: 11487242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci ASSERT_NOT_REACHED(); 11495267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) } 11505267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)} 11515267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 1152197021e6b966cfb06891637935ef33fff06433d1Ben Murdochvoid StyleBuilderFunctions::applyValueCSSPropertyGridAutoFlow(StyleResolverState& state, CSSValue* value) 1153197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch{ 1154197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch ASSERT(value->isValueList()); 1155197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch CSSValueList* list = toCSSValueList(value); 1156197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch 1157197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch CSSPrimitiveValue* first = list->length() >= 1 ? toCSSPrimitiveValue(list->item(0)) : nullptr; 1158197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch 1159197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch if (!first) { 1160197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch applyInitialCSSPropertyGridAutoFlow(state); 1161197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch return; 1162197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch } 1163197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch 1164197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch CSSPrimitiveValue* second = list->length() == 2 ? toCSSPrimitiveValue(list->item(1)) : nullptr; 1165197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch 1166197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch GridAutoFlow autoFlow = RenderStyle::initialGridAutoFlow(); 1167197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch switch (first->getValueID()) { 1168197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch case CSSValueRow: 1169197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch if (second) { 1170197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch if (second->getValueID() == CSSValueDense) 1171197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch autoFlow = AutoFlowRowDense; 1172197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch else 1173197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch autoFlow = AutoFlowStackRow; 1174197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch } else { 1175197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch autoFlow = AutoFlowRow; 1176197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch } 1177197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch break; 1178197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch case CSSValueColumn: 1179197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch if (second) { 1180197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch if (second->getValueID() == CSSValueDense) 1181197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch autoFlow = AutoFlowColumnDense; 1182197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch else 1183197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch autoFlow = AutoFlowStackColumn; 1184197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch } else { 1185197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch autoFlow = AutoFlowColumn; 1186197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch } 1187197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch break; 1188197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch case CSSValueDense: 1189197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch if (second && second->getValueID() == CSSValueColumn) 1190197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch autoFlow = AutoFlowColumnDense; 1191197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch else 1192197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch autoFlow = AutoFlowRowDense; 1193197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch break; 1194197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch case CSSValueStack: 1195197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch if (second && second->getValueID() == CSSValueColumn) 1196197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch autoFlow = AutoFlowStackColumn; 1197197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch else 1198197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch autoFlow = AutoFlowStackRow; 1199197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch break; 1200197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch default: 1201197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch ASSERT_NOT_REACHED(); 1202197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch break; 1203197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch } 1204197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch 1205197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch state.style()->setGridAutoFlow(autoFlow); 1206197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch} 1207197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch 1208c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)} // namespace blink 1209