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 402daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#if USE(CG) || USE(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 822daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch// Sides used when drawing borders and outlines. The values should run clockwise from top. 838f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qianenum BoxSide { 848f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian BSTop, 852daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch BSRight, 868f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian BSBottom, 872daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch BSLeft 888f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian}; 898f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 908f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qianconst int caretWidth = 1; 918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if ENABLE(DASHBOARD_SUPPORT) 938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstruct DashboardRegionValue { 948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool operator==(const DashboardRegionValue& o) const 958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return type == o.type && bounds == o.bounds && clip == o.clip && label == o.label; 978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool operator!=(const DashboardRegionValue& o) const 998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 1008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return !(*this == o); 1018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project String label; 1048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project IntRect bounds; 1058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project IntRect clip; 1068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project int type; 1078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}; 1088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 1098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// Base class for all rendering tree objects. 1118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass RenderObject : public CachedResourceClient { 1128f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian friend class RenderBlock; 1138f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian friend class RenderBox; 1148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project friend class RenderLayer; 1158f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian friend class RenderObjectChildList; 116635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project friend class RenderSVGContainer; 1178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectpublic: 1188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Anonymous objects should pass the document as their node, and they will then automatically be 1198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // marked as anonymous in the constructor. 1208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project RenderObject(Node*); 1218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual ~RenderObject(); 1228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1230bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch RenderTheme* theme() const; 1240bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 1258f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian virtual const char* renderName() const = 0; 1268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project RenderObject* parent() const { return m_parent; } 1288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool isDescendantOf(const RenderObject*) const; 1298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project RenderObject* previousSibling() const { return m_previous; } 1318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project RenderObject* nextSibling() const { return m_next; } 1328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1338f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian RenderObject* firstChild() const 1348f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian { 1358f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian if (const RenderObjectChildList* children = virtualChildren()) 1368f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian return children->firstChild(); 1378f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian return 0; 1388f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian } 1398f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian RenderObject* lastChild() const 1408f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian { 1418f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian if (const RenderObjectChildList* children = virtualChildren()) 1428f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian return children->lastChild(); 1438f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian return 0; 1448f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian } 1452fc2651226baac27029e38c9d6ef883fa32084dbSteve Block RenderObject* beforePseudoElementRenderer() const 1462fc2651226baac27029e38c9d6ef883fa32084dbSteve Block { 1472fc2651226baac27029e38c9d6ef883fa32084dbSteve Block if (const RenderObjectChildList* children = virtualChildren()) 1482fc2651226baac27029e38c9d6ef883fa32084dbSteve Block return children->beforePseudoElementRenderer(this); 1492fc2651226baac27029e38c9d6ef883fa32084dbSteve Block return 0; 1502fc2651226baac27029e38c9d6ef883fa32084dbSteve Block } 1512fc2651226baac27029e38c9d6ef883fa32084dbSteve Block RenderObject* afterPseudoElementRenderer() const 1522fc2651226baac27029e38c9d6ef883fa32084dbSteve Block { 1532fc2651226baac27029e38c9d6ef883fa32084dbSteve Block if (const RenderObjectChildList* children = virtualChildren()) 1542fc2651226baac27029e38c9d6ef883fa32084dbSteve Block return children->afterPseudoElementRenderer(this); 1552fc2651226baac27029e38c9d6ef883fa32084dbSteve Block return 0; 1562fc2651226baac27029e38c9d6ef883fa32084dbSteve Block } 1578f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian virtual RenderObjectChildList* virtualChildren() { return 0; } 1588f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian virtual const RenderObjectChildList* virtualChildren() const { return 0; } 1598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project RenderObject* nextInPreOrder() const; 1619a26d18f4c7e98b479be700575d003f873214550John Reck RenderObject* nextInPreOrder(const RenderObject* stayWithin) const; 1628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project RenderObject* nextInPreOrderAfterChildren() const; 1639a26d18f4c7e98b479be700575d003f873214550John Reck RenderObject* nextInPreOrderAfterChildren(const RenderObject* stayWithin) const; 1648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project RenderObject* previousInPreOrder() const; 1658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project RenderObject* childAt(unsigned) const; 1668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project RenderObject* firstLeafChild() const; 1688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project RenderObject* lastLeafChild() const; 1698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1708f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian // The following six functions are used when the render tree hierarchy changes to make sure layers get 171635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project // properly added and removed. Since containership can be implemented by any subclass, and since a hierarchy 172635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project // can contain a mixture of boxes and other object types, these functions need to be in the base class. 1738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project RenderLayer* enclosingLayer() const; 1748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void addLayers(RenderLayer* parentLayer, RenderObject* newObject); 1758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void removeLayers(RenderLayer* parentLayer); 1768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void moveLayers(RenderLayer* oldParent, RenderLayer* newParent); 1778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project RenderLayer* findNextLayer(RenderLayer* parentLayer, RenderObject* startPoint, bool checkParent = true); 1788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 179635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project // Convenience function for getting to the nearest enclosing box of a RenderObject. 180635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project RenderBox* enclosingBox() const; 181e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke RenderBoxModelObject* enclosingBoxModelObject() const; 182e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke 1838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual bool isEmpty() const { return firstChild() == 0; } 1848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifndef NDEBUG 1868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void setHasAXObject(bool flag) { m_hasAXObject = flag; } 1878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool hasAXObject() const { return m_hasAXObject; } 188635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project bool isSetNeedsLayoutForbidden() const { return m_setNeedsLayoutForbidden; } 189635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project void setNeedsLayoutIsForbidden(bool flag) { m_setNeedsLayoutForbidden = flag; } 1908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 1918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Obtains the nearest enclosing block (including this block) that contributes a first-line style to our inline 1938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // children. 1948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual RenderBlock* firstLineBlock() const; 1958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Called when an object that was floating or positioned becomes a normal flow object 1978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // again. We have to make sure the render tree updates as needed to accommodate the new 1988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // normal flow object. 1998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void handleDynamicFloatPositionChange(); 2008f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 2018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // RenderObject tree manipulation 2028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ////////////////////////////////////////// 2038f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian virtual bool canHaveChildren() const { return virtualChildren(); } 2048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual bool isChildAllowed(RenderObject*, RenderStyle*) const { return true; } 2058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual void addChild(RenderObject* newChild, RenderObject* beforeChild = 0); 2068f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian virtual void addChildIgnoringContinuation(RenderObject* newChild, RenderObject* beforeChild = 0) { return addChild(newChild, beforeChild); } 2078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual void removeChild(RenderObject*); 2088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual bool createsAnonymousWrapper() const { return false; } 2098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ////////////////////////////////////////// 2108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectprotected: 2128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ////////////////////////////////////////// 2138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Helper functions. Dangerous to use! 2148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void setPreviousSibling(RenderObject* previous) { m_previous = previous; } 2158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void setNextSibling(RenderObject* next) { m_next = next; } 2168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void setParent(RenderObject* parent) { m_parent = parent; } 2178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ////////////////////////////////////////// 2188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectprivate: 2198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void addAbsoluteRectForLayer(IntRect& result); 2208f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian void setLayerNeedsFullRepaint(); 2218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectpublic: 2238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifndef NDEBUG 2248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void showTreeForThis() const; 225643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 226643ca7872b450ea4efacab6188849e5aac2ba161Steve Block void showRenderObject() const; 227643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // We don't make printedCharacters an optional parameter so that 228643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // showRenderObject can be called from gdb easily. 229643ca7872b450ea4efacab6188849e5aac2ba161Steve Block void showRenderObject(int printedCharacters) const; 230643ca7872b450ea4efacab6188849e5aac2ba161Steve Block void showRenderTreeAndMark(const RenderObject* markedObject1 = 0, const char* markedLabel1 = 0, const RenderObject* markedObject2 = 0, const char* markedLabel2 = 0, int depth = 0) const; 2318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 2328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project static RenderObject* createObject(Node*, RenderStyle*); 2348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Overloaded new operator. Derived classes must override operator new 2368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // in order to allocate out of the RenderArena. 2378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void* operator new(size_t, RenderArena*) throw(); 2388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Overridden to prevent the normal delete from being called. 2408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void operator delete(void*, size_t); 2418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectprivate: 2438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // The normal operator new is disallowed on all render objects. 2448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void* operator new(size_t) throw(); 2458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectpublic: 2478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project RenderArena* renderArena() const { return document()->renderArena(); } 2488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual bool isApplet() const { return false; } 2508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual bool isBR() const { return false; } 2518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual bool isBlockFlow() const { return false; } 2528f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian virtual bool isBoxModelObject() const { return false; } 2538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual bool isCounter() const { return false; } 25481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch virtual bool isQuote() 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; 315c58b6b265aa9aca56296a4c1199521fe4ab3cb70Steve Block inline bool isBeforeOrAfterContent() const; 316a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch static inline bool isBeforeContent(const RenderObject* obj) { return obj && obj->isBeforeContent(); } 317231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block static inline bool isAfterContent(const RenderObject* obj) { return obj && obj->isAfterContent(); } 31805c44efdceb09e0a5066c1f2ae06a5f19fd7fc6cVictoria Lease static inline bool isBeforeOrAfterContent(const RenderObject* obj) { return obj && obj->isBeforeOrAfterContent(); } 319231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 3208f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian bool childrenInline() const { return m_childrenInline; } 3218f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian void setChildrenInline(bool b = true) { m_childrenInline = b; } 3228f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian bool hasColumns() const { return m_hasColumns; } 3238f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian void setHasColumns(bool b = true) { m_hasColumns = 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 { 3902bde8e466a4451c7319e3a072d118917957d6554Steve Block // This function is kept in sync with anonymous block creation conditions in 3912bde8e466a4451c7319e3a072d118917957d6554Steve Block // RenderBlock::createAnonymousBlock(). This includes creating an anonymous 3922bde8e466a4451c7319e3a072d118917957d6554Steve Block // RenderBlock having a BLOCK or BOX display. Other classes such as RenderTextFragment 3932bde8e466a4451c7319e3a072d118917957d6554Steve Block // are not RenderBlocks and will return false. See https://bugs.webkit.org/show_bug.cgi?id=56709. 3942bde8e466a4451c7319e3a072d118917957d6554Steve Block return m_isAnonymous && (style()->display() == BLOCK || style()->display() == BOX) && style()->styleType() == NOPSEUDO && isRenderBlock() && !isListMarker(); 3958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 3965af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke bool isAnonymousColumnsBlock() const { return style()->specifiesColumns() && isAnonymousBlock(); } 3975af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke bool isAnonymousColumnSpanBlock() const { return style()->columnSpan() && isAnonymousBlock(); } 398e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block bool isElementContinuation() const { return node() && node()->renderer() != this; } 399e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block bool isInlineElementContinuation() const { return isElementContinuation() && isInline(); } 400e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block bool isBlockElementContinuation() const { return isElementContinuation() && !isInline(); } 401e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block virtual RenderBoxModelObject* virtualContinuation() const { return 0; } 402e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block 4038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool isFloating() const { return m_floating; } 4048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool isPositioned() const { return m_positioned; } // absolute or fixed positioning 4058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool isRelPositioned() const { return m_relPositioned; } // relative positioning 4068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool isText() const { return m_isText; } 407635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project bool isBox() const { return m_isBox; } 4088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool isInline() const { return m_inline; } // inline object 4098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool isRunIn() const { return style()->display() == RUN_IN; } // run-in object 4108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool isDragging() const { return m_isDragging; } 4118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool isReplaced() const { return m_replaced; } // a "replaced" element (see CSS) 4122bde8e466a4451c7319e3a072d118917957d6554Steve Block bool isHorizontalWritingMode() const { return m_horizontalWritingMode; } 4132bde8e466a4451c7319e3a072d118917957d6554Steve Block 4148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool hasLayer() const { return m_hasLayer; } 4158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool hasBoxDecorations() const { return m_paintBackground; } 4178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool mustRepaintBackgroundOrBorder() const; 4185ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen bool hasBackground() const { return style()->hasBackground(); } 4192bde8e466a4451c7319e3a072d118917957d6554Steve Block bool needsLayout() const { return m_needsLayout || m_normalChildNeedsLayout || m_posChildNeedsLayout || m_needsSimplifiedNormalFlowLayout || m_needsPositionedMovementLayout; } 4208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool selfNeedsLayout() const { return m_needsLayout; } 4218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool needsPositionedMovementLayout() const { return m_needsPositionedMovementLayout; } 4222bde8e466a4451c7319e3a072d118917957d6554Steve Block bool needsPositionedMovementLayoutOnly() const { return m_needsPositionedMovementLayout && !m_needsLayout && !m_normalChildNeedsLayout && !m_posChildNeedsLayout && !m_needsSimplifiedNormalFlowLayout; } 4238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool posChildNeedsLayout() const { return m_posChildNeedsLayout; } 4242bde8e466a4451c7319e3a072d118917957d6554Steve Block bool needsSimplifiedNormalFlowLayout() const { return m_needsSimplifiedNormalFlowLayout; } 4258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool normalChildNeedsLayout() const { return m_normalChildNeedsLayout; } 4268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 427bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen bool preferredLogicalWidthsDirty() const { return m_preferredLogicalWidthsDirty; } 4288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool isSelectionBorder() const; 4308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4318f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian bool hasClip() const { return isPositioned() && style()->hasClip(); } 4328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool hasOverflowClip() const { return m_hasOverflowClip; } 4338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool hasTransform() const { return m_hasTransform; } 4358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool hasMask() const { return style() && style()->hasMask(); } 4368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4372daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch inline bool preservesNewline() const; 4382daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 4392daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#if !HAVE(PATH_BASED_BORDER_RADIUS_DRAWING) 440ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block // FIXME: This function should be removed when all ports implement GraphicsContext::clipConvexPolygon()!! 441ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block // At that time, everyone can use RenderObject::drawBoxSideFromPath() instead. This should happen soon. 4422bde8e466a4451c7319e3a072d118917957d6554Steve Block void drawArcForBoxSide(GraphicsContext*, int x, int y, float thickness, const IntSize& radius, int angleStart, 443dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block int angleSpan, BoxSide, Color, EBorderStyle, bool firstCorner); 444ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block#endif 445ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block 446ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block IntRect borderInnerRect(const IntRect&, unsigned short topWidth, unsigned short bottomWidth, 447ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block unsigned short leftWidth, unsigned short rightWidth) const; 4488f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 4498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // The pseudo element style can be cached or uncached. Use the cached method if the pseudo element doesn't respect 4508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // any pseudo classes (and therefore has no concept of changing state). 4518f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian RenderStyle* getCachedPseudoStyle(PseudoId, RenderStyle* parentStyle = 0) const; 4520bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch PassRefPtr<RenderStyle> getUncachedPseudoStyle(PseudoId, RenderStyle* parentStyle = 0, RenderStyle* ownStyle = 0) const; 4538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4548f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian virtual void updateDragState(bool dragOn); 4558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project RenderView* view() const; 4578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4588f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian // Returns true if this renderer is rooted, and optionally returns the hosting view (the root of the hierarchy). 4598f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian bool isRooted(RenderView** = 0); 4608f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 4618f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian Node* node() const { return m_isAnonymous ? 0 : m_node; } 4622fc2651226baac27029e38c9d6ef883fa32084dbSteve Block 4632fc2651226baac27029e38c9d6ef883fa32084dbSteve Block // Returns the styled node that caused the generation of this renderer. 4642fc2651226baac27029e38c9d6ef883fa32084dbSteve Block // This is the same as node() except for renderers of :before and :after 4652fc2651226baac27029e38c9d6ef883fa32084dbSteve Block // pseudo elements for which their parent node is returned. 4662fc2651226baac27029e38c9d6ef883fa32084dbSteve Block Node* generatingNode() const { return m_node == document() ? 0 : m_node; } 4678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void setNode(Node* node) { m_node = node; } 4688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 469545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch Document* document() const { return m_node->document(); } 470545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch Frame* frame() const { return document()->frame(); } 471545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch 4728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool hasOutlineAnnotation() const; 4738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool hasOutline() const { return style()->hasOutline() || hasOutlineAnnotation(); } 4748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 475231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block // Returns the object containing this one. Can be different from parent for positioned elements. 476231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block // If repaintContainer and repaintContainerSkipped are not null, on return *repaintContainerSkipped 477231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block // is true if the renderer returned is an ancestor of repaintContainer. 478231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block RenderObject* container(RenderBoxModelObject* repaintContainer = 0, bool* repaintContainerSkipped = 0) const; 479231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 4808f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian virtual RenderObject* hoverAncestor() const { return parent(); } 4818f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 4828f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian // IE Extension that can be called on any RenderObject. See the implementation for the details. 4838f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian RenderBoxModelObject* offsetParent() const; 4848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void markContainingBlocksForLayout(bool scheduleRelayout = true, RenderObject* newRoot = 0); 4868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void setNeedsLayout(bool b, bool markParents = true); 4878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void setChildNeedsLayout(bool b, bool markParents = true); 4888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void setNeedsPositionedMovementLayout(); 4892bde8e466a4451c7319e3a072d118917957d6554Steve Block void setNeedsSimplifiedNormalFlowLayout(); 490bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen void setPreferredLogicalWidthsDirty(bool, bool markParents = true); 491bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen void invalidateContainerPreferredLogicalWidths(); 4928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void setNeedsLayoutAndPrefWidthsRecalc() 4948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 4958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project setNeedsLayout(true); 496bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen setPreferredLogicalWidthsDirty(true); 4978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 4988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void setPositioned(bool b = true) { m_positioned = b; } 5008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void setRelPositioned(bool b = true) { m_relPositioned = b; } 5018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void setFloating(bool b = true) { m_floating = b; } 5028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void setInline(bool b = true) { m_inline = b; } 5038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void setHasBoxDecorations(bool b = true) { m_paintBackground = b; } 504635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project void setIsText() { m_isText = true; } 505635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project void setIsBox() { m_isBox = true; } 5068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void setReplaced(bool b = true) { m_replaced = b; } 5072bde8e466a4451c7319e3a072d118917957d6554Steve Block void setHorizontalWritingMode(bool b = true) { m_horizontalWritingMode = b; } 5088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void setHasOverflowClip(bool b = true) { m_hasOverflowClip = b; } 5098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void setHasLayer(bool b = true) { m_hasLayer = b; } 5108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void setHasTransform(bool b = true) { m_hasTransform = b; } 5118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void setHasReflection(bool b = true) { m_hasReflection = b; } 5128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void scheduleRelayout(); 5148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void updateFillImages(const FillLayer*, const FillLayer*); 5168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void updateImage(StyleImage*, StyleImage*); 5178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual void paint(PaintInfo&, int tx, int ty); 5198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5208f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian // Recursive function that computes the size and position of this object and all its descendants. 5218f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian virtual void layout(); 5228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project /* This function performs a layout only if one is needed. */ 5248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void layoutIfNeeded() { if (needsLayout()) layout(); } 5258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // used for element state updates that cannot be fixed with a 5278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // repaint and do not need a relayout 5288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual void updateFromElement() { } 5298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if ENABLE(DASHBOARD_SUPPORT) 5318f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian virtual void addDashboardRegions(Vector<DashboardRegionValue>&); 5328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void collectDashboardRegions(Vector<DashboardRegionValue>&); 5338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 5348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool hitTest(const HitTestRequest&, HitTestResult&, const IntPoint&, int tx, int ty, HitTestFilter = HitTestAll); 5368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual bool nodeAtPoint(const HitTestRequest&, HitTestResult&, int x, int y, int tx, int ty, HitTestAction); 5378f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian virtual void updateHitTestResult(HitTestResult&, const IntPoint&); 5388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5398f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian VisiblePosition positionForCoordinates(int x, int y); 5408f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian virtual VisiblePosition positionForPoint(const IntPoint&); 5418f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian VisiblePosition createVisiblePosition(int offset, EAffinity); 5428f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian VisiblePosition createVisiblePosition(const Position&); 5438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual void dirtyLinesFromChangedChild(RenderObject*); 5458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Called to update a style that is allowed to trigger animations. 5478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // FIXME: Right now this will typically be called only when updating happens from the DOM on explicit elements. 5488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The 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). 5498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void setAnimatableStyle(PassRefPtr<RenderStyle>); 5508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Set the style of the object and update the state of the object accordingly. 5528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual void setStyle(PassRefPtr<RenderStyle>); 5538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Updates only the local style ptr of the object. Does not update the state of the object, 5558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // and so only should be called when the style is known not to have changed (or from setStyle). 5568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void setStyleInternal(PassRefPtr<RenderStyle>); 5578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // returns the containing block level element for this element. 5598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project RenderBlock* containingBlock() const; 5608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 561635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project // Convert the given local point to absolute coordinates 562635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project // FIXME: Temporary. If useTransforms is true, take transforms into account. Eventually localToAbsolute() will always be transform-aware. 5632bde8e466a4451c7319e3a072d118917957d6554Steve Block FloatPoint localToAbsolute(const FloatPoint& localPoint = FloatPoint(), bool fixed = false, bool useTransforms = false) const; 5642bde8e466a4451c7319e3a072d118917957d6554Steve Block FloatPoint absoluteToLocal(const FloatPoint&, bool fixed = false, bool useTransforms = false) const; 5658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 566635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project // Convert a local quad to absolute coordinates, taking transforms into account. 567635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project FloatQuad localToAbsoluteQuad(const FloatQuad& quad, bool fixed = false) const 5688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 569635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return localToContainerQuad(quad, 0, fixed); 5708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 571635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project // Convert a local quad into the coordinate system of container, taking transforms into account. 5728f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian FloatQuad localToContainerQuad(const FloatQuad&, RenderBoxModelObject* repaintContainer, bool fixed = false) const; 5738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 574692e5dbf12901edacf14812a6fae25462920af42Steve Block // Return the offset from the container() renderer (excluding transforms). In multi-column layout, 575692e5dbf12901edacf14812a6fae25462920af42Steve Block // different offsets apply at different points, so return the offset that applies to the given point. 576692e5dbf12901edacf14812a6fae25462920af42Steve Block virtual IntSize offsetFromContainer(RenderObject*, const IntPoint&) const; 577231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block // Return the offset from an object up the container() chain. Asserts that none of the intermediate objects have transforms. 578231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block IntSize offsetFromAncestorContainer(RenderObject*) const; 579635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 5805f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian virtual void absoluteRects(Vector<IntRect>&, int, int) { } 581635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project // FIXME: useTransforms should go away eventually 582635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project IntRect absoluteBoundingBoxRect(bool useTransforms = false); 5838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 584635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project // Build an array of quads in absolute coords for line boxes 5855f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian virtual void absoluteQuads(Vector<FloatQuad>&) { } 5868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 587d0825bca7fe65beaee391d30da42e937db621564Steve Block void absoluteFocusRingQuads(Vector<FloatQuad>&); 588d0825bca7fe65beaee391d30da42e937db621564Steve Block 5898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // the rect that will be painted if this object is passed as the paintingRoot 5908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project IntRect paintingRootRect(IntRect& topLevelRect); 5918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 592bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen virtual int minPreferredLogicalWidth() const { return 0; } 593bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen virtual int maxPreferredLogicalWidth() const { return 0; } 5948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project RenderStyle* style() const { return m_style.get(); } 5968f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian RenderStyle* firstLineStyle() const { return document()->usesFirstLineRules() ? firstLineStyleSlowCase() : style(); } 5978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project RenderStyle* style(bool firstLine) const { return firstLine ? firstLineStyle() : style(); } 5980bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 5990bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch // Used only by Element::pseudoStyleCacheIsInvalid to get a first line style based off of a 6000bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch // given new style, without accessing the cache. 6010bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch PassRefPtr<RenderStyle> uncachedFirstLineStyle(RenderStyle*) const; 6020bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 6038f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian // Anonymous blocks that are part of of a continuation chain will return their inline continuation's outline style instead. 6048f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian // This is typically only relevant when repainting. 6058f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian virtual RenderStyle* outlineStyleForRepaint() const { return style(); } 6068f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 6078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void getTextDecorationColors(int decorations, Color& underline, Color& overline, 6088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Color& linethrough, bool quirksMode = false); 6098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 610635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project // Return the RenderBox in the container chain which is responsible for painting this object, or 0 611635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project // if painting is root-relative. This is the container that should be passed to the 'forRepaint' 612635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project // methods. 6138f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian RenderBoxModelObject* containerForRepaint() const; 6148f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian // Actually do the repaint of rect r for this object which has been computed in the coordinate space 6158f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian // of repaintContainer. If repaintContainer is 0, repaint via the view. 6168f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian void repaintUsingContainer(RenderBoxModelObject* repaintContainer, const IntRect& r, bool immediate = false); 617635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 6188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Repaint the entire object. Called when, e.g., the color of a border changes, or when a border 6198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // style changes. 6208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void repaint(bool immediate = false); 6218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Repaint a specific subrectangle within a given object. The rect |r| is in the object's coordinate space. 6238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void repaintRectangle(const IntRect&, bool immediate = false); 6248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 625dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block // Repaint only if our old bounds and new bounds are different. The caller may pass in newBounds and newOutlineBox if they are known. 626dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block bool repaintAfterLayoutIfNeeded(RenderBoxModelObject* repaintContainer, const IntRect& oldBounds, const IntRect& oldOutlineBox, const IntRect* newBoundsPtr = 0, const IntRect* newOutlineBoxPtr = 0); 6278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Repaint only if the object moved. 6298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual void repaintDuringLayoutIfMoved(const IntRect& rect); 6308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Called to repaint a block's floats. 6328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual void repaintOverhangingFloats(bool paintAllDescendants = false); 6338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool checkForRepaintDuringLayout() const; 6358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Returns the rect that should be repainted whenever this object changes. The rect is in the view's 6378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // coordinate space. This method deals with outlines and overflow. 638635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project IntRect absoluteClippedOverflowRect() 639635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project { 640635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return clippedOverflowRectForRepaint(0); 641635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project } 6428f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian virtual IntRect clippedOverflowRectForRepaint(RenderBoxModelObject* repaintContainer); 6438f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian virtual IntRect rectWithOutlineForRepaint(RenderBoxModelObject* repaintContainer, int outlineWidth); 6448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 645635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project // Given a rect in the object's coordinate space, compute a rect suitable for repainting 646635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project // that rect in view coordinates. 647635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project void computeAbsoluteRepaintRect(IntRect& r, bool fixed = false) 648635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project { 6498f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian return computeRectForRepaint(0, r, fixed); 650635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project } 651635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project // Given a rect in the object's coordinate space, compute a rect suitable for repainting 652635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project // that rect in the coordinate space of repaintContainer. 6538f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian virtual void computeRectForRepaint(RenderBoxModelObject* repaintContainer, IntRect&, bool fixed = false); 6548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 655692e5dbf12901edacf14812a6fae25462920af42Steve Block // If multiple-column layout results in applying an offset to the given point, add the same 656692e5dbf12901edacf14812a6fae25462920af42Steve Block // offset to the given size. 657692e5dbf12901edacf14812a6fae25462920af42Steve Block virtual void adjustForColumns(IntSize&, const IntPoint&) const { } 658692e5dbf12901edacf14812a6fae25462920af42Steve Block 6598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual unsigned int length() const { return 1; } 6608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool isFloatingOrPositioned() const { return (isFloating() || isPositioned()); } 6628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool isTransparent() const { return style()->opacity() < 1.0f; } 6648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project float opacity() const { return style()->opacity(); } 6658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool hasReflection() const { return m_hasReflection; } 6678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Applied as a "slop" to dirty rect checks during the outline painting phase's dirty-rect checks. 6698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project int maximalOutlineSize(PaintPhase) const; 6708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6718f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian void setHasMarkupTruncation(bool b = true) { m_hasMarkupTruncation = b; } 6728f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian bool hasMarkupTruncation() const { return m_hasMarkupTruncation; } 6738f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 6748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project enum SelectionState { 6758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project SelectionNone, // The object is not selected. 6768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project SelectionStart, // The object either contains the start of a selection run or is the start of a run 6778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project SelectionInside, // The object is fully encompassed by a selection run 6788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project SelectionEnd, // The object either contains the end of a selection run or is the end of a run 6798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project SelectionBoth // The object contains an entire run or is the sole selected object in that run 6808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project }; 6818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // The current selection state for an object. For blocks, the state refers to the state of the leaf 6838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // descendants (as described above in the SelectionState enum declaration). 6848f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian SelectionState selectionState() const { return static_cast<SelectionState>(m_selectionState);; } 6858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Sets the selection state for an object. 6878f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian virtual void setSelectionState(SelectionState state) { m_selectionState = state; } 6888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // A single rectangle that encompasses all of the selected objects within this object. Used to determine the tightest 6908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // possible bounding box for the selection. 6918f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian IntRect selectionRect(bool clipToVisibleContent = true) { return selectionRectForRepaint(0, clipToVisibleContent); } 6928f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian virtual IntRect selectionRectForRepaint(RenderBoxModelObject* /*repaintContainer*/, bool /*clipToVisibleContent*/ = true) { return IntRect(); } 6938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Whether or not an object can be part of the leaf elements of the selection. 6958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual bool canBeSelectionLeaf() const { return false; } 6968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Whether or not a block has selected children. 6988f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian bool hasSelectedChildren() const { return m_selectionState != SelectionNone; } 6998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Obtains the selection colors that should be used when painting a selection. 7018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Color selectionBackgroundColor() const; 7028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Color selectionForegroundColor() const; 703f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch Color selectionEmphasisMarkColor() const; 7048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Whether or not a given block needs to paint selection gaps. 7068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual bool shouldPaintSelectionGaps() const { return false; } 7078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 708231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#if ENABLE(DRAG_SUPPORT) 7098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Node* draggableNode(bool dhtmlOK, bool uaOK, int x, int y, bool& dhtmlWillDrag) const; 710231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#endif 7118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project /** 713635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * Returns the local coordinates of the caret within this render object. 714635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * @param caretOffset zero-based offset determining position within the render object. 7158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * @param extraWidthToEndOfLine optional out arg to give extra width to end of line - 7168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * useful for character range rect computations 7178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 718635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project virtual IntRect localCaretRect(InlineBox*, int caretOffset, int* extraWidthToEndOfLine = 0); 7198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 720bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen bool isMarginBeforeQuirk() const { return m_marginBeforeQuirk; } 721bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen bool isMarginAfterQuirk() const { return m_marginAfterQuirk; } 722bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen void setMarginBeforeQuirk(bool b = true) { m_marginBeforeQuirk = b; } 723bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen void setMarginAfterQuirk(bool b = true) { m_marginAfterQuirk = b; } 7248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // When performing a global document tear-down, the renderer of the document is cleared. We use this 7268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // as a hook to detect the case of document destruction and don't waste time doing unnecessary work. 7278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool documentBeingDestroyed() const; 7288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual void destroy(); 7308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Virtual function helpers for CSS3 Flexible Box Layout 7328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual bool isFlexibleBox() const { return false; } 7338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual bool isFlexingChildren() const { return false; } 7348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual bool isStretchingChildren() const { return false; } 7358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7362bde8e466a4451c7319e3a072d118917957d6554Steve Block virtual bool isCombineText() const { return false; } 7372bde8e466a4451c7319e3a072d118917957d6554Steve Block 7388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual int caretMinOffset() const; 7398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual int caretMaxOffset() const; 7408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual unsigned caretMaxRenderedOffset() const; 7418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual int previousOffset(int current) const; 7438f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian virtual int previousOffsetForBackwardDeletion(int current) const; 7448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual int nextOffset(int current) const; 7458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 746635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project virtual void imageChanged(CachedImage*, const IntRect* = 0); 747635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project virtual void imageChanged(WrappedImagePtr, const IntRect* = 0) { } 7488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual bool willRenderImage(CachedImage*); 7498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7508f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian void selectionStartEnd(int& spos, int& epos) const; 7518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool hasOverrideSize() const { return m_hasOverrideSize; } 7538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void setHasOverrideSize(bool b) { m_hasOverrideSize = b; } 7548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void remove() { if (parent()) parent()->removeChild(this); } 7568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project AnimationController* animation() const; 7588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 759635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project bool visibleToHitTesting() const { return style()->visibility() == VISIBLE && style()->pointerEvents() != PE_NONE; } 7608f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 7618f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian // Map points and quads through elements, potentially via 3d transforms. You should never need to call these directly; use 7628f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian // localToAbsolute/absoluteToLocal methods instead. 7638f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian virtual void mapLocalToContainer(RenderBoxModelObject* repaintContainer, bool useTransforms, bool fixed, TransformState&) const; 7648f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian virtual void mapAbsoluteToLocalPoint(bool fixed, bool useTransforms, TransformState&) const; 7658f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 7665f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian bool shouldUseTransformFromContainer(const RenderObject* container) const; 7675f1ab04193ad0130ca8204aadaceae083aca9881Feng Qian void getTransformFromContainer(const RenderObject* container, const IntSize& offsetInContainer, TransformationMatrix&) const; 768635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 769d0825bca7fe65beaee391d30da42e937db621564Steve Block virtual void addFocusRingRects(Vector<IntRect>&, int /*tx*/, int /*ty*/) { }; 770635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 771635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project IntRect absoluteOutlineBounds() const 772635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project { 773635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return outlineBoundsForRepaint(0); 774635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project } 775635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 7768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectprotected: 7778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Overrides should call the superclass at the end 7788f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian virtual void styleWillChange(StyleDifference, const RenderStyle* newStyle); 7798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Overrides should call the superclass at the start 7808f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian virtual void styleDidChange(StyleDifference, const RenderStyle* oldStyle); 78105c44efdceb09e0a5066c1f2ae06a5f19fd7fc6cVictoria Lease void propagateStyleToAnonymousChildren(); 7828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7832daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch void drawLineForBoxSide(GraphicsContext*, int x1, int y1, int x2, int y2, BoxSide, 7842daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch Color, EBorderStyle, int adjbw1, int adjbw2, bool antialias = false); 7852daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 786a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch void paintFocusRing(GraphicsContext*, int tx, int ty, RenderStyle*); 787dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block void paintOutline(GraphicsContext*, int tx, int ty, int w, int h); 788635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project void addPDFURLRect(GraphicsContext*, const IntRect&); 789635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 7908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project virtual IntRect viewRect() const; 7918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void adjustRectForOutlineAndShadow(IntRect&) const; 7938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project void arenaDelete(RenderArena*, void* objectBase); 7958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 796dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block virtual IntRect outlineBoundsForRepaint(RenderBoxModelObject* /*repaintContainer*/, IntPoint* /*cachedOffsetToRepaintContainer*/ = 0) const { return IntRect(); } 797635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 7988f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian class LayoutRepainter { 7998f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian public: 8008f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian LayoutRepainter(RenderObject& object, bool checkForRepaint, const IntRect* oldBounds = 0) 8018f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian : m_object(object) 8028f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian , m_repaintContainer(0) 8038f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian , m_checkForRepaint(checkForRepaint) 8048f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian { 8058f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian if (m_checkForRepaint) { 8068f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian m_repaintContainer = m_object.containerForRepaint(); 8078f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian m_oldBounds = oldBounds ? *oldBounds : m_object.clippedOverflowRectForRepaint(m_repaintContainer); 8088f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian m_oldOutlineBox = m_object.outlineBoundsForRepaint(m_repaintContainer); 8098f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian } 8108f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian } 8118f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 8128f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian // Return true if it repainted. 8138f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian bool repaintAfterLayout() 8148f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian { 8158f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian return m_checkForRepaint ? m_object.repaintAfterLayoutIfNeeded(m_repaintContainer, m_oldBounds, m_oldOutlineBox) : false; 8168f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian } 8178f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 8188f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian bool checkForRepaint() const { return m_checkForRepaint; } 8198f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 8208f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian private: 8218f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian RenderObject& m_object; 8228f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian RenderBoxModelObject* m_repaintContainer; 8238f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian IntRect m_oldBounds; 8248f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian IntRect m_oldOutlineBox; 8258f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian bool m_checkForRepaint; 8268f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian }; 8278f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 8288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectprivate: 8298f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian RenderStyle* firstLineStyleSlowCase() const; 8308f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian StyleDifference adjustStyleDifference(StyleDifference, unsigned contextSensitiveProperties) const; 831f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 832f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch Color selectionColor(int colorProperty) const; 8338f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 8348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project RefPtr<RenderStyle> m_style; 8358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 8368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Node* m_node; 8378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 8388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project RenderObject* m_parent; 8398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project RenderObject* m_previous; 8408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project RenderObject* m_next; 8418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 8428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifndef NDEBUG 8438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool m_hasAXObject; 844635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project bool m_setNeedsLayoutForbidden : 1; 8458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 8468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 8478f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian // 32 bits have been used here. THERE ARE NO FREE BITS AVAILABLE. 8488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool m_needsLayout : 1; 8498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool m_needsPositionedMovementLayout :1; 8508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool m_normalChildNeedsLayout : 1; 8518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool m_posChildNeedsLayout : 1; 8522bde8e466a4451c7319e3a072d118917957d6554Steve Block bool m_needsSimplifiedNormalFlowLayout : 1; 853bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen bool m_preferredLogicalWidthsDirty : 1; 8548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool m_floating : 1; 8558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 8568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool m_positioned : 1; 8578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool m_relPositioned : 1; 8588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool m_paintBackground : 1; // if the box has something to paint in the 8598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // background painting phase (background, border, etc) 8608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 8618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool m_isAnonymous : 1; 8628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool m_isText : 1; 863635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project bool m_isBox : 1; 8648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool m_inline : 1; 8658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool m_replaced : 1; 8662bde8e466a4451c7319e3a072d118917957d6554Steve Block bool m_horizontalWritingMode : 1; 8678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool m_isDragging : 1; 8688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 8698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool m_hasLayer : 1; 870e78cbe89e6f337f2f1fe40315be88f742b547151Steve Block bool m_hasOverflowClip : 1; // Set in the case of overflow:auto/scroll/hidden 8718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool m_hasTransform : 1; 8728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool m_hasReflection : 1; 8738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 8748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool m_hasOverrideSize : 1; 8758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 8768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectpublic: 8778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool m_hasCounterNodeMap : 1; 8788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bool m_everHadLayout : 1; 8798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 8808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectprivate: 8818f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian // These bitfields are moved here from subclasses to pack them together 8828f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian // from RenderBlock 8838f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian bool m_childrenInline : 1; 884bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen bool m_marginBeforeQuirk : 1; 885bec39347bb3bb5bf1187ccaf471d26247f28b585Kristian Monsen bool m_marginAfterQuirk : 1; 8868f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian bool m_hasMarkupTruncation : 1; 8878f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian unsigned m_selectionState : 3; // SelectionState 8888f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian bool m_hasColumns : 1; 8898f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 8908f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian // from RenderTableCell 8918f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian bool m_cellWidthChanged : 1; 8928f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 8938f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qianprivate: 8948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Store state between styleWillChange and styleDidChange 8958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project static bool s_affectsParentBlock; 8968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}; 8978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 8988f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qianinline bool RenderObject::documentBeingDestroyed() const 8998f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian{ 9008f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian return !document()->renderer(); 9018f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian} 9028f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 903a94275402997c11dd2e778633dacf4b7e630a35dBen Murdochinline bool RenderObject::isBeforeContent() const 904a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch{ 905a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch if (style()->styleType() != BEFORE) 906a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch return false; 907a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch // Text nodes don't have their own styles, so ignore the style on a text node. 908a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch if (isText() && !isBR()) 909a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch return false; 910a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch return true; 911a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch} 912a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch 913231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockinline bool RenderObject::isAfterContent() const 914231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{ 915231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block if (style()->styleType() != AFTER) 916231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block return false; 917231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block // Text nodes don't have their own styles, so ignore the style on a text node. 918231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block if (isText() && !isBR()) 919231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block return false; 920231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block return true; 921231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block} 922231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 923c58b6b265aa9aca56296a4c1199521fe4ab3cb70Steve Blockinline bool RenderObject::isBeforeOrAfterContent() const 924c58b6b265aa9aca56296a4c1199521fe4ab3cb70Steve Block{ 925c58b6b265aa9aca56296a4c1199521fe4ab3cb70Steve Block return isBeforeContent() || isAfterContent(); 926c58b6b265aa9aca56296a4c1199521fe4ab3cb70Steve Block} 927c58b6b265aa9aca56296a4c1199521fe4ab3cb70Steve Block 9288f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qianinline void RenderObject::setNeedsLayout(bool b, bool markParents) 9298f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian{ 9308f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian bool alreadyNeededLayout = m_needsLayout; 9318f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian m_needsLayout = b; 9328f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian if (b) { 9338f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian ASSERT(!isSetNeedsLayoutForbidden()); 9348f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian if (!alreadyNeededLayout) { 9358f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian if (markParents) 9368f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian markContainingBlocksForLayout(); 9378f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian if (hasLayer()) 9388f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian setLayerNeedsFullRepaint(); 9398f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian } 9408f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian } else { 9418f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian m_everHadLayout = true; 9428f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian m_posChildNeedsLayout = false; 9432bde8e466a4451c7319e3a072d118917957d6554Steve Block m_needsSimplifiedNormalFlowLayout = false; 9448f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian m_normalChildNeedsLayout = false; 9458f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian m_needsPositionedMovementLayout = false; 9468f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian } 9478f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian} 9488f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 9498f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qianinline void RenderObject::setChildNeedsLayout(bool b, bool markParents) 9508f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian{ 9518f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian bool alreadyNeededLayout = m_normalChildNeedsLayout; 9528f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian m_normalChildNeedsLayout = b; 9538f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian if (b) { 9548f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian ASSERT(!isSetNeedsLayoutForbidden()); 9558f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian if (!alreadyNeededLayout && markParents) 9568f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian markContainingBlocksForLayout(); 9578f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian } else { 9588f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian m_posChildNeedsLayout = false; 9592bde8e466a4451c7319e3a072d118917957d6554Steve Block m_needsSimplifiedNormalFlowLayout = false; 9608f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian m_normalChildNeedsLayout = false; 9618f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian m_needsPositionedMovementLayout = false; 9628f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian } 9638f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian} 9648f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 9658f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qianinline void RenderObject::setNeedsPositionedMovementLayout() 9668f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian{ 9672daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch bool alreadyNeededLayout = m_needsPositionedMovementLayout; 9688f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian m_needsPositionedMovementLayout = true; 9692daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch ASSERT(!isSetNeedsLayoutForbidden()); 9708f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian if (!alreadyNeededLayout) { 9718f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian markContainingBlocksForLayout(); 9728f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian if (hasLayer()) 9738f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian setLayerNeedsFullRepaint(); 9748f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian } 9758f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian} 9768f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 9772bde8e466a4451c7319e3a072d118917957d6554Steve Blockinline void RenderObject::setNeedsSimplifiedNormalFlowLayout() 9782bde8e466a4451c7319e3a072d118917957d6554Steve Block{ 9792daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch bool alreadyNeededLayout = m_needsSimplifiedNormalFlowLayout; 9802bde8e466a4451c7319e3a072d118917957d6554Steve Block m_needsSimplifiedNormalFlowLayout = true; 9812daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch ASSERT(!isSetNeedsLayoutForbidden()); 9822bde8e466a4451c7319e3a072d118917957d6554Steve Block if (!alreadyNeededLayout) { 9832bde8e466a4451c7319e3a072d118917957d6554Steve Block markContainingBlocksForLayout(); 9842bde8e466a4451c7319e3a072d118917957d6554Steve Block if (hasLayer()) 9852bde8e466a4451c7319e3a072d118917957d6554Steve Block setLayerNeedsFullRepaint(); 9862bde8e466a4451c7319e3a072d118917957d6554Steve Block } 9872bde8e466a4451c7319e3a072d118917957d6554Steve Block} 9882bde8e466a4451c7319e3a072d118917957d6554Steve Block 9898f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qianinline bool objectIsRelayoutBoundary(const RenderObject *obj) 9908f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian{ 9918f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian // FIXME: In future it may be possible to broaden this condition in order to improve performance. 9928f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian // Table cells are excluded because even when their CSS height is fixed, their height() 9938f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian // may depend on their contents. 9948f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian return obj->isTextControl() 9958f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian || (obj->hasOverflowClip() && !obj->style()->width().isIntrinsicOrAuto() && !obj->style()->height().isIntrinsicOrAuto() && !obj->style()->height().isPercent() && !obj->isTableCell()) 9968f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#if ENABLE(SVG) 9978f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian || obj->isSVGRoot() 9988f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#endif 9998f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian ; 10008f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian} 10018f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 10028f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qianinline void RenderObject::markContainingBlocksForLayout(bool scheduleRelayout, RenderObject* newRoot) 10038f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian{ 10048f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian ASSERT(!scheduleRelayout || !newRoot); 10058f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 10068f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian RenderObject* o = container(); 10078f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian RenderObject* last = this; 10088f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 10092bde8e466a4451c7319e3a072d118917957d6554Steve Block bool simplifiedNormalFlowLayout = needsSimplifiedNormalFlowLayout() && !selfNeedsLayout() && !normalChildNeedsLayout(); 10102bde8e466a4451c7319e3a072d118917957d6554Steve Block 10118f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian while (o) { 10128f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian // Don't mark the outermost object of an unrooted subtree. That object will be 10138f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian // marked when the subtree is added to the document. 10148f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian RenderObject* container = o->container(); 10158f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian if (!container && !o->isRenderView()) 10168f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian return; 10178f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian if (!last->isText() && (last->style()->position() == FixedPosition || last->style()->position() == AbsolutePosition)) { 101854cdeeebc7adcbcd900e8b6a141a8cae27d9a631Steve Block while (o && !o->isRenderBlock()) // Skip relatively positioned inlines and get to the enclosing RenderBlock. 101954cdeeebc7adcbcd900e8b6a141a8cae27d9a631Steve Block o = o->container(); 102054cdeeebc7adcbcd900e8b6a141a8cae27d9a631Steve Block if (!o || o->m_posChildNeedsLayout) 10218f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian return; 10228f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian o->m_posChildNeedsLayout = true; 10232bde8e466a4451c7319e3a072d118917957d6554Steve Block simplifiedNormalFlowLayout = true; 10242bde8e466a4451c7319e3a072d118917957d6554Steve Block ASSERT(!o->isSetNeedsLayoutForbidden()); 10252bde8e466a4451c7319e3a072d118917957d6554Steve Block } else if (simplifiedNormalFlowLayout) { 10262bde8e466a4451c7319e3a072d118917957d6554Steve Block if (o->m_needsSimplifiedNormalFlowLayout) 10272bde8e466a4451c7319e3a072d118917957d6554Steve Block return; 10282bde8e466a4451c7319e3a072d118917957d6554Steve Block o->m_needsSimplifiedNormalFlowLayout = true; 10298f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian ASSERT(!o->isSetNeedsLayoutForbidden()); 10308f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian } else { 10318f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian if (o->m_normalChildNeedsLayout) 10328f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian return; 10338f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian o->m_normalChildNeedsLayout = true; 10348f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian ASSERT(!o->isSetNeedsLayoutForbidden()); 10358f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian } 10368f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 10378f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian if (o == newRoot) 10388f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian return; 10398f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 10408f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian last = o; 10418f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian if (scheduleRelayout && objectIsRelayoutBoundary(last)) 10428f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian break; 10438f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian o = container; 10448f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian } 10458f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 10468f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian if (scheduleRelayout) 10478f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian last->scheduleRelayout(); 10488f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian} 10498f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 10502daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochinline bool RenderObject::preservesNewline() const 10512daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch{ 10522daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#if ENABLE(SVG) 10532daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch if (isSVGInlineText()) 10542daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch return false; 10552daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#endif 10562daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 10572daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch return style()->preserveNewline(); 10582daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch} 10592daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 10600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdochinline void makeMatrixRenderable(TransformationMatrix& matrix, bool has3DRendering) 10618f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian{ 10628f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#if !ENABLE(3D_RENDERING) 10630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch UNUSED_PARAM(has3DRendering); 10648f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian matrix.makeAffine(); 10658f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#else 10660bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!has3DRendering) 10670bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch matrix.makeAffine(); 10688f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian#endif 10698f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian} 10708f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian 1071231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockinline int adjustForAbsoluteZoom(int value, RenderObject* renderer) 1072231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{ 107368513a70bcd92384395513322f1b801e7bf9c729Steve Block return adjustForAbsoluteZoom(value, renderer->style()); 1074231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block} 1075231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 1076231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockinline FloatPoint adjustFloatPointForAbsoluteZoom(const FloatPoint& point, RenderObject* renderer) 1077231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{ 1078231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block // The result here is in floats, so we don't need the truncation hack from the integer version above. 1079231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block float zoomFactor = renderer->style()->effectiveZoom(); 1080231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block if (zoomFactor == 1) 1081231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block return point; 1082231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block return FloatPoint(point.x() / zoomFactor, point.y() / zoomFactor); 1083231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block} 1084231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 1085231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockinline void adjustFloatQuadForAbsoluteZoom(FloatQuad& quad, RenderObject* renderer) 1086231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{ 1087231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block quad.setP1(adjustFloatPointForAbsoluteZoom(quad.p1(), renderer)); 1088231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block quad.setP2(adjustFloatPointForAbsoluteZoom(quad.p2(), renderer)); 1089231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block quad.setP3(adjustFloatPointForAbsoluteZoom(quad.p3(), renderer)); 1090231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block quad.setP4(adjustFloatPointForAbsoluteZoom(quad.p4(), renderer)); 1091231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block} 1092231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 1093f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochinline void adjustFloatRectForAbsoluteZoom(FloatRect& rect, RenderObject* renderer) 1094f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch{ 1095f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch RenderStyle* style = renderer->style(); 1096f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch rect.setX(adjustFloatForAbsoluteZoom(rect.x(), style)); 1097f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch rect.setY(adjustFloatForAbsoluteZoom(rect.y(), style)); 1098f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch rect.setWidth(adjustFloatForAbsoluteZoom(rect.width(), style)); 1099f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch rect.setHeight(adjustFloatForAbsoluteZoom(rect.height(), style)); 1100f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch} 1101f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 11022daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochinline FloatPoint adjustFloatPointForPageScale(const FloatPoint& point, float pageScale) 11032daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch{ 11042daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch if (pageScale == 1) 11052daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch return point; 11062daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch return FloatPoint(point.x() / pageScale, point.y() / pageScale); 11072daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch} 11082daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 11092daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochinline void adjustFloatQuadForPageScale(FloatQuad& quad, float pageScale) 11102daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch{ 11112daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch if (pageScale == 1) 11122daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch return; 11132daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch quad.setP1(adjustFloatPointForPageScale(quad.p1(), pageScale)); 11142daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch quad.setP2(adjustFloatPointForPageScale(quad.p2(), pageScale)); 11152daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch quad.setP3(adjustFloatPointForPageScale(quad.p3(), pageScale)); 11162daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch quad.setP4(adjustFloatPointForPageScale(quad.p4(), pageScale)); 11172daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch} 11182daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 11192daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochinline void adjustFloatRectForPageScale(FloatRect& rect, float pageScale) 11202daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch{ 11212daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch if (pageScale == 1) 11222daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch return; 11232daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch rect.setX(rect.x() / pageScale); 11242daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch rect.setY(rect.y() / pageScale); 11252daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch rect.setWidth(rect.width() / pageScale); 11262daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch rect.setHeight(rect.height() / pageScale); 11272daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch} 11282daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch 11298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} // namespace WebCore 11308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 11318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifndef NDEBUG 11328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// Outside the WebCore namespace for ease of invocation from gdb. 11338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid showTree(const WebCore::RenderObject*); 1134643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockvoid showRenderTree(const WebCore::RenderObject* object1); 1135643ca7872b450ea4efacab6188849e5aac2ba161Steve Block// We don't make object2 an optional parameter so that showRenderTree 1136643ca7872b450ea4efacab6188849e5aac2ba161Steve Block// can be called from gdb easily. 1137643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockvoid showRenderTree(const WebCore::RenderObject* object1, const WebCore::RenderObject* object2); 11388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 11398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 11408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif // RenderObject_h 1141