7785282f89145c3c02c572c2afb778637dc5f7c2
[WebKit-https.git] / Source / WebCore / platform / graphics / ca / mac / WebTiledBackingLayer.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. ``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 #import "config.h"
27 #import "WebTiledBackingLayer.h"
28
29 #import "IntRect.h"
30 #import "TileController.h"
31 #import <wtf/MainThread.h>
32
33 using namespace WebCore;
34
35 @implementation WebTiledBackingLayer
36
37 - (id)init
38 {
39     self = [super init];
40     if (!self)
41         return nil;
42
43 #ifndef NDEBUG
44     [self setName:@"WebTiledBackingLayer"];
45 #endif
46     return self;
47 }
48
49 - (void)dealloc
50 {
51     ASSERT(!_tileController);
52
53     [super dealloc];
54 }
55
56 - (id)initWithLayer:(id)layer
57 {
58     UNUSED_PARAM(layer);
59
60     ASSERT_NOT_REACHED();
61     return nil;
62 }
63
64 - (TileController*)createTileController:(PlatformCALayer*)rootLayer
65 {
66     ASSERT(!_tileController);
67     _tileController = TileController::create(rootLayer);
68     return _tileController.get();
69 }
70
71 - (id<CAAction>)actionForKey:(NSString *)key
72 {
73     UNUSED_PARAM(key);
74     
75     // Disable all animations.
76     return nil;
77 }
78
79 - (void)setBounds:(CGRect)bounds
80 {
81     [super setBounds:bounds];
82
83     _tileController->tileCacheLayerBoundsChanged();
84 }
85
86 - (void)setOpaque:(BOOL)opaque
87 {
88     _tileController->setTilesOpaque(opaque);
89 }
90
91 - (BOOL)isOpaque
92 {
93     return _tileController->tilesAreOpaque();
94 }
95
96 - (void)setNeedsDisplay
97 {
98     _tileController->setNeedsDisplay();
99 }
100
101 - (void)setNeedsDisplayInRect:(CGRect)rect
102 {
103     _tileController->setNeedsDisplayInRect(enclosingIntRect(rect));
104 }
105
106 - (void)setAcceleratesDrawing:(BOOL)acceleratesDrawing
107 {
108     _tileController->setAcceleratesDrawing(acceleratesDrawing);
109 }
110
111 - (BOOL)acceleratesDrawing
112 {
113     return _tileController->acceleratesDrawing();
114 }
115
116 - (void)setContentsScale:(CGFloat)contentsScale
117 {
118     _tileController->setScale(contentsScale);
119 }
120
121 - (WebCore::TiledBacking*)tiledBacking
122 {
123     return _tileController.get();
124 }
125
126 - (void)invalidate
127 {
128     ASSERT(isMainThread());
129     ASSERT(_tileController);
130     _tileController = nullptr;
131 }
132
133 - (void)setBorderColor:(CGColorRef)borderColor
134 {
135     _tileController->setTileDebugBorderColor(Color(borderColor));
136 }
137
138 - (void)setBorderWidth:(CGFloat)borderWidth
139 {
140     // Tiles adjoin, so halve the border width.
141     _tileController->setTileDebugBorderWidth(borderWidth / 2);
142 }
143
144 @end