| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2013 Google Inc. All rights reserved. | 2 * Copyright (C) 2013 Google Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * * Redistributions of source code must retain the above copyright | 4 * * Redistributions of source code must retain the above copyright |
| 5 * notice, this list of conditions and the following disclaimer. | 5 * notice, this list of conditions and the following disclaimer. |
| 6 * * Redistributions in binary form must reproduce the above | 6 * * Redistributions in binary form must reproduce the above |
| 7 * copyright notice, this list of conditions and the following disclaimer | 7 * copyright notice, this list of conditions and the following disclaimer |
| 8 * in the documentation and/or other materials provided with the | 8 * in the documentation and/or other materials provided with the |
| 9 * distribution. | 9 * distribution. |
| 10 * * Neither the name of Google Inc. nor the names of its | 10 * * Neither the name of Google Inc. nor the names of its |
| (...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 110 CSSValueList* list = toCSSValueList(value); | 110 CSSValueList* list = toCSSValueList(value); |
| 111 RefPtr<FontFeatureSettings> settings = FontFeatureSettings::create(); | 111 RefPtr<FontFeatureSettings> settings = FontFeatureSettings::create(); |
| 112 int len = list->length(); | 112 int len = list->length(); |
| 113 for (int i = 0; i < len; ++i) { | 113 for (int i = 0; i < len; ++i) { |
| 114 CSSFontFeatureValue* feature = toCSSFontFeatureValue(list->item(i)); | 114 CSSFontFeatureValue* feature = toCSSFontFeatureValue(list->item(i)); |
| 115 settings->append(FontFeature(feature->tag(), feature->value())); | 115 settings->append(FontFeature(feature->tag(), feature->value())); |
| 116 } | 116 } |
| 117 return settings; | 117 return settings; |
| 118 } | 118 } |
| 119 | 119 |
| 120 class RedirectSetHasViewportUnits { |
| 121 public: |
| 122 RedirectSetHasViewportUnits(RenderStyle* from, RenderStyle* to) |
| 123 : m_from(from), m_to(to), m_hadViewportUnits(from->hasViewportUnits()) |
| 124 { |
| 125 from->setHasViewportUnits(false); |
| 126 } |
| 127 ~RedirectSetHasViewportUnits() |
| 128 { |
| 129 m_to->setHasViewportUnits(m_from->hasViewportUnits()); |
| 130 m_from->setHasViewportUnits(m_hadViewportUnits); |
| 131 } |
| 132 private: |
| 133 RenderStyle* m_from; |
| 134 RenderStyle* m_to; |
| 135 bool m_hadViewportUnits; |
| 136 }; |
| 137 |
| 138 static float computeFontSize(StyleResolverState& state, CSSPrimitiveValue* primi
tiveValue, const FontDescription::Size& parentSize) |
| 139 { |
| 140 RedirectSetHasViewportUnits redirect(state.parentStyle(), state.style()); |
| 141 |
| 142 CSSToLengthConversionData conversionData(state.parentStyle(), state.rootElem
entStyle(), state.document().renderView(), 1.0f, true); |
| 143 if (primitiveValue->isLength()) |
| 144 return primitiveValue->computeLength<float>(conversionData); |
| 145 if (primitiveValue->isCalculatedPercentageWithLength()) |
| 146 return primitiveValue->cssCalcValue()->toCalcValue(conversionData)->eval
uate(parentSize.value); |
| 147 |
| 148 ASSERT_NOT_REACHED(); |
| 149 return 0; |
| 150 } |
| 151 |
| 152 FontDescription::Size StyleBuilderConverter::convertFontSize(StyleResolverState&
state, CSSValue* value) |
| 153 { |
| 154 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); |
| 155 |
| 156 FontDescription::Size parentSize(0, 0.0f, false); |
| 157 |
| 158 // FIXME: Find out when parentStyle could be 0? |
| 159 if (state.parentStyle()) |
| 160 parentSize = state.parentFontDescription().size(); |
| 161 |
| 162 if (CSSValueID valueID = primitiveValue->getValueID()) { |
| 163 switch (valueID) { |
| 164 case CSSValueXxSmall: |
| 165 case CSSValueXSmall: |
| 166 case CSSValueSmall: |
| 167 case CSSValueMedium: |
| 168 case CSSValueLarge: |
| 169 case CSSValueXLarge: |
| 170 case CSSValueXxLarge: |
| 171 case CSSValueWebkitXxxLarge: |
| 172 return FontDescription::Size(FontSize::keywordSize(valueID), 0.0f, f
alse); |
| 173 case CSSValueLarger: |
| 174 return FontDescription::largerSize(parentSize); |
| 175 case CSSValueSmaller: |
| 176 return FontDescription::smallerSize(parentSize); |
| 177 default: |
| 178 ASSERT_NOT_REACHED(); |
| 179 return FontBuilder::initialSize(); |
| 180 } |
| 181 } |
| 182 |
| 183 bool parentIsAbsoluteSize = state.parentFontDescription().isAbsoluteSize(); |
| 184 |
| 185 if (primitiveValue->isPercentage()) |
| 186 return FontDescription::Size(0, (primitiveValue->getFloatValue() * paren
tSize.value / 100.0f), parentIsAbsoluteSize); |
| 187 |
| 188 return FontDescription::Size(0, computeFontSize(state, primitiveValue, paren
tSize), parentIsAbsoluteSize || !primitiveValue->isFontRelativeLength()); |
| 189 } |
| 190 |
| 120 FontWeight StyleBuilderConverter::convertFontWeight(StyleResolverState& state, C
SSValue* value) | 191 FontWeight StyleBuilderConverter::convertFontWeight(StyleResolverState& state, C
SSValue* value) |
| 121 { | 192 { |
| 122 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); | 193 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); |
| 123 switch (primitiveValue->getValueID()) { | 194 switch (primitiveValue->getValueID()) { |
| 124 case CSSValueBolder: | 195 case CSSValueBolder: |
| 125 return FontDescription::bolderWeight(state.parentStyle()->fontDescriptio
n().weight()); | 196 return FontDescription::bolderWeight(state.parentStyle()->fontDescriptio
n().weight()); |
| 126 case CSSValueLighter: | 197 case CSSValueLighter: |
| 127 return FontDescription::lighterWeight(state.parentStyle()->fontDescripti
on().weight()); | 198 return FontDescription::lighterWeight(state.parentStyle()->fontDescripti
on().weight()); |
| 128 default: | 199 default: |
| 129 return *primitiveValue; | 200 return *primitiveValue; |
| (...skipping 414 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 544 { | 615 { |
| 545 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); | 616 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); |
| 546 if (primitiveValue->getValueID()) { | 617 if (primitiveValue->getValueID()) { |
| 547 float multiplier = convertLineWidth<float>(state, value); | 618 float multiplier = convertLineWidth<float>(state, value); |
| 548 return CSSPrimitiveValue::create(multiplier / 48, CSSPrimitiveValue::CSS
_EMS)->computeLength<float>(state.cssToLengthConversionData()); | 619 return CSSPrimitiveValue::create(multiplier / 48, CSSPrimitiveValue::CSS
_EMS)->computeLength<float>(state.cssToLengthConversionData()); |
| 549 } | 620 } |
| 550 return primitiveValue->computeLength<float>(state.cssToLengthConversionData(
)); | 621 return primitiveValue->computeLength<float>(state.cssToLengthConversionData(
)); |
| 551 } | 622 } |
| 552 | 623 |
| 553 } // namespace blink | 624 } // namespace blink |
| OLD | NEW |