16c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen/* 26c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen * Copyright (C) 2010 Google Inc. All rights reserved. 36c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen * 46c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen * Redistribution and use in source and binary forms, with or without 56c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen * modification, are permitted provided that the following conditions are 66c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen * met: 76c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen * 86c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen * * Redistributions of source code must retain the above copyright 96c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen * notice, this list of conditions and the following disclaimer. 106c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen * * Redistributions in binary form must reproduce the above 116c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen * copyright notice, this list of conditions and the following disclaimer 126c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen * in the documentation and/or other materials provided with the 136c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen * distribution. 146c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen * * Neither the name of Google Inc. nor the names of its 156c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen * contributors may be used to endorse or promote products derived from 166c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen * this software without specific prior written permission. 176c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen * 186c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 196c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 206c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 216c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 226c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 236c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 246c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 256c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 266c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 276c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 286c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 296c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen */ 306c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen 316c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen#ifndef WebScrollbar_h 326c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen#define WebScrollbar_h 336c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen 346c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen#include "WebCanvas.h" 356c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen#include "WebCommon.h" 366c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen 376c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsennamespace WebKit { 386c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen 396c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsenclass WebInputEvent; 406c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsenclass WebScrollbarClient; 416c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsenstruct WebRect; 426c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen 436c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsenclass WebScrollbar { 446c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsenpublic: 456c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen enum Orientation { 466c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen Horizontal, 476c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen Vertical 486c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen }; 496c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen 506c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen enum ScrollDirection { 516c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen ScrollBackward, 526c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen ScrollForward 536c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen }; 546c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen 556c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen enum ScrollGranularity { 566c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen ScrollByLine, 576c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen ScrollByPage, 586c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen ScrollByDocument, 596c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen ScrollByPixel 606c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen }; 616c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen 626c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen // Creates a WebScrollbar. 636c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen WEBKIT_API static WebScrollbar* create(WebScrollbarClient*, Orientation); 646c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen 656c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen virtual ~WebScrollbar() {} 666c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen 676c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen // Gets the thickness of the scrollbar in pixels. 686c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen WEBKIT_API static int defaultThickness(); 696c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen 706c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen // Sets the rectangle of the scrollbar. 716c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen virtual void setLocation(const WebRect&) = 0; 726c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen 736c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen // Gets the current value (i.e. position inside the region). 746c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen virtual int value() const = 0; 756c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen 766c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen // Sets the current value. 776c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen virtual void setValue(int position) = 0; 786c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen 796c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen // Sets the size of the scrollable region in pixels. i.e. if a document is 806c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen // 800x10000 pixels and the viewport is 1000x1000 pixels, then setLocation 816c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen // for the vertical scrollbar would have passed in a rectangle like: 826c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen // (800 - defaultThickness(), 0) (defaultThickness() x 10000) 836c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen // and setDocumentSize(10000) 846c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen virtual void setDocumentSize(int size) = 0; 856c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen 866c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen // Scroll back or forward with the given granularity. 876c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen virtual void scroll(ScrollDirection, ScrollGranularity, float multiplier) = 0; 886c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen 896c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen // Paint the given rectangle. 906c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen virtual void paint(WebCanvas*, const WebRect&) = 0; 916c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen 926c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen // Returns true iff the given event was used. 936c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen virtual bool handleInputEvent(const WebInputEvent&) = 0; 946c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen}; 956c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen 966c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen} // namespace WebKit 976c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen 986c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen#endif 99