[iOS] Send the full list of file upload URLs and types in PasteboardItemInfo
[WebKit-https.git] / Source / WebCore / platform / ios / LegacyTileGrid.h
1 /*
2  * Copyright (C) 2011 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 LegacyTileGrid_h
27 #define LegacyTileGrid_h
28
29 #if PLATFORM(IOS_FAMILY)
30
31 #include "IntPoint.h"
32 #include "IntPointHash.h"
33 #include "IntRect.h"
34 #include "IntSize.h"
35 #include "LegacyTileCache.h"
36 #include <wtf/HashMap.h>
37 #include <wtf/RefPtr.h>
38 #include <wtf/RetainPtr.h>
39
40 #define LOG_TILING 0
41
42 @class CALayer;
43
44 namespace WebCore {
45
46 class LegacyTileGridTile;
47
48 class LegacyTileGrid {
49 public:
50     typedef IntPoint TileIndex;
51
52     LegacyTileGrid(LegacyTileCache&, const IntSize&);
53     ~LegacyTileGrid();
54
55     LegacyTileCache& tileCache() const { return m_tileCache; }
56
57     CALayer *tileHostLayer() const;
58     IntRect bounds() const;
59     unsigned tileCount() const;
60
61     float scale() const { return m_scale; }
62     void setScale(float scale) { m_scale = scale; }
63
64     IntRect visibleRect() const;
65
66     void createTiles(LegacyTileCache::SynchronousTileCreationMode);
67
68     void dropAllTiles();
69     void dropInvalidTiles();
70     void dropTilesOutsideRect(const IntRect&);
71     void dropTilesIntersectingRect(const IntRect&);
72     // Drops tiles that intersect dropRect but do not intersect keepRect.
73     void dropTilesBetweenRects(const IntRect& dropRect, const IntRect& keepRect);
74     bool dropDistantTiles(unsigned tilesNeeded, double shortestDistance);
75
76     void addTilesCoveringRect(const IntRect&);
77
78     bool tilesCover(const IntRect&) const;
79     void centerTileGridOrigin(const IntRect& visibleRect);
80     void invalidateTiles(const IntRect& dirtyRect);
81
82     void updateTileOpacity();
83     void updateTileBorderVisibility();
84     void updateHostLayerSize();
85     bool checkDoSingleTileLayout();
86
87     bool hasTiles() const { return !m_tiles.isEmpty(); }
88
89     IntRect calculateCoverRect(const IntRect& visibleRect, bool& centerGrid);
90
91     // Logging
92     void dumpTiles();
93
94 private:
95     double tileDistance2(const IntRect& visibleRect, const IntRect& tileRect) const;
96     unsigned tileByteSize() const;
97
98     void addTileForIndex(const TileIndex&);
99
100     RefPtr<LegacyTileGridTile> tileForIndex(const TileIndex&) const;
101     IntRect tileRectForIndex(const TileIndex&) const;
102     RefPtr<LegacyTileGridTile> tileForPoint(const IntPoint&) const;
103     TileIndex tileIndexForPoint(const IntPoint&) const;
104
105     IntRect adjustCoverRectForPageBounds(const IntRect&) const;
106     bool shouldUseMinimalTileCoverage() const;
107
108 private:        
109     LegacyTileCache& m_tileCache;
110     RetainPtr<CALayer> m_tileHostLayer;
111
112     IntPoint m_origin;
113     IntSize m_tileSize;
114
115     float m_scale;
116
117     typedef HashMap<TileIndex, RefPtr<LegacyTileGridTile>> TileMap;
118     TileMap m_tiles;
119
120     IntRect m_validBounds;
121 };
122
123 static inline IntPoint topLeft(const IntRect& rect)
124 {
125     return rect.location();
126 }
127
128 static inline IntPoint bottomRight(const IntRect& rect)
129 {
130     return IntPoint(rect.maxX() - 1, rect.maxY() - 1);
131 }
132
133 } // namespace WebCore
134
135 #endif // PLATFORM(IOS_FAMILY)
136 #endif // TileGrid_h