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) 3551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)namespace blink { 365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)ScrollbarGroup::ScrollbarGroup(FrameView* frameView, const IntRect& frameRect) 385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) : m_frameView(frameView) 395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_frameRect(frameRect) 405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_horizontalScrollbar(0) 415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_verticalScrollbar(0) 425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)ScrollbarGroup::~ScrollbarGroup() 465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(!m_horizontalScrollbar); 485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(!m_verticalScrollbar); 495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void ScrollbarGroup::scrollbarCreated(WebPluginScrollbarImpl* scrollbar) 525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool hadScrollbars = m_horizontalScrollbar || m_verticalScrollbar; 545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (scrollbar->scrollbar()->orientation() == HorizontalScrollbar) { 555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(!m_horizontalScrollbar); 565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_horizontalScrollbar = scrollbar; 5751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) didAddScrollbar(scrollbar->scrollbar(), HorizontalScrollbar); 585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } else { 595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(!m_verticalScrollbar); 605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_verticalScrollbar = scrollbar; 6151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) didAddScrollbar(scrollbar->scrollbar(), VerticalScrollbar); 625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!hadScrollbars) { 655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_frameView->addScrollableArea(this); 665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_frameView->setNeedsLayout(); 675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void ScrollbarGroup::scrollbarDestroyed(WebPluginScrollbarImpl* scrollbar) 715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (scrollbar == m_horizontalScrollbar) { 7351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) willRemoveScrollbar(scrollbar->scrollbar(), HorizontalScrollbar); 745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_horizontalScrollbar = 0; 755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } else { 765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(scrollbar == m_verticalScrollbar); 7751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) willRemoveScrollbar(scrollbar->scrollbar(), VerticalScrollbar); 785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_verticalScrollbar = 0; 795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!m_horizontalScrollbar && !m_verticalScrollbar) { 825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_frameView->removeScrollableArea(this); 835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_frameView->setNeedsLayout(); 845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void ScrollbarGroup::setLastMousePosition(const IntPoint& point) 885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_lastMousePosition = point; 905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 92e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)int ScrollbarGroup::scrollSize(ScrollbarOrientation orientation) const 935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WebPluginScrollbarImpl* webScrollbar = orientation == HorizontalScrollbar ? m_horizontalScrollbar : m_verticalScrollbar; 955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!webScrollbar) 965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return 0; 975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Scrollbar* scrollbar = webScrollbar->scrollbar(); 985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return scrollbar->totalSize() - scrollbar->visibleSize(); 995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void ScrollbarGroup::setScrollOffset(const IntPoint& offset) 1025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_horizontalScrollbar && m_horizontalScrollbar->scrollOffset() != offset.x()) 1045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_horizontalScrollbar->setScrollOffset(offset.x()); 1055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else if (m_verticalScrollbar && m_verticalScrollbar->scrollOffset() != offset.y()) 1065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_verticalScrollbar->setScrollOffset(offset.y()); 1075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void ScrollbarGroup::invalidateScrollbarRect(Scrollbar* scrollbar, const IntRect& rect) 1105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_horizontalScrollbar && scrollbar == m_horizontalScrollbar->scrollbar()) 1125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_horizontalScrollbar->invalidateScrollbarRect(rect); 1135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else if (m_verticalScrollbar && scrollbar == m_verticalScrollbar->scrollbar()) 1145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_verticalScrollbar->invalidateScrollbarRect(rect); 1155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void ScrollbarGroup::invalidateScrollCornerRect(const IntRect&) 1185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool ScrollbarGroup::isActive() const 1225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return true; 1245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void ScrollbarGroup::setFrameRect(const IntRect& frameRect) 1275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_frameRect = frameRect; 1295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)IntRect ScrollbarGroup::scrollableAreaBoundingBox() const 1325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_frameRect; 1345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool ScrollbarGroup::isScrollCornerVisible() const 1375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 1395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void ScrollbarGroup::getTickmarks(Vector<IntRect>& tickmarks) const 1425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_verticalScrollbar) 1445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_verticalScrollbar->getTickmarks(tickmarks); 1455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)IntPoint ScrollbarGroup::convertFromContainingViewToScrollbar(const Scrollbar* scrollbar, const IntPoint& parentPoint) const 1485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_horizontalScrollbar && scrollbar == m_horizontalScrollbar->scrollbar()) 1505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_horizontalScrollbar->convertFromContainingViewToScrollbar(parentPoint); 1515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_verticalScrollbar && scrollbar == m_verticalScrollbar->scrollbar()) 1525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_verticalScrollbar->convertFromContainingViewToScrollbar(parentPoint); 1531e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) BLINK_ASSERT_NOT_REACHED(); 1545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return IntPoint(); 1555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Scrollbar* ScrollbarGroup::horizontalScrollbar() const 1585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_horizontalScrollbar ? m_horizontalScrollbar->scrollbar() : 0; 1605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Scrollbar* ScrollbarGroup::verticalScrollbar() const 1635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_verticalScrollbar ? m_verticalScrollbar->scrollbar() : 0; 1655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)IntPoint ScrollbarGroup::scrollPosition() const 1685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) int x = m_horizontalScrollbar ? m_horizontalScrollbar->scrollOffset() : 0; 1705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) int y = m_verticalScrollbar ? m_verticalScrollbar->scrollOffset() : 0; 1715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return IntPoint(x, y); 1725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)IntPoint ScrollbarGroup::minimumScrollPosition() const 1755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return IntPoint(); 1775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)IntPoint ScrollbarGroup::maximumScrollPosition() const 1805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return IntPoint(contentsSize().width() - visibleWidth(), contentsSize().height() - visibleHeight()); 1825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)int ScrollbarGroup::visibleHeight() const 1855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_verticalScrollbar) 1875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_verticalScrollbar->scrollbar()->height(); 1885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_horizontalScrollbar) 1895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_horizontalScrollbar->scrollbar()->height(); 1901e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) BLINK_ASSERT_NOT_REACHED(); 1915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return 0; 1925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)int ScrollbarGroup::visibleWidth() const 1955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_horizontalScrollbar) 1975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_horizontalScrollbar->scrollbar()->width(); 1985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_verticalScrollbar) 1995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_verticalScrollbar->scrollbar()->width(); 2001e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) BLINK_ASSERT_NOT_REACHED(); 2015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return 0; 2025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)IntSize ScrollbarGroup::contentsSize() const 2055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) IntSize size; 2075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_horizontalScrollbar) 2085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) size.setWidth(m_horizontalScrollbar->scrollbar()->totalSize()); 2095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else if (m_verticalScrollbar) { 2105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) size.setWidth(m_verticalScrollbar->scrollbar()->x()); 2115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_verticalScrollbar->scrollbar()->isOverlayScrollbar()) 2125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) size.expand(WebPluginScrollbar::defaultThickness(), 0); 2135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 2145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_verticalScrollbar) 2155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) size.setHeight(m_verticalScrollbar->scrollbar()->totalSize()); 2165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else if (m_horizontalScrollbar) { 2175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) size.setHeight(m_horizontalScrollbar->scrollbar()->y()); 2185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_horizontalScrollbar->scrollbar()->isOverlayScrollbar()) 2195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) size.expand(0, WebPluginScrollbar::defaultThickness()); 2205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 2215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return size; 2225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)IntSize ScrollbarGroup::overhangAmount() const 2255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return IntSize(); 2275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 229926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)IntPoint ScrollbarGroup::lastKnownMousePosition() const 2305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_lastMousePosition; 2325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool ScrollbarGroup::shouldSuspendScrollAnimations() const 2355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 2375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 23910f88d5669dbd969c059d61ba09fa37dd72ac559Ben Murdochvoid ScrollbarGroup::scrollbarStyleChanged() 2405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_horizontalScrollbar) 2425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_horizontalScrollbar->scrollbarStyleChanged(); 2435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_verticalScrollbar) 2445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_verticalScrollbar->scrollbarStyleChanged(); 2455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool ScrollbarGroup::scrollbarsCanBeActive() const 2485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return true; 2505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 252f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)bool ScrollbarGroup::userInputScrollable(ScrollbarOrientation orientation) const 253f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles){ 254f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) return orientation == HorizontalScrollbar ? horizontalScrollbar() : verticalScrollbar(); 255f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)} 256f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) 2578abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)bool ScrollbarGroup::shouldPlaceVerticalScrollbarOnLeft() const 2588abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles){ 2598abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) return false; 2608abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)} 2618abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) 262f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)int ScrollbarGroup::pageStep(ScrollbarOrientation orientation) const 263f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles){ 264f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) int length; 265f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) if (orientation == VerticalScrollbar) { 266f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) if (!m_verticalScrollbar) 267f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) return 0; 268f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) 269f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) length = m_verticalScrollbar->scrollbar()->height(); 270f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) } else { 271f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) if (!m_horizontalScrollbar) 272f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) return 0; 273f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) 274f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) length = m_horizontalScrollbar->scrollbar()->width(); 275f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) } 276f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) 277f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) int pageStep = std::max( 278f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) static_cast<int>(static_cast<float>(length) * ScrollableArea::minFractionToStepWhenPaging()), 279f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) length - ScrollableArea::maxOverlapBetweenPages()); 280f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) 281f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) return std::max(pageStep, 1); 282f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)} 283f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) 28451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)} // namespace blink 285