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