RenderLayer.h revision 0de5188ef06efbbf15051a6ea07ba970253c569c
18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/* 28f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian * Copyright (C) 2003, 2009 Apple Inc. All rights reserved. 38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Portions are Copyright (C) 1998 Netscape Communications Corporation. 58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Other contributors: 78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Robert O'Callahan <roc+@cs.cmu.edu> 88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * David Baron <dbaron@fas.harvard.edu> 98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Christian Biesinger <cbiesinger@web.de> 108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Randall Jesup <rjesup@wgate.com> 118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Roland Mainz <roland.mainz@informatik.med.uni-giessen.de> 128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Josh Soref <timeless@mac.com> 138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Boris Zbarsky <bzbarsky@mit.edu> 148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * This library is free software; you can redistribute it and/or 168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * modify it under the terms of the GNU Lesser General Public 178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * License as published by the Free Software Foundation; either 188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * version 2.1 of the License, or (at your option) any later version. 198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * This library is distributed in the hope that it will be useful, 218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * but WITHOUT ANY WARRANTY; without even the implied warranty of 228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Lesser General Public License for more details. 248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * You should have received a copy of the GNU Lesser General Public 268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * License along with this library; if not, write to the Free Software 278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Alternatively, the contents of this file may be used under the terms 308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * of either the Mozilla Public License Version 1.1, found at 318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * http://www.mozilla.org/MPL/ (the "MPL") or the GNU General Public 328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * License Version 2.0, found at http://www.fsf.org/copyleft/gpl.html 338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * (the "GPL"), in which case the provisions of the MPL or the GPL are 348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * applicable instead of those above. If you wish to allow use of your 358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * version of this file only under the terms of one of those two 368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * licenses (the MPL or the GPL) and not to allow others to use your 378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * version of this file under the LGPL, indicate your decision by 388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * deletingthe provisions above and replace them with the notice and 398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * other provisions required by the MPL or the GPL, as the case may be. 408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * If you do not delete the provisions above, a recipient may use your 418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * version of this file under any of the LGPL, the MPL or the GPL. 428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifndef RenderLayer_h 458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define RenderLayer_h 468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "PaintInfo.h" 48635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#include "RenderBox.h" 498f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#include "ScrollBehavior.h" 50ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch#include "ScrollableArea.h" 518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <wtf/OwnPtr.h> 528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectnamespace WebCore { 548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 558f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qianclass HitTestRequest; 568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass HitTestResult; 578f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qianclass HitTestingTransformState; 588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass RenderMarquee; 598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass RenderReplica; 608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass RenderScrollbarPart; 618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass RenderStyle; 628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass RenderView; 638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass Scrollbar; 648f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qianclass TransformationMatrix; 658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 668f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#if USE(ACCELERATED_COMPOSITING) 678f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qianclass RenderLayerBacking; 688f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qianclass RenderLayerCompositor; 698f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#endif 708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass ClipRects { 728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectpublic: 73635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project ClipRects() 74635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project : m_refCnt(0) 75635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project , m_fixed(false) 76635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project { 77635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project } 78635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ClipRects(const IntRect& r) 808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project : m_overflowClipRect(r) 818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project , m_fixedClipRect(r) 828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project , m_posClipRect(r) 83fe812d40b53dc52d5c929e39b5e293af8b6cb4e4Patrick Scott#if ENABLE(ANDROID_OVERFLOW_SCROLL) 84fe812d40b53dc52d5c929e39b5e293af8b6cb4e4Patrick Scott , m_hitTestClip(r) 85fe812d40b53dc52d5c929e39b5e293af8b6cb4e4Patrick Scott#endif 868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project , m_refCnt(0) 878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project , m_fixed(false) 888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 91635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project ClipRects(const ClipRects& other) 92635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project : m_overflowClipRect(other.overflowClipRect()) 93635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project , m_fixedClipRect(other.fixedClipRect()) 94635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project , m_posClipRect(other.posClipRect()) 95fe812d40b53dc52d5c929e39b5e293af8b6cb4e4Patrick Scott#if ENABLE(ANDROID_OVERFLOW_SCROLL) 96fe812d40b53dc52d5c929e39b5e293af8b6cb4e4Patrick Scott , m_hitTestClip(other.hitTestClip()) 97fe812d40b53dc52d5c929e39b5e293af8b6cb4e4Patrick Scott#endif 988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project , m_refCnt(0) 99635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project , m_fixed(other.fixed()) 1008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 1018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 103635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project void reset(const IntRect& r) 104635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project { 105635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project m_overflowClipRect = r; 106635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project m_fixedClipRect = r; 107635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project m_posClipRect = r; 108fe812d40b53dc52d5c929e39b5e293af8b6cb4e4Patrick Scott#if ENABLE(ANDROID_OVERFLOW_SCROLL) 109fe812d40b53dc52d5c929e39b5e293af8b6cb4e4Patrick Scott m_hitTestClip = r; 110fe812d40b53dc52d5c929e39b5e293af8b6cb4e4Patrick Scott#endif 111635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project m_fixed = false; 112635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project } 113635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 114635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project const IntRect& overflowClipRect() const { return m_overflowClipRect; } 115635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project void setOverflowClipRect(const IntRect& r) { m_overflowClipRect = r; } 116635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 117635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project const IntRect& fixedClipRect() const { return m_fixedClipRect; } 118635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project void setFixedClipRect(const IntRect&r) { m_fixedClipRect = r; } 119635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 120635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project const IntRect& posClipRect() const { return m_posClipRect; } 121635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project void setPosClipRect(const IntRect& r) { m_posClipRect = r; } 122fe812d40b53dc52d5c929e39b5e293af8b6cb4e4Patrick Scott#if ENABLE(ANDROID_OVERFLOW_SCROLL) 123fe812d40b53dc52d5c929e39b5e293af8b6cb4e4Patrick Scott const IntRect& hitTestClip() const { return m_hitTestClip; } 124fe812d40b53dc52d5c929e39b5e293af8b6cb4e4Patrick Scott void setHitTestClip(const IntRect& r) { m_hitTestClip = r; } 125fe812d40b53dc52d5c929e39b5e293af8b6cb4e4Patrick Scott#endif 126635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 1278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool fixed() const { return m_fixed; } 128635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project void setFixed(bool fixed) { m_fixed = fixed; } 1298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void ref() { m_refCnt++; } 1318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void deref(RenderArena* renderArena) { if (--m_refCnt == 0) destroy(renderArena); } 1328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void destroy(RenderArena*); 1348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Overloaded new operator. 1368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void* operator new(size_t, RenderArena*) throw(); 1378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Overridden to prevent the normal delete from being called. 1398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void operator delete(void*, size_t); 140635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 141635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project bool operator==(const ClipRects& other) const 142635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project { 143635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return m_overflowClipRect == other.overflowClipRect() && 144635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project m_fixedClipRect == other.fixedClipRect() && 145635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project m_posClipRect == other.posClipRect() && 1461a8ec29fc0211a6b5c53a8cd9ce20be5e630b005Patrick Scott#if ENABLE(ANDROID_OVERFLOW_SCROLL) 1471a8ec29fc0211a6b5c53a8cd9ce20be5e630b005Patrick Scott m_hitTestClip == other.hitTestClip() && 1481a8ec29fc0211a6b5c53a8cd9ce20be5e630b005Patrick Scott#endif 149635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project m_fixed == other.fixed(); 150635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project } 151635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 152635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project ClipRects& operator=(const ClipRects& other) 153635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project { 154635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project m_overflowClipRect = other.overflowClipRect(); 155635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project m_fixedClipRect = other.fixedClipRect(); 156635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project m_posClipRect = other.posClipRect(); 1571a8ec29fc0211a6b5c53a8cd9ce20be5e630b005Patrick Scott#if ENABLE(ANDROID_OVERFLOW_SCROLL) 1581a8ec29fc0211a6b5c53a8cd9ce20be5e630b005Patrick Scott m_hitTestClip = other.hitTestClip(); 1591a8ec29fc0211a6b5c53a8cd9ce20be5e630b005Patrick Scott#endif 160635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project m_fixed = other.fixed(); 161635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return *this; 162635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project } 1638f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 1648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectprivate: 1658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // The normal operator new is disallowed on all render objects. 1668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void* operator new(size_t) throw(); 1678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectprivate: 1698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project IntRect m_overflowClipRect; 1708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project IntRect m_fixedClipRect; 1718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project IntRect m_posClipRect; 172fe812d40b53dc52d5c929e39b5e293af8b6cb4e4Patrick Scott#if ENABLE(ANDROID_OVERFLOW_SCROLL) 173fe812d40b53dc52d5c929e39b5e293af8b6cb4e4Patrick Scott IntRect m_hitTestClip; 174fe812d40b53dc52d5c929e39b5e293af8b6cb4e4Patrick Scott#endif 1758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project unsigned m_refCnt : 31; 1768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool m_fixed : 1; 1778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}; 1788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 179ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochclass RenderLayer : public ScrollableArea { 1808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectpublic: 1818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project friend class RenderReplica; 1828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1838f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian RenderLayer(RenderBoxModelObject*); 1848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ~RenderLayer(); 1858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1868f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian RenderBoxModelObject* renderer() const { return m_renderer; } 1878f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian RenderBox* renderBox() const { return m_renderer && m_renderer->isBox() ? toRenderBox(m_renderer) : 0; } 1888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project RenderLayer* parent() const { return m_parent; } 1898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project RenderLayer* previousSibling() const { return m_previous; } 1908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project RenderLayer* nextSibling() const { return m_next; } 1918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project RenderLayer* firstChild() const { return m_first; } 1928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project RenderLayer* lastChild() const { return m_last; } 1938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void addChild(RenderLayer* newChild, RenderLayer* beforeChild = 0); 1958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project RenderLayer* removeChild(RenderLayer*); 1968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void removeOnlyThisLayer(); 1988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void insertOnlyThisLayer(); 1998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void repaintIncludingDescendants(); 2018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2028f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#if USE(ACCELERATED_COMPOSITING) 2038f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian // Indicate that the layer contents need to be repainted. Only has an effect 2048f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian // if layer compositing is being used, 2058f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian void setBackingNeedsRepaint(); 2068f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian void setBackingNeedsRepaintInRect(const IntRect& r); // r is in the coordinate space of the layer's render object 2075f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian void repaintIncludingNonCompositingDescendants(RenderBoxModelObject* repaintContainer); 2088f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#endif 2098f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 2102daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch void styleChanged(StyleDifference, const RenderStyle* oldStyle); 2118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project RenderMarquee* marquee() const { return m_marquee; } 2138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2148f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian bool isNormalFlowOnly() const { return m_isNormalFlowOnly; } 2158f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian bool isSelfPaintingLayer() const; 2168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool requiresSlowRepaints() const; 2188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool isTransparent() const; 2208f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian RenderLayer* transparentPaintingAncestor(); 221643ca7872b450ea4efacab6188849e5aac2ba161Steve Block void beginTransparencyLayers(GraphicsContext*, const RenderLayer* rootLayer, PaintBehavior); 2228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 223635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project bool hasReflection() const { return renderer()->hasReflection(); } 224d0825bca7fe65beaee391d30da42e937db621564Steve Block bool isReflection() const { return renderer()->isReplica(); } 2258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project RenderReplica* reflection() const { return m_reflection; } 2268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project RenderLayer* reflectionLayer() const; 2278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project const RenderLayer* root() const 2298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 2308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project const RenderLayer* curr = this; 2318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project while (curr->parent()) 2328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project curr = curr->parent(); 2338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return curr; 2348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 2358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2368f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian int x() const { return m_x; } 2378f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian int y() const { return m_y; } 2388f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian void setLocation(int x, int y) 2398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 2408f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian m_x = x; 2418f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian m_y = y; 2428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 2438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project int width() const { return m_width; } 2458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project int height() const { return m_height; } 246dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block IntSize size() const { return IntSize(m_width, m_height); } 247b96d73a95da0cb361595a6d46a1cddb605c0468cTeng-Hui Zhu 248b96d73a95da0cb361595a6d46a1cddb605c0468cTeng-Hui Zhu#if PLATFORM(ANDROID) 249b96d73a95da0cb361595a6d46a1cddb605c0468cTeng-Hui Zhu void setWidth(int w); 250b96d73a95da0cb361595a6d46a1cddb605c0468cTeng-Hui Zhu void setHeight(int h); 251b96d73a95da0cb361595a6d46a1cddb605c0468cTeng-Hui Zhu#else 2528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void setWidth(int w) { m_width = w; } 2538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void setHeight(int h) { m_height = h; } 254b96d73a95da0cb361595a6d46a1cddb605c0468cTeng-Hui Zhu#endif 2558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project int scrollWidth(); 2578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project int scrollHeight(); 2588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void panScrollFromPoint(const IntPoint&); 2608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Scrolling methods for layers that can scroll their overflow. 2628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void scrollByRecursively(int xDelta, int yDelta); 263dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 264f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch IntSize scrolledContentOffset() const { return IntSize(scrollXOffset() + m_scrollLeftOverflow, scrollYOffset() + m_scrollTopOverflow); } 265635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 266f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch int scrollXOffset() const { return m_scrollX + m_scrollOrigin.x(); } 267f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch int scrollYOffset() const { return m_scrollY + m_scrollOrigin.y(); } 268635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 269ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch void scrollToOffset(int x, int y); 270f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch void scrollToXOffset(int x) { scrollToOffset(x, m_scrollY + m_scrollOrigin.y()); } 271f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch void scrollToYOffset(int y) { scrollToOffset(m_scrollX + m_scrollOrigin.x(), y); } 2728f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian void scrollRectToVisible(const IntRect&, bool scrollToAnchor = false, const ScrollAlignment& alignX = ScrollAlignment::alignCenterIfNeeded, const ScrollAlignment& alignY = ScrollAlignment::alignCenterIfNeeded); 2738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2748f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian IntRect getRectToExpose(const IntRect& visibleRect, const IntRect& exposeRect, const ScrollAlignment& alignX, const ScrollAlignment& alignY); 2758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void setHasHorizontalScrollbar(bool); 2778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void setHasVerticalScrollbar(bool); 2788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project PassRefPtr<Scrollbar> createScrollbar(ScrollbarOrientation); 2808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void destroyScrollbar(ScrollbarOrientation); 2818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2822daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch // ScrollableArea overrides 2832daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch virtual Scrollbar* horizontalScrollbar() const { return m_hBar.get(); } 2842daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch virtual Scrollbar* verticalScrollbar() const { return m_vBar.get(); } 2858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2862daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch int verticalScrollbarWidth(OverlayScrollbarSizeRelevancy = IgnoreOverlayScrollbarSize) const; 2872daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch int horizontalScrollbarHeight(OverlayScrollbarSizeRelevancy = IgnoreOverlayScrollbarSize) const; 2888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 289d0825bca7fe65beaee391d30da42e937db621564Steve Block bool hasOverflowControls() const; 290635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project bool isPointInResizeControl(const IntPoint& absolutePoint) const; 2910bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch bool hitTestOverflowControls(HitTestResult&, const IntPoint& localPoint); 292635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project IntSize offsetFromResizeCorner(const IntPoint& absolutePoint) const; 2938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2942bde8e466a4451c7319e3a072d118917957d6554Steve Block void paintOverflowControls(GraphicsContext*, int tx, int ty, const IntRect& damageRect, bool paintingOverlayControls = false); 2958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void paintScrollCorner(GraphicsContext*, int tx, int ty, const IntRect& damageRect); 2968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void paintResizer(GraphicsContext*, int tx, int ty, const IntRect& damageRect); 2978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void updateScrollInfoAfterLayout(); 2998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3005ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen bool scroll(ScrollDirection, ScrollGranularity, float multiplier = 1); 3018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void autoscroll(); 3028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void resize(const PlatformMouseEvent&, const IntSize&); 3048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool inResizeMode() const { return m_inResizeMode; } 3058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void setInResizeMode(bool b) { m_inResizeMode = b; } 3068f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 3078f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian bool isRootLayer() const { return renderer()->isRenderView(); } 3088f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 3098f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#if USE(ACCELERATED_COMPOSITING) 3108f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian RenderLayerCompositor* compositor() const; 3118f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 3128f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian // Notification from the renderer that its content changed (e.g. current frame of image changed). 3138f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian // Allows updates of layer content without repainting. 314cad810f21b803229eb11403f9209855525a25d57Steve Block enum ContentChangeType { ImageChanged, MaskImageChanged, CanvasChanged, VideoChanged, FullScreenChanged }; 315f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch void contentChanged(ContentChangeType); 3168f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#endif 3170bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 3180bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch // Returns true if the accelerated compositing is enabled 3190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch bool hasAcceleratedCompositing() const; 3204a156157940f51b91eadd76f6c86f862ec0a1da0Ben Murdoch 3214a156157940f51b91eadd76f6c86f862ec0a1da0Ben Murdoch bool canRender3DTransforms() const; 3224a156157940f51b91eadd76f6c86f862ec0a1da0Ben Murdoch 3238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void updateLayerPosition(); 3240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 3250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch enum UpdateLayerPositionsFlag { 3262bde8e466a4451c7319e3a072d118917957d6554Steve Block CheckForRepaint = 1, 3272bde8e466a4451c7319e3a072d118917957d6554Steve Block IsCompositingUpdateRoot = 1 << 1, 3282bde8e466a4451c7319e3a072d118917957d6554Steve Block UpdateCompositingLayers = 1 << 2, 3292bde8e466a4451c7319e3a072d118917957d6554Steve Block UpdatePagination = 1 << 3 3300bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch }; 3310bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch typedef unsigned UpdateLayerPositionsFlags; 3322bde8e466a4451c7319e3a072d118917957d6554Steve Block void updateLayerPositions(UpdateLayerPositionsFlags = CheckForRepaint | IsCompositingUpdateRoot | UpdateCompositingLayers, IntPoint* cachedOffset = 0); 3338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void updateTransform(); 3358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 336635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project void relativePositionOffset(int& relX, int& relY) const { relX += m_relX; relY += m_relY; } 337635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project IntSize relativePositionOffset() const { return IntSize(m_relX, m_relY); } 3388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 339635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project void clearClipRectsIncludingDescendants(); 3408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void clearClipRects(); 3418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 342643ca7872b450ea4efacab6188849e5aac2ba161Steve Block void addBlockSelectionGapsBounds(const IntRect&); 343643ca7872b450ea4efacab6188849e5aac2ba161Steve Block void clearBlockSelectionGapsBounds(); 344643ca7872b450ea4efacab6188849e5aac2ba161Steve Block void repaintBlockSelectionGaps(); 345643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 3468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Get the enclosing stacking context for this layer. A stacking context is a layer 3478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // that has a non-auto z-index. 3488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project RenderLayer* stackingContext() const; 34909cdf3e990745cfbcada2d0a49ef371029fc6a97Nicolas Roard#if ENABLE(COMPOSITED_FIXED_ELEMENTS) 35009cdf3e990745cfbcada2d0a49ef371029fc6a97Nicolas Roard bool isFixed() const { return renderer()->isPositioned() && renderer()->style()->position() == FixedPosition; } 35109cdf3e990745cfbcada2d0a49ef371029fc6a97Nicolas Roard // If fixed elements are composited, they will be containing children 35209cdf3e990745cfbcada2d0a49ef371029fc6a97Nicolas Roard bool isStackingContext() const { 35382f247bdbb98dd80c44209d87692c650c3704617Patrick Scott#if ENABLE(ANDROID_OVERFLOW_SCROLL) 35482f247bdbb98dd80c44209d87692c650c3704617Patrick Scott if (hasOverflowScroll()) 35582f247bdbb98dd80c44209d87692c650c3704617Patrick Scott return true; 35682f247bdbb98dd80c44209d87692c650c3704617Patrick Scott#endif 357b8c237486bcf299d8a04bdae8d8e35fd37866172Chris Craik return !hasAutoZIndex() || renderer()->isRenderView() || (isComposited() && isFixed()); 35809cdf3e990745cfbcada2d0a49ef371029fc6a97Nicolas Roard } 35909cdf3e990745cfbcada2d0a49ef371029fc6a97Nicolas Roard#else 36082f247bdbb98dd80c44209d87692c650c3704617Patrick Scott#if ENABLE(ANDROID_OVERFLOW_SCROLL) 36182f247bdbb98dd80c44209d87692c650c3704617Patrick Scott bool isStackingContext() const { return !hasAutoZIndex() || renderer()->isRenderView() || hasOverflowScroll(); } 36282f247bdbb98dd80c44209d87692c650c3704617Patrick Scott#else 36309cdf3e990745cfbcada2d0a49ef371029fc6a97Nicolas Roard bool isStackingContext() const { return !hasAutoZIndex() || renderer()->isRenderView() ; } 36409cdf3e990745cfbcada2d0a49ef371029fc6a97Nicolas Roard#endif 36582f247bdbb98dd80c44209d87692c650c3704617Patrick Scott#endif 3668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void dirtyZOrderLists(); 3688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void dirtyStackingContextZOrderLists(); 3698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void updateZOrderLists(); 3708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Vector<RenderLayer*>* posZOrderList() const { return m_posZOrderList; } 3718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Vector<RenderLayer*>* negZOrderList() const { return m_negZOrderList; } 3728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3738f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian void dirtyNormalFlowList(); 3748f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian void updateNormalFlowList(); 3758f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian Vector<RenderLayer*>* normalFlowList() const { return m_normalFlowList; } 3768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool hasVisibleContent() const { return m_hasVisibleContent; } 378cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block bool hasVisibleDescendant() const { return m_hasVisibleDescendant; } 3798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void setHasVisibleContent(bool); 3808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void dirtyVisibleContentStatus(); 3818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Gets the nearest enclosing positioned ancestor layer (also includes 3838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // the <html> layer and the root layer). 3848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project RenderLayer* enclosingPositionedAncestor() const; 3858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 386643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // The layer relative to which clipping rects for this layer are computed. 387643ca7872b450ea4efacab6188849e5aac2ba161Steve Block RenderLayer* clippingRoot() const; 388643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 3898f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#if USE(ACCELERATED_COMPOSITING) 3908f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian // Enclosing compositing layer; if includeSelf is true, may return this. 3918f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian RenderLayer* enclosingCompositingLayer(bool includeSelf = true) const; 3928f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian // Ancestor compositing layer, excluding this. 3938f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian RenderLayer* ancestorCompositingLayer() const { return enclosingCompositingLayer(false); } 3948f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#endif 3958f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 3968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void convertToLayerCoords(const RenderLayer* ancestorLayer, int& x, int& y) const; 3978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool hasAutoZIndex() const { return renderer()->style()->hasAutoZIndex(); } 3998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project int zIndex() const { return renderer()->style()->zIndex(); } 4008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // The two main functions that use the layer system. The paint method 4028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // paints the layers that intersect the damage rect from back to 4038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // front. The hitTest method looks for mouse events by walking 4048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // layers that intersect the point from front to back. 405643ca7872b450ea4efacab6188849e5aac2ba161Steve Block void paint(GraphicsContext*, const IntRect& damageRect, PaintBehavior = PaintBehaviorNormal, RenderObject* paintingRoot = 0); 4068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool hitTest(const HitTestRequest&, HitTestResult&); 4072bde8e466a4451c7319e3a072d118917957d6554Steve Block void paintOverlayScrollbars(GraphicsContext*, const IntRect& damageRect, PaintBehavior, RenderObject* paintingRoot); 4088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // This method figures out our layerBounds in coordinates relative to 4108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // |rootLayer}. It also computes our background and foreground clip rects 4118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // for painting/event handling. 4128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void calculateRects(const RenderLayer* rootLayer, const IntRect& paintDirtyRect, IntRect& layerBounds, 4132daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch IntRect& backgroundRect, IntRect& foregroundRect, IntRect& outlineRect, bool temporaryClipRects = false, 4142daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch OverlayScrollbarSizeRelevancy = IgnoreOverlayScrollbarSize) const; 415635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 416635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project // Compute and cache clip rects computed with the given layer as the root 4172daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch void updateClipRects(const RenderLayer* rootLayer, OverlayScrollbarSizeRelevancy = IgnoreOverlayScrollbarSize); 418635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project // Compute and return the clip rects. If useCached is true, will used previously computed clip rects on ancestors 419635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project // (rather than computing them all from scratch up the parent chain). 4202daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch void calculateClipRects(const RenderLayer* rootLayer, ClipRects&, bool useCached = false, OverlayScrollbarSizeRelevancy = IgnoreOverlayScrollbarSize) const; 4218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ClipRects* clipRects() const { return m_clipRects; } 422635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 4238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project IntRect childrenClipRect() const; // Returns the foreground clip rect of the layer in the document's coordinate space. 4248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project IntRect selfClipRect() const; // Returns the background clip rect of the layer in the document's coordinate space. 4258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool intersectsDamageRect(const IntRect& layerBounds, const IntRect& damageRect, const RenderLayer* rootLayer) const; 4278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4288f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian // Bounding box relative to some ancestor layer. 4298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project IntRect boundingBox(const RenderLayer* rootLayer) const; 4308f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian // Bounding box in the coordinates of this layer. 4318f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian IntRect localBoundingBox() const; 4328f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian // Bounding box relative to the root. 4338f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian IntRect absoluteBoundingBox() const; 4348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void updateHoverActiveState(const HitTestRequest&, HitTestResult&); 4368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4378f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian // Return a cached repaint rect, computed relative to the layer renderer's containerForRepaint. 4388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project IntRect repaintRect() const { return m_repaintRect; } 43906ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen IntRect repaintRectIncludingDescendants() const; 4400bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch void computeRepaintRects(); 441dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block void updateRepaintRectsAfterScroll(bool fixed = false); 4428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void setNeedsFullRepaint(bool f = true) { m_needsFullRepaint = f; } 4438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 44481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch int staticInlinePosition() const { return m_staticInlinePosition; } 44581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch int staticBlockPosition() const { return m_staticBlockPosition; } 44681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch void setStaticInlinePosition(int position) { m_staticInlinePosition = position; } 44781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch void setStaticBlockPosition(int position) { m_staticBlockPosition = position; } 4488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 449635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project bool hasTransform() const { return renderer()->hasTransform(); } 4508f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian // Note that this transform has the transform-origin baked in. 451635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project TransformationMatrix* transform() const { return m_transform.get(); } 4528f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian // currentTransform computes a transform which takes accelerated animations into account. The 4538f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian // resulting transform has transform-origin baked in. If the layer does not have a transform, 4548f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian // returns the identity matrix. 4558f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian TransformationMatrix currentTransform() const; 456643ca7872b450ea4efacab6188849e5aac2ba161Steve Block TransformationMatrix renderableTransform(PaintBehavior) const; 4578f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 4588f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian // Get the perspective transform, which is applied to transformed sublayers. 4598f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian // Returns true if the layer has a -webkit-perspective. 4608f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian // Note that this transform has the perspective-origin baked in. 4618f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian TransformationMatrix perspectiveTransform() const; 4628f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian FloatPoint perspectiveOrigin() const; 4638f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian bool preserves3D() const { return renderer()->style()->transformStyle3D() == TransformStyle3DPreserve3D; } 4648f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian bool has3DTransform() const { return m_transform && !m_transform->isAffine(); } 4658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Overloaded new operator. Derived classes must override operator new 4678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // in order to allocate out of the RenderArena. 4688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void* operator new(size_t, RenderArena*) throw(); 4698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Overridden to prevent the normal delete from being called. 4718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void operator delete(void*, size_t); 4728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4738f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#if USE(ACCELERATED_COMPOSITING) 4748f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian bool isComposited() const { return m_backing != 0; } 475231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block bool hasCompositedMask() const; 4768f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian RenderLayerBacking* backing() const { return m_backing.get(); } 4778f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian RenderLayerBacking* ensureBacking(); 4788f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian void clearBacking(); 4792daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch virtual GraphicsLayer* layerForHorizontalScrollbar() const; 4802daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch virtual GraphicsLayer* layerForVerticalScrollbar() const; 4812daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch virtual GraphicsLayer* layerForScrollCorner() const; 4828f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#else 4838f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian bool isComposited() const { return false; } 484231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block bool hasCompositedMask() const { return false; } 4858f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#endif 4868f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 487643ca7872b450ea4efacab6188849e5aac2ba161Steve Block bool paintsWithTransparency(PaintBehavior paintBehavior) const 4888f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian { 489643ca7872b450ea4efacab6188849e5aac2ba161Steve Block return isTransparent() && ((paintBehavior & PaintBehaviorFlattenCompositingLayers) || !isComposited()); 4908f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian } 4918f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 49265f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch bool paintsWithTransform(PaintBehavior) const; 4938f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 4942bde8e466a4451c7319e3a072d118917957d6554Steve Block bool containsDirtyOverlayScrollbars() const { return m_containsDirtyOverlayScrollbars; } 4952bde8e466a4451c7319e3a072d118917957d6554Steve Block void setContainsDirtyOverlayScrollbars(bool dirtyScrollbars) { m_containsDirtyOverlayScrollbars = dirtyScrollbars; } 4962bde8e466a4451c7319e3a072d118917957d6554Steve Block 497bbcce278be9be6a85f47928c38a74c8d36a13a85Ben Murdoch#if ENABLE(ANDROID_OVERFLOW_SCROLL) 498bbcce278be9be6a85f47928c38a74c8d36a13a85Ben Murdoch bool hasOverflowScroll() const { return m_hasOverflowScroll; } 499bbcce278be9be6a85f47928c38a74c8d36a13a85Ben Murdoch bool hasOverflowParent() const; 500bbcce278be9be6a85f47928c38a74c8d36a13a85Ben Murdoch#endif 5010de5188ef06efbbf15051a6ea07ba970253c569cChris Craik#if PLATFORM(ANDROID) 5020de5188ef06efbbf15051a6ea07ba970253c569cChris Craik bool intrinsicallyComposited() const { return m_intrinsicallyComposited; } 5030de5188ef06efbbf15051a6ea07ba970253c569cChris Craik void setIntrinsicallyComposited(bool intrinsicallyComposited) { 5040de5188ef06efbbf15051a6ea07ba970253c569cChris Craik m_intrinsicallyComposited = intrinsicallyComposited; 5050de5188ef06efbbf15051a6ea07ba970253c569cChris Craik } 5060de5188ef06efbbf15051a6ea07ba970253c569cChris Craik#endif 507bbcce278be9be6a85f47928c38a74c8d36a13a85Ben Murdoch 5088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectprivate: 5098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // The normal operator new is disallowed on all render objects. 5108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void* operator new(size_t) throw(); 5118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void setNextSibling(RenderLayer* next) { m_next = next; } 5138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void setPreviousSibling(RenderLayer* prev) { m_previous = prev; } 5148f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian void setParent(RenderLayer* parent); 5158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void setFirstChild(RenderLayer* first) { m_first = first; } 5168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void setLastChild(RenderLayer* last) { m_last = last; } 5178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5188f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian int renderBoxX() const { return renderer()->isBox() ? toRenderBox(renderer())->x() : 0; } 5198f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian int renderBoxY() const { return renderer()->isBox() ? toRenderBox(renderer())->y() : 0; } 5208f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 5218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void collectLayers(Vector<RenderLayer*>*&, Vector<RenderLayer*>*&); 5228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5238f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian void updateLayerListsIfNeeded(); 5240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch void updateCompositingAndLayerListsIfNeeded(); 5258f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 5260bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch enum PaintLayerFlag { 5270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch PaintLayerHaveTransparency = 1, 5280bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch PaintLayerAppliedTransform = 1 << 1, 5290bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch PaintLayerTemporaryClipRects = 1 << 2, 5302bde8e466a4451c7319e3a072d118917957d6554Steve Block PaintLayerPaintingReflection = 1 << 3, 5312bde8e466a4451c7319e3a072d118917957d6554Steve Block PaintLayerPaintingOverlayScrollbars = 1 << 4 5320bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch }; 5330bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 5340bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch typedef unsigned PaintLayerFlags; 5350bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 5368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void paintLayer(RenderLayer* rootLayer, GraphicsContext*, const IntRect& paintDirtyRect, 537ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block PaintBehavior, RenderObject* paintingRoot, OverlapTestRequestMap* = 0, 538e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block PaintLayerFlags = 0); 539e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block void paintList(Vector<RenderLayer*>*, RenderLayer* rootLayer, GraphicsContext* p, 540e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block const IntRect& paintDirtyRect, PaintBehavior, 541ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block RenderObject* paintingRoot, OverlapTestRequestMap*, 542e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block PaintLayerFlags); 543e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block void paintPaginatedChildLayer(RenderLayer* childLayer, RenderLayer* rootLayer, GraphicsContext*, 544e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block const IntRect& paintDirtyRect, PaintBehavior, 545ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block RenderObject* paintingRoot, OverlapTestRequestMap*, 546e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block PaintLayerFlags); 547e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block void paintChildLayerIntoColumns(RenderLayer* childLayer, RenderLayer* rootLayer, GraphicsContext*, 548e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block const IntRect& paintDirtyRect, PaintBehavior, 549ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block RenderObject* paintingRoot, OverlapTestRequestMap*, 550e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block PaintLayerFlags, const Vector<RenderLayer*>& columnLayers, size_t columnIndex); 5518f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 5528f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian RenderLayer* hitTestLayer(RenderLayer* rootLayer, RenderLayer* containerLayer, const HitTestRequest& request, HitTestResult& result, 553e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block const IntRect& hitTestRect, const IntPoint& hitTestPoint, bool appliedTransform, 554e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block const HitTestingTransformState* transformState = 0, double* zOffset = 0); 555e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block RenderLayer* hitTestList(Vector<RenderLayer*>*, RenderLayer* rootLayer, const HitTestRequest& request, HitTestResult& result, 556e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block const IntRect& hitTestRect, const IntPoint& hitTestPoint, 557e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block const HitTestingTransformState* transformState, double* zOffsetForDescendants, double* zOffset, 558e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block const HitTestingTransformState* unflattenedTransformState, bool depthSortDescendants); 559e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block RenderLayer* hitTestPaginatedChildLayer(RenderLayer* childLayer, RenderLayer* rootLayer, const HitTestRequest& request, HitTestResult& result, 560e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block const IntRect& hitTestRect, const IntPoint& hitTestPoint, 561e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block const HitTestingTransformState* transformState, double* zOffset); 562e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block RenderLayer* hitTestChildLayerColumns(RenderLayer* childLayer, RenderLayer* rootLayer, const HitTestRequest& request, HitTestResult& result, 563e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block const IntRect& hitTestRect, const IntPoint& hitTestPoint, 564e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block const HitTestingTransformState* transformState, double* zOffset, 565e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block const Vector<RenderLayer*>& columnLayers, size_t columnIndex); 566e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block 5678f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian PassRefPtr<HitTestingTransformState> createLocalTransformState(RenderLayer* rootLayer, RenderLayer* containerLayer, 5688f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian const IntRect& hitTestRect, const IntPoint& hitTestPoint, 5698f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian const HitTestingTransformState* containerTransformState) const; 5708f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 5718f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian bool hitTestContents(const HitTestRequest&, HitTestResult&, const IntRect& layerBounds, const IntPoint& hitTestPoint, HitTestFilter) const; 5728f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 5738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void computeScrollDimensions(bool* needHBar = 0, bool* needVBar = 0); 5748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5758f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian bool shouldBeNormalFlowOnly() const; 5768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 577ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch // ScrollableArea interface 5785abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick virtual int scrollSize(ScrollbarOrientation orientation) const; 579ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch virtual void setScrollOffset(const IntPoint&); 580ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch virtual int scrollPosition(Scrollbar*) const; 5818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual void invalidateScrollbarRect(Scrollbar*, const IntRect&); 5822daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch virtual void invalidateScrollCornerRect(const IntRect&); 5838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual bool isActive() const; 5842daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch virtual bool isScrollCornerVisible() const; 5852daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch virtual IntRect scrollCornerRect() const; 5860bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch virtual IntRect convertFromScrollbarToContainingView(const Scrollbar*, const IntRect&) const; 5870bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch virtual IntRect convertFromContainingViewToScrollbar(const Scrollbar*, const IntRect&) const; 5880bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch virtual IntPoint convertFromScrollbarToContainingView(const Scrollbar*, const IntPoint&) const; 5890bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch virtual IntPoint convertFromContainingViewToScrollbar(const Scrollbar*, const IntPoint&) const; 5902fc2651226baac27029e38c9d6ef883fa32084dbSteve Block virtual IntSize contentsSize() const; 5912fc2651226baac27029e38c9d6ef883fa32084dbSteve Block virtual int visibleHeight() const; 5922fc2651226baac27029e38c9d6ef883fa32084dbSteve Block virtual int visibleWidth() const; 5932bde8e466a4451c7319e3a072d118917957d6554Steve Block virtual IntPoint currentMousePosition() const; 5942bde8e466a4451c7319e3a072d118917957d6554Steve Block virtual bool shouldSuspendScrollAnimations() const; 5952bde8e466a4451c7319e3a072d118917957d6554Steve Block 5962daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch // Rectangle encompassing the scroll corner and resizer rect. 5972daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch IntRect scrollCornerAndResizerRect() const; 5982daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 5992bde8e466a4451c7319e3a072d118917957d6554Steve Block virtual void disconnectFromPage() { m_page = 0; } 600ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 601ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch // NOTE: This should only be called by the overriden setScrollOffset from ScrollableArea. 602ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch void scrollTo(int x, int y); 603ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch 6040bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch IntSize scrollbarOffset(const Scrollbar*) const; 6050bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 6068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void updateOverflowStatus(bool horizontalOverflow, bool verticalOverflow); 6078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void childVisibilityChanged(bool newVisibility); 6098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void dirtyVisibleDescendantStatus(); 6108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void updateVisibilityStatus(); 6118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6128f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian // This flag is computed by RenderLayerCompositor, which knows more about 3d hierarchies than we do. 6138f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian void setHas3DTransformedDescendant(bool b) { m_has3DTransformedDescendant = b; } 6148f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian bool has3DTransformedDescendant() const { return m_has3DTransformedDescendant; } 6158f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 6168f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian void dirty3DTransformedDescendantStatus(); 6178f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian // Both updates the status, and returns true if descendants of this have 3d. 6188f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian bool update3DTransformedDescendantStatus(); 6198f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 6208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Node* enclosingElement() const; 6218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void createReflection(); 623231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block void removeReflection(); 624231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 6258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void updateReflectionStyle(); 6268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool paintingInsideReflection() const { return m_paintingInsideReflection; } 6270bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch void setPaintingInsideReflection(bool b) { m_paintingInsideReflection = b; } 6288f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 6292daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch void parentClipRects(const RenderLayer* rootLayer, ClipRects&, bool temporaryClipRects = false, OverlayScrollbarSizeRelevancy = IgnoreOverlayScrollbarSize) const; 6302daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch IntRect backgroundClipRect(const RenderLayer* rootLayer, bool temporaryClipRects, OverlayScrollbarSizeRelevancy = IgnoreOverlayScrollbarSize) const; 6318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project RenderLayer* enclosingTransformedAncestor() const; 6338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 634635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project // Convert a point in absolute coords into layer coords, taking transforms into account 635635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project IntPoint absoluteToContents(const IntPoint&) const; 636635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 6372daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch void positionOverflowControls(int tx, int ty); 6388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void updateScrollCornerStyle(); 6398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void updateResizerStyle(); 6408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 641e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block void updatePagination(); 642e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block bool isPaginated() const { return m_isPaginated; } 643e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block 6448f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#if USE(ACCELERATED_COMPOSITING) 6458f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian bool hasCompositingDescendant() const { return m_hasCompositingDescendant; } 6468f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian void setHasCompositingDescendant(bool b) { m_hasCompositingDescendant = b; } 6478f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 6480bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch bool mustOverlapCompositedLayers() const { return m_mustOverlapCompositedLayers; } 6490bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch void setMustOverlapCompositedLayers(bool b) { m_mustOverlapCompositedLayers = b; } 650e0aa068729e4558f198f02f9217b11a05fe3d1d3Nicolas Roard#if ENABLE(COMPOSITED_FIXED_ELEMENTS) 651e0aa068729e4558f198f02f9217b11a05fe3d1d3Nicolas Roard bool shouldComposite() { return m_shouldComposite; } 652e0aa068729e4558f198f02f9217b11a05fe3d1d3Nicolas Roard void setShouldComposite(bool b) { m_shouldComposite = b; } 653e0aa068729e4558f198f02f9217b11a05fe3d1d3Nicolas Roard#endif 6548f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#endif 6558f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 65665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch void updateContentsScale(float); 65765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 6588f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian friend class RenderLayerBacking; 6598f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian friend class RenderLayerCompositor; 6608f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian friend class RenderBoxModelObject; 6618f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 6628f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian // Only safe to call from RenderBoxModelObject::destroyLayer(RenderArena*) 6638f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian void destroy(RenderArena*); 6648f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 665f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch int overflowTop() const; 666f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch int overflowBottom() const; 667f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch int overflowLeft() const; 668f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch int overflowRight() const; 669f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 6708f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qianprotected: 6718f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian RenderBoxModelObject* m_renderer; 6728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project RenderLayer* m_parent; 6748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project RenderLayer* m_previous; 6758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project RenderLayer* m_next; 6768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project RenderLayer* m_first; 6778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project RenderLayer* m_last; 6788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project IntRect m_repaintRect; // Cached repaint rects. Used by layout. 6808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project IntRect m_outlineBox; 6818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Our current relative position offset. 6838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project int m_relX; 6848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project int m_relY; 6858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Our (x,y) coordinates are in our parent layer's coordinate space. 6878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project int m_x; 6888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project int m_y; 6898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // The layer's width/height 6918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project int m_width; 6928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project int m_height; 6938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Our scroll offsets if the view is scrolled. 6958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project int m_scrollX; 6968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project int m_scrollY; 697f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 698f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch int m_scrollLeftOverflow; 699f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch int m_scrollTopOverflow; 700f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 7018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // The width/height of our scrolled area. 7028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project int m_scrollWidth; 7038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project int m_scrollHeight; 7048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // For layers with overflow, we have a pair of scrollbars. 7068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project RefPtr<Scrollbar> m_hBar; 7078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project RefPtr<Scrollbar> m_vBar; 7088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Keeps track of whether the layer is currently resizing, so events can cause resizing to start and stop. 7108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool m_inResizeMode; 7118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // For layers that establish stacking contexts, m_posZOrderList holds a sorted list of all the 7138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // descendant layers within the stacking context that have z-indices of 0 or greater 7148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // (auto will count as 0). m_negZOrderList holds descendants within our stacking context with negative 7158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // z-indices. 7168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Vector<RenderLayer*>* m_posZOrderList; 7178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Vector<RenderLayer*>* m_negZOrderList; 7188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // This list contains child layers that cannot create stacking contexts. For now it is just 7208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // overflow layers, but that may change in the future. 7218f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian Vector<RenderLayer*>* m_normalFlowList; 7228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ClipRects* m_clipRects; // Cached clip rects used when painting and hit testing. 724635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#ifndef NDEBUG 725635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project const RenderLayer* m_clipRectsRoot; // Root layer used to compute clip rects. 726635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#endif 7278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool m_scrollDimensionsDirty : 1; 7298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool m_zOrderListsDirty : 1; 7308f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian bool m_normalFlowListDirty: 1; 7318f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian bool m_isNormalFlowOnly : 1; 7328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool m_usedTransparency : 1; // Tracks whether we need to close a transparent layer, i.e., whether 7348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // we ended up painting this layer or any descendants (and therefore need to 7358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // blend). 7368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool m_paintingInsideReflection : 1; // A state bit tracking if we are painting inside a replica. 7378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool m_inOverflowRelayout : 1; 7388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool m_needsFullRepaint : 1; 7398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool m_overflowStatusDirty : 1; 7418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool m_horizontalOverflow : 1; 7428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool m_verticalOverflow : 1; 7438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool m_visibleContentStatusDirty : 1; 7448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool m_hasVisibleContent : 1; 7458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool m_visibleDescendantStatusDirty : 1; 7468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool m_hasVisibleDescendant : 1; 7478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 748e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block bool m_isPaginated : 1; // If we think this layer is split by a multi-column ancestor, then this bit will be set. 749e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block 7508f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian bool m_3DTransformedDescendantStatusDirty : 1; 7518f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian bool m_has3DTransformedDescendant : 1; // Set on a stacking context layer that has 3D descendants anywhere 7528f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian // in a preserves3D hierarchy. Hint to do 3D-aware hit testing. 7538f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#if USE(ACCELERATED_COMPOSITING) 7542daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch bool m_hasCompositingDescendant : 1; // In the z-order tree. 7550bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch bool m_mustOverlapCompositedLayers : 1; 756e0aa068729e4558f198f02f9217b11a05fe3d1d3Nicolas Roard#if ENABLE(COMPOSITED_FIXED_ELEMENTS) 757e0aa068729e4558f198f02f9217b11a05fe3d1d3Nicolas Roard bool m_shouldComposite : 1; 758e0aa068729e4558f198f02f9217b11a05fe3d1d3Nicolas Roard#endif 7598f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#endif 7600de5188ef06efbbf15051a6ea07ba970253c569cChris Craik#if PLATFORM(ANDROID) 7610de5188ef06efbbf15051a6ea07ba970253c569cChris Craik bool m_intrinsicallyComposited : 1; 7620de5188ef06efbbf15051a6ea07ba970253c569cChris Craik#endif 76374ee772b3c1ea8b557e5a596e9cbc655d1c0e161Steve Block 76474ee772b3c1ea8b557e5a596e9cbc655d1c0e161Steve Block bool m_containsDirtyOverlayScrollbars : 1; 7658b0b15e74bb7f1bd03bfd07f706a5afa637b0b73Patrick Scott#if ENABLE(ANDROID_OVERFLOW_SCROLL) 7668b0b15e74bb7f1bd03bfd07f706a5afa637b0b73Patrick Scott bool m_hasOverflowScroll : 1; 7678b0b15e74bb7f1bd03bfd07f706a5afa637b0b73Patrick Scott#endif 7688f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 7692bde8e466a4451c7319e3a072d118917957d6554Steve Block IntPoint m_cachedOverlayScrollbarOffset; 7702bde8e466a4451c7319e3a072d118917957d6554Steve Block 7718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project RenderMarquee* m_marquee; // Used by layers with overflow:marquee 7728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Cached normal flow values for absolute positioned elements with static left/top values. 77481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch int m_staticInlinePosition; 77581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch int m_staticBlockPosition; 7768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 777635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project OwnPtr<TransformationMatrix> m_transform; 7788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // May ultimately be extended to many replicas (with their own paint order). 7808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project RenderReplica* m_reflection; 7818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Renderers to hold our custom scroll corner and resizer. 7838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project RenderScrollbarPart* m_scrollCorner; 7848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project RenderScrollbarPart* m_resizer; 7858f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 786643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockprivate: 787643ca7872b450ea4efacab6188849e5aac2ba161Steve Block IntRect m_blockSelectionGapsBounds; 788643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 7898f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#if USE(ACCELERATED_COMPOSITING) 7908f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian OwnPtr<RenderLayerBacking> m_backing; 7918f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#endif 7922bde8e466a4451c7319e3a072d118917957d6554Steve Block 7932bde8e466a4451c7319e3a072d118917957d6554Steve Block Page* m_page; 7948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}; 7958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} // namespace WebCore 7978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 798d0825bca7fe65beaee391d30da42e937db621564Steve Block#ifndef NDEBUG 799d0825bca7fe65beaee391d30da42e937db621564Steve Block// Outside the WebCore namespace for ease of invocation from gdb. 8006b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brennervoid showLayerTree(const WebCore::RenderLayer*); 8016b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brennervoid showLayerTree(const WebCore::RenderObject*); 802d0825bca7fe65beaee391d30da42e937db621564Steve Block#endif 803d0825bca7fe65beaee391d30da42e937db621564Steve Block 8048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif // RenderLayer_h 805