1ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch/* 2ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch * Copyright (c) 2010, Google Inc. All rights reserved. 3ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch * Copyright (C) 2008, 2011 Apple Inc. All Rights Reserved. 4ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch * 5ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch * Redistribution and use in source and binary forms, with or without 6ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch * modification, are permitted provided that the following conditions are 7ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch * met: 8ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch * 9ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch * * Redistributions of source code must retain the above copyright 10ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch * notice, this list of conditions and the following disclaimer. 11ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch * * Redistributions in binary form must reproduce the above 12ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch * copyright notice, this list of conditions and the following disclaimer 13ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch * in the documentation and/or other materials provided with the 14ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch * distribution. 15ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch * * Neither the name of Google Inc. nor the names of its 16ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch * contributors may be used to endorse or promote products derived from 17ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch * this software without specific prior written permission. 18ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch * 19ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 20ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 21ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 22ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 23ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 24ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 25ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 26ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 27ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 28ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 29ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch */ 31ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 32ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch#include "config.h" 33ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch#include "ScrollableArea.h" 34ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 352daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#include "GraphicsContext.h" 362daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#include "GraphicsLayer.h" 37ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch#include "FloatPoint.h" 38ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch#include "PlatformWheelEvent.h" 39ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch#include "ScrollAnimator.h" 402fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#include "ScrollbarTheme.h" 41ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch#include <wtf/PassOwnPtr.h> 42ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 43ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochnamespace WebCore { 44ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 45ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen MurdochScrollableArea::ScrollableArea() 46ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch : m_scrollAnimator(ScrollAnimator::create(this)) 472fc2651226baac27029e38c9d6ef883fa32084dbSteve Block , m_constrainsScrollingToContentEdge(true) 482fc2651226baac27029e38c9d6ef883fa32084dbSteve Block , m_inLiveResize(false) 492daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch , m_verticalScrollElasticity(ScrollElasticityNone) 502daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch , m_horizontalScrollElasticity(ScrollElasticityNone) 51ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch{ 52ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch} 53ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 54ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen MurdochScrollableArea::~ScrollableArea() 55ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch{ 56ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch} 57ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 58ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochbool ScrollableArea::scroll(ScrollDirection direction, ScrollGranularity granularity, float multiplier) 59ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch{ 60ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch ScrollbarOrientation orientation; 61ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch Scrollbar* scrollbar; 62ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch if (direction == ScrollUp || direction == ScrollDown) { 63ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch orientation = VerticalScrollbar; 64ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch scrollbar = verticalScrollbar(); 65ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch } else { 66ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch orientation = HorizontalScrollbar; 67ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch scrollbar = horizontalScrollbar(); 68ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch } 69ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 70ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch if (!scrollbar) 71ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch return false; 72ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 73ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch float step = 0; 74ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch switch (granularity) { 75ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch case ScrollByLine: 76ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch step = scrollbar->lineStep(); 77ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch break; 78ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch case ScrollByPage: 79ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch step = scrollbar->pageStep(); 80ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch break; 81ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch case ScrollByDocument: 82ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch step = scrollbar->totalSize(); 83ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch break; 84ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch case ScrollByPixel: 85ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch step = scrollbar->pixelStep(); 86ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch break; 87ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch } 88ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 89ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch if (direction == ScrollUp || direction == ScrollLeft) 90ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch multiplier = -multiplier; 91ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 92ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch return m_scrollAnimator->scroll(orientation, granularity, step, multiplier); 93ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch} 94ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 95ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochvoid ScrollableArea::scrollToOffsetWithoutAnimation(const FloatPoint& offset) 96ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch{ 97ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch m_scrollAnimator->scrollToOffsetWithoutAnimation(offset); 98ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch} 99ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 100ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochvoid ScrollableArea::scrollToOffsetWithoutAnimation(ScrollbarOrientation orientation, float offset) 101ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch{ 102ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch if (orientation == HorizontalScrollbar) 103ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch scrollToXOffsetWithoutAnimation(offset); 104ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch else 105ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch scrollToYOffsetWithoutAnimation(offset); 106ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch} 107ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 108ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochvoid ScrollableArea::scrollToXOffsetWithoutAnimation(float x) 109ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch{ 110ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch scrollToOffsetWithoutAnimation(FloatPoint(x, m_scrollAnimator->currentPosition().y())); 111ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch} 112ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 113ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochvoid ScrollableArea::scrollToYOffsetWithoutAnimation(float y) 114ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch{ 115ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch scrollToOffsetWithoutAnimation(FloatPoint(m_scrollAnimator->currentPosition().x(), y)); 116ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch} 117ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 1182fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockvoid ScrollableArea::handleWheelEvent(PlatformWheelEvent& wheelEvent) 1192fc2651226baac27029e38c9d6ef883fa32084dbSteve Block{ 1202fc2651226baac27029e38c9d6ef883fa32084dbSteve Block m_scrollAnimator->handleWheelEvent(wheelEvent); 1212fc2651226baac27029e38c9d6ef883fa32084dbSteve Block} 1222fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 1232fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#if ENABLE(GESTURE_EVENTS) 1242fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockvoid ScrollableArea::handleGestureEvent(const PlatformGestureEvent& gestureEvent) 1252fc2651226baac27029e38c9d6ef883fa32084dbSteve Block{ 1262fc2651226baac27029e38c9d6ef883fa32084dbSteve Block m_scrollAnimator->handleGestureEvent(gestureEvent); 1272fc2651226baac27029e38c9d6ef883fa32084dbSteve Block} 1282fc2651226baac27029e38c9d6ef883fa32084dbSteve Block#endif 1292fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 130ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochvoid ScrollableArea::setScrollOffsetFromAnimation(const IntPoint& offset) 131ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch{ 132ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch // Tell the derived class to scroll its contents. 133ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch setScrollOffset(offset); 134ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 13581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch Scrollbar* verticalScrollbar = this->verticalScrollbar(); 1362fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 137ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch // Tell the scrollbars to update their thumb postions. 1382fc2651226baac27029e38c9d6ef883fa32084dbSteve Block if (Scrollbar* horizontalScrollbar = this->horizontalScrollbar()) { 139ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch horizontalScrollbar->offsetDidChange(); 14081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch if (horizontalScrollbar->isOverlayScrollbar()) { 14181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch if (!verticalScrollbar) 14281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch horizontalScrollbar->invalidate(); 14381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch else { 14481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch // If there is both a horizontalScrollbar and a verticalScrollbar, 14581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch // then we must also invalidate the corner between them. 14681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch IntRect boundsAndCorner = horizontalScrollbar->boundsRect(); 14781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch boundsAndCorner.setWidth(boundsAndCorner.width() + verticalScrollbar->width()); 14881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch horizontalScrollbar->invalidateRect(boundsAndCorner); 14981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch } 15081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch } 1512fc2651226baac27029e38c9d6ef883fa32084dbSteve Block } 15281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch if (verticalScrollbar) { 153ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch verticalScrollbar->offsetDidChange(); 15481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch if (verticalScrollbar->isOverlayScrollbar()) 1552fc2651226baac27029e38c9d6ef883fa32084dbSteve Block verticalScrollbar->invalidate(); 1562fc2651226baac27029e38c9d6ef883fa32084dbSteve Block } 1572fc2651226baac27029e38c9d6ef883fa32084dbSteve Block} 1582fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 1592fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockvoid ScrollableArea::willStartLiveResize() 1602fc2651226baac27029e38c9d6ef883fa32084dbSteve Block{ 1612fc2651226baac27029e38c9d6ef883fa32084dbSteve Block if (m_inLiveResize) 1622fc2651226baac27029e38c9d6ef883fa32084dbSteve Block return; 1632fc2651226baac27029e38c9d6ef883fa32084dbSteve Block m_inLiveResize = true; 1642fc2651226baac27029e38c9d6ef883fa32084dbSteve Block scrollAnimator()->willStartLiveResize(); 1652fc2651226baac27029e38c9d6ef883fa32084dbSteve Block} 1662fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 1672fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockvoid ScrollableArea::willEndLiveResize() 1682fc2651226baac27029e38c9d6ef883fa32084dbSteve Block{ 1692fc2651226baac27029e38c9d6ef883fa32084dbSteve Block if (!m_inLiveResize) 1702fc2651226baac27029e38c9d6ef883fa32084dbSteve Block return; 1712fc2651226baac27029e38c9d6ef883fa32084dbSteve Block m_inLiveResize = false; 1722fc2651226baac27029e38c9d6ef883fa32084dbSteve Block scrollAnimator()->willEndLiveResize(); 1732fc2651226baac27029e38c9d6ef883fa32084dbSteve Block} 1742fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 1752fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockvoid ScrollableArea::didAddVerticalScrollbar(Scrollbar* scrollbar) 1762fc2651226baac27029e38c9d6ef883fa32084dbSteve Block{ 1772fc2651226baac27029e38c9d6ef883fa32084dbSteve Block scrollAnimator()->didAddVerticalScrollbar(scrollbar); 1782fc2651226baac27029e38c9d6ef883fa32084dbSteve Block} 1792fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 1802fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockvoid ScrollableArea::willRemoveVerticalScrollbar(Scrollbar* scrollbar) 1812fc2651226baac27029e38c9d6ef883fa32084dbSteve Block{ 1822fc2651226baac27029e38c9d6ef883fa32084dbSteve Block scrollAnimator()->willRemoveVerticalScrollbar(scrollbar); 1832fc2651226baac27029e38c9d6ef883fa32084dbSteve Block} 1842fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 1852fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockvoid ScrollableArea::didAddHorizontalScrollbar(Scrollbar* scrollbar) 1862fc2651226baac27029e38c9d6ef883fa32084dbSteve Block{ 1872fc2651226baac27029e38c9d6ef883fa32084dbSteve Block scrollAnimator()->didAddHorizontalScrollbar(scrollbar); 1882fc2651226baac27029e38c9d6ef883fa32084dbSteve Block} 1892fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 1902fc2651226baac27029e38c9d6ef883fa32084dbSteve Blockvoid ScrollableArea::willRemoveHorizontalScrollbar(Scrollbar* scrollbar) 1912fc2651226baac27029e38c9d6ef883fa32084dbSteve Block{ 1922fc2651226baac27029e38c9d6ef883fa32084dbSteve Block scrollAnimator()->willRemoveHorizontalScrollbar(scrollbar); 193ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch} 194ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 19581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochbool ScrollableArea::hasOverlayScrollbars() const 19681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch{ 19781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch return (verticalScrollbar() && verticalScrollbar()->isOverlayScrollbar()) 19881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch || (horizontalScrollbar() && horizontalScrollbar()->isOverlayScrollbar()); 19981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch} 20081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 2012daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochvoid ScrollableArea::invalidateScrollbar(Scrollbar* scrollbar, const IntRect& rect) 2022daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch{ 2032daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#if USE(ACCELERATED_COMPOSITING) 2042daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch if (scrollbar == horizontalScrollbar()) { 2052daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch if (GraphicsLayer* graphicsLayer = layerForHorizontalScrollbar()) { 2062daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch graphicsLayer->setNeedsDisplay(); 2072daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch return; 2082daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch } 2092daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch } else if (scrollbar == verticalScrollbar()) { 2102daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch if (GraphicsLayer* graphicsLayer = layerForVerticalScrollbar()) { 2112daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch graphicsLayer->setNeedsDisplay(); 2122daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch return; 2132daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch } 2142daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch } 2152daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#endif 2162daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch invalidateScrollbarRect(scrollbar, rect); 2172daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch} 2182daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 2192daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochvoid ScrollableArea::invalidateScrollCorner() 2202daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch{ 2212daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#if USE(ACCELERATED_COMPOSITING) 2222daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch if (GraphicsLayer* graphicsLayer = layerForScrollCorner()) { 2232daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch graphicsLayer->setNeedsDisplay(); 2242daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch return; 2252daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch } 2262daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#endif 2272daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch invalidateScrollCornerRect(scrollCornerRect()); 2282daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch} 2292daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 230ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch} // namespace WebCore 231