Home | History | Annotate | Download | only in exported
      1 /*
      2  * Copyright (C) 2012 Google Inc. All rights reserved.
      3  *
      4  * Redistribution and use in source and binary forms, with or without
      5  * modification, are permitted provided that the following conditions
      6  * are met:
      7  *
      8  * 1.  Redistributions of source code must retain the above copyright
      9  *     notice, this list of conditions and the following disclaimer.
     10  * 2.  Redistributions in binary form must reproduce the above copyright
     11  *     notice, this list of conditions and the following disclaimer in the
     12  *     documentation and/or other materials provided with the distribution.
     13  *
     14  * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
     15  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
     16  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
     17  * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
     18  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
     19  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
     20  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
     21  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     22  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
     23  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     24  */
     25 
     26 #include "config.h"
     27 
     28 #include "platform/exported/WebScrollbarThemeGeometryNative.h"
     29 
     30 #include "platform/exported/WebScrollbarThemeClientImpl.h"
     31 #include "platform/scroll/ScrollbarTheme.h"
     32 #include "public/platform/WebScrollbar.h"
     33 
     34 using namespace WebCore;
     35 
     36 namespace blink {
     37 
     38 PassOwnPtr<blink::WebScrollbarThemeGeometryNative> WebScrollbarThemeGeometryNative::create(WebCore::ScrollbarTheme* theme)
     39 {
     40     return adoptPtr(new WebScrollbarThemeGeometryNative(theme));
     41 }
     42 
     43 WebScrollbarThemeGeometryNative::WebScrollbarThemeGeometryNative(WebCore::ScrollbarTheme* theme)
     44     : m_theme(theme)
     45 {
     46 }
     47 
     48 WebScrollbarThemeGeometryNative* WebScrollbarThemeGeometryNative::clone() const
     49 {
     50     return new WebScrollbarThemeGeometryNative(m_theme);
     51 }
     52 
     53 int WebScrollbarThemeGeometryNative::thumbPosition(WebScrollbar* scrollbar)
     54 {
     55     WebScrollbarThemeClientImpl client(scrollbar);
     56     return m_theme->thumbPosition(&client);
     57 }
     58 
     59 int WebScrollbarThemeGeometryNative::thumbLength(WebScrollbar* scrollbar)
     60 {
     61     WebScrollbarThemeClientImpl client(scrollbar);
     62     return m_theme->thumbLength(&client);
     63 }
     64 
     65 int WebScrollbarThemeGeometryNative::trackPosition(WebScrollbar* scrollbar)
     66 {
     67     WebScrollbarThemeClientImpl client(scrollbar);
     68     return m_theme->trackPosition(&client);
     69 }
     70 
     71 int WebScrollbarThemeGeometryNative::trackLength(WebScrollbar* scrollbar)
     72 {
     73     WebScrollbarThemeClientImpl client(scrollbar);
     74     return m_theme->trackLength(&client);
     75 }
     76 
     77 bool WebScrollbarThemeGeometryNative::hasButtons(WebScrollbar* scrollbar)
     78 {
     79     WebScrollbarThemeClientImpl client(scrollbar);
     80     return m_theme->hasButtons(&client);
     81 }
     82 
     83 bool WebScrollbarThemeGeometryNative::hasThumb(WebScrollbar* scrollbar)
     84 {
     85     WebScrollbarThemeClientImpl client(scrollbar);
     86     return m_theme->hasThumb(&client);
     87 }
     88 
     89 WebRect WebScrollbarThemeGeometryNative::trackRect(WebScrollbar* scrollbar)
     90 {
     91     WebScrollbarThemeClientImpl client(scrollbar);
     92     return m_theme->trackRect(&client);
     93 }
     94 
     95 WebRect WebScrollbarThemeGeometryNative::thumbRect(WebScrollbar* scrollbar)
     96 {
     97     WebScrollbarThemeClientImpl client(scrollbar);
     98     return m_theme->thumbRect(&client);
     99 }
    100 
    101 int WebScrollbarThemeGeometryNative::minimumThumbLength(WebScrollbar* scrollbar)
    102 {
    103     WebScrollbarThemeClientImpl client(scrollbar);
    104     return m_theme->minimumThumbLength(&client);
    105 }
    106 
    107 int WebScrollbarThemeGeometryNative::scrollbarThickness(WebScrollbar* scrollbar)
    108 {
    109     WebScrollbarThemeClientImpl client(scrollbar);
    110     return m_theme->scrollbarThickness(client.controlSize());
    111 }
    112 
    113 WebRect WebScrollbarThemeGeometryNative::backButtonStartRect(WebScrollbar* scrollbar)
    114 {
    115     WebScrollbarThemeClientImpl client(scrollbar);
    116     return m_theme->backButtonRect(&client, BackButtonStartPart, false);
    117 }
    118 
    119 WebRect WebScrollbarThemeGeometryNative::backButtonEndRect(WebScrollbar* scrollbar)
    120 {
    121     WebScrollbarThemeClientImpl client(scrollbar);
    122     return m_theme->backButtonRect(&client, BackButtonEndPart, false);
    123 }
    124 
    125 WebRect WebScrollbarThemeGeometryNative::forwardButtonStartRect(WebScrollbar* scrollbar)
    126 {
    127     WebScrollbarThemeClientImpl client(scrollbar);
    128     return m_theme->forwardButtonRect(&client, ForwardButtonStartPart, false);
    129 }
    130 
    131 WebRect WebScrollbarThemeGeometryNative::forwardButtonEndRect(WebScrollbar* scrollbar)
    132 {
    133     WebScrollbarThemeClientImpl client(scrollbar);
    134     return m_theme->forwardButtonRect(&client, ForwardButtonEndPart, false);
    135 }
    136 
    137 WebRect WebScrollbarThemeGeometryNative::constrainTrackRectToTrackPieces(WebScrollbar* scrollbar, const WebRect& rect)
    138 {
    139     WebScrollbarThemeClientImpl client(scrollbar);
    140     return m_theme->constrainTrackRectToTrackPieces(&client, IntRect(rect));
    141 }
    142 
    143 void WebScrollbarThemeGeometryNative::splitTrack(WebScrollbar* scrollbar, const WebRect& webTrack, WebRect& webStartTrack, WebRect& webThumb, WebRect& webEndTrack)
    144 {
    145     WebScrollbarThemeClientImpl client(scrollbar);
    146     IntRect track(webTrack);
    147     IntRect startTrack;
    148     IntRect thumb;
    149     IntRect endTrack;
    150     m_theme->splitTrack(&client, track, startTrack, thumb, endTrack);
    151 
    152     webStartTrack = startTrack;
    153     webThumb = thumb;
    154     webEndTrack = endTrack;
    155 }
    156 
    157 } // namespace blink
    158