12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)/* 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Copyright (C) 2012 Google Inc. All rights reserved. 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Redistribution and use in source and binary forms, with or without 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * modification, are permitted provided that the following conditions 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * are met: 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * 1. Redistributions of source code must retain the above copyright 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * notice, this list of conditions and the following disclaimer. 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * 2. Redistributions in binary form must reproduce the above copyright 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * notice, this list of conditions and the following disclaimer in the 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * documentation and/or other materials provided with the distribution. 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 23ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 24ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch */ 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "config.h" 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 28a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "platform/exported/WebScrollbarThemeGeometryNative.h" 29a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 30a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "platform/exported/WebScrollbarThemeClientImpl.h" 31a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "platform/scroll/ScrollbarTheme.h" 32a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "public/platform/WebScrollbar.h" 33a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 34a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)namespace blink { 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)PassOwnPtr<WebScrollbarThemeGeometryNative> WebScrollbarThemeGeometryNative::create(ScrollbarTheme* theme) 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles){ 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return adoptPtr(new WebScrollbarThemeGeometryNative(theme)); 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)WebScrollbarThemeGeometryNative::WebScrollbarThemeGeometryNative(ScrollbarTheme* theme) 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : m_theme(theme) 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles){ 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)WebScrollbarThemeGeometryNative* WebScrollbarThemeGeometryNative::clone() const 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles){ 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return new WebScrollbarThemeGeometryNative(m_theme); 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)int WebScrollbarThemeGeometryNative::thumbPosition(WebScrollbar* scrollbar) 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles){ 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebScrollbarThemeClientImpl client(scrollbar); 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return m_theme->thumbPosition(&client); 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)int WebScrollbarThemeGeometryNative::thumbLength(WebScrollbar* scrollbar) 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles){ 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebScrollbarThemeClientImpl client(scrollbar); 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return m_theme->thumbLength(&client); 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)int WebScrollbarThemeGeometryNative::trackPosition(WebScrollbar* scrollbar) 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles){ 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebScrollbarThemeClientImpl client(scrollbar); 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return m_theme->trackPosition(&client); 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)int WebScrollbarThemeGeometryNative::trackLength(WebScrollbar* scrollbar) 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles){ 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebScrollbarThemeClientImpl client(scrollbar); 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return m_theme->trackLength(&client); 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool WebScrollbarThemeGeometryNative::hasButtons(WebScrollbar* scrollbar) 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles){ 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebScrollbarThemeClientImpl client(scrollbar); 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return m_theme->hasButtons(&client); 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)bool WebScrollbarThemeGeometryNative::hasThumb(WebScrollbar* scrollbar) 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles){ 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebScrollbarThemeClientImpl client(scrollbar); 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return m_theme->hasThumb(&client); 852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)WebRect WebScrollbarThemeGeometryNative::trackRect(WebScrollbar* scrollbar) 882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles){ 892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebScrollbarThemeClientImpl client(scrollbar); 902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return m_theme->trackRect(&client); 912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)WebRect WebScrollbarThemeGeometryNative::thumbRect(WebScrollbar* scrollbar) 942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles){ 952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebScrollbarThemeClientImpl client(scrollbar); 962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return m_theme->thumbRect(&client); 972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)int WebScrollbarThemeGeometryNative::minimumThumbLength(WebScrollbar* scrollbar) 1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles){ 1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebScrollbarThemeClientImpl client(scrollbar); 1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return m_theme->minimumThumbLength(&client); 1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)int WebScrollbarThemeGeometryNative::scrollbarThickness(WebScrollbar* scrollbar) 1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles){ 1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebScrollbarThemeClientImpl client(scrollbar); 1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return m_theme->scrollbarThickness(client.controlSize()); 1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)WebRect WebScrollbarThemeGeometryNative::backButtonStartRect(WebScrollbar* scrollbar) 1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles){ 1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebScrollbarThemeClientImpl client(scrollbar); 1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return m_theme->backButtonRect(&client, BackButtonStartPart, false); 1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)WebRect WebScrollbarThemeGeometryNative::backButtonEndRect(WebScrollbar* scrollbar) 1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles){ 1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebScrollbarThemeClientImpl client(scrollbar); 1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return m_theme->backButtonRect(&client, BackButtonEndPart, false); 1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)WebRect WebScrollbarThemeGeometryNative::forwardButtonStartRect(WebScrollbar* scrollbar) 1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles){ 1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebScrollbarThemeClientImpl client(scrollbar); 1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return m_theme->forwardButtonRect(&client, ForwardButtonStartPart, false); 1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)WebRect WebScrollbarThemeGeometryNative::forwardButtonEndRect(WebScrollbar* scrollbar) 1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles){ 1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebScrollbarThemeClientImpl client(scrollbar); 1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return m_theme->forwardButtonRect(&client, ForwardButtonEndPart, false); 1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)WebRect WebScrollbarThemeGeometryNative::constrainTrackRectToTrackPieces(WebScrollbar* scrollbar, const WebRect& rect) 1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles){ 1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebScrollbarThemeClientImpl client(scrollbar); 1382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return m_theme->constrainTrackRectToTrackPieces(&client, IntRect(rect)); 1392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void WebScrollbarThemeGeometryNative::splitTrack(WebScrollbar* scrollbar, const WebRect& webTrack, WebRect& webStartTrack, WebRect& webThumb, WebRect& webEndTrack) 1422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles){ 1432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) WebScrollbarThemeClientImpl client(scrollbar); 1442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) IntRect track(webTrack); 145a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) IntRect startTrack; 146a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) IntRect thumb; 147a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) IntRect endTrack; 148a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) m_theme->splitTrack(&client, track, startTrack, thumb, endTrack); 149a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 150a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) webStartTrack = startTrack; 151a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) webThumb = thumb; 152a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) webEndTrack = endTrack; 153a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 154a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 155a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} // namespace blink 156a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)