2 #include "ScrollableLayerAndroid.h"
4 #include "GLWebViewState.h"
6 #if USE(ACCELERATED_COMPOSITING)
10 bool ScrollableLayerAndroid::scrollTo(int x, int y)
13 getScrollRect(&scrollBounds);
14 if (!scrollBounds.fRight && !scrollBounds.fBottom)
17 SkScalar newX = SkScalarPin(x, 0, scrollBounds.fRight);
18 SkScalar newY = SkScalarPin(y, 0, scrollBounds.fBottom);
19 // Check for no change.
20 if (newX == scrollBounds.fLeft && newY == scrollBounds.fTop)
23 setPosition(m_scrollLimits.fLeft - newX, m_scrollLimits.fTop - newY);
26 state()->scrolledLayer(this);
31 void ScrollableLayerAndroid::getScrollRect(SkIRect* out) const
33 const SkPoint& pos = getPosition();
34 out->fLeft = m_scrollLimits.fLeft - pos.fX;
35 out->fTop = m_scrollLimits.fTop - pos.fY;
36 out->fRight = getSize().width() - m_scrollLimits.width();
37 out->fBottom = getSize().height() - m_scrollLimits.height();
40 bool ScrollableLayerAndroid::scrollRectIntoView(const SkIRect& rect)
42 // Apply the local transform to the rect to get it relative to the parent
44 SkMatrix localTransform;
45 getLocalTransform(&localTransform);
46 SkRect transformedRect;
47 transformedRect.set(rect);
48 localTransform.mapRect(&transformedRect);
50 // Test left before right to prioritize left alignment if transformedRect is wider than
52 int x = m_scrollLimits.fLeft;
53 if (transformedRect.fLeft < m_scrollLimits.fLeft)
54 x = transformedRect.fLeft;
55 else if (transformedRect.fRight > m_scrollLimits.fRight)
56 x = transformedRect.fRight - std::max(m_scrollLimits.width(), transformedRect.width());
58 // Test top before bottom to prioritize top alignment if transformedRect is taller than
60 int y = m_scrollLimits.fTop;
61 if (transformedRect.fTop < m_scrollLimits.fTop)
62 y = transformedRect.fTop;
63 else if (transformedRect.fBottom > m_scrollLimits.fBottom)
64 y = transformedRect.fBottom - std::max(m_scrollLimits.height(), transformedRect.height());
66 return scrollTo(x - getPosition().fX, y - getPosition().fY);
69 } // namespace WebCore
71 #endif // USE(ACCELERATED_COMPOSITING)