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