RenderObject.h revision 2fc2651226baac27029e38c9d6ef883fa32084db
18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/* 28e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Copyright (C) 2000 Lars Knoll (knoll@kde.org) 38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * (C) 2000 Antti Koivisto (koivisto@kde.org) 48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * (C) 2000 Dirk Mueller (mueller@kde.org) 58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * (C) 2004 Allan Sandfeld Jensen (kde@carewolf.com) 6635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserved. 7643ca7872b450ea4efacab6188849e5aac2ba161Steve Block * Copyright (C) 2009 Google Inc. All rights reserved. 88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * This library is free software; you can redistribute it and/or 108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * modify it under the terms of the GNU Library General Public 118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * License as published by the Free Software Foundation; either 128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * version 2 of the License, or (at your option) any later version. 138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * This library is distributed in the hope that it will be useful, 158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * but WITHOUT ANY WARRANTY; without even the implied warranty of 168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Library General Public License for more details. 188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * You should have received a copy of the GNU Library General Public License 208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * along with this library; see the file COPYING.LIB. If not, write to 218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Boston, MA 02110-1301, USA. 238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifndef RenderObject_h 278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define RenderObject_h 288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "CachedResourceClient.h" 308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "Document.h" 315f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian#include "Element.h" 325f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian#include "FloatQuad.h" 3365f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch#include "PaintPhase.h" 348f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#include "RenderObjectChildList.h" 358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "RenderStyle.h" 368f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#include "TextAffinity.h" 378f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#include "TransformationMatrix.h" 388f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#include <wtf/UnusedParam.h> 398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 40dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch#if PLATFORM(CG) || PLATFORM(CAIRO) || PLATFORM(QT) 41ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block#define HAVE_PATH_BASED_BORDER_RADIUS_DRAWING 1 42ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block#endif 43ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block 448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectnamespace WebCore { 458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 46ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdochclass AffineTransform; 478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass AnimationController; 488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass HitTestResult; 498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass InlineBox; 508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass InlineFlowBox; 515f1ab04193ad0130ca8204aadaceae083aca9881Feng Qianclass OverlapTestRequestClient; 52ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Blockclass Path; 538f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qianclass Position; 548f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qianclass RenderBoxModelObject; 558f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qianclass RenderInline; 568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass RenderBlock; 578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass RenderFlow; 588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass RenderLayer; 590bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochclass RenderTheme; 608f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qianclass TransformState; 61635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectclass VisiblePosition; 62d0825bca7fe65beaee391d30da42e937db621564Steve Block#if ENABLE(SVG) 6321939df44de1705786c545cd1bf519d47250322dBen Murdochclass RenderSVGResourceContainer; 64d0825bca7fe65beaee391d30da42e937db621564Steve Block#endif 658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6665f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdochstruct PaintInfo; 6765f03d4f644ce73618e5f4f50dd694b26f55ae12Ben Murdoch 688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectenum HitTestFilter { 698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project HitTestAll, 708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project HitTestSelf, 718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project HitTestDescendants 728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}; 738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectenum HitTestAction { 758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project HitTestBlockBackground, 768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project HitTestChildBlockBackground, 778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project HitTestChildBlockBackgrounds, 788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project HitTestFloat, 798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project HitTestForeground 808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}; 818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 828f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian// Sides used when drawing borders and outlines. This is in RenderObject rather than RenderBoxModelObject since outlines can 838f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian// be drawn by SVG around bounding boxes. 848f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qianenum BoxSide { 858f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian BSTop, 868f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian BSBottom, 878f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian BSLeft, 888f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian BSRight 898f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian}; 908f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 918f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qianconst int caretWidth = 1; 928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if ENABLE(DASHBOARD_SUPPORT) 948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstruct DashboardRegionValue { 958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool operator==(const DashboardRegionValue& o) const 968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return type == o.type && bounds == o.bounds && clip == o.clip && label == o.label; 988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool operator!=(const DashboardRegionValue& o) const 1008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 1018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return !(*this == o); 1028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project String label; 1058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project IntRect bounds; 1068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project IntRect clip; 1078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project int type; 1088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}; 1098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 1108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// Base class for all rendering tree objects. 1128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass RenderObject : public CachedResourceClient { 1138f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian friend class RenderBlock; 1148f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian friend class RenderBox; 1158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project friend class RenderLayer; 1168f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian friend class RenderObjectChildList; 117635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project friend class RenderSVGContainer; 1188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectpublic: 1198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Anonymous objects should pass the document as their node, and they will then automatically be 1208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // marked as anonymous in the constructor. 1218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project RenderObject(Node*); 1228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual ~RenderObject(); 1238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch RenderTheme* theme() const; 1250bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 1268f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian virtual const char* renderName() const = 0; 1278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project RenderObject* parent() const { return m_parent; } 1298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool isDescendantOf(const RenderObject*) const; 1308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project RenderObject* previousSibling() const { return m_previous; } 1328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project RenderObject* nextSibling() const { return m_next; } 1338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1348f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian RenderObject* firstChild() const 1358f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian { 1368f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian if (const RenderObjectChildList* children = virtualChildren()) 1378f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian return children->firstChild(); 1388f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian return 0; 1398f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian } 1408f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian RenderObject* lastChild() const 1418f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian { 1428f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian if (const RenderObjectChildList* children = virtualChildren()) 1438f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian return children->lastChild(); 1448f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian return 0; 1458f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian } 1462fc2651226baac27029e38c9d6ef883fa32084dbSteve Block RenderObject* beforePseudoElementRenderer() const 1472fc2651226baac27029e38c9d6ef883fa32084dbSteve Block { 1482fc2651226baac27029e38c9d6ef883fa32084dbSteve Block if (const RenderObjectChildList* children = virtualChildren()) 1492fc2651226baac27029e38c9d6ef883fa32084dbSteve Block return children->beforePseudoElementRenderer(this); 1502fc2651226baac27029e38c9d6ef883fa32084dbSteve Block return 0; 1512fc2651226baac27029e38c9d6ef883fa32084dbSteve Block } 1522fc2651226baac27029e38c9d6ef883fa32084dbSteve Block RenderObject* afterPseudoElementRenderer() const 1532fc2651226baac27029e38c9d6ef883fa32084dbSteve Block { 1542fc2651226baac27029e38c9d6ef883fa32084dbSteve Block if (const RenderObjectChildList* children = virtualChildren()) 1552fc2651226baac27029e38c9d6ef883fa32084dbSteve Block return children->afterPseudoElementRenderer(this); 1562fc2651226baac27029e38c9d6ef883fa32084dbSteve Block return 0; 1572fc2651226baac27029e38c9d6ef883fa32084dbSteve Block } 1588f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian virtual RenderObjectChildList* virtualChildren() { return 0; } 1598f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian virtual const RenderObjectChildList* virtualChildren() const { return 0; } 1608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project RenderObject* nextInPreOrder() const; 1628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project RenderObject* nextInPreOrder(RenderObject* stayWithin) const; 1638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project RenderObject* nextInPreOrderAfterChildren() const; 1648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project RenderObject* nextInPreOrderAfterChildren(RenderObject* stayWithin) const; 1658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project RenderObject* previousInPreOrder() const; 1668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project RenderObject* childAt(unsigned) const; 1678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project RenderObject* firstLeafChild() const; 1698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project RenderObject* lastLeafChild() const; 1708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1718f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian // The following six functions are used when the render tree hierarchy changes to make sure layers get 172635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project // properly added and removed. Since containership can be implemented by any subclass, and since a hierarchy 173635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project // can contain a mixture of boxes and other object types, these functions need to be in the base class. 1748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project RenderLayer* enclosingLayer() const; 1758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void addLayers(RenderLayer* parentLayer, RenderObject* newObject); 1768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void removeLayers(RenderLayer* parentLayer); 1778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void moveLayers(RenderLayer* oldParent, RenderLayer* newParent); 1788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project RenderLayer* findNextLayer(RenderLayer* parentLayer, RenderObject* startPoint, bool checkParent = true); 1798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 180635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project // Convenience function for getting to the nearest enclosing box of a RenderObject. 181635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project RenderBox* enclosingBox() const; 182e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke RenderBoxModelObject* enclosingBoxModelObject() const; 183e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke 1848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual bool isEmpty() const { return firstChild() == 0; } 1858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifndef NDEBUG 1878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void setHasAXObject(bool flag) { m_hasAXObject = flag; } 1888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool hasAXObject() const { return m_hasAXObject; } 189635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project bool isSetNeedsLayoutForbidden() const { return m_setNeedsLayoutForbidden; } 190635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project void setNeedsLayoutIsForbidden(bool flag) { m_setNeedsLayoutForbidden = flag; } 1918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 1928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Obtains the nearest enclosing block (including this block) that contributes a first-line style to our inline 1948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // children. 1958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual RenderBlock* firstLineBlock() const; 1968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Called when an object that was floating or positioned becomes a normal flow object 1988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // again. We have to make sure the render tree updates as needed to accommodate the new 1998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // normal flow object. 2008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void handleDynamicFloatPositionChange(); 2018f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 2028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // RenderObject tree manipulation 2038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ////////////////////////////////////////// 2048f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian virtual bool canHaveChildren() const { return virtualChildren(); } 2058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual bool isChildAllowed(RenderObject*, RenderStyle*) const { return true; } 2068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual void addChild(RenderObject* newChild, RenderObject* beforeChild = 0); 2078f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian virtual void addChildIgnoringContinuation(RenderObject* newChild, RenderObject* beforeChild = 0) { return addChild(newChild, beforeChild); } 2088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual void removeChild(RenderObject*); 2098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual bool createsAnonymousWrapper() const { return false; } 2108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ////////////////////////////////////////// 2118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectprotected: 2138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ////////////////////////////////////////// 2148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Helper functions. Dangerous to use! 2158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void setPreviousSibling(RenderObject* previous) { m_previous = previous; } 2168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void setNextSibling(RenderObject* next) { m_next = next; } 2178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void setParent(RenderObject* parent) { m_parent = parent; } 2188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ////////////////////////////////////////// 2198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectprivate: 2208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void addAbsoluteRectForLayer(IntRect& result); 2218f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian void setLayerNeedsFullRepaint(); 2228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectpublic: 2248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifndef NDEBUG 2258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void showTreeForThis() const; 226643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 227643ca7872b450ea4efacab6188849e5aac2ba161Steve Block void showRenderObject() const; 228643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // We don't make printedCharacters an optional parameter so that 229643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // showRenderObject can be called from gdb easily. 230643ca7872b450ea4efacab6188849e5aac2ba161Steve Block void showRenderObject(int printedCharacters) const; 231643ca7872b450ea4efacab6188849e5aac2ba161Steve Block void showRenderTreeAndMark(const RenderObject* markedObject1 = 0, const char* markedLabel1 = 0, const RenderObject* markedObject2 = 0, const char* markedLabel2 = 0, int depth = 0) const; 2328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 2338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project static RenderObject* createObject(Node*, RenderStyle*); 2358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Overloaded new operator. Derived classes must override operator new 2378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // in order to allocate out of the RenderArena. 2388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void* operator new(size_t, RenderArena*) throw(); 2398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Overridden to prevent the normal delete from being called. 2418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void operator delete(void*, size_t); 2428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectprivate: 2448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // The normal operator new is disallowed on all render objects. 2458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void* operator new(size_t) throw(); 2468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectpublic: 2488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project RenderArena* renderArena() const { return document()->renderArena(); } 2498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual bool isApplet() const { return false; } 2518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual bool isBR() const { return false; } 2528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual bool isBlockFlow() const { return false; } 2538f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian virtual bool isBoxModelObject() const { return false; } 2548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual bool isCounter() const { return false; } 255f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch virtual bool isDetails() const { return false; } 256f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch virtual bool isDetailsMarker() const { return false; } 257d0825bca7fe65beaee391d30da42e937db621564Steve Block virtual bool isEmbeddedObject() const { return false; } 2588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual bool isFieldset() const { return false; } 259643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual bool isFileUploadControl() const { return false; } 2608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual bool isFrame() const { return false; } 2618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual bool isFrameSet() const { return false; } 2628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual bool isImage() const { return false; } 2638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual bool isInlineBlockOrInlineTable() const { return false; } 2648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual bool isListBox() const { return false; } 2658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual bool isListItem() const { return false; } 2668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual bool isListMarker() const { return false; } 2678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual bool isMedia() const { return false; } 2688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual bool isMenuList() const { return false; } 2696c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen#if ENABLE(METER_TAG) 2706c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen virtual bool isMeter() const { return false; } 2716c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen#endif 272dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#if ENABLE(PROGRESS_TAG) 273dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block virtual bool isProgress() const { return false; } 274dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#endif 2758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual bool isRenderBlock() const { return false; } 2768f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian virtual bool isRenderButton() const { return false; } 277dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block virtual bool isRenderIFrame() const { return false; } 2788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual bool isRenderImage() const { return false; } 2798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual bool isRenderInline() const { return false; } 2808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual bool isRenderPart() const { return false; } 2818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual bool isRenderView() const { return false; } 282d0825bca7fe65beaee391d30da42e937db621564Steve Block virtual bool isReplica() const { return false; } 2836b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner 284643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual bool isRuby() const { return false; } 285643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual bool isRubyBase() const { return false; } 286643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual bool isRubyRun() const { return false; } 287643ca7872b450ea4efacab6188849e5aac2ba161Steve Block virtual bool isRubyText() const { return false; } 2886b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner 2898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual bool isSlider() const { return false; } 290f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch virtual bool isSummary() const { return false; } 2918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual bool isTable() const { return false; } 2928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual bool isTableCell() const { return false; } 2938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual bool isTableCol() const { return false; } 2948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual bool isTableRow() const { return false; } 2958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual bool isTableSection() const { return false; } 2968f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian virtual bool isTextControl() const { return false; } 2978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual bool isTextArea() const { return false; } 2988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual bool isTextField() const { return false; } 2990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch virtual bool isVideo() const { return false; } 3008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual bool isWidget() const { return false; } 301231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block virtual bool isCanvas() const { return false; } 302cad810f21b803229eb11403f9209855525a25d57Steve Block#if ENABLE(FULLSCREEN_API) 303cad810f21b803229eb11403f9209855525a25d57Steve Block virtual bool isRenderFullScreen() const { return false; } 304cad810f21b803229eb11403f9209855525a25d57Steve Block#endif 3058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3068f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian bool isRoot() const { return document()->documentElement() == m_node; } 3078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool isBody() const; 3088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool isHR() const; 3096b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner bool isLegend() const; 3108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool isHTMLMarquee() const; 3128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 313a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch inline bool isBeforeContent() const; 314231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block inline bool isAfterContent() const; 315a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch static inline bool isBeforeContent(const RenderObject* obj) { return obj && obj->isBeforeContent(); } 316231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block static inline bool isAfterContent(const RenderObject* obj) { return obj && obj->isAfterContent(); } 317231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 3188f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian bool childrenInline() const { return m_childrenInline; } 3198f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian void setChildrenInline(bool b = true) { m_childrenInline = b; } 3208f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian bool hasColumns() const { return m_hasColumns; } 3218f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian void setHasColumns(bool b = true) { m_hasColumns = b; } 3228f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian bool cellWidthChanged() const { return m_cellWidthChanged; } 3238f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian void setCellWidthChanged(bool b = true) { m_cellWidthChanged = b; } 3248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 325e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block virtual bool requiresForcedStyleRecalcPropagation() const { return false; } 326e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block 327d0825bca7fe65beaee391d30da42e937db621564Steve Block#if ENABLE(MATHML) 328d0825bca7fe65beaee391d30da42e937db621564Steve Block virtual bool isRenderMathMLBlock() const { return false; } 329d0825bca7fe65beaee391d30da42e937db621564Steve Block#endif // ENABLE(MATHML) 330d0825bca7fe65beaee391d30da42e937db621564Steve Block 3318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if ENABLE(SVG) 3325f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian // FIXME: Until all SVG renders can be subclasses of RenderSVGModelObject we have 3335f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian // to add SVG renderer methods to RenderObject with an ASSERT_NOT_REACHED() default implementation. 3348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual bool isSVGRoot() const { return false; } 3358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual bool isSVGContainer() const { return false; } 3366b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner virtual bool isSVGViewportContainer() const { return false; } 33721939df44de1705786c545cd1bf519d47250322dBen Murdoch virtual bool isSVGGradientStop() const { return false; } 3388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual bool isSVGHiddenContainer() const { return false; } 339a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch virtual bool isSVGPath() const { return false; } 3408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual bool isSVGText() const { return false; } 341a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch virtual bool isSVGTextPath() const { return false; } 34268513a70bcd92384395513322f1b801e7bf9c729Steve Block virtual bool isSVGInline() const { return false; } 34306ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen virtual bool isSVGInlineText() const { return false; } 3445f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian virtual bool isSVGImage() const { return false; } 345231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block virtual bool isSVGForeignObject() const { return false; } 34621939df44de1705786c545cd1bf519d47250322dBen Murdoch virtual bool isSVGResourceContainer() const { return false; } 3472fc2651226baac27029e38c9d6ef883fa32084dbSteve Block virtual bool isSVGResourceFilter() const { return false; } 3485abb8606fa57c3ebfc8b3c3dbc3fa4a25d2ae306Iain Merrick virtual bool isSVGResourceFilterPrimitive() const { return false; } 349dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block virtual bool isSVGShadowTreeRootContainer() const { return false; } 3505f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 35121939df44de1705786c545cd1bf519d47250322dBen Murdoch virtual RenderSVGResourceContainer* toRenderSVGResourceContainer(); 352d0825bca7fe65beaee391d30da42e937db621564Steve Block 353dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // FIXME: Those belong into a SVG specific base-class for all renderers (see above) 354dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // Unfortunately we don't have such a class yet, because it's not possible for all renderers 355dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // to inherit from RenderSVGObject -> RenderObject (some need RenderBlock inheritance for instance) 356dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block virtual void setNeedsTransformUpdate() { } 3575ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen virtual void setNeedsBoundariesUpdate(); 358dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 3595f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian // Per SVG 1.1 objectBoundingBox ignores clipping, masking, filter effects, opacity and stroke-width. 3605f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian // This is used for all computation of objectBoundingBox relative units and by SVGLocateable::getBBox(). 3615f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian // NOTE: Markers are not specifically ignored here by SVG 1.1 spec, but we ignore them 3625f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian // since stroke-width is ignored (and marker size can depend on stroke-width). 3635f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian // objectBoundingBox is returned local coordinates. 3645f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian // The name objectBoundingBox is taken from the SVG 1.1 spec. 3655f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian virtual FloatRect objectBoundingBox() const; 36621939df44de1705786c545cd1bf519d47250322dBen Murdoch virtual FloatRect strokeBoundingBox() const; 3675f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 3685f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian // Returns the smallest rectangle enclosing all of the painted content 3695f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian // respecting clipping, masking, filters, opacity, stroke-width and markers 3705f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian virtual FloatRect repaintRectInLocalCoordinates() const; 3715f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 3725f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian // This only returns the transform="" value from the element 3735f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian // most callsites want localToParentTransform() instead. 3748a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block virtual AffineTransform localTransform() const; 3758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3765f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian // Returns the full transform mapping from local coordinates to local coords for the parent SVG renderer 3775f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian // This includes any viewport transforms and x/y offsets as well as the transform="" value off the element. 3788a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve Block virtual const AffineTransform& localToParentTransform() const; 3795f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian 3805f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian // SVG uses FloatPoint precise hit testing, and passes the point in parent 3815f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian // coordinates instead of in repaint container coordinates. Eventually the 3825f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian // rest of the rendering tree will move to a similar model. 3835f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian virtual bool nodeAtFloatPoint(const HitTestRequest&, HitTestResult&, const FloatPoint& pointInParent, HitTestAction); 3848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 3858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool isAnonymous() const { return m_isAnonymous; } 3878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void setIsAnonymous(bool b) { m_isAnonymous = b; } 3888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool isAnonymousBlock() const 3898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 3908f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian return m_isAnonymous && style()->display() == BLOCK && style()->styleType() == NOPSEUDO && !isListMarker(); 3918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 3925af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke bool isAnonymousColumnsBlock() const { return style()->specifiesColumns() && isAnonymousBlock(); } 3935af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke bool isAnonymousColumnSpanBlock() const { return style()->columnSpan() && isAnonymousBlock(); } 394e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block bool isElementContinuation() const { return node() && node()->renderer() != this; } 395e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block bool isInlineElementContinuation() const { return isElementContinuation() && isInline(); } 396e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block bool isBlockElementContinuation() const { return isElementContinuation() && !isInline(); } 397e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block virtual RenderBoxModelObject* virtualContinuation() const { return 0; } 398e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block 3998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool isFloating() const { return m_floating; } 4008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool isPositioned() const { return m_positioned; } // absolute or fixed positioning 4018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool isRelPositioned() const { return m_relPositioned; } // relative positioning 4028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool isText() const { return m_isText; } 403635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project bool isBox() const { return m_isBox; } 4048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool isInline() const { return m_inline; } // inline object 4058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool isRunIn() const { return style()->display() == RUN_IN; } // run-in object 4068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool isDragging() const { return m_isDragging; } 4078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool isReplaced() const { return m_replaced; } // a "replaced" element (see CSS) 4088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool hasLayer() const { return m_hasLayer; } 4108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool hasBoxDecorations() const { return m_paintBackground; } 4128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool mustRepaintBackgroundOrBorder() const; 4135ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen bool hasBackground() const { return style()->hasBackground(); } 4148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool needsLayout() const { return m_needsLayout || m_normalChildNeedsLayout || m_posChildNeedsLayout || m_needsPositionedMovementLayout; } 4158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool selfNeedsLayout() const { return m_needsLayout; } 4168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool needsPositionedMovementLayout() const { return m_needsPositionedMovementLayout; } 4178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool needsPositionedMovementLayoutOnly() const { return m_needsPositionedMovementLayout && !m_needsLayout && !m_normalChildNeedsLayout && !m_posChildNeedsLayout; } 4188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool posChildNeedsLayout() const { return m_posChildNeedsLayout; } 4198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool normalChildNeedsLayout() const { return m_normalChildNeedsLayout; } 4208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 421bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen bool preferredLogicalWidthsDirty() const { return m_preferredLogicalWidthsDirty; } 4228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool isSelectionBorder() const; 4248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4258f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian bool hasClip() const { return isPositioned() && style()->hasClip(); } 4268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool hasOverflowClip() const { return m_hasOverflowClip; } 4278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool hasTransform() const { return m_hasTransform; } 4298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool hasMask() const { return style() && style()->hasMask(); } 4308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4318f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian void drawLineForBoxSide(GraphicsContext*, int x1, int y1, int x2, int y2, BoxSide, 432dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block Color, EBorderStyle, int adjbw1, int adjbw2); 433ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block#if HAVE(PATH_BASED_BORDER_RADIUS_DRAWING) 434ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block void drawBoxSideFromPath(GraphicsContext*, IntRect, Path, 435ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block float thickness, float drawThickness, BoxSide, const RenderStyle*, 436ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block Color, EBorderStyle); 437ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block#else 438ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block // FIXME: This function should be removed when all ports implement GraphicsContext::clipConvexPolygon()!! 439ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block // At that time, everyone can use RenderObject::drawBoxSideFromPath() instead. This should happen soon. 4408f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian void drawArcForBoxSide(GraphicsContext*, int x, int y, float thickness, IntSize radius, int angleStart, 441dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block int angleSpan, BoxSide, Color, EBorderStyle, bool firstCorner); 442ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block#endif 443ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block 444ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block IntRect borderInnerRect(const IntRect&, unsigned short topWidth, unsigned short bottomWidth, 445ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block unsigned short leftWidth, unsigned short rightWidth) const; 4468f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 4478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // The pseudo element style can be cached or uncached. Use the cached method if the pseudo element doesn't respect 4488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // any pseudo classes (and therefore has no concept of changing state). 4498f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian RenderStyle* getCachedPseudoStyle(PseudoId, RenderStyle* parentStyle = 0) const; 4500bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch PassRefPtr<RenderStyle> getUncachedPseudoStyle(PseudoId, RenderStyle* parentStyle = 0, RenderStyle* ownStyle = 0) const; 4518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4528f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian virtual void updateDragState(bool dragOn); 4538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project RenderView* view() const; 4558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4568f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian // Returns true if this renderer is rooted, and optionally returns the hosting view (the root of the hierarchy). 4578f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian bool isRooted(RenderView** = 0); 4588f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 4598f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian Node* node() const { return m_isAnonymous ? 0 : m_node; } 4602fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 4612fc2651226baac27029e38c9d6ef883fa32084dbSteve Block // Returns the styled node that caused the generation of this renderer. 4622fc2651226baac27029e38c9d6ef883fa32084dbSteve Block // This is the same as node() except for renderers of :before and :after 4632fc2651226baac27029e38c9d6ef883fa32084dbSteve Block // pseudo elements for which their parent node is returned. 4642fc2651226baac27029e38c9d6ef883fa32084dbSteve Block Node* generatingNode() const { return m_node == document() ? 0 : m_node; } 4658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void setNode(Node* node) { m_node = node; } 4668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 467545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch Document* document() const { return m_node->document(); } 468545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch Frame* frame() const { return document()->frame(); } 469545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch 4708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool hasOutlineAnnotation() const; 4718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool hasOutline() const { return style()->hasOutline() || hasOutlineAnnotation(); } 4728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 473231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block // Returns the object containing this one. Can be different from parent for positioned elements. 474231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block // If repaintContainer and repaintContainerSkipped are not null, on return *repaintContainerSkipped 475231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block // is true if the renderer returned is an ancestor of repaintContainer. 476231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block RenderObject* container(RenderBoxModelObject* repaintContainer = 0, bool* repaintContainerSkipped = 0) const; 477231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 4788f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian virtual RenderObject* hoverAncestor() const { return parent(); } 4798f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 4808f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian // IE Extension that can be called on any RenderObject. See the implementation for the details. 4818f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian RenderBoxModelObject* offsetParent() const; 4828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void markContainingBlocksForLayout(bool scheduleRelayout = true, RenderObject* newRoot = 0); 4848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void setNeedsLayout(bool b, bool markParents = true); 4858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void setChildNeedsLayout(bool b, bool markParents = true); 4868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void setNeedsPositionedMovementLayout(); 487bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen void setPreferredLogicalWidthsDirty(bool, bool markParents = true); 488bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen void invalidateContainerPreferredLogicalWidths(); 4898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void setNeedsLayoutAndPrefWidthsRecalc() 4918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 4928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project setNeedsLayout(true); 493bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen setPreferredLogicalWidthsDirty(true); 4948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 4958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void setPositioned(bool b = true) { m_positioned = b; } 4978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void setRelPositioned(bool b = true) { m_relPositioned = b; } 4988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void setFloating(bool b = true) { m_floating = b; } 4998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void setInline(bool b = true) { m_inline = b; } 5008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void setHasBoxDecorations(bool b = true) { m_paintBackground = b; } 501635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project void setIsText() { m_isText = true; } 502635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project void setIsBox() { m_isBox = true; } 5038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void setReplaced(bool b = true) { m_replaced = b; } 5048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void setHasOverflowClip(bool b = true) { m_hasOverflowClip = b; } 5058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void setHasLayer(bool b = true) { m_hasLayer = b; } 5068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void setHasTransform(bool b = true) { m_hasTransform = b; } 5078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void setHasReflection(bool b = true) { m_hasReflection = b; } 5088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void scheduleRelayout(); 5108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void updateFillImages(const FillLayer*, const FillLayer*); 5128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void updateImage(StyleImage*, StyleImage*); 5138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual void paint(PaintInfo&, int tx, int ty); 5158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5168f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian // Recursive function that computes the size and position of this object and all its descendants. 5178f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian virtual void layout(); 5188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project /* This function performs a layout only if one is needed. */ 5208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void layoutIfNeeded() { if (needsLayout()) layout(); } 5218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // used for element state updates that cannot be fixed with a 5238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // repaint and do not need a relayout 5248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual void updateFromElement() { } 5258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if ENABLE(DASHBOARD_SUPPORT) 5278f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian virtual void addDashboardRegions(Vector<DashboardRegionValue>&); 5288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void collectDashboardRegions(Vector<DashboardRegionValue>&); 5298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 5308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool hitTest(const HitTestRequest&, HitTestResult&, const IntPoint&, int tx, int ty, HitTestFilter = HitTestAll); 5328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual bool nodeAtPoint(const HitTestRequest&, HitTestResult&, int x, int y, int tx, int ty, HitTestAction); 5338f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian virtual void updateHitTestResult(HitTestResult&, const IntPoint&); 5348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5358f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian VisiblePosition positionForCoordinates(int x, int y); 5368f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian virtual VisiblePosition positionForPoint(const IntPoint&); 5378f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian VisiblePosition createVisiblePosition(int offset, EAffinity); 5388f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian VisiblePosition createVisiblePosition(const Position&); 5398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual void dirtyLinesFromChangedChild(RenderObject*); 5418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Called to update a style that is allowed to trigger animations. 5438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // FIXME: Right now this will typically be called only when updating happens from the DOM on explicit elements. 5448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // We don't yet handle generated content animation such as first-letter or before/after (we'll worry about this later). 5458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void setAnimatableStyle(PassRefPtr<RenderStyle>); 5468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Set the style of the object and update the state of the object accordingly. 5488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual void setStyle(PassRefPtr<RenderStyle>); 5498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Updates only the local style ptr of the object. Does not update the state of the object, 5518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // and so only should be called when the style is known not to have changed (or from setStyle). 5528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void setStyleInternal(PassRefPtr<RenderStyle>); 5538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // returns the containing block level element for this element. 5558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project RenderBlock* containingBlock() const; 5568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 557635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project // Convert the given local point to absolute coordinates 558635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project // FIXME: Temporary. If useTransforms is true, take transforms into account. Eventually localToAbsolute() will always be transform-aware. 5598f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian FloatPoint localToAbsolute(FloatPoint localPoint = FloatPoint(), bool fixed = false, bool useTransforms = false) const; 5608f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian FloatPoint absoluteToLocal(FloatPoint, bool fixed = false, bool useTransforms = false) const; 5618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 562635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project // Convert a local quad to absolute coordinates, taking transforms into account. 563635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project FloatQuad localToAbsoluteQuad(const FloatQuad& quad, bool fixed = false) const 5648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 565635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return localToContainerQuad(quad, 0, fixed); 5668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 567635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project // Convert a local quad into the coordinate system of container, taking transforms into account. 5688f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian FloatQuad localToContainerQuad(const FloatQuad&, RenderBoxModelObject* repaintContainer, bool fixed = false) const; 5698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 570692e5dbf12901edacf14812a6fae25462920af42Steve Block // Return the offset from the container() renderer (excluding transforms). In multi-column layout, 571692e5dbf12901edacf14812a6fae25462920af42Steve Block // different offsets apply at different points, so return the offset that applies to the given point. 572692e5dbf12901edacf14812a6fae25462920af42Steve Block virtual IntSize offsetFromContainer(RenderObject*, const IntPoint&) const; 573231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block // Return the offset from an object up the container() chain. Asserts that none of the intermediate objects have transforms. 574231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block IntSize offsetFromAncestorContainer(RenderObject*) const; 575635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 5765f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian virtual void absoluteRects(Vector<IntRect>&, int, int) { } 577635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project // FIXME: useTransforms should go away eventually 578635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project IntRect absoluteBoundingBoxRect(bool useTransforms = false); 5798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 580635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project // Build an array of quads in absolute coords for line boxes 5815f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian virtual void absoluteQuads(Vector<FloatQuad>&) { } 5828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 583d0825bca7fe65beaee391d30da42e937db621564Steve Block void absoluteFocusRingQuads(Vector<FloatQuad>&); 584d0825bca7fe65beaee391d30da42e937db621564Steve Block 5858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // the rect that will be painted if this object is passed as the paintingRoot 5868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project IntRect paintingRootRect(IntRect& topLevelRect); 5878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 588bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen virtual int minPreferredLogicalWidth() const { return 0; } 589bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen virtual int maxPreferredLogicalWidth() const { return 0; } 5908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project RenderStyle* style() const { return m_style.get(); } 5928f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian RenderStyle* firstLineStyle() const { return document()->usesFirstLineRules() ? firstLineStyleSlowCase() : style(); } 5938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project RenderStyle* style(bool firstLine) const { return firstLine ? firstLineStyle() : style(); } 5940bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 5950bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch // Used only by Element::pseudoStyleCacheIsInvalid to get a first line style based off of a 5960bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch // given new style, without accessing the cache. 5970bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch PassRefPtr<RenderStyle> uncachedFirstLineStyle(RenderStyle*) const; 5980bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 5998f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian // Anonymous blocks that are part of of a continuation chain will return their inline continuation's outline style instead. 6008f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian // This is typically only relevant when repainting. 6018f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian virtual RenderStyle* outlineStyleForRepaint() const { return style(); } 6028f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 6038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void getTextDecorationColors(int decorations, Color& underline, Color& overline, 6048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Color& linethrough, bool quirksMode = false); 6058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 606635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project // Return the RenderBox in the container chain which is responsible for painting this object, or 0 607635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project // if painting is root-relative. This is the container that should be passed to the 'forRepaint' 608635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project // methods. 6098f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian RenderBoxModelObject* containerForRepaint() const; 6108f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian // Actually do the repaint of rect r for this object which has been computed in the coordinate space 6118f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian // of repaintContainer. If repaintContainer is 0, repaint via the view. 6128f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian void repaintUsingContainer(RenderBoxModelObject* repaintContainer, const IntRect& r, bool immediate = false); 613635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 6148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Repaint the entire object. Called when, e.g., the color of a border changes, or when a border 6158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // style changes. 6168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void repaint(bool immediate = false); 6178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Repaint a specific subrectangle within a given object. The rect |r| is in the object's coordinate space. 6198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void repaintRectangle(const IntRect&, bool immediate = false); 6208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 621dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // Repaint only if our old bounds and new bounds are different. The caller may pass in newBounds and newOutlineBox if they are known. 622dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block bool repaintAfterLayoutIfNeeded(RenderBoxModelObject* repaintContainer, const IntRect& oldBounds, const IntRect& oldOutlineBox, const IntRect* newBoundsPtr = 0, const IntRect* newOutlineBoxPtr = 0); 6238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Repaint only if the object moved. 6258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual void repaintDuringLayoutIfMoved(const IntRect& rect); 6268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Called to repaint a block's floats. 6288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual void repaintOverhangingFloats(bool paintAllDescendants = false); 6298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool checkForRepaintDuringLayout() const; 6318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Returns the rect that should be repainted whenever this object changes. The rect is in the view's 6338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // coordinate space. This method deals with outlines and overflow. 634635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project IntRect absoluteClippedOverflowRect() 635635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project { 636635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return clippedOverflowRectForRepaint(0); 637635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project } 6388f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian virtual IntRect clippedOverflowRectForRepaint(RenderBoxModelObject* repaintContainer); 6398f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian virtual IntRect rectWithOutlineForRepaint(RenderBoxModelObject* repaintContainer, int outlineWidth); 6408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 641635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project // Given a rect in the object's coordinate space, compute a rect suitable for repainting 642635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project // that rect in view coordinates. 643635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project void computeAbsoluteRepaintRect(IntRect& r, bool fixed = false) 644635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project { 6458f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian return computeRectForRepaint(0, r, fixed); 646635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project } 647635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project // Given a rect in the object's coordinate space, compute a rect suitable for repainting 648635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project // that rect in the coordinate space of repaintContainer. 6498f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian virtual void computeRectForRepaint(RenderBoxModelObject* repaintContainer, IntRect&, bool fixed = false); 6508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 651692e5dbf12901edacf14812a6fae25462920af42Steve Block // If multiple-column layout results in applying an offset to the given point, add the same 652692e5dbf12901edacf14812a6fae25462920af42Steve Block // offset to the given size. 653692e5dbf12901edacf14812a6fae25462920af42Steve Block virtual void adjustForColumns(IntSize&, const IntPoint&) const { } 654692e5dbf12901edacf14812a6fae25462920af42Steve Block 6558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual unsigned int length() const { return 1; } 6568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool isFloatingOrPositioned() const { return (isFloating() || isPositioned()); } 6588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool isTransparent() const { return style()->opacity() < 1.0f; } 6608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project float opacity() const { return style()->opacity(); } 6618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool hasReflection() const { return m_hasReflection; } 6638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Applied as a "slop" to dirty rect checks during the outline painting phase's dirty-rect checks. 6658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project int maximalOutlineSize(PaintPhase) const; 6668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6678f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian void setHasMarkupTruncation(bool b = true) { m_hasMarkupTruncation = b; } 6688f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian bool hasMarkupTruncation() const { return m_hasMarkupTruncation; } 6698f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 6708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project enum SelectionState { 6718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project SelectionNone, // The object is not selected. 6728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project SelectionStart, // The object either contains the start of a selection run or is the start of a run 6738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project SelectionInside, // The object is fully encompassed by a selection run 6748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project SelectionEnd, // The object either contains the end of a selection run or is the end of a run 6758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project SelectionBoth // The object contains an entire run or is the sole selected object in that run 6768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project }; 6778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // The current selection state for an object. For blocks, the state refers to the state of the leaf 6798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // descendants (as described above in the SelectionState enum declaration). 6808f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian SelectionState selectionState() const { return static_cast<SelectionState>(m_selectionState);; } 6818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Sets the selection state for an object. 6838f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian virtual void setSelectionState(SelectionState state) { m_selectionState = state; } 6848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // A single rectangle that encompasses all of the selected objects within this object. Used to determine the tightest 6868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // possible bounding box for the selection. 6878f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian IntRect selectionRect(bool clipToVisibleContent = true) { return selectionRectForRepaint(0, clipToVisibleContent); } 6888f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian virtual IntRect selectionRectForRepaint(RenderBoxModelObject* /*repaintContainer*/, bool /*clipToVisibleContent*/ = true) { return IntRect(); } 6898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Whether or not an object can be part of the leaf elements of the selection. 6918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual bool canBeSelectionLeaf() const { return false; } 6928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Whether or not a block has selected children. 6948f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian bool hasSelectedChildren() const { return m_selectionState != SelectionNone; } 6958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Obtains the selection colors that should be used when painting a selection. 6978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Color selectionBackgroundColor() const; 6988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Color selectionForegroundColor() const; 699f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch Color selectionEmphasisMarkColor() const; 7008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Whether or not a given block needs to paint selection gaps. 7028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual bool shouldPaintSelectionGaps() const { return false; } 7038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 704231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#if ENABLE(DRAG_SUPPORT) 7058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Node* draggableNode(bool dhtmlOK, bool uaOK, int x, int y, bool& dhtmlWillDrag) const; 706231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#endif 7078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project /** 709635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * Returns the local coordinates of the caret within this render object. 710635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * @param caretOffset zero-based offset determining position within the render object. 7118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * @param extraWidthToEndOfLine optional out arg to give extra width to end of line - 7128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * useful for character range rect computations 7138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 714635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project virtual IntRect localCaretRect(InlineBox*, int caretOffset, int* extraWidthToEndOfLine = 0); 7158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 716bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen bool isMarginBeforeQuirk() const { return m_marginBeforeQuirk; } 717bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen bool isMarginAfterQuirk() const { return m_marginAfterQuirk; } 718bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen void setMarginBeforeQuirk(bool b = true) { m_marginBeforeQuirk = b; } 719bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen void setMarginAfterQuirk(bool b = true) { m_marginAfterQuirk = b; } 7208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // When performing a global document tear-down, the renderer of the document is cleared. We use this 7228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // as a hook to detect the case of document destruction and don't waste time doing unnecessary work. 7238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool documentBeingDestroyed() const; 7248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual void destroy(); 7268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Virtual function helpers for CSS3 Flexible Box Layout 7288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual bool isFlexibleBox() const { return false; } 7298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual bool isFlexingChildren() const { return false; } 7308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual bool isStretchingChildren() const { return false; } 7318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual int caretMinOffset() const; 7338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual int caretMaxOffset() const; 7348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual unsigned caretMaxRenderedOffset() const; 7358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual int previousOffset(int current) const; 7378f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian virtual int previousOffsetForBackwardDeletion(int current) const; 7388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual int nextOffset(int current) const; 7398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 740635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project virtual void imageChanged(CachedImage*, const IntRect* = 0); 741635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project virtual void imageChanged(WrappedImagePtr, const IntRect* = 0) { } 7428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual bool willRenderImage(CachedImage*); 7438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7448f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian void selectionStartEnd(int& spos, int& epos) const; 7458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool hasOverrideSize() const { return m_hasOverrideSize; } 7478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void setHasOverrideSize(bool b) { m_hasOverrideSize = b; } 7488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void remove() { if (parent()) parent()->removeChild(this); } 7508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project AnimationController* animation() const; 7528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 753635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project bool visibleToHitTesting() const { return style()->visibility() == VISIBLE && style()->pointerEvents() != PE_NONE; } 7548f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 7558f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian // Map points and quads through elements, potentially via 3d transforms. You should never need to call these directly; use 7568f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian // localToAbsolute/absoluteToLocal methods instead. 7578f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian virtual void mapLocalToContainer(RenderBoxModelObject* repaintContainer, bool useTransforms, bool fixed, TransformState&) const; 7588f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian virtual void mapAbsoluteToLocalPoint(bool fixed, bool useTransforms, TransformState&) const; 7598f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 7605f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian bool shouldUseTransformFromContainer(const RenderObject* container) const; 7615f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian void getTransformFromContainer(const RenderObject* container, const IntSize& offsetInContainer, TransformationMatrix&) const; 762635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 763d0825bca7fe65beaee391d30da42e937db621564Steve Block virtual void addFocusRingRects(Vector<IntRect>&, int /*tx*/, int /*ty*/) { }; 764635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 765635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project IntRect absoluteOutlineBounds() const 766635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project { 767635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return outlineBoundsForRepaint(0); 768635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project } 769635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 7708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectprotected: 7718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Overrides should call the superclass at the end 7728f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian virtual void styleWillChange(StyleDifference, const RenderStyle* newStyle); 7738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Overrides should call the superclass at the start 7748f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian virtual void styleDidChange(StyleDifference, const RenderStyle* oldStyle); 7758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 776a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch void paintFocusRing(GraphicsContext*, int tx, int ty, RenderStyle*); 777dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block void paintOutline(GraphicsContext*, int tx, int ty, int w, int h); 778635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project void addPDFURLRect(GraphicsContext*, const IntRect&); 779635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 7808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual IntRect viewRect() const; 7818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void adjustRectForOutlineAndShadow(IntRect&) const; 7838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void arenaDelete(RenderArena*, void* objectBase); 7858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 786dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block virtual IntRect outlineBoundsForRepaint(RenderBoxModelObject* /*repaintContainer*/, IntPoint* /*cachedOffsetToRepaintContainer*/ = 0) const { return IntRect(); } 787635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 7888f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian class LayoutRepainter { 7898f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian public: 7908f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian LayoutRepainter(RenderObject& object, bool checkForRepaint, const IntRect* oldBounds = 0) 7918f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian : m_object(object) 7928f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian , m_repaintContainer(0) 7938f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian , m_checkForRepaint(checkForRepaint) 7948f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian { 7958f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian if (m_checkForRepaint) { 7968f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian m_repaintContainer = m_object.containerForRepaint(); 7978f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian m_oldBounds = oldBounds ? *oldBounds : m_object.clippedOverflowRectForRepaint(m_repaintContainer); 7988f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian m_oldOutlineBox = m_object.outlineBoundsForRepaint(m_repaintContainer); 7998f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian } 8008f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian } 8018f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 8028f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian // Return true if it repainted. 8038f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian bool repaintAfterLayout() 8048f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian { 8058f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian return m_checkForRepaint ? m_object.repaintAfterLayoutIfNeeded(m_repaintContainer, m_oldBounds, m_oldOutlineBox) : false; 8068f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian } 8078f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 8088f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian bool checkForRepaint() const { return m_checkForRepaint; } 8098f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 8108f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian private: 8118f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian RenderObject& m_object; 8128f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian RenderBoxModelObject* m_repaintContainer; 8138f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian IntRect m_oldBounds; 8148f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian IntRect m_oldOutlineBox; 8158f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian bool m_checkForRepaint; 8168f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian }; 8178f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 8188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectprivate: 8198f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian RenderStyle* firstLineStyleSlowCase() const; 8208f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian StyleDifference adjustStyleDifference(StyleDifference, unsigned contextSensitiveProperties) const; 821f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 822f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch Color selectionColor(int colorProperty) const; 8238f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 8248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project RefPtr<RenderStyle> m_style; 8258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 8268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Node* m_node; 8278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 8288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project RenderObject* m_parent; 8298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project RenderObject* m_previous; 8308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project RenderObject* m_next; 8318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 8328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifndef NDEBUG 8338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool m_hasAXObject; 834635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project bool m_setNeedsLayoutForbidden : 1; 8358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 8368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 8378f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian // 32 bits have been used here. THERE ARE NO FREE BITS AVAILABLE. 8388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool m_needsLayout : 1; 8398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool m_needsPositionedMovementLayout :1; 8408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool m_normalChildNeedsLayout : 1; 8418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool m_posChildNeedsLayout : 1; 842bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen bool m_preferredLogicalWidthsDirty : 1; 8438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool m_floating : 1; 8448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 8458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool m_positioned : 1; 8468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool m_relPositioned : 1; 8478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool m_paintBackground : 1; // if the box has something to paint in the 8488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // background painting phase (background, border, etc) 8498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 8508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool m_isAnonymous : 1; 8518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool m_isText : 1; 852635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project bool m_isBox : 1; 8538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool m_inline : 1; 8548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool m_replaced : 1; 8558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool m_isDragging : 1; 8568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 8578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool m_hasLayer : 1; 858e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block bool m_hasOverflowClip : 1; // Set in the case of overflow:auto/scroll/hidden 8598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool m_hasTransform : 1; 8608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool m_hasReflection : 1; 8618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 8628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool m_hasOverrideSize : 1; 8638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 8648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectpublic: 8658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool m_hasCounterNodeMap : 1; 8668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool m_everHadLayout : 1; 8678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 8688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectprivate: 8698f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian // These bitfields are moved here from subclasses to pack them together 8708f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian // from RenderBlock 8718f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian bool m_childrenInline : 1; 872bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen bool m_marginBeforeQuirk : 1; 873bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen bool m_marginAfterQuirk : 1; 8748f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian bool m_hasMarkupTruncation : 1; 8758f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian unsigned m_selectionState : 3; // SelectionState 8768f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian bool m_hasColumns : 1; 8778f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 8788f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian // from RenderTableCell 8798f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian bool m_cellWidthChanged : 1; 8808f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 8818f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qianprivate: 8828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Store state between styleWillChange and styleDidChange 8838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project static bool s_affectsParentBlock; 8848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}; 8858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 8868f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qianinline bool RenderObject::documentBeingDestroyed() const 8878f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian{ 8888f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian return !document()->renderer(); 8898f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian} 8908f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 891a94275402997c11dd2e778633dacf4b7e630a35dBen Murdochinline bool RenderObject::isBeforeContent() const 892a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch{ 893a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch if (style()->styleType() != BEFORE) 894a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch return false; 895a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch // Text nodes don't have their own styles, so ignore the style on a text node. 896a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch if (isText() && !isBR()) 897a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch return false; 898a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch return true; 899a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch} 900a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 901231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockinline bool RenderObject::isAfterContent() const 902231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{ 903231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block if (style()->styleType() != AFTER) 904231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block return false; 905231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block // Text nodes don't have their own styles, so ignore the style on a text node. 906231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block if (isText() && !isBR()) 907231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block return false; 908231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block return true; 909231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block} 910231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 9118f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qianinline void RenderObject::setNeedsLayout(bool b, bool markParents) 9128f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian{ 9138f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian bool alreadyNeededLayout = m_needsLayout; 9148f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian m_needsLayout = b; 9158f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian if (b) { 9168f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian ASSERT(!isSetNeedsLayoutForbidden()); 9178f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian if (!alreadyNeededLayout) { 9188f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian if (markParents) 9198f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian markContainingBlocksForLayout(); 9208f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian if (hasLayer()) 9218f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian setLayerNeedsFullRepaint(); 9228f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian } 9238f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian } else { 9248f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian m_everHadLayout = true; 9258f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian m_posChildNeedsLayout = false; 9268f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian m_normalChildNeedsLayout = false; 9278f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian m_needsPositionedMovementLayout = false; 9288f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian } 9298f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian} 9308f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 9318f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qianinline void RenderObject::setChildNeedsLayout(bool b, bool markParents) 9328f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian{ 9338f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian bool alreadyNeededLayout = m_normalChildNeedsLayout; 9348f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian m_normalChildNeedsLayout = b; 9358f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian if (b) { 9368f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian ASSERT(!isSetNeedsLayoutForbidden()); 9378f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian if (!alreadyNeededLayout && markParents) 9388f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian markContainingBlocksForLayout(); 9398f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian } else { 9408f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian m_posChildNeedsLayout = false; 9418f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian m_normalChildNeedsLayout = false; 9428f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian m_needsPositionedMovementLayout = false; 9438f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian } 9448f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian} 9458f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 9468f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qianinline void RenderObject::setNeedsPositionedMovementLayout() 9478f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian{ 9488f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian bool alreadyNeededLayout = needsLayout(); 9498f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian m_needsPositionedMovementLayout = true; 9508f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian if (!alreadyNeededLayout) { 9518f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian markContainingBlocksForLayout(); 9528f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian if (hasLayer()) 9538f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian setLayerNeedsFullRepaint(); 9548f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian } 9558f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian} 9568f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 9578f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qianinline bool objectIsRelayoutBoundary(const RenderObject *obj) 9588f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian{ 9598f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian // FIXME: In future it may be possible to broaden this condition in order to improve performance. 9608f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian // Table cells are excluded because even when their CSS height is fixed, their height() 9618f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian // may depend on their contents. 9628f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian return obj->isTextControl() 9638f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian || (obj->hasOverflowClip() && !obj->style()->width().isIntrinsicOrAuto() && !obj->style()->height().isIntrinsicOrAuto() && !obj->style()->height().isPercent() && !obj->isTableCell()) 9648f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#if ENABLE(SVG) 9658f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian || obj->isSVGRoot() 9668f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#endif 9678f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian ; 9688f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian} 9698f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 9708f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qianinline void RenderObject::markContainingBlocksForLayout(bool scheduleRelayout, RenderObject* newRoot) 9718f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian{ 9728f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian ASSERT(!scheduleRelayout || !newRoot); 9738f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 9748f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian RenderObject* o = container(); 9758f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian RenderObject* last = this; 9768f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 9778f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian while (o) { 9788f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian // Don't mark the outermost object of an unrooted subtree. That object will be 9798f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian // marked when the subtree is added to the document. 9808f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian RenderObject* container = o->container(); 9818f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian if (!container && !o->isRenderView()) 9828f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian return; 9838f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian if (!last->isText() && (last->style()->position() == FixedPosition || last->style()->position() == AbsolutePosition)) { 9848f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian if ((last->style()->top().isAuto() && last->style()->bottom().isAuto()) || last->style()->top().isStatic()) { 9858f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian RenderObject* parent = last->parent(); 9868f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian if (!parent->normalChildNeedsLayout()) { 9878f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian parent->setChildNeedsLayout(true, false); 9888f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian if (parent != newRoot) 9898f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian parent->markContainingBlocksForLayout(scheduleRelayout, newRoot); 9908f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian } 9918f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian } 9928f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian if (o->m_posChildNeedsLayout) 9938f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian return; 9948f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian o->m_posChildNeedsLayout = true; 9958f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian ASSERT(!o->isSetNeedsLayoutForbidden()); 9968f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian } else { 9978f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian if (o->m_normalChildNeedsLayout) 9988f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian return; 9998f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian o->m_normalChildNeedsLayout = true; 10008f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian ASSERT(!o->isSetNeedsLayoutForbidden()); 10018f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian } 10028f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 10038f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian if (o == newRoot) 10048f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian return; 10058f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 10068f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian last = o; 10078f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian if (scheduleRelayout && objectIsRelayoutBoundary(last)) 10088f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian break; 10098f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian o = container; 10108f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian } 10118f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 10128f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian if (scheduleRelayout) 10138f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian last->scheduleRelayout(); 10148f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian} 10158f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 10160bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochinline void makeMatrixRenderable(TransformationMatrix& matrix, bool has3DRendering) 10178f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian{ 10188f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#if !ENABLE(3D_RENDERING) 10190bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch UNUSED_PARAM(has3DRendering); 10208f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian matrix.makeAffine(); 10218f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#else 10220bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!has3DRendering) 10230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch matrix.makeAffine(); 10248f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#endif 10258f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian} 10268f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 1027231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockinline int adjustForAbsoluteZoom(int value, RenderObject* renderer) 1028231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{ 102968513a70bcd92384395513322f1b801e7bf9c729Steve Block return adjustForAbsoluteZoom(value, renderer->style()); 1030231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block} 1031231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 1032231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockinline FloatPoint adjustFloatPointForAbsoluteZoom(const FloatPoint& point, RenderObject* renderer) 1033231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{ 1034231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block // The result here is in floats, so we don't need the truncation hack from the integer version above. 1035231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block float zoomFactor = renderer->style()->effectiveZoom(); 1036231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block if (zoomFactor == 1) 1037231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block return point; 1038231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block return FloatPoint(point.x() / zoomFactor, point.y() / zoomFactor); 1039231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block} 1040231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 1041231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockinline void adjustFloatQuadForAbsoluteZoom(FloatQuad& quad, RenderObject* renderer) 1042231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{ 1043231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block quad.setP1(adjustFloatPointForAbsoluteZoom(quad.p1(), renderer)); 1044231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block quad.setP2(adjustFloatPointForAbsoluteZoom(quad.p2(), renderer)); 1045231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block quad.setP3(adjustFloatPointForAbsoluteZoom(quad.p3(), renderer)); 1046231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block quad.setP4(adjustFloatPointForAbsoluteZoom(quad.p4(), renderer)); 1047231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block} 1048231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 1049f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochinline void adjustFloatRectForAbsoluteZoom(FloatRect& rect, RenderObject* renderer) 1050f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch{ 1051f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch RenderStyle* style = renderer->style(); 1052f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch rect.setX(adjustFloatForAbsoluteZoom(rect.x(), style)); 1053f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch rect.setY(adjustFloatForAbsoluteZoom(rect.y(), style)); 1054f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch rect.setWidth(adjustFloatForAbsoluteZoom(rect.width(), style)); 1055f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch rect.setHeight(adjustFloatForAbsoluteZoom(rect.height(), style)); 1056f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch} 1057f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 10588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} // namespace WebCore 10598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 10608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifndef NDEBUG 10618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// Outside the WebCore namespace for ease of invocation from gdb. 10628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid showTree(const WebCore::RenderObject*); 1063643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockvoid showRenderTree(const WebCore::RenderObject* object1); 1064643ca7872b450ea4efacab6188849e5aac2ba161Steve Block// We don't make object2 an optional parameter so that showRenderTree 1065643ca7872b450ea4efacab6188849e5aac2ba161Steve Block// can be called from gdb easily. 1066643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockvoid showRenderTree(const WebCore::RenderObject* object1, const WebCore::RenderObject* object2); 10678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 10688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 10698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif // RenderObject_h 1070