1/*
2 * Copyright (C) 2008 Apple 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 * 1. Redistributions of source code must retain the above copyright
8 *    notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright
10 *    notice, this list of conditions and the following disclaimer in the
11 *    documentation and/or other materials provided with the distribution.
12 *
13 * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
14 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
17 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24 */
25
26#ifndef ScrollbarThemeMac_h
27#define ScrollbarThemeMac_h
28
29#include "ScrollbarThemeComposite.h"
30
31namespace WebCore {
32
33class ScrollbarThemeMac : public ScrollbarThemeComposite {
34public:
35    ScrollbarThemeMac();
36    virtual ~ScrollbarThemeMac();
37
38    void preferencesChanged();
39
40    virtual void updateEnabledState(ScrollbarThemeClient*);
41
42    virtual bool paint(ScrollbarThemeClient*, GraphicsContext*, const IntRect& damageRect);
43
44    virtual int scrollbarThickness(ScrollbarControlSize = RegularScrollbar);
45
46    virtual bool supportsControlTints() const { return true; }
47    virtual bool usesOverlayScrollbars() const;
48    virtual void usesOverlayScrollbarsChanged() override;
49    virtual void updateScrollbarOverlayStyle(ScrollbarThemeClient*);
50
51    virtual double initialAutoscrollTimerDelay();
52    virtual double autoscrollTimerDelay();
53
54    virtual ScrollbarButtonsPlacement buttonsPlacement() const;
55
56    virtual void registerScrollbar(ScrollbarThemeClient*);
57    virtual void unregisterScrollbar(ScrollbarThemeClient*);
58
59    void setNewPainterForScrollbar(ScrollbarThemeClient*, ScrollbarPainter);
60    ScrollbarPainter painterForScrollbar(ScrollbarThemeClient*);
61
62    void setPaintCharacteristicsForScrollbar(ScrollbarThemeClient*);
63
64    static bool isCurrentlyDrawingIntoLayer();
65    static void setIsCurrentlyDrawingIntoLayer(bool);
66
67#if ENABLE(RUBBER_BANDING)
68    static void setUpOverhangAreaBackground(CALayer *, const Color& customBackgroundColor = Color());
69    static void removeOverhangAreaBackground(CALayer *);
70
71    static void setUpOverhangAreaShadow(CALayer *);
72    static void removeOverhangAreaShadow(CALayer *);
73#endif
74
75protected:
76    virtual bool hasButtons(ScrollbarThemeClient*);
77    virtual bool hasThumb(ScrollbarThemeClient*);
78
79    virtual IntRect backButtonRect(ScrollbarThemeClient*, ScrollbarPart, bool painting = false);
80    virtual IntRect forwardButtonRect(ScrollbarThemeClient*, ScrollbarPart, bool painting = false);
81    virtual IntRect trackRect(ScrollbarThemeClient*, bool painting = false);
82
83    virtual int maxOverlapBetweenPages() { return 40; }
84
85    virtual int minimumThumbLength(ScrollbarThemeClient*);
86
87    virtual bool shouldCenterOnThumb(ScrollbarThemeClient*, const PlatformMouseEvent&);
88    virtual bool shouldDragDocumentInsteadOfThumb(ScrollbarThemeClient*, const PlatformMouseEvent&);
89    int scrollbarPartToHIPressedState(ScrollbarPart);
90
91#if ENABLE(RUBBER_BANDING)
92    virtual void setUpOverhangAreasLayerContents(GraphicsLayer*, const Color&) override;
93    virtual void setUpContentShadowLayer(GraphicsLayer*) override;
94#endif
95};
96
97}
98
99#endif
100