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