diff options
Diffstat (limited to 'Source')
6 files changed, 15 insertions, 13 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 b60b791..99af481 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); @@ -397,10 +395,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; @@ -481,7 +480,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(); diff --git a/Source/WebKit/android/jni/WebViewCore.cpp b/Source/WebKit/android/jni/WebViewCore.cpp index 74fc8a0..874a812 100644 --- a/Source/WebKit/android/jni/WebViewCore.cpp +++ b/Source/WebKit/android/jni/WebViewCore.cpp @@ -1555,7 +1555,7 @@ void WebViewCore::layerToAbsoluteOffset(const LayerAndroid* layer, IntPoint& off while (layer) { const SkPoint& pos = layer->getPosition(); offset.move(pos.fX, pos.fY); - const IntPoint& scroll = layer->scrollOffset(); + const IntPoint& scroll = layer->getScrollOffset(); offset.move(-scroll.x(), -scroll.y()); layer = static_cast<LayerAndroid*>(layer->getParent()); } |