1643ca7872b450ea4efacab6188849e5aac2ba161Steve Block/* 2643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * Copyright (C) 2009 Apple Inc. All rights reserved. 3643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * 4643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * Redistribution and use in source and binary forms, with or without 5643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * modification, are permitted provided that the following conditions 6643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * are met: 7643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * 1. Redistributions of source code must retain the above copyright 8643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * notice, this list of conditions and the following disclaimer. 9643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * 2. Redistributions in binary form must reproduce the above copyright 10643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * notice, this list of conditions and the following disclaimer in the 11643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * documentation and/or other materials provided with the distribution. 12643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * 13643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY 14643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 15643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 16643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR 17643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 18643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 19643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 20643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 21643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 22643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 23643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 24643ca7872b450ea4efacab6188849e5aac2ba161Steve Block */ 25643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 26643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "config.h" 27643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 28643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#if USE(ACCELERATED_COMPOSITING) 29643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 30643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "GraphicsLayerCACF.h" 31643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 32643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "FloatConversion.h" 33643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "FloatRect.h" 34dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include "Font.h" 35dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include "FontSelector.h" 36643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "Image.h" 37643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "PlatformString.h" 38643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include "SystemTime.h" 39e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block#include "WebLayer.h" 40e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block#include "WebTiledLayer.h" 41643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include <wtf/CurrentTime.h> 42643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#include <wtf/StringExtras.h> 43dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include <wtf/text/CString.h> 44643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 45643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockusing namespace std; 46643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 47643ca7872b450ea4efacab6188849e5aac2ba161Steve Blocknamespace WebCore { 48643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 49e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block// The threshold width or height above which a tiled layer will be used. This should be 50e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block// large enough to avoid tiled layers for most GraphicsLayers, but less than the D3D 51e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block// texture size limit on all supported hardware. 52e78cbe89e6f337f2f1fe40315be88f742b547151Steve Blockstatic const int cMaxPixelDimension = 2000; 53dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 54e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block// The width and height of a single tile in a tiled layer. Should be large enough to 55e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block// avoid lots of small tiles (and therefore lots of drawing callbacks), but small enough 56e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block// to keep the overall tile cost low. 57e78cbe89e6f337f2f1fe40315be88f742b547151Steve Blockstatic const int cTiledLayerTileSize = 512; 58dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 59643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockstatic inline void copyTransform(CATransform3D& toT3D, const TransformationMatrix& t) 60643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 61643ca7872b450ea4efacab6188849e5aac2ba161Steve Block toT3D.m11 = narrowPrecisionToFloat(t.m11()); 62643ca7872b450ea4efacab6188849e5aac2ba161Steve Block toT3D.m12 = narrowPrecisionToFloat(t.m12()); 63643ca7872b450ea4efacab6188849e5aac2ba161Steve Block toT3D.m13 = narrowPrecisionToFloat(t.m13()); 64643ca7872b450ea4efacab6188849e5aac2ba161Steve Block toT3D.m14 = narrowPrecisionToFloat(t.m14()); 65643ca7872b450ea4efacab6188849e5aac2ba161Steve Block toT3D.m21 = narrowPrecisionToFloat(t.m21()); 66643ca7872b450ea4efacab6188849e5aac2ba161Steve Block toT3D.m22 = narrowPrecisionToFloat(t.m22()); 67643ca7872b450ea4efacab6188849e5aac2ba161Steve Block toT3D.m23 = narrowPrecisionToFloat(t.m23()); 68643ca7872b450ea4efacab6188849e5aac2ba161Steve Block toT3D.m24 = narrowPrecisionToFloat(t.m24()); 69643ca7872b450ea4efacab6188849e5aac2ba161Steve Block toT3D.m31 = narrowPrecisionToFloat(t.m31()); 70643ca7872b450ea4efacab6188849e5aac2ba161Steve Block toT3D.m32 = narrowPrecisionToFloat(t.m32()); 71643ca7872b450ea4efacab6188849e5aac2ba161Steve Block toT3D.m33 = narrowPrecisionToFloat(t.m33()); 72643ca7872b450ea4efacab6188849e5aac2ba161Steve Block toT3D.m34 = narrowPrecisionToFloat(t.m34()); 73643ca7872b450ea4efacab6188849e5aac2ba161Steve Block toT3D.m41 = narrowPrecisionToFloat(t.m41()); 74643ca7872b450ea4efacab6188849e5aac2ba161Steve Block toT3D.m42 = narrowPrecisionToFloat(t.m42()); 75643ca7872b450ea4efacab6188849e5aac2ba161Steve Block toT3D.m43 = narrowPrecisionToFloat(t.m43()); 76643ca7872b450ea4efacab6188849e5aac2ba161Steve Block toT3D.m44 = narrowPrecisionToFloat(t.m44()); 77643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 78643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 79643ca7872b450ea4efacab6188849e5aac2ba161Steve BlockTransformationMatrix CAToTransform3D(const CATransform3D& fromT3D) 80643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 81643ca7872b450ea4efacab6188849e5aac2ba161Steve Block return TransformationMatrix( 82643ca7872b450ea4efacab6188849e5aac2ba161Steve Block fromT3D.m11, 83643ca7872b450ea4efacab6188849e5aac2ba161Steve Block fromT3D.m12, 84643ca7872b450ea4efacab6188849e5aac2ba161Steve Block fromT3D.m13, 85643ca7872b450ea4efacab6188849e5aac2ba161Steve Block fromT3D.m14, 86643ca7872b450ea4efacab6188849e5aac2ba161Steve Block fromT3D.m21, 87643ca7872b450ea4efacab6188849e5aac2ba161Steve Block fromT3D.m22, 88643ca7872b450ea4efacab6188849e5aac2ba161Steve Block fromT3D.m23, 89643ca7872b450ea4efacab6188849e5aac2ba161Steve Block fromT3D.m24, 90643ca7872b450ea4efacab6188849e5aac2ba161Steve Block fromT3D.m31, 91643ca7872b450ea4efacab6188849e5aac2ba161Steve Block fromT3D.m32, 92643ca7872b450ea4efacab6188849e5aac2ba161Steve Block fromT3D.m33, 93643ca7872b450ea4efacab6188849e5aac2ba161Steve Block fromT3D.m34, 94643ca7872b450ea4efacab6188849e5aac2ba161Steve Block fromT3D.m41, 95643ca7872b450ea4efacab6188849e5aac2ba161Steve Block fromT3D.m42, 96643ca7872b450ea4efacab6188849e5aac2ba161Steve Block fromT3D.m43, 97643ca7872b450ea4efacab6188849e5aac2ba161Steve Block fromT3D.m44); 98643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 99643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 100643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockstatic void setLayerBorderColor(WKCACFLayer* layer, const Color& color) 101643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 102a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch layer->setBorderColor(cachedCGColor(color, ColorSpaceDeviceRGB)); 103643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 104643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 105643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockstatic void clearBorderColor(WKCACFLayer* layer) 106643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 107643ca7872b450ea4efacab6188849e5aac2ba161Steve Block layer->setBorderColor(0); 108643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 109643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 110643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockstatic void setLayerBackgroundColor(WKCACFLayer* layer, const Color& color) 111643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 112a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch layer->setBackgroundColor(cachedCGColor(color, ColorSpaceDeviceRGB)); 113643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 114643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 115643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockstatic void clearLayerBackgroundColor(WKCACFLayer* layer) 116643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 117643ca7872b450ea4efacab6188849e5aac2ba161Steve Block layer->setBackgroundColor(0); 118643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 119643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 120643ca7872b450ea4efacab6188849e5aac2ba161Steve BlockPassOwnPtr<GraphicsLayer> GraphicsLayer::create(GraphicsLayerClient* client) 121643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 122643ca7872b450ea4efacab6188849e5aac2ba161Steve Block return new GraphicsLayerCACF(client); 123643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 124643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 125643ca7872b450ea4efacab6188849e5aac2ba161Steve BlockGraphicsLayerCACF::GraphicsLayerCACF(GraphicsLayerClient* client) 126643ca7872b450ea4efacab6188849e5aac2ba161Steve Block : GraphicsLayer(client) 127643ca7872b450ea4efacab6188849e5aac2ba161Steve Block , m_contentsLayerPurpose(NoContentsLayer) 128643ca7872b450ea4efacab6188849e5aac2ba161Steve Block , m_contentsLayerHasBackgroundColor(false) 129643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 130dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_layer = WebLayer::create(WKCACFLayer::Layer, this); 131643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 132643ca7872b450ea4efacab6188849e5aac2ba161Steve Block updateDebugIndicators(); 133643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 134643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 135643ca7872b450ea4efacab6188849e5aac2ba161Steve BlockGraphicsLayerCACF::~GraphicsLayerCACF() 136643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 137643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // clean up the WK layer 138643ca7872b450ea4efacab6188849e5aac2ba161Steve Block if (m_layer) 139643ca7872b450ea4efacab6188849e5aac2ba161Steve Block m_layer->removeFromSuperlayer(); 140643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 1418a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block if (m_contentsLayer) 1428a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block m_contentsLayer->removeFromSuperlayer(); 1438a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block 144643ca7872b450ea4efacab6188849e5aac2ba161Steve Block if (m_transformLayer) 145643ca7872b450ea4efacab6188849e5aac2ba161Steve Block m_transformLayer->removeFromSuperlayer(); 146643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 147643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 148dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockvoid GraphicsLayerCACF::setName(const String& name) 149643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 150dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block String longName = String::format("CALayer(%p) GraphicsLayer(%p) ", m_layer.get(), this) + name; 151dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block GraphicsLayer::setName(longName); 152643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 153dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_layer->setName(longName); 154643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 155643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 156643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockbool GraphicsLayerCACF::setChildren(const Vector<GraphicsLayer*>& children) 157643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 158643ca7872b450ea4efacab6188849e5aac2ba161Steve Block bool childrenChanged = GraphicsLayer::setChildren(children); 159643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // FIXME: GraphicsLayer::setChildren calls addChild() for each sublayer, which 160643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // will end up calling updateSublayerList() N times. 161643ca7872b450ea4efacab6188849e5aac2ba161Steve Block if (childrenChanged) 162643ca7872b450ea4efacab6188849e5aac2ba161Steve Block updateSublayerList(); 163643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 164643ca7872b450ea4efacab6188849e5aac2ba161Steve Block return childrenChanged; 165643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 166643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 167643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockvoid GraphicsLayerCACF::addChild(GraphicsLayer* childLayer) 168643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 169643ca7872b450ea4efacab6188849e5aac2ba161Steve Block GraphicsLayer::addChild(childLayer); 170643ca7872b450ea4efacab6188849e5aac2ba161Steve Block updateSublayerList(); 171643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 172643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 173643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockvoid GraphicsLayerCACF::addChildAtIndex(GraphicsLayer* childLayer, int index) 174643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 175643ca7872b450ea4efacab6188849e5aac2ba161Steve Block GraphicsLayer::addChildAtIndex(childLayer, index); 176643ca7872b450ea4efacab6188849e5aac2ba161Steve Block updateSublayerList(); 177643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 178643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 179643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockvoid GraphicsLayerCACF::addChildBelow(GraphicsLayer* childLayer, GraphicsLayer* sibling) 180643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 181643ca7872b450ea4efacab6188849e5aac2ba161Steve Block GraphicsLayer::addChildBelow(childLayer, sibling); 182643ca7872b450ea4efacab6188849e5aac2ba161Steve Block updateSublayerList(); 183643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 184643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 185643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockvoid GraphicsLayerCACF::addChildAbove(GraphicsLayer* childLayer, GraphicsLayer *sibling) 186643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 187643ca7872b450ea4efacab6188849e5aac2ba161Steve Block GraphicsLayer::addChildAbove(childLayer, sibling); 188643ca7872b450ea4efacab6188849e5aac2ba161Steve Block updateSublayerList(); 189643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 190643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 191643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockbool GraphicsLayerCACF::replaceChild(GraphicsLayer* oldChild, GraphicsLayer* newChild) 192643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 193643ca7872b450ea4efacab6188849e5aac2ba161Steve Block if (GraphicsLayer::replaceChild(oldChild, newChild)) { 194643ca7872b450ea4efacab6188849e5aac2ba161Steve Block updateSublayerList(); 195643ca7872b450ea4efacab6188849e5aac2ba161Steve Block return true; 196643ca7872b450ea4efacab6188849e5aac2ba161Steve Block } 197643ca7872b450ea4efacab6188849e5aac2ba161Steve Block return false; 198643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 199643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 200643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockvoid GraphicsLayerCACF::removeFromParent() 201643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 202643ca7872b450ea4efacab6188849e5aac2ba161Steve Block GraphicsLayer::removeFromParent(); 203643ca7872b450ea4efacab6188849e5aac2ba161Steve Block layerForSuperlayer()->removeFromSuperlayer(); 204643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 205643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 206643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockvoid GraphicsLayerCACF::setPosition(const FloatPoint& point) 207643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 208643ca7872b450ea4efacab6188849e5aac2ba161Steve Block GraphicsLayer::setPosition(point); 209643ca7872b450ea4efacab6188849e5aac2ba161Steve Block updateLayerPosition(); 210643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 211643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 212643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockvoid GraphicsLayerCACF::setAnchorPoint(const FloatPoint3D& point) 213643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 214643ca7872b450ea4efacab6188849e5aac2ba161Steve Block if (point == m_anchorPoint) 215643ca7872b450ea4efacab6188849e5aac2ba161Steve Block return; 216643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 217643ca7872b450ea4efacab6188849e5aac2ba161Steve Block GraphicsLayer::setAnchorPoint(point); 218643ca7872b450ea4efacab6188849e5aac2ba161Steve Block updateAnchorPoint(); 219643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 220643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 221643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockvoid GraphicsLayerCACF::setSize(const FloatSize& size) 222643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 223643ca7872b450ea4efacab6188849e5aac2ba161Steve Block if (size == m_size) 224643ca7872b450ea4efacab6188849e5aac2ba161Steve Block return; 225643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 226643ca7872b450ea4efacab6188849e5aac2ba161Steve Block GraphicsLayer::setSize(size); 227643ca7872b450ea4efacab6188849e5aac2ba161Steve Block updateLayerSize(); 228643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 229643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 230643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockvoid GraphicsLayerCACF::setTransform(const TransformationMatrix& t) 231643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 232643ca7872b450ea4efacab6188849e5aac2ba161Steve Block if (t == m_transform) 233643ca7872b450ea4efacab6188849e5aac2ba161Steve Block return; 234643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 235643ca7872b450ea4efacab6188849e5aac2ba161Steve Block GraphicsLayer::setTransform(t); 236643ca7872b450ea4efacab6188849e5aac2ba161Steve Block updateTransform(); 237643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 238643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 239643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockvoid GraphicsLayerCACF::setChildrenTransform(const TransformationMatrix& t) 240643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 241643ca7872b450ea4efacab6188849e5aac2ba161Steve Block if (t == m_childrenTransform) 242643ca7872b450ea4efacab6188849e5aac2ba161Steve Block return; 243643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 244643ca7872b450ea4efacab6188849e5aac2ba161Steve Block GraphicsLayer::setChildrenTransform(t); 245643ca7872b450ea4efacab6188849e5aac2ba161Steve Block updateChildrenTransform(); 246643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 247643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 248643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockvoid GraphicsLayerCACF::setPreserves3D(bool preserves3D) 249643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 250643ca7872b450ea4efacab6188849e5aac2ba161Steve Block if (preserves3D == m_preserves3D) 251643ca7872b450ea4efacab6188849e5aac2ba161Steve Block return; 252643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 253643ca7872b450ea4efacab6188849e5aac2ba161Steve Block GraphicsLayer::setPreserves3D(preserves3D); 254643ca7872b450ea4efacab6188849e5aac2ba161Steve Block updateLayerPreserves3D(); 255643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 256643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 257643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockvoid GraphicsLayerCACF::setMasksToBounds(bool masksToBounds) 258643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 259643ca7872b450ea4efacab6188849e5aac2ba161Steve Block if (masksToBounds == m_masksToBounds) 260643ca7872b450ea4efacab6188849e5aac2ba161Steve Block return; 261643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 262643ca7872b450ea4efacab6188849e5aac2ba161Steve Block GraphicsLayer::setMasksToBounds(masksToBounds); 263643ca7872b450ea4efacab6188849e5aac2ba161Steve Block updateMasksToBounds(); 264643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 265643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 266643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockvoid GraphicsLayerCACF::setDrawsContent(bool drawsContent) 267643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 268643ca7872b450ea4efacab6188849e5aac2ba161Steve Block if (drawsContent == m_drawsContent) 269643ca7872b450ea4efacab6188849e5aac2ba161Steve Block return; 270643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 271643ca7872b450ea4efacab6188849e5aac2ba161Steve Block GraphicsLayer::setDrawsContent(drawsContent); 272643ca7872b450ea4efacab6188849e5aac2ba161Steve Block updateLayerDrawsContent(); 273643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 274643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 275643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockvoid GraphicsLayerCACF::setBackgroundColor(const Color& color) 276643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 277643ca7872b450ea4efacab6188849e5aac2ba161Steve Block if (m_backgroundColorSet && m_backgroundColor == color) 278643ca7872b450ea4efacab6188849e5aac2ba161Steve Block return; 279643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 280643ca7872b450ea4efacab6188849e5aac2ba161Steve Block GraphicsLayer::setBackgroundColor(color); 281643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 282643ca7872b450ea4efacab6188849e5aac2ba161Steve Block m_contentsLayerHasBackgroundColor = true; 283643ca7872b450ea4efacab6188849e5aac2ba161Steve Block updateLayerBackgroundColor(); 284643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 285643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 286643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockvoid GraphicsLayerCACF::clearBackgroundColor() 287643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 288643ca7872b450ea4efacab6188849e5aac2ba161Steve Block if (!m_backgroundColorSet) 289643ca7872b450ea4efacab6188849e5aac2ba161Steve Block return; 290643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 291643ca7872b450ea4efacab6188849e5aac2ba161Steve Block GraphicsLayer::clearBackgroundColor(); 292643ca7872b450ea4efacab6188849e5aac2ba161Steve Block clearLayerBackgroundColor(m_contentsLayer.get()); 293643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 294643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 295643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockvoid GraphicsLayerCACF::setContentsOpaque(bool opaque) 296643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 297643ca7872b450ea4efacab6188849e5aac2ba161Steve Block if (m_contentsOpaque == opaque) 298643ca7872b450ea4efacab6188849e5aac2ba161Steve Block return; 299643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 300643ca7872b450ea4efacab6188849e5aac2ba161Steve Block GraphicsLayer::setContentsOpaque(opaque); 301643ca7872b450ea4efacab6188849e5aac2ba161Steve Block updateContentsOpaque(); 302643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 303643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 304643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockvoid GraphicsLayerCACF::setBackfaceVisibility(bool visible) 305643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 306643ca7872b450ea4efacab6188849e5aac2ba161Steve Block if (m_backfaceVisibility == visible) 307643ca7872b450ea4efacab6188849e5aac2ba161Steve Block return; 308643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 309643ca7872b450ea4efacab6188849e5aac2ba161Steve Block GraphicsLayer::setBackfaceVisibility(visible); 310643ca7872b450ea4efacab6188849e5aac2ba161Steve Block updateBackfaceVisibility(); 311643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 312643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 313643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockvoid GraphicsLayerCACF::setOpacity(float opacity) 314643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 315643ca7872b450ea4efacab6188849e5aac2ba161Steve Block float clampedOpacity = max(min(opacity, 1.0f), 0.0f); 316643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 317643ca7872b450ea4efacab6188849e5aac2ba161Steve Block if (m_opacity == clampedOpacity) 318643ca7872b450ea4efacab6188849e5aac2ba161Steve Block return; 319643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 320643ca7872b450ea4efacab6188849e5aac2ba161Steve Block GraphicsLayer::setOpacity(clampedOpacity); 321643ca7872b450ea4efacab6188849e5aac2ba161Steve Block primaryLayer()->setOpacity(opacity); 322643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 323643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 324643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockvoid GraphicsLayerCACF::setNeedsDisplay() 325643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 326643ca7872b450ea4efacab6188849e5aac2ba161Steve Block if (drawsContent()) 327643ca7872b450ea4efacab6188849e5aac2ba161Steve Block m_layer->setNeedsDisplay(); 328643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 329643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 330643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockvoid GraphicsLayerCACF::setNeedsDisplayInRect(const FloatRect& rect) 331643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 332dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (drawsContent()) { 333dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block CGRect cgRect = rect; 334dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_layer->setNeedsDisplay(&cgRect); 335dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } 336643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 337643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 338643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockvoid GraphicsLayerCACF::setContentsRect(const IntRect& rect) 339643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 340643ca7872b450ea4efacab6188849e5aac2ba161Steve Block if (rect == m_contentsRect) 341643ca7872b450ea4efacab6188849e5aac2ba161Steve Block return; 342643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 343643ca7872b450ea4efacab6188849e5aac2ba161Steve Block GraphicsLayer::setContentsRect(rect); 344643ca7872b450ea4efacab6188849e5aac2ba161Steve Block updateContentsRect(); 345643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 346643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 347643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockvoid GraphicsLayerCACF::setContentsToImage(Image* image) 348643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 349643ca7872b450ea4efacab6188849e5aac2ba161Steve Block bool childrenChanged = false; 350643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 351643ca7872b450ea4efacab6188849e5aac2ba161Steve Block if (image) { 352643ca7872b450ea4efacab6188849e5aac2ba161Steve Block m_pendingContentsImage = image->nativeImageForCurrentFrame(); 353643ca7872b450ea4efacab6188849e5aac2ba161Steve Block m_contentsLayerPurpose = ContentsLayerForImage; 354643ca7872b450ea4efacab6188849e5aac2ba161Steve Block if (!m_contentsLayer) 355643ca7872b450ea4efacab6188849e5aac2ba161Steve Block childrenChanged = true; 356643ca7872b450ea4efacab6188849e5aac2ba161Steve Block } else { 357643ca7872b450ea4efacab6188849e5aac2ba161Steve Block m_pendingContentsImage = 0; 358643ca7872b450ea4efacab6188849e5aac2ba161Steve Block m_contentsLayerPurpose = NoContentsLayer; 359643ca7872b450ea4efacab6188849e5aac2ba161Steve Block if (m_contentsLayer) 360643ca7872b450ea4efacab6188849e5aac2ba161Steve Block childrenChanged = true; 361643ca7872b450ea4efacab6188849e5aac2ba161Steve Block } 362643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 363643ca7872b450ea4efacab6188849e5aac2ba161Steve Block updateContentsImage(); 364643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 365643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // This has to happen after updateContentsImage 366643ca7872b450ea4efacab6188849e5aac2ba161Steve Block if (childrenChanged) 367643ca7872b450ea4efacab6188849e5aac2ba161Steve Block updateSublayerList(); 368643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 369643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 3708a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Blockvoid GraphicsLayerCACF::setContentsToMedia(PlatformLayer* mediaLayer) 371643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 3728a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block if (mediaLayer == m_contentsLayer) 3738a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block return; 374643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 3758a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block m_contentsLayer = mediaLayer; 3768a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block m_contentsLayerPurpose = mediaLayer ? ContentsLayerForMedia : NoContentsLayer; 377643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 3788a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block updateContentsMedia(); 379643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 3808a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block // This has to happen after updateContentsMedia 3818a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block updateSublayerList(); 382643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 383643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 384643ca7872b450ea4efacab6188849e5aac2ba161Steve BlockPlatformLayer* GraphicsLayerCACF::hostLayerForSublayers() const 385643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 386643ca7872b450ea4efacab6188849e5aac2ba161Steve Block return m_transformLayer ? m_transformLayer.get() : m_layer.get(); 387643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 388643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 389643ca7872b450ea4efacab6188849e5aac2ba161Steve BlockPlatformLayer* GraphicsLayerCACF::layerForSuperlayer() const 390643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 391643ca7872b450ea4efacab6188849e5aac2ba161Steve Block return m_transformLayer ? m_transformLayer.get() : m_layer.get(); 392643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 393643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 394643ca7872b450ea4efacab6188849e5aac2ba161Steve BlockPlatformLayer* GraphicsLayerCACF::platformLayer() const 395643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 396643ca7872b450ea4efacab6188849e5aac2ba161Steve Block return primaryLayer(); 397643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 398643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 399643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockvoid GraphicsLayerCACF::setDebugBackgroundColor(const Color& color) 400643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 401643ca7872b450ea4efacab6188849e5aac2ba161Steve Block if (color.isValid()) 402643ca7872b450ea4efacab6188849e5aac2ba161Steve Block setLayerBackgroundColor(m_layer.get(), color); 403643ca7872b450ea4efacab6188849e5aac2ba161Steve Block else 404643ca7872b450ea4efacab6188849e5aac2ba161Steve Block clearLayerBackgroundColor(m_layer.get()); 405643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 406643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 407643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockvoid GraphicsLayerCACF::setDebugBorder(const Color& color, float borderWidth) 408643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 409643ca7872b450ea4efacab6188849e5aac2ba161Steve Block if (color.isValid()) { 410643ca7872b450ea4efacab6188849e5aac2ba161Steve Block setLayerBorderColor(m_layer.get(), color); 411643ca7872b450ea4efacab6188849e5aac2ba161Steve Block m_layer->setBorderWidth(borderWidth); 412643ca7872b450ea4efacab6188849e5aac2ba161Steve Block } else { 413643ca7872b450ea4efacab6188849e5aac2ba161Steve Block clearBorderColor(m_layer.get()); 414643ca7872b450ea4efacab6188849e5aac2ba161Steve Block m_layer->setBorderWidth(0); 415643ca7872b450ea4efacab6188849e5aac2ba161Steve Block } 416643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 417643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 418e78cbe89e6f337f2f1fe40315be88f742b547151Steve Blockbool GraphicsLayerCACF::requiresTiledLayer(const FloatSize& size) const 419e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block{ 420e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block if (!m_drawsContent) 421e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block return false; 422e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block 423e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block // FIXME: catch zero-size height or width here (or earlier)? 424e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block return size.width() > cMaxPixelDimension || size.height() > cMaxPixelDimension; 425e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block} 426e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block 427e78cbe89e6f337f2f1fe40315be88f742b547151Steve Blockvoid GraphicsLayerCACF::swapFromOrToTiledLayer(bool useTiledLayer) 428e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block{ 429e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block if (useTiledLayer == m_usingTiledLayer) 430e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block return; 431e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block 432e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block CGSize tileSize = CGSizeMake(cTiledLayerTileSize, cTiledLayerTileSize); 433e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block 434e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block RefPtr<WKCACFLayer> oldLayer = m_layer; 435e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block if (useTiledLayer) 436e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block m_layer = WebTiledLayer::create(tileSize, this); 437e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block else 438e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block m_layer = WebLayer::create(WKCACFLayer::Layer, this); 439e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block 440e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block m_usingTiledLayer = useTiledLayer; 441e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block 442e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block m_layer->adoptSublayers(oldLayer.get()); 443e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block if (oldLayer->superlayer()) 444e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block oldLayer->superlayer()->replaceSublayer(oldLayer.get(), m_layer.get()); 445e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block 446e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block updateLayerPosition(); 447e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block updateLayerSize(); 448e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block updateAnchorPoint(); 449e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block updateTransform(); 450e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block updateChildrenTransform(); 451e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block updateMasksToBounds(); 452e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block updateContentsOpaque(); 453e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block updateBackfaceVisibility(); 454e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block updateLayerBackgroundColor(); 455e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block 456e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block updateOpacityOnLayer(); 457e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block 458e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block#ifndef NDEBUG 459e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block String name = String::format("CALayer(%p) GraphicsLayer(%p) %s", m_layer.get(), this, m_usingTiledLayer ? "[Tiled Layer] " : "") + m_name; 460e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block m_layer->setName(name); 461e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block#endif 462e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block 463e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block // need to tell new layer to draw itself 464e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block setNeedsDisplay(); 465e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block 466e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block updateDebugIndicators(); 467e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block} 468e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block 469643ca7872b450ea4efacab6188849e5aac2ba161Steve BlockGraphicsLayer::CompositingCoordinatesOrientation GraphicsLayerCACF::defaultContentsOrientation() const 470643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 471643ca7872b450ea4efacab6188849e5aac2ba161Steve Block return CompositingCoordinatesTopDown; 472643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 473643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 474643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockvoid GraphicsLayerCACF::updateSublayerList() 475643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 476643ca7872b450ea4efacab6188849e5aac2ba161Steve Block Vector<RefPtr<WKCACFLayer> > newSublayers; 477643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 478643ca7872b450ea4efacab6188849e5aac2ba161Steve Block if (m_transformLayer) { 479643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // Add the primary layer first. Even if we have negative z-order children, the primary layer always comes behind. 480643ca7872b450ea4efacab6188849e5aac2ba161Steve Block newSublayers.append(m_layer.get()); 481643ca7872b450ea4efacab6188849e5aac2ba161Steve Block } else if (m_contentsLayer) { 482643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // FIXME: add the contents layer in the correct order with negative z-order children. 483643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // This does not cause visible rendering issues because currently contents layers are only used 484643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // for replaced elements that don't have children. 485643ca7872b450ea4efacab6188849e5aac2ba161Steve Block newSublayers.append(m_contentsLayer.get()); 486643ca7872b450ea4efacab6188849e5aac2ba161Steve Block } 487643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 488643ca7872b450ea4efacab6188849e5aac2ba161Steve Block const Vector<GraphicsLayer*>& childLayers = children(); 489643ca7872b450ea4efacab6188849e5aac2ba161Steve Block size_t numChildren = childLayers.size(); 490643ca7872b450ea4efacab6188849e5aac2ba161Steve Block for (size_t i = 0; i < numChildren; ++i) { 491643ca7872b450ea4efacab6188849e5aac2ba161Steve Block GraphicsLayerCACF* curChild = static_cast<GraphicsLayerCACF*>(childLayers[i]); 492643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 493643ca7872b450ea4efacab6188849e5aac2ba161Steve Block WKCACFLayer* childLayer = curChild->layerForSuperlayer(); 494643ca7872b450ea4efacab6188849e5aac2ba161Steve Block newSublayers.append(childLayer); 495643ca7872b450ea4efacab6188849e5aac2ba161Steve Block } 496643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 497643ca7872b450ea4efacab6188849e5aac2ba161Steve Block for (int i = 0; i < newSublayers.size(); ++i) 498643ca7872b450ea4efacab6188849e5aac2ba161Steve Block newSublayers[i]->removeFromSuperlayer(); 499643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 500643ca7872b450ea4efacab6188849e5aac2ba161Steve Block if (m_transformLayer) { 501643ca7872b450ea4efacab6188849e5aac2ba161Steve Block m_transformLayer->setSublayers(newSublayers); 502643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 503643ca7872b450ea4efacab6188849e5aac2ba161Steve Block if (m_contentsLayer) { 504643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // If we have a transform layer, then the contents layer is parented in the 505643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // primary layer (which is itself a child of the transform layer). 506643ca7872b450ea4efacab6188849e5aac2ba161Steve Block m_layer->removeAllSublayers(); 507643ca7872b450ea4efacab6188849e5aac2ba161Steve Block m_layer->addSublayer(m_contentsLayer); 508643ca7872b450ea4efacab6188849e5aac2ba161Steve Block } 509643ca7872b450ea4efacab6188849e5aac2ba161Steve Block } else 510643ca7872b450ea4efacab6188849e5aac2ba161Steve Block m_layer->setSublayers(newSublayers); 511643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 512643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 513643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockvoid GraphicsLayerCACF::updateLayerPosition() 514643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 515643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // Position is offset on the layer by the layer anchor point. 516643ca7872b450ea4efacab6188849e5aac2ba161Steve Block CGPoint posPoint = CGPointMake(m_position.x() + m_anchorPoint.x() * m_size.width(), 517643ca7872b450ea4efacab6188849e5aac2ba161Steve Block m_position.y() + m_anchorPoint.y() * m_size.height()); 518643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 519643ca7872b450ea4efacab6188849e5aac2ba161Steve Block primaryLayer()->setPosition(posPoint); 520643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 521643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 522643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockvoid GraphicsLayerCACF::updateLayerSize() 523643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 524643ca7872b450ea4efacab6188849e5aac2ba161Steve Block CGRect rect = CGRectMake(0, 0, m_size.width(), m_size.height()); 525643ca7872b450ea4efacab6188849e5aac2ba161Steve Block if (m_transformLayer) { 526643ca7872b450ea4efacab6188849e5aac2ba161Steve Block m_transformLayer->setBounds(rect); 527643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // The anchor of the contents layer is always at 0.5, 0.5, so the position is center-relative. 528643ca7872b450ea4efacab6188849e5aac2ba161Steve Block CGPoint centerPoint = CGPointMake(m_size.width() / 2.0f, m_size.height() / 2.0f); 529643ca7872b450ea4efacab6188849e5aac2ba161Steve Block m_layer->setPosition(centerPoint); 530643ca7872b450ea4efacab6188849e5aac2ba161Steve Block } 531643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 532e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block bool needTiledLayer = requiresTiledLayer(m_size); 533e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block if (needTiledLayer != m_usingTiledLayer) 534e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block swapFromOrToTiledLayer(needTiledLayer); 535e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block 536643ca7872b450ea4efacab6188849e5aac2ba161Steve Block m_layer->setBounds(rect); 537643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 538643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // Note that we don't resize m_contentsLayer. It's up the caller to do that. 539643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 540643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // if we've changed the bounds, we need to recalculate the position 541643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // of the layer, taking anchor point into account. 542643ca7872b450ea4efacab6188849e5aac2ba161Steve Block updateLayerPosition(); 543643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 544643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 545643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockvoid GraphicsLayerCACF::updateAnchorPoint() 546643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 547643ca7872b450ea4efacab6188849e5aac2ba161Steve Block primaryLayer()->setAnchorPoint(FloatPoint(m_anchorPoint.x(), m_anchorPoint.y())); 548643ca7872b450ea4efacab6188849e5aac2ba161Steve Block primaryLayer()->setAnchorPointZ(m_anchorPoint.z()); 549643ca7872b450ea4efacab6188849e5aac2ba161Steve Block updateLayerPosition(); 550643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 551643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 552643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockvoid GraphicsLayerCACF::updateTransform() 553643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 554643ca7872b450ea4efacab6188849e5aac2ba161Steve Block CATransform3D transform; 555643ca7872b450ea4efacab6188849e5aac2ba161Steve Block copyTransform(transform, m_transform); 556643ca7872b450ea4efacab6188849e5aac2ba161Steve Block primaryLayer()->setTransform(transform); 557643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 558643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 559643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockvoid GraphicsLayerCACF::updateChildrenTransform() 560643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 561643ca7872b450ea4efacab6188849e5aac2ba161Steve Block CATransform3D transform; 562643ca7872b450ea4efacab6188849e5aac2ba161Steve Block copyTransform(transform, m_childrenTransform); 563643ca7872b450ea4efacab6188849e5aac2ba161Steve Block primaryLayer()->setSublayerTransform(transform); 564643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 565643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 566643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockvoid GraphicsLayerCACF::updateMasksToBounds() 567643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 568643ca7872b450ea4efacab6188849e5aac2ba161Steve Block m_layer->setMasksToBounds(m_masksToBounds); 569643ca7872b450ea4efacab6188849e5aac2ba161Steve Block updateDebugIndicators(); 570643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 571643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 572643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockvoid GraphicsLayerCACF::updateContentsOpaque() 573643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 574643ca7872b450ea4efacab6188849e5aac2ba161Steve Block m_layer->setOpaque(m_contentsOpaque); 575643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 576643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 577643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockvoid GraphicsLayerCACF::updateBackfaceVisibility() 578643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 579643ca7872b450ea4efacab6188849e5aac2ba161Steve Block m_layer->setDoubleSided(m_backfaceVisibility); 580643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 581643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 582643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockvoid GraphicsLayerCACF::updateLayerPreserves3D() 583643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 584643ca7872b450ea4efacab6188849e5aac2ba161Steve Block if (m_preserves3D && !m_transformLayer) { 585643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // Create the transform layer. 586dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_transformLayer = WebLayer::create(WKCACFLayer::TransformLayer, this); 587643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 588643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#ifndef NDEBUG 589643ca7872b450ea4efacab6188849e5aac2ba161Steve Block m_transformLayer->setName(String().format("Transform Layer CATransformLayer(%p) GraphicsLayer(%p)", m_transformLayer.get(), this)); 590643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#endif 591643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // Copy the position from this layer. 592643ca7872b450ea4efacab6188849e5aac2ba161Steve Block updateLayerPosition(); 593643ca7872b450ea4efacab6188849e5aac2ba161Steve Block updateLayerSize(); 594643ca7872b450ea4efacab6188849e5aac2ba161Steve Block updateAnchorPoint(); 595643ca7872b450ea4efacab6188849e5aac2ba161Steve Block updateTransform(); 596643ca7872b450ea4efacab6188849e5aac2ba161Steve Block updateChildrenTransform(); 597643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 598643ca7872b450ea4efacab6188849e5aac2ba161Steve Block CGPoint point = CGPointMake(m_size.width() / 2.0f, m_size.height() / 2.0f); 599643ca7872b450ea4efacab6188849e5aac2ba161Steve Block m_layer->setPosition(point); 600643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 601643ca7872b450ea4efacab6188849e5aac2ba161Steve Block m_layer->setAnchorPoint(CGPointMake(0.5f, 0.5f)); 602dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_layer->setTransform(CATransform3DIdentity); 603643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 604643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // Set the old layer to opacity of 1. Further down we will set the opacity on the transform layer. 605643ca7872b450ea4efacab6188849e5aac2ba161Steve Block m_layer->setOpacity(1); 606643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 607643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // Move this layer to be a child of the transform layer. 608643ca7872b450ea4efacab6188849e5aac2ba161Steve Block if (m_layer->superlayer()) 609643ca7872b450ea4efacab6188849e5aac2ba161Steve Block m_layer->superlayer()->replaceSublayer(m_layer.get(), m_transformLayer.get()); 610643ca7872b450ea4efacab6188849e5aac2ba161Steve Block m_transformLayer->addSublayer(m_layer.get()); 611643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 612643ca7872b450ea4efacab6188849e5aac2ba161Steve Block updateSublayerList(); 613643ca7872b450ea4efacab6188849e5aac2ba161Steve Block } else if (!m_preserves3D && m_transformLayer) { 614643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // Relace the transformLayer in the parent with this layer. 615643ca7872b450ea4efacab6188849e5aac2ba161Steve Block m_layer->removeFromSuperlayer(); 616643ca7872b450ea4efacab6188849e5aac2ba161Steve Block m_transformLayer->superlayer()->replaceSublayer(m_transformLayer.get(), m_layer.get()); 617643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 618643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // Release the transform layer. 619643ca7872b450ea4efacab6188849e5aac2ba161Steve Block m_transformLayer = 0; 620643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 621643ca7872b450ea4efacab6188849e5aac2ba161Steve Block updateLayerPosition(); 622643ca7872b450ea4efacab6188849e5aac2ba161Steve Block updateLayerSize(); 623643ca7872b450ea4efacab6188849e5aac2ba161Steve Block updateAnchorPoint(); 624643ca7872b450ea4efacab6188849e5aac2ba161Steve Block updateTransform(); 625643ca7872b450ea4efacab6188849e5aac2ba161Steve Block updateChildrenTransform(); 626643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 627643ca7872b450ea4efacab6188849e5aac2ba161Steve Block updateSublayerList(); 628643ca7872b450ea4efacab6188849e5aac2ba161Steve Block } 629643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 630643ca7872b450ea4efacab6188849e5aac2ba161Steve Block updateOpacityOnLayer(); 631643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 632643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 633643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockvoid GraphicsLayerCACF::updateLayerDrawsContent() 634643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 635e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block bool needTiledLayer = requiresTiledLayer(m_size); 636e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block if (needTiledLayer != m_usingTiledLayer) 637e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block swapFromOrToTiledLayer(needTiledLayer); 638e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block 639643ca7872b450ea4efacab6188849e5aac2ba161Steve Block if (m_drawsContent) 640643ca7872b450ea4efacab6188849e5aac2ba161Steve Block m_layer->setNeedsDisplay(); 641643ca7872b450ea4efacab6188849e5aac2ba161Steve Block else 642967717af5423377c967781471ee106e2bb4e11c8Ben Murdoch m_layer->setContents(0); 643643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 644643ca7872b450ea4efacab6188849e5aac2ba161Steve Block updateDebugIndicators(); 645643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 646643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 647643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockvoid GraphicsLayerCACF::updateLayerBackgroundColor() 648643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 649643ca7872b450ea4efacab6188849e5aac2ba161Steve Block if (!m_contentsLayer) 650643ca7872b450ea4efacab6188849e5aac2ba161Steve Block return; 651643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 652643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // We never create the contents layer just for background color yet. 653643ca7872b450ea4efacab6188849e5aac2ba161Steve Block if (m_backgroundColorSet) 654643ca7872b450ea4efacab6188849e5aac2ba161Steve Block setLayerBackgroundColor(m_contentsLayer.get(), m_backgroundColor); 655643ca7872b450ea4efacab6188849e5aac2ba161Steve Block else 656643ca7872b450ea4efacab6188849e5aac2ba161Steve Block clearLayerBackgroundColor(m_contentsLayer.get()); 657643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 658643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 659643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockvoid GraphicsLayerCACF::updateContentsImage() 660643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 661643ca7872b450ea4efacab6188849e5aac2ba161Steve Block if (m_pendingContentsImage) { 662643ca7872b450ea4efacab6188849e5aac2ba161Steve Block if (!m_contentsLayer.get()) { 663dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block RefPtr<WKCACFLayer> imageLayer = WebLayer::create(WKCACFLayer::Layer, this); 664643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#ifndef NDEBUG 665643ca7872b450ea4efacab6188849e5aac2ba161Steve Block imageLayer->setName("Image Layer"); 666643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#endif 667643ca7872b450ea4efacab6188849e5aac2ba161Steve Block setupContentsLayer(imageLayer.get()); 668643ca7872b450ea4efacab6188849e5aac2ba161Steve Block m_contentsLayer = imageLayer; 669643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // m_contentsLayer will be parented by updateSublayerList 670643ca7872b450ea4efacab6188849e5aac2ba161Steve Block } 671643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 672643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // FIXME: maybe only do trilinear if the image is being scaled down, 673643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // but then what if the layer size changes? 674d0825bca7fe65beaee391d30da42e937db621564Steve Block m_contentsLayer->setMinificationFilter(WKCACFLayer::Trilinear); 675643ca7872b450ea4efacab6188849e5aac2ba161Steve Block m_contentsLayer->setContents(m_pendingContentsImage.get()); 676643ca7872b450ea4efacab6188849e5aac2ba161Steve Block m_pendingContentsImage = 0; 677643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 678643ca7872b450ea4efacab6188849e5aac2ba161Steve Block updateContentsRect(); 679643ca7872b450ea4efacab6188849e5aac2ba161Steve Block } else { 680643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // No image. 681643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // m_contentsLayer will be removed via updateSublayerList. 682643ca7872b450ea4efacab6188849e5aac2ba161Steve Block m_contentsLayer = 0; 683643ca7872b450ea4efacab6188849e5aac2ba161Steve Block } 684643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 685643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 6868a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Blockvoid GraphicsLayerCACF::updateContentsMedia() 687643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 6888a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block // Media layer was set as m_contentsLayer, and will get parented in updateSublayerList(). 689643ca7872b450ea4efacab6188849e5aac2ba161Steve Block if (m_contentsLayer) { 690643ca7872b450ea4efacab6188849e5aac2ba161Steve Block setupContentsLayer(m_contentsLayer.get()); 691643ca7872b450ea4efacab6188849e5aac2ba161Steve Block updateContentsRect(); 692643ca7872b450ea4efacab6188849e5aac2ba161Steve Block } 693643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 694643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 695643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockvoid GraphicsLayerCACF::updateContentsRect() 696643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 697643ca7872b450ea4efacab6188849e5aac2ba161Steve Block if (!m_contentsLayer) 698643ca7872b450ea4efacab6188849e5aac2ba161Steve Block return; 699643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 700643ca7872b450ea4efacab6188849e5aac2ba161Steve Block CGPoint point = CGPointMake(m_contentsRect.x(), 701643ca7872b450ea4efacab6188849e5aac2ba161Steve Block m_contentsRect.y()); 702643ca7872b450ea4efacab6188849e5aac2ba161Steve Block CGRect rect = CGRectMake(0.0f, 703643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 0.0f, 704643ca7872b450ea4efacab6188849e5aac2ba161Steve Block m_contentsRect.width(), 705643ca7872b450ea4efacab6188849e5aac2ba161Steve Block m_contentsRect.height()); 706643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 707643ca7872b450ea4efacab6188849e5aac2ba161Steve Block m_contentsLayer->setPosition(point); 708643ca7872b450ea4efacab6188849e5aac2ba161Steve Block m_contentsLayer->setBounds(rect); 709643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 710643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 711643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockvoid GraphicsLayerCACF::setupContentsLayer(WKCACFLayer* contentsLayer) 712643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 713643ca7872b450ea4efacab6188849e5aac2ba161Steve Block if (contentsLayer == m_contentsLayer) 714643ca7872b450ea4efacab6188849e5aac2ba161Steve Block return; 715643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 716643ca7872b450ea4efacab6188849e5aac2ba161Steve Block if (m_contentsLayer) { 717643ca7872b450ea4efacab6188849e5aac2ba161Steve Block m_contentsLayer->removeFromSuperlayer(); 718643ca7872b450ea4efacab6188849e5aac2ba161Steve Block m_contentsLayer = 0; 719643ca7872b450ea4efacab6188849e5aac2ba161Steve Block } 720643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 721643ca7872b450ea4efacab6188849e5aac2ba161Steve Block if (contentsLayer) { 722643ca7872b450ea4efacab6188849e5aac2ba161Steve Block m_contentsLayer = contentsLayer; 723643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 724643ca7872b450ea4efacab6188849e5aac2ba161Steve Block if (defaultContentsOrientation() == CompositingCoordinatesBottomUp) { 725643ca7872b450ea4efacab6188849e5aac2ba161Steve Block CATransform3D flipper = { 726643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 1.0f, 0.0f, 0.0f, 0.0f, 727643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 0.0f, -1.0f, 0.0f, 0.0f, 728643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 0.0f, 0.0f, 1.0f, 0.0f, 729643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 0.0f, 0.0f, 0.0f, 1.0f}; 730643ca7872b450ea4efacab6188849e5aac2ba161Steve Block m_contentsLayer->setTransform(flipper); 731643ca7872b450ea4efacab6188849e5aac2ba161Steve Block m_contentsLayer->setAnchorPoint(CGPointMake(0.0f, 1.0f)); 732643ca7872b450ea4efacab6188849e5aac2ba161Steve Block } else 733643ca7872b450ea4efacab6188849e5aac2ba161Steve Block m_contentsLayer->setAnchorPoint(CGPointMake(0.0f, 0.0f)); 734643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 735643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // Insert the content layer first. Video elements require this, because they have 736643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // shadow content that must display in front of the video. 737643ca7872b450ea4efacab6188849e5aac2ba161Steve Block m_layer->insertSublayer(m_contentsLayer.get(), 0); 738643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 739643ca7872b450ea4efacab6188849e5aac2ba161Steve Block updateContentsRect(); 740643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 741643ca7872b450ea4efacab6188849e5aac2ba161Steve Block if (showDebugBorders()) { 742643ca7872b450ea4efacab6188849e5aac2ba161Steve Block setLayerBorderColor(m_contentsLayer.get(), Color(0, 0, 128, 180)); 743643ca7872b450ea4efacab6188849e5aac2ba161Steve Block m_contentsLayer->setBorderWidth(1.0f); 744643ca7872b450ea4efacab6188849e5aac2ba161Steve Block } 745643ca7872b450ea4efacab6188849e5aac2ba161Steve Block } 746643ca7872b450ea4efacab6188849e5aac2ba161Steve Block updateDebugIndicators(); 747643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 748643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 749643ca7872b450ea4efacab6188849e5aac2ba161Steve Block// This function simply mimics the operation of GraphicsLayerCA 750643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockvoid GraphicsLayerCACF::updateOpacityOnLayer() 751643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 752643ca7872b450ea4efacab6188849e5aac2ba161Steve Block primaryLayer()->setOpacity(m_opacity); 753643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 754643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 755643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} // namespace WebCore 756643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 757643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#endif // USE(ACCELERATED_COMPOSITING) 758