Modified: trunk/Source/WebCore/platform/graphics/texmap/TextureMapperLayer.cpp (139525 => 139526)
--- trunk/Source/WebCore/platform/graphics/texmap/TextureMapperLayer.cpp 2013-01-12 01:32:22 UTC (rev 139525)
+++ trunk/Source/WebCore/platform/graphics/texmap/TextureMapperLayer.cpp 2013-01-12 01:35:19 UTC (rev 139526)
@@ -54,11 +54,6 @@
return this;
}
-void TextureMapperLayer::setTransform(const TransformationMatrix& matrix)
-{
- m_transform.setLocalTransform(matrix);
-}
-
void TextureMapperLayer::clearBackingStoresRecursive()
{
m_backingStore.clear();
@@ -77,15 +72,15 @@
// Compute transforms recursively on the way down to leafs.
TransformationMatrix parentTransform;
if (m_parent)
- parentTransform = m_parent->m_transform.combinedForChildren();
+ parentTransform = m_parent->m_currentTransform.combinedForChildren();
else if (m_effectTarget)
- parentTransform = m_effectTarget->m_transform.combined();
- m_transform.combineTransforms(parentTransform);
+ parentTransform = m_effectTarget->m_currentTransform.combined();
+ m_currentTransform.combineTransforms(parentTransform);
- m_state.visible = m_state.backfaceVisibility || !m_transform.combined().isBackFaceVisible();
+ m_state.visible = m_state.backfaceVisibility || !m_currentTransform.combined().isBackFaceVisible();
if (m_parent && m_parent->m_state.preserves3D)
- m_centerZ = m_transform.combined().mapPoint(FloatPoint3D(m_state.size.width() / 2, m_state.size.height() / 2, 0)).z();
+ m_centerZ = m_currentTransform.combined().mapPoint(FloatPoint3D(m_state.size.width() / 2, m_state.size.height() / 2, 0)).z();
if (m_state.maskLayer)
m_state.maskLayer->computeTransformsRecursive();
@@ -118,7 +113,7 @@
TransformationMatrix transform;
transform.translate(options.offset.width(), options.offset.height());
transform.multiply(options.transform);
- transform.multiply(m_transform.combined());
+ transform.multiply(m_currentTransform.combined());
float opacity = options.opacity;
RefPtr<BitmapTexture> mask = options.mask;
@@ -168,7 +163,7 @@
bool shouldClip = m_state.masksToBounds && !m_state.preserves3D;
if (shouldClip)
- options.textureMapper->beginClip(TransformationMatrix(options.transform).multiply(m_transform.combined()), layerRect());
+ options.textureMapper->beginClip(TransformationMatrix(options.transform).multiply(m_currentTransform.combined()), layerRect());
for (size_t i = 0; i < m_children.size(); ++i)
m_children[i]->paintRecursive(options);
@@ -180,13 +175,13 @@
IntRect TextureMapperLayer::intermediateSurfaceRect()
{
// FIXME: Add an inverse transform to LayerTransform.
- return intermediateSurfaceRect(m_transform.combined().inverse());
+ return intermediateSurfaceRect(m_currentTransform.combined().inverse());
}
IntRect TextureMapperLayer::intermediateSurfaceRect(const TransformationMatrix& matrix)
{
IntRect rect;
- TransformationMatrix localTransform = TransformationMatrix(matrix).multiply(m_transform.combined());
+ TransformationMatrix localTransform = TransformationMatrix(matrix).multiply(m_currentTransform.combined());
rect = enclosingIntRect(localTransform.mapRect(layerRect()));
if (!m_state.masksToBounds && !m_state.maskLayer) {
for (size_t i = 0; i < m_children.size(); ++i)
@@ -194,12 +189,12 @@
}
#if ENABLE(CSS_FILTERS)
- if (m_filters.hasOutsets()) {
+ if (m_currentFilters.hasOutsets()) {
int leftOutset;
int topOutset;
int bottomOutset;
int rightOutset;
- m_filters.getOutsets(topOutset, rightOutset, bottomOutset, leftOutset);
+ m_currentFilters.getOutsets(topOutset, rightOutset, bottomOutset, leftOutset);
IntRect unfilteredTargetRect(rect);
rect.move(std::max(0, -leftOutset), std::max(0, -topOutset));
rect.expand(leftOutset + rightOutset, topOutset + bottomOutset);
@@ -233,10 +228,10 @@
bool TextureMapperLayer::shouldPaintToIntermediateSurface() const
{
#if ENABLE(CSS_FILTERS)
- if (m_filters.size())
+ if (m_currentFilters.size())
return true;
#endif
- bool hasOpacity = m_opacity < 0.99;
+ bool hasOpacity = m_currentOpacity < 0.99;
bool canHaveMultipleLayersWithContent = countPotentialLayersWithContents() == MultipleLayersWithContents;
bool hasReplica = !!m_state.replicaLayer;
bool hasMask = !!m_state.maskLayer;
@@ -267,7 +262,7 @@
return false;
if (!m_state.contentsVisible && m_children.isEmpty())
return false;
- if (m_opacity < 0.01)
+ if (m_currentOpacity < 0.01)
return false;
return true;
}
@@ -282,8 +277,8 @@
replicaOptions.mask = m_state.replicaLayer->m_state.maskLayer->texture();
replicaOptions.transform
- .multiply(m_state.replicaLayer->m_transform.combined())
- .multiply(m_transform.combined().inverse());
+ .multiply(m_state.replicaLayer->m_currentTransform.combined())
+ .multiply(m_currentTransform.combined().inverse());
paintSelfAndChildren(replicaOptions);
}
@@ -322,7 +317,7 @@
if (!isVisible())
return;
- float opacity = options.opacity * m_opacity;
+ float opacity = options.opacity * m_currentOpacity;
RefPtr<BitmapTexture> maskTexture = m_state.maskLayer ? m_state.maskLayer->texture() : 0;
TextureMapperPaintOptions paintOptions(options);
@@ -342,7 +337,7 @@
options.textureMapper->bindSurface(surface.get());
paintOptions.opacity = 1;
- paintOptions.transform = m_transform.combined().inverse();
+ paintOptions.transform = m_currentTransform.combined().inverse();
paintOptions.offset = -IntSize(surfaceRect.x(), surfaceRect.y());
paintSelfAndChildrenWithReplica(paintOptions);
@@ -352,14 +347,14 @@
maskTexture = 0;
#if ENABLE(CSS_FILTERS)
- surface = applyFilters(m_filters, options.textureMapper, surface.get(), surfaceRect);
+ surface = applyFilters(m_currentFilters, options.textureMapper, surface.get(), surfaceRect);
#endif
options.textureMapper->bindSurface(options.surface.get());
TransformationMatrix targetTransform;
targetTransform.translate(options.offset.width(), options.offset.height());
targetTransform.multiply(options.transform);
- targetTransform.multiply(m_transform.combined());
+ targetTransform.multiply(m_currentTransform.combined());
options.textureMapper->drawTexture(*surface.get(), surfaceRect, targetTransform, opacity, maskTexture.get());
}
@@ -428,11 +423,12 @@
m_contentsLayer = graphicsLayer->platformLayer();
- m_transform.setPosition(adjustedPosition());
- m_transform.setAnchorPoint(m_state.anchorPoint);
- m_transform.setSize(m_state.size);
- m_transform.setFlattening(!m_state.preserves3D);
- m_transform.setChildrenTransform(m_state.childrenTransform);
+ m_currentTransform.setPosition(adjustedPosition());
+ m_currentTransform.setAnchorPoint(m_state.anchorPoint);
+ m_currentTransform.setSize(m_state.size);
+ m_currentTransform.setFlattening(!m_state.preserves3D);
+ m_currentTransform.setLocalTransform(m_state.transform);
+ m_currentTransform.setChildrenTransform(m_state.childrenTransform);
syncAnimations();
}
@@ -507,12 +503,12 @@
{
m_animations.apply(this);
if (!m_animations.hasActiveAnimationsOfType(AnimatedPropertyWebkitTransform))
- setTransform(m_state.transform);
+ setAnimatedTransform(m_state.transform);
if (!m_animations.hasActiveAnimationsOfType(AnimatedPropertyOpacity))
- setOpacity(m_state.opacity);
+ setAnimatedOpacity(m_state.opacity);
#if ENABLE(CSS_FILTERS)
if (!m_animations.hasActiveAnimationsOfType(AnimatedPropertyWebkitFilter))
- setFilters(m_state.filters);
+ setAnimatedFilters(m_state.filters);
#endif
}
@@ -536,7 +532,7 @@
m_scrollPositionDelta = FloatSize();
else
m_scrollPositionDelta = delta;
- m_transform.setPosition(adjustedPosition());
+ m_currentTransform.setPosition(adjustedPosition());
}
}
Modified: trunk/Source/WebCore/platform/graphics/texmap/TextureMapperLayer.h (139525 => 139526)
--- trunk/Source/WebCore/platform/graphics/texmap/TextureMapperLayer.h 2013-01-12 01:32:22 UTC (rev 139525)
+++ trunk/Source/WebCore/platform/graphics/texmap/TextureMapperLayer.h 2013-01-12 01:35:19 UTC (rev 139526)
@@ -78,7 +78,7 @@
: m_parent(0)
, m_effectTarget(0)
, m_contentsLayer(0)
- , m_opacity(1)
+ , m_currentOpacity(1)
, m_centerZ(0)
, m_textureMapper(0)
{ }
@@ -87,11 +87,6 @@
TextureMapper* textureMapper() const;
void flushCompositingStateForThisLayerOnly(GraphicsLayerTextureMapper*);
- void setTransform(const TransformationMatrix&);
- void setOpacity(float value) { m_opacity = value; }
-#if ENABLE(CSS_FILTERS)
- void setFilters(const FilterOperations& filters) { m_filters = filters; }
-#endif
void setTextureMapper(TextureMapper* texmap) { m_textureMapper = texmap; }
bool descendantsOrSelfHaveRunningAnimations() const;
@@ -129,10 +124,10 @@
void paintSelfAndChildrenWithReplica(const TextureMapperPaintOptions&);
// GraphicsLayerAnimation::Client
- void setAnimatedTransform(const TransformationMatrix& matrix) { setTransform(matrix); }
- void setAnimatedOpacity(float opacity) { setOpacity(opacity); }
+ virtual void setAnimatedTransform(const TransformationMatrix& matrix) OVERRIDE { m_currentTransform.setLocalTransform(matrix); }
+ virtual void setAnimatedOpacity(float opacity) OVERRIDE { m_currentOpacity = opacity; }
#if ENABLE(CSS_FILTERS)
- virtual void setAnimatedFilters(const FilterOperations& filters) { setFilters(filters); }
+ virtual void setAnimatedFilters(const FilterOperations& filters) OVERRIDE { m_currentFilters = filters; }
#endif
void syncAnimations();
@@ -151,16 +146,15 @@
return FloatRect(FloatPoint::zero(), m_state.size);
}
- GraphicsLayerTransform m_transform;
-
Vector<TextureMapperLayer*> m_children;
TextureMapperLayer* m_parent;
TextureMapperLayer* m_effectTarget;
RefPtr<TextureMapperBackingStore> m_backingStore;
TextureMapperPlatformLayer* m_contentsLayer;
- float m_opacity;
+ GraphicsLayerTransform m_currentTransform;
+ float m_currentOpacity;
#if ENABLE(CSS_FILTERS)
- FilterOperations m_filters;
+ FilterOperations m_currentFilters;
#endif
float m_centerZ;
@@ -188,7 +182,7 @@
bool visible : 1;
State()
- : opacity(1.f)
+ : opacity(1)
, maskLayer(0)
, replicaLayer(0)
, preserves3D(false)
Modified: trunk/Source/WebKit/qt/WebCoreSupport/TextureMapperLayerClientQt.cpp (139525 => 139526)
--- trunk/Source/WebKit/qt/WebCoreSupport/TextureMapperLayerClientQt.cpp 2013-01-12 01:32:22 UTC (rev 139525)
+++ trunk/Source/WebKit/qt/WebCoreSupport/TextureMapperLayerClientQt.cpp 2013-01-12 01:35:19 UTC (rev 139526)
@@ -113,8 +113,11 @@
0, 0, 1, 0,
transform.m31(), transform.m32(), 0, transform.m33()
);
- m_rootTextureMapperLayer->setTransform(matrix);
- m_rootTextureMapperLayer->setOpacity(painter->opacity());
+ if (m_rootGraphicsLayer->opacity() != painter->opacity() || m_rootGraphicsLayer->transform() != matrix) {
+ m_rootGraphicsLayer->setOpacity(painter->opacity());
+ m_rootGraphicsLayer->setTransform(matrix);
+ m_rootGraphicsLayer->flushCompositingStateForThisLayerOnly();
+ }
m_textureMapper->beginPainting();
m_textureMapper->beginClip(matrix, clip);
m_rootTextureMapperLayer->paint();