WebCore/ChangeLog

22
33 Reviewed by NOBODY (OOPS!).
44
 5 Reverse animations don't work in some use cases
 6 https://bugs.webkit.org/show_bug.cgi?id=38075
 7
 8 This was due to a code path special-casing reverse animations, that became obselete when we aligned our animation code
 9 with the CA implementation. That special case code path is now a bug - and this patch removes it.
 10
 11 http://staff.washington.edu/fmf/2009/03/25/iphone-3d-css-transformations/ now runs the reverse
 12 animation correctly.
 13
 14 * platform/graphics/qt/GraphicsLayerQt.cpp:
 15 (WebCore::TransformAnimationQt::applyFrame):
 16
 172010-04-24 Noam Rosenthal <noam.rosenthal@nokia.com>
 18
 19 Reviewed by NOBODY (OOPS!).
 20
521 [Qt] GraphicsLayer: backface visibility
622 https://bugs.webkit.org/show_bug.cgi?id=38074
723

WebCore/platform/graphics/qt/GraphicsLayerQt.cpp

@@public:
11571157 {
11581158 TransformationMatrix transformMatrix;
11591159
1160  // sometimes the animation values from WebCore are misleading and we have to use the actual matrix as source
1161  // The Mac implementation simply doesn't try to accelerate those (e.g. 360deg rotation), but we do.
1162  if (progress == 1 || !targetOperations.size() || sourceOperations == targetOperations) {
1163  TransformationMatrix sourceMatrix;
1164  sourceOperations.apply(m_boxSize, sourceMatrix);
1165  transformMatrix = m_sourceMatrix;
1166  transformMatrix.blend(sourceMatrix, 1 - progress);
1167  } else {
1168  bool validTransformLists = true;
1169  const int sourceOperationCount = sourceOperations.size();
1170  if (sourceOperationCount) {
1171  if (targetOperations.size() != sourceOperationCount)
1172  validTransformLists = false;
1173  else
1174  for (size_t j = 0; j < sourceOperationCount && validTransformLists; ++j)
1175  if (!sourceOperations.operations()[j]->isSameType(*targetOperations.operations()[j]))
1176  validTransformLists = false;
1177  }
 1160 bool validTransformLists = true;
 1161 const int sourceOperationCount = sourceOperations.size();
 1162 if (sourceOperationCount) {
 1163 if (targetOperations.size() != sourceOperationCount)
 1164 validTransformLists = false;
 1165 else
 1166 for (size_t j = 0; j < sourceOperationCount && validTransformLists; ++j)
 1167 if (!sourceOperations.operations()[j]->isSameType(*targetOperations.operations()[j]))
 1168 validTransformLists = false;
 1169 }
11781170
1179  if (validTransformLists) {
1180  for (size_t i = 0; i < targetOperations.size(); ++i)
1181  targetOperations.operations()[i]->blend(sourceOperations.at(i), progress)->apply(transformMatrix, m_boxSize);
1182  } else {
1183  targetOperations.apply(m_boxSize, transformMatrix);
1184  transformMatrix.blend(m_sourceMatrix, progress);
1185  }
 1171 if (validTransformLists) {
 1172 for (size_t i = 0; i < targetOperations.size(); ++i)
 1173 targetOperations.operations()[i]->blend(sourceOperations.at(i), progress)->apply(transformMatrix, m_boxSize);
 1174 } else {
 1175 targetOperations.apply(m_boxSize, transformMatrix);
 1176 transformMatrix.blend(m_sourceMatrix, progress);
11861177 }
11871178 m_layer.data()->setBaseTransform(transformMatrix);
11881179 if (m_fillsForwards)