| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2008 Apple Inc. All rights reserved. | 2 * Copyright (C) 2008 Apple Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions | 5 * modification, are permitted provided that the following conditions |
| 6 * are met: | 6 * are met: |
| 7 * 1. Redistributions of source code must retain the above copyright | 7 * 1. Redistributions of source code must retain the above copyright |
| 8 * notice, this list of conditions and the following disclaimer. | 8 * notice, this list of conditions and the following disclaimer. |
| 9 * 2. Redistributions in binary form must reproduce the above copyright | 9 * 2. Redistributions in binary form must reproduce the above copyright |
| 10 * notice, this list of conditions and the following disclaimer in the | 10 * notice, this list of conditions and the following disclaimer in the |
| (...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 98 Color color; | 98 Color color; |
| 99 float offset; | 99 float offset; |
| 100 bool specified; | 100 bool specified; |
| 101 | 101 |
| 102 GradientStop() | 102 GradientStop() |
| 103 : offset(0) | 103 : offset(0) |
| 104 , specified(false) | 104 , specified(false) |
| 105 { } | 105 { } |
| 106 }; | 106 }; |
| 107 | 107 |
| 108 PassRefPtr<CSSGradientValue> CSSGradientValue::gradientWithStylesResolved(const
TextLinkColors& textLinkColors) | 108 PassRefPtr<CSSGradientValue> CSSGradientValue::gradientWithStylesResolved(const
TextLinkColors& textLinkColors, Color currentColor) |
| 109 { | 109 { |
| 110 bool derived = false; | 110 bool derived = false; |
| 111 for (unsigned i = 0; i < m_stops.size(); i++) | 111 for (unsigned i = 0; i < m_stops.size(); i++) |
| 112 if (m_stops[i].m_color->colorIsDerivedFromElement()) { | 112 if (m_stops[i].m_color->colorIsDerivedFromElement()) { |
| 113 m_stops[i].m_colorIsDerivedFromElement = true; | 113 m_stops[i].m_colorIsDerivedFromElement = true; |
| 114 derived = true; | 114 derived = true; |
| 115 break; | 115 break; |
| 116 } | 116 } |
| 117 | 117 |
| 118 RefPtr<CSSGradientValue> result; | 118 RefPtr<CSSGradientValue> result; |
| 119 if (!derived) | 119 if (!derived) |
| 120 result = this; | 120 result = this; |
| 121 else if (isLinearGradient()) | 121 else if (isLinearGradient()) |
| 122 result = static_cast<CSSLinearGradientValue*>(this)->clone(); | 122 result = static_cast<CSSLinearGradientValue*>(this)->clone(); |
| 123 else if (isRadialGradient()) | 123 else if (isRadialGradient()) |
| 124 result = static_cast<CSSRadialGradientValue*>(this)->clone(); | 124 result = static_cast<CSSRadialGradientValue*>(this)->clone(); |
| 125 else { | 125 else { |
| 126 ASSERT_NOT_REACHED(); | 126 ASSERT_NOT_REACHED(); |
| 127 return 0; | 127 return 0; |
| 128 } | 128 } |
| 129 | 129 |
| 130 for (unsigned i = 0; i < result->m_stops.size(); i++) | 130 for (unsigned i = 0; i < result->m_stops.size(); i++) |
| 131 result->m_stops[i].m_resolvedColor = textLinkColors.colorFromPrimitiveVa
lue(result->m_stops[i].m_color.get()); | 131 result->m_stops[i].m_resolvedColor = textLinkColors.colorFromPrimitiveVa
lue(result->m_stops[i].m_color.get(), currentColor); |
| 132 | 132 |
| 133 return result.release(); | 133 return result.release(); |
| 134 } | 134 } |
| 135 | 135 |
| 136 void CSSGradientValue::addStops(Gradient* gradient, RenderObject* renderer, Rend
erStyle* rootStyle, float maxLengthForRepeat) | 136 void CSSGradientValue::addStops(Gradient* gradient, RenderObject* renderer, Rend
erStyle* rootStyle, float maxLengthForRepeat) |
| 137 { | 137 { |
| 138 RenderStyle* style = renderer->style(); | 138 RenderStyle* style = renderer->style(); |
| 139 | 139 |
| 140 if (m_gradientType == CSSDeprecatedLinearGradient || m_gradientType == CSSDe
precatedRadialGradient) { | 140 if (m_gradientType == CSSDeprecatedLinearGradient || m_gradientType == CSSDe
precatedRadialGradient) { |
| 141 sortStopsIfNeeded(); | 141 sortStopsIfNeeded(); |
| 142 | 142 |
| 143 for (unsigned i = 0; i < m_stops.size(); i++) { | 143 for (unsigned i = 0; i < m_stops.size(); i++) { |
| 144 const CSSGradientColorStop& stop = m_stops[i]; | 144 const CSSGradientColorStop& stop = m_stops[i]; |
| 145 | 145 |
| 146 float offset; | 146 float offset; |
| 147 if (stop.m_position->isPercentage()) | 147 if (stop.m_position->isPercentage()) |
| 148 offset = stop.m_position->getFloatValue(CSSPrimitiveValue::CSS_P
ERCENTAGE) / 100; | 148 offset = stop.m_position->getFloatValue(CSSPrimitiveValue::CSS_P
ERCENTAGE) / 100; |
| 149 else | 149 else |
| 150 offset = stop.m_position->getFloatValue(CSSPrimitiveValue::CSS_N
UMBER); | 150 offset = stop.m_position->getFloatValue(CSSPrimitiveValue::CSS_N
UMBER); |
| 151 | 151 |
| 152 gradient->addColorStop(offset, renderer->resolveColor(stop.m_resolve
dColor)); | 152 gradient->addColorStop(offset, stop.m_resolvedColor); |
| 153 } | 153 } |
| 154 | 154 |
| 155 // The back end already sorted the stops. | 155 // The back end already sorted the stops. |
| 156 gradient->setStopsSorted(true); | 156 gradient->setStopsSorted(true); |
| 157 return; | 157 return; |
| 158 } | 158 } |
| 159 | 159 |
| 160 size_t numStops = m_stops.size(); | 160 size_t numStops = m_stops.size(); |
| 161 | 161 |
| 162 Vector<GradientStop> stops(numStops); | 162 Vector<GradientStop> stops(numStops); |
| 163 | 163 |
| 164 float gradientLength = 0; | 164 float gradientLength = 0; |
| 165 bool computedGradientLength = false; | 165 bool computedGradientLength = false; |
| 166 | 166 |
| 167 FloatPoint gradientStart = gradient->p0(); | 167 FloatPoint gradientStart = gradient->p0(); |
| 168 FloatPoint gradientEnd; | 168 FloatPoint gradientEnd; |
| 169 if (isLinearGradient()) | 169 if (isLinearGradient()) |
| 170 gradientEnd = gradient->p1(); | 170 gradientEnd = gradient->p1(); |
| 171 else if (isRadialGradient()) | 171 else if (isRadialGradient()) |
| 172 gradientEnd = gradientStart + FloatSize(gradient->endRadius(), 0); | 172 gradientEnd = gradientStart + FloatSize(gradient->endRadius(), 0); |
| 173 | 173 |
| 174 for (size_t i = 0; i < numStops; ++i) { | 174 for (size_t i = 0; i < numStops; ++i) { |
| 175 const CSSGradientColorStop& stop = m_stops[i]; | 175 const CSSGradientColorStop& stop = m_stops[i]; |
| 176 | 176 |
| 177 stops[i].color = renderer->resolveColor(stop.m_resolvedColor); | 177 stops[i].color = stop.m_resolvedColor; |
| 178 | 178 |
| 179 if (stop.m_position) { | 179 if (stop.m_position) { |
| 180 if (stop.m_position->isPercentage()) | 180 if (stop.m_position->isPercentage()) |
| 181 stops[i].offset = stop.m_position->getFloatValue(CSSPrimitiveVal
ue::CSS_PERCENTAGE) / 100; | 181 stops[i].offset = stop.m_position->getFloatValue(CSSPrimitiveVal
ue::CSS_PERCENTAGE) / 100; |
| 182 else if (stop.m_position->isLength() || stop.m_position->isCalculate
dPercentageWithLength()) { | 182 else if (stop.m_position->isLength() || stop.m_position->isCalculate
dPercentageWithLength()) { |
| 183 if (!computedGradientLength) { | 183 if (!computedGradientLength) { |
| 184 FloatSize gradientSize(gradientStart - gradientEnd); | 184 FloatSize gradientSize(gradientStart - gradientEnd); |
| 185 gradientLength = gradientSize.diagonalLength(); | 185 gradientLength = gradientSize.diagonalLength(); |
| 186 } | 186 } |
| 187 float length; | 187 float length; |
| (...skipping 976 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1164 equalHorizontalAndVerticalSize = compareCSSValuePtr(m_endHorizontalSize,
other.m_endHorizontalSize) && compareCSSValuePtr(m_endVerticalSize, other.m_end
VerticalSize); | 1164 equalHorizontalAndVerticalSize = compareCSSValuePtr(m_endHorizontalSize,
other.m_endHorizontalSize) && compareCSSValuePtr(m_endVerticalSize, other.m_end
VerticalSize); |
| 1165 else { | 1165 else { |
| 1166 equalShape = !other.m_shape; | 1166 equalShape = !other.m_shape; |
| 1167 equalSizingBehavior = !other.m_sizingBehavior; | 1167 equalSizingBehavior = !other.m_sizingBehavior; |
| 1168 equalHorizontalAndVerticalSize = !other.m_endHorizontalSize && !other.m_
endVerticalSize; | 1168 equalHorizontalAndVerticalSize = !other.m_endHorizontalSize && !other.m_
endVerticalSize; |
| 1169 } | 1169 } |
| 1170 return equalShape && equalSizingBehavior && equalHorizontalAndVerticalSize &
& m_stops == other.m_stops; | 1170 return equalShape && equalSizingBehavior && equalHorizontalAndVerticalSize &
& m_stops == other.m_stops; |
| 1171 } | 1171 } |
| 1172 | 1172 |
| 1173 } // namespace WebCore | 1173 } // namespace WebCore |
| OLD | NEW |