1/*
2 * Copyright (C) 2009 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 COMPUTER, 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#include "config.h"
27
28#if USE(ACCELERATED_COMPOSITING)
29
30#import "WebTiledLayer.h"
31
32#import "GraphicsContext.h"
33#import "GraphicsLayerCA.h"
34#import "PlatformCALayer.h"
35
36using namespace WebCore;
37
38@implementation WebTiledLayer
39
40// Set a zero duration for the fade in of tiles
41+ (CFTimeInterval)fadeDuration
42{
43    return 0;
44}
45
46// Make sure that tiles are drawn on the main thread
47+ (BOOL)shouldDrawOnMainThread
48{
49    return YES;
50}
51
52+ (unsigned int)prefetchedTiles
53{
54    return 2;
55}
56
57// Disable default animations
58- (id<CAAction>)actionForKey:(NSString *)key
59{
60    UNUSED_PARAM(key);
61    return nil;
62}
63
64- (void)setNeedsDisplay
65{
66    PlatformCALayer* layer = PlatformCALayer::platformCALayer(self);
67    if (layer && layer->owner() && layer->owner()->platformCALayerDrawsContent())
68        [super setNeedsDisplay];
69}
70
71- (void)setNeedsDisplayInRect:(CGRect)dirtyRect
72{
73    PlatformCALayer* platformLayer = PlatformCALayer::platformCALayer(self);
74    if (!platformLayer) {
75        [super setNeedsDisplayInRect:dirtyRect];
76        return;
77    }
78
79    if (PlatformCALayerClient* layerOwner = platformLayer->owner()) {
80        if (layerOwner->platformCALayerDrawsContent()) {
81            if (layerOwner->platformCALayerContentsOrientation() == WebCore::GraphicsLayer::CompositingCoordinatesBottomUp)
82                dirtyRect.origin.y = [self bounds].size.height - dirtyRect.origin.y - dirtyRect.size.height;
83
84            [super setNeedsDisplayInRect:dirtyRect];
85
86            if (layerOwner->platformCALayerShowRepaintCounter(platformLayer)) {
87                CGRect bounds = [self bounds];
88                CGRect indicatorRect = CGRectMake(bounds.origin.x, bounds.origin.y, 52, 27);
89                if (layerOwner->platformCALayerContentsOrientation() == WebCore::GraphicsLayer::CompositingCoordinatesBottomUp)
90                    indicatorRect.origin.y = [self bounds].size.height - indicatorRect.origin.y - indicatorRect.size.height;
91
92                [super setNeedsDisplayInRect:indicatorRect];
93            }
94        }
95    }
96}
97
98- (void)display
99{
100    [super display];
101    PlatformCALayer* layer = PlatformCALayer::platformCALayer(self);
102    if (layer && layer->owner())
103        layer->owner()->platformCALayerLayerDidDisplay(self);
104}
105
106- (void)drawInContext:(CGContextRef)context
107{
108    PlatformCALayer* layer = PlatformCALayer::platformCALayer(self);
109    if (layer)
110        drawLayerContents(context, self, layer);
111}
112
113@end // implementation WebTiledLayer
114
115#endif // USE(ACCELERATED_COMPOSITING)
116