15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/* 25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2011 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) * 85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 1. Redistributions of source code must retain the above copyright 95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * notice, this list of conditions and the following disclaimer. 105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 2. Redistributions in binary form must reproduce the above copyright 115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * notice, this list of conditions and the following disclaimer in the 125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * documentation and/or other materials provided with the distribution. 135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY 155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY 185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "config.h" 27f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "web/ScrollbarGroup.h" 285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 291e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)#include "core/frame/FrameView.h" 30a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)#include "platform/scroll/Scrollbar.h" 31a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)#include "platform/scroll/ScrollbarTheme.h" 325267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)#include "public/platform/WebRect.h" 33f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "web/WebPluginScrollbarImpl.h" 345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)using namespace WebCore; 365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)namespace blink { 385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)ScrollbarGroup::ScrollbarGroup(FrameView* frameView, const IntRect& frameRect) 405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) : m_frameView(frameView) 415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_frameRect(frameRect) 425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_horizontalScrollbar(0) 435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_verticalScrollbar(0) 445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)ScrollbarGroup::~ScrollbarGroup() 485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(!m_horizontalScrollbar); 505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(!m_verticalScrollbar); 515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void ScrollbarGroup::scrollbarCreated(WebPluginScrollbarImpl* scrollbar) 545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool hadScrollbars = m_horizontalScrollbar || m_verticalScrollbar; 565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (scrollbar->scrollbar()->orientation() == HorizontalScrollbar) { 575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(!m_horizontalScrollbar); 585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_horizontalScrollbar = scrollbar; 5951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) didAddScrollbar(scrollbar->scrollbar(), HorizontalScrollbar); 605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } else { 615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(!m_verticalScrollbar); 625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_verticalScrollbar = scrollbar; 6351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) didAddScrollbar(scrollbar->scrollbar(), VerticalScrollbar); 645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!hadScrollbars) { 675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_frameView->addScrollableArea(this); 685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_frameView->setNeedsLayout(); 695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void ScrollbarGroup::scrollbarDestroyed(WebPluginScrollbarImpl* scrollbar) 735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (scrollbar == m_horizontalScrollbar) { 7551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) willRemoveScrollbar(scrollbar->scrollbar(), HorizontalScrollbar); 765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_horizontalScrollbar = 0; 775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } else { 785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(scrollbar == m_verticalScrollbar); 7951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) willRemoveScrollbar(scrollbar->scrollbar(), VerticalScrollbar); 805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_verticalScrollbar = 0; 815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!m_horizontalScrollbar && !m_verticalScrollbar) { 845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_frameView->removeScrollableArea(this); 855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_frameView->setNeedsLayout(); 865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void ScrollbarGroup::setLastMousePosition(const IntPoint& point) 905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_lastMousePosition = point; 925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)int ScrollbarGroup::scrollSize(WebCore::ScrollbarOrientation orientation) const 955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebPluginScrollbarImpl* webScrollbar = orientation == HorizontalScrollbar ? m_horizontalScrollbar : m_verticalScrollbar; 975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!webScrollbar) 985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return 0; 995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Scrollbar* scrollbar = webScrollbar->scrollbar(); 1005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return scrollbar->totalSize() - scrollbar->visibleSize(); 1015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void ScrollbarGroup::setScrollOffset(const IntPoint& offset) 1045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_horizontalScrollbar && m_horizontalScrollbar->scrollOffset() != offset.x()) 1065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_horizontalScrollbar->setScrollOffset(offset.x()); 1075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else if (m_verticalScrollbar && m_verticalScrollbar->scrollOffset() != offset.y()) 1085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_verticalScrollbar->setScrollOffset(offset.y()); 1095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void ScrollbarGroup::invalidateScrollbarRect(Scrollbar* scrollbar, const IntRect& rect) 1125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_horizontalScrollbar && scrollbar == m_horizontalScrollbar->scrollbar()) 1145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_horizontalScrollbar->invalidateScrollbarRect(rect); 1155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else if (m_verticalScrollbar && scrollbar == m_verticalScrollbar->scrollbar()) 1165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_verticalScrollbar->invalidateScrollbarRect(rect); 1175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void ScrollbarGroup::invalidateScrollCornerRect(const IntRect&) 1205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool ScrollbarGroup::isActive() const 1245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return true; 1265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void ScrollbarGroup::setFrameRect(const IntRect& frameRect) 1295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_frameRect = frameRect; 1315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)IntRect ScrollbarGroup::scrollableAreaBoundingBox() const 1345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_frameRect; 1365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool ScrollbarGroup::isScrollCornerVisible() const 1395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 1415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void ScrollbarGroup::getTickmarks(Vector<IntRect>& tickmarks) const 1445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_verticalScrollbar) 1465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_verticalScrollbar->getTickmarks(tickmarks); 1475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)IntPoint ScrollbarGroup::convertFromContainingViewToScrollbar(const Scrollbar* scrollbar, const IntPoint& parentPoint) const 1505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_horizontalScrollbar && scrollbar == m_horizontalScrollbar->scrollbar()) 1525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_horizontalScrollbar->convertFromContainingViewToScrollbar(parentPoint); 1535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_verticalScrollbar && scrollbar == m_verticalScrollbar->scrollbar()) 1545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_verticalScrollbar->convertFromContainingViewToScrollbar(parentPoint); 1551e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) BLINK_ASSERT_NOT_REACHED(); 1565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return IntPoint(); 1575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Scrollbar* ScrollbarGroup::horizontalScrollbar() const 1605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_horizontalScrollbar ? m_horizontalScrollbar->scrollbar() : 0; 1625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Scrollbar* ScrollbarGroup::verticalScrollbar() const 1655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_verticalScrollbar ? m_verticalScrollbar->scrollbar() : 0; 1675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)IntPoint ScrollbarGroup::scrollPosition() const 1705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) int x = m_horizontalScrollbar ? m_horizontalScrollbar->scrollOffset() : 0; 1725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) int y = m_verticalScrollbar ? m_verticalScrollbar->scrollOffset() : 0; 1735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return IntPoint(x, y); 1745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)IntPoint ScrollbarGroup::minimumScrollPosition() const 1775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return IntPoint(); 1795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)IntPoint ScrollbarGroup::maximumScrollPosition() const 1825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return IntPoint(contentsSize().width() - visibleWidth(), contentsSize().height() - visibleHeight()); 1845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)int ScrollbarGroup::visibleHeight() const 1875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_verticalScrollbar) 1895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_verticalScrollbar->scrollbar()->height(); 1905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_horizontalScrollbar) 1915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_horizontalScrollbar->scrollbar()->height(); 1921e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) BLINK_ASSERT_NOT_REACHED(); 1935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return 0; 1945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)int ScrollbarGroup::visibleWidth() const 1975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_horizontalScrollbar) 1995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_horizontalScrollbar->scrollbar()->width(); 2005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_verticalScrollbar) 2015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_verticalScrollbar->scrollbar()->width(); 2021e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) BLINK_ASSERT_NOT_REACHED(); 2035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return 0; 2045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)IntSize ScrollbarGroup::contentsSize() const 2075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) IntSize size; 2095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_horizontalScrollbar) 2105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) size.setWidth(m_horizontalScrollbar->scrollbar()->totalSize()); 2115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else if (m_verticalScrollbar) { 2125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) size.setWidth(m_verticalScrollbar->scrollbar()->x()); 2135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_verticalScrollbar->scrollbar()->isOverlayScrollbar()) 2145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) size.expand(WebPluginScrollbar::defaultThickness(), 0); 2155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 2165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_verticalScrollbar) 2175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) size.setHeight(m_verticalScrollbar->scrollbar()->totalSize()); 2185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else if (m_horizontalScrollbar) { 2195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) size.setHeight(m_horizontalScrollbar->scrollbar()->y()); 2205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_horizontalScrollbar->scrollbar()->isOverlayScrollbar()) 2215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) size.expand(0, WebPluginScrollbar::defaultThickness()); 2225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 2235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return size; 2245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)IntSize ScrollbarGroup::overhangAmount() const 2275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return IntSize(); 2295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 231926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)IntPoint ScrollbarGroup::lastKnownMousePosition() const 2325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_lastMousePosition; 2345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool ScrollbarGroup::shouldSuspendScrollAnimations() const 2375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 2395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 24110f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid ScrollbarGroup::scrollbarStyleChanged() 2425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_horizontalScrollbar) 2445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_horizontalScrollbar->scrollbarStyleChanged(); 2455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_verticalScrollbar) 2465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_verticalScrollbar->scrollbarStyleChanged(); 2475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool ScrollbarGroup::scrollbarsCanBeActive() const 2505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return true; 2525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 254f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)bool ScrollbarGroup::userInputScrollable(ScrollbarOrientation orientation) const 255f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles){ 256f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) return orientation == HorizontalScrollbar ? horizontalScrollbar() : verticalScrollbar(); 257f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)} 258f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) 2598abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)bool ScrollbarGroup::shouldPlaceVerticalScrollbarOnLeft() const 2608abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles){ 2618abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) return false; 2628abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)} 2638abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) 264f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)int ScrollbarGroup::pageStep(ScrollbarOrientation orientation) const 265f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles){ 266f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) int length; 267f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) if (orientation == VerticalScrollbar) { 268f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) if (!m_verticalScrollbar) 269f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) return 0; 270f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) 271f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) length = m_verticalScrollbar->scrollbar()->height(); 272f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) } else { 273f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) if (!m_horizontalScrollbar) 274f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) return 0; 275f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) 276f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) length = m_horizontalScrollbar->scrollbar()->width(); 277f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) } 278f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) 279f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) int pageStep = std::max( 280f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) static_cast<int>(static_cast<float>(length) * ScrollableArea::minFractionToStepWhenPaging()), 281f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) length - ScrollableArea::maxOverlapBetweenPages()); 282f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) 283f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) return std::max(pageStep, 1); 284f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)} 285f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) 28651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)} // namespace blink 287