[iOS] Send the full list of file upload URLs and types in PasteboardItemInfo
[WebKit-https.git] / Source / WebCore / platform / ios / LegacyTileGridTile.mm
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 #include "config.h"
27 #include "LegacyTileGridTile.h"
28
29 #if PLATFORM(IOS_FAMILY)
30
31 #include "Color.h"
32 #include "LegacyTileCache.h"
33 #include "LegacyTileGrid.h"
34 #include "LegacyTileLayer.h"
35 #include "LegacyTileLayerPool.h"
36 #include "PlatformScreen.h"
37 #include "WAKWindow.h"
38 #include <algorithm>
39 #include <functional>
40 #include <pal/spi/cocoa/QuartzCoreSPI.h>
41
42 namespace WebCore {
43
44 #if LOG_TILING
45 static int totalTileCount;
46 #endif
47
48 LegacyTileGridTile::LegacyTileGridTile(LegacyTileGrid* tileGrid, const IntRect& tileRect)
49     : m_tileGrid(tileGrid)
50     , m_rect(tileRect)
51 {
52     ASSERT(!tileRect.isEmpty());
53     IntSize pixelSize(m_rect.size());
54     const CGFloat screenScale = m_tileGrid->tileCache().screenScale();
55     pixelSize.scale(screenScale);
56     m_tileLayer = LegacyTileLayerPool::sharedPool()->takeLayerWithSize(pixelSize);
57     if (!m_tileLayer) {
58 #if LOG_TILING
59         NSLog(@"unable to reuse layer with size %d x %d, creating one", pixelSize.width(), pixelSize.height());
60 #endif
61         m_tileLayer = adoptNS([[LegacyTileLayer alloc] init]);
62     }
63     LegacyTileLayer* layer = m_tileLayer.get();
64     if (screenSupportsExtendedColor())
65         layer.contentsFormat = kCAContentsFormatRGBA10XR;
66
67     [layer setTileGrid:tileGrid];
68     [layer setOpaque:m_tileGrid->tileCache().tilesOpaque()];
69     [layer setEdgeAntialiasingMask:0];
70     [layer setNeedsLayoutOnGeometryChange:NO];
71     [layer setContentsScale:screenScale];
72     [layer setDrawsAsynchronously:m_tileGrid->tileCache().acceleratedDrawingEnabled()];
73
74     // Host layer may have other sublayers. Keep the tile layers at the beginning of the array
75     // so they are painted behind everything else.
76     [tileGrid->tileHostLayer() insertSublayer:layer atIndex:tileGrid->tileCount()];
77     [layer setFrame:m_rect];
78     invalidateRect(m_rect);
79     showBorder(m_tileGrid->tileCache().tileBordersVisible());
80
81 #if LOG_TILING
82     ++totalTileCount;
83     NSLog(@"new Tile (%d,%d) %d %d, count %d", tileRect.x(), tileRect.y(), tileRect.width(), tileRect.height(), totalTileCount);
84 #endif
85 }
86
87 LegacyTileGridTile::~LegacyTileGridTile() 
88 {
89     [tileLayer() setTileGrid:0];
90     [tileLayer() removeFromSuperlayer];
91     LegacyTileLayerPool::sharedPool()->addLayer(tileLayer());
92 #if LOG_TILING
93     --totalTileCount;
94     NSLog(@"delete Tile (%d,%d) %d %d, count %d", m_rect.x(), m_rect.y(), m_rect.width(), m_rect.height(), totalTileCount);
95 #endif
96 }
97
98 void LegacyTileGridTile::invalidateRect(const IntRect& windowDirtyRect)
99 {
100     IntRect dirtyRect = intersection(windowDirtyRect, m_rect);
101     if (dirtyRect.isEmpty())
102         return;
103     dirtyRect.move(IntPoint() - m_rect.location());
104     [tileLayer() setNeedsDisplayInRect:dirtyRect];
105
106     if (m_tileGrid->tileCache().tilePaintCountersVisible())
107         [tileLayer() setNeedsDisplayInRect:CGRectMake(0, 0, 46, 25)];
108 }
109
110 void LegacyTileGridTile::setRect(const IntRect& tileRect)
111 {
112     if (m_rect == tileRect)
113         return;
114     m_rect = tileRect;
115     LegacyTileLayer* layer = m_tileLayer.get();
116     [layer setFrame:m_rect];
117     [layer setNeedsDisplay];
118 }
119
120 void LegacyTileGridTile::showBorder(bool flag)
121 {
122     LegacyTileLayer* layer = m_tileLayer.get();
123     if (flag) {
124         [layer setBorderColor:cachedCGColor(m_tileGrid->tileCache().colorForGridTileBorder(m_tileGrid))];
125         [layer setBorderWidth:0.5f];
126     } else {
127         [layer setBorderColor:nil];
128         [layer setBorderWidth:0];
129     }
130 }
131
132 } // namespace WebCore
133
134 #endif // PLATFORM(IOS_FAMILY)