15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/* 25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2012 Google Inc. All rights reserved. 35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Redistribution and use in source and binary forms, with or without 55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * modification, are permitted provided that the following conditions 65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * are met: 75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 1. Redistributions of source code must retain the above copyright 85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * notice, this list of conditions and the following disclaimer. 95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 2. Redistributions in binary form must reproduce the above copyright 105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * notice, this list of conditions and the following disclaimer in the 115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * documentation and/or other materials provided with the distribution. 125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY 145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY 175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "config.h" 26f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "web/WebPluginScrollbarImpl.h" 275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)#include "platform/KeyboardCodes.h" 29f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "platform/graphics/GraphicsContext.h" 30a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)#include "platform/scroll/ScrollAnimator.h" 31f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "platform/scroll/ScrollTypes.h" 32a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)#include "platform/scroll/Scrollbar.h" 33a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)#include "platform/scroll/ScrollbarTheme.h" 345267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)#include "public/platform/WebCanvas.h" 355267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)#include "public/platform/WebRect.h" 365267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)#include "public/platform/WebVector.h" 37f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "public/web/WebInputEvent.h" 38f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "public/web/WebPluginScrollbarClient.h" 39f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "web/ScrollbarGroup.h" 40f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "web/WebInputEventConversion.h" 41f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "web/WebPluginContainerImpl.h" 42f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "web/WebViewImpl.h" 435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)using namespace WebCore; 455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)namespace blink { 475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebPluginScrollbar* WebPluginScrollbar::createForPlugin(Orientation orientation, 495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebPluginContainer* pluginContainer, 505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebPluginScrollbarClient* client) 515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 5209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) WebPluginContainerImpl* plugin = toWebPluginContainerImpl(pluginContainer); 535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return new WebPluginScrollbarImpl(orientation, plugin->scrollbarGroup(), client); 545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)int WebPluginScrollbar::defaultThickness() 575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return ScrollbarTheme::theme()->scrollbarThickness(); 595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebPluginScrollbarImpl::WebPluginScrollbarImpl(Orientation orientation, 625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ScrollbarGroup* group, 635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebPluginScrollbarClient* client) 645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) : m_group(group) 655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_client(client) 665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_scrollOffset(0) 675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 688abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) m_scrollbar = Scrollbar::create( 695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) static_cast<ScrollableArea*>(m_group), 705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) static_cast<WebCore::ScrollbarOrientation>(orientation), 715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebCore::RegularScrollbar); 725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_group->scrollbarCreated(this); 735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebPluginScrollbarImpl::~WebPluginScrollbarImpl() 765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_group->scrollbarDestroyed(this); 785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void WebPluginScrollbarImpl::setScrollOffset(int scrollOffset) 815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_scrollOffset = scrollOffset; 835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_client->valueChanged(this); 845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void WebPluginScrollbarImpl::invalidateScrollbarRect(const IntRect& rect) 875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebRect webrect(rect); 895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) webrect.x += m_scrollbar->x(); 905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) webrect.y += m_scrollbar->y(); 915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_client->invalidateScrollbarRect(this, webrect); 925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void WebPluginScrollbarImpl::getTickmarks(Vector<IntRect>& tickmarks) const 955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebVector<WebRect> ticks; 975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_client->getTickmarks(const_cast<WebPluginScrollbarImpl*>(this), &ticks); 985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) tickmarks.resize(ticks.size()); 995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for (size_t i = 0; i < ticks.size(); ++i) 1005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) tickmarks[i] = ticks[i]; 1015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)IntPoint WebPluginScrollbarImpl::convertFromContainingViewToScrollbar(const IntPoint& parentPoint) const 1045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) IntPoint offset(parentPoint.x() - m_scrollbar->x(), parentPoint.y() - m_scrollbar->y()); 1065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_scrollbar->Widget::convertFromContainingView(offset); 1075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void WebPluginScrollbarImpl::scrollbarStyleChanged() 1105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_client->overlayChanged(this); 1125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool WebPluginScrollbarImpl::isOverlay() const 1155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_scrollbar->isOverlayScrollbar(); 1175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)int WebPluginScrollbarImpl::value() const 1205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_scrollOffset; 1225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebPoint WebPluginScrollbarImpl::location() const 1255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_scrollbar->frameRect().location(); 1275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebSize WebPluginScrollbarImpl::size() const 1305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_scrollbar->frameRect().size(); 1325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool WebPluginScrollbarImpl::enabled() const 1355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_scrollbar->enabled(); 1375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)int WebPluginScrollbarImpl::maximum() const 1405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_scrollbar->maximum(); 1425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)int WebPluginScrollbarImpl::totalSize() const 1455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_scrollbar->totalSize(); 1475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool WebPluginScrollbarImpl::isScrollViewScrollbar() const 1505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_scrollbar->isScrollViewScrollbar(); 1525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool WebPluginScrollbarImpl::isScrollableAreaActive() const 1555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_scrollbar->isScrollableAreaActive(); 1575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void WebPluginScrollbarImpl::getTickmarks(WebVector<WebRect>& tickmarks) const 1605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_client->getTickmarks(const_cast<WebPluginScrollbarImpl*>(this), &tickmarks); 1625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebScrollbar::ScrollbarControlSize WebPluginScrollbarImpl::controlSize() const 1655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return static_cast<WebScrollbar::ScrollbarControlSize>(m_scrollbar->controlSize()); 1675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebScrollbar::ScrollbarPart WebPluginScrollbarImpl::pressedPart() const 1705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return static_cast<WebScrollbar::ScrollbarPart>(m_scrollbar->pressedPart()); 1725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebScrollbar::ScrollbarPart WebPluginScrollbarImpl::hoveredPart() const 1755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return static_cast<WebScrollbar::ScrollbarPart>(m_scrollbar->hoveredPart()); 1775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebScrollbar::ScrollbarOverlayStyle WebPluginScrollbarImpl::scrollbarOverlayStyle() const 1805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return static_cast<WebScrollbar::ScrollbarOverlayStyle>(m_scrollbar->scrollbarOverlayStyle()); 1825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebScrollbar::Orientation WebPluginScrollbarImpl::orientation() const 1855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_scrollbar->orientation() == WebCore::HorizontalScrollbar) 1875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return WebScrollbar::Horizontal; 1885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return WebScrollbar::Vertical; 1895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1918abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)bool WebPluginScrollbarImpl::isLeftSideVerticalScrollbar() const 192c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles){ 193c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) return false; 194c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles)} 195c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) 1965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool WebPluginScrollbarImpl::isCustomScrollbar() const 1975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_scrollbar->isCustomScrollbar(); 1995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void WebPluginScrollbarImpl::setLocation(const WebRect& rect) 2025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) IntRect oldRect = m_scrollbar->frameRect(); 2045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_scrollbar->setFrameRect(rect); 2055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (WebRect(oldRect) != rect) 2065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_scrollbar->invalidate(); 2075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) int length = m_scrollbar->orientation() == HorizontalScrollbar ? m_scrollbar->width() : m_scrollbar->height(); 2095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_scrollbar->setEnabled(m_scrollbar->totalSize() > length); 2105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_scrollbar->setProportion(length, m_scrollbar->totalSize()); 2115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void WebPluginScrollbarImpl::setValue(int position) 2145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_group->scrollToOffsetWithoutAnimation(m_scrollbar->orientation(), static_cast<float>(position)); 2165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void WebPluginScrollbarImpl::setDocumentSize(int size) 2195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) int length = m_scrollbar->orientation() == HorizontalScrollbar ? m_scrollbar->width() : m_scrollbar->height(); 2215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_scrollbar->setEnabled(size > length); 2225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_scrollbar->setProportion(length, size); 2235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void WebPluginScrollbarImpl::scroll(ScrollDirection direction, ScrollGranularity granularity, float multiplier) 2265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebCore::ScrollDirection dir; 2285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool horizontal = m_scrollbar->orientation() == HorizontalScrollbar; 2295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (direction == ScrollForward) 2305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) dir = horizontal ? ScrollRight : ScrollDown; 2315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else 2325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) dir = horizontal ? ScrollLeft : ScrollUp; 2335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_group->scroll(dir, static_cast<WebCore::ScrollGranularity>(granularity), multiplier); 2355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void WebPluginScrollbarImpl::paint(WebCanvas* canvas, const WebRect& rect) 2385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 23953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) GraphicsContext context(canvas); 24053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) m_scrollbar->paint(&context, rect); 2415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool WebPluginScrollbarImpl::handleInputEvent(const WebInputEvent& event) 2445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) switch (event.type) { 2465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case WebInputEvent::MouseDown: 2475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return onMouseDown(event); 2485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case WebInputEvent::MouseUp: 2495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return onMouseUp(event); 2505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case WebInputEvent::MouseMove: 2515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return onMouseMove(event); 2525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case WebInputEvent::MouseLeave: 2535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return onMouseLeave(event); 2545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case WebInputEvent::MouseWheel: 2555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return onMouseWheel(event); 2565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case WebInputEvent::KeyDown: 2575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return onKeyDown(event); 2585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case WebInputEvent::Undefined: 2595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case WebInputEvent::MouseEnter: 2605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case WebInputEvent::RawKeyDown: 2615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case WebInputEvent::KeyUp: 2625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case WebInputEvent::Char: 2635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case WebInputEvent::TouchStart: 2645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case WebInputEvent::TouchMove: 2655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case WebInputEvent::TouchEnd: 2665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case WebInputEvent::TouchCancel: 2675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) default: 2685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) break; 2695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 2705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 2715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool WebPluginScrollbarImpl::isAlphaLocked() const 2745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_scrollbar->isAlphaLocked(); 2765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void WebPluginScrollbarImpl::setIsAlphaLocked(bool flag) 2795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_scrollbar->setIsAlphaLocked(flag); 2815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool WebPluginScrollbarImpl::onMouseDown(const WebInputEvent& event) 2845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebMouseEvent mousedown = *static_cast<const WebMouseEvent*>(&event); 2865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!m_scrollbar->frameRect().contains(mousedown.x, mousedown.y)) 2875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 2885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) mousedown.x -= m_scrollbar->x(); 2905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) mousedown.y -= m_scrollbar->y(); 2915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_scrollbar->mouseDown(PlatformMouseEventBuilder(m_scrollbar.get(), mousedown)); 2925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return true; 2935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool WebPluginScrollbarImpl::onMouseUp(const WebInputEvent& event) 2965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebMouseEvent mouseup = *static_cast<const WebMouseEvent*>(&event); 2985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_scrollbar->pressedPart() == WebCore::NoPart) 2995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 3005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 30153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) m_scrollbar->mouseUp(PlatformMouseEventBuilder(m_scrollbar.get(), mouseup)); 30253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) return true; 3035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool WebPluginScrollbarImpl::onMouseMove(const WebInputEvent& event) 3065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 3075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebMouseEvent mousemove = *static_cast<const WebMouseEvent*>(&event); 3085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_scrollbar->frameRect().contains(mousemove.x, mousemove.y) 3095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) || m_scrollbar->pressedPart() != WebCore::NoPart) { 3105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) mousemove.x -= m_scrollbar->x(); 3115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) mousemove.y -= m_scrollbar->y(); 31253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) m_scrollbar->mouseMoved(PlatformMouseEventBuilder(m_scrollbar.get(), mousemove)); 31353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) return true; 3145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 3155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_scrollbar->hoveredPart() != WebCore::NoPart && !m_scrollbar->isOverlayScrollbar()) 3175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_scrollbar->mouseExited(); 3185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 3195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool WebPluginScrollbarImpl::onMouseLeave(const WebInputEvent& event) 3225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 3235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_scrollbar->hoveredPart() != WebCore::NoPart) 3245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_scrollbar->mouseExited(); 3255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 3275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool WebPluginScrollbarImpl::onMouseWheel(const WebInputEvent& event) 3305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 3315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebMouseWheelEvent mousewheel = *static_cast<const WebMouseWheelEvent*>(&event); 3325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) PlatformWheelEventBuilder platformEvent(m_scrollbar.get(), mousewheel); 3335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_group->handleWheelEvent(platformEvent); 3345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool WebPluginScrollbarImpl::onKeyDown(const WebInputEvent& event) 3375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 3385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebKeyboardEvent keyboard = *static_cast<const WebKeyboardEvent*>(&event); 3395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) int keyCode; 3405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // We have to duplicate this logic from WebViewImpl because there it uses 3415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Char and RawKeyDown events, which don't exist at this point. 3425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (keyboard.windowsKeyCode == VKEY_SPACE) 3435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) keyCode = ((keyboard.modifiers & WebInputEvent::ShiftKey) ? VKEY_PRIOR : VKEY_NEXT); 3445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else { 3455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (keyboard.modifiers == WebInputEvent::ControlKey) { 3465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Match FF behavior in the sense that Ctrl+home/end are the only Ctrl 3475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // key combinations which affect scrolling. Safari is buggy in the 3485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // sense that it scrolls the page for all Ctrl+scrolling key 3495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // combinations. For e.g. Ctrl+pgup/pgdn/up/down, etc. 3505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) switch (keyboard.windowsKeyCode) { 3515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case VKEY_HOME: 3525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case VKEY_END: 3535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) break; 3545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) default: 3555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 3565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 3575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 3585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (keyboard.isSystemKey || (keyboard.modifiers & WebInputEvent::ShiftKey)) 3605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 3615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) keyCode = keyboard.windowsKeyCode; 3635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 3645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebCore::ScrollDirection scrollDirection; 3655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebCore::ScrollGranularity scrollGranularity; 3665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (WebViewImpl::mapKeyCodeForScroll(keyCode, &scrollDirection, &scrollGranularity)) { 3675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Will return false if scroll direction wasn't compatible with this scrollbar. 3685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_group->scroll(scrollDirection, scrollGranularity); 3695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 3705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 3715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 3725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 37351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)} // namespace blink 374