15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/* 25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2000 Lars Knoll (knoll@kde.org) 35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (C) 2000 Antti Koivisto (koivisto@kde.org) 45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (C) 2000 Dirk Mueller (mueller@kde.org) 55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (C) 2004 Allan Sandfeld Jensen (kde@carewolf.com) 65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2012 Apple Inc. All rights reserved. 75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2009 Google Inc. All rights reserved. 85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * This library is free software; you can redistribute it and/or 105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * modify it under the terms of the GNU Library General Public 115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * License as published by the Free Software Foundation; either 125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * version 2 of the License, or (at your option) any later version. 135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * This library is distributed in the hope that it will be useful, 155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * but WITHOUT ANY WARRANTY; without even the implied warranty of 165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Library General Public License for more details. 185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * You should have received a copy of the GNU Library General Public License 205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * along with this library; see the file COPYING.LIB. If not, write to 215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Boston, MA 02110-1301, USA. 235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#ifndef RenderObject_h 275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#define RenderObject_h 285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/dom/Element.h" 30f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)#include "core/dom/Position.h" 319bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles)#include "core/dom/StyleEngine.h" 32e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)#include "core/fetch/ImageResourceClient.h" 33bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)#include "core/rendering/CompositingState.h" 348abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)#include "core/rendering/LayoutIndicator.h" 3553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/rendering/PaintPhase.h" 3653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/rendering/RenderObjectChildList.h" 3753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/rendering/ScrollBehavior.h" 38e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)#include "core/rendering/SubtreeLayoutScope.h" 3953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/rendering/style/RenderStyle.h" 4053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/rendering/style/StyleInheritedData.h" 411e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)#include "platform/geometry/FloatQuad.h" 421e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)#include "platform/geometry/LayoutRect.h" 431e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)#include "platform/transforms/TransformationMatrix.h" 445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)namespace WebCore { 465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class AffineTransform; 485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class AnimationController; 495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class Cursor; 505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class Document; 515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class HitTestLocation; 525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class HitTestResult; 535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class InlineBox; 545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class InlineFlowBox; 555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class Path; 565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class Position; 57926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)class PseudoStyleRequest; 585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class RenderBoxModelObject; 595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class RenderInline; 605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class RenderBlock; 615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class RenderFlowThread; 625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class RenderGeometryMap; 635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class RenderLayer; 645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class RenderLayerModelObject; 655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class RenderNamedFlowThread; 6693ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles)class RenderSVGResourceContainer; 675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class RenderTable; 688abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)class RenderTheme; 698abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)class RenderView; 70a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles)class ResourceLoadPriorityOptimizer; 715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class TransformState; 725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)struct PaintInfo; 745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)enum CursorDirective { 765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) SetCursorBasedOnStyle, 775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) SetCursor, 785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) DoNotSetCursor 795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}; 805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)enum HitTestFilter { 825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) HitTestAll, 835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) HitTestSelf, 845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) HitTestDescendants 855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}; 865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)enum HitTestAction { 885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) HitTestBlockBackground, 895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) HitTestChildBlockBackground, 905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) HitTestChildBlockBackgrounds, 915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) HitTestFloat, 925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) HitTestForeground 935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}; 945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// Sides used when drawing borders and outlines. The values should run clockwise from top. 965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)enum BoxSide { 975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) BSTop, 985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) BSRight, 995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) BSBottom, 1005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) BSLeft 1015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}; 1025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)enum MarkingBehavior { 1045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) MarkOnlyThis, 1055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) MarkContainingBlockChain, 1065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}; 1075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)enum MapCoordinatesMode { 1095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) IsFixed = 1 << 0, 1105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) UseTransforms = 1 << 1, 1117757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch ApplyContainerFlip = 1 << 2, 1127757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch TraverseDocumentBoundaries = 1 << 3, 1135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}; 1145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)typedef unsigned MapCoordinatesFlags; 1155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)const int caretWidth = 1; 1175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)struct AnnotatedRegionValue { 1195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool operator==(const AnnotatedRegionValue& o) const 1205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 1215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return draggable == o.draggable && bounds == o.bounds; 1225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) LayoutRect bounds; 1255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool draggable; 1265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}; 1275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1287757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdochtypedef WTF::HashMap<const RenderLayer*, Vector<LayoutRect> > LayerHitTestRects; 1295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#ifndef NDEBUG 1315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)const int showTreeCharacterOffset = 39; 1325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#endif 1335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// Base class for all rendering tree objects. 1353c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdochclass RenderObject : public ImageResourceClient { 1365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) friend class RenderBlock; 137a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) friend class RenderBlockFlow; 13806f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles) friend class RenderLayer; // For setParent. 139f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) friend class RenderLayerReflectionInfo; // For setParent 14006f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles) friend class RenderLayerScrollableArea; // For setParent. 1415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) friend class RenderObjectChildList; 1425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)public: 1435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Anonymous objects should pass the document as their node, and they will then automatically be 1445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // marked as anonymous in the constructor. 145926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) explicit RenderObject(Node*); 1465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual ~RenderObject(); 1475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual const char* renderName() const = 0; 1495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 15053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) String debugName() const; 15153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) 1525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) RenderObject* parent() const { return m_parent; } 1535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool isDescendantOf(const RenderObject*) const; 1545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) RenderObject* previousSibling() const { return m_previous; } 1565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) RenderObject* nextSibling() const { return m_next; } 1575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // FIXME: These should be renamed slowFirstChild, slowLastChild, etc. 1595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // to discourage their use. The virtualChildren() call inside these 1605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // can be slow for hot code paths. 1615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Currently, some subclasses like RenderBlock, override these NON-virtual 1625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // functions to make these fast when we already have a more specific pointer type. 1635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) RenderObject* firstChild() const 1645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 1655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (const RenderObjectChildList* children = virtualChildren()) 1665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return children->firstChild(); 1675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return 0; 1685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) RenderObject* lastChild() const 1705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 1715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (const RenderObjectChildList* children = virtualChildren()) 1725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return children->lastChild(); 1735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return 0; 1745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual RenderObjectChildList* virtualChildren() { return 0; } 1775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual const RenderObjectChildList* virtualChildren() const { return 0; } 1785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) RenderObject* nextInPreOrder() const; 1805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) RenderObject* nextInPreOrder(const RenderObject* stayWithin) const; 1815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) RenderObject* nextInPreOrderAfterChildren() const; 1825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) RenderObject* nextInPreOrderAfterChildren(const RenderObject* stayWithin) const; 1835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) RenderObject* previousInPreOrder() const; 1845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) RenderObject* previousInPreOrder(const RenderObject* stayWithin) const; 1855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) RenderObject* childAt(unsigned) const; 1865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) RenderObject* lastLeafChild() const; 1885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // The following six functions are used when the render tree hierarchy changes to make sure layers get 1905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // properly added and removed. Since containership can be implemented by any subclass, and since a hierarchy 1915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // can contain a mixture of boxes and other object types, these functions need to be in the base class. 1925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) RenderLayer* enclosingLayer() const; 1935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void addLayers(RenderLayer* parentLayer); 1945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void removeLayers(RenderLayer* parentLayer); 1955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void moveLayers(RenderLayer* oldParent, RenderLayer* newParent); 1965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) RenderLayer* findNextLayer(RenderLayer* parentLayer, RenderObject* startPoint, bool checkParent = true); 1975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Scrolling is a RenderBox concept, however some code just cares about recursively scrolling our enclosing ScrollableArea(s). 1995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool scrollRectToVisible(const LayoutRect&, const ScrollAlignment& alignX = ScrollAlignment::alignCenterIfNeeded, const ScrollAlignment& alignY = ScrollAlignment::alignCenterIfNeeded); 2005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Convenience function for getting to the nearest enclosing box of a RenderObject. 2025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) RenderBox* enclosingBox() const; 2035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) RenderBoxModelObject* enclosingBoxModelObject() const; 2045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2051e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) RenderBox* enclosingScrollableBox() const; 2061e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) 207926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) // Function to return our enclosing flow thread if we are contained inside one. This 208926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) // function follows the containing block chain. 209926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) RenderFlowThread* flowThreadContainingBlock() const 210926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 211926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (flowThreadState() == NotInsideFlowThread) 212926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return 0; 213926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return locateFlowThreadContainingBlock(); 214926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } 2155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 216926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) RenderNamedFlowThread* renderNamedFlowThreadWrapper() const; 2175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual bool isEmpty() const { return firstChild() == 0; } 2195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#ifndef NDEBUG 2215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void setHasAXObject(bool flag) { m_hasAXObject = flag; } 2225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool hasAXObject() const { return m_hasAXObject; } 2235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Helper class forbidding calls to setNeedsLayout() during its lifetime. 2255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) class SetLayoutNeededForbiddenScope { 2265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) public: 2278abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) explicit SetLayoutNeededForbiddenScope(RenderObject*); 2285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ~SetLayoutNeededForbiddenScope(); 2295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) private: 2305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) RenderObject* m_renderObject; 2315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool m_preexistingForbidden; 2325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }; 2339bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) 2349bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) void assertRendererLaidOut() const 2359bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) { 2369bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) if (needsLayout()) 2379bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) showRenderTreeForThis(); 2389bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) ASSERT_WITH_SECURITY_IMPLICATION(!needsLayout()); 2399bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) } 2409bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) 2419bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) void assertSubtreeIsLaidOut() const 2429bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) { 2439bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) for (const RenderObject* renderer = this; renderer; renderer = renderer->nextInPreOrder()) 2449bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) renderer->assertRendererLaidOut(); 2459bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) } 24606f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles) 2475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#endif 2485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Obtains the nearest enclosing block (including this block) that contributes a first-line style to our inline 2505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // children. 2515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual RenderBlock* firstLineBlock() const; 2525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Called when an object that was floating or positioned becomes a normal flow object 2545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // again. We have to make sure the render tree updates as needed to accommodate the new 2555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // normal flow object. 2565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void handleDynamicFloatPositionChange(); 2577757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch 2585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // RenderObject tree manipulation 2595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ////////////////////////////////////////// 2605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual bool canHaveChildren() const { return virtualChildren(); } 2615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual bool canHaveGeneratedChildren() const; 2625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual bool isChildAllowed(RenderObject*, RenderStyle*) const { return true; } 2635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual void addChild(RenderObject* newChild, RenderObject* beforeChild = 0); 2645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual void addChildIgnoringContinuation(RenderObject* newChild, RenderObject* beforeChild = 0) { return addChild(newChild, beforeChild); } 2655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual void removeChild(RenderObject*); 2665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual bool createsAnonymousWrapper() const { return false; } 2675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ////////////////////////////////////////// 2685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)protected: 2705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ////////////////////////////////////////// 2715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Helper functions. Dangerous to use! 2725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void setPreviousSibling(RenderObject* previous) { m_previous = previous; } 2735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void setNextSibling(RenderObject* next) { m_next = next; } 2745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void setParent(RenderObject* parent) 2755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 2765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) m_parent = parent; 2777757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch 278926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) // Only update if our flow thread state is different from our new parent and if we're not a RenderFlowThread. 279926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) // A RenderFlowThread is always considered to be inside itself, so it never has to change its state 280926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) // in response to parent changes. 281926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) FlowThreadState newState = parent ? parent->flowThreadState() : NotInsideFlowThread; 282926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (newState != flowThreadState() && !isRenderFlowThread()) 283926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) setFlowThreadStateIncludingDescendants(newState); 2845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 285926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 2865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ////////////////////////////////////////// 2875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)private: 288926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)#ifndef NDEBUG 289926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) bool isSetNeedsLayoutForbidden() const { return m_setNeedsLayoutForbidden; } 290926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) void setNeedsLayoutIsForbidden(bool flag) { m_setNeedsLayoutForbidden = flag; } 291926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)#endif 292926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 2935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void addAbsoluteRectForLayer(LayoutRect& result); 2945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void setLayerNeedsFullRepaint(); 2955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void setLayerNeedsFullRepaintForPositionedMovementLayout(); 29653e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) bool requiresAnonymousTableWrappers(const RenderObject*) const; 2975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)public: 2995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#ifndef NDEBUG 3005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void showTreeForThis() const; 3015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void showRenderTreeForThis() const; 3025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void showLineTreeForThis() const; 3035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void showRenderObject() const; 3055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // We don't make printedCharacters an optional parameter so that 3065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // showRenderObject can be called from gdb easily. 3075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void showRenderObject(int printedCharacters) const; 3085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void showRenderTreeAndMark(const RenderObject* markedObject1 = 0, const char* markedLabel1 = 0, const RenderObject* markedObject2 = 0, const char* markedLabel2 = 0, int depth = 0) const; 3095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#endif 3105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 311926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) static RenderObject* createObject(Element*, RenderStyle*); 3125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 313f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) // RenderObjects are allocated out of the rendering partition. 314f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) void* operator new(size_t); 315f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) void operator delete(void*); 3165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)public: 318926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) bool isPseudoElement() const { return node() && node()->isPseudoElement(); } 319926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 3205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual bool isBR() const { return false; } 3215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual bool isBoxModelObject() const { return false; } 3225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual bool isCounter() const { return false; } 3235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual bool isQuote() const { return false; } 3245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual bool isDetailsMarker() const { return false; } 3265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual bool isEmbeddedObject() const { return false; } 3275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual bool isFieldset() const { return false; } 3285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual bool isFileUploadControl() const { return false; } 3295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual bool isFrame() const { return false; } 3305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual bool isFrameSet() const { return false; } 3315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual bool isImage() const { return false; } 3325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual bool isInlineBlockOrInlineTable() const { return false; } 3335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual bool isLayerModelObject() const { return false; } 3345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual bool isListBox() const { return false; } 3355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual bool isListItem() const { return false; } 3365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual bool isListMarker() const { return false; } 337521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles) virtual bool isMarquee() const { return false; } 3385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual bool isMedia() const { return false; } 3395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual bool isMenuList() const { return false; } 3405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual bool isMeter() const { return false; } 3415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual bool isProgress() const { return false; } 3425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual bool isRenderBlock() const { return false; } 3438abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) virtual bool isRenderBlockFlow() const { return false; } 344591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch virtual bool isRenderSVGBlock() const { return false; }; 3455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual bool isRenderButton() const { return false; } 3465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual bool isRenderIFrame() const { return false; } 3475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual bool isRenderImage() const { return false; } 3485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual bool isRenderInline() const { return false; } 3495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual bool isRenderPart() const { return false; } 3505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual bool isRenderRegion() const { return false; } 35151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) virtual bool isRenderNamedFlowFragment() const { return false; } 3525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual bool isRenderView() const { return false; } 3535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual bool isReplica() const { return false; } 3545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual bool isRuby() const { return false; } 3565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual bool isRubyBase() const { return false; } 3575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual bool isRubyRun() const { return false; } 3585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual bool isRubyText() const { return false; } 3595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual bool isSlider() const { return false; } 3615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual bool isSliderThumb() const { return false; } 3625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual bool isTable() const { return false; } 3635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual bool isTableCell() const { return false; } 3645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual bool isRenderTableCol() const { return false; } 3655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual bool isTableCaption() const { return false; } 3665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual bool isTableRow() const { return false; } 3675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual bool isTableSection() const { return false; } 3685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual bool isTextControl() const { return false; } 3695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual bool isTextArea() const { return false; } 3705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual bool isTextField() const { return false; } 3715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual bool isVideo() const { return false; } 3725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual bool isWidget() const { return false; } 3735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual bool isCanvas() const { return false; } 3745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual bool isRenderFullScreen() const { return false; } 3755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual bool isRenderFullScreenPlaceholder() const { return false; } 3765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 377926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) virtual bool isRenderGrid() const { return false; } 378926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 3795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual bool isRenderFlowThread() const { return false; } 3805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual bool isRenderNamedFlowThread() const { return false; } 381926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) bool isInFlowRenderFlowThread() const { return isRenderFlowThread() && !isOutOfFlowPositioned(); } 382926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) bool isOutOfFlowRenderFlowThread() const { return isRenderFlowThread() && isOutOfFlowPositioned(); } 38351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) bool isRenderNamedFlowFragmentContainer() const; 384926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 3855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual bool isRenderMultiColumnBlock() const { return false; } 3865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual bool isRenderMultiColumnSet() const { return false; } 3875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual bool isRenderScrollbarPart() const { return false; } 3895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 390f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) bool isRoot() const { return document().documentElement() == m_node; } 3915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool isBody() const; 3925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool isHR() const; 3935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool isLegend() const; 3945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool isTablePart() const { return isTableCell() || isRenderTableCol() || isTableCaption() || isTableRow() || isTableSection(); } 3965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) inline bool isBeforeContent() const; 3985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) inline bool isAfterContent() const; 3995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) inline bool isBeforeOrAfterContent() const; 4005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) static inline bool isAfterContent(const RenderObject* obj) { return obj && obj->isAfterContent(); } 4015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool hasCounterNodeMap() const { return m_bitfields.hasCounterNodeMap(); } 4035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void setHasCounterNodeMap(bool hasCounterNodeMap) { m_bitfields.setHasCounterNodeMap(hasCounterNodeMap); } 4045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool everHadLayout() const { return m_bitfields.everHadLayout(); } 4055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool childrenInline() const { return m_bitfields.childrenInline(); } 4075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void setChildrenInline(bool b) { m_bitfields.setChildrenInline(b); } 4085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool hasColumns() const { return m_bitfields.hasColumns(); } 4095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void setHasColumns(bool b = true) { m_bitfields.setHasColumns(b); } 4105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 41151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) bool ancestorLineBoxDirty() const { return m_bitfields.ancestorLineBoxDirty(); } 41251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) void setAncestorLineBoxDirty(bool value = true) 4135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 41451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) m_bitfields.setAncestorLineBoxDirty(value); 41551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) if (value) 4163c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch setNeedsLayout(); 4175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 4185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 419926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) enum FlowThreadState { 420926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) NotInsideFlowThread = 0, 421926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) InsideOutOfFlowThread = 1, 422926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) InsideInFlowThread = 2, 423926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }; 424926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 425926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) void setFlowThreadStateIncludingDescendants(FlowThreadState); 426926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 427926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) FlowThreadState flowThreadState() const { return m_bitfields.flowThreadState(); } 428926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) void setFlowThreadState(FlowThreadState state) { m_bitfields.setFlowThreadState(state); } 4295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // FIXME: Until all SVG renders can be subclasses of RenderSVGModelObject we have 4315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // to add SVG renderer methods to RenderObject with an ASSERT_NOT_REACHED() default implementation. 4325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual bool isSVGRoot() const { return false; } 4335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual bool isSVGContainer() const { return false; } 4345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual bool isSVGTransformableContainer() const { return false; } 4355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual bool isSVGViewportContainer() const { return false; } 4365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual bool isSVGGradientStop() const { return false; } 4375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual bool isSVGHiddenContainer() const { return false; } 4385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual bool isSVGPath() const { return false; } 4395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual bool isSVGShape() const { return false; } 4405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual bool isSVGText() const { return false; } 4415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual bool isSVGTextPath() const { return false; } 4425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual bool isSVGInline() const { return false; } 4435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual bool isSVGInlineText() const { return false; } 4445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual bool isSVGImage() const { return false; } 4455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual bool isSVGForeignObject() const { return false; } 4465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual bool isSVGResourceContainer() const { return false; } 4475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual bool isSVGResourceFilter() const { return false; } 4485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual bool isSVGResourceFilterPrimitive() const { return false; } 4495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // FIXME: Those belong into a SVG specific base-class for all renderers (see above) 4515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Unfortunately we don't have such a class yet, because it's not possible for all renderers 4525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // to inherit from RenderSVGObject -> RenderObject (some need RenderBlock inheritance for instance) 4535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual void setNeedsTransformUpdate() { } 4545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual void setNeedsBoundariesUpdate(); 455926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) virtual bool needsBoundariesUpdate() { return false; } 4565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Per SVG 1.1 objectBoundingBox ignores clipping, masking, filter effects, opacity and stroke-width. 4585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // This is used for all computation of objectBoundingBox relative units and by SVGLocatable::getBBox(). 4595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // NOTE: Markers are not specifically ignored here by SVG 1.1 spec, but we ignore them 4605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // since stroke-width is ignored (and marker size can depend on stroke-width). 4615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // objectBoundingBox is returned local coordinates. 4625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // The name objectBoundingBox is taken from the SVG 1.1 spec. 4635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual FloatRect objectBoundingBox() const; 4645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual FloatRect strokeBoundingBox() const; 4655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Returns the smallest rectangle enclosing all of the painted content 4675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // respecting clipping, masking, filters, opacity, stroke-width and markers 4685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual FloatRect repaintRectInLocalCoordinates() const; 4695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // This only returns the transform="" value from the element 4715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // most callsites want localToParentTransform() instead. 4725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual AffineTransform localTransform() const; 4735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Returns the full transform mapping from local coordinates to local coords for the parent SVG renderer 4755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // This includes any viewport transforms and x/y offsets as well as the transform="" value off the element. 4765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual const AffineTransform& localToParentTransform() const; 4775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // SVG uses FloatPoint precise hit testing, and passes the point in parent 4795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // coordinates instead of in repaint container coordinates. Eventually the 4805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // rest of the rendering tree will move to a similar model. 4815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual bool nodeAtFloatPoint(const HitTestRequest&, HitTestResult&, const FloatPoint& pointInParent, HitTestAction); 4825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 48383750176c3ee2cea66c8a9751271026a5901be3aBen Murdoch virtual bool canHaveWhitespaceChildren() const 48483750176c3ee2cea66c8a9751271026a5901be3aBen Murdoch { 48583750176c3ee2cea66c8a9751271026a5901be3aBen Murdoch if (isTable() || isTableRow() || isTableSection() || isRenderTableCol() || isFrameSet() || isFlexibleBox() || isRenderGrid()) 48683750176c3ee2cea66c8a9751271026a5901be3aBen Murdoch return false; 48783750176c3ee2cea66c8a9751271026a5901be3aBen Murdoch return true; 48883750176c3ee2cea66c8a9751271026a5901be3aBen Murdoch } 48983750176c3ee2cea66c8a9751271026a5901be3aBen Murdoch 4905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool isAnonymous() const { return m_bitfields.isAnonymous(); } 4915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool isAnonymousBlock() const 4925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 4935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // This function is kept in sync with anonymous block creation conditions in 4945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // RenderBlock::createAnonymousBlock(). This includes creating an anonymous 4955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // RenderBlock having a BLOCK or BOX display. Other classes such as RenderTextFragment 4967757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch // are not RenderBlocks and will return false. See https://bugs.webkit.org/show_bug.cgi?id=56709. 49753e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) return isAnonymous() && (style()->display() == BLOCK || style()->display() == BOX) && style()->styleType() == NOPSEUDO && isRenderBlock() && !isListMarker() && !isRenderFlowThread() 4985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) && !isRenderFullScreen() 49953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) && !isRenderFullScreenPlaceholder(); 5005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 5015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool isAnonymousColumnsBlock() const { return style()->specifiesColumns() && isAnonymousBlock(); } 5025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool isAnonymousColumnSpanBlock() const { return style()->columnSpan() && isAnonymousBlock(); } 5035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool isElementContinuation() const { return node() && node()->renderer() != this; } 5045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool isInlineElementContinuation() const { return isElementContinuation() && isInline(); } 5055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual RenderBoxModelObject* virtualContinuation() const { return 0; } 5065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool isFloating() const { return m_bitfields.floating(); } 5085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 509926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) bool isOutOfFlowPositioned() const { return m_bitfields.isOutOfFlowPositioned(); } // absolute or fixed positioning 510926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) bool isInFlowPositioned() const { return m_bitfields.isRelPositioned() || m_bitfields.isStickyPositioned(); } // relative or sticky positioning 511926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) bool isRelPositioned() const { return m_bitfields.isRelPositioned(); } // relative positioning 512926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) bool isStickyPositioned() const { return m_bitfields.isStickyPositioned(); } 513926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) bool isPositioned() const { return m_bitfields.isPositioned(); } 5145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool isText() const { return m_bitfields.isText(); } 5165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool isBox() const { return m_bitfields.isBox(); } 5175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool isInline() const { return m_bitfields.isInline(); } // inline object 5185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool isDragging() const { return m_bitfields.isDragging(); } 5195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool isReplaced() const { return m_bitfields.isReplaced(); } // a "replaced" element (see CSS) 5205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool isHorizontalWritingMode() const { return m_bitfields.horizontalWritingMode(); } 5215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool hasLayer() const { return m_bitfields.hasLayer(); } 523926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 524926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) enum BoxDecorationState { 525926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) NoBoxDecorations, 526926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) HasBoxDecorationsAndBackgroundObscurationStatusInvalid, 527926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) HasBoxDecorationsAndBackgroundIsKnownToBeObscured, 528926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) HasBoxDecorationsAndBackgroundMayBeVisible, 529926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }; 530926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) bool hasBoxDecorations() const { return m_bitfields.boxDecorationState() != NoBoxDecorations; } 531926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) bool backgroundIsKnownToBeObscured(); 5325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool borderImageIsLoadedAndCanBeRendered() const; 5335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool mustRepaintBackgroundOrBorder() const; 5348abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) bool hasBackground() const { return style()->hasBackground(); } 535926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) bool hasEntirelyFixedBackground() const; 536926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 5375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool needsLayout() const 5385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 539e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) return m_bitfields.selfNeedsLayout() || m_bitfields.normalChildNeedsLayout() || m_bitfields.posChildNeedsLayout() 5405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) || m_bitfields.needsSimplifiedNormalFlowLayout() || m_bitfields.needsPositionedMovementLayout(); 5415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 5425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 543e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) bool selfNeedsLayout() const { return m_bitfields.selfNeedsLayout(); } 5445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool needsPositionedMovementLayout() const { return m_bitfields.needsPositionedMovementLayout(); } 5455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool needsPositionedMovementLayoutOnly() const 5465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 547e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) return m_bitfields.needsPositionedMovementLayout() && !m_bitfields.selfNeedsLayout() && !m_bitfields.normalChildNeedsLayout() 5485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) && !m_bitfields.posChildNeedsLayout() && !m_bitfields.needsSimplifiedNormalFlowLayout(); 5495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 5505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool posChildNeedsLayout() const { return m_bitfields.posChildNeedsLayout(); } 5525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool needsSimplifiedNormalFlowLayout() const { return m_bitfields.needsSimplifiedNormalFlowLayout(); } 5535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool normalChildNeedsLayout() const { return m_bitfields.normalChildNeedsLayout(); } 5547757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch 5555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool preferredLogicalWidthsDirty() const { return m_bitfields.preferredLogicalWidthsDirty(); } 5565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool isSelectionBorder() const; 5585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool hasClip() const { return isOutOfFlowPositioned() && style()->hasClip(); } 5605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool hasOverflowClip() const { return m_bitfields.hasOverflowClip(); } 5615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool hasClipOrOverflowClip() const { return hasClip() || hasOverflowClip(); } 5625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool hasTransform() const { return m_bitfields.hasTransform(); } 5645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool hasMask() const { return style() && style()->hasMask(); } 5655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool hasClipPath() const { return style() && style()->clipPath(); } 5665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool hasHiddenBackface() const { return style() && style()->backfaceVisibility() == BackfaceVisibilityHidden; } 5675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool hasFilter() const { return style() && style()->hasFilter(); } 5695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 57081a5157921f1d2a7ff6aae115bfe3c139b38a5c8Torne (Richard Coles) bool hasBlendMode() const; 5715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) inline bool preservesNewline() const; 5735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // The pseudo element style can be cached or uncached. Use the cached method if the pseudo element doesn't respect 5755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // any pseudo classes (and therefore has no concept of changing state). 5765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) RenderStyle* getCachedPseudoStyle(PseudoId, RenderStyle* parentStyle = 0) const; 577926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) PassRefPtr<RenderStyle> getUncachedPseudoStyle(const PseudoStyleRequest&, RenderStyle* parentStyle = 0, RenderStyle* ownStyle = 0) const; 5787757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch 5795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual void updateDragState(bool dragOn); 5805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5818abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) RenderView* view() const { return document().renderView(); }; 5828abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) FrameView* frameView() const { return document().view(); }; 5835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Returns true if this renderer is rooted, and optionally returns the hosting view (the root of the hierarchy). 5855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool isRooted(RenderView** = 0) const; 5865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 58751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) Node* node() const 58851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) { 58951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) return isAnonymous() ? 0 : m_node; 59051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) } 59151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 5928abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) Node* nonPseudoNode() const 5938abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) { 5948abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) ASSERT(!LayoutIndicator::inLayout()); 5958abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) return isPseudoElement() ? 0 : node(); 5968abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) } 597926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 598926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) // FIXME: Why does RenderWidget need this? 599f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) void clearNode() { m_node = 0; } 6005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Returns the styled node that caused the generation of this renderer. 6025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // This is the same as node() except for renderers of :before and :after 6035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // pseudo elements for which their parent node is returned. 604926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) Node* generatingNode() const { return isPseudoElement() ? node()->parentOrShadowHostNode() : node(); } 6055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 606f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) Document& document() const { return m_node->document(); } 6078abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) Frame* frame() const { return document().frame(); } 6085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool hasOutlineAnnotation() const; 6105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool hasOutline() const { return style()->hasOutline() || hasOutlineAnnotation(); } 6115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Returns the object containing this one. Can be different from parent for positioned elements. 6135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // If repaintContainer and repaintContainerSkipped are not null, on return *repaintContainerSkipped 6145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // is true if the renderer returned is an ancestor of repaintContainer. 6155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) RenderObject* container(const RenderLayerModelObject* repaintContainer = 0, bool* repaintContainerSkipped = 0) const; 6165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6175267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) virtual RenderObject* hoverAncestor() const; 6185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 61953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) Element* offsetParent() const; 6205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 621e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) void markContainingBlocksForLayout(bool scheduleRelayout = true, RenderObject* newRoot = 0, SubtreeLayoutScope* = 0); 622e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) void setNeedsLayout(MarkingBehavior = MarkContainingBlockChain, SubtreeLayoutScope* = 0); 6233c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch void clearNeedsLayout(); 624e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) void setChildNeedsLayout(MarkingBehavior = MarkContainingBlockChain, SubtreeLayoutScope* = 0); 6255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void setNeedsPositionedMovementLayout(); 6265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void setNeedsSimplifiedNormalFlowLayout(); 627c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) void setPreferredLogicalWidthsDirty(MarkingBehavior = MarkContainingBlockChain); 628c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) void clearPreferredLogicalWidthsDirty(); 6295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void invalidateContainerPreferredLogicalWidths(); 6307757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch 6315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void setNeedsLayoutAndPrefWidthsRecalc() 6325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 6333c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch setNeedsLayout(); 634c0e19a689c8ac22cdc96b291a8d33a5d3b0b34a4Torne (Richard Coles) setPreferredLogicalWidthsDirty(); 6355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 6365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 637926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) void setPositionState(EPosition position) 638926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 639926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) ASSERT((position != AbsolutePosition && position != FixedPosition) || isBox()); 640926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) m_bitfields.setPositionedState(position); 641926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } 642926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) void clearPositionedState() { m_bitfields.clearPositionedState(); } 643926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 64451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) void setFloating(bool isFloating) { m_bitfields.setFloating(isFloating); } 64551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) void setInline(bool isInline) { m_bitfields.setIsInline(isInline); } 646926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 64751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) void setHasBoxDecorations(bool); 648926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) void invalidateBackgroundObscurationStatus(); 649926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) virtual bool computeBackgroundIsKnownToBeObscured() { return false; } 650926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 6515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void setIsText() { m_bitfields.setIsText(true); } 6525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void setIsBox() { m_bitfields.setIsBox(true); } 65351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) void setReplaced(bool isReplaced) { m_bitfields.setIsReplaced(isReplaced); } 65451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) void setHorizontalWritingMode(bool hasHorizontalWritingMode) { m_bitfields.setHorizontalWritingMode(hasHorizontalWritingMode); } 65551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) void setHasOverflowClip(bool hasOverflowClip) { m_bitfields.setHasOverflowClip(hasOverflowClip); } 65651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) void setHasLayer(bool hasLayer) { m_bitfields.setHasLayer(hasLayer); } 65751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) void setHasTransform(bool hasTransform) { m_bitfields.setHasTransform(hasTransform); } 65851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) void setHasReflection(bool hasReflection) { m_bitfields.setHasReflection(hasReflection); } 6595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void scheduleRelayout(); 6615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void updateFillImages(const FillLayer*, const FillLayer*); 6635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void updateImage(StyleImage*, StyleImage*); 664e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) void updateShapeImage(const ShapeValue*, const ShapeValue*); 6655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual void paint(PaintInfo&, const LayoutPoint&); 6675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Recursive function that computes the size and position of this object and all its descendants. 6695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual void layout(); 670a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) virtual void didLayout(ResourceLoadPriorityOptimizer&); 671a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) virtual void didScroll(ResourceLoadPriorityOptimizer&); 6725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /* This function performs a layout only if one is needed. */ 6745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void layoutIfNeeded() { if (needsLayout()) layout(); } 6757757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch 676f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) void forceLayout(); 677f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) void forceChildLayout(); 678f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) 6798abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) // True if we can abort layout, leaving a partially laid out tree. 6808abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) virtual bool supportsPartialLayout() const { return false; } 6818abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) 6825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // used for element state updates that cannot be fixed with a 6835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // repaint and do not need a relayout 6845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual void updateFromElement() { } 6855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual void addAnnotatedRegions(Vector<AnnotatedRegionValue>&); 6875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void collectAnnotatedRegions(Vector<AnnotatedRegionValue>&); 6885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 689bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) CompositingState compositingState() const; 6905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool hitTest(const HitTestRequest&, HitTestResult&, const HitTestLocation& locationInContainer, const LayoutPoint& accumulatedOffset, HitTestFilter = HitTestAll); 6925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual void updateHitTestResult(HitTestResult&, const LayoutPoint&); 6935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual bool nodeAtPoint(const HitTestRequest&, HitTestResult&, const HitTestLocation& locationInContainer, const LayoutPoint& accumulatedOffset, HitTestAction); 6945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 695f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) virtual PositionWithAffinity positionForPoint(const LayoutPoint&); 696f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) PositionWithAffinity createPositionWithAffinity(int offset, EAffinity); 697f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) PositionWithAffinity createPositionWithAffinity(const Position&); 6985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 6995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual void dirtyLinesFromChangedChild(RenderObject*); 7005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Called to update a style that is allowed to trigger animations. 7025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // FIXME: Right now this will typically be called only when updating happens from the DOM on explicit elements. 7035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // We don't yet handle generated content animation such as first-letter or before/after (we'll worry about this later). 7045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void setAnimatableStyle(PassRefPtr<RenderStyle>); 7055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Set the style of the object and update the state of the object accordingly. 70751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) void setStyle(PassRefPtr<RenderStyle>); 7085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 709926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) // Set the style of the object if it's generated content. 710926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) void setPseudoStyle(PassRefPtr<RenderStyle>); 711926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 7125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Updates only the local style ptr of the object. Does not update the state of the object, 7135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // and so only should be called when the style is known not to have changed (or from setStyle). 7145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void setStyleInternal(PassRefPtr<RenderStyle> style) { m_style = style; } 7155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // returns the containing block level element for this element. 7175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) RenderBlock* containingBlock() const; 7185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 719926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) bool canContainFixedPositionObjects() const 720926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 72193ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) return isRenderView() || (hasTransform() && isRenderBlock()) || isSVGForeignObject() || isOutOfFlowRenderFlowThread(); 722926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } 72351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) bool canContainAbsolutePositionObjects() const 72451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) { 72551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) return isRenderView() || (hasTransform() && isRenderBlock()) || isSVGForeignObject(); 72651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) } 727926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 7285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Convert the given local point to absolute coordinates 7295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // FIXME: Temporary. If UseTransforms is true, take transforms into account. Eventually localToAbsolute() will always be transform-aware. 7305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) FloatPoint localToAbsolute(const FloatPoint& localPoint = FloatPoint(), MapCoordinatesFlags = 0) const; 7315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) FloatPoint absoluteToLocal(const FloatPoint&, MapCoordinatesFlags = 0) const; 7325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Convert a local quad to absolute coordinates, taking transforms into account. 7345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) FloatQuad localToAbsoluteQuad(const FloatQuad& quad, MapCoordinatesFlags mode = 0, bool* wasFixed = 0) const 7355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 7365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return localToContainerQuad(quad, 0, mode, wasFixed); 7375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 738926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) // Convert an absolute quad to local coordinates. 739926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) FloatQuad absoluteToLocalQuad(const FloatQuad&, MapCoordinatesFlags mode = 0) const; 7405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Convert a local quad into the coordinate system of container, taking transforms into account. 7425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) FloatQuad localToContainerQuad(const FloatQuad&, const RenderLayerModelObject* repaintContainer, MapCoordinatesFlags = 0, bool* wasFixed = 0) const; 7435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) FloatPoint localToContainerPoint(const FloatPoint&, const RenderLayerModelObject* repaintContainer, MapCoordinatesFlags = 0, bool* wasFixed = 0) const; 7445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Return the offset from the container() renderer (excluding transforms). In multi-column layout, 7465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // different offsets apply at different points, so return the offset that applies to the given point. 7475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual LayoutSize offsetFromContainer(RenderObject*, const LayoutPoint&, bool* offsetDependsOnPoint = 0) const; 7485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Return the offset from an object up the container() chain. Asserts that none of the intermediate objects have transforms. 7495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) LayoutSize offsetFromAncestorContainer(RenderObject*) const; 7507757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch 7515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual void absoluteRects(Vector<IntRect>&, const LayoutPoint&) const { } 7525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // FIXME: useTransforms should go away eventually 7545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) IntRect absoluteBoundingBoxRect(bool useTransform = true) const; 7555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) IntRect absoluteBoundingBoxRectIgnoringTransforms() const { return absoluteBoundingBoxRect(false); } 7565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7579bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) bool isContainedInParentBoundingBox() const; 7589bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) 7595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Build an array of quads in absolute coords for line boxes 7605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual void absoluteQuads(Vector<FloatQuad>&, bool* /*wasFixed*/ = 0) const { } 7615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual void absoluteFocusRingQuads(Vector<FloatQuad>&); 7635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) static FloatRect absoluteBoundingBoxRectForRange(const Range*); 7655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // the rect that will be painted if this object is passed as the paintingRoot 7675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) LayoutRect paintingRootRect(LayoutRect& topLevelRect); 7685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual LayoutUnit minPreferredLogicalWidth() const { return 0; } 7705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual LayoutUnit maxPreferredLogicalWidth() const { return 0; } 7715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) RenderStyle* style() const { return m_style.get(); } 7739bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) RenderStyle* firstLineStyle() const { return document().styleEngine()->usesFirstLineRules() ? cachedFirstLineStyle() : style(); } 7745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) RenderStyle* style(bool firstLine) const { return firstLine ? firstLineStyle() : style(); } 7755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 7767757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch inline Color resolveColor(const RenderStyle* styleToUse, int colorProperty) const 7777757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch { 7788abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) return styleToUse->visitedDependentColor(colorProperty); 7797757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch } 7807757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch 7817757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch inline Color resolveColor(int colorProperty) const 7827757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch { 7838abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) return style()->visitedDependentColor(colorProperty); 7847757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch } 7857757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch 7868abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) inline Color resolveColor(int colorProperty, Color fallback) const 7877757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch { 7888abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) Color color = resolveColor(colorProperty); 7898abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) return color.isValid() ? color : fallback; 79083750176c3ee2cea66c8a9751271026a5901be3aBen Murdoch } 79183750176c3ee2cea66c8a9751271026a5901be3aBen Murdoch 7928abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) inline Color resolveColor(Color color) const 79383750176c3ee2cea66c8a9751271026a5901be3aBen Murdoch { 7948abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) return color; 7957757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch } 7967757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch 7975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Used only by Element::pseudoStyleCacheIsInvalid to get a first line style based off of a 7985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // given new style, without accessing the cache. 7995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) PassRefPtr<RenderStyle> uncachedFirstLineStyle(RenderStyle*) const; 8005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Anonymous blocks that are part of of a continuation chain will return their inline continuation's outline style instead. 8025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // This is typically only relevant when repainting. 8035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual RenderStyle* outlineStyleForRepaint() const { return style(); } 8047757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch 8055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual CursorDirective getCursor(const LayoutPoint&, Cursor&) const; 8065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 80751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) void getTextDecorationColors(unsigned decorations, Color& underline, Color& overline, Color& linethrough, bool quirksMode = false, bool firstlineStyle = false); 8085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Return the RenderLayerModelObject in the container chain which is responsible for painting this object, or 0 8105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // if painting is root-relative. This is the container that should be passed to the 'forRepaint' 8115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // methods. 8125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) RenderLayerModelObject* containerForRepaint() const; 8135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Actually do the repaint of rect r for this object which has been computed in the coordinate space 8145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // of repaintContainer. If repaintContainer is 0, repaint via the view. 81553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) void repaintUsingContainer(const RenderLayerModelObject* repaintContainer, const IntRect&) const; 8167757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch 8175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Repaint the entire object. Called when, e.g., the color of a border changes, or when a border 8185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // style changes. 81953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) void repaint() const; 8205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Repaint a specific subrectangle within a given object. The rect |r| is in the object's coordinate space. 82253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) void repaintRectangle(const LayoutRect&) const; 8235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Repaint only if our old bounds and new bounds are different. The caller may pass in newBounds and newOutlineBox if they are known. 825a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) bool repaintAfterLayoutIfNeeded(const RenderLayerModelObject* repaintContainer, bool wasSelfLayout, 826a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) const LayoutRect& oldBounds, const LayoutRect& oldOutlineBox, const LayoutRect* newBoundsPtr = 0, const LayoutRect* newOutlineBoxPtr = 0); 827a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) 828a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) virtual void repaintOverflow(); 8295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool checkForRepaintDuringLayout() const; 8315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Returns the rect that should be repainted whenever this object changes. The rect is in the view's 8335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // coordinate space. This method deals with outlines and overflow. 8345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) LayoutRect absoluteClippedOverflowRect() const 8355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 8365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return clippedOverflowRectForRepaint(0); 8375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 8385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) IntRect pixelSnappedAbsoluteClippedOverflowRect() const; 8395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual LayoutRect clippedOverflowRectForRepaint(const RenderLayerModelObject* repaintContainer) const; 8405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual LayoutRect rectWithOutlineForRepaint(const RenderLayerModelObject* repaintContainer, LayoutUnit outlineWidth) const; 841926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) virtual LayoutRect outlineBoundsForRepaint(const RenderLayerModelObject* /*repaintContainer*/, const RenderGeometryMap* = 0) const { return LayoutRect(); } 8425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Given a rect in the object's coordinate space, compute a rect suitable for repainting 8445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // that rect in the coordinate space of repaintContainer. 8455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual void computeRectForRepaint(const RenderLayerModelObject* repaintContainer, LayoutRect&, bool fixed = false) const; 8465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual void computeFloatRectForRepaint(const RenderLayerModelObject* repaintContainer, FloatRect& repaintRect, bool fixed = false) const; 8475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // If multiple-column layout results in applying an offset to the given point, add the same 8495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // offset to the given size. 8505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual void adjustForColumns(LayoutSize&, const LayoutPoint&) const { } 8515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) LayoutSize offsetForColumns(const LayoutPoint& point) const 8525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 8535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) LayoutSize offset; 8545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) adjustForColumns(offset, point); 8555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return offset; 8565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 8575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual unsigned int length() const { return 1; } 8595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool isFloatingOrOutOfFlowPositioned() const { return (isFloating() || isOutOfFlowPositioned()); } 8615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool isTransparent() const { return style()->opacity() < 1.0f; } 8635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) float opacity() const { return style()->opacity(); } 8645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool hasReflection() const { return m_bitfields.hasReflection(); } 8665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Applied as a "slop" to dirty rect checks during the outline painting phase's dirty-rect checks. 8685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) int maximalOutlineSize(PaintPhase) const; 8695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) enum SelectionState { 8715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) SelectionNone, // The object is not selected. 8725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) SelectionStart, // The object either contains the start of a selection run or is the start of a run 8735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) SelectionInside, // The object is fully encompassed by a selection run 8745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) SelectionEnd, // The object either contains the end of a selection run or is the end of a run 8755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) SelectionBoth // The object contains an entire run or is the sole selected object in that run 8765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }; 8775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // The current selection state for an object. For blocks, the state refers to the state of the leaf 8795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // descendants (as described above in the SelectionState enum declaration). 8805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) SelectionState selectionState() const { return m_bitfields.selectionState(); } 8815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual void setSelectionState(SelectionState state) { m_bitfields.setSelectionState(state); } 8825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) inline void setSelectionStateIfNeeded(SelectionState); 8835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool canUpdateSelectionOnRootLineBoxes(); 8845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // A single rectangle that encompasses all of the selected objects within this object. Used to determine the tightest 8865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // possible bounding box for the selection. 8875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) LayoutRect selectionRect(bool clipToVisibleContent = true) { return selectionRectForRepaint(0, clipToVisibleContent); } 8885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual LayoutRect selectionRectForRepaint(const RenderLayerModelObject* /*repaintContainer*/, bool /*clipToVisibleContent*/ = true) { return LayoutRect(); } 8895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual bool canBeSelectionLeaf() const { return false; } 8915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool hasSelectedChildren() const { return selectionState() != SelectionNone; } 8925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 893e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) bool isSelectable() const; 8945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Obtains the selection colors that should be used when painting a selection. 8955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Color selectionBackgroundColor() const; 8965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Color selectionForegroundColor() const; 8975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Color selectionEmphasisMarkColor() const; 8985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 8995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Whether or not a given block needs to paint selection gaps. 9005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual bool shouldPaintSelectionGaps() const { return false; } 9015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 9035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Returns the local coordinates of the caret within this render object. 9045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param caretOffset zero-based offset determining position within the render object. 9055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param extraWidthToEndOfLine optional out arg to give extra width to end of line - 9065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * useful for character range rect computations 9075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 9085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual LayoutRect localCaretRect(InlineBox*, int caretOffset, LayoutUnit* extraWidthToEndOfLine = 0); 9095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 91051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) // When performing a global document tear-down, the renderer of the document is cleared. We use this 91151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) // as a hook to detect the case of document destruction and don't waste time doing unnecessary work. 91251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) bool documentBeingDestroyed() const; 9135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void destroyAndCleanupAnonymousWrappers(); 9155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual void destroy(); 9165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Virtual function helpers for the deprecated Flexible Box Layout (display: -webkit-box). 9185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual bool isDeprecatedFlexibleBox() const { return false; } 9195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual bool isStretchingChildren() const { return false; } 9205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Virtual function helper for the new FlexibleBox Layout (display: -webkit-flex). 9225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual bool isFlexibleBox() const { return false; } 9235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool isFlexibleBoxIncludingDeprecated() const 9255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 9265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return isFlexibleBox() || isDeprecatedFlexibleBox(); 9275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 9285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual bool isCombineText() const { return false; } 9305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual int caretMinOffset() const; 9325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual int caretMaxOffset() const; 9335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual int previousOffset(int current) const; 9355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual int previousOffsetForBackwardDeletion(int current) const; 9365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual int nextOffset(int current) const; 9375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9383c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch virtual void imageChanged(ImageResource*, const IntRect* = 0); 9395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual void imageChanged(WrappedImagePtr, const IntRect* = 0) { } 9403c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch virtual bool willRenderImage(ImageResource*); 9415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void selectionStartEnd(int& spos, int& epos) const; 9437757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch 9445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void remove() { if (parent()) parent()->removeChild(this); } 9455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 946bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) AnimationController& animation() const; 9475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9485267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) bool isInert() const; 94993ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) bool visibleToHitTestRequest(const HitTestRequest& request) const { return style()->visibility() == VISIBLE && (request.ignorePointerEventsNone() || style()->pointerEvents() != PE_NONE) && !isInert(); } 95093ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) bool visibleToHitTesting() const { return style()->visibility() == VISIBLE && style()->pointerEvents() != PE_NONE && !isInert(); } 9515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Map points and quads through elements, potentially via 3d transforms. You should never need to call these directly; use 9535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // localToAbsolute/absoluteToLocal methods instead. 9545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual void mapLocalToContainer(const RenderLayerModelObject* repaintContainer, TransformState&, MapCoordinatesFlags = ApplyContainerFlip, bool* wasFixed = 0) const; 9555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual void mapAbsoluteToLocalPoint(MapCoordinatesFlags, TransformState&) const; 9565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Pushes state onto RenderGeometryMap about how to map coordinates from this renderer to its container, or ancestorToStopAt (whichever is encountered first). 9585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Returns the renderer which was mapped to (container or ancestorToStopAt). 9595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual const RenderObject* pushMappingToContainer(const RenderLayerModelObject* ancestorToStopAt, RenderGeometryMap&) const; 9607757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch 9615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool shouldUseTransformFromContainer(const RenderObject* container) const; 9625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void getTransformFromContainer(const RenderObject* container, const LayoutSize& offsetInContainer, TransformationMatrix&) const; 9637757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch 9647757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch bool createsGroup() const { return isTransparent() || hasMask() || hasFilter() || hasBlendMode(); } 9657757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch 966926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) virtual void addFocusRingRects(Vector<IntRect>&, const LayoutPoint& /* additionalOffset */, const RenderLayerModelObject* /* paintContainer */ = 0) { }; 9675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9687757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch // Compute a list of hit-test rectangles per layer rooted at this renderer. 9697757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch virtual void computeLayerHitTestRects(LayerHitTestRects&) const; 9707757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch 9715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) LayoutRect absoluteOutlineBounds() const 9725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 9735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return outlineBoundsForRepaint(0); 9745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 9755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Return the renderer whose background style is used to paint the root background. Should only be called on the renderer for which isRoot() is true. 9775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) RenderObject* rendererForRootBackground(); 9785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 9795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) RespectImageOrientationEnum shouldRespectImageOrientation() const; 9805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 98106f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles) bool isRelayoutBoundaryForInspector() const; 98206f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles) 983a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) const LayoutRect& newRepaintRect() const { return m_newRepaintRect; } 984a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) void setNewRepaintRect(const LayoutRect& rect) { m_newRepaintRect = rect; } 985a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) 98651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) const LayoutRect& oldRepaintRect() const { return m_oldRepaintRect; } 98751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) void setOldRepaintRect(const LayoutRect& rect) { m_oldRepaintRect = rect; } 98851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 989a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) bool shouldDoFullRepaintAfterLayout() const { return m_bitfields.shouldDoFullRepaintAfterLayout(); } 990a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) void setShouldDoFullRepaintAfterLayout(bool b) { m_bitfields.setShouldDoFullRepaintAfterLayout(b); } 991a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) bool shouldRepaintOverflowIfNeeded() const { return m_bitfields.shouldRepaintOverflowIfNeeded(); } 99251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 99351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) void clearRepaintRects() 99451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) { 99551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) setNewRepaintRect(LayoutRect()); 996a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) setOldRepaintRect(LayoutRect()); 997a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) 998a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) setShouldDoFullRepaintAfterLayout(false); 999a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) setShouldRepaintOverflowIfNeeded(false); 1000a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) setLayoutDidGetCalled(false); 100151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) } 100251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 1003a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) // layoutDidGetCalled indicates whether this render object was re-laid-out 1004a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) // since the last call to setLayoutDidGetCalled(false) on this object. 1005a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) bool layoutDidGetCalled() { return m_bitfields.layoutDidGetCalled(); } 1006a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) void setLayoutDidGetCalled(bool b) { m_bitfields.setLayoutDidGetCalled(b); } 1007a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) 10085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)protected: 10095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) inline bool layerCreationAllowedForSubtree() const; 10105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 10115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Overrides should call the superclass at the end 10125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual void styleWillChange(StyleDifference, const RenderStyle* newStyle); 10135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Overrides should call the superclass at the start 10145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual void styleDidChange(StyleDifference, const RenderStyle* oldStyle); 10155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void propagateStyleToAnonymousChildren(bool blockChildrenOnly = false); 10165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 10175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void drawLineForBoxSide(GraphicsContext*, int x1, int y1, int x2, int y2, BoxSide, 10185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Color, EBorderStyle, int adjbw1, int adjbw2, bool antialias = false); 10191e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) void drawDashedOrDottedBoxSide(GraphicsContext*, int x1, int y1, int x2, int y2, 10201e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) BoxSide, Color, int thickness, EBorderStyle, bool antialias); 10211e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) void drawDoubleBoxSide(GraphicsContext*, int x1, int y1, int x2, int y2, 10221e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) int length, BoxSide, Color, int thickness, int adjacentWidth1, int adjacentWidth2, bool antialias); 10231e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) void drawRidgeOrGrooveBoxSide(GraphicsContext*, int x1, int y1, int x2, int y2, 10241e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) BoxSide, Color, EBorderStyle, int adjacentWidth1, int adjacentWidth2, bool antialias); 10251e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) void drawSolidBoxSide(GraphicsContext*, int x1, int y1, int x2, int y2, 10261e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) BoxSide, Color, int adjacentWidth1, int adjacentWidth2, bool antialias); 10275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1028926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) void paintFocusRing(PaintInfo&, const LayoutPoint&, RenderStyle*); 1029926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) void paintOutline(PaintInfo&, const LayoutRect&); 10305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void addPDFURLRect(GraphicsContext*, const LayoutRect&); 10317757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch 10325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual LayoutRect viewRect() const; 10335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 10345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void adjustRectForOutlineAndShadow(LayoutRect&) const; 10355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 10365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void clearLayoutRootIfNeeded() const; 10375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual void willBeDestroyed(); 1038f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) void postDestroy(); 10395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 10405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual void insertedIntoTree(); 10415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) virtual void willBeRemovedFromTree(); 10425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1043f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) void setDocumentForAnonymous(Document* document) { ASSERT(isAnonymous()); m_node = document; } 1044926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 10457757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch // Add hit-test rects for the render tree rooted at this node to the provided collection on a 1046f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) // per-RenderLayer basis. 1047f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) // currentLayer must be the enclosing layer, and layerOffset is the current offset within 1048f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) // this layer. Subclass implementations will add any offset for this renderer within it's 1049f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) // container, so callers should provide only the offset of the container within it's layer. 1050f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) // containerRect is a rect that has already been added for the currentLayer which is likely to 1051f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) // be a container for child elements. Any rect wholly contained by containerRect can be 1052f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) // skipped. 1053f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles) virtual void addLayerHitTestRects(LayerHitTestRects&, const RenderLayer* currentLayer, const LayoutPoint& layerOffset, const LayoutRect& containerRect) const; 10547757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch 10557757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch // Add hit-test rects for this renderer only to the provided list. layerOffset is the offset 10567757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch // of this renderer within the current layer that should be used for each result. 10577757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch virtual void computeSelfHitTestRects(Vector<LayoutRect>&, const LayoutPoint& layerOffset) const { }; 10587757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch 10595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)private: 106051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) RenderBlock* containerForFixedPosition(const RenderLayerModelObject* repaintContainer = 0, bool* repaintContainerSkipped = 0) const; 106151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 1062926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) RenderFlowThread* locateFlowThreadContainingBlock() const; 1063926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) void removeFromRenderFlowThread(); 1064926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) void removeFromRenderFlowThreadRecursive(RenderFlowThread*); 1065926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 10665267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) bool shouldRepaintForStyleDifference(StyleDifference) const; 10671e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) bool hasImmediateNonWhitespaceTextChildOrPropertiesDependentOnColor() const; 10685267f701546148b83dfbe1d151cb184385bb5c22Torne (Richard Coles) 10695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) RenderStyle* cachedFirstLineStyle() const; 10705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) StyleDifference adjustStyleDifference(StyleDifference, unsigned contextSensitiveProperties) const; 10715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 10725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) Color selectionColor(int colorProperty) const; 10735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1074e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) void removeShapeImageClient(ShapeValue*); 1075e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) 10765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#ifndef NDEBUG 10775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void checkBlockPositionedObjectsNeedLayout(); 10788abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) void checkNotInPartialLayout(); 10795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#endif 10805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 10815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) RefPtr<RenderStyle> m_style; 10825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1083f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) Node* m_node; 10845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 10855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) RenderObject* m_parent; 10865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) RenderObject* m_previous; 10875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) RenderObject* m_next; 10885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 10895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#ifndef NDEBUG 10900019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch unsigned m_hasAXObject : 1; 10910019e4eead4d990e4304c54a9028aca9122fb256Ben Murdoch unsigned m_setNeedsLayoutForbidden : 1; 10925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#endif 10935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 10945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#define ADD_BOOLEAN_BITFIELD(name, Name) \ 10955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) private:\ 10965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) unsigned m_##name : 1;\ 10975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) public:\ 10985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool name() const { return m_##name; }\ 10995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void set##Name(bool name) { m_##name = name; }\ 11005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 11015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) class RenderObjectBitfields { 1102926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) enum PositionedState { 1103926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) IsStaticallyPositioned = 0, 1104926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) IsRelativelyPositioned = 1, 1105926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) IsOutOfFlowPositioned = 2, 1106926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) IsStickyPositioned = 3 1107926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }; 1108926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 11095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) public: 11105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) RenderObjectBitfields(Node* node) 1111e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) : m_selfNeedsLayout(false) 1112a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) // FIXME: shouldDoFullRepaintAfterLayout is needed because we reset 1113a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) // the layout bits before repaint when doing repaintAfterLayout. 1114a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) // Holding the layout bits until after repaint would remove the need 1115a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) // for this flag. 1116a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) , m_shouldDoFullRepaintAfterLayout(false) 1117a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) , m_shouldRepaintOverflowIfNeeded(false) 11185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_needsPositionedMovementLayout(false) 11195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_normalChildNeedsLayout(false) 11205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_posChildNeedsLayout(false) 11215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_needsSimplifiedNormalFlowLayout(false) 11225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_preferredLogicalWidthsDirty(false) 11235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_floating(false) 1124926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) , m_isAnonymous(!node) 11255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_isText(false) 11265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_isBox(false) 11275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_isInline(true) 11285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_isReplaced(false) 11295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_horizontalWritingMode(true) 11305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_isDragging(false) 11315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_hasLayer(false) 11325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_hasOverflowClip(false) 11335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_hasTransform(false) 11345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_hasReflection(false) 11355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_hasCounterNodeMap(false) 11365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_everHadLayout(false) 113751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) , m_ancestorLineBoxDirty(false) 11385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_childrenInline(false) 11395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_hasColumns(false) 1140a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) , m_layoutDidGetCalled(false) 1141926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) , m_positionedState(IsStaticallyPositioned) 11425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) , m_selectionState(SelectionNone) 1143926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) , m_flowThreadState(NotInsideFlowThread) 1144926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) , m_boxDecorationState(NoBoxDecorations) 11455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 11465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 11477757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch 1148a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) // 32 bits have been used in the first word, and 2 in the second. 1149e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) ADD_BOOLEAN_BITFIELD(selfNeedsLayout, SelfNeedsLayout); 1150a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) ADD_BOOLEAN_BITFIELD(shouldDoFullRepaintAfterLayout, ShouldDoFullRepaintAfterLayout); 1151a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) ADD_BOOLEAN_BITFIELD(shouldRepaintOverflowIfNeeded, ShouldRepaintOverflowIfNeeded); 11525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ADD_BOOLEAN_BITFIELD(needsPositionedMovementLayout, NeedsPositionedMovementLayout); 11535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ADD_BOOLEAN_BITFIELD(normalChildNeedsLayout, NormalChildNeedsLayout); 11545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ADD_BOOLEAN_BITFIELD(posChildNeedsLayout, PosChildNeedsLayout); 11555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ADD_BOOLEAN_BITFIELD(needsSimplifiedNormalFlowLayout, NeedsSimplifiedNormalFlowLayout); 11565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ADD_BOOLEAN_BITFIELD(preferredLogicalWidthsDirty, PreferredLogicalWidthsDirty); 11575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ADD_BOOLEAN_BITFIELD(floating, Floating); 11585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 11595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ADD_BOOLEAN_BITFIELD(isAnonymous, IsAnonymous); 11605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ADD_BOOLEAN_BITFIELD(isText, IsText); 11615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ADD_BOOLEAN_BITFIELD(isBox, IsBox); 11625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ADD_BOOLEAN_BITFIELD(isInline, IsInline); 11635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ADD_BOOLEAN_BITFIELD(isReplaced, IsReplaced); 11645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ADD_BOOLEAN_BITFIELD(horizontalWritingMode, HorizontalWritingMode); 11655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ADD_BOOLEAN_BITFIELD(isDragging, IsDragging); 11665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 11675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ADD_BOOLEAN_BITFIELD(hasLayer, HasLayer); 11685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ADD_BOOLEAN_BITFIELD(hasOverflowClip, HasOverflowClip); // Set in the case of overflow:auto/scroll/hidden 11695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ADD_BOOLEAN_BITFIELD(hasTransform, HasTransform); 11705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ADD_BOOLEAN_BITFIELD(hasReflection, HasReflection); 11715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 11725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ADD_BOOLEAN_BITFIELD(hasCounterNodeMap, HasCounterNodeMap); 11735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ADD_BOOLEAN_BITFIELD(everHadLayout, EverHadLayout); 117451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) ADD_BOOLEAN_BITFIELD(ancestorLineBoxDirty, AncestorLineBoxDirty); 11755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 11765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // from RenderBlock 11775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ADD_BOOLEAN_BITFIELD(childrenInline, ChildrenInline); 11785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ADD_BOOLEAN_BITFIELD(hasColumns, HasColumns); 11795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1180a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) ADD_BOOLEAN_BITFIELD(layoutDidGetCalled, LayoutDidGetCalled); 1181a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) 11825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) private: 1183926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) unsigned m_positionedState : 2; // PositionedState 11845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) unsigned m_selectionState : 3; // SelectionState 1185926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) unsigned m_flowThreadState : 2; // FlowThreadState 1186926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) unsigned m_boxDecorationState : 2; // BoxDecorationState 11875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 11885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) public: 1189926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) bool isOutOfFlowPositioned() const { return m_positionedState == IsOutOfFlowPositioned; } 1190926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) bool isRelPositioned() const { return m_positionedState == IsRelativelyPositioned; } 1191926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) bool isStickyPositioned() const { return m_positionedState == IsStickyPositioned; } 1192926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) bool isPositioned() const { return m_positionedState != IsStaticallyPositioned; } 1193926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 1194926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) void setPositionedState(int positionState) 1195926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 1196926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) // This mask maps FixedPosition and AbsolutePosition to IsOutOfFlowPositioned, saving one bit. 1197926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) m_positionedState = static_cast<PositionedState>(positionState & 0x3); 1198926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } 1199926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) void clearPositionedState() { m_positionedState = StaticPosition; } 1200926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 12015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ALWAYS_INLINE SelectionState selectionState() const { return static_cast<SelectionState>(m_selectionState); } 12025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ALWAYS_INLINE void setSelectionState(SelectionState selectionState) { m_selectionState = selectionState; } 12037757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch 1204926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) ALWAYS_INLINE FlowThreadState flowThreadState() const { return static_cast<FlowThreadState>(m_flowThreadState); } 1205926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) ALWAYS_INLINE void setFlowThreadState(FlowThreadState flowThreadState) { m_flowThreadState = flowThreadState; } 1206926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 1207926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) ALWAYS_INLINE BoxDecorationState boxDecorationState() const { return static_cast<BoxDecorationState>(m_boxDecorationState); } 1208926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) ALWAYS_INLINE void setBoxDecorationState(BoxDecorationState boxDecorationState) { m_boxDecorationState = boxDecorationState; } 12095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }; 12105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 12115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#undef ADD_BOOLEAN_BITFIELD 12125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 12135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) RenderObjectBitfields m_bitfields; 12145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1215e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) void setSelfNeedsLayout(bool b) { m_bitfields.setSelfNeedsLayout(b); } 12165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void setNeedsPositionedMovementLayout(bool b) { m_bitfields.setNeedsPositionedMovementLayout(b); } 12175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void setNormalChildNeedsLayout(bool b) { m_bitfields.setNormalChildNeedsLayout(b); } 12185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void setPosChildNeedsLayout(bool b) { m_bitfields.setPosChildNeedsLayout(b); } 12195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void setNeedsSimplifiedNormalFlowLayout(bool b) { m_bitfields.setNeedsSimplifiedNormalFlowLayout(b); } 12205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void setIsDragging(bool b) { m_bitfields.setIsDragging(b); } 12215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void setEverHadLayout(bool b) { m_bitfields.setEverHadLayout(b); } 1222a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) void setShouldRepaintOverflowIfNeeded(bool b) { m_bitfields.setShouldRepaintOverflowIfNeeded(b); } 12235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 12245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)private: 12255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Store state between styleWillChange and styleDidChange 12265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) static bool s_affectsParentBlock; 122751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 122851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) LayoutRect m_oldRepaintRect; 122951b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) LayoutRect m_newRepaintRect; 12305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}; 12315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 123251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)inline bool RenderObject::documentBeingDestroyed() const 123351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles){ 123451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) return !document().renderer(); 123551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)} 123651b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) 12375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)inline bool RenderObject::isBeforeContent() const 12385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 12395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (style()->styleType() != BEFORE) 12405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 12415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Text nodes don't have their own styles, so ignore the style on a text node. 12425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (isText() && !isBR()) 12435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 12445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return true; 12455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 12465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 12475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)inline bool RenderObject::isAfterContent() const 12485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 12495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (style()->styleType() != AFTER) 12505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 12515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Text nodes don't have their own styles, so ignore the style on a text node. 12525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (isText() && !isBR()) 12535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 12545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return true; 12555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 12565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 12575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)inline bool RenderObject::isBeforeOrAfterContent() const 12585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 12595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return isBeforeContent() || isAfterContent(); 12605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 12615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1262e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)inline void RenderObject::setNeedsLayout(MarkingBehavior markParents, SubtreeLayoutScope* layouter) 12635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 12648abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)#ifndef NDEBUG 12658abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) checkNotInPartialLayout(); 12668abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)#endif 12673c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch ASSERT(!isSetNeedsLayoutForbidden()); 1268e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) bool alreadyNeededLayout = m_bitfields.selfNeedsLayout(); 1269e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) setSelfNeedsLayout(true); 12703c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch if (!alreadyNeededLayout) { 1271e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) if (markParents == MarkContainingBlockChain && (!layouter || layouter->root() != this)) 1272e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) markContainingBlocksForLayout(true, 0, layouter); 12733c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch if (hasLayer()) 12743c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch setLayerNeedsFullRepaint(); 12753c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch } 12763c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch} 12773c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch 12783c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdochinline void RenderObject::clearNeedsLayout() 12793c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch{ 12808abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)#ifndef NDEBUG 12818abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) checkNotInPartialLayout(); 12828abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles)#endif 1283e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) setSelfNeedsLayout(false); 12843c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch setEverHadLayout(true); 12853c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch setPosChildNeedsLayout(false); 12863c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch setNeedsSimplifiedNormalFlowLayout(false); 12873c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch setNormalChildNeedsLayout(false); 12883c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch setNeedsPositionedMovementLayout(false); 12893c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch setAncestorLineBoxDirty(false); 12905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#ifndef NDEBUG 12913c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch checkBlockPositionedObjectsNeedLayout(); 12925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#endif 12935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 12945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1295e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)inline void RenderObject::setChildNeedsLayout(MarkingBehavior markParents, SubtreeLayoutScope* layouter) 12965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 12973c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch ASSERT(!isSetNeedsLayoutForbidden()); 12985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool alreadyNeededLayout = normalChildNeedsLayout(); 12993c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch setNormalChildNeedsLayout(true); 1300e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) // FIXME: Replace MarkOnlyThis with the SubtreeLayoutScope code path and remove the MarkingBehavior argument entirely. 1301e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) if (!alreadyNeededLayout && markParents == MarkContainingBlockChain && (!layouter || layouter->root() != this)) 1302e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles) markContainingBlocksForLayout(true, 0, layouter); 13035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 13045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 13055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)inline void RenderObject::setNeedsPositionedMovementLayout() 13065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 13075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool alreadyNeededLayout = needsPositionedMovementLayout(); 13085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) setNeedsPositionedMovementLayout(true); 13095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(!isSetNeedsLayoutForbidden()); 13105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!alreadyNeededLayout) { 13115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) markContainingBlocksForLayout(); 13125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (hasLayer()) 13135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) setLayerNeedsFullRepaintForPositionedMovementLayout(); 13145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 13155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 13165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 13175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)inline void RenderObject::setNeedsSimplifiedNormalFlowLayout() 13185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 13195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool alreadyNeededLayout = needsSimplifiedNormalFlowLayout(); 13205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) setNeedsSimplifiedNormalFlowLayout(true); 13215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ASSERT(!isSetNeedsLayoutForbidden()); 13225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!alreadyNeededLayout) { 13235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) markContainingBlocksForLayout(); 13245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (hasLayer()) 13255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) setLayerNeedsFullRepaint(); 13265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 13275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 13285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 13295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)inline bool RenderObject::preservesNewline() const 13305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 13315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (isSVGInlineText()) 13325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 133393ac45cfc74041c8ae536ce58a9534d46db2024eTorne (Richard Coles) 13345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return style()->preserveNewline(); 13355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 13365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 13375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)inline bool RenderObject::layerCreationAllowedForSubtree() const 13385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 13395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) RenderObject* parentRenderer = parent(); 13405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) while (parentRenderer) { 13415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (parentRenderer->isSVGHiddenContainer()) 13425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 13435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) parentRenderer = parentRenderer->parent(); 13445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 13455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 13465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return true; 13475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 13485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 13495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)inline void RenderObject::setSelectionStateIfNeeded(SelectionState state) 13505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 13515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (selectionState() == state) 13525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 13535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 13545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) setSelectionState(state); 13555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 13565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1357926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)inline void RenderObject::setHasBoxDecorations(bool b) 1358926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){ 1359926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (!b) { 1360926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) m_bitfields.setBoxDecorationState(NoBoxDecorations); 1361926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return; 1362926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } 1363926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (hasBoxDecorations()) 1364926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return; 1365926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) m_bitfields.setBoxDecorationState(HasBoxDecorationsAndBackgroundObscurationStatusInvalid); 1366926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)} 1367926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 1368926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)inline void RenderObject::invalidateBackgroundObscurationStatus() 1369926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){ 1370926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (!hasBoxDecorations()) 1371926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return; 1372926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) m_bitfields.setBoxDecorationState(HasBoxDecorationsAndBackgroundObscurationStatusInvalid); 1373926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)} 1374926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 1375926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)inline bool RenderObject::backgroundIsKnownToBeObscured() 1376926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){ 1377926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (m_bitfields.boxDecorationState() == HasBoxDecorationsAndBackgroundObscurationStatusInvalid) { 1378926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) BoxDecorationState boxDecorationState = computeBackgroundIsKnownToBeObscured() ? HasBoxDecorationsAndBackgroundIsKnownToBeObscured : HasBoxDecorationsAndBackgroundMayBeVisible; 1379926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) m_bitfields.setBoxDecorationState(boxDecorationState); 1380926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } 1381926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return m_bitfields.boxDecorationState() == HasBoxDecorationsAndBackgroundIsKnownToBeObscured; 1382926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)} 1383926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 13845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)inline void makeMatrixRenderable(TransformationMatrix& matrix, bool has3DRendering) 13855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 13865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!has3DRendering) 13875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) matrix.makeAffine(); 13885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 13895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 13905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)inline int adjustForAbsoluteZoom(int value, RenderObject* renderer) 13915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 13925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return adjustForAbsoluteZoom(value, renderer->style()); 13935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 13945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 139551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)inline LayoutUnit adjustLayoutUnitForAbsoluteZoom(LayoutUnit value, RenderObject& renderer) 1396926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){ 139751b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) ASSERT(renderer.style()); 139851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) return adjustLayoutUnitForAbsoluteZoom(value, *renderer.style()); 1399926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)} 1400926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 140151b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)inline void adjustFloatQuadForAbsoluteZoom(FloatQuad& quad, RenderObject& renderer) 14025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 140351b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) float zoom = renderer.style()->effectiveZoom(); 14045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (zoom != 1) 14055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) quad.scale(1 / zoom, 1 / zoom); 14065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 14075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 140851b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)inline void adjustFloatRectForAbsoluteZoom(FloatRect& rect, RenderObject& renderer) 14095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 141051b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) float zoom = renderer.style()->effectiveZoom(); 14115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (zoom != 1) 14125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) rect.scale(1 / zoom, 1 / zoom); 14135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 14145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1415bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)#define DEFINE_RENDER_OBJECT_TYPE_CASTS(thisType, predicate) \ 1416bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) DEFINE_TYPE_CASTS(thisType, RenderObject, object, object->predicate, object.predicate) 1417bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) 14185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} // namespace WebCore 14195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 14205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#ifndef NDEBUG 14215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// Outside the WebCore namespace for ease of invocation from gdb. 14225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void showTree(const WebCore::RenderObject*); 14235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void showLineTree(const WebCore::RenderObject*); 14245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void showRenderTree(const WebCore::RenderObject* object1); 14255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// We don't make object2 an optional parameter so that showRenderTree 14265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)// can be called from gdb easily. 14275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void showRenderTree(const WebCore::RenderObject* object1, const WebCore::RenderObject* object2); 14289bbd2f5e390b01907d97ecffde80aa1b06113aacTorne (Richard Coles) 14295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#endif 14305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 14315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#endif // RenderObject_h 1432