18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/* 28e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Copyright (C) 2006, 2007, 2008 Apple Inc. All rights reserved. 38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Redistribution and use in source and binary forms, with or without 58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * modification, are permitted provided that the following conditions 68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * are met: 78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 1. Redistributions of source code must retain the above copyright 88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * notice, this list of conditions and the following disclaimer. 98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 2. Redistributions in binary form must reproduce the above copyright 108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * notice, this list of conditions and the following disclaimer in the 118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * documentation and/or other materials provided with the distribution. 128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY 148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR 178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "config.h" 278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "ScrollView.h" 288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 29cad810f21b803229eb11403f9209855525a25d57Steve Block#include "AXObjectCache.h" 30a3d6f6aedc8ed044682d65258bb964c64fc7511bNicolas Roard#if PLATFORM(ANDROID) 31a3d6f6aedc8ed044682d65258bb964c64fc7511bNicolas Roard#include "FrameView.h" 329a8423b643a8ce99e5642f2548600f9125382e89John Reck#include "GraphicsLayerAndroid.h" 339a8423b643a8ce99e5642f2548600f9125382e89John Reck#include "RenderLayer.h" 349a8423b643a8ce99e5642f2548600f9125382e89John Reck#include "RenderLayerBacking.h" 359a8423b643a8ce99e5642f2548600f9125382e89John Reck#include "RenderView.h" 36a3d6f6aedc8ed044682d65258bb964c64fc7511bNicolas Roard#endif 378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "GraphicsContext.h" 382daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#include "GraphicsLayer.h" 398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "HostWindow.h" 408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "PlatformMouseEvent.h" 418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "PlatformWheelEvent.h" 422fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#include "ScrollAnimator.h" 438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "Scrollbar.h" 448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "ScrollbarTheme.h" 45635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include <wtf/StdLibExtras.h> 468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 472fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockusing namespace std; 488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectnamespace WebCore { 508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectScrollView::ScrollView() 528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project : m_horizontalScrollbarMode(ScrollbarAuto) 538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project , m_verticalScrollbarMode(ScrollbarAuto) 54dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block , m_horizontalScrollbarLock(false) 55dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block , m_verticalScrollbarLock(false) 568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project , m_prohibitsScrolling(false) 578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project , m_canBlitOnScroll(true) 588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project , m_scrollbarsAvoidingResizer(0) 598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project , m_scrollbarsSuppressed(false) 608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project , m_inUpdateScrollbars(false) 615f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian , m_updateScrollbarsPass(0) 628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project , m_drawPanScrollIcon(false) 63635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project , m_useFixedLayout(false) 64643ca7872b450ea4efacab6188849e5aac2ba161Steve Block , m_paintsEntireContents(false) 65cad810f21b803229eb11403f9209855525a25d57Steve Block , m_clipsRepaints(true) 664576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang , m_delegatesScrolling(false) 672daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch , m_containsScrollableAreaWithOverlayScrollbars(false) 688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project platformInit(); 708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectScrollView::~ScrollView() 738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project platformDestroy(); 758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 770bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochvoid ScrollView::addChild(PassRefPtr<Widget> prpChild) 788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 790bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch Widget* child = prpChild.get(); 808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ASSERT(child != this && !child->parent()); 818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project child->setParent(this); 820bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch m_children.add(prpChild); 838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (child->platformWidget()) 848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project platformAddChild(child); 858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid ScrollView::removeChild(Widget* child) 888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ASSERT(child->parent() == this); 908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project child->setParent(0); 918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_children.remove(child); 928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (child->platformWidget()) 938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project platformRemoveChild(child); 948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid ScrollView::setHasHorizontalScrollbar(bool hasBar) 978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 98dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (hasBar && avoidScrollbarCreation()) 99dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return; 100dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1015f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian if (hasBar && !m_horizontalScrollbar) { 102635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project m_horizontalScrollbar = createScrollbar(HorizontalScrollbar); 1038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project addChild(m_horizontalScrollbar.get()); 10481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch didAddHorizontalScrollbar(m_horizontalScrollbar.get()); 105231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block m_horizontalScrollbar->styleChanged(); 1068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } else if (!hasBar && m_horizontalScrollbar) { 10781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch willRemoveHorizontalScrollbar(m_horizontalScrollbar.get()); 1088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project removeChild(m_horizontalScrollbar.get()); 1098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_horizontalScrollbar = 0; 1108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 111cad810f21b803229eb11403f9209855525a25d57Steve Block 112cad810f21b803229eb11403f9209855525a25d57Steve Block if (AXObjectCache::accessibilityEnabled() && axObjectCache()) 113cad810f21b803229eb11403f9209855525a25d57Steve Block axObjectCache()->handleScrollbarUpdate(this); 1148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid ScrollView::setHasVerticalScrollbar(bool hasBar) 1178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 118dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (hasBar && avoidScrollbarCreation()) 119dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return; 120dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1215f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian if (hasBar && !m_verticalScrollbar) { 122635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project m_verticalScrollbar = createScrollbar(VerticalScrollbar); 1238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project addChild(m_verticalScrollbar.get()); 12481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch didAddVerticalScrollbar(m_verticalScrollbar.get()); 125231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block m_verticalScrollbar->styleChanged(); 1268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } else if (!hasBar && m_verticalScrollbar) { 12781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch willRemoveVerticalScrollbar(m_verticalScrollbar.get()); 1288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project removeChild(m_verticalScrollbar.get()); 1298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_verticalScrollbar = 0; 1308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 131cad810f21b803229eb11403f9209855525a25d57Steve Block 132cad810f21b803229eb11403f9209855525a25d57Steve Block if (AXObjectCache::accessibilityEnabled() && axObjectCache()) 133cad810f21b803229eb11403f9209855525a25d57Steve Block axObjectCache()->handleScrollbarUpdate(this); 1348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1362bde8e466a4451c7319e3a072d118917957d6554Steve Block#if !USE(NATIVE_GTK_MAIN_FRAME_SCROLLBAR) 137635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source ProjectPassRefPtr<Scrollbar> ScrollView::createScrollbar(ScrollbarOrientation orientation) 138635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{ 139635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return Scrollbar::createNativeScrollbar(this, orientation, RegularScrollbar); 140635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} 141635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 142dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockvoid ScrollView::setScrollbarModes(ScrollbarMode horizontalMode, ScrollbarMode verticalMode, 143dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block bool horizontalLock, bool verticalLock) 1448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 145dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block bool needsUpdate = false; 146dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 147dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (horizontalMode != horizontalScrollbarMode() && !m_horizontalScrollbarLock) { 148dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_horizontalScrollbarMode = horizontalMode; 149dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block needsUpdate = true; 150dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } 151dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 152dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (verticalMode != verticalScrollbarMode() && !m_verticalScrollbarLock) { 153dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_verticalScrollbarMode = verticalMode; 154dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block needsUpdate = true; 155dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } 156dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 157dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (horizontalLock) 158dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block setHorizontalScrollbarLock(); 159dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 160dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (verticalLock) 161dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block setVerticalScrollbarLock(); 162dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 163dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (!needsUpdate) 1648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 165dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 1668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (platformWidget()) 1678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project platformSetScrollbarModes(); 1688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project else 1698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project updateScrollbars(scrollOffset()); 1708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 171231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#endif 1728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid ScrollView::scrollbarModes(ScrollbarMode& horizontalMode, ScrollbarMode& verticalMode) const 1748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (platformWidget()) { 1768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project platformScrollbarModes(horizontalMode, verticalMode); 1778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 1788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project horizontalMode = m_horizontalScrollbarMode; 1808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project verticalMode = m_verticalScrollbarMode; 1818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid ScrollView::setCanHaveScrollbars(bool canScroll) 1848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ScrollbarMode newHorizontalMode; 1868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ScrollbarMode newVerticalMode; 1878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project scrollbarModes(newHorizontalMode, newVerticalMode); 1898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (canScroll && newVerticalMode == ScrollbarAlwaysOff) 1918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project newVerticalMode = ScrollbarAuto; 1928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project else if (!canScroll) 1938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project newVerticalMode = ScrollbarAlwaysOff; 1948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (canScroll && newHorizontalMode == ScrollbarAlwaysOff) 1968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project newHorizontalMode = ScrollbarAuto; 1978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project else if (!canScroll) 1988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project newHorizontalMode = ScrollbarAlwaysOff; 1998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project setScrollbarModes(newHorizontalMode, newVerticalMode); 2018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid ScrollView::setCanBlitOnScroll(bool b) 2048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 205635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project if (platformWidget()) { 206635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project platformSetCanBlitOnScroll(b); 2078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 208635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project } 209635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 2108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_canBlitOnScroll = b; 211635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} 212635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 213635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectbool ScrollView::canBlitOnScroll() const 214635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{ 2158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (platformWidget()) 216635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return platformCanBlitOnScroll(); 217635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 218635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return m_canBlitOnScroll; 2198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 221643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockvoid ScrollView::setPaintsEntireContents(bool paintsEntireContents) 222643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 223643ca7872b450ea4efacab6188849e5aac2ba161Steve Block m_paintsEntireContents = paintsEntireContents; 224643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 225643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 226cad810f21b803229eb11403f9209855525a25d57Steve Blockvoid ScrollView::setClipsRepaints(bool clipsRepaints) 227cad810f21b803229eb11403f9209855525a25d57Steve Block{ 228cad810f21b803229eb11403f9209855525a25d57Steve Block m_clipsRepaints = clipsRepaints; 229cad810f21b803229eb11403f9209855525a25d57Steve Block} 230cad810f21b803229eb11403f9209855525a25d57Steve Block 2314576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wangvoid ScrollView::setDelegatesScrolling(bool delegatesScrolling) 2324576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang{ 2334576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang m_delegatesScrolling = delegatesScrolling; 2344576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang} 2354576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wang 2362bde8e466a4451c7319e3a072d118917957d6554Steve Block#if !USE(NATIVE_GTK_MAIN_FRAME_SCROLLBAR) 2378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectIntRect ScrollView::visibleContentRect(bool includeScrollbars) const 2388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (platformWidget()) 2408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return platformVisibleContentRect(includeScrollbars); 2416b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner 2426b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner if (paintsEntireContents()) 2436b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner return IntRect(IntPoint(0, 0), contentsSize()); 2446b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner 24581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch int verticalScrollbarWidth = verticalScrollbar() && !verticalScrollbar()->isOverlayScrollbar() 24681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch && !includeScrollbars ? verticalScrollbar()->width() : 0; 24781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch int horizontalScrollbarHeight = horizontalScrollbar() && !horizontalScrollbar()->isOverlayScrollbar() 24881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch && !includeScrollbars ? horizontalScrollbar()->height() : 0; 249ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 2508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return IntRect(IntPoint(m_scrollOffset.width(), m_scrollOffset.height()), 25181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch IntSize(max(0, m_boundsSize.width() - verticalScrollbarWidth), 25281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch max(0, m_boundsSize.height() - horizontalScrollbarHeight))); 2538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#endif 2558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 256635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectint ScrollView::layoutWidth() const 257635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{ 258635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return m_fixedLayoutSize.isEmpty() || !m_useFixedLayout ? visibleWidth() : m_fixedLayoutSize.width(); 259635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} 260635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 261635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectint ScrollView::layoutHeight() const 262635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{ 263635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return m_fixedLayoutSize.isEmpty() || !m_useFixedLayout ? visibleHeight() : m_fixedLayoutSize.height(); 264635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} 265635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 266635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source ProjectIntSize ScrollView::fixedLayoutSize() const 267635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{ 268635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return m_fixedLayoutSize; 269635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} 270635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 271635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectvoid ScrollView::setFixedLayoutSize(const IntSize& newSize) 272635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{ 273635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project if (fixedLayoutSize() == newSize) 274635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return; 275635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project m_fixedLayoutSize = newSize; 276635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project updateScrollbars(scrollOffset()); 277635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} 278635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 279635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectbool ScrollView::useFixedLayout() const 280635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{ 281635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return m_useFixedLayout; 282635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} 283635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 284635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectvoid ScrollView::setUseFixedLayout(bool enable) 285635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{ 286635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project if (useFixedLayout() == enable) 287635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return; 288635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project m_useFixedLayout = enable; 289635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project updateScrollbars(scrollOffset()); 290635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} 291635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 2928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectIntSize ScrollView::contentsSize() const 2938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (platformWidget()) 2958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return platformContentsSize(); 2968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return m_contentsSize; 2978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid ScrollView::setContentsSize(const IntSize& newSize) 3008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 3018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (contentsSize() == newSize) 3028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 3038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_contentsSize = newSize; 3048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (platformWidget()) 3058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project platformSetContentsSize(); 3068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project else 3078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project updateScrollbars(scrollOffset()); 3088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 3098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 310a551d0e188b3b4a05e05cc70ff0838c3165c10f6Grace Kloba#if PLATFORM(ANDROID) 311541af8dff4d592277d0f835deafaf728dad8bc57Mangesh Ghiwareint ScrollView::actualWidth() const { 312541af8dff4d592277d0f835deafaf728dad8bc57Mangesh Ghiware if (platformWidget()) 313541af8dff4d592277d0f835deafaf728dad8bc57Mangesh Ghiware return platformActualWidth(); 314541af8dff4d592277d0f835deafaf728dad8bc57Mangesh Ghiware return width(); 315541af8dff4d592277d0f835deafaf728dad8bc57Mangesh Ghiware} 316541af8dff4d592277d0f835deafaf728dad8bc57Mangesh Ghiware 317541af8dff4d592277d0f835deafaf728dad8bc57Mangesh Ghiwareint ScrollView::actualHeight() const { 318541af8dff4d592277d0f835deafaf728dad8bc57Mangesh Ghiware if (platformWidget()) 319541af8dff4d592277d0f835deafaf728dad8bc57Mangesh Ghiware return platformActualHeight(); 320541af8dff4d592277d0f835deafaf728dad8bc57Mangesh Ghiware return height(); 321541af8dff4d592277d0f835deafaf728dad8bc57Mangesh Ghiware} 322541af8dff4d592277d0f835deafaf728dad8bc57Mangesh Ghiware 323541af8dff4d592277d0f835deafaf728dad8bc57Mangesh Ghiwareint ScrollView::actualScrollX() const { 324541af8dff4d592277d0f835deafaf728dad8bc57Mangesh Ghiware if (platformWidget()) 325541af8dff4d592277d0f835deafaf728dad8bc57Mangesh Ghiware return platformActualScrollX(); 326541af8dff4d592277d0f835deafaf728dad8bc57Mangesh Ghiware return scrollX(); 327541af8dff4d592277d0f835deafaf728dad8bc57Mangesh Ghiware} 328541af8dff4d592277d0f835deafaf728dad8bc57Mangesh Ghiware 329541af8dff4d592277d0f835deafaf728dad8bc57Mangesh Ghiwareint ScrollView::actualScrollY() const { 330541af8dff4d592277d0f835deafaf728dad8bc57Mangesh Ghiware if (platformWidget()) 331541af8dff4d592277d0f835deafaf728dad8bc57Mangesh Ghiware return platformActualScrollY(); 332541af8dff4d592277d0f835deafaf728dad8bc57Mangesh Ghiware return scrollY(); 333541af8dff4d592277d0f835deafaf728dad8bc57Mangesh Ghiware} 334541af8dff4d592277d0f835deafaf728dad8bc57Mangesh Ghiware 335a3d6f6aedc8ed044682d65258bb964c64fc7511bNicolas RoardFrameView* ScrollView::frameView() { 336a3d6f6aedc8ed044682d65258bb964c64fc7511bNicolas Roard if (this->isFrameView()) { 337a3d6f6aedc8ed044682d65258bb964c64fc7511bNicolas Roard FrameView* frameView = reinterpret_cast<FrameView*>(this); 338a3d6f6aedc8ed044682d65258bb964c64fc7511bNicolas Roard return frameView; 339a3d6f6aedc8ed044682d65258bb964c64fc7511bNicolas Roard } 340a3d6f6aedc8ed044682d65258bb964c64fc7511bNicolas Roard return 0; 341a3d6f6aedc8ed044682d65258bb964c64fc7511bNicolas Roard} 342a551d0e188b3b4a05e05cc70ff0838c3165c10f6Grace Kloba#endif 343a551d0e188b3b4a05e05cc70ff0838c3165c10f6Grace Kloba 3448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectIntPoint ScrollView::maximumScrollPosition() const 3458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 346f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch IntPoint maximumOffset(contentsWidth() - visibleWidth() - m_scrollOrigin.x(), contentsHeight() - visibleHeight() - m_scrollOrigin.y()); 3478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project maximumOffset.clampNegativeToZero(); 3484a156157940f51b91eadd76f6c86f862ec0a1da0Ben Murdoch return maximumOffset; 3494a156157940f51b91eadd76f6c86f862ec0a1da0Ben Murdoch} 3504a156157940f51b91eadd76f6c86f862ec0a1da0Ben Murdoch 3514a156157940f51b91eadd76f6c86f862ec0a1da0Ben MurdochIntPoint ScrollView::minimumScrollPosition() const 3524a156157940f51b91eadd76f6c86f862ec0a1da0Ben Murdoch{ 353f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch return IntPoint(-m_scrollOrigin.x(), -m_scrollOrigin.y()); 3544a156157940f51b91eadd76f6c86f862ec0a1da0Ben Murdoch} 3554a156157940f51b91eadd76f6c86f862ec0a1da0Ben Murdoch 3564a156157940f51b91eadd76f6c86f862ec0a1da0Ben MurdochIntPoint ScrollView::adjustScrollPositionWithinRange(const IntPoint& scrollPoint) const 3574a156157940f51b91eadd76f6c86f862ec0a1da0Ben Murdoch{ 3584a156157940f51b91eadd76f6c86f862ec0a1da0Ben Murdoch IntPoint newScrollPosition = scrollPoint.shrunkTo(maximumScrollPosition()); 3594a156157940f51b91eadd76f6c86f862ec0a1da0Ben Murdoch newScrollPosition = newScrollPosition.expandedTo(minimumScrollPosition()); 3604a156157940f51b91eadd76f6c86f862ec0a1da0Ben Murdoch return newScrollPosition; 3618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 3628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3635abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrickint ScrollView::scrollSize(ScrollbarOrientation orientation) const 3645abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick{ 3655abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick Scrollbar* scrollbar = ((orientation == HorizontalScrollbar) ? m_horizontalScrollbar : m_verticalScrollbar).get(); 3665abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick return scrollbar ? (scrollbar->totalSize() - scrollbar->visibleSize()) : 0; 3675abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick} 3685abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick 3692fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockvoid ScrollView::didCompleteRubberBand(const IntSize&) const 3702fc2651226baac27029e38c9d6ef883fa32084dbSteve Block{ 3712fc2651226baac27029e38c9d6ef883fa32084dbSteve Block} 3722fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 3732bde8e466a4451c7319e3a072d118917957d6554Steve Blockvoid ScrollView::notifyPageThatContentAreaWillPaint() const 3742bde8e466a4451c7319e3a072d118917957d6554Steve Block{ 3752bde8e466a4451c7319e3a072d118917957d6554Steve Block} 3762bde8e466a4451c7319e3a072d118917957d6554Steve Block 377ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochvoid ScrollView::setScrollOffset(const IntPoint& offset) 3785abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick{ 3792fc2651226baac27029e38c9d6ef883fa32084dbSteve Block int horizontalOffset = offset.x(); 3802fc2651226baac27029e38c9d6ef883fa32084dbSteve Block int verticalOffset = offset.y(); 3812fc2651226baac27029e38c9d6ef883fa32084dbSteve Block if (constrainsScrollingToContentEdge()) { 3822fc2651226baac27029e38c9d6ef883fa32084dbSteve Block horizontalOffset = max(min(horizontalOffset, contentsWidth() - visibleWidth()), 0); 3832fc2651226baac27029e38c9d6ef883fa32084dbSteve Block verticalOffset = max(min(verticalOffset, contentsHeight() - visibleHeight()), 0); 3842fc2651226baac27029e38c9d6ef883fa32084dbSteve Block } 3855abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick 3868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project IntSize newOffset = m_scrollOffset; 387ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch newOffset.setWidth(horizontalOffset - m_scrollOrigin.x()); 388ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch newOffset.setHeight(verticalOffset - m_scrollOrigin.y()); 389ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 390ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch scrollTo(newOffset); 391ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch} 3928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 393ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochvoid ScrollView::scrollTo(const IntSize& newOffset) 394ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch{ 3958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project IntSize scrollDelta = newOffset - m_scrollOffset; 3968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (scrollDelta == IntSize()) 3978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 3988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_scrollOffset = newOffset; 3998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4009a8423b643a8ce99e5642f2548600f9125382e89John Reck#if PLATFORM(ANDROID) 4019a8423b643a8ce99e5642f2548600f9125382e89John Reck if (parent()) { 4029a8423b643a8ce99e5642f2548600f9125382e89John Reck FrameView* frameView = this->frameView(); 4039a8423b643a8ce99e5642f2548600f9125382e89John Reck // IFrames are composited on a layer, we do not need to repaint them 4049a8423b643a8ce99e5642f2548600f9125382e89John Reck // when scrolling 4059a8423b643a8ce99e5642f2548600f9125382e89John Reck if (frameView) { 4069a8423b643a8ce99e5642f2548600f9125382e89John Reck RenderView* renderer = frameView->frame()->contentRenderer(); 4079a8423b643a8ce99e5642f2548600f9125382e89John Reck if (renderer) { 4089a8423b643a8ce99e5642f2548600f9125382e89John Reck RenderLayer* layer = renderer->layer(); 4099a8423b643a8ce99e5642f2548600f9125382e89John Reck if (layer->backing()) { 4109a8423b643a8ce99e5642f2548600f9125382e89John Reck GraphicsLayerAndroid* backing = static_cast<GraphicsLayerAndroid*>( 4119a8423b643a8ce99e5642f2548600f9125382e89John Reck layer->backing()->graphicsLayer()); 4129a8423b643a8ce99e5642f2548600f9125382e89John Reck backing->updateScrollOffset(); 4139a8423b643a8ce99e5642f2548600f9125382e89John Reck } 4149a8423b643a8ce99e5642f2548600f9125382e89John Reck } 4159a8423b643a8ce99e5642f2548600f9125382e89John Reck return; 4169a8423b643a8ce99e5642f2548600f9125382e89John Reck } 4179a8423b643a8ce99e5642f2548600f9125382e89John Reck } 4189a8423b643a8ce99e5642f2548600f9125382e89John Reck#endif 4199a8423b643a8ce99e5642f2548600f9125382e89John Reck 4208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (scrollbarsSuppressed()) 4218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 4228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 423f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick repaintFixedElementsAfterScrolling(); 4248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project scrollContents(scrollDelta); 4258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 4268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 427ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochint ScrollView::scrollPosition(Scrollbar* scrollbar) const 42868513a70bcd92384395513322f1b801e7bf9c729Steve Block{ 429ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch if (scrollbar->orientation() == HorizontalScrollbar) 430ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch return scrollPosition().x() + m_scrollOrigin.x(); 431ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch if (scrollbar->orientation() == VerticalScrollbar) 432ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch return scrollPosition().y() + m_scrollOrigin.y(); 433ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch return 0; 43468513a70bcd92384395513322f1b801e7bf9c729Steve Block} 43568513a70bcd92384395513322f1b801e7bf9c729Steve Block 4368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid ScrollView::setScrollPosition(const IntPoint& scrollPoint) 4378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 4388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (prohibitsScrolling()) 4398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 4408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (platformWidget()) { 4428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project platformSetScrollPosition(scrollPoint); 4438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 4448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 4458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 44628040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu#if ENABLE(TILED_BACKING_STORE) 44728040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu if (delegatesScrolling()) { 4482bde8e466a4451c7319e3a072d118917957d6554Steve Block hostWindow()->delegatedScrollRequested(scrollPoint); 4496b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner if (!m_actualVisibleContentRect.isEmpty()) 4506b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner m_actualVisibleContentRect.setLocation(scrollPoint); 45128040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu return; 45228040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu } 45328040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu#endif 45428040489d744e0c5d475a88663056c9040ed5320Teng-Hui Zhu 4554a156157940f51b91eadd76f6c86f862ec0a1da0Ben Murdoch IntPoint newScrollPosition = adjustScrollPositionWithinRange(scrollPoint); 4566b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner 4578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (newScrollPosition == scrollPosition()) 4588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 4598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project updateScrollbars(IntSize(newScrollPosition.x(), newScrollPosition.y())); 4618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 4628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool ScrollView::scroll(ScrollDirection direction, ScrollGranularity granularity) 4648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 4658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (platformWidget()) 4668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return platformScroll(direction, granularity); 467ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 468ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch return ScrollableArea::scroll(direction, granularity); 4698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 4708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 471f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochbool ScrollView::logicalScroll(ScrollLogicalDirection direction, ScrollGranularity granularity) 472f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch{ 473f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch return scroll(logicalToPhysical(direction, isVerticalDocument(), isFlippedDocument()), granularity); 474f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch} 475f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 4762fc2651226baac27029e38c9d6ef883fa32084dbSteve BlockIntSize ScrollView::overhangAmount() const 4772fc2651226baac27029e38c9d6ef883fa32084dbSteve Block{ 4782fc2651226baac27029e38c9d6ef883fa32084dbSteve Block IntSize stretch; 4792fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 4802bde8e466a4451c7319e3a072d118917957d6554Steve Block int physicalScrollY = scrollPosition().y() + m_scrollOrigin.y(); 4812bde8e466a4451c7319e3a072d118917957d6554Steve Block if (physicalScrollY < 0) 4822bde8e466a4451c7319e3a072d118917957d6554Steve Block stretch.setHeight(physicalScrollY); 4832bde8e466a4451c7319e3a072d118917957d6554Steve Block else if (physicalScrollY > contentsHeight() - visibleContentRect().height()) 4842bde8e466a4451c7319e3a072d118917957d6554Steve Block stretch.setHeight(physicalScrollY - (contentsHeight() - visibleContentRect().height())); 4852bde8e466a4451c7319e3a072d118917957d6554Steve Block 4862bde8e466a4451c7319e3a072d118917957d6554Steve Block int physicalScrollX = scrollPosition().x() + m_scrollOrigin.x(); 4872bde8e466a4451c7319e3a072d118917957d6554Steve Block if (physicalScrollX < 0) 4882bde8e466a4451c7319e3a072d118917957d6554Steve Block stretch.setWidth(physicalScrollX); 4892bde8e466a4451c7319e3a072d118917957d6554Steve Block else if (physicalScrollX > contentsWidth() - visibleContentRect().width()) 4902bde8e466a4451c7319e3a072d118917957d6554Steve Block stretch.setWidth(physicalScrollX - (contentsWidth() - visibleContentRect().width())); 4912fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 4922fc2651226baac27029e38c9d6ef883fa32084dbSteve Block return stretch; 4932fc2651226baac27029e38c9d6ef883fa32084dbSteve Block} 4942fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 495bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsenvoid ScrollView::windowResizerRectChanged() 496bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen{ 497bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen if (platformWidget()) 498bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen return; 499bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 500bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen updateScrollbars(scrollOffset()); 501bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen} 502bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen 5035f1ab04193ad0130ca8204aadaceae083aca9881Feng Qianstatic const unsigned cMaxUpdateScrollbarsPass = 2; 5045f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 5058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid ScrollView::updateScrollbars(const IntSize& desiredOffset) 5068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 5076b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner if (m_inUpdateScrollbars || prohibitsScrolling() || delegatesScrolling() || platformWidget()) 5088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 5098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 510231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block // If we came in here with the view already needing a layout, then go ahead and do that 511231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block // first. (This will be the common case, e.g., when the page changes due to window resizing for example). 512231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block // This layout will not re-enter updateScrollbars and does not count towards our max layout pass total. 513231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block if (!m_scrollbarsSuppressed) { 514231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block m_inUpdateScrollbars = true; 515231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block visibleContentsResized(); 516231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block m_inUpdateScrollbars = false; 517231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block } 518231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 5198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool hasHorizontalScrollbar = m_horizontalScrollbar; 5205f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian bool hasVerticalScrollbar = m_verticalScrollbar; 5215f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 5225f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian bool newHasHorizontalScrollbar = hasHorizontalScrollbar; 5235f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian bool newHasVerticalScrollbar = hasVerticalScrollbar; 5245f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 5258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ScrollbarMode hScroll = m_horizontalScrollbarMode; 5268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ScrollbarMode vScroll = m_verticalScrollbarMode; 5278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5285f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian if (hScroll != ScrollbarAuto) 5295f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian newHasHorizontalScrollbar = (hScroll == ScrollbarAlwaysOn); 5305f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian if (vScroll != ScrollbarAuto) 5315f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian newHasVerticalScrollbar = (vScroll == ScrollbarAlwaysOn); 5328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5335f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian if (m_scrollbarsSuppressed || (hScroll != ScrollbarAuto && vScroll != ScrollbarAuto)) { 5345f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian if (hasHorizontalScrollbar != newHasHorizontalScrollbar) 5355f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian setHasHorizontalScrollbar(newHasHorizontalScrollbar); 5365f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian if (hasVerticalScrollbar != newHasVerticalScrollbar) 5375f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian setHasVerticalScrollbar(newHasVerticalScrollbar); 5385f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian } else { 5395f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian bool sendContentResizedNotification = false; 5405f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 5415f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian IntSize docSize = contentsSize(); 54281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch IntSize frameSize = m_boundsSize; 5438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5445f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian if (hScroll == ScrollbarAuto) { 5455f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian newHasHorizontalScrollbar = docSize.width() > visibleWidth(); 5465f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian if (newHasHorizontalScrollbar && !m_updateScrollbarsPass && docSize.width() <= frameSize.width() && docSize.height() <= frameSize.height()) 5475f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian newHasHorizontalScrollbar = false; 5485f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian } 5495f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian if (vScroll == ScrollbarAuto) { 5505f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian newHasVerticalScrollbar = docSize.height() > visibleHeight(); 5515f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian if (newHasVerticalScrollbar && !m_updateScrollbarsPass && docSize.width() <= frameSize.width() && docSize.height() <= frameSize.height()) 5525f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian newHasVerticalScrollbar = false; 5535f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian } 5548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5555f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian // If we ever turn one scrollbar off, always turn the other one off too. Never ever 5565f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian // try to both gain/lose a scrollbar in the same pass. 5575f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian if (!newHasHorizontalScrollbar && hasHorizontalScrollbar && vScroll != ScrollbarAlwaysOn) 5585f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian newHasVerticalScrollbar = false; 5595f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian if (!newHasVerticalScrollbar && hasVerticalScrollbar && hScroll != ScrollbarAlwaysOn) 5605f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian newHasHorizontalScrollbar = false; 5615f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 5625f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian if (hasHorizontalScrollbar != newHasHorizontalScrollbar) { 563f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if (m_scrollOrigin.y() && !newHasHorizontalScrollbar) 564f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch m_scrollOrigin.setY(m_scrollOrigin.y() - m_horizontalScrollbar->height()); 5655f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian setHasHorizontalScrollbar(newHasHorizontalScrollbar); 5665f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian sendContentResizedNotification = true; 5678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 5685f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 5695f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian if (hasVerticalScrollbar != newHasVerticalScrollbar) { 570f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if (m_scrollOrigin.x() && !newHasVerticalScrollbar) 571f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch m_scrollOrigin.setX(m_scrollOrigin.x() - m_verticalScrollbar->width()); 5725f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian setHasVerticalScrollbar(newHasVerticalScrollbar); 5735f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian sendContentResizedNotification = true; 5748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 5758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5765f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian if (sendContentResizedNotification && m_updateScrollbarsPass < cMaxUpdateScrollbarsPass) { 5775f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian m_updateScrollbarsPass++; 5785f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian contentsResized(); 5795f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian visibleContentsResized(); 5805f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian IntSize newDocSize = contentsSize(); 5815f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian if (newDocSize == docSize) { 5825f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian // The layout with the new scroll state had no impact on 5835f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian // the document's overall size, so updateScrollbars didn't get called. 5845f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian // Recur manually. 5855f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian updateScrollbars(desiredOffset); 5865f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian } 5875f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian m_updateScrollbarsPass--; 5888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 5898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 5908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5915f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian // Set up the range (and page step/line step), but only do this if we're not in a nested call (to avoid 5925f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian // doing it multiple times). 5935f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian if (m_updateScrollbarsPass) 5945f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian return; 5955f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 5965f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian m_inUpdateScrollbars = true; 5974a156157940f51b91eadd76f6c86f862ec0a1da0Ben Murdoch 5982fc2651226baac27029e38c9d6ef883fa32084dbSteve Block IntPoint scrollPoint = adjustScrollPositionWithinRange(IntPoint(desiredOffset)); 5994a156157940f51b91eadd76f6c86f862ec0a1da0Ben Murdoch IntSize scroll(scrollPoint.x(), scrollPoint.y()); 6004a156157940f51b91eadd76f6c86f862ec0a1da0Ben Murdoch 6015f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian if (m_horizontalScrollbar) { 6028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project int clientWidth = visibleWidth(); 6038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_horizontalScrollbar->setEnabled(contentsWidth() > clientWidth); 6048a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block int pageStep = max(max<int>(clientWidth * Scrollbar::minFractionToStepWhenPaging(), clientWidth - Scrollbar::maxOverlapBetweenPages()), 1); 6058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project IntRect oldRect(m_horizontalScrollbar->frameRect()); 6068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project IntRect hBarRect = IntRect(0, 60781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch m_boundsSize.height() - m_horizontalScrollbar->height(), 60881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch m_boundsSize.width() - (m_verticalScrollbar ? m_verticalScrollbar->width() : 0), 6098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_horizontalScrollbar->height()); 6108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_horizontalScrollbar->setFrameRect(hBarRect); 6118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!m_scrollbarsSuppressed && oldRect != m_horizontalScrollbar->frameRect()) 6128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_horizontalScrollbar->invalidate(); 6138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (m_scrollbarsSuppressed) 6158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_horizontalScrollbar->setSuppressInvalidation(true); 6168a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block m_horizontalScrollbar->setSteps(Scrollbar::pixelsPerLineStep(), pageStep); 6178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_horizontalScrollbar->setProportion(clientWidth, contentsWidth()); 6188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (m_scrollbarsSuppressed) 6198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_horizontalScrollbar->setSuppressInvalidation(false); 6208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 6218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6225f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian if (m_verticalScrollbar) { 6238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project int clientHeight = visibleHeight(); 6248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_verticalScrollbar->setEnabled(contentsHeight() > clientHeight); 6258a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block int pageStep = max(max<int>(clientHeight * Scrollbar::minFractionToStepWhenPaging(), clientHeight - Scrollbar::maxOverlapBetweenPages()), 1); 6268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project IntRect oldRect(m_verticalScrollbar->frameRect()); 62781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch IntRect vBarRect = IntRect(m_boundsSize.width() - m_verticalScrollbar->width(), 6288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 0, 6298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_verticalScrollbar->width(), 63081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch m_boundsSize.height() - (m_horizontalScrollbar ? m_horizontalScrollbar->height() : 0)); 6318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_verticalScrollbar->setFrameRect(vBarRect); 6328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!m_scrollbarsSuppressed && oldRect != m_verticalScrollbar->frameRect()) 6338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_verticalScrollbar->invalidate(); 6348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (m_scrollbarsSuppressed) 6368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_verticalScrollbar->setSuppressInvalidation(true); 6378a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block m_verticalScrollbar->setSteps(Scrollbar::pixelsPerLineStep(), pageStep); 6388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_verticalScrollbar->setProportion(clientHeight, contentsHeight()); 6398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (m_scrollbarsSuppressed) 6408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_verticalScrollbar->setSuppressInvalidation(false); 6418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 6428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 643231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block if (hasHorizontalScrollbar != (m_horizontalScrollbar != 0) || hasVerticalScrollbar != (m_verticalScrollbar != 0)) { 6448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project frameRectsChanged(); 645231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block updateScrollCorner(); 646231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block } 6478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 648ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch ScrollableArea::scrollToOffsetWithoutAnimation(FloatPoint(scroll.width() + m_scrollOrigin.x(), scroll.height() + m_scrollOrigin.y())); 6498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6502fc2651226baac27029e38c9d6ef883fa32084dbSteve Block // Make sure the scrollbar offsets are up to date. 6512fc2651226baac27029e38c9d6ef883fa32084dbSteve Block if (m_horizontalScrollbar) 6522fc2651226baac27029e38c9d6ef883fa32084dbSteve Block m_horizontalScrollbar->offsetDidChange(); 6532fc2651226baac27029e38c9d6ef883fa32084dbSteve Block if (m_verticalScrollbar) 6542fc2651226baac27029e38c9d6ef883fa32084dbSteve Block m_verticalScrollbar->offsetDidChange(); 6552fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 6568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_inUpdateScrollbars = false; 6578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 6588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 659231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockconst int panIconSizeLength = 16; 6608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid ScrollView::scrollContents(const IntSize& scrollDelta) 6628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 6638f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian if (!hostWindow()) 6648f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian return; 6658f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 6668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Since scrolling is double buffered, we will be blitting the scroll view's intersection 6678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // with the clip rect every time to keep it smooth. 6688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project IntRect clipRect = windowClipRect(); 6698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project IntRect scrollViewRect = convertToContainingWindow(IntRect(0, 0, visibleWidth(), visibleHeight())); 67081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch if (hasOverlayScrollbars()) { 6712fc2651226baac27029e38c9d6ef883fa32084dbSteve Block int verticalScrollbarWidth = verticalScrollbar() ? verticalScrollbar()->width() : 0; 6722fc2651226baac27029e38c9d6ef883fa32084dbSteve Block int horizontalScrollbarHeight = horizontalScrollbar() ? horizontalScrollbar()->height() : 0; 6732fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 6742fc2651226baac27029e38c9d6ef883fa32084dbSteve Block scrollViewRect.setWidth(scrollViewRect.width() - verticalScrollbarWidth); 6752fc2651226baac27029e38c9d6ef883fa32084dbSteve Block scrollViewRect.setHeight(scrollViewRect.height() - horizontalScrollbarHeight); 6762fc2651226baac27029e38c9d6ef883fa32084dbSteve Block } 6772fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 6788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project IntRect updateRect = clipRect; 6798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project updateRect.intersect(scrollViewRect); 6808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Invalidate the window (not the backing store). 682dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block hostWindow()->invalidateWindow(updateRect, false /*immediate*/); 6838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (m_drawPanScrollIcon) { 685e14391e94c850b8bd03680c23b38978db68687a8John Reck // FIXME: the pan icon is broken when accelerated compositing is on, since it will draw under the compositing layers. 686e14391e94c850b8bd03680c23b38978db68687a8John Reck // https://bugs.webkit.org/show_bug.cgi?id=47837 6878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project int panIconDirtySquareSizeLength = 2 * (panIconSizeLength + max(abs(scrollDelta.width()), abs(scrollDelta.height()))); // We only want to repaint what's necessary 6888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project IntPoint panIconDirtySquareLocation = IntPoint(m_panScrollIconPoint.x() - (panIconDirtySquareSizeLength / 2), m_panScrollIconPoint.y() - (panIconDirtySquareSizeLength / 2)); 6898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project IntRect panScrollIconDirtyRect = IntRect(panIconDirtySquareLocation , IntSize(panIconDirtySquareSizeLength, panIconDirtySquareSizeLength)); 6908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project panScrollIconDirtyRect.intersect(clipRect); 691dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block hostWindow()->invalidateContentsAndWindow(panScrollIconDirtyRect, false /*immediate*/); 6928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 6938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 694d0825bca7fe65beaee391d30da42e937db621564Steve Block if (canBlitOnScroll()) { // The main frame can just blit the WebView window 695dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // FIXME: Find a way to scroll subframes with this faster path 69606ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen if (!scrollContentsFastPath(-scrollDelta, scrollViewRect, clipRect)) 697e14391e94c850b8bd03680c23b38978db68687a8John Reck scrollContentsSlowPath(updateRect); 6988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } else { 6998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // We need to go ahead and repaint the entire backing store. Do it now before moving the 7005f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian // windowed plugins. 701e14391e94c850b8bd03680c23b38978db68687a8John Reck scrollContentsSlowPath(updateRect); 7028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 7038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 70481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch // Invalidate the overhang areas if they are visible. 70581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch IntRect horizontalOverhangRect; 70681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch IntRect verticalOverhangRect; 70781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch calculateOverhangAreasForPainting(horizontalOverhangRect, verticalOverhangRect); 70881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch if (!horizontalOverhangRect.isEmpty()) 70981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch hostWindow()->invalidateContentsAndWindow(horizontalOverhangRect, false /*immediate*/); 71081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch if (!verticalOverhangRect.isEmpty()) 71181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch hostWindow()->invalidateContentsAndWindow(verticalOverhangRect, false /*immediate*/); 71281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 7138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // This call will move children with native widgets (plugins) and invalidate them as well. 7148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project frameRectsChanged(); 7158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 716dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // Now blit the backingstore into the window which should be very fast. 717dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block hostWindow()->invalidateWindow(IntRect(), true); 71806ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen} 71906ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen 72006ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsenbool ScrollView::scrollContentsFastPath(const IntSize& scrollDelta, const IntRect& rectToScroll, const IntRect& clipRect) 72106ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen{ 72206ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen hostWindow()->scroll(scrollDelta, rectToScroll, clipRect); 72306ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen return true; 7248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 7258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 726e14391e94c850b8bd03680c23b38978db68687a8John Reckvoid ScrollView::scrollContentsSlowPath(const IntRect& updateRect) 727e14391e94c850b8bd03680c23b38978db68687a8John Reck{ 728e14391e94c850b8bd03680c23b38978db68687a8John Reck hostWindow()->invalidateContentsForSlowScroll(updateRect, false); 729e14391e94c850b8bd03680c23b38978db68687a8John Reck} 730e14391e94c850b8bd03680c23b38978db68687a8John Reck 7318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectIntPoint ScrollView::windowToContents(const IntPoint& windowPoint) const 7328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 7338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project IntPoint viewPoint = convertFromContainingWindow(windowPoint); 7348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return viewPoint + scrollOffset(); 7358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 7368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectIntPoint ScrollView::contentsToWindow(const IntPoint& contentsPoint) const 7388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 7398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project IntPoint viewPoint = contentsPoint - scrollOffset(); 7408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return convertToContainingWindow(viewPoint); 7418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 7428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectIntRect ScrollView::windowToContents(const IntRect& windowRect) const 7448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 7458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project IntRect viewRect = convertFromContainingWindow(windowRect); 7468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project viewRect.move(scrollOffset()); 7478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return viewRect; 7488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 7498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectIntRect ScrollView::contentsToWindow(const IntRect& contentsRect) const 7518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 7528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project IntRect viewRect = contentsRect; 7538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project viewRect.move(-scrollOffset()); 7548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return convertToContainingWindow(viewRect); 7558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 7568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectIntRect ScrollView::contentsToScreen(const IntRect& rect) const 7588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 7598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (platformWidget()) 7608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return platformContentsToScreen(rect); 7610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!hostWindow()) 7620bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return IntRect(); 7638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return hostWindow()->windowToScreen(contentsToWindow(rect)); 7648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 7658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectIntPoint ScrollView::screenToContents(const IntPoint& point) const 7678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 7688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (platformWidget()) 7698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return platformScreenToContents(point); 7700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!hostWindow()) 7710bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return IntPoint(); 7728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return windowToContents(hostWindow()->screenToWindow(point)); 7738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 7748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool ScrollView::containsScrollbarsAvoidingResizer() const 7768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 7778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return !m_scrollbarsAvoidingResizer; 7788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 7798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid ScrollView::adjustScrollbarsAvoidingResizerCount(int overlapDelta) 7818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 7828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project int oldCount = m_scrollbarsAvoidingResizer; 7838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_scrollbarsAvoidingResizer += overlapDelta; 7848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (parent()) 7858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project parent()->adjustScrollbarsAvoidingResizerCount(overlapDelta); 7868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project else if (!scrollbarsSuppressed()) { 7878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // If we went from n to 0 or from 0 to n and we're the outermost view, 7888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // we need to invalidate the windowResizerRect(), since it will now need to paint 7898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // differently. 7908f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian if ((oldCount > 0 && m_scrollbarsAvoidingResizer == 0) || 7918f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian (oldCount == 0 && m_scrollbarsAvoidingResizer > 0)) 7928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project invalidateRect(windowResizerRect()); 7938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 7948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 7958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid ScrollView::setParent(ScrollView* parentView) 7978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 7988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (parentView == parent()) 7998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 8008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 8018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (m_scrollbarsAvoidingResizer && parent()) 8028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project parent()->adjustScrollbarsAvoidingResizerCount(-m_scrollbarsAvoidingResizer); 8038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 8048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Widget::setParent(parentView); 8055f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 8068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (m_scrollbarsAvoidingResizer && parent()) 8078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project parent()->adjustScrollbarsAvoidingResizerCount(m_scrollbarsAvoidingResizer); 8088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 8098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 8108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid ScrollView::setScrollbarsSuppressed(bool suppressed, bool repaintOnUnsuppress) 8118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 8128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (suppressed == m_scrollbarsSuppressed) 8138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 8148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 8158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_scrollbarsSuppressed = suppressed; 8168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 8178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (platformWidget()) 8188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project platformSetScrollbarsSuppressed(repaintOnUnsuppress); 8198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project else if (repaintOnUnsuppress && !suppressed) { 8208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (m_horizontalScrollbar) 8218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_horizontalScrollbar->invalidate(); 8228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (m_verticalScrollbar) 8238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_verticalScrollbar->invalidate(); 8248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 8258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Invalidate the scroll corner too on unsuppress. 826231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block invalidateRect(scrollCornerRect()); 8278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 8288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 8298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 8300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochScrollbar* ScrollView::scrollbarAtPoint(const IntPoint& windowPoint) 8318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 8328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (platformWidget()) 8338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return 0; 8348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 8350bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch IntPoint viewPoint = convertFromContainingWindow(windowPoint); 8368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (m_horizontalScrollbar && m_horizontalScrollbar->frameRect().contains(viewPoint)) 8378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return m_horizontalScrollbar.get(); 8388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (m_verticalScrollbar && m_verticalScrollbar->frameRect().contains(viewPoint)) 8398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return m_verticalScrollbar.get(); 8408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return 0; 8418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 8428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 8438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid ScrollView::wheelEvent(PlatformWheelEvent& e) 8448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 8458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // We don't allow mouse wheeling to happen in a ScrollView that has had its scrollbars explicitly disabled. 8465f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian#if PLATFORM(WX) 8475f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian if (!canHaveScrollbars()) { 8485f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian#else 8495f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian if (!canHaveScrollbars() || platformWidget()) { 8505f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian#endif 8518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 8525f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian } 8538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 8542fc2651226baac27029e38c9d6ef883fa32084dbSteve Block ScrollableArea::handleWheelEvent(e); 8552fc2651226baac27029e38c9d6ef883fa32084dbSteve Block} 8565abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick 8572fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#if ENABLE(GESTURE_EVENTS) 8582fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockvoid ScrollView::gestureEvent(const PlatformGestureEvent& gestureEvent) 8592fc2651226baac27029e38c9d6ef883fa32084dbSteve Block{ 8602fc2651226baac27029e38c9d6ef883fa32084dbSteve Block if (platformWidget()) 8612fc2651226baac27029e38c9d6ef883fa32084dbSteve Block return; 8622fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 8632fc2651226baac27029e38c9d6ef883fa32084dbSteve Block ScrollableArea::handleGestureEvent(gestureEvent); 8648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 8652fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#endif 8668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 8678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid ScrollView::setFrameRect(const IntRect& newRect) 8688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 8698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project IntRect oldRect = frameRect(); 8708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 8718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (newRect == oldRect) 8728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 8738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 8748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Widget::setFrameRect(newRect); 87581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch} 87681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 87781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochvoid ScrollView::setBoundsSize(const IntSize& newSize) 87881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch{ 87981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch if (newSize == m_boundsSize) 88081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch return; 88181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 88281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch Widget::setBoundsSize(newSize); 88381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch m_boundsSize = newSize; 8848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 8858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (platformWidget()) 8868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 88781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 88881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch updateScrollbars(m_scrollOffset); 88981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch if (!m_useFixedLayout) 89081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch contentsResized(); 8918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 8928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project frameRectsChanged(); 8938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 8948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 89581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochvoid ScrollView::setInitialBoundsSize(const IntSize& newSize) 89681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch{ 89781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch ASSERT(m_boundsSize.isZero()); 89881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch m_boundsSize = newSize; 89981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch} 90081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 901635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectvoid ScrollView::frameRectsChanged() 9028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 9038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (platformWidget()) 9048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 9058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 9060bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch HashSet<RefPtr<Widget> >::const_iterator end = m_children.end(); 9070bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch for (HashSet<RefPtr<Widget> >::const_iterator current = m_children.begin(); current != end; ++current) 9088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project (*current)->frameRectsChanged(); 9092daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch positionScrollbarLayers(); 9108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 9118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 9122daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#if USE(ACCELERATED_COMPOSITING) 9132daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochstatic void positionScrollbarLayer(GraphicsLayer* graphicsLayer, Scrollbar* scrollbar) 9142daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch{ 9152daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch if (!graphicsLayer || !scrollbar) 9162daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch return; 9172daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch graphicsLayer->setDrawsContent(true); 9182daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch IntRect scrollbarRect = scrollbar->frameRect(); 9192daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch graphicsLayer->setPosition(scrollbarRect.location()); 9202daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch if (scrollbarRect.size() != graphicsLayer->size()) 9212daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch graphicsLayer->setNeedsDisplay(); 9222daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch graphicsLayer->setSize(scrollbarRect.size()); 9232daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch} 9242daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 9252daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochstatic void positionScrollCornerLayer(GraphicsLayer* graphicsLayer, const IntRect& cornerRect) 9262daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch{ 9272daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch if (!graphicsLayer) 9282daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch return; 9292daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch graphicsLayer->setDrawsContent(!cornerRect.isEmpty()); 9302daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch graphicsLayer->setPosition(cornerRect.location()); 9312daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch if (cornerRect.size() != graphicsLayer->size()) 9322daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch graphicsLayer->setNeedsDisplay(); 9332daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch graphicsLayer->setSize(cornerRect.size()); 9342daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch} 9352daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#endif 9362daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 9372daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 9382daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochvoid ScrollView::positionScrollbarLayers() 9392daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch{ 9402daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#if USE(ACCELERATED_COMPOSITING) 9412daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch positionScrollbarLayer(layerForHorizontalScrollbar(), horizontalScrollbar()); 9422daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch positionScrollbarLayer(layerForVerticalScrollbar(), verticalScrollbar()); 9432daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch positionScrollCornerLayer(layerForScrollCorner(), scrollCornerRect()); 9442daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#endif 9452daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch} 9462daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 9472daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 9488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid ScrollView::repaintContentRectangle(const IntRect& rect, bool now) 9498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 950643ca7872b450ea4efacab6188849e5aac2ba161Steve Block IntRect paintRect = rect; 951cad810f21b803229eb11403f9209855525a25d57Steve Block if (clipsRepaints() && !paintsEntireContents()) 952643ca7872b450ea4efacab6188849e5aac2ba161Steve Block paintRect.intersect(visibleContentRect()); 953aad6f24e036b3740071bb995b955b18b572067b2Steve Block#ifdef ANDROID_CAPTURE_OFFSCREEN_PAINTS 954aad6f24e036b3740071bb995b955b18b572067b2Steve Block if (rect != paintRect) 955aad6f24e036b3740071bb995b955b18b572067b2Steve Block platformOffscreenContentRectangle(visibleContentRect(), rect); 956aad6f24e036b3740071bb995b955b18b572067b2Steve Block#endif 957643ca7872b450ea4efacab6188849e5aac2ba161Steve Block if (paintRect.isEmpty()) 9588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 9598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (platformWidget()) { 960643ca7872b450ea4efacab6188849e5aac2ba161Steve Block platformRepaintContentRectangle(paintRect, now); 9618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 9628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 9638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 9640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (hostWindow()) 965dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block hostWindow()->invalidateContentsAndWindow(contentsToWindow(paintRect), now /*immediate*/); 966231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block} 967231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 968231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve BlockIntRect ScrollView::scrollCornerRect() const 969231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{ 970231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block IntRect cornerRect; 971ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 97281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch if (hasOverlayScrollbars()) 973ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch return cornerRect; 974ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 97581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch if (m_horizontalScrollbar && m_boundsSize.width() - m_horizontalScrollbar->width() > 0) { 976231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block cornerRect.unite(IntRect(m_horizontalScrollbar->width(), 97781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch m_boundsSize.height() - m_horizontalScrollbar->height(), 97881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch m_boundsSize.width() - m_horizontalScrollbar->width(), 979231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block m_horizontalScrollbar->height())); 980231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block } 981231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 98281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch if (m_verticalScrollbar && m_boundsSize.height() - m_verticalScrollbar->height() > 0) { 98381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch cornerRect.unite(IntRect(m_boundsSize.width() - m_verticalScrollbar->width(), 984231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block m_verticalScrollbar->height(), 985231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block m_verticalScrollbar->width(), 98681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch m_boundsSize.height() - m_verticalScrollbar->height())); 987231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block } 988231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 989231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block return cornerRect; 990231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block} 991231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 9922daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochbool ScrollView::isScrollCornerVisible() const 9932daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch{ 9942daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch return !scrollCornerRect().isEmpty(); 9952daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch} 9962daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 997231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockvoid ScrollView::updateScrollCorner() 998231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{ 999231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block} 1000231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 1001231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockvoid ScrollView::paintScrollCorner(GraphicsContext* context, const IntRect& cornerRect) 1002231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{ 1003231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block ScrollbarTheme::nativeTheme()->paintScrollCorner(this, context, cornerRect); 10048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 10058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 10062daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochvoid ScrollView::invalidateScrollCornerRect(const IntRect& rect) 10072daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch{ 10082daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch invalidateRect(rect); 10092daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch} 10102daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 1011cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Blockvoid ScrollView::paintScrollbars(GraphicsContext* context, const IntRect& rect) 1012cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block{ 10132daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch if (m_horizontalScrollbar 10142daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#if USE(ACCELERATED_COMPOSITING) 10152daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch && !layerForHorizontalScrollbar() 10162daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#endif 10172daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch ) 1018cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block m_horizontalScrollbar->paint(context, rect); 10192daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch if (m_verticalScrollbar 10202daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#if USE(ACCELERATED_COMPOSITING) 10212daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch && !layerForVerticalScrollbar() 10222daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#endif 10232daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch ) 1024cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block m_verticalScrollbar->paint(context, rect); 1025cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 10262daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#if USE(ACCELERATED_COMPOSITING) 10272daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch if (layerForScrollCorner()) 10282daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch return; 10292daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#endif 1030cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block paintScrollCorner(context, scrollCornerRect()); 1031cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block} 1032cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 1033cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Blockvoid ScrollView::paintPanScrollIcon(GraphicsContext* context) 1034cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block{ 10356c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen static Image* panScrollIcon = Image::loadPlatformResource("panIcon").releaseRef(); 1036a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch context->drawImage(panScrollIcon, ColorSpaceDeviceRGB, m_panScrollIconPoint); 1037cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block} 1038cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 10398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid ScrollView::paint(GraphicsContext* context, const IntRect& rect) 10408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 10418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (platformWidget()) { 10428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Widget::paint(context, rect); 10438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 10448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 10458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 10468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (context->paintingDisabled() && !context->updatingControlTints()) 10478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 10488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 10492bde8e466a4451c7319e3a072d118917957d6554Steve Block notifyPageThatContentAreaWillPaint(); 10502daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 10512daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch // If we encounter any overlay scrollbars as we paint, this will be set to true. 10522daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch m_containsScrollableAreaWithOverlayScrollbars = false; 10532fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 10548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project IntRect documentDirtyRect = rect; 10558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project documentDirtyRect.intersect(frameRect()); 10568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 10578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project context->save(); 10588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 10598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project context->translate(x(), y()); 10608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project documentDirtyRect.move(-x(), -y()); 10618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 10626b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner if (!paintsEntireContents()) { 10636b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner context->translate(-scrollX(), -scrollY()); 10646b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner documentDirtyRect.move(scrollX(), scrollY()); 10658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 10666b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner context->clip(visibleContentRect()); 10676b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner } 10688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 10698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project paintContents(context, documentDirtyRect); 10708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 10718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project context->restore(); 10728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 10732fc2651226baac27029e38c9d6ef883fa32084dbSteve Block IntRect horizontalOverhangRect; 10742fc2651226baac27029e38c9d6ef883fa32084dbSteve Block IntRect verticalOverhangRect; 10752fc2651226baac27029e38c9d6ef883fa32084dbSteve Block calculateOverhangAreasForPainting(horizontalOverhangRect, verticalOverhangRect); 10762fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 10772fc2651226baac27029e38c9d6ef883fa32084dbSteve Block if (rect.intersects(horizontalOverhangRect) || rect.intersects(verticalOverhangRect)) 10782fc2651226baac27029e38c9d6ef883fa32084dbSteve Block paintOverhangAreas(context, horizontalOverhangRect, verticalOverhangRect, rect); 10792fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 10808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Now paint the scrollbars. 10818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!m_scrollbarsSuppressed && (m_horizontalScrollbar || m_verticalScrollbar)) { 10828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project context->save(); 10838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project IntRect scrollViewDirtyRect = rect; 10848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project scrollViewDirtyRect.intersect(frameRect()); 10858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project context->translate(x(), y()); 10868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project scrollViewDirtyRect.move(-x(), -y()); 10878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1088cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block paintScrollbars(context, scrollViewDirtyRect); 1089cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 10908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project context->restore(); 10918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 10928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 10938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Paint the panScroll Icon 1094cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block if (m_drawPanScrollIcon) 1095cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block paintPanScrollIcon(context); 10968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 10978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 10982fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockvoid ScrollView::calculateOverhangAreasForPainting(IntRect& horizontalOverhangRect, IntRect& verticalOverhangRect) 10992fc2651226baac27029e38c9d6ef883fa32084dbSteve Block{ 110081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch int verticalScrollbarWidth = (verticalScrollbar() && !verticalScrollbar()->isOverlayScrollbar()) 110181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch ? verticalScrollbar()->width() : 0; 110281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch int horizontalScrollbarHeight = (horizontalScrollbar() && !horizontalScrollbar()->isOverlayScrollbar()) 110381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch ? horizontalScrollbar()->height() : 0; 11042fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 11052bde8e466a4451c7319e3a072d118917957d6554Steve Block int physicalScrollY = scrollPosition().y() + m_scrollOrigin.y(); 11062bde8e466a4451c7319e3a072d118917957d6554Steve Block if (physicalScrollY < 0) { 11072fc2651226baac27029e38c9d6ef883fa32084dbSteve Block horizontalOverhangRect = frameRect(); 11082bde8e466a4451c7319e3a072d118917957d6554Steve Block horizontalOverhangRect.setHeight(-physicalScrollY); 11092bde8e466a4451c7319e3a072d118917957d6554Steve Block } else if (physicalScrollY > contentsHeight() - visibleContentRect().height()) { 11102bde8e466a4451c7319e3a072d118917957d6554Steve Block int height = physicalScrollY - (contentsHeight() - visibleContentRect().height()); 11112fc2651226baac27029e38c9d6ef883fa32084dbSteve Block horizontalOverhangRect = frameRect(); 11122fc2651226baac27029e38c9d6ef883fa32084dbSteve Block horizontalOverhangRect.setY(frameRect().maxY() - height - horizontalScrollbarHeight); 11132fc2651226baac27029e38c9d6ef883fa32084dbSteve Block horizontalOverhangRect.setHeight(height); 11142fc2651226baac27029e38c9d6ef883fa32084dbSteve Block } 11152fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 11162bde8e466a4451c7319e3a072d118917957d6554Steve Block int physicalScrollX = scrollPosition().x() + m_scrollOrigin.x(); 11172bde8e466a4451c7319e3a072d118917957d6554Steve Block if (physicalScrollX < 0) { 11182bde8e466a4451c7319e3a072d118917957d6554Steve Block verticalOverhangRect.setWidth(-physicalScrollX); 11192fc2651226baac27029e38c9d6ef883fa32084dbSteve Block verticalOverhangRect.setHeight(frameRect().height() - horizontalOverhangRect.height()); 11202fc2651226baac27029e38c9d6ef883fa32084dbSteve Block verticalOverhangRect.setX(frameRect().x()); 11212fc2651226baac27029e38c9d6ef883fa32084dbSteve Block if (horizontalOverhangRect.y() == frameRect().y()) 11222fc2651226baac27029e38c9d6ef883fa32084dbSteve Block verticalOverhangRect.setY(frameRect().y() + horizontalOverhangRect.height()); 11232fc2651226baac27029e38c9d6ef883fa32084dbSteve Block else 11242fc2651226baac27029e38c9d6ef883fa32084dbSteve Block verticalOverhangRect.setY(frameRect().y()); 11252bde8e466a4451c7319e3a072d118917957d6554Steve Block } else if (physicalScrollX > contentsWidth() - visibleContentRect().width()) { 11262bde8e466a4451c7319e3a072d118917957d6554Steve Block int width = physicalScrollX - (contentsWidth() - visibleContentRect().width()); 11272fc2651226baac27029e38c9d6ef883fa32084dbSteve Block verticalOverhangRect.setWidth(width); 11282fc2651226baac27029e38c9d6ef883fa32084dbSteve Block verticalOverhangRect.setHeight(frameRect().height() - horizontalOverhangRect.height()); 11292fc2651226baac27029e38c9d6ef883fa32084dbSteve Block verticalOverhangRect.setX(frameRect().maxX() - width - verticalScrollbarWidth); 11302fc2651226baac27029e38c9d6ef883fa32084dbSteve Block if (horizontalOverhangRect.y() == frameRect().y()) 11312fc2651226baac27029e38c9d6ef883fa32084dbSteve Block verticalOverhangRect.setY(frameRect().y() + horizontalOverhangRect.height()); 11322fc2651226baac27029e38c9d6ef883fa32084dbSteve Block else 11332fc2651226baac27029e38c9d6ef883fa32084dbSteve Block verticalOverhangRect.setY(frameRect().y()); 11342fc2651226baac27029e38c9d6ef883fa32084dbSteve Block } 11352fc2651226baac27029e38c9d6ef883fa32084dbSteve Block} 11362fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 11372fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockvoid ScrollView::paintOverhangAreas(GraphicsContext* context, const IntRect& horizontalOverhangRect, const IntRect& verticalOverhangRect, const IntRect&) 11382fc2651226baac27029e38c9d6ef883fa32084dbSteve Block{ 11392fc2651226baac27029e38c9d6ef883fa32084dbSteve Block // FIXME: This should be checking the dirty rect. 11402fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 11412fc2651226baac27029e38c9d6ef883fa32084dbSteve Block context->setFillColor(Color::white, ColorSpaceDeviceRGB); 11422fc2651226baac27029e38c9d6ef883fa32084dbSteve Block if (!horizontalOverhangRect.isEmpty()) 11432fc2651226baac27029e38c9d6ef883fa32084dbSteve Block context->fillRect(horizontalOverhangRect); 11442fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 11452fc2651226baac27029e38c9d6ef883fa32084dbSteve Block context->setFillColor(Color::white, ColorSpaceDeviceRGB); 11462fc2651226baac27029e38c9d6ef883fa32084dbSteve Block if (!verticalOverhangRect.isEmpty()) 11472fc2651226baac27029e38c9d6ef883fa32084dbSteve Block context->fillRect(verticalOverhangRect); 11482fc2651226baac27029e38c9d6ef883fa32084dbSteve Block} 11492fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 11500bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochbool ScrollView::isPointInScrollbarCorner(const IntPoint& windowPoint) 11510bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 11520bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!scrollbarCornerPresent()) 11530bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return false; 11540bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 11550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch IntPoint viewPoint = convertFromContainingWindow(windowPoint); 11560bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 11570bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (m_horizontalScrollbar) { 11580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch int horizontalScrollbarYMin = m_horizontalScrollbar->frameRect().y(); 11590bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch int horizontalScrollbarYMax = m_horizontalScrollbar->frameRect().y() + m_horizontalScrollbar->frameRect().height(); 11600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch int horizontalScrollbarXMin = m_horizontalScrollbar->frameRect().x() + m_horizontalScrollbar->frameRect().width(); 11610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 11620bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return viewPoint.y() > horizontalScrollbarYMin && viewPoint.y() < horizontalScrollbarYMax && viewPoint.x() > horizontalScrollbarXMin; 11630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch } 11640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 11650bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch int verticalScrollbarXMin = m_verticalScrollbar->frameRect().x(); 11660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch int verticalScrollbarXMax = m_verticalScrollbar->frameRect().x() + m_verticalScrollbar->frameRect().width(); 11670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch int verticalScrollbarYMin = m_verticalScrollbar->frameRect().y() + m_verticalScrollbar->frameRect().height(); 11680bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 11690bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return viewPoint.x() > verticalScrollbarXMin && viewPoint.x() < verticalScrollbarXMax && viewPoint.y() > verticalScrollbarYMin; 11700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 11710bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 11728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool ScrollView::scrollbarCornerPresent() const 11738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 117481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch return (m_horizontalScrollbar && m_boundsSize.width() - m_horizontalScrollbar->width() > 0) || 117581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch (m_verticalScrollbar && m_boundsSize.height() - m_verticalScrollbar->height() > 0); 11768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 11778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 11780bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochIntRect ScrollView::convertFromScrollbarToContainingView(const Scrollbar* scrollbar, const IntRect& localRect) const 11790bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 11800bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch // Scrollbars won't be transformed within us 11810bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch IntRect newRect = localRect; 11820bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch newRect.move(scrollbar->x(), scrollbar->y()); 11830bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return newRect; 11840bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 11850bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 11860bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochIntRect ScrollView::convertFromContainingViewToScrollbar(const Scrollbar* scrollbar, const IntRect& parentRect) const 11870bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 11880bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch IntRect newRect = parentRect; 11890bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch // Scrollbars won't be transformed within us 11900bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch newRect.move(-scrollbar->x(), -scrollbar->y()); 11910bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return newRect; 11920bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 11930bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 11940bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch// FIXME: test these on windows 11950bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochIntPoint ScrollView::convertFromScrollbarToContainingView(const Scrollbar* scrollbar, const IntPoint& localPoint) const 11960bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 11970bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch // Scrollbars won't be transformed within us 11980bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch IntPoint newPoint = localPoint; 11990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch newPoint.move(scrollbar->x(), scrollbar->y()); 12000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return newPoint; 12010bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 12020bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 12030bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben MurdochIntPoint ScrollView::convertFromContainingViewToScrollbar(const Scrollbar* scrollbar, const IntPoint& parentPoint) const 12040bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch{ 12050bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch IntPoint newPoint = parentPoint; 12060bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch // Scrollbars won't be transformed within us 12070bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch newPoint.move(-scrollbar->x(), -scrollbar->y()); 12080bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return newPoint; 12090bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch} 12100bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 12118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid ScrollView::setParentVisible(bool visible) 12128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 12138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (isParentVisible() == visible) 12148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 12158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 12168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Widget::setParentVisible(visible); 12178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1218635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project if (!isSelfVisible()) 12198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 12208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 12210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch HashSet<RefPtr<Widget> >::iterator end = m_children.end(); 12220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch for (HashSet<RefPtr<Widget> >::iterator it = m_children.begin(); it != end; ++it) 12238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project (*it)->setParentVisible(visible); 12248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 12258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 12268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid ScrollView::show() 12278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 12288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!isSelfVisible()) { 12298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project setSelfVisible(true); 12308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (isParentVisible()) { 12310bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch HashSet<RefPtr<Widget> >::iterator end = m_children.end(); 12320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch for (HashSet<RefPtr<Widget> >::iterator it = m_children.begin(); it != end; ++it) 12338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project (*it)->setParentVisible(true); 12348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 12358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 12368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 12378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Widget::show(); 12388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 12398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 12408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid ScrollView::hide() 12418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 12428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (isSelfVisible()) { 12438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (isParentVisible()) { 12440bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch HashSet<RefPtr<Widget> >::iterator end = m_children.end(); 12450bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch for (HashSet<RefPtr<Widget> >::iterator it = m_children.begin(); it != end; ++it) 12468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project (*it)->setParentVisible(false); 12478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 12488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project setSelfVisible(false); 12498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 12508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 12518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Widget::hide(); 12528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 12538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 12548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool ScrollView::isOffscreen() const 12558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 12568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (platformWidget()) 12578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return platformIsOffscreen(); 12588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 12598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!isVisible()) 12608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return true; 12618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 12628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // FIXME: Add a HostWindow::isOffscreen method here. Since only Mac implements this method 12638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // currently, we can add the method when the other platforms decide to implement this concept. 12648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return false; 12658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 12668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 12678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 12688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid ScrollView::addPanScrollIcon(const IntPoint& iconPosition) 12698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 12700bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!hostWindow()) 12710bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return; 12728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_drawPanScrollIcon = true; 12738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_panScrollIconPoint = IntPoint(iconPosition.x() - panIconSizeLength / 2 , iconPosition.y() - panIconSizeLength / 2) ; 1274dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block hostWindow()->invalidateContentsAndWindow(IntRect(m_panScrollIconPoint, IntSize(panIconSizeLength, panIconSizeLength)), true /*immediate*/); 12758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 12768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 12778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid ScrollView::removePanScrollIcon() 12788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 12790bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!hostWindow()) 12800bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return; 12818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_drawPanScrollIcon = false; 1282dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block hostWindow()->invalidateContentsAndWindow(IntRect(m_panScrollIconPoint, IntSize(panIconSizeLength, panIconSizeLength)), true /*immediate*/); 12838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 12848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 12852fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockvoid ScrollView::setScrollOrigin(const IntPoint& origin, bool updatePositionAtAll, bool updatePositionSynchronously) 12864a156157940f51b91eadd76f6c86f862ec0a1da0Ben Murdoch{ 1287f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if (m_scrollOrigin == origin) 1288f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch return; 12894a156157940f51b91eadd76f6c86f862ec0a1da0Ben Murdoch 1290f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch m_scrollOrigin = origin; 12914a156157940f51b91eadd76f6c86f862ec0a1da0Ben Murdoch 1292f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch if (platformWidget()) { 12932fc2651226baac27029e38c9d6ef883fa32084dbSteve Block platformSetScrollOrigin(origin, updatePositionAtAll, updatePositionSynchronously); 1294f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch return; 1295f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch } 1296f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 1297f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch // Update if the scroll origin changes, since our position will be different if the content size did not change. 12982fc2651226baac27029e38c9d6ef883fa32084dbSteve Block if (updatePositionAtAll && updatePositionSynchronously) 12994a156157940f51b91eadd76f6c86f862ec0a1da0Ben Murdoch updateScrollbars(scrollOffset()); 13004a156157940f51b91eadd76f6c86f862ec0a1da0Ben Murdoch} 13014a156157940f51b91eadd76f6c86f862ec0a1da0Ben Murdoch 13022bde8e466a4451c7319e3a072d118917957d6554Steve Block#if !PLATFORM(WX) && !USE(NATIVE_GTK_MAIN_FRAME_SCROLLBAR) && !PLATFORM(EFL) 13035f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 13048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid ScrollView::platformInit() 13058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 13068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 13078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 13088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid ScrollView::platformDestroy() 13098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 13108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 13115f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 13128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 13138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 131481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#if !PLATFORM(WX) && !PLATFORM(QT) && !PLATFORM(MAC) 13155f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 13168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid ScrollView::platformAddChild(Widget*) 13178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 13188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 13198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 13208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid ScrollView::platformRemoveChild(Widget*) 13218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 13228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 13235f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 13248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 13258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1326d0825bca7fe65beaee391d30da42e937db621564Steve Block#if !PLATFORM(MAC) 13275f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 1328d0825bca7fe65beaee391d30da42e937db621564Steve Blockvoid ScrollView::platformSetScrollbarsSuppressed(bool) 13298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 13308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 13315f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 13322fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockvoid ScrollView::platformSetScrollOrigin(const IntPoint&, bool updatePositionAtAll, bool updatePositionSynchronously) 13334a156157940f51b91eadd76f6c86f862ec0a1da0Ben Murdoch{ 13344a156157940f51b91eadd76f6c86f862ec0a1da0Ben Murdoch} 13354a156157940f51b91eadd76f6c86f862ec0a1da0Ben Murdoch 13368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 13378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1338d0825bca7fe65beaee391d30da42e937db621564Steve Block#if !PLATFORM(MAC) && !PLATFORM(WX) 13395f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 134022804c073ffc06fd1fc520d1afbad71e353e488dGrace Kloba#if !PLATFORM(ANDROID) 13418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid ScrollView::platformSetScrollbarModes() 13428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 13438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 13448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 13458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid ScrollView::platformScrollbarModes(ScrollbarMode& horizontal, ScrollbarMode& vertical) const 13468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 13475f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian horizontal = ScrollbarAuto; 13485f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian vertical = ScrollbarAuto; 13498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1350635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#endif 1351635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 1352635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectvoid ScrollView::platformSetCanBlitOnScroll(bool) 1353635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{ 1354635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} 1355635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 1356635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectbool ScrollView::platformCanBlitOnScroll() const 1357635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{ 1358635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return false; 1359635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} 13608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1361635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#if !PLATFORM(ANDROID) 13628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectIntRect ScrollView::platformVisibleContentRect(bool) const 13638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 13648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return IntRect(); 13658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1366635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#endif 13678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1368635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#if !PLATFORM(ANDROID) 13698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectIntSize ScrollView::platformContentsSize() const 13708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 13718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return IntSize(); 13728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 13738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 13748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 13758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid ScrollView::platformSetContentsSize() 13768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 13778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 13788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 13798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectIntRect ScrollView::platformContentsToScreen(const IntRect& rect) const 13808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 13818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return rect; 13828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 13838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 13848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectIntPoint ScrollView::platformScreenToContents(const IntPoint& point) const 13858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 13868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return point; 13878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 13888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 13898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if !PLATFORM(ANDROID) 13908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid ScrollView::platformSetScrollPosition(const IntPoint&) 13918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 13928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 13938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 13948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 13958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool ScrollView::platformScroll(ScrollDirection, ScrollGranularity) 13968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 13978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return true; 13988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 13998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 14008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if !PLATFORM(ANDROID) 1401643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockvoid ScrollView::platformRepaintContentRectangle(const IntRect&, bool /*now*/) 14028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 14038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 14048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 14058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifdef ANDROID_CAPTURE_OFFSCREEN_PAINTS 14068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid ScrollView::platformOffscreenContentRectangle(const IntRect& ) 14078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 14088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 14098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 14108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 14118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool ScrollView::platformIsOffscreen() const 14128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 14138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return false; 14148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 14158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 14168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 1417016ea440f1b61a966483fc809a078dd28b784e46Cary Clark#endif 14188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 14198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1420