OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) | 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) |
3 * (C) 2004-2005 Allan Sandfeld Jensen (kde@carewolf.com) | 3 * (C) 2004-2005 Allan Sandfeld Jensen (kde@carewolf.com) |
4 * Copyright (C) 2006, 2007 Nicholas Shanks (webkit@nickshanks.com) | 4 * Copyright (C) 2006, 2007 Nicholas Shanks (webkit@nickshanks.com) |
5 * Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013 Apple Inc.
All rights reserved. | 5 * Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013 Apple Inc.
All rights reserved. |
6 * Copyright (C) 2007 Alexey Proskuryakov <ap@webkit.org> | 6 * Copyright (C) 2007 Alexey Proskuryakov <ap@webkit.org> |
7 * Copyright (C) 2007, 2008 Eric Seidel <eric@webkit.org> | 7 * Copyright (C) 2007, 2008 Eric Seidel <eric@webkit.org> |
8 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.t
orchmobile.com/) | 8 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.t
orchmobile.com/) |
9 * Copyright (c) 2011, Code Aurora Forum. All rights reserved. | 9 * Copyright (c) 2011, Code Aurora Forum. All rights reserved. |
10 * Copyright (C) Research In Motion Limited 2011. All rights reserved. | 10 * Copyright (C) Research In Motion Limited 2011. All rights reserved. |
(...skipping 25 matching lines...) Expand all Loading... |
36 #include "platform/transforms/MatrixTransformOperation.h" | 36 #include "platform/transforms/MatrixTransformOperation.h" |
37 #include "platform/transforms/PerspectiveTransformOperation.h" | 37 #include "platform/transforms/PerspectiveTransformOperation.h" |
38 #include "platform/transforms/RotateTransformOperation.h" | 38 #include "platform/transforms/RotateTransformOperation.h" |
39 #include "platform/transforms/ScaleTransformOperation.h" | 39 #include "platform/transforms/ScaleTransformOperation.h" |
40 #include "platform/transforms/SkewTransformOperation.h" | 40 #include "platform/transforms/SkewTransformOperation.h" |
41 #include "platform/transforms/TransformationMatrix.h" | 41 #include "platform/transforms/TransformationMatrix.h" |
42 #include "platform/transforms/TranslateTransformOperation.h" | 42 #include "platform/transforms/TranslateTransformOperation.h" |
43 | 43 |
44 namespace blink { | 44 namespace blink { |
45 | 45 |
46 static Length convertToFloatLength(CSSPrimitiveValue* primitiveValue, const CSST
oLengthConversionData& conversionData) | 46 static Length convertToFloatLength(CSSPrimitiveValue& primitiveValue, const CSST
oLengthConversionData& conversionData) |
47 { | 47 { |
48 ASSERT(primitiveValue); | 48 return primitiveValue.convertToLength(conversionData); |
49 return primitiveValue->convertToLength(conversionData); | |
50 } | 49 } |
51 | 50 |
52 static TransformOperation::OperationType getTransformOperationType(CSSValueID ty
pe) | 51 static TransformOperation::OperationType getTransformOperationType(CSSValueID ty
pe) |
53 { | 52 { |
54 switch (type) { | 53 switch (type) { |
55 case CSSValueScale: return TransformOperation::Scale; | 54 case CSSValueScale: return TransformOperation::Scale; |
56 case CSSValueScaleX: return TransformOperation::ScaleX; | 55 case CSSValueScaleX: return TransformOperation::ScaleX; |
57 case CSSValueScaleY: return TransformOperation::ScaleY; | 56 case CSSValueScaleY: return TransformOperation::ScaleY; |
58 case CSSValueScaleZ: return TransformOperation::ScaleZ; | 57 case CSSValueScaleZ: return TransformOperation::ScaleZ; |
59 case CSSValueScale3d: return TransformOperation::Scale3D; | 58 case CSSValueScale3d: return TransformOperation::Scale3D; |
(...skipping 23 matching lines...) Expand all Loading... |
83 void TransformBuilder::createTransformOperations(CSSValue& inValue, const CSSToL
engthConversionData& conversionData, TransformOperations& outOperations) | 82 void TransformBuilder::createTransformOperations(CSSValue& inValue, const CSSToL
engthConversionData& conversionData, TransformOperations& outOperations) |
84 { | 83 { |
85 ASSERT(!outOperations.size()); | 84 ASSERT(!outOperations.size()); |
86 if (!inValue.isValueList()) { | 85 if (!inValue.isValueList()) { |
87 ASSERT(inValue.isPrimitiveValue() && toCSSPrimitiveValue(inValue).getVal
ueID() == CSSValueNone); | 86 ASSERT(inValue.isPrimitiveValue() && toCSSPrimitiveValue(inValue).getVal
ueID() == CSSValueNone); |
88 return; | 87 return; |
89 } | 88 } |
90 | 89 |
91 float zoomFactor = conversionData.zoom(); | 90 float zoomFactor = conversionData.zoom(); |
92 for (auto& value : toCSSValueList(inValue)) { | 91 for (auto& value : toCSSValueList(inValue)) { |
93 CSSFunctionValue* transformValue = toCSSFunctionValue(value.get()); | 92 CSSFunctionValue& transformValue = toCSSFunctionValue(value); |
94 TransformOperation::OperationType transformType = getTransformOperationT
ype(transformValue->functionType()); | 93 TransformOperation::OperationType transformType = getTransformOperationT
ype(transformValue.functionType()); |
95 | 94 |
96 CSSPrimitiveValue* firstValue = toCSSPrimitiveValue(transformValue->item
(0)); | 95 CSSPrimitiveValue& firstValue = toCSSPrimitiveValue(transformValue.item(
0)); |
97 | 96 |
98 switch (transformType) { | 97 switch (transformType) { |
99 case TransformOperation::Scale: | 98 case TransformOperation::Scale: |
100 case TransformOperation::ScaleX: | 99 case TransformOperation::ScaleX: |
101 case TransformOperation::ScaleY: { | 100 case TransformOperation::ScaleY: { |
102 double sx = 1.0; | 101 double sx = 1.0; |
103 double sy = 1.0; | 102 double sy = 1.0; |
104 if (transformType == TransformOperation::ScaleY) { | 103 if (transformType == TransformOperation::ScaleY) { |
105 sy = firstValue->getDoubleValue(); | 104 sy = firstValue.getDoubleValue(); |
106 } else { | 105 } else { |
107 sx = firstValue->getDoubleValue(); | 106 sx = firstValue.getDoubleValue(); |
108 if (transformType != TransformOperation::ScaleX) { | 107 if (transformType != TransformOperation::ScaleX) { |
109 if (transformValue->length() > 1) { | 108 if (transformValue.length() > 1) { |
110 CSSPrimitiveValue* secondValue = toCSSPrimitiveValue(tra
nsformValue->item(1)); | 109 CSSPrimitiveValue& secondValue = toCSSPrimitiveValue(tra
nsformValue.item(1)); |
111 sy = secondValue->getDoubleValue(); | 110 sy = secondValue.getDoubleValue(); |
112 } else { | 111 } else { |
113 sy = sx; | 112 sy = sx; |
114 } | 113 } |
115 } | 114 } |
116 } | 115 } |
117 outOperations.operations().append(ScaleTransformOperation::create(sx
, sy, 1.0, transformType)); | 116 outOperations.operations().append(ScaleTransformOperation::create(sx
, sy, 1.0, transformType)); |
118 break; | 117 break; |
119 } | 118 } |
120 case TransformOperation::ScaleZ: | 119 case TransformOperation::ScaleZ: |
121 case TransformOperation::Scale3D: { | 120 case TransformOperation::Scale3D: { |
122 double sx = 1.0; | 121 double sx = 1.0; |
123 double sy = 1.0; | 122 double sy = 1.0; |
124 double sz = 1.0; | 123 double sz = 1.0; |
125 if (transformType == TransformOperation::ScaleZ) { | 124 if (transformType == TransformOperation::ScaleZ) { |
126 sz = firstValue->getDoubleValue(); | 125 sz = firstValue.getDoubleValue(); |
127 } else { | 126 } else { |
128 sx = firstValue->getDoubleValue(); | 127 sx = firstValue.getDoubleValue(); |
129 sy = toCSSPrimitiveValue(transformValue->item(1))->getDoubleValu
e(); | 128 sy = toCSSPrimitiveValue(transformValue.item(1)).getDoubleValue(
); |
130 sz = toCSSPrimitiveValue(transformValue->item(2))->getDoubleValu
e(); | 129 sz = toCSSPrimitiveValue(transformValue.item(2)).getDoubleValue(
); |
131 } | 130 } |
132 outOperations.operations().append(ScaleTransformOperation::create(sx
, sy, sz, transformType)); | 131 outOperations.operations().append(ScaleTransformOperation::create(sx
, sy, sz, transformType)); |
133 break; | 132 break; |
134 } | 133 } |
135 case TransformOperation::Translate: | 134 case TransformOperation::Translate: |
136 case TransformOperation::TranslateX: | 135 case TransformOperation::TranslateX: |
137 case TransformOperation::TranslateY: { | 136 case TransformOperation::TranslateY: { |
138 Length tx = Length(0, Fixed); | 137 Length tx = Length(0, Fixed); |
139 Length ty = Length(0, Fixed); | 138 Length ty = Length(0, Fixed); |
140 if (transformType == TransformOperation::TranslateY) | 139 if (transformType == TransformOperation::TranslateY) |
141 ty = convertToFloatLength(firstValue, conversionData); | 140 ty = convertToFloatLength(firstValue, conversionData); |
142 else { | 141 else { |
143 tx = convertToFloatLength(firstValue, conversionData); | 142 tx = convertToFloatLength(firstValue, conversionData); |
144 if (transformType != TransformOperation::TranslateX) { | 143 if (transformType != TransformOperation::TranslateX) { |
145 if (transformValue->length() > 1) { | 144 if (transformValue.length() > 1) { |
146 CSSPrimitiveValue* secondValue = toCSSPrimitiveValue(tra
nsformValue->item(1)); | 145 CSSPrimitiveValue& secondValue = toCSSPrimitiveValue(tra
nsformValue.item(1)); |
147 ty = convertToFloatLength(secondValue, conversionData); | 146 ty = convertToFloatLength(secondValue, conversionData); |
148 } | 147 } |
149 } | 148 } |
150 } | 149 } |
151 | 150 |
152 outOperations.operations().append(TranslateTransformOperation::creat
e(tx, ty, 0, transformType)); | 151 outOperations.operations().append(TranslateTransformOperation::creat
e(tx, ty, 0, transformType)); |
153 break; | 152 break; |
154 } | 153 } |
155 case TransformOperation::TranslateZ: | 154 case TransformOperation::TranslateZ: |
156 case TransformOperation::Translate3D: { | 155 case TransformOperation::Translate3D: { |
157 Length tx = Length(0, Fixed); | 156 Length tx = Length(0, Fixed); |
158 Length ty = Length(0, Fixed); | 157 Length ty = Length(0, Fixed); |
159 double tz = 0; | 158 double tz = 0; |
160 if (transformType == TransformOperation::TranslateZ) { | 159 if (transformType == TransformOperation::TranslateZ) { |
161 tz = firstValue->computeLength<double>(conversionData); | 160 tz = firstValue.computeLength<double>(conversionData); |
162 } else { | 161 } else { |
163 tx = convertToFloatLength(firstValue, conversionData); | 162 tx = convertToFloatLength(firstValue, conversionData); |
164 ty = convertToFloatLength(toCSSPrimitiveValue(transformValue->it
em(1)), conversionData); | 163 ty = convertToFloatLength(toCSSPrimitiveValue(transformValue.ite
m(1)), conversionData); |
165 tz = toCSSPrimitiveValue(transformValue->item(2))->computeLength
<double>(conversionData); | 164 tz = toCSSPrimitiveValue(transformValue.item(2)).computeLength<d
ouble>(conversionData); |
166 } | 165 } |
167 | 166 |
168 outOperations.operations().append(TranslateTransformOperation::creat
e(tx, ty, tz, transformType)); | 167 outOperations.operations().append(TranslateTransformOperation::creat
e(tx, ty, tz, transformType)); |
169 break; | 168 break; |
170 } | 169 } |
171 case TransformOperation::RotateX: | 170 case TransformOperation::RotateX: |
172 case TransformOperation::RotateY: | 171 case TransformOperation::RotateY: |
173 case TransformOperation::RotateZ: { | 172 case TransformOperation::RotateZ: { |
174 double angle = firstValue->computeDegrees(); | 173 double angle = firstValue.computeDegrees(); |
175 double x = transformType == TransformOperation::RotateX; | 174 double x = transformType == TransformOperation::RotateX; |
176 double y = transformType == TransformOperation::RotateY; | 175 double y = transformType == TransformOperation::RotateY; |
177 double z = transformType == TransformOperation::RotateZ; | 176 double z = transformType == TransformOperation::RotateZ; |
178 outOperations.operations().append(RotateTransformOperation::create(x
, y, z, angle, transformType)); | 177 outOperations.operations().append(RotateTransformOperation::create(x
, y, z, angle, transformType)); |
179 break; | 178 break; |
180 } | 179 } |
181 case TransformOperation::Rotate3D: { | 180 case TransformOperation::Rotate3D: { |
182 CSSPrimitiveValue* secondValue = toCSSPrimitiveValue(transformValue-
>item(1)); | 181 CSSPrimitiveValue& secondValue = toCSSPrimitiveValue(transformValue.
item(1)); |
183 CSSPrimitiveValue* thirdValue = toCSSPrimitiveValue(transformValue->
item(2)); | 182 CSSPrimitiveValue& thirdValue = toCSSPrimitiveValue(transformValue.i
tem(2)); |
184 CSSPrimitiveValue* fourthValue = toCSSPrimitiveValue(transformValue-
>item(3)); | 183 CSSPrimitiveValue& fourthValue = toCSSPrimitiveValue(transformValue.
item(3)); |
185 double x = firstValue->getDoubleValue(); | 184 double x = firstValue.getDoubleValue(); |
186 double y = secondValue->getDoubleValue(); | 185 double y = secondValue.getDoubleValue(); |
187 double z = thirdValue->getDoubleValue(); | 186 double z = thirdValue.getDoubleValue(); |
188 double angle = fourthValue->computeDegrees(); | 187 double angle = fourthValue.computeDegrees(); |
189 outOperations.operations().append(RotateTransformOperation::create(x
, y, z, angle, transformType)); | 188 outOperations.operations().append(RotateTransformOperation::create(x
, y, z, angle, transformType)); |
190 break; | 189 break; |
191 } | 190 } |
192 case TransformOperation::Skew: | 191 case TransformOperation::Skew: |
193 case TransformOperation::SkewX: | 192 case TransformOperation::SkewX: |
194 case TransformOperation::SkewY: { | 193 case TransformOperation::SkewY: { |
195 double angleX = 0; | 194 double angleX = 0; |
196 double angleY = 0; | 195 double angleY = 0; |
197 double angle = firstValue->computeDegrees(); | 196 double angle = firstValue.computeDegrees(); |
198 if (transformType == TransformOperation::SkewY) | 197 if (transformType == TransformOperation::SkewY) |
199 angleY = angle; | 198 angleY = angle; |
200 else { | 199 else { |
201 angleX = angle; | 200 angleX = angle; |
202 if (transformType == TransformOperation::Skew) { | 201 if (transformType == TransformOperation::Skew) { |
203 if (transformValue->length() > 1) { | 202 if (transformValue.length() > 1) { |
204 CSSPrimitiveValue* secondValue = toCSSPrimitiveValue(tra
nsformValue->item(1)); | 203 CSSPrimitiveValue& secondValue = toCSSPrimitiveValue(tra
nsformValue.item(1)); |
205 angleY = secondValue->computeDegrees(); | 204 angleY = secondValue.computeDegrees(); |
206 } | 205 } |
207 } | 206 } |
208 } | 207 } |
209 outOperations.operations().append(SkewTransformOperation::create(ang
leX, angleY, transformType)); | 208 outOperations.operations().append(SkewTransformOperation::create(ang
leX, angleY, transformType)); |
210 break; | 209 break; |
211 } | 210 } |
212 case TransformOperation::Matrix: { | 211 case TransformOperation::Matrix: { |
213 double a = firstValue->getDoubleValue(); | 212 double a = firstValue.getDoubleValue(); |
214 double b = toCSSPrimitiveValue(transformValue->item(1))->getDoubleVa
lue(); | 213 double b = toCSSPrimitiveValue(transformValue.item(1)).getDoubleValu
e(); |
215 double c = toCSSPrimitiveValue(transformValue->item(2))->getDoubleVa
lue(); | 214 double c = toCSSPrimitiveValue(transformValue.item(2)).getDoubleValu
e(); |
216 double d = toCSSPrimitiveValue(transformValue->item(3))->getDoubleVa
lue(); | 215 double d = toCSSPrimitiveValue(transformValue.item(3)).getDoubleValu
e(); |
217 double e = zoomFactor * toCSSPrimitiveValue(transformValue->item(4))
->getDoubleValue(); | 216 double e = zoomFactor * toCSSPrimitiveValue(transformValue.item(4)).
getDoubleValue(); |
218 double f = zoomFactor * toCSSPrimitiveValue(transformValue->item(5))
->getDoubleValue(); | 217 double f = zoomFactor * toCSSPrimitiveValue(transformValue.item(5)).
getDoubleValue(); |
219 outOperations.operations().append(MatrixTransformOperation::create(a
, b, c, d, e, f)); | 218 outOperations.operations().append(MatrixTransformOperation::create(a
, b, c, d, e, f)); |
220 break; | 219 break; |
221 } | 220 } |
222 case TransformOperation::Matrix3D: { | 221 case TransformOperation::Matrix3D: { |
223 TransformationMatrix matrix(toCSSPrimitiveValue(transformValue->item
(0))->getDoubleValue(), | 222 TransformationMatrix matrix(toCSSPrimitiveValue(transformValue.item(
0)).getDoubleValue(), |
224 toCSSPrimitiveValue(transformValue->item(1))->getDoubleValue(), | 223 toCSSPrimitiveValue(transformValue.item(1)).getDoubleValue(), |
225 toCSSPrimitiveValue(transformValue->item(2))->getDoubleValue(), | 224 toCSSPrimitiveValue(transformValue.item(2)).getDoubleValue(), |
226 toCSSPrimitiveValue(transformValue->item(3))->getDoubleValue(), | 225 toCSSPrimitiveValue(transformValue.item(3)).getDoubleValue(), |
227 toCSSPrimitiveValue(transformValue->item(4))->getDoubleValue(), | 226 toCSSPrimitiveValue(transformValue.item(4)).getDoubleValue(), |
228 toCSSPrimitiveValue(transformValue->item(5))->getDoubleValue(), | 227 toCSSPrimitiveValue(transformValue.item(5)).getDoubleValue(), |
229 toCSSPrimitiveValue(transformValue->item(6))->getDoubleValue(), | 228 toCSSPrimitiveValue(transformValue.item(6)).getDoubleValue(), |
230 toCSSPrimitiveValue(transformValue->item(7))->getDoubleValue(), | 229 toCSSPrimitiveValue(transformValue.item(7)).getDoubleValue(), |
231 toCSSPrimitiveValue(transformValue->item(8))->getDoubleValue(), | 230 toCSSPrimitiveValue(transformValue.item(8)).getDoubleValue(), |
232 toCSSPrimitiveValue(transformValue->item(9))->getDoubleValue(), | 231 toCSSPrimitiveValue(transformValue.item(9)).getDoubleValue(), |
233 toCSSPrimitiveValue(transformValue->item(10))->getDoubleValue(), | 232 toCSSPrimitiveValue(transformValue.item(10)).getDoubleValue(), |
234 toCSSPrimitiveValue(transformValue->item(11))->getDoubleValue(), | 233 toCSSPrimitiveValue(transformValue.item(11)).getDoubleValue(), |
235 zoomFactor * toCSSPrimitiveValue(transformValue->item(12))->getD
oubleValue(), | 234 zoomFactor * toCSSPrimitiveValue(transformValue.item(12)).getDou
bleValue(), |
236 zoomFactor * toCSSPrimitiveValue(transformValue->item(13))->getD
oubleValue(), | 235 zoomFactor * toCSSPrimitiveValue(transformValue.item(13)).getDou
bleValue(), |
237 toCSSPrimitiveValue(transformValue->item(14))->getDoubleValue(), | 236 toCSSPrimitiveValue(transformValue.item(14)).getDoubleValue(), |
238 toCSSPrimitiveValue(transformValue->item(15))->getDoubleValue())
; | 237 toCSSPrimitiveValue(transformValue.item(15)).getDoubleValue()); |
239 outOperations.operations().append(Matrix3DTransformOperation::create
(matrix)); | 238 outOperations.operations().append(Matrix3DTransformOperation::create
(matrix)); |
240 break; | 239 break; |
241 } | 240 } |
242 case TransformOperation::Perspective: { | 241 case TransformOperation::Perspective: { |
243 double p = firstValue->computeLength<double>(conversionData); | 242 double p = firstValue.computeLength<double>(conversionData); |
244 ASSERT(p >= 0); | 243 ASSERT(p >= 0); |
245 outOperations.operations().append(PerspectiveTransformOperation::cre
ate(p)); | 244 outOperations.operations().append(PerspectiveTransformOperation::cre
ate(p)); |
246 break; | 245 break; |
247 } | 246 } |
248 default: | 247 default: |
249 ASSERT_NOT_REACHED(); | 248 ASSERT_NOT_REACHED(); |
250 break; | 249 break; |
251 } | 250 } |
252 } | 251 } |
253 } | 252 } |
254 | 253 |
255 } // namespace blink | 254 } // namespace blink |
OLD | NEW |