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 "GraphicsLayer.h" 34 #import <wtf/UnusedParam.h> 35 36 using 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 // Disable default animations 53 - (id<CAAction>)actionForKey:(NSString *)key 54 { 55 UNUSED_PARAM(key); 56 return nil; 57 } 58 59 // Implement this so presentationLayer can get our custom attributes 60 - (id)initWithLayer:(id)layer 61 { 62 if ((self = [super initWithLayer:layer])) 63 m_layerOwner = [(WebLayer*)layer layerOwner]; 64 65 return self; 66 } 67 68 - (void)setNeedsDisplay 69 { 70 if (m_layerOwner && m_layerOwner->client() && m_layerOwner->drawsContent()) 71 [super setNeedsDisplay]; 72 } 73 74 - (void)setNeedsDisplayInRect:(CGRect)dirtyRect 75 { 76 if (m_layerOwner && m_layerOwner->client() && m_layerOwner->drawsContent()) { 77 #if defined(BUILDING_ON_LEOPARD) 78 dirtyRect = CGRectApplyAffineTransform(dirtyRect, [self contentsTransform]); 79 #endif 80 [super setNeedsDisplayInRect:dirtyRect]; 81 82 #ifndef NDEBUG 83 if (m_layerOwner->showRepaintCounter()) { 84 CGRect bounds = [self bounds]; 85 CGRect indicatorRect = CGRectMake(bounds.origin.x, bounds.origin.y, 46, 25); 86 #if defined(BUILDING_ON_LEOPARD) 87 indicatorRect = CGRectApplyAffineTransform(indicatorRect, [self contentsTransform]); 88 #endif 89 [super setNeedsDisplayInRect:indicatorRect]; 90 } 91 #endif 92 } 93 } 94 95 - (void)display 96 { 97 [super display]; 98 if (m_layerOwner) 99 m_layerOwner->didDisplay(self); 100 } 101 102 - (void)drawInContext:(CGContextRef)ctx 103 { 104 [WebLayer drawContents:m_layerOwner ofLayer:self intoContext:ctx]; 105 } 106 107 @end // implementation WebTiledLayer 108 109 #pragma mark - 110 111 @implementation WebTiledLayer(LayerMacAdditions) 112 113 - (void)setLayerOwner:(GraphicsLayer*)aLayer 114 { 115 m_layerOwner = aLayer; 116 } 117 118 - (GraphicsLayer*)layerOwner 119 { 120 return m_layerOwner; 121 } 122 123 @end 124 125 #endif // USE(ACCELERATED_COMPOSITING) 126