d40e5ed62a322ebcfc30c4a259f4071f1abe0ae1
[WebKit-https.git] / Source / WebCore / platform / graphics / TiledBacking.h
1 /*
2  * Copyright (C) 2012 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. AND ITS CONTRIBUTORS ``AS IS''
14  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
15  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
17  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
18  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
19  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
20  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
21  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
22  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
23  * THE POSSIBILITY OF SUCH DAMAGE.
24  */
25
26 #ifndef TiledBacking_h
27 #define TiledBacking_h
28
29 namespace WebCore {
30
31 static const int defaultTileWidth = 512;
32 static const int defaultTileHeight = 512;
33
34 class IntRect;
35 #if PLATFORM(COCOA)
36 class PlatformCALayer;
37 #endif
38
39 enum ScrollingModeIndication {
40     SynchronousScrollingBecauseOfStyleIndication,
41     SynchronousScrollingBecauseOfEventHandlersIndication,
42     AsyncScrollingIndication
43 };
44
45 class TiledBacking {
46 public:
47     virtual ~TiledBacking() { }
48
49     virtual void setVisibleRect(const FloatRect&) = 0;
50     virtual FloatRect visibleRect() const = 0;
51     virtual bool tilesWouldChangeForVisibleRect(const FloatRect&) const = 0;
52
53     virtual void setExposedRect(const FloatRect&) = 0;
54
55     virtual void prepopulateRect(const FloatRect&) = 0;
56
57     virtual void setIsInWindow(bool) = 0;
58
59     enum {
60         CoverageForVisibleArea = 0,
61         CoverageForVerticalScrolling = 1 << 0,
62         CoverageForHorizontalScrolling = 1 << 1,
63         CoverageForSlowScrolling = 1 << 2, // Indicates that we expect to paint a lot on scrolling.
64         CoverageForScrolling = CoverageForVerticalScrolling | CoverageForHorizontalScrolling
65     };
66     typedef unsigned TileCoverage;
67
68     virtual void setTileCoverage(TileCoverage) = 0;
69     virtual TileCoverage tileCoverage() const = 0;
70
71     virtual IntSize tileSize() const = 0;
72
73     virtual void revalidateTiles() = 0;
74     virtual void forceRepaint() = 0;
75
76     virtual void setScrollingPerformanceLoggingEnabled(bool) = 0;
77     virtual bool scrollingPerformanceLoggingEnabled() const = 0;
78     
79     virtual void setAggressivelyRetainsTiles(bool) = 0;
80     virtual bool aggressivelyRetainsTiles() const = 0;
81     
82     virtual void setUnparentsOffscreenTiles(bool) = 0;
83     virtual bool unparentsOffscreenTiles() const = 0;
84     
85     virtual double retainedTileBackingStoreMemory() const = 0;
86
87     virtual void setTileMargins(int marginTop, int marginBottom, int marginLeft, int marginRight) = 0;
88     virtual bool hasMargins() const = 0;
89
90     virtual int topMarginHeight() const = 0;
91     virtual int bottomMarginHeight() const = 0;
92     virtual int leftMarginWidth() const = 0;
93     virtual int rightMarginWidth() const = 0;
94
95     // Includes margins.
96     virtual IntRect bounds() const = 0;
97
98     // Exposed for testing
99     virtual IntRect tileCoverageRect() const = 0;
100     virtual IntRect tileGridExtent() const = 0;
101     virtual void setScrollingModeIndication(ScrollingModeIndication) = 0;
102
103 #if PLATFORM(COCOA)
104     virtual PlatformCALayer* tiledScrollingIndicatorLayer() = 0;
105 #endif
106 };
107
108 } // namespace WebCore
109
110 #endif // TiledBacking_h