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)