diff options
author | Chris Craik <ccraik@google.com> | 2012-05-23 18:23:04 -0700 |
---|---|---|
committer | Chris Craik <ccraik@google.com> | 2012-05-23 18:30:55 -0700 |
commit | dc5192de2d6f8637cef9be2ae52c8c100b2932e0 (patch) | |
tree | 482e02377fe3a3228ee52bb2cd6e5e7644f29bb2 /Source/WebCore/platform/graphics/android | |
parent | 55d602593a60888cfc87c244a5e3258f35bae50e (diff) | |
download | external_webkit-dc5192de2d6f8637cef9be2ae52c8c100b2932e0.zip external_webkit-dc5192de2d6f8637cef9be2ae52c8c100b2932e0.tar.gz external_webkit-dc5192de2d6f8637cef9be2ae52c8c100b2932e0.tar.bz2 |
Move scrollOffset into Layer class
Layer can now use the offset to paint, resulting in correct translates for
overflow:scroll layers in the Layer::draw() path.
bug:6548000
Change-Id: I1dfb88b15491e72e6c3841ce2953e114124e40fd
Diffstat (limited to 'Source/WebCore/platform/graphics/android')
5 files changed, 14 insertions, 12 deletions
diff --git a/Source/WebCore/platform/graphics/android/layers/Layer.cpp b/Source/WebCore/platform/graphics/android/layers/Layer.cpp index 48e36fc..6eb1e91 100644 --- a/Source/WebCore/platform/graphics/android/layers/Layer.cpp +++ b/Source/WebCore/platform/graphics/android/layers/Layer.cpp @@ -41,6 +41,7 @@ Layer::Layer(const Layer& src) : INHERITED() { m_opacity = src.m_opacity; m_size = src.m_size; m_position = src.m_position; + m_scrollOffset = src.m_scrollOffset; m_anchorPoint = src.m_anchorPoint; m_matrix = src.m_matrix; @@ -122,7 +123,8 @@ Layer* Layer::getRootLayer() const { /////////////////////////////////////////////////////////////////////////////// void Layer::getLocalTransform(SkMatrix* matrix) const { - matrix->setTranslate(m_position.fX, m_position.fY); + matrix->setTranslate(m_position.fX - m_scrollOffset.x(), + m_position.fY - m_scrollOffset.y()); SkScalar tx = SkScalarMul(m_anchorPoint.fX, m_size.width()); SkScalar ty = SkScalarMul(m_anchorPoint.fY, m_size.height()); diff --git a/Source/WebCore/platform/graphics/android/layers/Layer.h b/Source/WebCore/platform/graphics/android/layers/Layer.h index d87c699..cbdab37 100644 --- a/Source/WebCore/platform/graphics/android/layers/Layer.h +++ b/Source/WebCore/platform/graphics/android/layers/Layer.h @@ -49,6 +49,7 @@ public: SkScalar getOpacity() const { return m_opacity; } const SkSize& getSize() const { return m_size; } const SkPoint& getPosition() const { return m_position; } + const IntPoint& getScrollOffset() const { return m_scrollOffset; } const SkPoint& getAnchorPoint() const { return m_anchorPoint; } const SkMatrix& getMatrix() const { return m_matrix; } const SkMatrix& getChildrenMatrix() const { return m_childrenMatrix; } @@ -60,6 +61,7 @@ public: void setOpacity(SkScalar opacity) { m_opacity = opacity; } void setSize(SkScalar w, SkScalar h) { m_size.set(w, h); } void setPosition(SkScalar x, SkScalar y) { m_position.set(x, y); } + void setScrollOffset(IntPoint scrollOffset) { m_scrollOffset = scrollOffset; } void setAnchorPoint(SkScalar x, SkScalar y) { m_anchorPoint.set(x, y); } void setMatrix(const SkMatrix& matrix) { m_matrix = matrix; } void setChildrenMatrix(const SkMatrix& matrix) { m_childrenMatrix = matrix; } @@ -167,6 +169,8 @@ private: SkSize m_size; // The position of the origin of the layer, relative to the parent layer. SkPoint m_position; + // The scroll offset of the layer + IntPoint m_scrollOffset; // The point in the layer used as the origin for local transformations, // expressed as a fraction of the layer size. SkPoint m_anchorPoint; diff --git a/Source/WebCore/platform/graphics/android/layers/LayerAndroid.cpp b/Source/WebCore/platform/graphics/android/layers/LayerAndroid.cpp index 182e811..5c95fb1 100644 --- a/Source/WebCore/platform/graphics/android/layers/LayerAndroid.cpp +++ b/Source/WebCore/platform/graphics/android/layers/LayerAndroid.cpp @@ -112,8 +112,6 @@ LayerAndroid::LayerAndroid(const LayerAndroid& layer) : Layer(layer), m_visible = layer.m_visible; m_backgroundColor = layer.m_backgroundColor; - m_offset = layer.m_offset; - m_content = layer.m_content; SkSafeRef(m_content); @@ -395,10 +393,11 @@ void LayerAndroid::updateGLPositionsAndScale(const TransformationMatrix& parentM { IntSize layerSize(getSize().width(), getSize().height()); FloatPoint anchorPoint(getAnchorPoint().fX, getAnchorPoint().fY); - FloatPoint position(getPosition().fX + m_replicatedLayerPosition.x() - m_offset.x(), - getPosition().fY + m_replicatedLayerPosition.y() - m_offset.y()); + FloatPoint position(getPosition().fX + m_replicatedLayerPosition.x() - getScrollOffset().x(), + getPosition().fY + m_replicatedLayerPosition.y() - getScrollOffset().y()); float originX = anchorPoint.x() * layerSize.width(); float originY = anchorPoint.y() * layerSize.height(); + TransformationMatrix localMatrix; if (!isPositionFixed()) localMatrix = parentMatrix; @@ -479,7 +478,7 @@ void LayerAndroid::updateGLPositionsAndScale(const TransformationMatrix& parentM TransformationMatrix childMatrix; childMatrix = localMatrix; - childMatrix.translate3d(m_offset.x(), m_offset.y(), 0); + childMatrix.translate3d(getScrollOffset().x(), getScrollOffset().y(), 0); if (!m_childrenTransform.isIdentity()) { childMatrix.translate(getSize().width() * 0.5f, getSize().height() * 0.5f); childMatrix.multiply(m_childrenTransform); diff --git a/Source/WebCore/platform/graphics/android/layers/LayerAndroid.h b/Source/WebCore/platform/graphics/android/layers/LayerAndroid.h index 9b239ee..a5c1a6a 100644 --- a/Source/WebCore/platform/graphics/android/layers/LayerAndroid.h +++ b/Source/WebCore/platform/graphics/android/layers/LayerAndroid.h @@ -171,8 +171,6 @@ public: void setDrawClip(const FloatRect& rect) { m_clippingRect = rect; } const FloatRect& drawClip() { return m_clippingRect; } - const IntPoint& scrollOffset() const { return m_offset; } - void setScrollOffset(IntPoint offset) { m_offset = offset; } void setBackgroundColor(SkColor color); void setMaskLayer(LayerAndroid*); void setMasksToBounds(bool masksToBounds) @@ -300,7 +298,6 @@ public: protected: virtual void onDraw(SkCanvas*, SkScalar opacity, android::DrawExtra* extra, PaintStyle style); virtual InvalidateFlags onSetHwAccelerated(bool hwAccelerated) { return InvalidateNone; } - IntPoint m_offset; TransformationMatrix m_drawTransform; int m_uniqueId; diff --git a/Source/WebCore/platform/graphics/android/layers/ScrollableLayerAndroid.cpp b/Source/WebCore/platform/graphics/android/layers/ScrollableLayerAndroid.cpp index f28c31d..1178103 100644 --- a/Source/WebCore/platform/graphics/android/layers/ScrollableLayerAndroid.cpp +++ b/Source/WebCore/platform/graphics/android/layers/ScrollableLayerAndroid.cpp @@ -21,7 +21,7 @@ bool ScrollableLayerAndroid::scrollTo(int x, int y) SkScalar newX = SkScalarPin(x, scrollBounds.x(), scrollBounds.width()); SkScalar newY = SkScalarPin(y, scrollBounds.y(), scrollBounds.height()); // Check for no change. - if (newX == m_offset.x() && newY == m_offset.y()) + if (newX == getScrollOffset().x() && newY == getScrollOffset().y()) return false; setScrollOffset(IntPoint(newX, newY)); return true; @@ -39,8 +39,8 @@ void ScrollableLayerAndroid::getScrollBounds(IntRect* out) const void ScrollableLayerAndroid::getScrollRect(SkIRect* out) const { const SkPoint& pos = getPosition(); - out->fLeft = m_scrollLimits.fLeft - pos.fX + m_offset.x(); - out->fTop = m_scrollLimits.fTop - pos.fY + m_offset.y(); + out->fLeft = m_scrollLimits.fLeft - pos.fX + getScrollOffset().x(); + out->fTop = m_scrollLimits.fTop - pos.fY + getScrollOffset().y(); out->fRight = getSize().width() - m_scrollLimits.width(); out->fBottom = getSize().height() - m_scrollLimits.height(); |