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" 275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "ScrollbarGroup.h" 285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "WebPluginScrollbarImpl.h" 3053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/page/FrameView.h" 3153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/platform/Scrollbar.h" 3253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/platform/ScrollbarTheme.h" 335267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles)#include "public/platform/WebRect.h" 345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)using namespace WebCore; 365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)namespace WebKit { 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; 595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) didAddHorizontalScrollbar(scrollbar->scrollbar()); 605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } else { 615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(!m_verticalScrollbar); 625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_verticalScrollbar = scrollbar; 635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) didAddVerticalScrollbar(scrollbar->scrollbar()); 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) { 755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) willRemoveHorizontalScrollbar(scrollbar->scrollbar()); 765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_horizontalScrollbar = 0; 775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } else { 785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(scrollbar == m_verticalScrollbar); 795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) willRemoveVerticalScrollbar(scrollbar->scrollbar()); 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)ScrollableArea* ScrollbarGroup::enclosingScrollableArea() const 1295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // FIXME: Return a parent scrollable area that can be scrolled. 1315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return 0; 1325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void ScrollbarGroup::setFrameRect(const IntRect& frameRect) 1355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_frameRect = frameRect; 1375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)IntRect ScrollbarGroup::scrollableAreaBoundingBox() const 1405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_frameRect; 1425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool ScrollbarGroup::isScrollCornerVisible() const 1455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 1475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void ScrollbarGroup::getTickmarks(Vector<IntRect>& tickmarks) const 1505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_verticalScrollbar) 1525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_verticalScrollbar->getTickmarks(tickmarks); 1535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)IntPoint ScrollbarGroup::convertFromContainingViewToScrollbar(const Scrollbar* scrollbar, const IntPoint& parentPoint) const 1565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_horizontalScrollbar && scrollbar == m_horizontalScrollbar->scrollbar()) 1585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_horizontalScrollbar->convertFromContainingViewToScrollbar(parentPoint); 1595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_verticalScrollbar && scrollbar == m_verticalScrollbar->scrollbar()) 1605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_verticalScrollbar->convertFromContainingViewToScrollbar(parentPoint); 1615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WEBKIT_ASSERT_NOT_REACHED(); 1625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return IntPoint(); 1635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Scrollbar* ScrollbarGroup::horizontalScrollbar() const 1665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_horizontalScrollbar ? m_horizontalScrollbar->scrollbar() : 0; 1685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)Scrollbar* ScrollbarGroup::verticalScrollbar() const 1715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_verticalScrollbar ? m_verticalScrollbar->scrollbar() : 0; 1735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)IntPoint ScrollbarGroup::scrollPosition() const 1765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) int x = m_horizontalScrollbar ? m_horizontalScrollbar->scrollOffset() : 0; 1785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) int y = m_verticalScrollbar ? m_verticalScrollbar->scrollOffset() : 0; 1795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return IntPoint(x, y); 1805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)IntPoint ScrollbarGroup::minimumScrollPosition() const 1835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return IntPoint(); 1855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)IntPoint ScrollbarGroup::maximumScrollPosition() const 1885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return IntPoint(contentsSize().width() - visibleWidth(), contentsSize().height() - visibleHeight()); 1905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)int ScrollbarGroup::visibleHeight() const 1935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_verticalScrollbar) 1955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_verticalScrollbar->scrollbar()->height(); 1965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_horizontalScrollbar) 1975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_horizontalScrollbar->scrollbar()->height(); 1985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WEBKIT_ASSERT_NOT_REACHED(); 1995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return 0; 2005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)int ScrollbarGroup::visibleWidth() const 2035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_horizontalScrollbar) 2055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_horizontalScrollbar->scrollbar()->width(); 2065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_verticalScrollbar) 2075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_verticalScrollbar->scrollbar()->width(); 2085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WEBKIT_ASSERT_NOT_REACHED(); 2095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return 0; 2105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)IntSize ScrollbarGroup::contentsSize() const 2135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) IntSize size; 2155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_horizontalScrollbar) 2165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) size.setWidth(m_horizontalScrollbar->scrollbar()->totalSize()); 2175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else if (m_verticalScrollbar) { 2185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) size.setWidth(m_verticalScrollbar->scrollbar()->x()); 2195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_verticalScrollbar->scrollbar()->isOverlayScrollbar()) 2205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) size.expand(WebPluginScrollbar::defaultThickness(), 0); 2215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 2225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_verticalScrollbar) 2235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) size.setHeight(m_verticalScrollbar->scrollbar()->totalSize()); 2245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) else if (m_horizontalScrollbar) { 2255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) size.setHeight(m_horizontalScrollbar->scrollbar()->y()); 2265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_horizontalScrollbar->scrollbar()->isOverlayScrollbar()) 2275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) size.expand(0, WebPluginScrollbar::defaultThickness()); 2285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 2295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return size; 2305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)IntSize ScrollbarGroup::overhangAmount() const 2335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return IntSize(); 2355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 237926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)IntPoint ScrollbarGroup::lastKnownMousePosition() const 2385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return m_lastMousePosition; 2405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool ScrollbarGroup::shouldSuspendScrollAnimations() const 2435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 2455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void ScrollbarGroup::scrollbarStyleChanged(int, bool forceUpdate) 2485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!forceUpdate) 2505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 2515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_horizontalScrollbar) 2535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_horizontalScrollbar->scrollbarStyleChanged(); 2545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (m_verticalScrollbar) 2555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_verticalScrollbar->scrollbarStyleChanged(); 2565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool ScrollbarGroup::scrollbarsCanBeActive() const 2595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 2605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return true; 2615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 263f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)bool ScrollbarGroup::userInputScrollable(ScrollbarOrientation orientation) const 264f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles){ 265f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) return orientation == HorizontalScrollbar ? horizontalScrollbar() : verticalScrollbar(); 266f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)} 267f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) 268f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)int ScrollbarGroup::pageStep(ScrollbarOrientation orientation) const 269f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles){ 270f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) int length; 271f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) if (orientation == VerticalScrollbar) { 272f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) if (!m_verticalScrollbar) 273f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) return 0; 274f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) 275f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) length = m_verticalScrollbar->scrollbar()->height(); 276f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) } else { 277f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) if (!m_horizontalScrollbar) 278f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) return 0; 279f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) 280f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) length = m_horizontalScrollbar->scrollbar()->width(); 281f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) } 282f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) 283f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) int pageStep = std::max( 284f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) static_cast<int>(static_cast<float>(length) * ScrollableArea::minFractionToStepWhenPaging()), 285f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) length - ScrollableArea::maxOverlapBetweenPages()); 286f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) 287f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) return std::max(pageStep, 1); 288f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)} 289f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) 2905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} // namespace WebKit 291